themis-checker-server 1.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.
- checksums.yaml +7 -0
- data/lib/themis/checker/server.rb +142 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fdf356f5322629749d3234c1743645aeac7311a2
|
4
|
+
data.tar.gz: d2fea9e5e581f1638273fb9c69b02545776973d1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1e447789d8308510eeb12a0c65c98fe8aacb2016ad76fe94f5fa79cd0becda1aa606fc47f5b7673a8c4704a228de095eec8c4fd66bc9ae25f23e49bd368442b5
|
7
|
+
data.tar.gz: d6ca9e3889e09a6082222ea26dbaf42b1dc850b8c8a45bc464c5c50f988cf562a6661988706156149ac5ac5ae428e3e43e4677b6b98d1cbcb1ed7ac397469da5
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'json'
|
3
|
+
require 'beaneater'
|
4
|
+
require 'themis/checker/result'
|
5
|
+
|
6
|
+
|
7
|
+
module Themis
|
8
|
+
module Checker
|
9
|
+
class Server
|
10
|
+
def initialize
|
11
|
+
@logger = self.get_logger
|
12
|
+
@beanstalk = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
@beanstalk = Beaneater.new ENV['BEANSTALKD_URI']
|
17
|
+
@logger.info 'Connected to beanstalk server'
|
18
|
+
|
19
|
+
@beanstalk.jobs.register ENV['TUBE_LISTEN'] do |job|
|
20
|
+
job_data = JSON.parse job.body
|
21
|
+
job_result = nil
|
22
|
+
|
23
|
+
case job_data['operation']
|
24
|
+
when 'push'
|
25
|
+
status, flag_id = self.internal_push(
|
26
|
+
job_data['endpoint'],
|
27
|
+
job_data['flag_id'],
|
28
|
+
job_data['flag']
|
29
|
+
)
|
30
|
+
|
31
|
+
job_result = {
|
32
|
+
operation: job_data['operation'],
|
33
|
+
status: status,
|
34
|
+
flag: job_data['flag'],
|
35
|
+
flag_id: flag_id,
|
36
|
+
endpoint: job_data['endpoint']
|
37
|
+
}
|
38
|
+
|
39
|
+
@logger.info "PUSH flag #{job_data['flag']} to #{job_data['endpoint']}: result #{status}, flag_id #{flag_id}"
|
40
|
+
when 'pull'
|
41
|
+
status = self.internal_pull(
|
42
|
+
job_data['endpoint'],
|
43
|
+
job_data['flag_id'],
|
44
|
+
job_data['flag']
|
45
|
+
)
|
46
|
+
|
47
|
+
job_result = {
|
48
|
+
operation: job_data['operation'],
|
49
|
+
request_id: job_data['request_id'],
|
50
|
+
status: status
|
51
|
+
}
|
52
|
+
|
53
|
+
@logger.info "PULL flag #{job_data['flag']} from #{job_data['endpoint']} with flag_id #{job_data['flag_id']}: result #{status}"
|
54
|
+
else
|
55
|
+
@logger.warn 'Unknown job!'
|
56
|
+
end
|
57
|
+
|
58
|
+
unless job_result.nil?
|
59
|
+
report_tube = @beanstalk.tubes[ENV['TUBE_REPORT']]
|
60
|
+
report_tube.put job_result.to_json
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
begin
|
65
|
+
@beanstalk.jobs.process!
|
66
|
+
rescue Interrupt
|
67
|
+
@logger.info 'Received shutdown signal'
|
68
|
+
end
|
69
|
+
@beanstalk.close
|
70
|
+
@logger.info 'Disconnected from beanstalk server'
|
71
|
+
end
|
72
|
+
|
73
|
+
def push(endpoint, flag_id, flag)
|
74
|
+
raise NotImplementedError, 'Push flag logic not implemented!'
|
75
|
+
end
|
76
|
+
|
77
|
+
def pull(endpoint, flag_id, flag)
|
78
|
+
raise NotImplementedError, 'Pull flag logic not implemented!'
|
79
|
+
end
|
80
|
+
|
81
|
+
protected
|
82
|
+
def get_logger
|
83
|
+
logger = ::Logger.new STDOUT
|
84
|
+
|
85
|
+
# Setup log formatter
|
86
|
+
logger.datetime_format = '%Y-%m-%d %H:%M:%S'
|
87
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
88
|
+
"[#{datetime}] #{severity} -- #{msg}\n"
|
89
|
+
end
|
90
|
+
|
91
|
+
$stdout.sync = ENV['STDOUT_SYNC'] == 'true'
|
92
|
+
|
93
|
+
# Setup log level
|
94
|
+
case ENV['LOG_LEVEL']
|
95
|
+
when 'DEBUG'
|
96
|
+
logger.level = ::Logger::DEBUG
|
97
|
+
when 'INFO'
|
98
|
+
logger.level = ::Logger::INFO
|
99
|
+
when 'WARN'
|
100
|
+
logger.level = ::Logger::WARN
|
101
|
+
when 'ERROR'
|
102
|
+
logger.level = ::Logger::ERROR
|
103
|
+
when 'FATAL'
|
104
|
+
logger.level = ::Logger::FATAL
|
105
|
+
when 'UNKNOWN'
|
106
|
+
logger.level = ::Logger::UNKNOWN
|
107
|
+
else
|
108
|
+
logger.level = ::Logger::INFO
|
109
|
+
end
|
110
|
+
logger
|
111
|
+
end
|
112
|
+
|
113
|
+
def internal_push(endpoint, flag_id, flag)
|
114
|
+
result, new_flag_id = Themis::Checker::Result::INTERNAL_ERROR, flag_id
|
115
|
+
begin
|
116
|
+
result, new_flag_id = self.push endpoint, flag_id, flag
|
117
|
+
rescue Interrupt
|
118
|
+
raise
|
119
|
+
rescue Exception => e
|
120
|
+
@logger.error e.message
|
121
|
+
e.backtrace.each { |line| @logger.error line }
|
122
|
+
end
|
123
|
+
|
124
|
+
return result, new_flag_id
|
125
|
+
end
|
126
|
+
|
127
|
+
def internal_pull(endpoint, flag_id, flag)
|
128
|
+
result = Themis::Checker::Result::INTERNAL_ERROR
|
129
|
+
begin
|
130
|
+
result = self.pull endpoint, flag_id, flag
|
131
|
+
rescue Interrupt
|
132
|
+
raise
|
133
|
+
rescue Exception => e
|
134
|
+
@logger.error e.message
|
135
|
+
e.backtrace.each { |line| @logger.error line }
|
136
|
+
end
|
137
|
+
|
138
|
+
result
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: themis-checker-server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Pyatkin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: beaneater
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: themis-checker-result
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Service checker base class for Themis contest checking system
|
84
|
+
email: asp@thexyz.net
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- lib/themis/checker/server.rb
|
90
|
+
homepage: http://github.com/aspyatkin/themis-checker-server
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '2.0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 2.4.5
|
111
|
+
signing_key:
|
112
|
+
specification_version: 4
|
113
|
+
summary: Themis::Checker::Server
|
114
|
+
test_files: []
|