prometheus-splash 0.8.0 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -3
  3. data/README.md +400 -178
  4. data/config/splash.yml +28 -14
  5. data/lib/splash/backends.rb +7 -1
  6. data/lib/splash/backends/file.rb +1 -1
  7. data/lib/splash/cli/commands.rb +122 -37
  8. data/lib/splash/cli/config.rb +12 -1
  9. data/lib/splash/cli/daemon.rb +1 -1
  10. data/lib/splash/cli/logs.rb +144 -48
  11. data/lib/splash/cli/process.rb +145 -52
  12. data/lib/splash/cli/transfers.rb +10 -3
  13. data/lib/splash/commands.rb +115 -40
  14. data/lib/splash/config.rb +112 -29
  15. data/lib/splash/config/flush.rb +2 -2
  16. data/lib/splash/constants.rb +3 -4
  17. data/lib/splash/daemon/orchestrator.rb +6 -7
  18. data/lib/splash/daemon/orchestrator/grammar.rb +1 -1
  19. data/lib/splash/dependencies.rb +1 -0
  20. data/lib/splash/exiter.rb +1 -1
  21. data/lib/splash/helpers.rb +1 -1
  22. data/lib/splash/logs.rb +94 -16
  23. data/lib/splash/monkeys.rb +5 -0
  24. data/lib/splash/processes.rb +91 -16
  25. data/lib/splash/sequences.rb +6 -1
  26. data/lib/splash/transfers.rb +13 -8
  27. data/lib/splash/webadmin/api/routes/commands.rb +15 -3
  28. data/lib/splash/webadmin/api/routes/config.rb +140 -2
  29. data/lib/splash/webadmin/api/routes/logs.rb +32 -17
  30. data/lib/splash/webadmin/api/routes/process.rb +21 -9
  31. data/lib/splash/webadmin/api/routes/sequences.rb +2 -2
  32. data/lib/splash/webadmin/main.rb +15 -1
  33. data/lib/splash/webadmin/portal/controllers/commands.rb +101 -1
  34. data/lib/splash/webadmin/portal/controllers/documentation.rb +2 -0
  35. data/lib/splash/webadmin/portal/controllers/home.rb +6 -1
  36. data/lib/splash/webadmin/portal/controllers/logs.rb +71 -1
  37. data/lib/splash/webadmin/portal/controllers/processes.rb +75 -3
  38. data/lib/splash/webadmin/portal/controllers/proxy.rb +2 -1
  39. data/lib/splash/webadmin/portal/controllers/restclient.rb +6 -1
  40. data/lib/splash/webadmin/portal/controllers/sequences.rb +2 -0
  41. data/lib/splash/webadmin/portal/public/css/ultragreen.css +6 -0
  42. data/lib/splash/webadmin/portal/public/favicon.ico +0 -0
  43. data/lib/splash/webadmin/portal/views/command_form.slim +45 -0
  44. data/lib/splash/webadmin/portal/views/command_history.slim +27 -0
  45. data/lib/splash/webadmin/portal/views/commands.slim +70 -20
  46. data/lib/splash/webadmin/portal/views/documentation.slim +1 -1
  47. data/lib/splash/webadmin/portal/views/home.slim +19 -20
  48. data/lib/splash/webadmin/portal/views/layout.slim +2 -2
  49. data/lib/splash/webadmin/portal/views/log_form.slim +27 -0
  50. data/lib/splash/webadmin/portal/views/log_history.slim +24 -0
  51. data/lib/splash/webadmin/portal/views/logs.slim +95 -21
  52. data/lib/splash/webadmin/portal/views/nav.slim +1 -1
  53. data/lib/splash/webadmin/portal/views/not_found.slim +1 -1
  54. data/lib/splash/webadmin/portal/views/process_form.slim +24 -0
  55. data/lib/splash/webadmin/portal/views/process_history.slim +24 -0
  56. data/lib/splash/webadmin/portal/views/processes.slim +80 -7
  57. data/lib/splash/webadmin/portal/views/proxy.slim +2 -2
  58. data/lib/splash/webadmin/portal/views/restclient.slim +7 -4
  59. data/lib/splash/webadmin/portal/views/restclient_result.slim +24 -20
  60. data/lib/splash/webadmin/portal/views/sequences.slim +1 -1
  61. data/prometheus-splash.gemspec +4 -4
  62. data/ultragreen_roodi_coding_convention.yml +4 -4
  63. metadata +18 -10
