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"]) |