prometheus-splash 0.5.3 → 0.6.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +58 -60
  3. data/bin/splash +3 -0
  4. data/config/splash.yml +15 -2
  5. data/lib/splash/backends.rb +6 -0
  6. data/lib/splash/backends/file.rb +36 -0
  7. data/lib/splash/backends/redis.rb +44 -1
  8. data/lib/splash/cli.rb +7 -3
  9. data/lib/splash/cli/commands.rb +11 -4
  10. data/lib/splash/cli/config.rb +9 -1
  11. data/lib/splash/cli/daemon.rb +8 -1
  12. data/lib/splash/cli/documentation.rb +5 -2
  13. data/lib/splash/cli/logs.rb +14 -6
  14. data/lib/splash/cli/process.rb +9 -0
  15. data/lib/splash/cli/webadmin.rb +46 -0
  16. data/lib/splash/commands.rb +23 -2
  17. data/lib/splash/config.rb +141 -1
  18. data/lib/splash/config/flush.rb +9 -1
  19. data/lib/splash/config/sanitycheck.rb +6 -1
  20. data/lib/splash/config/service.rb +8 -1
  21. data/lib/splash/config/setup.rb +8 -3
  22. data/lib/splash/constants.rb +30 -2
  23. data/lib/splash/daemon.rb +5 -1
  24. data/lib/splash/daemon/controller.rb +21 -1
  25. data/lib/splash/daemon/metrics.rb +22 -7
  26. data/lib/splash/daemon/orchestrator.rb +21 -3
  27. data/lib/splash/daemon/orchestrator/grammar.rb +25 -5
  28. data/lib/splash/daemon/orchestrator/hooks.rb +10 -0
  29. data/lib/splash/dependencies.rb +10 -1
  30. data/lib/splash/exiter.rb +14 -0
  31. data/lib/splash/helpers.rb +69 -45
  32. data/lib/splash/loggers.rb +30 -4
  33. data/lib/splash/loggers/cli.rb +18 -3
  34. data/lib/splash/loggers/daemon.rb +14 -3
  35. data/lib/splash/loggers/dual.rb +14 -1
  36. data/lib/splash/loggers/web.rb +51 -0
  37. data/lib/splash/logs.rb +15 -4
  38. data/lib/splash/processes.rb +17 -5
  39. data/lib/splash/templates.rb +10 -0
  40. data/lib/splash/transports.rb +9 -0
  41. data/lib/splash/transports/rabbitmq.rb +33 -3
  42. data/lib/splash/webadmin.rb +122 -0
  43. data/lib/splash/webadmin/api/routes/commands.rb +28 -0
  44. data/lib/splash/webadmin/api/routes/config.rb +10 -0
  45. data/lib/splash/webadmin/api/routes/init.rb +2 -0
  46. data/lib/splash/webadmin/api/routes/logs.rb +59 -0
  47. data/lib/splash/webadmin/api/routes/process.rb +60 -0
  48. data/lib/splash/webadmin/main.rb +26 -0
  49. data/lib/splash/webadmin/portal/controllers/commands.rb +7 -0
  50. data/lib/splash/webadmin/portal/controllers/documentation.rb +6 -0
  51. data/lib/splash/webadmin/portal/controllers/home.rb +12 -0
  52. data/lib/splash/webadmin/portal/controllers/logs.rb +14 -0
  53. data/lib/splash/webadmin/portal/controllers/notfound.rb +5 -0
  54. data/lib/splash/webadmin/portal/controllers/processes.rb +14 -0
  55. data/lib/splash/webadmin/portal/controllers/proxy.rb +30 -0
  56. data/lib/splash/webadmin/portal/controllers/restclient.rb +19 -0
  57. data/lib/splash/webadmin/portal/init.rb +11 -0
  58. data/lib/splash/webadmin/portal/public/css/ultragreen.css +8544 -0
  59. data/lib/splash/webadmin/portal/public/fonts/FontAwesome.otf +0 -0
  60. data/lib/splash/webadmin/portal/public/fonts/fontawesome-webfont.ttf +0 -0
  61. data/lib/splash/webadmin/portal/public/fonts/fontawesome-webfont.woff +0 -0
  62. data/lib/splash/webadmin/portal/public/fonts/fontawesome-webfont.woff2 +0 -0
  63. data/lib/splash/webadmin/portal/public/images/logo_splash.png +0 -0
  64. data/lib/splash/webadmin/portal/public/images/logo_splash_reduce.png +0 -0
  65. data/lib/splash/webadmin/portal/public/images/logo_splash_tiny.png +0 -0
  66. data/lib/splash/webadmin/portal/views/commands.slim +49 -0
  67. data/lib/splash/webadmin/portal/views/documentation.slim +3 -0
  68. data/lib/splash/webadmin/portal/views/home.slim +78 -0
  69. data/lib/splash/webadmin/portal/views/layout.slim +43 -0
  70. data/lib/splash/webadmin/portal/views/logs.slim +32 -0
  71. data/lib/splash/webadmin/portal/views/nav.slim +17 -0
  72. data/lib/splash/webadmin/portal/views/not_found.slim +3 -0
  73. data/lib/splash/webadmin/portal/views/processes.slim +29 -0
  74. data/lib/splash/webadmin/portal/views/proxy.slim +13 -0
  75. data/lib/splash/webadmin/portal/views/restclient.slim +41 -0
  76. data/lib/splash/webadmin/portal/views/restclient_result.slim +29 -0
  77. data/prometheus-splash.gemspec +6 -0
  78. data/spec/helpers_spec.rb +119 -0
  79. metadata +128 -5
