themis-checker-server 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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