mkit 0.6.2 → 0.7.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 +4 -4
- data/Gemfile +1 -20
- data/README.md +15 -15
- data/bin/mkit +46 -334
- data/lib/mkit/app/controllers/pods_controller.rb +1 -7
- data/lib/mkit/app/controllers/services_controller.rb +28 -1
- data/lib/mkit/app/helpers/services_helper.rb +7 -0
- data/lib/mkit/app/mkit_server.rb +2 -0
- data/lib/mkit/app/model/service.rb +0 -1
- data/lib/mkit/client/command_parser.rb +214 -0
- data/lib/mkit/client/commands.yaml +203 -0
- data/lib/mkit/client/http_client.rb +90 -0
- data/lib/mkit/client/mkitd_client.rb +21 -0
- data/lib/mkit/client/websocket_client.rb +68 -0
- data/lib/mkit/cmd/shell_client.rb +57 -0
- data/lib/mkit/docker_listener.rb +46 -25
- data/lib/mkit/docker_log_listener.rb +29 -0
- data/lib/mkit/version.rb +1 -1
- data/lib/mkit.rb +1 -0
- data/mkit.gemspec +2 -1
- data/samples/apps/minio.yml +2 -2
- data/samples/soketi.yaml +32 -0
- metadata +34 -7
- data/Gemfile.lock +0 -140
data/lib/mkit/docker_listener.rb
CHANGED
@@ -1,20 +1,38 @@
|
|
1
1
|
require 'pty'
|
2
2
|
require 'mkit/status'
|
3
|
+
require "mkit/cmd/shell_client"
|
3
4
|
|
4
5
|
#
|
5
6
|
# https://docs.docker.com/engine/reference/commandline/events
|
6
7
|
require 'mkit/app/helpers/docker_helper'
|
7
8
|
module MKIt
|
9
|
+
class StopThread < RuntimeError; end
|
10
|
+
|
8
11
|
class DockerListener
|
9
12
|
include MKIt::DockerHelper
|
10
13
|
|
11
14
|
def initialize
|
12
|
-
@
|
15
|
+
@queue = Queue.new
|
16
|
+
@listener = ShellClient.new(command: "docker events --format '{{json .}}'")
|
13
17
|
end
|
14
18
|
|
15
|
-
def
|
19
|
+
def enqueue(msg)
|
20
|
+
@queue << msg
|
16
21
|
end
|
17
22
|
|
23
|
+
def start
|
24
|
+
@consumer.run if register_consumer
|
25
|
+
register_listener
|
26
|
+
end
|
27
|
+
|
28
|
+
def stop
|
29
|
+
@listener.unregister if @listener
|
30
|
+
@consumer.raise StopThread.new
|
31
|
+
MKItLogger.info("docker listener stopped")
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
18
36
|
def parse_message(msg)
|
19
37
|
action = msg['Action'].to_sym
|
20
38
|
type = msg['Type'].to_sym
|
@@ -45,15 +63,17 @@ module MKIt
|
|
45
63
|
MKItLogger.debug(" #{type} #{action} <<TODO>>")
|
46
64
|
end
|
47
65
|
else
|
48
|
-
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}")
|
66
|
+
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}/#{pod_name}")
|
49
67
|
end
|
50
68
|
when :network
|
51
69
|
pod_id = msg.Actor.Attributes.container
|
52
|
-
|
70
|
+
inspect = inspect_instance(pod_id).to_o
|
71
|
+
pod_name = inspect.Name[1..]
|
72
|
+
pod = Pod.find_by(name: pod_name)
|
53
73
|
unless pod.nil?
|
54
74
|
case action
|
55
75
|
when :connect
|
56
|
-
MKItLogger.info("docker network #{action} received: #{msg}")
|
76
|
+
MKItLogger.info("docker network #{action} received: #{msg} for pod #{pod_name}")
|
57
77
|
pod.update_ip
|
58
78
|
pod.save
|
59
79
|
when :disconnect
|
@@ -62,35 +82,36 @@ module MKIt
|
|
62
82
|
MKItLogger.debug(" #{type} #{action} <<TODO>>")
|
63
83
|
end
|
64
84
|
else
|
65
|
-
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}")
|
85
|
+
MKItLogger.warn("docker <<#{type}>> <#{action}> received: #{msg}. But I don't know anything about pod #{pod_id}/#{pod_name}")
|
66
86
|
end
|
67
87
|
else
|
68
88
|
MKItLogger.info("\t#{type} #{action} <<unknown>>")
|
69
89
|
end
|
70
90
|
end
|
71
91
|
|
72
|
-
def
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
92
|
+
def register_consumer
|
93
|
+
return false unless @consumer.nil?
|
94
|
+
|
95
|
+
@consumer = Thread.new do
|
96
|
+
running = true
|
97
|
+
while running
|
98
|
+
begin
|
99
|
+
parse_message(@queue.pop)
|
100
|
+
rescue StopThread
|
101
|
+
running = false
|
102
|
+
MKItLogger.info("docker consumer ended")
|
103
|
+
rescue => e
|
104
|
+
MKItLogger.error("error while consuming docker notification: #{e}", e.message, e.backtrace.join("\n"))
|
83
105
|
end
|
84
|
-
rescue PTY::ChildExited
|
85
|
-
MKItLogger.warn("docker event listener process exited!")
|
86
106
|
end
|
87
|
-
|
88
|
-
|
89
|
-
MKItLogger.info("docker listener started")
|
107
|
+
end
|
108
|
+
true
|
90
109
|
end
|
91
|
-
|
92
|
-
|
93
|
-
|
110
|
+
|
111
|
+
def register_listener
|
112
|
+
@listener.register do |stdout, stdin, pid|
|
113
|
+
stdout.each { |line| enqueue JSON.parse(line).to_o }
|
114
|
+
end
|
94
115
|
end
|
95
116
|
end
|
96
117
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "mkit/cmd/shell_client"
|
2
|
+
|
3
|
+
module MKIt
|
4
|
+
class DockerLogListener < MKIt::ShellClient
|
5
|
+
|
6
|
+
def initialize(pod, ws, options: {})
|
7
|
+
@pod = pod
|
8
|
+
@ws = ws
|
9
|
+
command = "docker logs"
|
10
|
+
command += " -f" if options[:follow] == 'true'
|
11
|
+
command += " -n #{options[:nr_lines]}" if options[:nr_lines]
|
12
|
+
command += " #{@pod.name}"
|
13
|
+
super(command: command)
|
14
|
+
end
|
15
|
+
|
16
|
+
def register
|
17
|
+
super do |stdout, stdin, pid|
|
18
|
+
stdout.each {
|
19
|
+
|line| @ws.send(line.strip!)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def close
|
25
|
+
@ws.close_websocket unless @ws.nil?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/mkit/version.rb
CHANGED
data/lib/mkit.rb
CHANGED
data/mkit.gemspec
CHANGED
@@ -32,8 +32,9 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_runtime_dependency 'rubydns', '~> 2.0', '>= 2.0.2'
|
33
33
|
s.add_runtime_dependency 'sinatra', '~> 3.0', '>= 3.0.5'
|
34
34
|
s.add_runtime_dependency 'sinatra-activerecord', '~> 2.0', '>= 2.0.26'
|
35
|
+
s.add_runtime_dependency 'sinatra-websocket', '~> 0.3', '>= 0.3.1'
|
35
36
|
s.add_runtime_dependency 'sqlite3', '~> 1.5', '>= 1.5.4'
|
36
|
-
s.add_runtime_dependency 'standalone_migrations', '~> 7.1', '
|
37
|
+
s.add_runtime_dependency 'standalone_migrations', '~> 7.1', '< 7.2.0'
|
37
38
|
s.add_runtime_dependency 'thin', '~> 1.8', '>= 1.8.1'
|
38
39
|
s.add_runtime_dependency 'text-table', '~> 1.2', '>= 1.2.4'
|
39
40
|
end
|
data/samples/apps/minio.yml
CHANGED
data/samples/soketi.yaml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
service:
|
2
|
+
name: soketi
|
3
|
+
image: quay.io/soketi/soketi:0.17-16-alpine
|
4
|
+
# image: giovannedev/soketi:latest
|
5
|
+
ports:
|
6
|
+
#- 80:6001:http:round_robin
|
7
|
+
- 6001:6001:tcp:round_robin
|
8
|
+
- 6002:6001:tcp:round_robin:ssl
|
9
|
+
- 9601:9601:tcp:round_robin
|
10
|
+
resources:
|
11
|
+
max_replicas: 1
|
12
|
+
min_replicas: 1
|
13
|
+
environment:
|
14
|
+
SOKETI_PORT: 6001
|
15
|
+
SOKETI_METRICS_SERVER_PORT: 9601
|
16
|
+
SOKETI_DEBUG: 1
|
17
|
+
SOKETI_MODE: full
|
18
|
+
SOKETI_APP_ID: app-id
|
19
|
+
SOKETI_APP_KEY: app-key
|
20
|
+
SOKETI_APP_SECRET: app-secret
|
21
|
+
# PUSHER_HOST: 127.0.0.1
|
22
|
+
# PUSHER_PORT: 6001
|
23
|
+
# PUSHER_SCHEME: http # or https
|
24
|
+
SOKETI_PORT: 6001
|
25
|
+
SOKETI_SCHEME: http # or https
|
26
|
+
METRICS_SERVER_PORT: 9601
|
27
|
+
SOKETI_DEFAULT_APP_ENABLED: true
|
28
|
+
SOKETI_DEFAULT_APP_ENABLE_CLIENT_MESSAGES: true
|
29
|
+
DEFAULT_APP_ENABLE_CLIENT_MESSAGES: true
|
30
|
+
#SOKETI_DB_REDIS_HOST: redis
|
31
|
+
#SOKETI_DB_REDIS_PORT: 6379
|
32
|
+
#SOKETI_DB_REDIS_PASSWORD: password
|
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.
|
4
|
+
version: 0.7.0
|
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-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-dns
|
@@ -230,6 +230,26 @@ dependencies:
|
|
230
230
|
- - ">="
|
231
231
|
- !ruby/object:Gem::Version
|
232
232
|
version: 2.0.26
|
233
|
+
- !ruby/object:Gem::Dependency
|
234
|
+
name: sinatra-websocket
|
235
|
+
requirement: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - "~>"
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '0.3'
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: 0.3.1
|
243
|
+
type: :runtime
|
244
|
+
prerelease: false
|
245
|
+
version_requirements: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - "~>"
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0.3'
|
250
|
+
- - ">="
|
251
|
+
- !ruby/object:Gem::Version
|
252
|
+
version: 0.3.1
|
233
253
|
- !ruby/object:Gem::Dependency
|
234
254
|
name: sqlite3
|
235
255
|
requirement: !ruby/object:Gem::Requirement
|
@@ -257,9 +277,9 @@ dependencies:
|
|
257
277
|
- - "~>"
|
258
278
|
- !ruby/object:Gem::Version
|
259
279
|
version: '7.1'
|
260
|
-
- - "
|
280
|
+
- - "<"
|
261
281
|
- !ruby/object:Gem::Version
|
262
|
-
version: 7.
|
282
|
+
version: 7.2.0
|
263
283
|
type: :runtime
|
264
284
|
prerelease: false
|
265
285
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -267,9 +287,9 @@ dependencies:
|
|
267
287
|
- - "~>"
|
268
288
|
- !ruby/object:Gem::Version
|
269
289
|
version: '7.1'
|
270
|
-
- - "
|
290
|
+
- - "<"
|
271
291
|
- !ruby/object:Gem::Version
|
272
|
-
version: 7.
|
292
|
+
version: 7.2.0
|
273
293
|
- !ruby/object:Gem::Dependency
|
274
294
|
name: thin
|
275
295
|
requirement: !ruby/object:Gem::Requirement
|
@@ -323,7 +343,6 @@ files:
|
|
323
343
|
- ".github/workflows/publish.yml"
|
324
344
|
- ".rubocop.yml"
|
325
345
|
- Gemfile
|
326
|
-
- Gemfile.lock
|
327
346
|
- LICENSE
|
328
347
|
- README.md
|
329
348
|
- Rakefile
|
@@ -361,6 +380,12 @@ files:
|
|
361
380
|
- lib/mkit/app/templates/docker/docker_run.sh.erb
|
362
381
|
- lib/mkit/app/templates/haproxy/0000_defaults.cfg
|
363
382
|
- lib/mkit/app/templates/haproxy/xapp_haproxy.cfg.erb
|
383
|
+
- lib/mkit/client/command_parser.rb
|
384
|
+
- lib/mkit/client/commands.yaml
|
385
|
+
- lib/mkit/client/http_client.rb
|
386
|
+
- lib/mkit/client/mkitd_client.rb
|
387
|
+
- lib/mkit/client/websocket_client.rb
|
388
|
+
- lib/mkit/cmd/shell_client.rb
|
364
389
|
- lib/mkit/cmd_runner.rb
|
365
390
|
- lib/mkit/config/config.rb
|
366
391
|
- lib/mkit/config/environment.rb
|
@@ -370,6 +395,7 @@ files:
|
|
370
395
|
- lib/mkit/config/the_config.yml
|
371
396
|
- lib/mkit/ctypes.rb
|
372
397
|
- lib/mkit/docker_listener.rb
|
398
|
+
- lib/mkit/docker_log_listener.rb
|
373
399
|
- lib/mkit/exceptions.rb
|
374
400
|
- lib/mkit/job_manager.rb
|
375
401
|
- lib/mkit/mkit_dns.rb
|
@@ -401,6 +427,7 @@ files:
|
|
401
427
|
- samples/apps/redis.yml
|
402
428
|
- samples/daemontools/log/run
|
403
429
|
- samples/daemontools/run
|
430
|
+
- samples/soketi.yaml
|
404
431
|
- samples/systemd/mkitd.service
|
405
432
|
homepage: https://github.com/valexsantos/mkit
|
406
433
|
licenses:
|
data/Gemfile.lock
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
actionpack (7.0.8)
|
5
|
-
actionview (= 7.0.8)
|
6
|
-
activesupport (= 7.0.8)
|
7
|
-
rack (~> 2.0, >= 2.2.4)
|
8
|
-
rack-test (>= 0.6.3)
|
9
|
-
rails-dom-testing (~> 2.0)
|
10
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
11
|
-
actionview (7.0.8)
|
12
|
-
activesupport (= 7.0.8)
|
13
|
-
builder (~> 3.1)
|
14
|
-
erubi (~> 1.4)
|
15
|
-
rails-dom-testing (~> 2.0)
|
16
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
17
|
-
activemodel (7.0.8)
|
18
|
-
activesupport (= 7.0.8)
|
19
|
-
activerecord (7.0.8)
|
20
|
-
activemodel (= 7.0.8)
|
21
|
-
activesupport (= 7.0.8)
|
22
|
-
activesupport (7.0.8)
|
23
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
24
|
-
i18n (>= 1.6, < 2)
|
25
|
-
minitest (>= 5.1)
|
26
|
-
tzinfo (~> 2.0)
|
27
|
-
async (1.31.0)
|
28
|
-
console (~> 1.10)
|
29
|
-
nio4r (~> 2.3)
|
30
|
-
timers (~> 4.1)
|
31
|
-
async-dns (1.3.0)
|
32
|
-
async-io (~> 1.15)
|
33
|
-
async-io (1.38.0)
|
34
|
-
async
|
35
|
-
builder (3.2.4)
|
36
|
-
coderay (1.1.3)
|
37
|
-
concurrent-ruby (1.2.2)
|
38
|
-
console (1.23.2)
|
39
|
-
fiber-annotation
|
40
|
-
fiber-local
|
41
|
-
crass (1.0.6)
|
42
|
-
daemons (1.4.1)
|
43
|
-
dry-container (0.11.0)
|
44
|
-
concurrent-ruby (~> 1.0)
|
45
|
-
erubi (1.12.0)
|
46
|
-
eventmachine (1.2.7)
|
47
|
-
fiber-annotation (0.2.0)
|
48
|
-
fiber-local (1.0.0)
|
49
|
-
i18n (1.14.1)
|
50
|
-
concurrent-ruby (~> 1.0)
|
51
|
-
loofah (2.21.4)
|
52
|
-
crass (~> 1.0.2)
|
53
|
-
nokogiri (>= 1.12.0)
|
54
|
-
method_source (1.0.0)
|
55
|
-
minitest (5.20.0)
|
56
|
-
mustermann (3.0.0)
|
57
|
-
ruby2_keywords (~> 0.0.1)
|
58
|
-
net-ping (2.0.8)
|
59
|
-
net_http_unix (0.2.2)
|
60
|
-
nio4r (2.7.0)
|
61
|
-
nokogiri (1.15.4-x86_64-darwin)
|
62
|
-
racc (~> 1.4)
|
63
|
-
nokogiri (1.15.4-x86_64-linux)
|
64
|
-
racc (~> 1.4)
|
65
|
-
pry (0.14.2)
|
66
|
-
coderay (~> 1.1)
|
67
|
-
method_source (~> 1.0)
|
68
|
-
racc (1.7.3)
|
69
|
-
rack (2.2.8)
|
70
|
-
rack-protection (3.1.0)
|
71
|
-
rack (~> 2.2, >= 2.2.4)
|
72
|
-
rack-test (2.1.0)
|
73
|
-
rack (>= 1.3)
|
74
|
-
rails-dom-testing (2.2.0)
|
75
|
-
activesupport (>= 5.0.0)
|
76
|
-
minitest
|
77
|
-
nokogiri (>= 1.6)
|
78
|
-
rails-html-sanitizer (1.6.0)
|
79
|
-
loofah (~> 2.21)
|
80
|
-
nokogiri (~> 1.14)
|
81
|
-
railties (7.0.8)
|
82
|
-
actionpack (= 7.0.8)
|
83
|
-
activesupport (= 7.0.8)
|
84
|
-
method_source
|
85
|
-
rake (>= 12.2)
|
86
|
-
thor (~> 1.0)
|
87
|
-
zeitwerk (~> 2.5)
|
88
|
-
rake (13.1.0)
|
89
|
-
ruby2_keywords (0.0.5)
|
90
|
-
rubydns (2.0.2)
|
91
|
-
async-dns (~> 1.0)
|
92
|
-
sinatra (3.1.0)
|
93
|
-
mustermann (~> 3.0)
|
94
|
-
rack (~> 2.2, >= 2.2.4)
|
95
|
-
rack-protection (= 3.1.0)
|
96
|
-
tilt (~> 2.0)
|
97
|
-
sinatra-activerecord (2.0.27)
|
98
|
-
activerecord (>= 4.1)
|
99
|
-
sinatra (>= 1.0)
|
100
|
-
sqlite3 (1.6.8-x86_64-darwin)
|
101
|
-
sqlite3 (1.6.8-x86_64-linux)
|
102
|
-
standalone_migrations (7.1.2)
|
103
|
-
activerecord (>= 6.0.0, < 7.1.0)
|
104
|
-
nokogiri (~> 1.14)
|
105
|
-
railties (>= 6.0.0, < 7.1.0)
|
106
|
-
rake (>= 10.0)
|
107
|
-
text-table (1.2.4)
|
108
|
-
thin (1.8.2)
|
109
|
-
daemons (~> 1.0, >= 1.0.9)
|
110
|
-
eventmachine (~> 1.0, >= 1.0.4)
|
111
|
-
rack (>= 1, < 3)
|
112
|
-
thor (1.3.0)
|
113
|
-
tilt (2.3.0)
|
114
|
-
timers (4.3.5)
|
115
|
-
tzinfo (2.0.6)
|
116
|
-
concurrent-ruby (~> 1.0)
|
117
|
-
zeitwerk (2.6.12)
|
118
|
-
|
119
|
-
PLATFORMS
|
120
|
-
x86_64-darwin-22
|
121
|
-
x86_64-linux
|
122
|
-
|
123
|
-
DEPENDENCIES
|
124
|
-
async-dns
|
125
|
-
dry-container
|
126
|
-
net-ping
|
127
|
-
net_http_unix
|
128
|
-
pry
|
129
|
-
rack (>= 2.0.6)
|
130
|
-
rake
|
131
|
-
rubydns
|
132
|
-
sinatra
|
133
|
-
sinatra-activerecord
|
134
|
-
sqlite3
|
135
|
-
standalone_migrations
|
136
|
-
text-table
|
137
|
-
thin
|
138
|
-
|
139
|
-
BUNDLED WITH
|
140
|
-
2.4.10
|