dashing-contrib 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f910eb445f25ea5ea1ba28bc77a4197224879a0
4
- data.tar.gz: c90b294dcf58caa1b61a40dd9a497f2dc584891c
3
+ metadata.gz: ec500df2f1e3dabe80001d360235bab603642512
4
+ data.tar.gz: 5f27671229a2809906e0dd522b2767cf4fcd3372
5
5
  SHA512:
6
- metadata.gz: c9512cfb5954f4cc079e9df977d776544b4cb8af78043eb8860f51bc4183ff6495b4704a627934ea4d173bd5bf182881012b376b201fbe2dddbc7fd5b91b37e6
7
- data.tar.gz: 7739802b0ac7fb6adaf9e23bfd0a50ff127ef418e02d391cc7c89b029a0fef212eae1f9096a04dbb9f7c7097975a7dbed7518787e67a9af52e07906bd0b119ca
6
+ metadata.gz: 6c41b316df3d7f77cac798f53414ca25c49e08ac195c192dd13c9510277703b21bbb4c2f383c320185c166cd98565a57b4f157e7a10fb19def458a0ebc04a7af
7
+ data.tar.gz: e9ac3b976d43ecc3ea5929e9498c3f8f9dd9e5b128049a5e5740f7948ada8dc17e5f397424178866b64168d999ebe4b8d4bb5fa6e3ec9e8304dd0752bcadc13d
data/README.md CHANGED
@@ -17,7 +17,7 @@ Read each individual widget documentation to use dashing-contrib built-in widget
17
17
  ## Installation
18
18
  Add this line to your Dashing's dashboard Gemfile:
19
19
 
20
- gem 'dashing-contrib', '~> 0.1.0'
20
+ gem 'dashing-contrib', '~> 0.1.1'
21
21
 
22
22
  Update dependencies:
23
23
 
@@ -40,12 +40,12 @@ Include built-in SCSS to `assets/stylesheets/application.scss`
40
40
 
41
41
  Now you will be able to use the following widgets, click to see individual documentation:
42
42
 
