upman-daemon 0.0.8.4 → 0.0.8.5
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 +4 -4
- data/lib/upman.rb +5 -0
- data/lib/upman/core/register.rb +16 -49
- data/lib/upman/core/worker.rb +26 -9
- data/lib/upman/extensions/get_install_history.rb +7 -48
- data/lib/upman/extensions/get_installed_packages.rb +7 -16
- data/lib/upman/extensions/install_package.rb +23 -7
- data/lib/upman/extensions/ping.rb +5 -0
- data/lib/upman/server/base_servlet.rb +83 -64
- data/lib/upman/services/install_history.rb +54 -0
- data/lib/upman/services/installed_packages.rb +24 -0
- data/lib/upman/services/node.rb +49 -0
- data/lib/upman/utils/api.rb +6 -2
- data/lib/upman/worker/base_worker.rb +17 -0
- data/lib/upman/worker/report_install_history.rb +28 -0
- data/lib/upman/worker/report_installed_packages.rb +28 -0
- data/lib/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b51d88026c608d0d4eb752780f0d44c611789e8cbf177fc818800a1447121249
|
4
|
+
data.tar.gz: b9d3627a649d7e69f4b012ebd0a3328d63957e59c115396e2c4d06832d260645
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eeb4c315bbc741bd15dbe860f4546255f774b5263a93fcc864e2d04cdbb330346b96bee953dbbf4fdee7bea18821a74abb27746eff68a7bac3a2e55197affef3
|
7
|
+
data.tar.gz: 3ae68734a94fb756a63a0cc2cf6576a8593401e63d67b3ef0382798e7ee25b017b7bd67b897ba9bc871060edb462bc4264f181f0ada64c24bdfbc0d1712bc551
|
data/lib/upman.rb
CHANGED
@@ -15,10 +15,15 @@ require_relative 'upman/core/config'
|
|
15
15
|
require_relative 'upman/core/extension_base'
|
16
16
|
require_relative 'upman/core/worker'
|
17
17
|
|
18
|
+
require_relative 'upman/services/node'
|
19
|
+
require_relative 'upman/services/install_history'
|
20
|
+
require_relative 'upman/services/installed_packages'
|
18
21
|
|
19
22
|
require_relative 'upman/server/socket'
|
20
23
|
require_relative 'upman/server/base_servlet'
|
21
24
|
|
25
|
+
require_relative 'upman/worker/base_worker'
|
26
|
+
|
22
27
|
module Upman
|
23
28
|
def self.run!(options)
|
24
29
|
config_file = nil
|
data/lib/upman/core/register.rb
CHANGED
@@ -1,50 +1,17 @@
|
|
1
|
-
module Upman
|
2
|
-
module Core
|
3
|
-
class Register
|
4
|
-
include ::Upman::Utils::Helper
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
info "Register Daemon running on #{data[:hostname]} with foreman_upman"
|
18
|
-
|
19
|
-
api = ::Upman::Utils::Api.new
|
20
|
-
api.post("upman/node/register", data.to_json)
|
21
|
-
end
|
22
|
-
|
23
|
-
def generate_host_data
|
24
|
-
unless File.exist? @hostdata_file
|
25
|
-
data = {
|
26
|
-
:hostname => Socket.gethostbyname(Socket.gethostname).first,
|
27
|
-
:uuid => SecureRandom.uuid,
|
28
|
-
}
|
29
|
-
File.write(@hostdata_file, data.to_yaml)
|
30
|
-
end
|
31
|
-
update_node_data
|
32
|
-
end
|
33
|
-
|
34
|
-
def update_node_data
|
35
|
-
if File.exist? @hostdata_file
|
36
|
-
data = YAML::load_file(@hostdata_file).deep_symbolize_keys
|
37
|
-
data.merge!({
|
38
|
-
:operatingsystem => Facter['operatingsystem'].value,
|
39
|
-
:rubyversion => Facter['rubyversion'].value,
|
40
|
-
:operatingsystemrelease => Facter['operatingsystemrelease'].value,
|
41
|
-
:last_sync => DateTime.now
|
42
|
-
})
|
43
|
-
File.write(@hostdata_file, data.to_yaml)
|
44
|
-
end
|
45
|
-
data
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
1
|
+
module Upman
|
2
|
+
module Core
|
3
|
+
class Register
|
4
|
+
include ::Upman::Utils::Helper
|
5
|
+
|
6
|
+
def perform
|
7
|
+
node_service = Upman::Service::Node.new
|
8
|
+
data = node_service.generate_node_data
|
9
|
+
info "Register Daemon running on #{data[:hostname]} with foreman_upman"
|
10
|
+
|
11
|
+
api = ::Upman::Utils::Api.new
|
12
|
+
api.post("upman/node/register", data.to_json)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
50
17
|
end
|
data/lib/upman/core/worker.rb
CHANGED
@@ -3,33 +3,50 @@ module Upman
|
|
3
3
|
class Worker
|
4
4
|
|
5
5
|
include Upman::Utils::Helper
|
6
|
+
include Upman::Utils::Dynload
|
7
|
+
|
8
|
+
attr_accessor :workers, :worker_threads
|
6
9
|
|
7
10
|
def initialize
|
8
11
|
@stop_signal = true
|
12
|
+
@config = ::Upman::Core::Config.daemon
|
13
|
+
@workers = []
|
14
|
+
@worker_threads = []
|
15
|
+
|
16
|
+
register_worker
|
9
17
|
end
|
10
18
|
|
11
19
|
def run!
|
12
|
-
|
13
|
-
while @stop_signal
|
14
|
-
self.perform
|
15
|
-
sleep(::Upman::Core::Config.daemon[:interval])
|
16
|
-
end
|
20
|
+
show_banner
|
17
21
|
|
22
|
+
@workers.each do |worker|
|
23
|
+
@worker_threads << Thread.new do
|
24
|
+
worker.run!
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@worker_threads.each { |t| t.join }
|
18
28
|
end
|
19
29
|
|
20
30
|
def shutdown
|
21
|
-
info "Stopping
|
31
|
+
info "Stopping Worker Threads"
|
22
32
|
@stop_signal = false
|
23
33
|
end
|
24
34
|
|
25
35
|
|
26
|
-
def
|
27
|
-
|
36
|
+
def register_worker
|
37
|
+
@config[:workers].each do |worker|
|
38
|
+
require_relative "../../upman/worker/#{worker}"
|
39
|
+
ext_obj = dynload("Upman::Worker::#{worker.split('_').map(&:capitalize).join('')}")
|
40
|
+
info "Register Worker Thread Upman::Worker::#{worker.split('_').map(&:capitalize).join('')}"
|
41
|
+
ext_class = ext_obj .new
|
42
|
+
@workers.append ext_class.register
|
43
|
+
end
|
28
44
|
end
|
29
45
|
|
46
|
+
|
30
47
|
private
|
31
48
|
|
32
|
-
def
|
49
|
+
def show_banner
|
33
50
|
info "Running UpMan #{::Upman::Version::VERSION}"
|
34
51
|
end
|
35
52
|
|
@@ -23,6 +23,11 @@ module Upman
|
|
23
23
|
|
24
24
|
super(request, response)
|
25
25
|
|
26
|
+
unless is_authenticated(request)
|
27
|
+
response = not_authorized(response, "Request declined")
|
28
|
+
return response
|
29
|
+
end
|
30
|
+
|
26
31
|
unless (@param_since = get_param('since', 'date', false))
|
27
32
|
return nil
|
28
33
|
end
|
@@ -33,56 +38,10 @@ module Upman
|
|
33
38
|
end
|
34
39
|
|
35
40
|
def perform_action
|
36
|
-
|
37
|
-
|
38
|
-
hist_lines = fetch_history.split("\n")
|
39
|
-
hist_lines.each do |history|
|
40
|
-
fill_up(result, i, hist_lines, history) if i.even?
|
41
|
-
i += 1
|
42
|
-
end
|
43
|
-
result.to_json
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def fetch_history
|
49
|
-
command = '(zcat $(ls -tr /var/log/apt/history.log*.gz); '\
|
50
|
-
'cat /var/log/apt/history.log) ' \
|
51
|
-
'2>/dev/null | egrep \'^(Start-Date:|Commandline:)\' | '\
|
52
|
-
'grep -v aptdaemon'
|
53
|
-
`#{command}`
|
41
|
+
install_history_service = ::Upman::Service::InstallHistory.new
|
42
|
+
install_history_service.get(@param_since).to_json
|
54
43
|
end
|
55
44
|
|
56
|
-
def fill_up(result, line_index, hist_lines, history)
|
57
|
-
line = hist_lines[line_index + 1].sub('Commandline: ', '')
|
58
|
-
command = parse_command(line)
|
59
|
-
return nil if command.empty?
|
60
|
-
|
61
|
-
command[:start_date] = DateTime.parse(history.sub('Start-Date: ', ''))
|
62
|
-
|
63
|
-
if @param_since.instance_of?(Date)
|
64
|
-
if command[:start_date] >= @param_since
|
65
|
-
result.append command
|
66
|
-
end
|
67
|
-
else
|
68
|
-
result.append command
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def parse_command(command_line)
|
73
|
-
package = {}
|
74
|
-
regexp = /(apt(-get)?)(( [\-\w]*)*) (install|upgrade|purge)(.*)?/
|
75
|
-
if (matches = command_line.match(regexp))
|
76
|
-
package[:action] = matches[5].strip
|
77
|
-
|
78
|
-
package[:options] = []
|
79
|
-
matches[3].split(' ').each { |name| package[:options].append name }
|
80
|
-
|
81
|
-
package[:packages] = []
|
82
|
-
matches[6].split(' ').each { |name| package[:packages].append name }
|
83
|
-
end
|
84
|
-
package
|
85
|
-
end
|
86
45
|
end
|
87
46
|
end
|
88
47
|
end
|
@@ -11,14 +11,17 @@ module Upman
|
|
11
11
|
|
12
12
|
attr_accessor :requested
|
13
13
|
|
14
|
-
include ::Upman::Utils::Parser
|
15
|
-
|
16
14
|
# rubocop:disable Naming/MethodName
|
17
15
|
def do_GET(request, response)
|
18
16
|
# rubocop:enable Naming/MethodName
|
19
17
|
|
20
18
|
super(request, response)
|
21
19
|
|
20
|
+
unless is_authenticated(request)
|
21
|
+
response = not_authorized(response, "Request declined")
|
22
|
+
return response
|
23
|
+
end
|
24
|
+
|
22
25
|
@requested = get_param('requested', 'int')
|
23
26
|
|
24
27
|
if (body = perform_action)
|
@@ -27,20 +30,8 @@ module Upman
|
|
27
30
|
end
|
28
31
|
|
29
32
|
def perform_action
|
30
|
-
|
31
|
-
|
32
|
-
extended_states.split("\n\n").each do |chunk|
|
33
|
-
installed_packages = _get_hashed_values(chunk)
|
34
|
-
unless @requested.empty?
|
35
|
-
if installed_packages['auto_installed'] == @requested
|
36
|
-
result.append installed_packages
|
37
|
-
end
|
38
|
-
else
|
39
|
-
result.append installed_packages
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
result.to_json
|
33
|
+
installed_package_service = Upman::Service::InstalledPackages.new
|
34
|
+
installed_package_service.get(@requested).to_json
|
44
35
|
end
|
45
36
|
|
46
37
|
end
|
@@ -8,17 +8,33 @@ module Upman
|
|
8
8
|
return Servlet
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
# Servlet action for WEBrick
|
12
|
+
class Servlet < ::Upman::Server::BaseServlet
|
13
|
+
|
14
|
+
attr_accessor :payload
|
15
|
+
|
16
|
+
# rubocop:disable Naming/MethodName
|
17
|
+
def do_GET(request, response)
|
18
|
+
# rubocop:enable Naming/MethodName
|
19
|
+
|
20
|
+
super(request, response)
|
17
21
|
|
22
|
+
unless is_authenticated(request)
|
23
|
+
response = not_authorized(response, "Request declined")
|
24
|
+
return response
|
25
|
+
end
|
26
|
+
|
27
|
+
@payload = get_param('payload', 'json', false)
|
28
|
+
|
29
|
+
if (body = perform_action)
|
30
|
+
response = ok(response, body)
|
31
|
+
end
|
32
|
+
end
|
18
33
|
|
19
34
|
def perform_action
|
20
|
-
"
|
35
|
+
"{\"autentication\": \"failed - no valid certifacte was given\"}"
|
21
36
|
end
|
37
|
+
|
22
38
|
end
|
23
39
|
|
24
40
|
end
|
@@ -1,65 +1,84 @@
|
|
1
|
-
module Upman
|
2
|
-
module Server
|
3
|
-
class BaseServlet < WEBrick::HTTPServlet::AbstractServlet
|
4
|
-
|
5
|
-
include ::Upman::Utils::Helper
|
6
|
-
|
7
|
-
attr_accessor :query, :response, :error_msg
|
8
|
-
|
9
|
-
def initialize(server, *options)
|
10
|
-
super(server, *options)
|
11
|
-
end
|
12
|
-
|
13
|
-
# rubocop:disable Naming/MethodName
|
14
|
-
def do_GET(_request, response)
|
15
|
-
# rubocop:enable Naming/MethodName
|
16
|
-
|
17
|
-
info "Process API request #{_request.path}"
|
18
|
-
|
19
|
-
@response = response
|
20
|
-
@query = _request.query
|
21
|
-
end
|
22
|
-
|
23
|
-
def
|
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
|
-
@query
|
62
|
-
|
63
|
-
|
64
|
-
|
1
|
+
module Upman
|
2
|
+
module Server
|
3
|
+
class BaseServlet < WEBrick::HTTPServlet::AbstractServlet
|
4
|
+
|
5
|
+
include ::Upman::Utils::Helper
|
6
|
+
|
7
|
+
attr_accessor :query, :response, :error_msg
|
8
|
+
|
9
|
+
def initialize(server, *options)
|
10
|
+
super(server, *options)
|
11
|
+
end
|
12
|
+
|
13
|
+
# rubocop:disable Naming/MethodName
|
14
|
+
def do_GET(_request, response)
|
15
|
+
# rubocop:enable Naming/MethodName
|
16
|
+
|
17
|
+
info "Process API request #{_request.path}"
|
18
|
+
|
19
|
+
@response = response
|
20
|
+
@query = _request.query
|
21
|
+
end
|
22
|
+
|
23
|
+
def is_authenticated(request)
|
24
|
+
node_service = Upman::Service::Node.new
|
25
|
+
node_uuid = node_service.get_node_uuuid
|
26
|
+
|
27
|
+
info "Checking Authentication"
|
28
|
+
return true if request["x-upman-token"] == node_uuid
|
29
|
+
|
30
|
+
fail "Access denied"
|
31
|
+
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
def ok(response, body)
|
36
|
+
response.status = 200
|
37
|
+
response['Content-Type'] = 'application/json'
|
38
|
+
response.body = body
|
39
|
+
response
|
40
|
+
end
|
41
|
+
|
42
|
+
def not_authorized(response, body)
|
43
|
+
response.status = 401
|
44
|
+
response['Content-Type'] = 'application/json'
|
45
|
+
response.body = "{\"status\": \"not_authorized\", \"message\": \"#{body}\"}"
|
46
|
+
response
|
47
|
+
end
|
48
|
+
|
49
|
+
def bad_request(response, body)
|
50
|
+
response.status = 400
|
51
|
+
response['Content-Type'] = 'application/json'
|
52
|
+
response.body = "{\"status\": \"bad_request\", \"message\": \"#{body}\"}"
|
53
|
+
response
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_param(key, validate, require = false)
|
57
|
+
if @query.nil?
|
58
|
+
return ''
|
59
|
+
end
|
60
|
+
|
61
|
+
unless @query.include? key
|
62
|
+
unless require
|
63
|
+
return ''
|
64
|
+
else
|
65
|
+
return nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
unless validate.nil?
|
69
|
+
if validate == 'date'
|
70
|
+
begin
|
71
|
+
@query[key] = DateTime.parse(@query[key])
|
72
|
+
rescue
|
73
|
+
msg = "Invalid content for param #{key}, expected type: date - found #{@query[key]}"
|
74
|
+
bad_request(@response, msg)
|
75
|
+
fail msg
|
76
|
+
return false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
@query[key]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
65
84
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Upman
|
2
|
+
module Service
|
3
|
+
class InstallHistory
|
4
|
+
|
5
|
+
attr_accessor :since
|
6
|
+
|
7
|
+
def get(since)
|
8
|
+
@since = since
|
9
|
+
|
10
|
+
result = []
|
11
|
+
|
12
|
+
lines = fetch_history.split("\n")
|
13
|
+
lines.each do |line|
|
14
|
+
fill_up(result, line)
|
15
|
+
end
|
16
|
+
result.reverse!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def fetch_history
|
22
|
+
command = 'for x in $(ls -1t /var/log/dpkg.log*); do zcat -f $x |tac |grep -e " install " -e " upgrade " -e " remove "; done |awk -F ":a" \'{print $1 " :a" $2}\' |column -t'
|
23
|
+
`#{command}`
|
24
|
+
end
|
25
|
+
|
26
|
+
def fill_up(result, line)
|
27
|
+
command = parse_command(line)
|
28
|
+
return nil if command.empty?
|
29
|
+
|
30
|
+
if @since.instance_of?(DateTime)
|
31
|
+
if DateTime.parse(command[:datetime]) >= @since
|
32
|
+
result.append command
|
33
|
+
end
|
34
|
+
else
|
35
|
+
result.append command
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse_command(command_line)
|
40
|
+
package = {}
|
41
|
+
regexp = /([0-9]{4}-[0-9]{2}-[0-9]{2})\s+([0-9]{2}:[0-9]{2}:[0-9]{2})\s+(upgrade|install|remove)\s+([\w\-+\.]+)\s+\:([a-z0-9]+)\s+([\w+:\.\-~<>]+)\s+([\w+:\.\-~<>]+)/
|
42
|
+
unless !(matches = command_line.match(regexp))
|
43
|
+
package[:datetime] = "#{matches[1]} #{matches[2]}"
|
44
|
+
package[:action] = matches[3]
|
45
|
+
package[:package] = matches[4]
|
46
|
+
package[:architecture] = matches[5]
|
47
|
+
package[:old_version] = (%w[<keine> <none>].include? matches[6]) ? nil : matches[6]
|
48
|
+
package[:target_version] = (%w[<keine> <none>].include? matches[7]) ? nil : matches[7]
|
49
|
+
end
|
50
|
+
package
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Upman
|
2
|
+
module Service
|
3
|
+
class InstalledPackages
|
4
|
+
|
5
|
+
include ::Upman::Utils::Parser
|
6
|
+
|
7
|
+
def get(auto_installed)
|
8
|
+
result = []
|
9
|
+
extended_states = File.open('/var/lib/apt/extended_states', 'rb', &:read)
|
10
|
+
extended_states.split("\n\n").each do |chunk|
|
11
|
+
installed_packages = _get_hashed_values(chunk)
|
12
|
+
if auto_installed.empty?
|
13
|
+
result.append installed_packages
|
14
|
+
else
|
15
|
+
if installed_packages['auto_installed'] == auto_installed
|
16
|
+
result.append installed_packages
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
result
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Upman
|
2
|
+
module Service
|
3
|
+
class Node
|
4
|
+
|
5
|
+
require 'securerandom'
|
6
|
+
require 'facter'
|
7
|
+
using SymbolizeHelper
|
8
|
+
|
9
|
+
attr_accessor :node_config
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@node_config = 'node.yml'
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def get_node_uuuid
|
17
|
+
data = YAML::load_file(@node_config).deep_symbolize_keys
|
18
|
+
data[:uuid]
|
19
|
+
end
|
20
|
+
|
21
|
+
def generate_node_data
|
22
|
+
unless File.exist? @node_config
|
23
|
+
data = {
|
24
|
+
hostname: Socket.gethostbyname(Socket.gethostname).first,
|
25
|
+
uuid: SecureRandom.uuid,
|
26
|
+
}
|
27
|
+
File.write(@node_config, data.to_yaml)
|
28
|
+
end
|
29
|
+
update_node_data
|
30
|
+
end
|
31
|
+
|
32
|
+
def update_node_data
|
33
|
+
unless File.exist? @node_config
|
34
|
+
generate_node_data
|
35
|
+
end
|
36
|
+
|
37
|
+
data = YAML::load_file(@node_config).deep_symbolize_keys
|
38
|
+
data.merge!(
|
39
|
+
operatingsystem: Facter['operatingsystem'].value,
|
40
|
+
rubyversion: Facter['rubyversion'].value,
|
41
|
+
operatingsystemrelease: Facter['operatingsystemrelease'].value,
|
42
|
+
last_sync: DateTime.now
|
43
|
+
)
|
44
|
+
File.write(@node_config, data.to_yaml)
|
45
|
+
data
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/upman/utils/api.rb
CHANGED
@@ -10,12 +10,12 @@ module Upman
|
|
10
10
|
def check_connection
|
11
11
|
response = self.get "status"
|
12
12
|
if response.nil?
|
13
|
-
false
|
13
|
+
return false
|
14
14
|
end
|
15
15
|
|
16
16
|
unless response.code == 200
|
17
17
|
fail "Could not connect to API endpoint"
|
18
|
-
false
|
18
|
+
return false
|
19
19
|
end
|
20
20
|
success "API Endpoint connected to Forman #{JSON.parse(response.body)["version"]} using API v#{JSON.parse(response.body)["api_version"]}."
|
21
21
|
true
|
@@ -36,6 +36,8 @@ module Upman
|
|
36
36
|
fail "Could not establish a secure connection to our API Endpoint"
|
37
37
|
rescue RestClient::NotFound
|
38
38
|
fail "API Endpoint route could not found"
|
39
|
+
rescue RestClient::InternalServerError
|
40
|
+
fail "API Endpoint reports error, ignore request"
|
39
41
|
rescue Errno::ECONNREFUSED
|
40
42
|
fail "Can not connect to Foreman instance on #{_url}"
|
41
43
|
end
|
@@ -52,6 +54,8 @@ module Upman
|
|
52
54
|
fail "Could not establish a secure connection to our API Endpoint"
|
53
55
|
rescue RestClient::NotFound
|
54
56
|
fail "API Endpoint route could not found"
|
57
|
+
rescue RestClient::InternalServerError
|
58
|
+
fail "API Endpoint reports error, ignore request"
|
55
59
|
rescue Errno::ECONNREFUSED
|
56
60
|
fail "Can not connect to your Foreman instance on #{_url}"
|
57
61
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Upman
|
2
|
+
module Worker
|
3
|
+
class ReportInstallHistory < BaseWorker
|
4
|
+
|
5
|
+
def register
|
6
|
+
return self
|
7
|
+
end
|
8
|
+
|
9
|
+
def run!
|
10
|
+
while true
|
11
|
+
install_history_service = ::Upman::Service::InstallHistory.new
|
12
|
+
data = install_history_service.get("")
|
13
|
+
|
14
|
+
info "Report install history to API"
|
15
|
+
|
16
|
+
|
17
|
+
node_service = Upman::Service::Node.new
|
18
|
+
node_uuid = node_service.get_node_uuuid
|
19
|
+
|
20
|
+
api = ::Upman::Utils::Api.new
|
21
|
+
api.post("upman/node/install_history?uuid=#{node_uuid}", "{\"data\": #{data.to_json}}")
|
22
|
+
|
23
|
+
sleep(::Upman::Core::Config.daemon[:interval])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Upman
|
2
|
+
module Worker
|
3
|
+
class ReportInstalledPackages < BaseWorker
|
4
|
+
|
5
|
+
def register
|
6
|
+
return self
|
7
|
+
end
|
8
|
+
|
9
|
+
def run!
|
10
|
+
while true
|
11
|
+
installed_package_service = ::Upman::Service::InstalledPackages.new
|
12
|
+
data = installed_package_service.get("1")
|
13
|
+
info "Report installed packages to API"
|
14
|
+
|
15
|
+
|
16
|
+
node_service = Upman::Service::Node.new
|
17
|
+
node_uuid = node_service.get_node_uuuid
|
18
|
+
|
19
|
+
#api = ::Upman::Utils::Api.new
|
20
|
+
#api.post("upman/node/installed_packages?uuid=#{node_uuid}","{\"data\": #{data.to_json}}")
|
21
|
+
|
22
|
+
sleep(::Upman::Core::Config.daemon[:interval])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: upman-daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.8.
|
4
|
+
version: 0.0.8.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Ehrig
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coderay
|
@@ -97,12 +97,18 @@ files:
|
|
97
97
|
- lib/upman/extensions/ping.rb
|
98
98
|
- lib/upman/server/base_servlet.rb
|
99
99
|
- lib/upman/server/socket.rb
|
100
|
+
- lib/upman/services/install_history.rb
|
101
|
+
- lib/upman/services/installed_packages.rb
|
102
|
+
- lib/upman/services/node.rb
|
100
103
|
- lib/upman/utils/api.rb
|
101
104
|
- lib/upman/utils/dynload.rb
|
102
105
|
- lib/upman/utils/files.rb
|
103
106
|
- lib/upman/utils/helper.rb
|
104
107
|
- lib/upman/utils/parser.rb
|
105
108
|
- lib/upman/utils/symbolize_helper.rb
|
109
|
+
- lib/upman/worker/base_worker.rb
|
110
|
+
- lib/upman/worker/report_install_history.rb
|
111
|
+
- lib/upman/worker/report_installed_packages.rb
|
106
112
|
- lib/version.rb
|
107
113
|
- upman.gemspec
|
108
114
|
homepage: https://github.com/liKe2k1/upman
|