rearview 1.1.2-jruby → 1.2.0-jruby
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.
- checksums.yaml +4 -4
- data/README.md +11 -3
- data/app/controllers/rearview/application_controller.rb +11 -0
- data/app/controllers/rearview/dashboard_children_controller.rb +1 -1
- data/app/controllers/rearview/dashboards_controller.rb +1 -1
- data/app/controllers/rearview/home_controller.rb +1 -1
- data/app/controllers/rearview/jobs_controller.rb +33 -29
- data/app/controllers/rearview/monitor_controller.rb +16 -2
- data/app/controllers/rearview/user_controller.rb +2 -2
- data/app/helpers/rearview/application_helper.rb +3 -3
- data/app/mailers/rearview/alert_mailer.rb +0 -2
- data/app/mailers/rearview/metrics_validation_mailer.rb +12 -0
- data/app/models/rearview/job.rb +17 -13
- data/app/views/rearview/home/show.html.erb +2 -0
- data/app/views/rearview/jobs/_job.json.jbuilder +1 -0
- data/app/views/rearview/metrics_validation_mailer/validation_failed_email.text.erb +13 -0
- data/app/views/rearview/monitor/create.json.jbuilder +1 -0
- data/db/migrate/20131106162900_base_schema.rb +2 -2
- data/lib/generators/templates/rearview.rb +24 -7
- data/lib/graphite.rb +13 -0
- data/lib/graphite/cacerts.pem +2184 -0
- data/lib/graphite/client.rb +44 -0
- data/lib/graphite/graph.rb +35 -0
- data/lib/{rearview/graphite_parser.rb → graphite/raw_parser.rb} +2 -3
- data/lib/graphite/target.rb +9 -0
- data/lib/graphite/target_grammer.rb +114 -0
- data/lib/graphite/target_grammer.treetop +53 -0
- data/lib/graphite/target_parser.rb +50 -0
- data/lib/graphite/treetop_ext.rb +14 -0
- data/lib/rearview.rb +11 -3
- data/lib/rearview/alerts_handler.rb +2 -6
- data/lib/rearview/configuration.rb +44 -19
- data/lib/rearview/cron_expression_validator.rb +11 -0
- data/lib/rearview/metrics_validator.rb +52 -0
- data/lib/rearview/metrics_validator_service.rb +24 -0
- data/lib/rearview/metrics_validator_task.rb +56 -0
- data/lib/rearview/monitor_runner.rb +9 -7
- data/lib/rearview/monitor_service.rb +2 -0
- data/lib/rearview/stats_service.rb +4 -2
- data/lib/rearview/version.rb +1 -1
- data/lib/tasks/rearview_tasks.rake +7 -1
- data/public/{help → rearview-src/help}/alert.html +0 -0
- data/public/{help → rearview-src/help}/quick.html +0 -0
- data/public/rearview-src/js/app.js +9 -0
- data/public/rearview-src/js/model/user.js +6 -2
- data/public/rearview-src/js/view/addmonitor.js +13 -8
- data/public/rearview-src/js/view/alert.js +11 -4
- data/public/rearview-src/js/view/dashboard.js +4 -2
- data/public/rearview-src/js/view/expandedmonitor.js +22 -9
- data/public/rearview-src/js/view/settings.js +84 -0
- data/public/rearview-src/less/login.less +4 -4
- data/public/rearview-src/less/rearview.less +17 -10
- data/public/{monitors → rearview-src/monitors}/index.json +1 -1
- data/public/{monitors → rearview-src/monitors}/outage.rb +0 -0
- data/public/rearview-src/templates/alert.hbs +10 -2
- data/public/rearview-src/templates/primarynav.hbs +6 -6
- data/public/rearview-src/templates/schedulemonitor.hbs +2 -1
- data/public/rearview-src/templates/settings.hbs +23 -0
- data/public/rearview/build.txt +1 -0
- data/public/rearview/help/alert.html +20 -0
- data/public/rearview/help/quick.html +34 -0
- data/public/rearview/js/app.js +1 -1
- data/public/rearview/js/main.js +21 -21
- data/public/rearview/js/model/user.js +1 -1
- data/public/rearview/js/view/addmonitor.js +1 -1
- data/public/rearview/js/view/alert.js +1 -1
- data/public/rearview/js/view/dashboard.js +1 -1
- data/public/rearview/js/view/expandedmonitor.js +1 -1
- data/public/rearview/js/view/settings.js +1 -0
- data/public/rearview/less/login.less +4 -4
- data/public/rearview/less/rearview.less +17 -10
- data/public/rearview/monitors/index.json +3 -0
- data/public/rearview/monitors/outage.rb +2 -0
- data/public/rearview/templates/alert.hbs +10 -2
- data/public/rearview/templates/primarynav.hbs +6 -6
- data/public/rearview/templates/schedulemonitor.hbs +2 -1
- data/public/rearview/templates/settings.hbs +23 -0
- data/spec/controllers/jobs_controller_spec.rb +1 -0
- data/spec/controllers/monitor_controller_spec.rb +3 -0
- data/spec/controllers/user_controller_spec.rb +5 -2
- data/spec/data/metrics.yml +598 -0
- data/spec/dummy/log/development.log +1044 -0
- data/spec/dummy/log/test.log +171716 -0
- data/spec/helpers/application_helper_spec.rb +33 -0
- data/spec/lib/graphite/client_spec.rb +126 -0
- data/spec/lib/graphite/graph_spec.rb +17 -0
- data/spec/lib/graphite/graphite_spec.rb +4 -0
- data/spec/lib/{rearview/graphite_parser_spec.rb → graphite/raw_parser.rb} +6 -5
- data/spec/lib/graphite/target_grammer_spec.rb +106 -0
- data/spec/lib/graphite/target_parser_spec.rb +124 -0
- data/spec/lib/graphite/target_spec.rb +5 -0
- data/spec/lib/rearview/configuration_spec.rb +69 -48
- data/spec/lib/rearview/metrics_validator_service_spec.rb +43 -0
- data/spec/lib/rearview/metrics_validator_spec.rb +84 -0
- data/spec/lib/rearview/metrics_validator_task_spec.rb +62 -0
- data/spec/lib/rearview/monitor_runner_spec.rb +3 -3
- data/spec/lib/rearview/stats_task_spec.rb +21 -0
- data/spec/mailers/metrics_validation_mailer_spec.rb +46 -0
- data/spec/models/job_spec.rb +82 -9
- data/spec/spec_helper.rb +15 -4
- data/spec/support/json_factory.rb +1 -1
- data/spec/views/dashboards/show.json.jbuilder_spec.rb +3 -1
- data/spec/views/jobs/show.json.jbuilder_spec.rb +2 -1
- metadata +98 -11
- data/public/rearview-src/templates/test.txt +0 -1
- data/public/rearview/templates/test.txt +0 -1
@@ -0,0 +1,11 @@
|
|
1
|
+
module Rearview
|
2
|
+
class CronExpressionValidator < ActiveModel::EachValidator
|
3
|
+
def validate_each(record, attribute, value)
|
4
|
+
if value.present?
|
5
|
+
unless Rearview::CronHelper.valid_expression?(value)
|
6
|
+
record.errors.add(attribute,(options[:message] || "is not a valid cron expression"))
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Rearview
|
2
|
+
class MetricsValidator < ActiveModel::EachValidator
|
3
|
+
attr_accessor :message
|
4
|
+
def validate_each(record, attribute, value)
|
5
|
+
if value.present? && value.respond_to?(:each)
|
6
|
+
value.each do |metric|
|
7
|
+
unless metric_valid?(metric)
|
8
|
+
record.errors.add(attribute,(message || "contains an invalid metric: #{metric}"))
|
9
|
+
message = nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
def metric_valid?(metric)
|
15
|
+
valid = false
|
16
|
+
metric_key = nil
|
17
|
+
target_parser.parse(metric)
|
18
|
+
if target_parser.error?
|
19
|
+
message = "contains an unparseable metric: #{metric} (#{target_parser.error})"
|
20
|
+
else
|
21
|
+
if target_parser.tree.comment?
|
22
|
+
valid = true
|
23
|
+
else
|
24
|
+
metric_key = target_parser.tree.metric
|
25
|
+
if metric_key.present?
|
26
|
+
if cache?
|
27
|
+
unless cache.has_key?(metric_key)
|
28
|
+
cache[metric_key] = client.metric_exists?(metric_key)
|
29
|
+
end
|
30
|
+
valid = cache[metric_key]
|
31
|
+
else
|
32
|
+
valid = client.metric_exists?(metric_key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
valid
|
38
|
+
end
|
39
|
+
def cache?
|
40
|
+
options[:cache]
|
41
|
+
end
|
42
|
+
def cache
|
43
|
+
@cache ||= {}
|
44
|
+
end
|
45
|
+
def client
|
46
|
+
@client ||= Graphite::Client.new(Rearview.config.graphite_connection)
|
47
|
+
end
|
48
|
+
def target_parser
|
49
|
+
@target_parser ||= Graphite::TargetParser.new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
module Rearview
|
3
|
+
class MetricsValidatorService
|
4
|
+
class MetricsValidatorServiceError < StandardError; end;
|
5
|
+
include Celluloid
|
6
|
+
include Rearview::Logger
|
7
|
+
def started?
|
8
|
+
@started
|
9
|
+
end
|
10
|
+
def startup
|
11
|
+
logger.info "#{self} starting up service..."
|
12
|
+
raise MetricsValidatorServiceError.new("service already started") if started?
|
13
|
+
@task = Rearview::MetricsValidatorTask.supervise(Rearview.config.metrics_validator_schedule)
|
14
|
+
@started = true
|
15
|
+
end
|
16
|
+
def shutdown
|
17
|
+
logger.info "#{self} shutting down service..."
|
18
|
+
raise MetricsValidatorServiceError.new("service not started") unless started?
|
19
|
+
@task.actors.first.terminate
|
20
|
+
@started = false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Rearview
|
4
|
+
class MetricsValidatorTask
|
5
|
+
class StatsTaskError < StandardError; end;
|
6
|
+
include Celluloid
|
7
|
+
include Rearview::Logger
|
8
|
+
attr_reader :cron_expression
|
9
|
+
|
10
|
+
def initialize(cron_expression,start=true)
|
11
|
+
@cron_expression = cron_expression
|
12
|
+
schedule if start
|
13
|
+
end
|
14
|
+
|
15
|
+
def schedule
|
16
|
+
logger.debug "#{self} schedule"
|
17
|
+
if ActiveRecord::Base.connection_pool.active_connection?
|
18
|
+
ActiveRecord::Base.connection_pool.release_connection
|
19
|
+
end
|
20
|
+
delay = if cron_expression == '0 * * * * ?'
|
21
|
+
60.0
|
22
|
+
else
|
23
|
+
Rearview::CronHelper.next_valid_time_after(cron_expression)
|
24
|
+
end
|
25
|
+
logger.info "#{self} scheduled to run next in #{delay}s"
|
26
|
+
if(@timer)
|
27
|
+
@timer.cancel
|
28
|
+
end
|
29
|
+
@timer = after(delay) { self.run }
|
30
|
+
end
|
31
|
+
|
32
|
+
def run
|
33
|
+
logger.debug "#{self} run"
|
34
|
+
validator = Rearview::MetricsValidator.new({ attributes: [:metrics], cache: true })
|
35
|
+
ActiveRecord::Base.connection_pool.with_connection do
|
36
|
+
Rearview::Job.schedulable.load.each do |job|
|
37
|
+
validator.validate_each(job,:metrics,job.metrics)
|
38
|
+
unless job.errors[:metrics].empty?
|
39
|
+
alert_validation_failed(job)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
rescue
|
44
|
+
logger.error "#{self} run failed: #{$!}\n#{$@.join("\n")}"
|
45
|
+
ensure
|
46
|
+
schedule
|
47
|
+
end
|
48
|
+
|
49
|
+
def alert_validation_failed(job)
|
50
|
+
logger.debug "#{self} alerting on invalid metrics for #{job.id}"
|
51
|
+
Rearview::MetricsValidationMailer.validation_failed_email(job.user.email,job).deliver
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -62,16 +62,18 @@ module Rearview
|
|
62
62
|
logger.debug "#{self} fetch_data"
|
63
63
|
encMetrics = metrics.delete_if { |m| m.empty? }.map { |m| URI.escape(m) }
|
64
64
|
from, to = create_from_to_dates(minutes, to_date)
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
params = {}.tap do |h|
|
66
|
+
h["from"] = from
|
67
|
+
h["until"] = to
|
68
|
+
h["format"] = "raw"
|
69
|
+
h["target"] = metrics.delete_if { |m| m.empty? }
|
70
|
+
end
|
68
71
|
|
69
72
|
begin
|
70
|
-
response =
|
71
|
-
|
72
|
-
case response.code
|
73
|
+
response = Graphite::Client.new(Rearview.config.graphite_connection).render(params)
|
74
|
+
case response.status
|
73
75
|
when 200
|
74
|
-
|
76
|
+
Graphite::RawParser.parse(response.body)
|
75
77
|
else
|
76
78
|
message = response.body
|
77
79
|
logger.error("Graphite request failure: #{message}")
|
@@ -18,6 +18,7 @@ module Rearview
|
|
18
18
|
@started
|
19
19
|
end
|
20
20
|
def startup
|
21
|
+
logger.info "#{self} starting up service..."
|
21
22
|
raise MonitorServiceError.new("service already started") if started?
|
22
23
|
# TODO actor could die, need to reference by name in registry and/or create link
|
23
24
|
@supervisor = Rearview::MonitorSupervisor.run!
|
@@ -25,6 +26,7 @@ module Rearview
|
|
25
26
|
@started = true
|
26
27
|
end
|
27
28
|
def shutdown
|
29
|
+
logger.info "#{self} shutting down service..."
|
28
30
|
raise MonitorServiceError.new("service not started") unless started?
|
29
31
|
@supervisor.remove_all_tasks
|
30
32
|
@supervisor.terminate
|
@@ -14,13 +14,15 @@ module Rearview
|
|
14
14
|
@started
|
15
15
|
end
|
16
16
|
def startup
|
17
|
+
logger.info "#{self} starting up service..."
|
17
18
|
raise StatsServiceError.new("service already started") if started?
|
18
19
|
@started = true
|
19
|
-
@
|
20
|
+
@task = Rearview::StatsTask.supervise
|
20
21
|
end
|
21
22
|
def shutdown
|
23
|
+
logger.info "#{self} shutting down service..."
|
22
24
|
raise StatsServiceError.new("service not started") unless started?
|
23
|
-
@
|
25
|
+
@task.actors.first.terminate
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
data/lib/rearview/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Tasks made available to engine host..
|
2
2
|
|
3
3
|
namespace :rearview do
|
4
|
-
namespace :config do
|
5
4
|
|
5
|
+
namespace :config do
|
6
6
|
desc "Verify configuration"
|
7
7
|
task :verify => [:environment] do
|
8
8
|
puts "using \"#{Rails.env}\" configuration:\n#{Rearview.config.dump}"
|
@@ -14,6 +14,12 @@ namespace :rearview do
|
|
14
14
|
puts Rearview.config.errors.full_messages.join("\n")
|
15
15
|
end
|
16
16
|
end
|
17
|
+
end
|
17
18
|
|
19
|
+
desc "Setup Rearview"
|
20
|
+
task :setup => [:environment,"db:create","db:migrate","db:seed"] do
|
21
|
+
Kernel.system("bin/rails generate rearview:install")
|
22
|
+
puts "setup done"
|
18
23
|
end
|
24
|
+
|
19
25
|
end
|
File without changes
|
File without changes
|
@@ -13,6 +13,7 @@ define([
|
|
13
13
|
'view/addcategory',
|
14
14
|
'view/ecosystem',
|
15
15
|
'view/secondarynav',
|
16
|
+
'view/settings',
|
16
17
|
'model/user',
|
17
18
|
'model/dashboard',
|
18
19
|
'collection/monitor',
|
@@ -35,6 +36,7 @@ define([
|
|
35
36
|
AddCategoryView,
|
36
37
|
EcosystemView,
|
37
38
|
SecondaryNavView,
|
39
|
+
SettingsView,
|
38
40
|
UserModel,
|
39
41
|
DashboardModel,
|
40
42
|
MonitorCollection,
|
@@ -105,6 +107,11 @@ define([
|
|
105
107
|
'user' : this.user,
|
106
108
|
'templar' : this.templar
|
107
109
|
}).render();
|
110
|
+
new SettingsView({
|
111
|
+
'el' : $('.settings-wrap'),
|
112
|
+
'user' : this.user,
|
113
|
+
'templar' : this.templar
|
114
|
+
}).render();
|
108
115
|
},
|
109
116
|
|
110
117
|
secondaryNav : function() {
|
@@ -282,8 +289,10 @@ define([
|
|
282
289
|
'schedulemonitor',
|
283
290
|
'secondarynav',
|
284
291
|
'setmetrics',
|
292
|
+
'settings',
|
285
293
|
'smallmonitor'
|
286
294
|
], {
|
295
|
+
url : rearview.path + '/templates/',
|
287
296
|
version : ( _.isUndefined(rearview.version) ? '0.0.1' : rearview.version ),
|
288
297
|
cache : ( _.isUndefined(rearview.cache) ? true : false )
|
289
298
|
})
|
@@ -57,9 +57,13 @@ function(
|
|
57
57
|
}
|
58
58
|
},
|
59
59
|
|
60
|
-
|
60
|
+
applyPrefs : function(preferences) {
|
61
61
|
var existingPreferences = this.get('preferences');
|
62
62
|
this.set('preferences', _.extend(existingPreferences, preferences));
|
63
|
+
},
|
64
|
+
|
65
|
+
updatePrefs : function(preferences) {
|
66
|
+
this.applyPrefs(preferences);
|
63
67
|
this.save();
|
64
68
|
},
|
65
69
|
|
@@ -78,4 +82,4 @@ function(
|
|
78
82
|
});
|
79
83
|
|
80
84
|
return UserModel;
|
81
|
-
});
|
85
|
+
});
|
@@ -19,7 +19,8 @@ define([
|
|
19
19
|
el : '.add-monitor-wrap',
|
20
20
|
|
21
21
|
subscriptions : {
|
22
|
-
'view:dashboard:category' : 'updateDashboardId'
|
22
|
+
'view:dashboard:category' : 'updateDashboardId',
|
23
|
+
'view:settings:save' : 'render'
|
23
24
|
},
|
24
25
|
|
25
26
|
events : {
|
@@ -42,9 +43,9 @@ define([
|
|
42
43
|
// use debounce to throttle resize events and set the height when
|
43
44
|
// the viewport changes.
|
44
45
|
var resize = _.debounce(this.adjustModalLayout, 500);
|
46
|
+
|
45
47
|
// Add the event listener
|
46
48
|
$(window).resize(resize);
|
47
|
-
//
|
48
49
|
this.render();
|
49
50
|
},
|
50
51
|
|
@@ -60,7 +61,9 @@ define([
|
|
60
61
|
this.templar.render({
|
61
62
|
path : 'schedulemonitor',
|
62
63
|
el : this.$el.find('.content-wrap'),
|
63
|
-
data : {
|
64
|
+
data : {
|
65
|
+
'user' : this.user.toJSON()
|
66
|
+
}
|
64
67
|
});
|
65
68
|
|
66
69
|
this.scheduleViewInitialized = true;
|
@@ -297,7 +300,8 @@ define([
|
|
297
300
|
if(result.status === 'error') {
|
298
301
|
Backbone.Mediator.pub('view:addmonitor:test', {
|
299
302
|
'model' : this.model,
|
300
|
-
'
|
303
|
+
'errors' : result.errors,
|
304
|
+
'raw' : result.output,
|
301
305
|
'attention' : 'Monitor Test Error!',
|
302
306
|
'status' : 'error'
|
303
307
|
});
|
@@ -306,7 +310,8 @@ define([
|
|
306
310
|
.error(function(result) {
|
307
311
|
Backbone.Mediator.pub('view:addmonitor:test', {
|
308
312
|
'model' : this.model,
|
309
|
-
'
|
313
|
+
'errors' : result.errors,
|
314
|
+
'raw' : result.output,
|
310
315
|
'attention' : 'Monitor Test Error!',
|
311
316
|
'status' : 'error'
|
312
317
|
});
|
@@ -373,7 +378,7 @@ define([
|
|
373
378
|
var $content = '';
|
374
379
|
|
375
380
|
$.ajax({
|
376
|
-
url : '/help/quick.html',
|
381
|
+
url : rearview.path + '/help/quick.html',
|
377
382
|
async : false,
|
378
383
|
success : function( response ) {
|
379
384
|
$content = response;
|
@@ -445,7 +450,7 @@ define([
|
|
445
450
|
**/
|
446
451
|
_getTemplateMetaData : function(cb) {
|
447
452
|
$.ajax({
|
448
|
-
url : '/monitors/index.json',
|
453
|
+
url : rearview.path + '/monitors/index.json',
|
449
454
|
success : function( response ) {
|
450
455
|
if ( typeof cb === 'function' ) {
|
451
456
|
cb(response);
|
@@ -666,7 +671,7 @@ define([
|
|
666
671
|
error : function(model, xhr, options) {
|
667
672
|
Backbone.Mediator.pub('view:addmonitor:save', {
|
668
673
|
'model' : model,
|
669
|
-
'
|
674
|
+
'tryJSON' : xhr.responseText,
|
670
675
|
'attention' : 'Monitor Save Error!',
|
671
676
|
'status' : 'error'
|
672
677
|
});
|
@@ -2,7 +2,7 @@ define([
|
|
2
2
|
'view/base'
|
3
3
|
], function(
|
4
4
|
BaseView
|
5
|
-
){
|
5
|
+
){
|
6
6
|
|
7
7
|
var AlertView = BaseView.extend({
|
8
8
|
|
@@ -13,6 +13,7 @@ define([
|
|
13
13
|
'view:addmonitor:test' : 'render',
|
14
14
|
'view:expandedmonitor:delete' : 'render',
|
15
15
|
'view:expandedmonitor:save' : 'render',
|
16
|
+
'view:expandedmonitor:test' : 'render',
|
16
17
|
'view:smallmonitor:save' : 'render',
|
17
18
|
'view:dashboard:save' : 'render',
|
18
19
|
'view:resetmonitor:reset' : 'render'
|
@@ -24,18 +25,24 @@ define([
|
|
24
25
|
},
|
25
26
|
|
26
27
|
render : function(data) {
|
28
|
+
if( data.tryJSON ) {
|
29
|
+
try {
|
30
|
+
data.errors = JSON.parse(data.tryJSON).errors;
|
31
|
+
} catch(e) {
|
32
|
+
data.raw = data.tryJSON;
|
33
|
+
}
|
34
|
+
}
|
27
35
|
this.templar.render({
|
28
36
|
path : 'alert',
|
29
37
|
el : this.$el,
|
30
38
|
data : data
|
31
39
|
});
|
32
|
-
|
33
40
|
this.activate();
|
34
41
|
},
|
35
42
|
|
36
43
|
activate : function() {
|
37
44
|
this.$el.addClass('active');
|
38
|
-
_.delay(this.deactivate,
|
45
|
+
_.delay(this.deactivate, 20000);
|
39
46
|
},
|
40
47
|
|
41
48
|
deactivate : function() {
|
@@ -44,4 +51,4 @@ define([
|
|
44
51
|
});
|
45
52
|
|
46
53
|
return AlertView;
|
47
|
-
});
|
54
|
+
});
|
@@ -102,7 +102,9 @@ define([
|
|
102
102
|
**/
|
103
103
|
initMonitors : function() {
|
104
104
|
this.getCategories();
|
105
|
-
|
105
|
+
if(this.categories.length && this.categoryId==null) {
|
106
|
+
Backbone.Mediator.pub('view:dashboard:category', this.setCategoryId(this.categories[this.carouselIndex].id));
|
107
|
+
}
|
106
108
|
// publish dashboard information for the header view
|
107
109
|
this.getDashboardInfo(this.dashboardId, function(title) {
|
108
110
|
Backbone.Mediator.pub('view:dashboard:render', {
|
@@ -490,4 +492,4 @@ define([
|
|
490
492
|
});
|
491
493
|
|
492
494
|
return DashboardView;
|
493
|
-
});
|
495
|
+
});
|
@@ -22,7 +22,7 @@ define([
|
|
22
22
|
|
23
23
|
initialize : function(options) {
|
24
24
|
_.bindAll(this);
|
25
|
-
|
25
|
+
|
26
26
|
var self = this;
|
27
27
|
this.user = options.user;
|
28
28
|
this.router = options.router;
|
@@ -47,7 +47,7 @@ define([
|
|
47
47
|
this.categories = categories;
|
48
48
|
this.categoryId = categoryId;
|
49
49
|
this.dashboardId = dashboardId;
|
50
|
-
|
50
|
+
|
51
51
|
this.initMonitor();
|
52
52
|
},
|
53
53
|
/**
|
@@ -194,17 +194,18 @@ define([
|
|
194
194
|
var self = this,
|
195
195
|
$content = '';
|
196
196
|
$alertContent = '';
|
197
|
-
|
197
|
+
//TODO fix this path
|
198
198
|
$.ajax({
|
199
|
-
url : '/help/quick.html',
|
199
|
+
url : rearview.path + '/help/quick.html',
|
200
200
|
async : false,
|
201
201
|
success : function( response ) {
|
202
202
|
$content = response;
|
203
203
|
}
|
204
204
|
});
|
205
205
|
|
206
|
+
//TODO fix this path
|
206
207
|
$.ajax({
|
207
|
-
url : '/help/alert.html',
|
208
|
+
url : rearview.path + '/help/alert.html',
|
208
209
|
async : false,
|
209
210
|
success : function( response ) {
|
210
211
|
$alertContent = response;
|
@@ -291,9 +292,21 @@ define([
|
|
291
292
|
self.$el.find('textarea.output-view').val(result.output);
|
292
293
|
}
|
293
294
|
|
295
|
+
if(result.status === 'error') {
|
296
|
+
Backbone.Mediator.pub('view:expandedmonitor:test', {
|
297
|
+
'model' : this.model,
|
298
|
+
'errors' : result.errors,
|
299
|
+
'raw' : result.output,
|
300
|
+
'attention' : 'Monitor Test Error!',
|
301
|
+
'status' : 'error'
|
302
|
+
});
|
303
|
+
}
|
304
|
+
|
294
305
|
if(typeof cb === 'function') {
|
295
306
|
cb(result.output);
|
296
307
|
}
|
308
|
+
},
|
309
|
+
failure : function(result) {
|
297
310
|
}
|
298
311
|
});
|
299
312
|
}
|
@@ -377,9 +390,9 @@ define([
|
|
377
390
|
self.updateGraph(monitor);
|
378
391
|
},
|
379
392
|
error : function(model, xhr, options) {
|
380
|
-
Backbone.Mediator.pub('view:expandedmonitor:save', {
|
393
|
+
Backbone.Mediator.pub('view:expandedmonitor:save', {
|
381
394
|
'model' : self.model,
|
382
|
-
'
|
395
|
+
'tryJSON' : xhr.responseText,
|
383
396
|
'attention' : 'Monitor Saved Error!',
|
384
397
|
'status' : 'error'
|
385
398
|
});
|
@@ -464,8 +477,8 @@ define([
|
|
464
477
|
var windowOffSet = 580,
|
465
478
|
alertsOffset = 6,
|
466
479
|
outputOffset = 4,
|
467
|
-
tabHeight = ( this.$el.find('#viewMetrics') )
|
468
|
-
? this.$el.find('#viewMetrics').height()
|
480
|
+
tabHeight = ( this.$el.find('#viewMetrics') )
|
481
|
+
? this.$el.find('#viewMetrics').height()
|
469
482
|
: null;
|
470
483
|
|
471
484
|
// tab height fixing
|