require 'pathname' require 'thor' require 'tmpdir' require 'debci' require 'debci/amqp' require 'debci/html' require 'debci/job' module Debci class Collector def run channel = Debci::AMQP.amqp_channel queue = Debci::AMQP.results_queue queue.subscribe(manual_ack: true) do |delivery_info, _properties, payload| Dir.mktmpdir do |dir| Dir.chdir(dir) do results = Pathname('results.tar.gz') results.open('wb') do |f| f.write(payload) end system("tar xaf #{results}") results.unlink end results_dir = Pathname(dir).glob('**/exitcode').first.parent receive(results_dir) channel.acknowledge(delivery_info.delivery_tag, false) end end begin loop { sleep 1 } rescue Interrupt puts puts "debci collector stopped" end end def receive(directory) job = Debci::Job.receive(directory) Debci::HTML.update_package(job.package) data = job.attributes.symbolize_keys data[:duration_human] = job.duration_human Debci.log('%<package>s %<suite>s/%<arch>s %<status>s %<duration_human>s' % data) end class CLI < Thor desc 'run', 'Runs the debci results collector' def start Collector.new.run end default_task :start end end end