@@ -1,7 +1,107 @@
1
- WebAdminApp.get '/commands' do
1
+ WebAdminApp.get '/commands/?:status?/?:command?' do
2
2
  get_menu 2
3
+ log = get_logger
4
+ log.call "WEB : commands, verb : GET, controller : /commands"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/commands/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
8
+ @command_failed = params[:command] if params[:status] == 'failure'
9
+ @command_saved = params[:command] if params[:status] == 'success'
6
10
  slim :commands, :format => :html
7
11
  end
12
+
13
+ WebAdminApp.get '/get_command_history/:command' do
14
+ get_menu 2
15
+ log = get_logger
16
+ log.call "WEB : commands, verb : GET, controller : /get_command_history/:command"
17
+ @data = {}
18
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/commands/history/#{params[:command].to_s}.yml"
19
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
20
+ res = YAML::load(raw)
21
+ @data = res[:data] if res[:status] == :success
22
+ @command = params[:command].to_s
23
+ slim :command_history, :format => :html
24
+ end
25
+
26
+ WebAdminApp.get '/add_modify_command/?:command?' do
27
+ get_menu 2
28
+ log = get_logger
29
+ log.call "WEB : commands, verb : GET, controller : /add_modify_command/?:command?"
30
+ @data = {}
31
+ if params[:command] then
32
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/commands/show/#{params[:command].to_s}.yml"
33
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
34
+ res = YAML::load(raw)
35
+ @data = res[:data] if res[:status] == :success
36
+ if @data[:retention].class == Hash then
37
+ prov = @data[:retention].flatten.reverse.join(' ')
38
+ @data[:retention] = prov
39
+ end
40
+ if @data[:schedule].class == Hash then
41
+ prov = @data[:schedule].flatten.join(' ')
42
+ @data[:schedule] = prov
43
+ end
44
+ if @data[:delegate_to].class == Hash then
45
+ prov = "#{@data[:delegate_to][:remote_command]}@#{@data[:delegate_to][:host]}"
46
+ @data[:delegate_to] = prov
47
+ end
48
+ @data[:old_command] = params[:command].to_s
49
+ end
50
+ slim :command_form, :format => :html
51
+ end
52
+
53
+
54
+ WebAdminApp.post '/save_command' do
55
+ get_menu 2
56
+ log = get_logger
57
+ log.call "WEB : commands, verb : POST, controller : /save_command"
58
+ data = {}
59
+ unless params[:retention].blank?
60
+ value, key = params[:retention].split(' ')
61
+ key = (key.nil?)? :days : key.to_sym
62
+ value = value.to_i
63
+ key = :days if key == :day
64
+ key = :hours if key == :hour
65
+ if [:hours,:days].include? key then
66
+ data[:retention] = {key => value}
67
+ end
68
+ end
69
+
70
+ unless params[:schedule].blank?
71
+ key, value = params[:schedule].split(' ')
72
+ key = key.to_sym unless key.nil?
73
+ value = '' if value.nil?
74
+ if [:in,:every,:at].include? key and value.match(/\d+[m,d,s,h]/) then
75
+ data[:schedule] = {key => value }
76
+ end
77
+ end
78
+
79
+ unless params[:delegate_to].blank?
80
+ key, value = params[:delegate_to].split('@')
81
+ unless key.blank? or value.blank? then
82
+ data[:delegate_to] = {:remote_command => key.to_sym, :host => value.to_sym }
83
+ end
84
+ end
85
+
86
+ data[:desc] = params[:desc]
87
+ data[:command] = params[:command] unless params[:command].blank?
88
+ data[:on_failure] = params[:on_failure].to_sym unless params[:on_failure].blank?
89
+ data[:on_success] = params[:on_success].to_sym unless params[:on_success].blank?
90
+ data[:user] = params[:user] unless params[:user].blank?
91
+ data[:name] = params[:name].split(' ').first.to_sym
92
+ puts params.to_yaml
93
+ puts data.to_yaml
94
+ redirect "/command/failure/#{params[:name].to_s}" if data[:command].blank? and data[:delegate_to].blank?
95
+ if params[:update] then
96
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/deletecommand/#{params[:old_command]}"
97
+ raw = RestClient::Request.execute(method: 'DELETE', url: url,timeout: 10)
98
+ end
99
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/addcommand.yml"
100
+ raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10, payload: data.to_yaml)
101
+ res = YAML::load(raw)
102
+ if res[:status] == :success then
103
+ redirect "/commands/success/#{params[:name].to_s}"
104
+ else
105
+ redirect "/commands/failure/#{params[:name].to_s}"
106
+ end
107
+ end
@@ -1,5 +1,7 @@
1
1
  WebAdminApp.get '/documentation' do
