dashing-contrib 0.0.5 → 0.1.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/README.md +88 -32
  4. data/dashing-contrib.gemspec +3 -1
  5. data/lib/dashing-contrib.rb +11 -1
  6. data/lib/dashing-contrib/assets/widgets.scss +31 -1
  7. data/lib/dashing-contrib/assets/widgets/dashing_state/dashing_state.coffee +11 -0
  8. data/lib/dashing-contrib/assets/widgets/dashing_state/dashing_state.html +24 -0
  9. data/lib/dashing-contrib/assets/widgets/dashing_state/dashing_state.scss +48 -0
  10. data/lib/dashing-contrib/assets/widgets/kue_status/kue_status.html +10 -8
  11. data/lib/dashing-contrib/assets/widgets/kue_status/kue_status.scss +10 -8
  12. data/lib/dashing-contrib/assets/widgets/nagios_list/nagios_list.coffee +49 -0
  13. data/lib/dashing-contrib/assets/widgets/nagios_list/nagios_list.html +37 -0
  14. data/lib/dashing-contrib/assets/widgets/nagios_list/nagios_list.scss +61 -0
  15. data/lib/dashing-contrib/assets/widgets/pingdom_uptime/pingdom_uptime.html +33 -33
  16. data/lib/dashing-contrib/assets/widgets/pingdom_uptime/pingdom_uptime.scss +1 -1
  17. data/lib/dashing-contrib/assets/widgets/sidekiq/README.md +12 -18
  18. data/lib/dashing-contrib/assets/widgets/sidekiq/sidekiq.html +10 -8
  19. data/lib/dashing-contrib/assets/widgets/sidekiq/sidekiq.scss +10 -45
  20. data/lib/dashing-contrib/bottles/dashing.rb +40 -0
  21. data/lib/dashing-contrib/bottles/nagios.rb +1 -0
  22. data/lib/dashing-contrib/bottles/nagios/client.rb +4 -0
  23. data/lib/dashing-contrib/bottles/nagios/status.rb +29 -0
  24. data/lib/dashing-contrib/bottles/pingdom/checks.rb +1 -1
  25. data/lib/dashing-contrib/jobs/dashing-state.rb +19 -0
  26. data/lib/dashing-contrib/jobs/kue.rb +33 -0
  27. data/lib/dashing-contrib/jobs/nagios_list.rb +34 -0
  28. data/lib/dashing-contrib/jobs/pingdom_uptime.rb +58 -0
  29. data/lib/dashing-contrib/jobs/sidekiq.rb +32 -0
  30. data/lib/dashing-contrib/routes.rb +7 -0
  31. data/lib/dashing-contrib/runnable_job.rb +88 -0
  32. data/lib/dashing-contrib/version.rb +1 -1
  33. data/spec/jobs/sidekiq_spec.rb +25 -0
  34. data/spec/runnable_job_spec.rb +22 -0
  35. data/spec/spec_helper.rb +1 -0
  36. metadata +48 -2
@@ -0,0 +1,61 @@
1
+ .widget-nagios-list {
2
+
3
+
4
+ ul {
5
+ padding: 0px;
6
+ margin: 0;
7
+ text-align: left;
8
+
9
+ li {
10
+ padding: 10px;
11
+ background: #2A2A2A;
12
+ border-bottom: 1px solid #333;
13
+ }
14
+
15
+ .host-title {
16
+ display: block;
17
+ font-size: 25px;
18
+ padding-bottom: 10px;
19
+ }
20
+
21
+ .checks-list {
22
+ .check-item {
23
+ display: inline-block;
24
+ margin-bottom: 18px;
25
+ margin-right: 5px;
26
+ border-radius: 5px;
27
+
28
+ .check-item-name {
29
+ padding: 3px 15px 5px 15px;
30
+ margin-right: 0px;
31
+ }
32
+ .check-item-timestamp {
33
+ padding: 3px 15px 5px 15px;
34
+ margin-left: -6px;
35
+ background: black;
36
+ }
37
+ }
38
+ }
39
+
40
+
41
+ &.critical-list {
42
+ .check-item-name {
43
+ background: #C32026;
44
+ }
45
+ }
46
+
47
+ &.warning-list {
48
+ .check-item-name {
49
+ background: #F7CE1B;
50
+ color: black;
51
+ }
52
+ }
53
+
54
+ &.ok-list {
55
+ .check-item-name {
56
+ background: #9ACA3C;
57
+ color: black;
58
+ }
59
+ }
60
+ }
61
+ }
@@ -1,44 +1,44 @@
1
- <header>
1
+ <div data-bind-class="state | prepend 'dashing-contrib state-'">
2
2
  <h1 class="title">Pingdom</h1>
