Sha256: d64b1a1cc72020fe2df4633a3a33c3438290d8d60c94a8fcc6e686ac5b8ee0e4

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

require 'evrone/ci/message'

module Evrone
  module CI
    module Worker

      UpdateJobStatus = Struct.new(:app) do

        include Helper::Logger

        STARTED  = 2
        FINISHED = 3
        BROKEN   = 4
        FAILED   = 5

        def call(env)

          update_status env.job, STARTED
          rs = -1
          begin
            rs = app.call env
          rescue Exception => e
            env.job.add_to_output("ERROR: #{e.inspect}\n")
            logger.error("ERROR: #{e.inspect}\n    BACKTRACE:\n#{e.backtrace.map{|i| "    #{i}" }.join("\n")}")
          end

          msg = "\nDone. Your build exited with %s.\n"
          env.job.add_to_output(msg % rs.abs)

          case
          when rs == 0
            update_status env.job, FINISHED
          when rs > 0
            update_status env.job, BROKEN
          when rs < 0
            update_status env.job, FAILED
          end

          rs
        end

        private

          def update_status(job, status)
            publish_status create_message(job, status)
          end

          def create_message(job, status)
            tm = Time.now
            Message::JobStatus.new(
              build_id: job.message.id,
              job_id:   job.message.job_id,
              status:   status,
              tm:       tm.to_i,
              tm_usec:  tm.usec,
              matrix:   job.message.matrix_keys
            )
          end

          def publish_status(message)
            logger.info "delivered job status #{message.inspect}"
            JobStatusConsumer.publish message
          end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
evrone-ci-worker-0.2.0.pre3 lib/evrone/ci/worker/middlewares/update_job_status.rb