@@ -0,0 +1,49 @@
1
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Commands configured in Splash
2
+
3
+ div.uk-width-medium-1-1
4
+ div.uk-panel.uk-panel-box
5
+ span.uk-text-large.uk-text-bold List of commands availables
6
+ br
7
+
8
+ div.uk-accordion(data-uk-accordion)
9
+ - @data.each do |command,content|
10
+ h3.uk-accordion-title <b>Name</b> : #{command}
11
+ div.uk-accordion-content
12
+ table.uk-table.uk-table-hover.uk-table-striped
13
+ thead
14
+ tr
15
+ th Definition
16
+ th Actions
17
+ tbody
18
+ tr
19
+ td
20
+ dl.uk-description-list-horizontal
21
+ dt <i class="uk-icon-th-list"></i>&nbsp;Description
22
+ dd #{content[:desc]}
23
+ - if content[:command]
24
+ dt <i class="uk-icon-cog"></i>&nbsp;Command Line
25
+ dd #{content[:command]}
26
+ - if content[:schedule]
27
+ dt <i class="uk-icon-calendar"></i>&nbsp;Schedule
28
+ dd
29
+ <ul>
30
+ <li> <b><i>Type</b></i> : #{content[:schedule].keys.first}</li>
31
+ <li> <b><i>Value</b></i> : #{content[:schedule].values.first}</li>
32
+ </ul>
33
+ - if content[:on_success]
34
+ dt <i class="uk-icon-check"></i>&nbsp;Execute on success
35
+ dd #{content[:on_success]}
36
+ - if content[:on_failure]
37
+ dt <i class="uk-icon-bolt"></i>&nbsp;Execute on failure
38
+ dd #{content[:on_failure]}
39
+ - if content[:user]
40
+ dt <i class="uk-icon-user"></i>&nbsp;become user
41
+ dd #{content[:user]}
42
+ - if content[:delegate_to]
43
+ dt <i class="uk-icon-chevron-circle-right"></i>&nbsp;Remote delegation
44
+ dd
45
+ <ul>
46
+ <li> <i><b>Host</b></i> : #{content[:delegate_to][:host]}</li>
47
+ <li> <b><i>Remote Command</b></i> : #{content[:delegate_to][:remote_command]}</li>
48
+ </ul>
49
+ td
@@ -0,0 +1,3 @@
1
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medkit "></i>&nbsp;&nbsp;Splash Documentation
2
+ div
3
+ == "#{@data}"
@@ -0,0 +1,78 @@
1
+ h2 This is Splash
2
+ p Choose a activity in the main menu
3
+
4
+
5
+ div.uk-grid
6
+ div.uk-width-medium-1-2
7
+ div.uk-panel.uk-panel-box
8
+ span.uk-text-large.uk-text-bold Global Configuration
9
+ br
10
+ br
11
+ span.uk-text-bold <i>Logger and display</i> :
12
+ ul
13
+ li <b>Level:</b> #{@data[:loggers][:level]}
14
+ li <b>Daemon log filename:</b> #{@data[:loggers][:daemon][:file]}
15
+ li <b>Web log filename:</b> #{@data[:loggers][:web][:file]}
16
+ li <b>Emoji in CLI:</b> #{@data[:loggers][:cli][:emoji]}
17
+ li <b>Color in CLI:</b> #{@data[:loggers][:cli][:color]}
18
+ span.uk-text-bold <i>Templates</i> :
19
+ ul
20
+ li <b>Execution Report Template file:</b> #{@data[:execution_template_path]}
21
+
22
+ div.uk-width-medium-1-2
23
+ div.uk-panel.uk-panel-box
24
+ span.uk-text-large.uk-text-bold Transport and Backend
25
+ br
26
+ br
27
+ span.uk-text-bold <i>Backend</i> :
28
+ ul
29
+ li <b>Backend type:</b> #{@data[:backends][:stores][:execution_trace][:type]}
30
+ - if @data[:backends][:stores][:execution_trace][:type] == :file
31
+ li <b>Path:</b> #{@data[:backends][:stores][:execution_trace][:path]}
32
+ - else
33
+ li <b>Host:</b> #{@data[:backends][:stores][:execution_trace][:host]}
34
+ li <b>Port:</b> #{@data[:backends][:stores][:execution_trace][:port]}
35
+ li <b>base:</b> #{@data[:backends][:stores][:execution_trace][:base]}
36
+ - unless @data[:backends][:stores][:execution_trace][:auth].nil?
37
+ li <b>Authentification:</b> Active (see config file)
38
+ span.uk-text-bold <i>Transport</i> :
39
+ ul
40
+ li <b>Transport:</b> #{@data[:transports][:active]}
41
+ - if @data[:transports][:active] == :rabbitmq
42
+ li <b>Host:</b> #{@data[:transports][:rabbitmq][:host]}
43
+ li <b>Port:</b> #{@data[:transports][:rabbitmq][:port]}
44
+ li <b>Vhost:</b> #{@data[:transports][:rabbitmq][:vhost]}
45
+ - unless @data[:transports][:rabbitmq][:user].nil?
46
+ li <b>Authentification:</b> Active (see config file)
47
+
48
+ div.uk-grid
49
+ div.uk-width-medium-1-2
50
+ div.uk-panel.uk-panel-box
51
+ span.uk-text-large.uk-text-bold Daemon
52
+ br
53
+ ul
54
+ li <b>Logs monitoring scheduling: </b> #{@data[:daemon_logmon_scheduling]}
55
+ li <b>Processes monitoring scheduling: </b> #{@data[:daemon_process_scheduling]}
56
+ li <b>Splash metrics monitoring scheduling: </b> #{@data[:daemon_metrics_scheduling]}
57
+ li <b>Splash daemon process name: </b> #{@data[:daemon_process_name]}
58
+ li <b>Splash daemon PID file path: </b> #{@data[:pid_path]}
59
+ li <b>Splash daemon PID file : </b> #{@data[:pid_file]}
60
+ li <b>Splash daemon trace path: </b> #{@data[:trace_path]}
61
+ li <b>Splash daemon trace STDOUT file: </b> #{@data[:stdout_trace]}
62
+ li <b>Splash daemon trace STDERR: </b> #{@data[:stderr_trace]}
63
+
64
+
65
+ div.uk-width-medium-1-2
66
+ div.uk-panel.uk-panel-box
67
+ span.uk-text-large.uk-text-bold Web UI
68
+ br
69
+ br
70
+ span.uk-text-bold <i>Webadmin</i> :
71
+ ul
72
+ li <b>IP:</b> #{@data[:webadmin_ip]}
73
+ li <b>Port:</b> #{@data[:webadmin_port]}
74
+
75
+ span.uk-text-bold <i>Prometheus PushGateway</i> :
76
+ ul
77
+ li <b>Host:</b> #{@data[:prometheus_pushgateway_host]}
78
+ li <b>Port:</b> #{@data[:prometheus_pushgateway_port]}
@@ -0,0 +1,43 @@
1
+ doctype 5
2
+ html lang="fr-fr" dir="ltr"
3
+ head
4
+ title== "Splash : Orchestration and Supervision made easy"
5
+ meta charset="utf-8"
6
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/uikit.min.css" integrity="sha512-b/j0MsmsRINkL4YUIZWvtf9tQr4KYQt2ld3NjEdakM7QRRWLenfe9OmG5K9GjNW56hE0QJCwWMv11fAVFELR2w==" crossorigin="anonymous"
7
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/accordion.min.css" integrity="sha512-5JEKYy09Sqq/8id+Mw3Za1avSracWTbu+JbI1nE7y3Ned7PG3K1E1/UxYF1oy9cUrRGJuvPXs4vNGamwRgM3sg==" crossorigin="anonymous"
8
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/sticky.min.css" integrity="sha512-bQYADl6QpGQzYScMfS9O7RTyyqlMABf2M5627gBC+xOMcGgqRIGJL3Yhr6QnXMwqQKVKcYcpknH0H3XQrDLB3w==" crossorigin="anonymous"
9
+
10
+ link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"
11
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/uikit.gradient.min.css" integrity="sha512-Vjr6Vz5D/gNvTBfQW581ssADQr1j8fAOU0seE2SxO8UvsCBZBoFQS9Lec3hkmZbpcYnsifkBtdQaHU4x6MylGw==" crossorigin="anonymous"
12
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/sticky.gradient.css" integrity="sha512-BY0A+4FEGeikNxmo9Q30BZMGRDykKHScJlOSeGq0uq+ylGDJD3zAApnktyKv9tzira1p0ow+B7VqIlRR2CBWoA==" crossorigin="anonymous"
13
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/accordion.gradient.min.css" integrity="sha512-Cfd5PRktfT5WA1yUJbYkzjEHvT+9KzqPP1Z1OJud3CFUrkoAc6iIWawoMqPFmtvmxxDNV5RAHfe5DCISV+Gd9A==" crossorigin="anonymous"
14
+
15
+
16
+
17
+ link rel="stylesheet" href="/css/ultragreen.css"
18
+
19
+ script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"
20
+ script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/uikit.min.js" integrity="sha512-KI08ZutCgdasDMwp5rPKd9nF8r+eAy/bZH3Rjova6HfkDv1W7J72sNW+K++KvMp3HL7z0cCykV9vixJACHeCew==" crossorigin="anonymous"
21
+ script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/components/sticky.min.js" integrity="sha512-B21PoHN5PsI7sU3cUcNbitUsXp6Zzp81ZDlKJr1xRXwEh3WSftRmgSOgRYxB8h/SlgW+jazkmOXerT33NB7jGA==" crossorigin="anonymous"
22
+ script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/components/accordion.min.js" integrity="sha512-7UmYoHJ9tTZiNqlBuUgnr2l82TmZxhiOVXIjiMVP/hPFQJopjEBfVEFPjNdv97OX8K/FIZ4kAXSE+SRTfUkPMg==" crossorigin="anonymous"
23
+
24
+
25
+ body
26
+ div.uk-width-1-1.uk-visible-small.uk-text-left
27
+ img src="/images/logo_splash_tiny.png"
28
+ span.uk-text-medium.uk-text-middle Orchestration and Supervision made easy
29
+ div.uk-width-1-1.uk-hidden-small
30
+ img src="/images/logo_splash_reduce.png"
31
+ span.uk-text-large.uk-text-middle Orchestration and Supervision made easy
32
+ == slim :nav, :format => :html
33
+ div.wrapper
34
+ div.uk-grid.uk-grid-medium
35
+ div.uk-width-9-1.uk-container.uk-container-center.uk-margin-left
36
+ br
37
+ == yield
38
+ div.footer
39
+ br
40
+ <a href="https://twitter.com/UltragreenSoft" class="uk-icon-hover uk-icon-twitter uk-icon-button"></a>&nbsp;&nbsp;
41
+ <a href="https://www.facebook.com/UltragreenSoft" class="uk-icon-hover uk-icon-facebook uk-icon-button"></a>&nbsp;&nbsp;
42
+ <a href="http://www.github.com/Ultragreen/prometheus-splash" class="uk-icon-hover uk-icon-github uk-icon-button"></a>
43
+ p.uk-text-center <span class="uk-icon-copyright uk-icon-small"></span> 2020 <a href="http://www.ultragreen.net"> Ultragreen Software</a> / <i><a href="https://www.openhub.net/accounts/lecid">Romain GEORGES</a></i>
@@ -0,0 +1,32 @@
1
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Logs configured in Splash
2
+
3
+ div.uk-width-medium-1-1
4
+ div.uk-panel.uk-panel-box
5
+ span.uk-text-large.uk-text-bold List of logs monitored
6
+ br
7
+ table.uk-table.uk-table-hover.uk-table-striped
8
+ thead
9
+ tr
10
+ th Log record label
11
+ th Definition
12
+ th Status
13
+ tbody
14
+ - @data.each do |log|
15
+ tr
16
+ td <b>Label</b> : #{log[:label]}
17
+ td
18
+ ul
19
+ li <b>File</b> : #{log[:log]}
20
+ li <b>Pattern</b> : #{log[:pattern]}
21
+ td
22
+ - if @result[log[:label]][:status] == :missing
23
+ div.uk-badge.uk-badge-warning missing
24
+ - if @result[log[:label]][:status] == :clean
25
+ div.uk-badge.uk-badge-success success
26
+ ul
27
+ li <b>Lines count</b> : #{@result[log[:label]][:lines]}
28
+ - if @result[log[:label]][:status] == :matched
29
+ div.uk-badge.uk-badge-danger matched
30
+ ul
31
+ li <b>Lines count</b> : #{@result[log[:label]][:lines]}
32
+ li <b class="uk-text-danger">Matchs count : #{@result[log[:label]][:count]} </b>
@@ -0,0 +1,17 @@
1
+ nav.uk-navbar.uk-navbar-attached(data-uk-sticky)
2
+ a.uk-navbar-brand.uk-hidden-small href="/" <i class="uk-icon-home"></i> Home
3
+ ul.uk-navbar-nav.uk-hidden-small
4
+ - for item in @menu
5
+ li class=( (item == @current_item)? "uk-active" : "uk-inactive")
6
+ a href="/#{item.downcase}" title="Access to #{item.capitalize}" <i class="uk-icon-#{@menu_icons[item]}"></i> #{item.capitalize}
7
+ a.uk-navbar-toggle.uk-visible-small(href="#offcanvas" data-uk-offcanvas)
8
+ div.uk-navbar-brand.uk-navbar-left.uk-visible-small
9
+ <i class="uk-icon-arrow-left"></i> Menu
10
+
11
+
12
+ div#offcanvas.uk-offcanvas
13
+ div.uk-offcanvas-bar
14
+ ul.uk-nav.uk-nav-offcanvas
15
+ - for item in @menu
16
+ li class=( (item == @current_item)? "uk-active" : "uk-inactive")
17
+ a href="/#{item.downcase}" title="Access to #{item.capitalize}" #{item.capitalize}
@@ -0,0 +1,3 @@
1
+ h2 404 : Page not found
2
+ p Ressource or page #{@path} not found
3
+ p Please click <a href='/'>here</a> to return home
@@ -0,0 +1,29 @@
1
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Processes configured in Splash
2
+
3
+ div.uk-width-medium-1-1
4
+ div.uk-panel.uk-panel-box
5
+ span.uk-text-large.uk-text-bold List of processes monitored
6
+ br
7
+ table.uk-table.uk-table-hover.uk-table-striped
8
+ thead
9
+ tr
10
+ th Process record
11
+ th Patterns
12
+ th Status
13
+ tbody
14
+ - @data.each do |process|
15
+ tr
16
+ td <b>Process</b> : #{process[:process]}
17
+ td
18
+ span.uk-text-bold Patterns
19
+ ul
20
+ - process[:patterns].each do |pattern|
21
+ li= pattern
22
+ td
23
+ - if @result[process[:process]][:status] == :inexistant
24
+ div.uk-badge.uk-badge-danger not running
25
+ - if @result[process[:process]][:status] == :running
26
+ div.uk-badge.uk-badge-success running
27
+ ul
28
+ li <b>CPU usage</b> : #{@result[process[:process]][:cpu]}
29
+ li <b>MEM usage</b> : #{@result[process[:process]][:mem]}
@@ -0,0 +1,13 @@
1
+ - if @proxy
2
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Proxies for Prometheus components
3
+ - else
4
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Links for Prometheus components
5
+ div.uk-width-medium-1-1
6
+ div.uk-panel.uk-panel-box
7
+ ul.uk-list
8
+ li
9
+ i.uk-icon-hand-o-right
10
+ a href="#{@prometheus_url}" &nbsp;Prometheus
11
+ li
12
+ i.uk-icon-hand-o-right
13
+ a href="#{@pushgateway_url}" &nbsp;Prometheus PushGateway
@@ -0,0 +1,41 @@
1
+ h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;REST Client
2
+
3
+ div.uk-grid
4
+ div.uk-width-1-1
5
+ div.uk-panel.uk-panel-box
6
+ h3.uk-panel-title
7
+ <i class="uk-icon-question-circle"></i> &nbsp;&nbsp;Request
8
+ form.uk-form.uk-form-horizontal#query action="/restclient/query" method="POST"
9
+ label.uk-form-label for="method" Method
10
+ select.uk-form-large#method name="method"
11
+ option GET
12
+ option POST
13
+ option DELETE
14
+ option PUT
15
+ div &nbsp;
16
+ label.uk-form-label for="url" Endpoint
17
+ input.uk-form-width-large#url type="text" placeholder="url" name="url"
18
+ dev.uk-align-right
19
+ input.uk-button.uk-button-primary type="submit" value="Send"
20
+
21
+ div.uk-grid
22
+ div.uk-width-1-1
23
+ div.uk-panel.uk-panel-box
24
+ h3.uk-panel-title
25
+ <i class="uk-icon-share-square"></i> &nbsp;&nbsp;Response
26
+ br
27
+ div#result.uk-width-1-1
28
+
29
+ javascript:
30
+ $('#query').submit(function() {
31
+ console.log($(this).serialize());
32
+ $.ajax({
33
+ data: $(this).serialize(),
34
+ type: $(this).attr('method'),
35
+ url: $(this).attr('action'),
36
+ success: function(response) {
37
+ $('#result').html(response);
38
+ }
39
+ });
40
+ return false;
41
+ });
@@ -0,0 +1,29 @@
1
+ di &nbsp;
2
+ ul.uk-list
3
+ li <b>HTTP Method</b> : #{@method}
4
+ li <b>URL</b> : #{@url}
5
+ h3 Result :
6
+ - unless @result == false
7
+ table.uk_table
8
+ tr
9
+ td.uk-width-2-10
10
+ i.uk-icon-dollar
11
+ | &nbsp;<b>Return code :</b>
12
+ td.uk-width-8-10 #{@result.code}
13
+ tr
14
+ td.uk-width-2-10
15
+ i.uk-icon-file-o
16
+ | &nbsp;<b>Body :</b>
17
+ td.uk-width-8-10.uk-scrollable-text <pre><code>#{@result}</code></pre>
18
+ tr
19
+ td.uk-width-2-10
20
+ i.uk-icon-header
21
+ | &nbsp;<b>Headers :</b>
22
+ td.uk-width-8-10
23
+ ul
24
+ - @result.headers.each do |hkey,value|
25
+ li <i><b>#{hkey}:</b> &nbsp; &nbsp; #{value}</i>
26
+
27
+ - else
28
+ div.uk-alert.uk-alert-danger
29
+ | Can't excute this request
@@ -28,6 +28,12 @@ Gem::Specification.new do |spec|
28
28
  spec.add_runtime_dependency 'tty-markdown','~> 0.6.0'
