themis-checker-server 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/themis/checker/server.rb +53 -17
  3. metadata +22 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fdf356f5322629749d3234c1743645aeac7311a2
4
- data.tar.gz: d2fea9e5e581f1638273fb9c69b02545776973d1
3
+ metadata.gz: f81106006a84660b0a4c4de2146921dffb385f96
4
+ data.tar.gz: c74978d6bf3d9c1db199958b154248b53abf78ed
5
5
  SHA512:
6
- metadata.gz: 1e447789d8308510eeb12a0c65c98fe8aacb2016ad76fe94f5fa79cd0becda1aa606fc47f5b7673a8c4704a228de095eec8c4fd66bc9ae25f23e49bd368442b5
7
- data.tar.gz: d6ca9e3889e09a6082222ea26dbaf42b1dc850b8c8a45bc464c5c50f988cf562a6661988706156149ac5ac5ae428e3e43e4677b6b98d1cbcb1ed7ac397469da5
6
+ metadata.gz: e9271965c19aec3aea6781860f968c6e09ab9afd9b3f6f41b1cab171f966917113486577632ae0c23cc2571f86313c97645eda66eef004e497a680fa4950658c
7
+ data.tar.gz: 90f2aa21f00f8cbac2a9d09ae3340c5bd22ebf39261867e29b34e62305be26a0f120a2278431f697f76623e2b4f59c9221438bafc840fe1c9dee68feca5e9f9d
@@ -2,6 +2,9 @@ require 'logger'
2
2
  require 'json'
3
3
  require 'beaneater'
4
4
  require 'themis/checker/result'
5
+ require 'base64'
6
+ require 'date'
7
+ require 'time_difference'
5
8
 
6
9
 
7
10
  module Themis
@@ -22,35 +25,68 @@ module Themis
22
25
 
23
26
  case job_data['operation']
24
27
  when 'push'