3
- </header>
4
- <section class="body">
5
- <div class="canvas">
3
+ <section class="body">
4
+ <div class="canvas">
6
5
 
7
- <div class="uptime-container" data-bind-class="value">
8
- <div>Pingdom Uptime</div>
9
- <div>
10
- <span data-bind="current | shortenedNumber | prepend prefix | append suffix"></span>%
6
+ <div class="uptime-container" data-bind-class="value">
7
+ <div>Pingdom Uptime</div>
8
+ <div>
9
+ <span data-bind="current | shortenedNumber | prepend prefix | append suffix"></span>%
10
+ </div>
11
11
  </div>
12
- </div>
13
12
 
14
- <div class="current-status-container" data-bind-class="statusClass">
15
- <div data-bind="title"></div>
16
- <div>
17
- <i data-bind-class="arrowClass"></i>
13
+ <div class="current-status-container" data-bind-class="statusClass">
14
+ <div data-bind="title"></div>
15
+ <div>
16
+ <i data-bind-class="arrowClass"></i>
17
+ </div>
18
18
  </div>
19
- </div>
20
19
 
21
- <div class="row more-info past-status">
22
- <div class="left">
23
- <p>Last downtime<p>
24
- <p class="figure" data-bind="last_downtime"></p>
25
- </div>
26
- <div class="right">
27
- <p>Response time<p>
28
- <p class="figure" data-bind="current_response_time"></p>
20
+ <div class="row more-info past-status">
21
+ <div class="left">
22
+ <p>Last downtime<p>
23
+ <p class="figure" data-bind="last_downtime"></p>
24
+ </div>
25
+ <div class="right">
26
+ <p>Response time<p>
27
+ <p class="figure" data-bind="current_response_time"></p>
28
+ </div>
29
29
  </div>
30
- </div>
31
30
 
32
- <div class="row more-info uptime-status">
33
- <div class="left">
34
- <p data-bind="first_title"><p>
35
- <p class="figure"><span data-bind="first"></span>%</p>
36
- </div>
31
+ <div class="row more-info uptime-status">
32
+ <div class="left">
33
+ <p data-bind="first_title"><p>
34
+ <p class="figure"><span data-bind="first"></span>%</p>
35
+ </div>
37
36
 
38
- <div class="right">
39
- <p data-bind="second_title"><p>
40
- <p class="figure"><span data-bind="second"></span>%</p>
37
+ <div class="right">
38
+ <p data-bind="second_title"><p>
39
+ <p class="figure"><span data-bind="second"></span>%</p>
40
+ </div>
41
41
  </div>
42
42
  </div>
43
- </div>
44
- </section>
43
+ </section>
44
+ </div>
@@ -31,7 +31,7 @@ $moreinfo-color: rgba(255, 255, 255, 0.7);
31
31
  }
32
32
 