43
- * [Rickshawgraph](https://github.com/QubitProducts/dashing-contrib/tree/master/lib/dashing-contrib/assets/widgets/rickshawgraph)
44
- * [Sidekiq](https://github.com/QubitProducts/dashing-contrib/tree/master/lib/dashing-contrib/assets/widgets/sidekiq)
45
- * [Pingdom Uptime](https://github.com/QubitProducts/dashing-contrib/tree/master/lib/dashing-contrib/assets/widgets/pingdom_uptime)
46
- * [Kue Status](https://github.com/QubitProducts/dashing-contrib/tree/master/lib/dashing-contrib/assets/widgets/kue_status)
47
- * [Nagios List](https://github.com/QubitProducts/dashing-contrib/tree/master/lib/dashing-contrib/assets/widgets/nagios_list)
48
- * Dashing State
43
+ * [Rickshawgraph](https://github.com/QubitProducts/dashing-contrib/wiki/Widget:-Rickshawgraph)
44
+ * [Sidekiq](https://github.com/QubitProducts/dashing-contrib/wiki/Widget:-Sidekiq)
45
+ * [Pingdom Uptime](https://github.com/QubitProducts/dashing-contrib/wiki/Widget:-Pingdom-Uptime)
46
+ * [Kue Status](https://github.com/QubitProducts/dashing-contrib/wiki/Widget:-Kue-Status)
47
+ * [Nagios List](https://github.com/QubitProducts/dashing-contrib/wiki/Widget:-Nagios-List)
48
+ * Dashing State (global alert if any widget is under critical state)
49
49
 
50
50
  ## dotenv
51
51
 
@@ -126,6 +126,40 @@ Take a look some build-in jobs as example:
126
126
  This is nice that backend data fetching can be now unit tested and reused. Dashing widget view layer can reuse the same job processor and present data in multiple forms.
127
127
 
128
128
 
129
+ # Widget State
130
+
131
+ All built-in jobs managed by 'DashingContrib::Runnable' assumes each widget instance has a 'state' under ok, warning or critical. We suggest your custom widget should also follow this convension.
132
+
133
+ This gem creates an additional REST API, as well as a widget to show a global healthness of the system. This is awesome if you would like to build some physical alert system around it.
134
+
135
+ `GET http://{dashing_endpoint}/api/states`
136
+
137
+ ```json
138
+ {
139
+ "ok": 2,
140
+ "warning": 0,
141
+ "critical": 0,
142
+ "detailed_status": {
143
+ "dashboard": {
144
+ "state": "ok",
145
+ "title": "Dashboard",
146
+ "updated_at": 1403823187
147
+ },
148
+ "nagios-list": {
149
+ "state": "ok",
150
+ "title": "Nagios Checks",
151
+ "updated_at": 1403823178
152
+ }
153
+ }
154
+ }
155
+ ```
156
+
157
+ # Persistent History
158
+
159
+ A new REST endpoint allows to force keep a snapshot of current events data and update the history.yml yaml file.
160
+
161
+ `Post http://{dashing_endpoint}/api/history/save`
162
+
129
163
 
130
164
  ## How to contribute
131
165
 
@@ -1,11 +1,8 @@
1
1
  class Dashing.DashingState extends Dashing.Widget
2
- @accessor 'items', ->
3
- items = []
4
- for key, item of @detailed_status
5
- items = items.concat(item)
6
-
7
- return items
8
-
9
-
10
2
 
3
+ @accessor 'widgetStates', ->
4
+ checks = []
5
+ for key, item of @get('detailed_status')
6
+ checks = checks.concat(item)
11
7
 
8
+ checks
@@ -17,8 +17,8 @@
17
17
 
18
18
  </div>
19
19
  <ul>
20
- <li data-foreach-item="items" data-bind-class="item.state | prepend 'item-state-'">
21
- <span data-bind="item.title"></span>
20
+ <li data-foreach-state="widgetStates" data-bind-class="state.state | prepend 'item-state-'">
21
+ <span data-bind="state.title"></span>
22
22
  </li>
23
23
  </ul>
24
24
  </div>
@@ -8,7 +8,17 @@ module DashingContrib
8
8
  def history
9
9
  Sinatra::Application.settings.history
10
10
  end
11
-
11
+
12
+ def history_file
13
+ Sinatra::Application.settings.history_file
14
+ end
15
+
16
+ def save
17
+ File.open(history_file, 'w') do |f|
18
+ f.puts history.to_yaml
19
+ end
20
+ end
21
+
12
22
  def raw_event(event_name)
13
23
  return nil if history[event_name].nil?
14
24
  history[event_name].gsub(/^data:/, '')
@@ -18,4 +18,12 @@ get '/api/states' do
18
18
  content_type :json
19
19
 
20
20
  DashingContrib::Dashing.states.to_json
21
+ end
22
+
23
+ post '/api/history/save' do
24
+ protected!
25
+ content_type :json
26
+
27
+ DashingContrib::History.save
28
+ { message: 'done' }
21
29
  end
@@ -1,3 +1,3 @@
1
1
  module DashingContrib
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dashing-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jing Dong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-26 00:00:00.000000000 Z
11
+ date: 2014-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -214,25 +214,18 @@ files:
214
214
  - lib/dashing-contrib/assets/widgets/dashing_state/dashing_state.coffee
215
215
  - lib/dashing-contrib/assets/widgets/dashing_state/dashing_state.html
216
216
  - lib/dashing-contrib/assets/widgets/dashing_state/dashing_state.scss
217
- - lib/dashing-contrib/assets/widgets/kue_status/README.md
218
217
  - lib/dashing-contrib/assets/widgets/kue_status/kue_status.coffee
219
218
  - lib/dashing-contrib/assets/widgets/kue_status/kue_status.html
220
219
  - lib/dashing-contrib/assets/widgets/kue_status/kue_status.scss
221
- - lib/dashing-contrib/assets/widgets/kue_status/preview.png
222
220
  - lib/dashing-contrib/assets/widgets/nagios_list/nagios_list.coffee
223
221
  - lib/dashing-contrib/assets/widgets/nagios_list/nagios_list.html
224
222
  - lib/dashing-contrib/assets/widgets/nagios_list/nagios_list.scss
225
- - lib/dashing-contrib/assets/widgets/pingdom_uptime/README.md
226
223
  - lib/dashing-contrib/assets/widgets/pingdom_uptime/pingdom_uptime.coffee
227
224
  - lib/dashing-contrib/assets/widgets/pingdom_uptime/pingdom_uptime.html
228
225
  - lib/dashing-contrib/assets/widgets/pingdom_uptime/pingdom_uptime.scss
229
- - lib/dashing-contrib/assets/widgets/pingdom_uptime/preview.png
230
- - lib/dashing-contrib/assets/widgets/rickshawgraph/README.md
231
226
  - lib/dashing-contrib/assets/widgets/rickshawgraph/rickshawgraph.coffee
232
227
  - lib/dashing-contrib/assets/widgets/rickshawgraph/rickshawgraph.html
233
228
  - lib/dashing-contrib/assets/widgets/rickshawgraph/rickshawgraph.scss
234
- - lib/dashing-contrib/assets/widgets/sidekiq/README.md
235
- - lib/dashing-contrib/assets/widgets/sidekiq/preview.png
236
229
  - lib/dashing-contrib/assets/widgets/sidekiq/sidekiq.coffee
237
230
  - lib/dashing-contrib/assets/widgets/sidekiq/sidekiq.html
238
231
  - lib/dashing-contrib/assets/widgets/sidekiq/sidekiq.scss
@@ -1,41 +0,0 @@
1
- KueStatus Widget
2
- =====
3
-
4
- ![](preview.png)
5
-
6
- A widget shows current status of [Kue](https://github.com/learnboost/kue) job queue.
7
-
8
- ## Usage
9
-
10
- Add the widget HTML to your dashboard
11
-
12
- ```html
13
- <li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
14
- <div data-id="kue-information" data-view="KueStatus" data-title="Kue information"></div>
15
- </li>
16
- ````
17
-
18
- ## Job
19
-
20
- An example of `jobs/kue_status_job.rb`
21
-
22
- ```ruby
23
- # built-in Kue helpers
24
- require 'dashing-contrib/bottles/kue'
25
-
26
- SCHEDULER.every '10s' do
27
- # Use .env file in your project to extract endpoint value
28
- # if dev and production enviroment are different
29
- client = DashingContrib::Kue::Client.new(endpoint: 'http://kue.example.com')
30
- stats = client.stats
31
-
32
- metrics = [
33
- { label: 'Processed', value: stats[:complete_count] },
34
- { label: 'Processing', value: stats[:active_count] },
35
- { label: 'Failed', value: stats[:failed_count] },
36
- { label: 'Queued', value: stats[:inactive_count] },
37
- { label: 'Delayed', value: stats[:delayed_count] }
38
- ]
39
- send_event('kue-information', { metrics: metrics } )
40
- end
41
- ````
@@ -1,68 +0,0 @@
1
- Pingdom Uptime
2
- ==============
3
-
4
- ![](preview.png)
5
-
6
-
7
- ### Requirement
8
-
9
- The smile face requires font-awesome >= 4.1.0. dashing-contrib includes 4.1.0 CSS and load font from CDN. You can safely delete the fonts folder and font-awesome css files in generated dashing asset folder.
10
-
11
- ### Example html usage
12
-
13
- ```html
14
- <li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
15
- <div data-view="PingdomUptime"
16
- data-id="pingdom-uptime"
17
- data-title="Dashboard"></div>
18
- </li>
19
- ```
20
-
21
-
22
- ### Example job
23
-
24
- This also shows a coupld of dashing-contrib data APIs for pingdom.
25
-
26
- ```ruby
27
- # Some helper methods for pingdom
28
- require 'dashing-contrib/bottles/pingdom'
29
-
30
- SCHEDULER.every '30s' do
31
- nowTime = Time.now.to_i
32
- t1_month = 86400 * 30
33
-
34
- # 24 hours
35
- defaultDateRange = nowTime - 86400
36
- # 4 months ago
37
- firstDateRange = nowTime - (t1_month * 4)
38
- # 1 year to date
39
- secondDateRange = nowTime - (t1_month * 12)
40
-
41
- client = DashingContrib::Pingdom::Client.new(
42
- username: ENV['PINGDOM_USERNAME'],
43
- password: ENV['PINGDOM_PASSWORD'],
44
- api_key: ENV['PINGDOM_API_KEY']
45
- )
46
- # checks id provided by pingdom
47
- id = '1234432'
48
- current_uptime = client.uptime(id, defaultDateRange, nowTime)
49
- first_uptime = client.uptime(id, firstDateRange, nowTime)
50
- second_uptime = client.uptime(id, secondDateRange, nowTime)
51
- status = client.checks(id)
52
-
53
- data = {
54
- current: current_uptime.to_s,
55
- first: first_uptime.to_s,
56
- first_title: '4 Months',
57
- second: second_uptime.to_s,
58
- second_title: 'YTD',
59
- is_up: status[:check][:status] == 'up',
60
- current_response_time: status[:check][:lastresponsetime],
61
- last_downtime: ::DashingContrib::Time.readable_diff(::Time.at(status[:check][:lasterrortime]))
62
- }
63
-
64
- send_event("pingdom-uptime", data)
65
- end
66
- ```
67
-
68
-
@@ -1,86 +0,0 @@
1
- Graphing Widget
2
- ===============
3
-
4
- Documentation initally written by [jwalton](https://gist.github.com/jwalton) from [gist](https://gist.github.com/jwalton/6614023)
5
-
6
- dashing-contrib includes this widget by default. If you want view template structured differently, you can create a HTML template in project root `widgets/rickshawgraph/rickshawgraph.html`.
7
-
8
-
9
- The graphing widget shows graphs using the Rickshaw graphing library. The names of data fields
10
- should be (vaguely) familiar if you've used Rickshaw before.
11
-
12
- dashing-contrib includes [latest rickshaw.js](https://raw.github.com/shutterstock/rickshaw/master/rickshaw.min.js). You can delete generated rickshaw Javascript in dashing project assets folder.
13
-
14
- Supported HTML data fields
15
- --------------------------
16
-
17
- * `data-title`: Title to display.
18
- * `data-displayed-value`: If provided, then the value to display overtop of the graph. If not
19
- provided, then the most recent value will be used if there is only one series.
20
- * `data-renderer`: Any valid Rickshaw renderer, including 'area', 'line', 'bar', 'scatterplot'.
21
- * `data-stroke`: If "true", then area graphs will be drawn with a stroke.
22
- * `data-unstack`: If "true", then area and bar graphs will be "unstacked".
23
- * `data-colors`: A ":" separated list of colors to use for each plot. If there are fewer colors
24
- provided than there are series to graph, then pleasing colors will be automatically chosen. (e.g.:
25
- `data-colors="#ccc:#ddd:#eee"`)
26
- * `data-stroke-colors`: A ":" separated list of colors to use for strokes.
27
- * `data-color-scheme`: One of "rainbow", "near-rainbow", "compliment", "default". Controls how
28
- default colors are assigned.
29
- * `data-default-alpha`: Alpha for default colors.
30
- * `data-legend`: If "true", then a legend will be added to your graph.
31
- * `data-min` and `data-max`: Set the highest and lowest values of the y-axis.
32
- * `data-summary-method` determines how the value shown in the graph is computed. If
33
- `data-displayed-value` is set, this is ignored. Otherwise this should be one of:
34
- * "last" - Default - If there is only one series, show the most recent value from that series.
35
- * "sum" - Sum of all values across all series.
36
- * "sumLast" - Sum of last values across all series.
37
- * "highest" - For stacked graphs, the highest single data point based on the sum of all series.
38
- For unstacked graphs, the highest single data point of any series.
39
-
40
- Passing Data
41
- ------------
42
-
43
- Data can be provided in a number of formats. Data can be passed as a series of points:
44
-
45
- points = [{x:1, y: 4}, {x:2, y:27}, {x:3, y:6}]
46
- send_event('convergence', points: points)
47
-
48
- Note that the `x` values are interpreted as unix timestamps. Data can also be passed as full-on
49
- Rickshaw-style series:
50
-
51
- series = [
52
- {
53
- name: "Convergence",
54
- data: [{x:1, y: 4}, {x:2, y:27}, {x:3, y:6}]
55
- },
56
- {
57
- name: "Divergence",
58
- data: [{x:1, y: 5}, {x:2, y:2}, {x:3, y:9}]
59
- }
60
- ]
61
- send_event('convergence', series: series)
62
-
63
- You can even provide colors and strokes here, which will override the values defined in the HTML.
64
- Or data can be passed as Graphite-style data:
65
-
66
- graphite = [
67
- {
68
- target: "stats_counts.http.ok",
69
- datapoints: [[10, 1378449600], [40, 1378452000], [53, 1378454400], [63, 1378456800], [27, 1378459200]]
70
- },
71
- {
72
- target: "stats_counts.http.err",
73
- datapoints: [[0, 1378449600], [4, 1378452000], [nil, 1378454400], [3, 1378456800], [0, 1378459200]]
74
- }
75
- ]
76
- send_event('http', series: graphite)
77
-
78
- You can even send data as JSON strings, straight from Graphite:
79
-
80
- require "rest-client"
81
- SCHEDULER.every '10s', :first_in => 0 do
82
- target = "aliasSub(summarize(stats_counts.http.*%2C%2720min%27)%2C%27%5E.*http.(%5Cw*).*%27%2C%27%5C1%27)"
83
- url = "http://graphteserver.local:8000/render?format=json&target=#{target}&from=today"
84
- graphite_json_data = RestClient.get url
85
- send_event 'http_counts', { series: graphite_json_data }
86
- end
@@ -1,36 +0,0 @@
1
- Sidekiq Widget
2
- ===============
3
-
4
- Sidekiq widget and documentation is intially developed by [pallan](https://github.com/pallan) with some improvements.
5
-
6
- ![](preview.png)
7
-
8
-
9
- ## Usage
10
-
11
- Add the widget HTML to your dashboard
12
- ```html
13
- <li data-row="2" data-col="4" data-sizex="2" data-sizey="2">
14
- <div data-id="sidekiq" data-view="Sidekiq" data-title="Sidekiq" style=""></div>
15
- </li>
16
- ```
17
-
18
- ## Job setup
19
-
20
- Create a `jobs/sidekiq.rb` in your dashing project.
21
-
22
-
23
- ```ruby
24
-
25
- # Require a built-in job
26
- require 'dashing-contrib/jobs/sidekiq'
27
-
28
- # Configure the job and setup Sidekiq connection
29
- # 'event' is your dashing event name
30
-
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
35
- end
36
- ```