sensu-dashboard 0.9.8 → 0.9.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +0 -0
- data/README.md +9 -0
- data/bin/sensu-dashboard +8 -7
- data/lib/sensu-dashboard.rb +3 -0
- data/lib/sensu-dashboard/assets/javascripts/app.js +38 -0
- data/lib/sensu-dashboard/assets/javascripts/application.coffee +21 -0
- data/lib/sensu-dashboard/assets/javascripts/bootstrapper.coffee +39 -0
- data/lib/sensu-dashboard/assets/javascripts/collections/base.coffee +22 -0
- data/lib/sensu-dashboard/assets/javascripts/collections/checks.coffee +8 -0
- data/lib/sensu-dashboard/assets/javascripts/collections/clients.coffee +83 -0
- data/lib/sensu-dashboard/assets/javascripts/collections/events.coffee +184 -0
- data/lib/sensu-dashboard/assets/javascripts/collections/stashes.coffee +37 -0
- data/lib/sensu-dashboard/assets/javascripts/config/states.coffee +30 -0
- data/lib/sensu-dashboard/assets/javascripts/handlebars_helpers.coffee +2 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/backbone-min.js +4 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/bootstrap.min.js +7 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/jquery-1.9.1.min.js +5 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/liquid.metal.js +107 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/lodash.underscore.min.js +34 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/retina.js +3 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/scroll.into.view.js +32 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/toastr.min.js +1 -0
- data/lib/sensu-dashboard/assets/javascripts/libs/token.field.coffee +173 -0
- data/lib/sensu-dashboard/assets/javascripts/matcher.coffee +34 -0
- data/lib/sensu-dashboard/assets/javascripts/models/check.coffee +11 -0
- data/lib/sensu-dashboard/assets/javascripts/models/client.coffee +58 -0
- data/lib/sensu-dashboard/assets/javascripts/models/event.coffee +78 -0
- data/lib/sensu-dashboard/assets/javascripts/models/info.coffee +58 -0
- data/lib/sensu-dashboard/assets/javascripts/models/metadata/events.coffee +21 -0
- data/lib/sensu-dashboard/assets/javascripts/models/stash.coffee +34 -0
- data/lib/sensu-dashboard/assets/javascripts/namespace.coffee +17 -0
- data/lib/sensu-dashboard/assets/javascripts/state.coffee +33 -0
- data/lib/sensu-dashboard/assets/javascripts/state_manager.coffee +52 -0
- data/lib/sensu-dashboard/assets/javascripts/states/main_state.coffee +6 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/autocomplete/results_check_item.hbs +1 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/autocomplete/results_check_token.hbs +1 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/autocomplete/results_client_item.hbs +1 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/autocomplete/results_client_token.hbs +1 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/autocomplete/results_query_item.hbs +1 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/autocomplete/results_query_token.hbs +1 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/checks/index.hbs +10 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/checks/list.hbs +12 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/checks/list_item.hbs +5 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/clients/counts.hbs +6 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/clients/index.hbs +26 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/clients/list.hbs +12 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/clients/list_item.hbs +14 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/clients/modal.hbs +30 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/empty_list.hbs +4 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/error.hbs +5 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/events/counts.hbs +9 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/events/index.hbs +33 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/events/list.hbs +11 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/events/list_item.hbs +18 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/events/modal.hbs +47 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/info/index.hbs +54 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/modal.hbs +17 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/stashes/counts.hbs +6 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/stashes/index.hbs +22 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/stashes/list.hbs +10 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/stashes/list_item.hbs +5 -0
- data/lib/sensu-dashboard/assets/javascripts/templates/stashes/modal.hbs +25 -0
- data/lib/sensu-dashboard/assets/javascripts/views/auto_complete/auto_complete_field.coffee +133 -0
- data/lib/sensu-dashboard/assets/javascripts/views/auto_complete/auto_complete_results.coffee +135 -0
- data/lib/sensu-dashboard/assets/javascripts/views/auto_complete/auto_complete_token.coffee +31 -0
- data/lib/sensu-dashboard/assets/javascripts/views/base.coffee +16 -0
- data/lib/sensu-dashboard/assets/javascripts/views/checks/index.coffee +18 -0
- data/lib/sensu-dashboard/assets/javascripts/views/checks/list.coffee +48 -0
- data/lib/sensu-dashboard/assets/javascripts/views/checks/list_item.coffee +17 -0
- data/lib/sensu-dashboard/assets/javascripts/views/clients/counts.coffee +13 -0
- data/lib/sensu-dashboard/assets/javascripts/views/clients/index.coffee +83 -0
- data/lib/sensu-dashboard/assets/javascripts/views/clients/list.coffee +56 -0
- data/lib/sensu-dashboard/assets/javascripts/views/clients/list_item.coffee +20 -0
- data/lib/sensu-dashboard/assets/javascripts/views/clients/modal.coffee +83 -0
- data/lib/sensu-dashboard/assets/javascripts/views/error.coffee +17 -0
- data/lib/sensu-dashboard/assets/javascripts/views/events/counts.coffee +12 -0
- data/lib/sensu-dashboard/assets/javascripts/views/events/index.coffee +143 -0
- data/lib/sensu-dashboard/assets/javascripts/views/events/list.coffee +52 -0
- data/lib/sensu-dashboard/assets/javascripts/views/events/list_item.coffee +25 -0
- data/lib/sensu-dashboard/assets/javascripts/views/events/modal.coffee +129 -0
- data/lib/sensu-dashboard/assets/javascripts/views/info/index.coffee +13 -0
- data/lib/sensu-dashboard/assets/javascripts/views/list.coffee +44 -0
- data/lib/sensu-dashboard/assets/javascripts/views/list_item.coffee +14 -0
- data/lib/sensu-dashboard/assets/javascripts/views/modal.coffee +25 -0
- data/lib/sensu-dashboard/assets/javascripts/views/stashes/counts.coffee +13 -0
- data/lib/sensu-dashboard/assets/javascripts/views/stashes/index.coffee +49 -0
- data/lib/sensu-dashboard/assets/javascripts/views/stashes/list.coffee +45 -0
- data/lib/sensu-dashboard/assets/javascripts/views/stashes/list_item.coffee +28 -0
- data/lib/sensu-dashboard/assets/javascripts/views/stashes/modal.coffee +46 -0
- data/lib/sensu-dashboard/assets/stylesheets/app.css +5 -0
- data/lib/sensu-dashboard/assets/stylesheets/libs/bootstrap.min.css +717 -0
- data/lib/sensu-dashboard/assets/stylesheets/libs/font-awesome.less +537 -0
- data/lib/sensu-dashboard/assets/stylesheets/libs/toastr.min.css +1 -0
- data/lib/sensu-dashboard/assets/stylesheets/main.sass +414 -0
- data/lib/sensu-dashboard/constants.rb +7 -0
- data/lib/sensu-dashboard/public/favicon.ico +0 -0
- data/lib/sensu-dashboard/public/font/FontAwesome.otf +0 -0
- data/lib/sensu-dashboard/public/font/fontawesome-webfont.eot +0 -0
- data/lib/sensu-dashboard/public/font/fontawesome-webfont.svg +284 -0
- data/lib/sensu-dashboard/public/font/fontawesome-webfont.ttf +0 -0
- data/lib/sensu-dashboard/public/font/fontawesome-webfont.woff +0 -0
- data/lib/sensu-dashboard/public/img/favicon_114.png +0 -0
- data/lib/sensu-dashboard/public/img/favicon_144.png +0 -0
- data/lib/sensu-dashboard/public/img/favicon_57.png +0 -0
- data/lib/sensu-dashboard/public/img/favicon_64.png +0 -0
- data/lib/sensu-dashboard/public/img/favicon_72.png +0 -0
- data/lib/sensu-dashboard/public/img/glyphicons-halflings-white.png +0 -0
- data/lib/sensu-dashboard/public/img/glyphicons-halflings.png +0 -0
- data/lib/sensu-dashboard/public/img/loading.gif +0 -0
- data/lib/sensu-dashboard/public/img/logo.png +0 -0
- data/lib/sensu-dashboard/public/img/logo@2x.png +0 -0
- data/lib/sensu-dashboard/server.rb +337 -0
- data/lib/sensu-dashboard/views/layout.slim +49 -0
- data/lib/sensu-dashboard/views/main.slim +3 -0
- data/sensu-dashboard.gemspec +21 -11
- metadata +308 -120
- data/.gitignore +0 -6
- data/Gemfile +0 -4
- data/README.org +0 -4
- data/Rakefile +0 -1
- data/lib/sensu-dashboard/app.rb +0 -439
- data/lib/sensu-dashboard/public/css/autoSuggest.css +0 -217
- data/lib/sensu-dashboard/public/css/style.css +0 -177
- data/lib/sensu-dashboard/public/img/cross.png +0 -0
- data/lib/sensu-dashboard/public/img/footer_bg.png +0 -0
- data/lib/sensu-dashboard/public/img/header_bg.png +0 -0
- data/lib/sensu-dashboard/public/img/loading_circle.gif +0 -0
- data/lib/sensu-dashboard/public/img/main_content_bg.png +0 -0
- data/lib/sensu-dashboard/public/img/megaphone_icon.png +0 -0
- data/lib/sensu-dashboard/public/img/megaphone_icon_off.png +0 -0
- data/lib/sensu-dashboard/public/js/FABridge.js +0 -604
- data/lib/sensu-dashboard/public/js/functions.js +0 -367
- data/lib/sensu-dashboard/public/js/jquery-1.5.1.min.js +0 -16
- data/lib/sensu-dashboard/public/js/jquery.autoSuggest.js +0 -375
- data/lib/sensu-dashboard/public/js/jquery.leanModal.min.js +0 -1
- data/lib/sensu-dashboard/public/js/jquery.sortElements.js +0 -69
- data/lib/sensu-dashboard/public/js/jquery.tmpl.min.js +0 -1
- data/lib/sensu-dashboard/public/js/jquery.zclip.min.js +0 -12
- data/lib/sensu-dashboard/public/js/modernizr-1.7.min.js +0 -2
- data/lib/sensu-dashboard/public/js/swfobject.js +0 -4
- data/lib/sensu-dashboard/public/js/web_socket.js +0 -312
- data/lib/sensu-dashboard/public/js/webtoolkit.sha1.js +0 -174
- data/lib/sensu-dashboard/public/swf/WebSocketMain.swf +0 -0
- data/lib/sensu-dashboard/public/swf/ZeroClipboard.swf +0 -0
- data/lib/sensu-dashboard/version.rb +0 -5
- data/lib/sensu-dashboard/views/client_templates.erb +0 -67
- data/lib/sensu-dashboard/views/clients.erb +0 -36
- data/lib/sensu-dashboard/views/event_templates.erb +0 -185
- data/lib/sensu-dashboard/views/index.erb +0 -48
- data/lib/sensu-dashboard/views/layout.erb +0 -132
- data/lib/sensu-dashboard/views/sonian.sass +0 -213
- data/lib/sensu-dashboard/views/stash_templates.erb +0 -44
- data/lib/sensu-dashboard/views/stashes.erb +0 -32
@@ -0,0 +1,83 @@
|
|
1
|
+
namespace "SensuDashboard.Views.Clients", (exports) ->
|
2
|
+
|
3
|
+
class exports.Modal extends SensuDashboard.Views.Modal
|
4
|
+
|
5
|
+
name: "clients/modal"
|
6
|
+
|
7
|
+
events:
|
8
|
+
"click #silence_client": "silenceClient"
|
9
|
+
"click #remove_client": "removeClient"
|
10
|
+
|
11
|
+
initialize: ->
|
12
|
+
@$el.on("hidden", => @remove())
|
13
|
+
@listenTo(@model, "change", @render)
|
14
|
+
@listenTo(@model, "destroy", @remove)
|
15
|
+
@render()
|
16
|
+
|
17
|
+
render: ->
|
18
|
+
template_data = @model.toJSON()
|
19
|
+
if @$el.html() == ""
|
20
|
+
@$el.html(@template(template_data))
|
21
|
+
@$el.appendTo("body")
|
22
|
+
@$el.modal("show")
|
23
|
+
else
|
24
|
+
@$el.html(@template(template_data))
|
25
|
+
|
26
|
+
silenceClient: (ev) ->
|
27
|
+
tag_name = $(ev.target).prop("tagName")
|
28
|
+
if tag_name == "SPAN" || tag_name == "I"
|
29
|
+
parent = $(ev.target).parent()
|
30
|
+
else
|
31
|
+
parent = $(ev.target)
|
32
|
+
icon = parent.find("i").first()
|
33
|
+
text = parent.find("span").first()
|
34
|
+
if @model.get("silenced")
|
35
|
+
icon.removeClass("icon-volume-off").addClass("icon-spinner icon-spin")
|
36
|
+
text.html("Un-silencing...")
|
37
|
+
@model.unsilence
|
38
|
+
success: (model) ->
|
39
|
+
client_name = model.get("name")
|
40
|
+
toastr.success("Un-silenced client #{client_name}."
|
41
|
+
, "Success!"
|
42
|
+
, { positionClass: "toast-bottom-right" })
|
43
|
+
error: (model) ->
|
44
|
+
client_name = model.get("name")
|
45
|
+
toastr.error("Error un-silencing client #{client_name}.
|
46
|
+
The client may already be un-sileneced or Sensu API is down."
|
47
|
+
, "Un-silencing Error!"
|
48
|
+
, { positionClass: "toast-bottom-right" })
|
49
|
+
else
|
50
|
+
icon.removeClass("icon-volume-up").addClass("icon-spinner icon-spin")
|
51
|
+
text.html("Silencing...")
|
52
|
+
@model.silence
|
53
|
+
success: (model) ->
|
54
|
+
client_name = model.get("name")
|
55
|
+
toastr.success("Silenced client #{client_name}."
|
56
|
+
, "Success!"
|
57
|
+
, { positionClass: "toast-bottom-right" })
|
58
|
+
error: (model, xhr, opts) ->
|
59
|
+
client_name = model.get("name")
|
60
|
+
toastr.error("Error silencing client #{client_name}."
|
61
|
+
, "Silencing Error!"
|
62
|
+
, { positionClass: "toast-bottom-right" })
|
63
|
+
|
64
|
+
removeClient: (ev) ->
|
65
|
+
tag_name = $(ev.target).prop("tagName")
|
66
|
+
if tag_name == "SPAN" || tag_name == "I"
|
67
|
+
parent = $(ev.target).parent()
|
68
|
+
else
|
69
|
+
parent = $(ev.target)
|
70
|
+
icon = parent.find("i").first()
|
71
|
+
text = parent.find("span").first()
|
72
|
+
icon.removeClass("icon-remove").addClass("icon-spinner icon-spin")
|
73
|
+
text.html("Removing...")
|
74
|
+
@model.remove
|
75
|
+
success: (model) ->
|
76
|
+
toastr.success("Removed client #{model.get("name")}."
|
77
|
+
, "Success!"
|
78
|
+
, { positionClass: "toast-bottom-right" })
|
79
|
+
error: (model) ->
|
80
|
+
toastr.error("Error removing client #{model.get("name")}.
|
81
|
+
The client may have already been removed or Sensu API is down."
|
82
|
+
, "Removal Error!"
|
83
|
+
, { positionClass: "toast-bottom-right" })
|
@@ -0,0 +1,17 @@
|
|
1
|
+
namespace "SensuDashboard.Views", (exports) ->
|
2
|
+
|
3
|
+
class exports.Error extends SensuDashboard.Views.Base
|
4
|
+
|
5
|
+
el: $("#main")
|
6
|
+
|
7
|
+
name: "error"
|
8
|
+
|
9
|
+
initialize: ->
|
10
|
+
@template_data =
|
11
|
+
title: "Oh no!" ? @options.title
|
12
|
+
message: "Something isn't right. Try refreshing." ? @options.message
|
13
|
+
@render()
|
14
|
+
|
15
|
+
render: ->
|
16
|
+
@$el.html(@template(@template_data))
|
17
|
+
this
|
@@ -0,0 +1,12 @@
|
|
1
|
+
namespace "SensuDashboard.Views.Events", (exports) ->
|
2
|
+
|
3
|
+
class exports.Counts extends SensuDashboard.Views.Base
|
4
|
+
|
5
|
+
name: "events/counts"
|
6
|
+
|
7
|
+
initialize: (model) ->
|
8
|
+
@listenTo(@model, "all", @render)
|
9
|
+
|
10
|
+
render: ->
|
11
|
+
@$el.html(@template(@model.toJSON()))
|
12
|
+
return this
|
@@ -0,0 +1,143 @@
|
|
1
|
+
namespace "SensuDashboard.Views.Events", (exports) ->
|
2
|
+
|
3
|
+
class exports.Index extends SensuDashboard.Views.Base
|
4
|
+
|
5
|
+
name: "events/index"
|
6
|
+
|
7
|
+
events:
|
8
|
+
"click #toggle-checkboxes": "toggleSelected"
|
9
|
+
"click #select-all": "selectAll"
|
10
|
+
"click #select-none": "selectNone"
|
11
|
+
"click #select-critical": "selectCritical"
|
12
|
+
"click #select-unknown": "selectUnknown"
|
13
|
+
"click #select-warning": "selectWarning"
|
14
|
+
"click #select-silenced-clients": "selectSilencedClients"
|
15
|
+
"click #select-unsilenced-clients": "selectUnsilencedClients"
|
16
|
+
"click #select-silenced-checks": "selectSilencedChecks"
|
17
|
+
"click #select-unsilenced-checks": "selectUnsilencedChecks"
|
18
|
+
"click #resolve-selected": "resolveSelected"
|
19
|
+
"click #silence-selected-clients": "silenceSelectedClients"
|
20
|
+
"click #silence-selected-checks": "silenceSelectedChecks"
|
21
|
+
"click #unsilence-selected-clients": "unsilenceSelectedClients"
|
22
|
+
"click #unsilence-selected-checks": "unsilenceSelectedChecks"
|
23
|
+
|
24
|
+
initialize: ->
|
25
|
+
@events_collection = @model.get("events")
|
26
|
+
@counts_subview = new SensuDashboard.Views.Events.Counts(model: @model)
|
27
|
+
@autocomplete_view = new SensuDashboard.Views.AutoCompleteField({
|
28
|
+
sources: [SensuDashboard.Clients, SensuDashboard.Checks]
|
29
|
+
})
|
30
|
+
@list_subview = new SensuDashboard.Views.Events.List({
|
31
|
+
collection: @events_collection
|
32
|
+
autocomplete_view: @autocomplete_view
|
33
|
+
})
|
34
|
+
|
35
|
+
render: ->
|
36
|
+
@$el.html(@template())
|
37
|
+
@assign(@counts_subview, "#counts")
|
38
|
+
@assign(@list_subview, "#list")
|
39
|
+
@$el.find("#filter").html(@autocomplete_view.render().el)
|
40
|
+
return this
|
41
|
+
|
42
|
+
toggleSelected: ->
|
43
|
+
@events_collection.toggleSelected()
|
44
|
+
|
45
|
+
selectAll: ->
|
46
|
+
@events_collection.selectAll()
|
47
|
+
|
48
|
+
selectNone: ->
|
49
|
+
@events_collection.selectNone()
|
50
|
+
|
51
|
+
selectCritical: ->
|
52
|
+
@events_collection.selectCritical()
|
53
|
+
|
54
|
+
selectUnknown: ->
|
55
|
+
@events_collection.selectUnknown()
|
56
|
+
|
57
|
+
selectWarning: ->
|
58
|
+
@events_collection.selectWarning()
|
59
|
+
|
60
|
+
selectSilencedClients: ->
|
61
|
+
@events_collection.selectSilencedClients()
|
62
|
+
|
63
|
+
selectUnsilencedClients: ->
|
64
|
+
@events_collection.selectUnsilencedClients()
|
65
|
+
|
66
|
+
selectSilencedChecks: ->
|
67
|
+
@events_collection.selectSilenced()
|
68
|
+
|
69
|
+
selectUnsilencedChecks: ->
|
70
|
+
events_selected = @events_collection.getSelected().length
|
71
|
+
@events_collection.selectUnsilenced
|
72
|
+
success: ->
|
73
|
+
toastr.success("Unsilenced #{events_selected} events"
|
74
|
+
, "Success!"
|
75
|
+
, { positionClass: "toast-bottom-right" })
|
76
|
+
|
77
|
+
resolveSelected: ->
|
78
|
+
@events_collection.resolveSelected
|
79
|
+
success: (model) ->
|
80
|
+
event_name = "#{model.get("client")}_#{model.get("check")}"
|
81
|
+
toastr.success("Resolved event #{event_name}."
|
82
|
+
, "Success!"
|
83
|
+
, { positionClass: "toast-bottom-right" })
|
84
|
+
error: (model) ->
|
85
|
+
event_name = "#{model.get("client")}_#{model.get("check")}"
|
86
|
+
toastr.error("Error resolving event #{event_name}. Is Sensu API running?"
|
87
|
+
, "Resolving Error"
|
88
|
+
, { positionClass: "toast-bottom-right" })
|
89
|
+
|
90
|
+
|
91
|
+
silenceSelectedClients: ->
|
92
|
+
@events_collection.silenceSelectedClients
|
93
|
+
success: (model) ->
|
94
|
+
client_name = model.get("name")
|
95
|
+
toastr.success("Silenced client #{client_name}."
|
96
|
+
, "Success!"
|
97
|
+
, { positionClass: "toast-bottom-right" })
|
98
|
+
error: (model, xhr, opts) ->
|
99
|
+
client_name = model.get("name")
|
100
|
+
toastr.error("Error silencing client #{client_name}."
|
101
|
+
, "Silencing Error!"
|
102
|
+
, { positionClass: "toast-bottom-right" })
|
103
|
+
|
104
|
+
silenceSelectedChecks: ->
|
105
|
+
@events_collection.silenceSelectedChecks
|
106
|
+
success: (model) ->
|
107
|
+
check_name = model.get("check")
|
108
|
+
toastr.success("Silenced check #{check_name}."
|
109
|
+
, "Success!"
|
110
|
+
, { positionClass: "toast-bottom-right" })
|
111
|
+
error: (model) ->
|
112
|
+
check_name = model.get("check")
|
113
|
+
toastr.error("Error silencing check #{check_name}."
|
114
|
+
, "Silencing Error!"
|
115
|
+
, { positionClass: "toast-bottom-right" })
|
116
|
+
|
117
|
+
unsilenceSelectedClients: ->
|
118
|
+
@events_collection.unsilenceSelectedClients
|
119
|
+
success: (model) ->
|
120
|
+
client_name = model.get("name")
|
121
|
+
toastr.success("Un-silenced client #{client_name}"
|
122
|
+
, "Success!"
|
123
|
+
, { positionClass: "toast-bottom-right" })
|
124
|
+
error: (model) ->
|
125
|
+
client_name = model.get("name")
|
126
|
+
toastr.error("Error un-silencing client #{client_name}.
|
127
|
+
The client may already be un-sileneced or Sensu API is down."
|
128
|
+
, "Un-silencing Error!"
|
129
|
+
, { positionClass: "toast-bottom-right" })
|
130
|
+
|
131
|
+
unsilenceSelectedChecks: ->
|
132
|
+
@events_collection.unsilenceSelectedChecks
|
133
|
+
success: (model) ->
|
134
|
+
check_name = model.get("check")
|
135
|
+
toastr.success("Un-silenced check #{check_name}."
|
136
|
+
, "Success!"
|
137
|
+
, { positionClass: "toast-bottom-right" })
|
138
|
+
error: (model) ->
|
139
|
+
check_name = model.get("check")
|
140
|
+
toastr.error("Error un-silencing check #{check_name}.
|
141
|
+
The check may already be un-sileneced or Sensu API is down."
|
142
|
+
, "Un-silencing Error!"
|
143
|
+
, { positionClass: "toast-bottom-right" })
|
@@ -0,0 +1,52 @@
|
|
1
|
+
namespace "SensuDashboard.Views.Events", (exports) ->
|
2
|
+
|
3
|
+
class exports.List extends SensuDashboard.Views.List
|
4
|
+
|
5
|
+
name: "events/list"
|
6
|
+
|
7
|
+
initialize: ->
|
8
|
+
@autocomplete_view = @options.autocomplete_view
|
9
|
+
@autocomplete_view.delegate = this
|
10
|
+
super
|
11
|
+
|
12
|
+
itemClass: ->
|
13
|
+
exports.ListItem
|
14
|
+
|
15
|
+
resolvedCollection: ->
|
16
|
+
resolved = @collection.chain()
|
17
|
+
for token in @autocomplete_view.tokens
|
18
|
+
model = token.object
|
19
|
+
resolved = if model instanceof SensuDashboard.Models.Check
|
20
|
+
resolved.filter (record) ->
|
21
|
+
record.get("check") == model.get("name")
|
22
|
+
else if model instanceof SensuDashboard.Models.Client
|
23
|
+
resolved.filter (record) ->
|
24
|
+
record.get("client") == model.get("name")
|
25
|
+
else if _.isString(model)
|
26
|
+
resolved.filter (record) ->
|
27
|
+
output = record.get("output").toLowerCase()
|
28
|
+
result = output.indexOf(model.toLowerCase()) != -1
|
29
|
+
result || record.get("check").toLowerCase() == model.toLowerCase()
|
30
|
+
|
31
|
+
resolved
|
32
|
+
|
33
|
+
resolved: ->
|
34
|
+
_(@resolvedCollection().map().value())
|
35
|
+
|
36
|
+
renderCollection: (collection) ->
|
37
|
+
super(collection || @resolved())
|
38
|
+
|
39
|
+
renderEmpty: (collection) ->
|
40
|
+
super(collection || @resolved())
|
41
|
+
|
42
|
+
#
|
43
|
+
# Autocomplete delegate
|
44
|
+
#
|
45
|
+
|
46
|
+
filtersUpdated: ->
|
47
|
+
filtered = @resolved()
|
48
|
+
@collection.each (model) ->
|
49
|
+
model.set(selected: false) unless filtered.contains(model)
|
50
|
+
|
51
|
+
@$el.html(@template())
|
52
|
+
@renderCollection(filtered)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
namespace "SensuDashboard.Views.Events", (exports) ->
|
2
|
+
|
3
|
+
class exports.ListItem extends SensuDashboard.Views.ListItem
|
4
|
+
|
5
|
+
name: "events/list_item"
|
6
|
+
|
7
|
+
className: ->
|
8
|
+
@model.get("status_name")
|
9
|
+
|
10
|
+
events:
|
11
|
+
"click td:not(.select)": "showDetails"
|
12
|
+
"click input[type=checkbox]": "toggleSelect"
|
13
|
+
|
14
|
+
initialize: ->
|
15
|
+
@client = SensuDashboard.Clients.get(@model.get("client"))
|
16
|
+
@listenTo(@client, "remove", @remove)
|
17
|
+
super
|
18
|
+
|
19
|
+
toggleSelect: ->
|
20
|
+
@model.set(selected: !@model.get("selected"))
|
21
|
+
|
22
|
+
showDetails: ->
|
23
|
+
new SensuDashboard.Views.Events.Modal
|
24
|
+
event: @model
|
25
|
+
client: @client
|
@@ -0,0 +1,129 @@
|
|
1
|
+
namespace "SensuDashboard.Views.Events", (exports) ->
|
2
|
+
|
3
|
+
class exports.Modal extends SensuDashboard.Views.Modal
|
4
|
+
|
5
|
+
name: "events/modal"
|
6
|
+
|
7
|
+
events:
|
8
|
+
"click #silence_client": "silenceClient"
|
9
|
+
"click #silence_check": "silenceCheck"
|
10
|
+
"click #resolve_check": "resolveCheck"
|
11
|
+
|
12
|
+
initialize: ->
|
13
|
+
@$el.on("hidden", => @remove())
|
14
|
+
@event = @options.event
|
15
|
+
@client = @options.client
|
16
|
+
@listenTo(@event, "change", @render)
|
17
|
+
@listenTo(@event, "destroy", @remove)
|
18
|
+
@listenTo(@client, "change", @render)
|
19
|
+
@listenTo(@client, "destroy", @remove)
|
20
|
+
@render()
|
21
|
+
|
22
|
+
render: ->
|
23
|
+
template_data =
|
24
|
+
event: @event.toJSON()
|
25
|
+
client: @client.toJSON()
|
26
|
+
if @$el.html() == ""
|
27
|
+
@$el.html(@template(template_data))
|
28
|
+
@$el.appendTo("body")
|
29
|
+
@$el.modal("show")
|
30
|
+
else
|
31
|
+
@$el.html(@template(template_data))
|
32
|
+
|
33
|
+
silenceClient: (ev) ->
|
34
|
+
tag_name = $(ev.target).prop("tagName")
|
35
|
+
if tag_name == "SPAN" || tag_name == "I"
|
36
|
+
parent = $(ev.target).parent()
|
37
|
+
else
|
38
|
+
parent = $(ev.target)
|
39
|
+
icon = parent.find("i").first()
|
40
|
+
text = parent.find("span").first()
|
41
|
+
if @client.get("silenced")
|
42
|
+
icon.removeClass("icon-volume-off").addClass("icon-spinner icon-spin")
|
43
|
+
text.html("Un-silencing...")
|
44
|
+
@client.unsilence
|
45
|
+
success: (model) ->
|
46
|
+
client_name = model.get("name")
|
47
|
+
toastr.success("Un-silenced client #{client_name}."
|
48
|
+
, "Success!"
|
49
|
+
, { positionClass: "toast-bottom-right" })
|
50
|
+
error: (model) ->
|
51
|
+
client_name = model.get("name")
|
52
|
+
toastr.error("Error un-silencing client #{client_name}.
|
53
|
+
The client may already be un-sileneced or Sensu API is down."
|
54
|
+
, "Un-silencing Error!"
|
55
|
+
, { positionClass: "toast-bottom-right" })
|
56
|
+
else
|
57
|
+
icon.removeClass("icon-volume-up").addClass("icon-spinner icon-spin")
|
58
|
+
text.html("Silencing...")
|
59
|
+
@client.silence
|
60
|
+
success: (model) ->
|
61
|
+
client_name = model.get("name")
|
62
|
+
toastr.success("Silenced client #{client_name}."
|
63
|
+
, "Success!"
|
64
|
+
, { positionClass: "toast-bottom-right" })
|
65
|
+
error: (model, xhr, opts) ->
|
66
|
+
client_name = model.get("name")
|
67
|
+
toastr.error("Error silencing client #{client_name}."
|
68
|
+
, "Silencing Error!"
|
69
|
+
, { positionClass: "toast-bottom-right" })
|
70
|
+
|
71
|
+
silenceCheck: (ev) ->
|
72
|
+
tag_name = $(ev.target).prop("tagName")
|
73
|
+
if tag_name == "SPAN" || tag_name == "I"
|
74
|
+
parent = $(ev.target).parent()
|
75
|
+
else
|
76
|
+
parent = $(ev.target)
|
77
|
+
icon = parent.find("i").first()
|
78
|
+
text = parent.find("span").first()
|
79
|
+
if @event.get("silenced")
|
80
|
+
icon.removeClass("icon-volume-off").addClass("icon-spinner icon-spin")
|
81
|
+
text.html("Un-silencing...")
|
82
|
+
@event.unsilence
|
83
|
+
success: (model) ->
|
84
|
+
check_name = model.get("check")
|
85
|
+
toastr.success("Un-silenced check #{check_name}."
|
86
|
+
, "Success!"
|
87
|
+
, { positionClass: "toast-bottom-right" })
|
88
|
+
error: (model) ->
|
89
|
+
check_name = model.get("check")
|
90
|
+
toastr.error("Error un-silencing check #{check_name}.
|
91
|
+
The check may already be un-sileneced or Sensu API is down."
|
92
|
+
, "Un-silencing Error!"
|
93
|
+
, { positionClass: "toast-bottom-right" })
|
94
|
+
else
|
95
|
+
icon.removeClass("icon-volume-up").addClass("icon-spinner icon-spin")
|
96
|
+
text.html("Silencing...")
|
97
|
+
@event.silence
|
98
|
+
success: (model) ->
|
99
|
+
check_name = model.get("check")
|
100
|
+
toastr.success("Silenced check #{check_name}."
|
101
|
+
, "Success!"
|
102
|
+
, { positionClass: "toast-bottom-right" })
|
103
|
+
error: (model) ->
|
104
|
+
check_name = model.get("check")
|
105
|
+
toastr.error("Error silencing check #{check_name}."
|
106
|
+
, "Silencing Error!"
|
107
|
+
, { positionClass: "toast-bottom-right" })
|
108
|
+
|
109
|
+
resolveCheck: (ev) ->
|
110
|
+
tag_name = $(ev.target).prop("tagName")
|
111
|
+
if tag_name == "SPAN" || tag_name == "I"
|
112
|
+
parent = $(ev.target).parent()
|
113
|
+
else
|
114
|
+
parent = $(ev.target)
|
115
|
+
icon = parent.find("i").first()
|
116
|
+
text = parent.find("span").first()
|
117
|
+
icon.removeClass("icon-ok").addClass("icon-spinner icon-spin")
|
118
|
+
text.html("Resolving...")
|
119
|
+
@event.resolve
|
120
|
+
success: (model) ->
|
121
|
+
event_name = "#{model.get("client")}_#{model.get("check")}"
|
122
|
+
toastr.success("Resolved event #{event_name}."
|
123
|
+
, "Success!"
|
124
|
+
, { positionClass: "toast-bottom-right" })
|
125
|
+
error: (model) ->
|
126
|
+
event_name = "#{model.get("client")}_#{model.get("check")}"
|
127
|
+
toastr.error("Error resolving event #{event_name}. Is Sensu API running?"
|
128
|
+
, "Resolving Error"
|
129
|
+
, { positionClass: "toast-bottom-right" })
|