47 lines
1.2 KiB
Ruby
Executable File
47 lines
1.2 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require 'socket'
|
|
require 'json'
|
|
require 'terminal-table'
|
|
|
|
def fetch_data
|
|
socket = UNIXSocket.new("/var/run/docker.sock")
|
|
request = "GET /v1.24/containers/json?all=1 HTTP/1.0\r\n\r\n"
|
|
socket.write(request)
|
|
|
|
response = ""
|
|
|
|
loop do
|
|
break if socket.eof?
|
|
line = socket.gets
|
|
break if line=="\r\n"
|
|
end
|
|
|
|
until socket.eof?
|
|
line = socket.gets
|
|
response += line
|
|
end
|
|
|
|
return JSON.parse(response, symbolize_names: true)
|
|
end
|
|
|
|
rows = []
|
|
data = fetch_data
|
|
data.each do |d|
|
|
next unless labels = d[:Labels]
|
|
name = d[:Names][0][1..-1]
|
|
|
|
next unless labels[:"ofelia.enabled"]
|
|
tasks = labels.keys.map(&:to_s).map{|s| s.scan(/\Aofelia\.job-([a-z]+)\.([^.]*)\./).first}.uniq.compact
|
|
next unless tasks.count>0
|
|
tasks.each do |task|
|
|
type, taskname = *task
|
|
schedule = labels[:"ofelia.job-#{type}.#{taskname}.schedule"]
|
|
command = labels[:"ofelia.job-#{type}.#{taskname}.command"]
|
|
rows << [name, type, taskname, schedule, command]
|
|
end
|
|
end
|
|
|
|
exit 0 unless rows.count>0
|
|
|
|
puts Terminal::Table.new(rows: rows, headings: ["Container", "Type", "Task", "Schedule", "Command"]) |