2
2
  get_menu 6
3
+ log = get_logger
4
+ log.call "WEB : documentation, verb : GET, controller : /documentation"
3
5
  filename = search_file_in_gem("prometheus-splash","README.md")
4
6
  @data = Kramdown::Document.new(File::readlines(filename).join).to_html
5
7
  slim :documentation, :format => :html
@@ -1,4 +1,6 @@
1
1
  WebAdminApp.get '/' do
2
+ log = get_logger
3
+ log.call "WEB : BASE, verb : GET, controller : /"
2
4
  get_menu -1
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/full.yml"
4
6
  @raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
@@ -9,12 +11,15 @@ end
9
11
 
10
12
  WebAdminApp.get '/home' do
11
13
  get_menu 0
14
+ log = get_logger
15
+ log.call "WEB : home, verb : GET, controller : /home"
12
16
  slim :home, :format => :html
13
17
  end
14
18
 
15
19
  WebAdminApp.get '/daemon/:action' do
16
20
  content_type :text
17
-
21
+ log = get_logger
22
+ log.call "WEB : daemon, verb : GET, controller : /daemon/:action"
18
23
  case params[:action]
19
24
  when 'start'
20
25
  startdaemon scheduling: true, purge: false
@@ -1,5 +1,7 @@
1
- WebAdminApp.get '/logs' do
1
+ WebAdminApp.get '/logs/?:status?/?:label?' do
2
2
  get_menu 0
3
+ log = get_logger
4
+ log.call "WEB : logs, verb : GET, controller : /logs/?:status?/?:label?"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/logs/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
@@ -7,8 +9,76 @@ WebAdminApp.get '/logs' do
7
9
  raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10)
8
10
  prov = YAML::load(raw)[:data]
9
11
  @result = {}
12
+ @log_failed = params[:label] if params[:status] == 'failure'
13
+ @log_saved = params[:label] if params[:status] == 'success'
10
14
  prov.each {|item|
11
15
  @result[item[:label]] = item
12
16
  }
13
17
  slim :logs, :format => :html
14
18
  end
