mkit 0.6.2 → 0.6.3

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 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