More commands.
This commit is contained in:
47
ofelias.rb
Executable file
47
ofelias.rb
Executable file
@ -0,0 +1,47 @@
|
||||
#!/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"])
|
Reference in New Issue
Block a user