#!/usr/bin/env ruby # frozen_string_literal: true require 'csv' require 'rspec_profiling' require 'postgres-copy' module RspecProfiling module Collectors class PSQL def establish_connection # This disables the automatic creation of the database and # table. In the future, we may want a way to specify the host of # the database to connect so that we can call #install. Result.establish_connection(results_url) # rubocop: disable Database/EstablishConnection end def results_url ENV['RSPEC_PROFILING_POSTGRES_URL'] end class Result < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord acts_as_copy_target end end end end def insert_data(path) puts "#{Time.now} Inserting CI stats..." collector = RspecProfiling::Collectors::PSQL.new collector.install files = Dir[File.join(path, "*.csv")] files.each do |filename| puts "#{Time.now} Inserting #{filename}..." # Strip file of NULL bytes to ensure data gets inserted system("sed", "-i", "-e", "s/\\x00//g", filename) result = RspecProfiling::Collectors::PSQL::Result.copy_from(filename) puts "#{Time.now} Inserted #{result.cmd_tuples} lines in #{filename}, DB response: #{result.cmd_status}" end end insert_data(ENV['RSPEC_PROFILING_FOLDER_PATH']) if ENV['RSPEC_PROFILING_POSTGRES_URL'].present?