33
33
  .body {
34
- padding: 16px;
34
+ padding: 0px;
35
35
  color: #d3d4d4;
36
36
  text-shadow: 1px 1px #0e0e0e;
37
37
  font-family: Helvetica, Arial, sans-serif;
@@ -15,28 +15,22 @@ Add the widget HTML to your dashboard
15
15
  </li>
16
16
  ```
17
17
 
18
- ## Settings
18
+ ## Job setup
19
+
20
+ Create a `jobs/sidekiq.rb` in your dashing project.
19
21
 
20
- In `/jobs/sidekiq.rb` you need to configure the connection to your Redis server that backs Sidekiq.
21
22
 
22
23
  ```ruby
23
- require 'sidekiq/api'
24
24
 
25
- redis_uri = "redis://:#{YOUR_REDIS_PASSWORD}@#{YOUR_REDIS_HOST}:#{YOUR_REDIS_PORT}"
25
+ # Require a built-in job
26
+ require 'dashing-contrib/jobs/sidekiq'
26
27
 
27
- Sidekiq.configure_client do |config|
28
- config.redis = { url: redis_uri, namespace: 'myapp:namespace' }
29
- end
28
+ # Configure the job and setup Sidekiq connection
29
+ # 'event' is your dashing event name
30
30
 
31
- SCHEDULER.every '10s' do
32
- stats = Sidekiq::Stats.new
33
- metrics = [
34
- {label: 'Processed', value: stats.processed },
35
- {label: 'Failed', value: stats.failed },
36
- {label: 'Retries', value: stats.retry_size },
37
- {label: 'Dead', value: stats.dead_size },
38
- {label: 'Enqueued', value: stats.enqueued }
39
- ]
40
- send_event('sidekiq', { metrics: metrics } )
31
+ DashingContrib::Jobs::Sidekiq.run every: '10s', event: 'sidekiq-metric-name' do
32
+ Sidekiq.configure_client do |config|
33
+ config.redis = { url: 'redis://localhost.com:6379', namespace: 'sidekiq:namespace' }
34
+ end
41
35
  end
42
- ```
36
+ ```
@@ -1,8 +1,10 @@
1
- <h1 class="title" data-bind="title"></h1>
2
- <ul>
3
- <li data-foreach-metric="metrics">
4
- <span class="label" data-bind="metric.label"></span>
5
- <span class="value" data-bind="metric.value"></span>
6
- </li>
7
- </ul>
8
- <p class="updated-at" data-bind="updatedAtMessage"></p>
1
+ <div data-bind-class="state | prepend 'dashing-contrib state-'">
2
+ <h1 class="title" data-bind="title"></h1>
3
+ <ul>
4
+ <li data-foreach-metric="metrics">
5
+ <span class="label" data-bind="metric.label"></span>
6
+ <span class="value" data-bind="metric.value"></span>
7
+ </li>
8
+ </ul>
9
+ <p class="updated-at" data-bind="updatedAtMessage"></p>
10
+ </div>
@@ -1,59 +1,24 @@
1
- // ----------------------------------------------------------------------------
2
- // Sass declarations
3
- // ----------------------------------------------------------------------------
4
- $background-color: #f0f0f0;
5
-
6
- $value-color: #636466;
7
-
8
-
9
- // ----------------------------------------------------------------------------
10
- // Widget-sidekiq styles
11
- // ----------------------------------------------------------------------------
12
1
  .widget-sidekiq {
13
2
  $background-image-url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABVCAYAAADnu9JFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA1ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iREMzRTU4OEUzN0ZDRUJEMzMyQ0REM0VDODYwRkNCQzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUVFODE1RkVGOUU4MTFFMTkyMjhBOTJFMTRGRjU0QjYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUVFODE1RkRGOUU4MTFFMTkyMjhBOTJFMTRGRjU0QjYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiBNYWNpbnRvc2giPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGODdGMTE3NDA3MjA2ODExODA4M0I0QjMyM0I1QzJCRiIgc3RSZWY6ZG9jdW1lbnRJRD0iREMzRTU4OEUzN0ZDRUJEMzMyQ0REM0VDODYwRkNCQzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4g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";
14
3
 
15
- background: $background-color url($background-image-url) 20px 25px no-repeat;
16
-
17
- &.large h3 {
18
- font-size: 65px;
19
- }
20
-
21
4
  .title {
22
- color: $value-color;
23
- }
24
-
25
- .more-info {
26
- color: $value-color;
27
- }
28
-
29
- .updated-at {
30
- color: rgba(0, 0, 0, 1);
5
+ background: url($background-image-url);
6
+ background-size: 45px 45px;
7
+ background-repeat: no-repeat;
8
+ background-position: 5px 5px;
31
9
  }
32
10
 
33
11
  ul {
34
12
  margin: 0 15px;
35
13
  text-align: left;
36
- color: $value-color;
37
14
  font-size: 22px;
38
- }
39
-
40
- li {
41
- margin-bottom: 5px;
42
- }
43
15
 
44
- .list-nostyle {
45
- list-style: none;
46
- }
47
-
48
- .label {
49
- color: $value-color;
50
- }
16
+ li {
17
+ padding: 6px 0px;
51
18
 
52
- .value {
53
- float: right;
54
- margin-left: 12px;
55
- font-weight: 600;
56
- color: $value-color;
19
+ .value {
20
+ float: right;
21
+ }
22
+ }
57
23
  }
58
-
59
24
  }
@@ -0,0 +1,40 @@
1
+ require 'dashing-contrib/history'
2
+
3
+ # Extracts overall state of dashing widgets
4
+ # This is useful for overall view of the monitoring system
5
+ module DashingContrib
6
+ module Dashing
7
+
8
+ def self.states
9
+ detailed_status = {}
10
+ ok_count = 0
11
+ warning_count = 0
12
+ critical_count = 0
13
+
14
+ DashingContrib::History.history.each do |key, value|
15
+ payload = DashingContrib::History.json_event(key, {})
16
+ state = payload[:state] || 'ok'
17
+ title = payload[:title] || key
18
+
19
+ unless payload[:ignore]
20
+ ok_count = ok_count + 1 if state == 'ok'
21
+ warning_count = warning_count + 1 if state == 'warning'
22
+ critical_count = critical_count + 1 if state == 'critical'
23
+
24
+ detailed_status[key] = {
25
+ state: state,
26
+ title: title,
27
+ updated_at: payload[:updatedAt]
28
+ }
29
+ end
30
+ end
31
+
32
+ {
33
+ ok: ok_count,
34
+ warning: warning_count,
35
+ critical: critical_count,
36
+ detailed_status: detailed_status
37
+ }
38
+ end
39
+ end
40
+ end
@@ -1 +1,2 @@
1
+ require 'dashing-contrib/bottles/nagios/status'
1
2
  require 'dashing-contrib/bottles/nagios/client'
@@ -8,6 +8,10 @@ module DashingContrib
8
8
  def initialize(options = {})
9
9
  @client = NagiosHarder::Site.new(options[:endpoint], options[:username], options[:password], options[:version], options[:time_format])
10
10
  end
11
+
12
+ def status(options = {})
13
+ ::DashingContrib::Nagios::Status.fetch(client, options)
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -0,0 +1,29 @@
1
+ module DashingContrib
2
+ module Nagios
3
+ module Status
4
+ extend self
5
+
6
+ def fetch(client, options = {})
7
+ critical = client.service_status(default_critical_options.merge(options))
8
+ warning = client.service_status(default_warning_options.merge(options))
9
+ ok = client.service_status(default_ok_options.merge(options))
10
+ ok.select! { |check| check['status'] == 'OK' }
11
+
12
+ { critical: critical, warning: warning, ok: ok }
13
+ end
14
+
15
+ private
16
+ def default_critical_options
17
+ { :service_status_types => [:critical], :sort_type => :descending, :sort_option => :last_check }
18
+ end
19
+
20
+ def default_warning_options
21
+ { :service_status_types => [:warning], :sort_type => :descending, :sort_option => :last_check }
22
+ end
23
+
24
+ def default_ok_options
25
+ { :sort_option => :last_check, :sort_type => :descending }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -14,7 +14,7 @@ module DashingContrib
14
14
  def make_request(credentials, id)
15
15
  request_url = "https://#{credentials.username}:#{credentials.password}@api.pingdom.com/api/2.0/checks/#{id}"
16
16
  response = RestClient.get(request_url, { 'App-Key' => credentials.api_key })
17
- MultiJson.load(response.body, { symbolize_keys: true })
17
+ MultiJson.load response.body, { symbolize_keys: true }
18
18
  end
19
19
  end
20
20
  end
@@ -0,0 +1,19 @@
1
+ require 'dashing-contrib/bottles/dashing'
2
+ # Look at internal all available widgets and creates an overall state information
3
+ module DashingContrib
4
+ module Jobs
5
+ module DashingState
6
+ extend DashingContrib::RunnableJob
7
+
8
+ def self.metrics(options)
9
+ DashingContrib::Dashing.states.merge({ ignore: true })
10
+ end
11
+
12
+ def self.validate_state(metrics, options = {})
13
+ return DashingContrib::RunnableJob::CRITICAL if metrics[:critical] > 0
14
+ return DashingContrib::RunnableJob::WARNING if metrics[:warning] > 0
15
+ DashingContrib::RunnableJob::OK
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ require 'dashing-contrib/bottles/kue'
2
+ module DashingContrib
3
+ module Jobs
4
+ module Kue
5
+ extend DashingContrib::RunnableJob
6
+
7
+ def self.metrics(options)
8
+ client = DashingContrib::Kue::Client.new({ endpoint: options[:endpoint] })
9
+ stats = client.stats
10
+ metrics = [
11
+ { label: 'Processed', value: stats[:complete_count] },
12
+ { label: 'Processing', value: stats[:active_count] },
13
+ { label: 'Failed', value: stats[:failed_count] },
14
+ { label: 'Queued', value: stats[:inactive_count] },
15
+ { label: 'Delayed', value: stats[:delayed_count] }
16
+ ]
17
+ { metrics: metrics }
18
+ end
19
+
20
+ def self.validate_state(metrics, options = {})
21
+ default = { failed_warning_at: 20, failed_critical_at: 100 }
22
+ user_options = default.merge(options)
23
+
24
+ failed_stats = metrics[:metrics].select { |v| v[:label] == 'Failed' }.first
25
+ value = failed_stats[:value].to_i
26
+
27
+ return DashingContrib::RunnableJob::OK if value < user_options[:failed_warning_at]
28
+ return DashingContrib::RunnableJob::WARNING if value >= user_options[:failed_warning_at] && value < user_options[:failed_critical_at]
29
+ DashingContrib::RunnableJob::CRITICAL
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,34 @@
1
+ require 'dashing-contrib/bottles/nagios'
2
+
3
+ module DashingContrib
4
+ module Jobs
5
+ module NagiosList
6
+ extend DashingContrib::RunnableJob
7
+
8
+
9
+ # Returns format
10
+ # {
11
+ # critical:[],
12
+ # warning:[],
13
+ # ok:[]
14
+ # }
15
+ def self.metrics(options)
16
+ client = DashingContrib::Nagios::Client.new({
17
+ username: options[:username],
18
+ endpoint: options[:endpoint],
19
+ password: options[:password],
20
+ version: options[:version] || 3,
21
+ time_format: options[:time_format] || 'iso8601'
22
+ })
23
+
24
+ client.status(options[:nagios_filter] || {})
25
+ end
26
+
27
+ def self.validate_state(metrics, options = {})
28
+ return DashingContrib::RunnableJob::CRITICAL unless metrics[:critical].size.zero?
29
+ return DashingContrib::RunnableJob::WARNING unless metrics[:warning].size.zero?
30
+ DashingContrib::RunnableJob::OK
31
+ end
32
+ end
33
+ end
34
+ end