18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/themis/checker/server.rb', line 18
def run
@beanstalk = Beaneater.new ENV['BEANSTALKD_URI']
@logger.info 'Connected to beanstalk server'
@beanstalk.jobs.register ENV['TUBE_LISTEN'] do |job|
job_data = JSON.parse job.body
job_result = nil
case job_data['operation']
when 'push'
metadata = job_data['metadata']
timestamp_created = DateTime.iso8601 metadata['timestamp']
timestamp_delivered = DateTime.now
status, updated_adjunct = self.internal_push(
job_data['endpoint'],
job_data['flag'],
Base64.decode64(job_data['adjunct']),
metadata
)
timestamp_processed = DateTime.now
job_result = {
operation: job_data['operation'],
status: status,
flag: job_data['flag'],
adjunct: Base64.encode64(updated_adjunct)
}
@logger.info('PUSH flag `%s` /%d to `%s`@`%s` (%s) — status %s, adjunct `%s` [delivery %.2fs, processing %.2fs]' % [
job_data['flag'],
metadata['round'],
metadata['service_name'],
metadata['team_name'],
job_data['endpoint'],
Themis::Checker::Result.key(status),
job_result[:adjunct],
TimeDifference.between(timestamp_created, timestamp_delivered).in_seconds,
TimeDifference.between(timestamp_delivered, timestamp_processed).in_seconds
])
when 'pull'
metadata = job_data['metadata']
timestamp_created = DateTime.iso8601 metadata['timestamp']
timestamp_delivered = DateTime.now
status = self.internal_pull(
job_data['endpoint'],
job_data['flag'],
Base64.decode64(job_data['adjunct']),
job_data['metadata']
)
timestamp_processed = DateTime.now
job_result = {
operation: job_data['operation'],
request_id: job_data['request_id'],
status: status
}
@logger.info('PULL flag `%s` /%d from `%s`@`%s` (%s) with adjunct `%s` — status %s [delivery %.2fs, processing %.2fs]' % [
job_data['flag'],
metadata['round'],
metadata['service_name'],
metadata['team_name'],
job_data['endpoint'],
job_data['adjunct'],
Themis::Checker::Result.key(status),
TimeDifference.between(timestamp_created, timestamp_delivered).in_seconds,
TimeDifference.between(timestamp_delivered, timestamp_processed).in_seconds
])
else
@logger.warn 'Unknown job!'
end
unless job_result.nil?
report_tube = @beanstalk.tubes[ENV['TUBE_REPORT']]
report_tube.put job_result.to_json
end
end
begin
@beanstalk.jobs.process!
rescue Interrupt
@logger.info 'Received shutdown signal'
end
@beanstalk.close
@logger.info 'Disconnected from beanstalk server'
end
|