19
+
20
+
21
+ WebAdminApp.get '/add_modify_log/?:label?' do
22
+ get_menu 0
23
+ log = get_logger
24
+ log.call "WEB : logs, verb : GET, controller : /add_modify_log/?:label?"
25
+ @data = {}
26
+ if params[:label] then
27
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/logs/show/#{params[:label].to_s}.yml"
28
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
29
+ res = YAML::load(raw)
30
+ @data = res[:data] if res[:status] == :success
31
+ @data[:old_label] = params[:label].to_s
32
+ if @data[:retention].class == Hash then
33
+ prov = @data[:retention].flatten.reverse.join(' ')
34
+ @data[:retention] = prov
35
+ end
36
+ end
37
+ slim :log_form, :format => :html
38
+ end
39
+
40
+
41
+ WebAdminApp.get '/get_log_history/:label' do
42
+ get_menu 0
43
+ log = get_logger
44
+ log.call "WEB : logs, verb : GET, controller : /get_log_history/:label"
45
+ @data = {}
46
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/logs/history/#{params[:label].to_s}.yml"
47
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
48
+ res = YAML::load(raw)
49
+ @data = res[:data] if res[:status] == :success
50
+ @label = params[:label].to_s
51
+ slim :log_history, :format => :html
52
+ end
53
+
54
+ WebAdminApp.post '/save_log' do
55
+ get_menu 0
56
+ log = get_logger
57
+ log.call "WEB : logs, verb : POST, controller : /save_log "
58
+ data = {}
59
+ unless params[:retention].blank?
60
+ value, key = params[:retention].split(' ')
61
+ key = (key.nil?)? :days : key.to_sym
62
+ value = value.to_i
63
+ key = :days if key == :day
64
+ key = :hours if key == :hour
65
+ if [:hours,:days].include? key then
66
+ data[:retention] = {key => value}
67
+ end
68
+ end
69
+ data[:log] = params[:log]
70
+ data[:pattern] = params[:pattern]
71
+ data[:label] = params[:label].split(' ').first.to_sym
72
+ if params[:update] then
73
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/deletelog/#{params[:old_label]}"
74
+ raw = RestClient::Request.execute(method: 'DELETE', url: url,timeout: 10)
75
+ end
76
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/addlog.yml"
77
+ raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10, payload: data.to_yaml)
78
+ res = YAML::load(raw)
79
+ if res[:status] == :success then
80
+ redirect "/logs/success/#{params[:label].to_s}"
81
+ else
82
+ redirect "/logs/failure/#{params[:label].to_s}"
83
+ end
84
+ end
@@ -1,14 +1,86 @@
1
- WebAdminApp.get '/processes' do
1
+ WebAdminApp.get '/processes/?:status?/?:process?' do
2
2
  get_menu 1
3
- url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/process/list.yml"
3
+ log = get_logger
4
+ log.call "WEB : processes, verb : GET, controller : /processes/?:status?/?:process?"
5
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/processes/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
6
- url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/process/analyse.yml"
8
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/processes/analyse.yml"
7
9
  raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10)
8
10
  prov = YAML::load(raw)[:data]
9
11
  @result = {}
12
+ @process_failed = params[:process] if params[:status] == 'failure'
13
+ @process_saved = params[:process] if params[:status] == 'success'
10
14
  prov.each {|item|
11
15
  @result[item[:process]] = item
12
16
  }
13
17
  slim :processes, :format => :html
14
18
  end
