mkit 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mkit/docker_listener.rb +49 -14
- data/lib/mkit/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ce73321371e8f675a5c28106e9287762ed5cf8b39ecfc8c97b35f62806a45c1
|
4
|
+
data.tar.gz: 21189b10e952913a03d50498201869010fef447f4b621a5f3e2f39a1ab12c94c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e38e72898702d11bf928534444a63fe1744b3af47494c4da7789ece5c01cb611b824e716cc7cc39454c738d730da5533393aefea8801da236ecce97d9b291f3e
|
7
|
+
data.tar.gz: 2e2d930ef466b48fbb75b07dbf12586cb41e0324a043eed2f334b9d4a638ba9369f6d65f85ca6c24d4573d8076dacfb26d43bc166de465212df8dbda3ee4edae
|
data/lib/mkit/docker_listener.rb
CHANGED
@@ -5,16 +5,32 @@ require 'mkit/status'
|
|
5
5
|
# https://docs.docker.com/engine/reference/commandline/events
|
6
6
|
require 'mkit/app/helpers/docker_helper'
|
7
7
|
module MKIt
|
8
|
+
class StopThread < RuntimeError; end
|
9
|
+
|
8
10
|
class DockerListener
|
9
11
|
include MKIt::DockerHelper
|
10
12
|
|
11
13
|
def initialize
|
12
|
-
@
|
14
|
+
@queue = Queue.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def enqueue(msg)
|
18
|
+
@queue << msg
|
13
19
|
end
|
14
20
|
|
15
|
-
def
|
21
|
+
def start
|
22
|
+
@consumer.run if register_consumer
|
23
|
+
@listener.run if register_listener
|
16
24
|
end
|
17
25
|
|
26
|
+
def stop
|
27
|
+
@listener.exit if @listener
|
28
|
+
@consumer.raise StopThread.new
|
29
|
+
MKItLogger.info("docker listener stopped")
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
18
34
|
def parse_message(msg)
|
19
35
|
action = msg['Action'].to_sym
|
20
36
|
type = msg['Type'].to_sym
|
@@ -45,15 +61,17 @@ module MKIt
|
|
45
61
|
MKItLogger.debug(" #{type} #{action} <<TODO>>")
|
46
62
|
end
|
47
63
|
else
|
48
|
-
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}")
|
64
|
+
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}/#{pod_name}")
|
49
65
|
end
|
50
66
|
when :network
|
51
67
|
pod_id = msg.Actor.Attributes.container
|
52
|
-
|
68
|
+
inspect = inspect_instance(pod_id).to_o
|
69
|
+
pod_name = inspect.Name[1..]
|
70
|
+
pod = Pod.find_by(name: pod_name)
|
53
71
|
unless pod.nil?
|
54
72
|
case action
|
55
73
|
when :connect
|
56
|
-
MKItLogger.info("docker network #{action} received: #{msg}")
|
74
|
+
MKItLogger.info("docker network #{action} received: #{msg} for pod #{pod_name}")
|
57
75
|
pod.update_ip
|
58
76
|
pod.save
|
59
77
|
when :disconnect
|
@@ -62,20 +80,41 @@ module MKIt
|
|
62
80
|
MKItLogger.debug(" #{type} #{action} <<TODO>>")
|
63
81
|
end
|
64
82
|
else
|
65
|
-
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}")
|
83
|
+
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}/#{pod_name}")
|
66
84
|
end
|
67
85
|
else
|
68
86
|
MKItLogger.info("\t#{type} #{action} <<unknown>>")
|
69
87
|
end
|
70
88
|
end
|
71
89
|
|
72
|
-
def
|
73
|
-
|
90
|
+
def register_consumer
|
91
|
+
return false unless @consumer.nil?
|
92
|
+
|
93
|
+
@consumer = Thread.new do
|
94
|
+
running = true
|
95
|
+
while running
|
96
|
+
begin
|
97
|
+
parse_message(@queue.pop)
|
98
|
+
rescue StopThread
|
99
|
+
running = false
|
100
|
+
MKItLogger.info("docker consumer ended")
|
101
|
+
rescue => e
|
102
|
+
MKItLogger.error("error while consuming docker notification: #{e}", e.message, e.backtrace.join("\n"))
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
true
|
107
|
+
end
|
108
|
+
|
109
|
+
def register_listener
|
110
|
+
return false unless @listener.nil?
|
111
|
+
|
112
|
+
@listener = Thread.new {
|
74
113
|
cmd = "docker events --format '{{json .}}'"
|
75
114
|
begin
|
76
115
|
PTY.spawn( cmd ) do |stdout, stdin, pid|
|
77
116
|
begin
|
78
|
-
stdout.each { |line|
|
117
|
+
stdout.each { |line| enqueue JSON.parse(line).to_o }
|
79
118
|
rescue Errno::EIO
|
80
119
|
MKItLogger.warn("Errno:EIO error, but this probably just means " +
|
81
120
|
"that the process has finished giving output")
|
@@ -85,12 +124,8 @@ module MKIt
|
|
85
124
|
MKItLogger.warn("docker event listener process exited!")
|
86
125
|
end
|
87
126
|
}
|
88
|
-
@thread.run
|
89
127
|
MKItLogger.info("docker listener started")
|
90
|
-
|
91
|
-
def stop
|
92
|
-
@thread.exit if @thread
|
93
|
-
MKItLogger.info("docker listener stopped")
|
128
|
+
true
|
94
129
|
end
|
95
130
|
end
|
96
131
|
end
|
data/lib/mkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasco Santos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-dns
|