29
29
  spec.add_runtime_dependency 'tty-pager','~> 0.12.1'
30
30
  spec.add_runtime_dependency 'colorize','~> 0.8.1'
31
+ spec.add_runtime_dependency 'sinatra','~> 2.1.0'
32
+ spec.add_runtime_dependency 'thin','~> 1.7.2'
33
+ spec.add_runtime_dependency 'rest-client','~> 2.1.0'
34
+ spec.add_runtime_dependency 'slim','~> 4.1.0'
35
+ spec.add_runtime_dependency 'kramdown','~> 1.16.2'
36
+ spec.add_runtime_dependency 'rack-reverse-proxy','~> 0.12.0'
31
37
  spec.add_development_dependency 'rake', '~> 13.0.1'
32
38
  spec.add_development_dependency 'rspec', '~> 3.9.0'
33
39
  spec.add_development_dependency 'yard', '~> 0.9.24'
@@ -0,0 +1,119 @@
1
+ require_relative '../lib/splash/dependencies'
2
+
3
+ include Splash
4
+
5
+ describe Helpers do
6
+ $test_file = "./test.txt"
7
+ $test_target = './test_target.txt'
8
+ `echo 'test' > #{$test_file}`
9
+ $nonexistantfile = "./no.txt"
10
+ $test_folder = "./test_folder"
11
+ $symlink = "./test_link"
12
+ before :all do
13
+ File::unlink($nonexistantfile) if File::exist?($nonexistantfile)
14
+ end
15
+
16
+ after :all do
17
+ File::unlink($test_target) if File::exist?($test_target)
18
+ FileUtils::rm($symlink) if File::exist?($symlink)
19
+ FileUtils::rmdir($test_folder) if File::exist?($test_folder)
20
+ File::unlink($test_file) if File::exist?($test_file)
21
+
22
+ end
23
+
24
+
25
+ subject { Helpers }
26
+ specify { should be_an_instance_of Module }
27
+ context "Misc functions" do
28
+ include Splash::Helpers
29
+ describe '#user_root' do
30
+ specify { expect(self).to respond_to 'user_root' }
31
+ specify { expect(['root']).to include(user_root) }
32
+ end
33
+
34
+ describe '#group_root' do
35
+ specify { expect(self).to respond_to 'group_root' }
36
+ specify { expect(['root','wheel']).to include(user_root) }
37
+ end
38
+
39
+ describe '#get_processes' do
40
+ specify { expect(self).to respond_to 'get_processes' }
41
+ specify { expect(get_processes(pattern: '/usr')).to be_an_instance_of Array }
42
+ specify { expect(get_processes(patterns: ['/usr'])).to be_an_instance_of Array }
43
+ specify { expect(get_processes(pattern: '/usr').first).to be_an_instance_of String }
44
+ specify { expect(get_processes(pattern: '/usr', full: true).first).to be_an_instance_of PsProcess }
45
+ end
46
+
47
+ describe '#search_file_in_gem' do
48
+ specify { expect(self).to respond_to 'search_file_in_gem' }
49
+ specify { expect(search_file_in_gem('prometheus-splash','config/splash.yml')).to be_an_instance_of String }
50
+ specify { expect(search_file_in_gem('prometheus-splash','config/splash.yml')).to include('config/splash.yml') }
51
+ end
52
+
53
+ describe '#is_root?' do
54
+ specify { expect(self).to respond_to 'is_root?' }
55
+ specify { expect(is_root?).to eq(false) }
56
+ end
57
+
58
+ describe '#run_as_root' do
59
+ specify { expect(self).to respond_to 'run_as_root' }
60
+ specify { expect(run_as_root(:user_root)).to eq({:case => :not_root, :more => "subcommands : user_root"}) }
61
+ end
62
+
63
+ end
64
+
65
+ context "FS functions" do
66
+ include Splash::Helpers
67
+ describe '#install_file' do
68
+ specify { expect(self).to respond_to 'install_file' }
69
+ specify { expect(install_file(source: $test_file, target: $test_target, mode: "777" )).to eq(true) }
70
+ end
71
+
72
+ describe '#make_folder' do
73
+ specify { expect(self).to respond_to 'make_folder' }
74
+ specify { expect(make_folder(path: $test_folder, mode: "777" )).to eq(true) }
75
+ end
76
+
77
+ describe '#make_link' do
78
+ specify { expect(self).to respond_to 'make_link' }
79
+ specify { expect(make_link(source: $test_file, link: $symlink )).to eq(true) }
80
+ end
81
+
82
+ end
83
+
84
+ context "FS checkers" do
85
+ include Splash::Helpers
86
+ describe '#verify_file' do
87
+ specify { expect(self).to respond_to 'verify_file' }
88
+ specify { expect(verify_file(name: $test_file, mode: "777" )).to be_an_instance_of Array }
89
+ specify { expect(verify_file(name: $test_target, mode: "777" )).to be_empty }
90
+ specify { expect(verify_file(name: $test_file, mode: "700" )).to include(:mode) }
91
+ specify { expect(verify_file(name: $nonexistantfile, mode: "777" )).to include(:inexistant) }
92
+ end
93
+
94
+ describe '#verify_folder' do
95
+ specify { expect(self).to respond_to 'verify_folder' }
96
+ specify { expect(verify_folder(name: $test_folder, mode: "777" )).to be_an_instance_of Array }
97
+ specify { expect(verify_folder(name: $test_folder, mode: "777" )).to be_empty }
98
+ specify { expect(verify_folder(name: $test_folder, mode: "700" )).to include(:mode) }
99
+ specify { expect(verify_folder(name: $nonexistantfile, mode: "777" )).to include(:inexistant) }
100
+ end
101
+
102
+ describe '#verify_link' do
103
+ specify { expect(self).to respond_to 'verify_link' }
104
+ specify { expect(verify_link(name: $nonexistantfile)).to eq(false) }
105
+ specify { expect(verify_link(name: $symlink)).to eq(true) }
106
+ end
107
+
108
+ end
109
+
110
+ context "Service checker" do
111
+ include Splash::Helpers
112
+ describe '#verify_service' do
113
+ specify { expect(self).to respond_to 'verify_service' }
114
+ specify { expect(verify_service(host: 'localhost', port: '7777')).to eq(false) }
115
+ specify { expect(verify_service(host: 'github.com', port: '80')).to eq(true) }
116
+ end
117
+ end
118
+
119
+ end