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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49770b23e6d2af3c26a6b8e32291ad24b60e56f6e6fee0f308e3c96fd54f9591
4
- data.tar.gz: 2fe4f45739fd054f2399f4d1544b0d2bd736a5cc656ffad79da24a97b24e489d
3
+ metadata.gz: 5ce73321371e8f675a5c28106e9287762ed5cf8b39ecfc8c97b35f62806a45c1
4
+ data.tar.gz: 21189b10e952913a03d50498201869010fef447f4b621a5f3e2f39a1ab12c94c
5
5
  SHA512:
6
- metadata.gz: c35ab575b4bac80ea1291802c1ee09260529eea8d348b51b22adcd582789f1a902e7f6c1350e3b538b16064dbcaeece6afb80623565e0757f2905f8ffe9ddfa3
7
- data.tar.gz: 5a76b2d8f36eb02815674b1b0af00c8508e8f6dec4f978156e58c8587f01a846ce9bb7c3865887b7452ae2c5232fd10758cde62e800b4104410458234e7cf915
6
+ metadata.gz: e38e72898702d11bf928534444a63fe1744b3af47494c4da7789ece5c01cb611b824e716cc7cc39454c738d730da5533393aefea8801da236ecce97d9b291f3e
7
+ data.tar.gz: 2e2d930ef466b48fbb75b07dbf12586cb41e0324a043eed2f334b9d4a638ba9369f6d65f85ca6c24d4573d8076dacfb26d43bc166de465212df8dbda3ee4edae
@@ -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
- @consumers = []
14
+ @queue = Queue.new
15
+ end
16
+
17
+ def enqueue(msg)
18
+ @queue << msg
13
19
  end
14
20
 
15
- def register_consumer(consumer:)
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
- pod = Pod.find_by(pod_id: pod_id)
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 start
73
- @thread ||= Thread.new {
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| parse_message JSON.parse(line).to_o }
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
- end
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
@@ -1,4 +1,4 @@
1
1
  module MKIt
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.3"
3
3
  end
4
4
 
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.2
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-03-08 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-dns