19
+
20
+ WebAdminApp.get '/add_modify_process/?:process?' do
21
+ get_menu 1
22
+ log = get_logger
23
+ log.call "WEB : processes, verb : GET, controller : /add_modify_process/?:process?"
24
+ @data = {}
25
+ if params[:process] then
26
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/processes/show/#{params[:process].to_s}.yml"
27
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
28
+ res = YAML::load(raw)
29
+ @data = res[:data] if res[:status] == :success
30
+ if @data[:retention].class == Hash then
31
+ prov = @data[:retention].flatten.reverse.join(' ')
32
+ @data[:retention] = prov
33
+ end
34
+ if @data[:patterns].class == Array then
35
+ prov = @data[:patterns].join('|')
36
+ @data[:patterns] = prov
37
+ end
38
+ @data[:old_process] = params[:process].to_s
39
+ end
40
+ slim :process_form, :format => :html
41
+ end
42
+
43
+
44
+ WebAdminApp.get '/get_process_history/:process' do
45
+ get_menu 1
46
+ log = get_logger
47
+ log.call "WEB : processes, verb : GET, controller : /get_process_history/:process"
48
+ @data = {}
49
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/processes/history/#{params[:process].to_s}.yml"
50
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
51
+ res = YAML::load(raw)
52
+ @data = res[:data] if res[:status] == :success
53
+ @process = params[:process].to_s
54
+ slim :process_history, :format => :html
55
+ end
56
+
57
+ WebAdminApp.post '/save_process' do
58
+ get_menu 1
59
+ log = get_logger
60
+ log.call "WEB : processes, verb : POST, controller : /save_process"
61
+ data = {}
62
+ data[:patterns] = params[:patterns].split('|')
63
+ data[:process] = params[:process].split(' ').first.to_sym
64
+ unless params[:retention].blank?
65
+ value, key = params[:retention].split(' ')
66
+ key = (key.nil?)? :days : key.to_sym
67
+ value = value.to_i
68
+ key = :days if key == :day
69
+ key = :hours if key == :hour
70
+ if [:hours,:days].include? key then
71
+ data[:retention] = {key => value}
72
+ end
73
+ end
74
+ if params[:update] then
75
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/deleteprocess/#{params[:old_process]}"
76
+ raw = RestClient::Request.execute(method: 'DELETE', url: url,timeout: 10)
77
+ end
78
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/addprocess.yml"
79
+ raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10, payload: data.to_yaml)
80
+ res = YAML::load(raw)
81
+ if res[:status] == :success then
82
+ redirect "/processes/success/#{params[:process].to_s}"
83
+ else
84
+ redirect "/processes/failure/#{params[:process].to_s}"
85
+ end
86
+ end
@@ -19,7 +19,8 @@ end
19
19
 
20
20
  WebAdminApp.get '/proxy/links' do
21
21
  get_menu 5
22
-
22
+ log = get_logger
23
+ log.call "WEB : proxy, verb : GET, controller : /proxy/links"
23
24
  config = get_config
24
25
  if config.webadmin_proxy == true then
25
26
  @proxy = true
@@ -1,14 +1,19 @@
1
1
  WebAdminApp.get '/restclient' do
2
+ log = get_logger
3
+ log.call "WEB : restclient, verb : GET, controller : /restclient"
2
4
  get_menu 4
3
5
  slim :restclient, :format => :html
4
6
  end
5
7
 
6
8
  WebAdminApp.post '/restclient/query' do
9
+ log = get_logger
10
+ log.call "WEB : processes, verb : GET, controller : /restclient/query"
7
11
  @method = params[:method]
8
12
  @url = params[:url]
13
+ @body = params[:body]
9
14
  @notfound = false
10
15
  begin
11
- @result = RestClient::Request.execute(method: @method.to_sym, url: @url,timeout: 10)
16
+ @result = RestClient::Request.execute(method: @method.to_sym, url: @url,timeout: 10, payload: @body)
12
17
  rescue SocketError
13
18
  @result = false
14
19
  rescue RestClient::NotFound => e
@@ -1,5 +1,7 @@
1
1
  WebAdminApp.get '/sequences' do
2
2
  get_menu 3
3
+ log = get_logger
4
+ log.call "WEB : sequences, verb : GET, controller : /sequences"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/sequences/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
@@ -10,7 +10,13 @@
10
10
  height: 7em;
11
11
  }
12
12
 
13
+ h2 {
14
+ color: green;
15
+ }
13
16
 
17
+ .error {
18
+ color: red;
19
+ }
14
20
 