25
- status, flag_id = self.internal_push(
28
+ metadata = job_data['metadata']
29
+ timestamp_created = DateTime.iso8601 metadata['timestamp']
30
+ timestamp_delivered = DateTime.now
31
+
32
+ status, updated_adjunct = self.internal_push(
26
33
  job_data['endpoint'],
27
- job_data['flag_id'],
28
- job_data['flag']
34
+ job_data['flag'],
35
+ Base64.decode64(job_data['adjunct']),
36
+ metadata
29
37
  )
30
38
 
39
+ timestamp_processed = DateTime.now
40
+
31
41
  job_result = {
32
42
  operation: job_data['operation'],
33
43
  status: status,
34
44
  flag: job_data['flag'],
35
- flag_id: flag_id,
36
- endpoint: job_data['endpoint']
45
+ adjunct: Base64.encode64(updated_adjunct)
37
46
  }
38
47
 
39
- @logger.info "PUSH flag #{job_data['flag']} to #{job_data['endpoint']}: result #{status}, flag_id #{flag_id}"
48
+ @logger.info('PUSH flag `%s` /%d to `%s`@`%s` (%s) status %s, adjunct `%s` [delivery %.2fs, processing %.2fs]' % [
49
+ job_data['flag'],
50
+ metadata['round'],
51
+ metadata['service_name'],
52
+ metadata['team_name'],
53
+ job_data['endpoint'],
54
+ Themis::Checker::Result.key(status),
55
+ job_result[:adjunct],
56
+ TimeDifference.between(timestamp_created, timestamp_delivered).in_seconds,
57
+ TimeDifference.between(timestamp_delivered, timestamp_processed).in_seconds
58
+ ])
40
59
  when 'pull'
60
+ metadata = job_data['metadata']
61
+ timestamp_created = DateTime.iso8601 metadata['timestamp']
62
+ timestamp_delivered = DateTime.now
63
+
41
64
  status = self.internal_pull(
42
65
  job_data['endpoint'],
43
- job_data['flag_id'],
44
- job_data['flag']
66
+ job_data['flag'],
67
+ Base64.decode64(job_data['adjunct']),
68
+ job_data['metadata']
45
69
  )
46
70
 
71
+ timestamp_processed = DateTime.now
72
+
47
73
  job_result = {
48
74
  operation: job_data['operation'],
49
75
  request_id: job_data['request_id'],
50
76
  status: status
51
77
  }
52
78
 
53
- @logger.info "PULL flag #{job_data['flag']} from #{job_data['endpoint']} with flag_id #{job_data['flag_id']}: result #{status}"
79
+ @logger.info('PULL flag `%s` /%d from `%s`@`%s` (%s) with adjunct `%s` — status %s [delivery %.2fs, processing %.2fs]' % [
80
+ job_data['flag'],
81
+ metadata['round'],
82
+ metadata['service_name'],
83
+ metadata['team_name'],
84
+ job_data['endpoint'],
85
+ job_data['adjunct'],
86
+ Themis::Checker::Result.key(status),
87
+ TimeDifference.between(timestamp_created, timestamp_delivered).in_seconds,
88
+ TimeDifference.between(timestamp_delivered, timestamp_processed).in_seconds
89
+ ])
54
90
  else
55
91
  @logger.warn 'Unknown job!'
56
92
  end
@@ -70,11 +106,11 @@ module Themis
70
106
  @logger.info 'Disconnected from beanstalk server'
71
107
  end
72
108
 
73
- def push(endpoint, flag_id, flag)
109
+ def push(endpoint, flag, adjunct, metadata)
74
110
  raise NotImplementedError, 'Push flag logic not implemented!'
75
111
  end
76
112
 
77
- def pull(endpoint, flag_id, flag)
113
+ def pull(endpoint, flag, adjunct, metadata)
78
114
  raise NotImplementedError, 'Pull flag logic not implemented!'
79
115
  end
80
116
 
@@ -110,10 +146,10 @@ module Themis
110
146
  logger
111
147
  end
112
148
 
113
- def internal_push(endpoint, flag_id, flag)
114
- result, new_flag_id = Themis::Checker::Result::INTERNAL_ERROR, flag_id
149
+ def internal_push(endpoint, flag, adjunct, metadata)
150
+ result, updated_adjunct = Themis::Checker::Result::INTERNAL_ERROR, adjunct
115
151
  begin
116
- result, new_flag_id = self.push endpoint, flag_id, flag
152
+ result, updated_adjunct = self.push endpoint, flag, adjunct, metadata
117
153
  rescue Interrupt
118
154
  raise
119
155
  rescue Exception => e
@@ -121,13 +157,13 @@ module Themis
121
157
  e.backtrace.each { |line| @logger.error line }
122
158
  end
123
159
 
124
- return result, new_flag_id
160
+ return result, updated_adjunct
125
161
  end
126
162
 
127
- def internal_pull(endpoint, flag_id, flag)
163
+ def internal_pull(endpoint, flag, adjunct, metadata)
128
164
  result = Themis::Checker::Result::INTERNAL_ERROR
129
165
  begin
130
- result = self.pull endpoint, flag_id, flag
166
+ result = self.pull endpoint, flag, adjunct, metadata
131
167
  rescue Interrupt
132
168
  raise
133
169
  rescue Exception => e
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: themis-checker-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Pyatkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-15 00:00:00.000000000 Z
11
+ date: 2016-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: beaneater
@@ -42,16 +42,30 @@ dependencies:
42
42
  name: themis-checker-result
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 1.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 1.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: time_difference
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.4.2
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  description: Service checker base class for Themis contest checking system
84
- email: asp@thexyz.net
98
+ email: aspyatkin@gmail.com
85
99
  executables: []
86
100
  extensions: []
87
101
  extra_rdoc_files: []
@@ -107,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
121
  version: '0'
108
122
  requirements: []
109
123
  rubyforge_project:
110
- rubygems_version: 2.4.5
124
+ rubygems_version: 2.5.1
111
125
  signing_key:
112
126
  specification_version: 4
113
127
  summary: Themis::Checker::Server