15
21
  .wrapper {
16
22
  overflow-y:scroll;
@@ -0,0 +1,45 @@
1
+ - unless @data.empty?
2
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Modify Splash command definition : #{@data[:process]}
3
+ - else
4
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Add new Splash command definition
5
+
6
+ script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"
7
+
8
+ form.uk-form.uk-form-horizontal#query action="/save_command" method="POST"
9
+ div.uk-text-bold Definition
10
+ label.uk-form-label for="name" Name
11
+ <input class="uk-form-width-large" id="name" type="text" placeholder="name" name="name" value="#{@data[:name].to_s}" required>
12
+ div &nbsp;
13
+ label.uk-form-label for="command" Command
14
+ <input class="uk-form-width-large" id="command" type="text" placeholder="command" name="command" value="#{@data[:command].to_s}">
15
+ div &nbsp;
16
+ label.uk-form-label for="desc" Description
17
+ <input class="uk-form-width-large" id="desc" type="text" placeholder="description" name="desc" value="#{@data[:desc]}" required>
18
+ div &nbsp;
19
+ label.uk-form-label for="desc" Become User
20
+ <input class="uk-form-width-large" id="user" type="text" placeholder="user" name="user" value="#{@data[:user]}">
21
+ div &nbsp;
22
+ label.uk-form-label for="retention" Retention (Like "2 hours, 2 days")
23
+ <input class="uk-form-width-large" id="retention" type="text" placeholder="retention" name="retention" value="#{@data[:retention]}">
24
+ div &nbsp;
25
+ label.uk-form-label for="schedule" Scheduling (Like "'every 10m', 'in 1h', 'at 12:00'")
26
+ <input class="uk-form-width-large" id="schedule" type="text" placeholder="scheduling" name="schedule" value="#{@data[:schedule]}">
27
+ div &nbsp;
28
+ label.uk-form-label for="delegate_to" Delegation (Like "task_name@hostname")
29
+ <input class="uk-form-width-large" id="delegate_to" type="text" placeholder="delegation" name="delegate_to" value="#{@data[:delegate_to]}">
30
+ div &nbsp;
31
+ div &nbsp;
32
+ div.uk-text-bold Callbacks
33
+ label.uk-form-label for="on_success" On success
34
+ <input class="uk-form-width-large" id="on_success" type="text" placeholder="on success" name="on_success" value="#{@data[:on_success]}">
35
+ div &nbsp;
36
+ label.uk-form-label for="on_success" On failure
37
+ <input class="uk-form-width-large" id="on_failure" type="text" placeholder="on failure" name="on_failure" value="#{@data[:on_failure]}">
38
+ div &nbsp;
39
+ - unless @data.empty?
40
+ input type="hidden" name="update" value="true"
41
+ input type="hidden" name="old_command" value="#{@data[:old_command].to_s}"
42
+ div.uk-align-right
43
+ input.uk-button.uk-button-small-primary type="submit" value="Submit"
44
+ javascript:
45
+ $("#query").validate();
@@ -0,0 +1,27 @@
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;History for command #{@command} executions and monitoring
2
+
3
+
4
+ -
5
+ div.uk-width-medium-1-1
6
+ div.uk-panel.uk-panel-box
7
+ span.uk-text-large.uk-text-bold List of records
8
+ br
9
+ table#logrecords.uk-table.uk-table-hover.uk-table-striped
10
+ thead
11
+ tr
12
+ th Start Date
13
+ th End Date
14
+ th Execution time (sec)
15
+ th Status
16
+ th STDOUT empty ?
17
+ th STDERR empty ?
18
+
19
+ tbody
20
+ - @data.reverse.each do |key|
21
+ tr class="#{(key[key.keys.first][:status].to_s.split.last == "0")? 'uk-text-success' : 'uk-text-danger'}"
22
+ td #{key.keys.first}
23
+ td #{key[key.keys.first][:end_date]}
24
+ td #{key[key.keys.first][:exec_time]}
25
+ td #{key[key.keys.first][:status].to_s}
26
+ td #{key[key.keys.first][:stdout].empty?}
27
+ td #{key[key.keys.first][:stderr].empty?}