Git Product home page Git Product logo

rearview's Introduction

GitHub version

Overview

Rearview is a real-time monitoring framework that sits on top of Graphite's time series data. This allows users to create monitors that both visualize and alert on data as it streams from Graphite. The monitors themselves are simple Ruby scripts which run in a sandbox to provide additional security. Monitors are also configured with a crontab compatible time specification used by the scheduler. Alerts can be sent via email, pagerduty, or campfire.

rearview sample monitor

This is a port of the original scala version re-written in Ruby on Rails. Rearview has been running in production for over a year at LivingSocial.

Go here for a more detailed overview of rearview

Requirements

  • jvm 1.6+
  • jruby 1.7.5+
  • ruby manager (rvm or rbenv)
  • graphite
  • mysql/postgresql (or other supported database)

Getting Started

Get it

Download the latest release.

Database Support

Rearview comes with drivers for both mysql and postgresql. If you wish to use a differenct database select a supported jdbc driver and add it to the Gemfile and bundle install. See activerecord-jdbc-adapter site for more details.

Edit config/database.yml

Configure per your selected database driver and database connection settings. See Configuring Rails for more details. The installation defaults to common settings for mysql.

Sample configurations for both mysql (config/database.jdbcmysql.yml) and postgresql (config/database.jdbcpostgresql.yml) are available.

Run the setup script

$ bin/setup

If the setup script fails due to java.lang.ClassNotFoundException: javax/crypto/JceSecurity, please see issue #17 for a resolution to this problem.

Configuration

Before running rearview you must specify a few settings. The configuration file location is:

config/initializers/rearview.rb

You must set config.graphite_url and config.sandbox_exec for rearview to run properly. Most of the other settings you should be able to leave as is.

Verify configuration

$ rake RAILS_ENV=production rearview:config:verify

Running

$ foreman start

This will start rearview on port 3000 (http://localhost:3000).

Sign-in with the default user admin@localhost and password admin

Contributing

We encourage you to contribute to Rearview. Please check out the rearview-engine repository for more details.

Team

NameRoleTwitterGitHub
Steve AkersProduct Manager@SteveAkershttps://github.com/steveakers
Trent AlbrightArchitect/Lead developer@trent_albrighthttps://github.com/talbright
Ian QuattlebaumLead Front End developer@ianqueuehttps://github.com/ianqueue
Jeff SimpsonArchitect/Lead developer@fooblahblahhttps://github.com/fooblahblah

rearview's People

Contributors

bilal avatar steveakers avatar talbright avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rearview's Issues

Monitor Test Error!

Hi,

When I push the Test Monitor button, I get the following error without any details:

alias(carbon.agents.ip-10-214-134-148-a.avgUpdateTime,"test")

The log of the rails app is:

I, [2014-05-15T14:20:00.907000 #22029] INFO -- : Started GET "/rearview/monitors/index.json" for 10.226.195.119 at 2014-05-15 14:20:00 +0300
I, [2014-05-15T14:20:01.621000 #22029] INFO -- : Started GET "/rearview/help/quick.html" for 10.226.195.119 at 2014-05-15 14:20:01 +0300
I, [2014-05-15T14:20:08.558000 #22029] INFO -- : Started POST "/monitor.json" for 10.226.195.119 at 2014-05-15 14:20:08 +0300
I, [2014-05-15T14:20:08.582000 #22029] INFO -- : Processing by Rearview::MonitorController#create as JSON
I, [2014-05-15T14:20:08.584000 #22029] INFO -- : Parameters: {"id"=>"", "dashboardId"=>"1", "userId"=>"1", "name"=>"TestMonitor", "active"=>"true", "jobType"=>"monitor", "version"=>"2", "cronExpr"=>"0 0 * ? Feb Sun", "errorTimeout"=>"60", "minutes"=>"1", "metrics"=>["alias(carbon.agents.ip-10-214-134-148-a.avgUpdateTime,"test")"], "monitorExpr"=>"", "toDate"=>"now", "createdAt"=>"", "modifiedAt"=>"", "description"=>""}
I, [2014-05-15T14:20:09.116000 #22029] INFO -- : Rendered /usr/local/rvm/gems/jruby-1.7.12/gems/rearview-1.2.1-java/app/views/rearview/monitor/create.json.jbuilder (10.0ms)
I, [2014-05-15T14:20:09.158000 #22029] INFO -- : Completed 200 OK in 531ms (Views: 58.0ms | ActiveRecord: 2.0ms)

Does anybody have any ideas?

Rearview:Engine error during bin/setup

Hi,

I followed all the steps as per https://github.com/livingsocial/rearview. after running setup script in the bin directory I encountered following error.

rake aborted!
uninitialized constant Rearview::Engine
/home/ubuntu/rearview/config/routes.rb:2:in block in <top (required)>' /home/ubuntu/rearview/config/routes.rb:1:in<top (required)>'
/home/ubuntu/rearview/config/environment.rb:5:in `<top (required)>'

Kindly help me with this issue.

"Test Monitor" throwing cannot load such file -- bundler (LoadError)

Just started using rearview-v.1.2.1 When using the "Test Monitor" on a single metric and raise an alert when the value exceeds some number I keep receiving the following error on the Output after waiting for about 5 minutes.

/Users/ronmb/.rbenv/versions/1.9.3-p547/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in require': cannot load such file -- bundler (LoadError) from /Users/ronmb/.rbenv/versions/1.9.3-p547/lib/ruby/1.9.1/rubygems/custom_require.rb:36:inrequire'
from /Users/ronmb/Projects/rearview/sandbox/monitor_script20140808-2941-mdlw7a:7:in `

'

Verified that I have the bundler gem. I've included my ruby environment info as well.

$ gem list | grep bundl
bundle (0.0.1)
bundler (1.6.5)
$ rbenv local
jruby-1.7.5
$ rbenv global
1.9.3-p547

I ran both bin/setup and verification and all passed without issues.

Read Only for Rearview

Hi,

Is there a way to have read only account for rearview. Currently I am using admin@localhost and would like to have an read only account which does not allow any modifications to monitors and dashboards.

Thanks,

Validation Failure - graphite can not be reached.

Hi Rearview team,

I have the following configuration for graphite in config/initializers/rearview.rb

config.graphite_connection = {url: "https://www.hostedgraphite.com/{Hosted Graphite Access Key}/graphite"}

When I run the instructed command to check verifications (rake RAILS_ENV=production rearview:config:verify) I get the following output at the end.

validating...FAILED Graphite connection graphite cannot be reached

I have verified that the graphite url I provided is working (e.g., appending '/render' at the end will get you an empty graph).

Any ideas why it is failing the validation?

Thanks in advance

Graphite URL generation

How is the URL for obtaining the data from Graphite built? I see how the hostname and auth information is supplied, but the URL that hits my Graphite servers doesn't seem to be correct. It seems to be missing some of the base parameters.

I'm not a Scala guy, so its a bit hard to figure out how that is being generated.

Test Monitor Issue

Hi Rearview Team,

Our team was on the Scala version and everything worked well. Now we are setting up a new rearview instance using the latest version.

When I took an currently working Metric from one of our rearview monitors, and entered it on the new rearview instance, and hit test monitor, the following errors were shown.

Monitor Test Error!
Metrics contains an invalid metric: {working metrics I entered}

Server logs
I, [2014-06-19T22:06:14.118000 #433] INFO -- : Started POST "/monitor.json" for 24.137.223.133 at 2014-06-19 22:06:14 +0000
I, [2014-06-19T22:06:14.156000 #433] INFO -- : Processing by Rearview::MonitorController#create as JSON
I, [2014-06-19T22:06:14.157000 #433] INFO -- : Parameters: {"id"=>"", "dashboardId"=>"1", "userId"=>"2", "name"=>"test", "active"=>"true", "jobType"=>"monitor", "version"=>"2", "cronExpr"=>"0 0 * ? Mar,May,Sep Sun,Mon,Wed,Thu,Fri,Sat", "errorTimeout"=>"60", "minutes"=>"15", "metrics"=>["{my metric}"], "monitorExpr"=>"limit = 25000\n\nif not @a.nil?\n \nvalue = @a.values[-2] \n\nif not value.nil?\n\n\traise "Max 95 Percentile for Get Anonymous Access Code is currently at #{value}) higher than the #{limit}" if value > limit\n \nend\n\nend", "toDate"=>"now", "createdAt"=>"", "modifiedAt"=>"", "description"=>""}
I, [2014-06-19T22:06:15.135000 #433] INFO -- : Rendered /home/ubuntu/.rvm/gems/jruby-1.7.5@rearview/gems/rearview-1.2.1-java/app/views/rearview/monitor/create.json.jbuilder (2.0ms)
I, [2014-06-19T22:06:15.137000 #433] INFO -- : Completed 200 OK in 970ms (Views: 6.0ms | ActiveRecord: 2.0ms)

I have a valid hosted graphite connection as can be seen here #44

Any idea why its happening?

Thanks

Time zone in the UI

My server is set to UTC and that's what I'm getting for times in the Rearview UI. I'd prefer to not change the server time if I don't have to. Is there a way to tell Rearview which timezone to display in and run scheduled jobs at?

Is this project dead?

@steveakers, now that @talbright is no longer with LivingSocial, do you guys have plans to continue furthering Rearview or should we consider the project dead?

I'd hate to invest in a project that is no longer maintained.

Licensing

Under which license has this been released?

Thanks!

common.conf not updateing

So I am trying to make a chance to the graphite host in my common.conf directory but it doesn't seem to be taking effect.

In my conf I have

# Graphite
graphite.host="http://graphite-internal.int.xxxxx.com"
graphite.auth=""
graphite.timeout=10000

but you can see in the debug logs its still trying the other hostname.

[debug] s.s.c.FixRowNumberOrdering - No row numbers to fix
[debug] s.s.c.QueryCompiler - After phase fixRowNumberOrdering: (no change)
[debug] s.s.s.BaseSession - Preparing statement: select s4.`id`, s4.`user_id`, s4.`app_id`, s4.`name`, s4.`cron_expr`, s4.`metrics`, s4.`monitor_expr`, s4.`minutes`, s4.`to_date`, s4.`description`, s4.`active`, s4.`status`, s4.`last_run`, s4.`next_run`, s4.`alert_keys`, s4.`error_timeout`, s4.`created`, s4.`modified`, s4.`deleted_at` from `jobs` s4 where (s4.`deleted_at` is null) and (s4.`active` = true)
[info] play - Application started (Prod)
[info] play - Listening for HTTP on /0.0.0.0:9000
[info] a.e.s.Slf4jEventHandler - Slf4jEventHandler started
[error] application - Graphite request failure: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache Server at graphite.int.xxxxx.com Port 443</address>
</body></html>

I have tried killing the process, which didnt work. I also tried re-running ./sbt test to see if that maybe would help, but no dice so far. How do I do things like update the config, and reload config ?

Thanks!

-John

Verify Configuration fails for rearview-1.1.1

Hi,

I am successful in setting up rearview-1.1.1 on ubuntu. I updated the rearview.rb file and ran this command for verifying configuration.

$ rake RAILS_ENV=production rearview:config:verify

output:

using "production" configuration:
authentication={:strategy=>:database}
default_from=[email protected]
default_url_options={:host=>"localhost", :port=>"3000"}
enable_alerts=false
enable_monitor=false
enable_stats=false
graphite_url=https://www.hostedgraphite.com/access-key
logger=#ActiveSupport::Logger:0x5e7cae4e
pagerduty_url=https://events.pagerduty.com/generic/2010-04-15/create_event.json
preload_jobs=false
sandbox_dir=/opt/rearview-1.1.1/sandbox
sandbox_exec=["rvm-exec", "ruby-1.9.3@rearview-sandbox", "ruby"]
sandbox_timeout=10
statsd_connection=nil
verify=false
validating...FAILED
Graphite url is not a reachable URL

I am using Jruby-1.7.10 and no other ruby version. when I run ruby -v I get this:

jruby 1.7.10 (1.9.3p392) 2014-01-09 c4ecd6b on OpenJDK 64-Bit Server VM 1.7.0_51-b00 [linux-amd64]

Not sure if the value of sandbox_exec is correct.

Monitor output window error - not finding i18n version 0.6.5

Before I file the bug, have to admit I am a novice Ruby user and quite possibly this is a user error:-)

Installed rearview-1.1.2 on Ubuntu 12.04 using the setup procedure described in the project

When I add a monitor and test it, I get the following error in output window


/home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/spec_set.rb:92:in block in materialize': Could not find i18n-0.6.5 in any of the sources (Bundler::GemNotFound) from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/spec_set.rb:85:inmap!'
from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/spec_set.rb:85:in materialize' from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/definition.rb:133:inspecs'
from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/definition.rb:178:in specs_for' from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/definition.rb:167:inrequested_specs'
from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/environment.rb:18:in requested_specs' from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler/runtime.rb:13:insetup'
from /home/boks/.rvm/gems/ruby-1.9.3-p484@global/gems/bundler-1.5.2/lib/bundler.rb:119:in setup' from /home/boks/workspace/rearview/rearview-1.1.2/sandbox/monitor_script20140130-27375-1r4o78l:10:in

'


My gem list is


*** LOCAL GEMS ***

actionmailer (4.0.2)
actionpack (4.0.2)
activemodel (4.0.2)
activerecord (4.0.2)
activerecord-deprecated_finders (1.0.3)
activerecord-jdbc-adapter (1.3.4)
activerecord-jdbcmysql-adapter (1.3.4)
activesupport (4.0.2)
ancestry (2.0.0)
arel (4.0.1)
atomic (1.1.14 java)
bcrypt-ruby (3.1.2 java)
bouncy-castle-java (1.5.0147)
broach (0.3.0)
builder (3.1.4)
bundler (1.5.2)
bundler-unload (1.0.2)
celluloid (0.14.1)
coderay (1.1.0)
coffee-rails (4.0.1)
coffee-script (2.2.0)
coffee-script-source (1.6.3)
devise (3.2.2)
diff-lcs (1.2.5)
dotenv (0.9.0)
erubis (2.7.0)
execjs (2.0.2)
executable-hooks (1.3.1)
faraday (0.8.8)
ffi (1.9.3 java)
foreman (0.63.0 java)
gem-wrappers (1.2.4)
hashie (2.0.5)
hike (1.2.3)
hitimes (1.2.1 java)
httparty (0.12.0)
httpauth (0.2.0)
i18n (0.6.9)
jbuilder (1.5.3)
jdbc-mysql (5.1.27)
jquery-rails (3.0.4)
jruby-launcher (1.0.19 java)
jruby-openssl (0.9.4)
json (1.8.1 java)
jwt (0.1.8)
mail (2.5.4)
method_source (0.8.2)
mime-types (1.25.1)
minitest (4.7.5)
multi_json (1.8.2)
multi_xml (0.5.5)
multipart-post (1.2.0)
nap (0.6.0)
oauth2 (0.8.1)
omniauth (1.1.4)
omniauth-google-oauth2 (0.2.1)
omniauth-oauth2 (1.1.1)
orm_adapter (0.5.0)
polyglot (0.3.3)
protected_attributes (1.0.5)
pry (0.9.12.4 java)
puma (2.7.1 java)
rack (1.5.2)
rack-test (0.6.2)
rails (4.0.2)
railties (4.0.2)
rake (10.1.1)
rdoc (3.12.2)
rearview (1.1.2 jruby)
rspec-core (2.14.7)
rspec-expectations (2.14.4)
rspec-mocks (2.14.4)
rspec-rails (2.14.0)
rubygems-bundler (1.4.2)
rvm (1.11.3.8)
sass (3.2.13)
sass-rails (4.0.1)
sdoc (0.3.20)
slop (3.4.7)
spoon (0.0.4)
sprockets (2.10.1)
sprockets-rails (2.0.1)
state_machine (1.2.0)
statsd-ruby (1.2.1)
therubyrhino (2.0.2)
therubyrhino_jar (1.7.4)
thor (0.18.1)
thread_safe (0.1.3 java)
tilt (1.4.1)
timers (2.0.0)
treetop (1.4.15)
turbolinks (2.1.0)
tzinfo (0.3.38)
uglifier (2.4.0)
warden (1.2.3)


Will appreciate any help understanding this issue

`initialize': undefined method `[]' for nil:NilClass (NoMethodError)

When Graphite doesn't have data or when there is a connection error, rearview throw below error and it triggers an alert.

-:112:in initialize': undefined method[]' for nil:NilClass (NoMethodError)
from -:214:in new' from -:214:inblock in create_timeseries'
from -:214:in map' from -:214:increate_timeseries'
from -:237:in secure_eval' from -:247:in

'

bin/rails fails

When running bin/setup, the run_install() function runs /bin/rails which throws this error:

D, [2014-01-23T16:30:17.141000 #32698] DEBUG -- : Shutdown completed cleanly
LoadError: load error: /home/rearview/rearview-1.1.1/config/environment -- java.lang.NoSuchFieldException: isRestricted
require at org/jruby/RubyKernel.java:1083
require at /home/rearview/.rvm/gems/jruby-1.7.10/gems/activesupport-4.0.2/lib/active_support/dependencie
s.rb:229
load_dependency at /home/rearview/.rvm/gems/jruby-1.7.10/gems/activesupport-4.0.2/lib/active_support/dependencie
s.rb:214
require at /home/rearview/.rvm/gems/jruby-1.7.10/gems/activesupport-4.0.2/lib/active_support/dependencie
s.rb:229
require_environment! at /home/rearview/.rvm/gems/jruby-1.7.10/gems/railties-4.0.2/lib/rails/application.rb:189
(root) at /home/rearview/.rvm/gems/jruby-1.7.10/gems/railties-4.0.2/lib/rails/commands.rb:44
require at org/jruby/RubyKernel.java:1083
(root) at bin/rails:12
D, [2014-01-23T16:30:45.149000 #32717] DEBUG -- : Shutdown completed cleanly

Interface slows browser to a crawl

When working on a dashboard with many monitors, the interface slows to a crawl. I suspect it is due to graphing. I would like to be able to show a list of the monitors without them trying to graph their data.

Right now, if I want to edit a monitor, I need to turn all the monitors on the dashboard off before expanding a monitor to edit it, otherwise, garbage collection happens every few seconds, which is maddening.

Consider using dredd

Hello :)
I've pushed dredd - a gem which I've built for an internal alerting system (during my research process I've bumped into rearview - impressive work!), and I think may
also be worth looking at for rearview.

https://github.com/jondot/dredd

It might be useful for people without a technical background, that need to express a detection rule in something close to English.

I've exhausted the "run a rule over a collection in-memory" space, and then had no choice but to build it (common solutions are - keep sqlite in-memory and run SQL over collection, ESPER, etc - are all too heavy).

Sandbox permissions on monitor scripts.

The simple operation of
puts @a.values.sum

Creates this error.

/opt/rearview/rearview/sandbox/monitor_script20140419-4332-1fd20qm:206:in write': Insecure operation - write (SecurityError) from /opt/rearview/rearview/sandbox/monitor_script20140419-4332-1fd20qm:206:inputs'
from /opt/rearview/rearview/sandbox/monitor_script20140419-4332-1fd20qm:206:in puts' from /opt/rearview/rearview/sandbox/monitor_script20140419-4332-1fd20qm:206:inblock in scoped_eval'

puts @A or puts @timeseries seems to work just fine.

Completed job 405 (FailedStatus)

Hi Guys,

Great project I was hoping this could go mainstream because it fits exactly what we need in the graphite's ecosystem!

I set the project up and everything was going fine until the job is being scheduled. I was repeatedly getting the error logs below.

[info] application - Running job 405
[info] application - Completed job 405 (FailedStatus)
[info] application - ScheduleJob 405
[info] application - Scheduled 405 Monitoring 50 * * * * ?
[info] application - ScheduleJob 405
[info] application - Scheduled 405 Monitoring 50 * * * * ?
[info] application - Running job 405
[info] application - Completed job 405 (FailedStatus)
[info] application - ScheduleJob 405
[info] application - Scheduled 405 Monitoring 50 * * * * ?
[info] application - ScheduleJob 405
[info] application - Scheduled 405 Monitoring 50 * * * * ?
[info] application - Running job 405
[info] application - Completed job 405 (FailedStatus)
[info] application - ScheduleJob 405

Any idea what could it be? Test monitor button on the UI worked for me and I tried to search for useful logs regarding this but couldn't find any. Appreciate any tips on this!

Graphite Basic Auth - Username and Password

I can find no direct documentation, and I'm not well versed in Scala, but t looks like the Graphite.auth config only takes a password. Is there a way to auth against a Graphite server using both username and password? I've tried passing "user:password" but this does not work.

Thanks!

edit/view monitors

Right now it doesn't look like I can edit or even view the config of existing monitors.

Documentation request: Failover considerations, operating experience

Firstly, kudos for a very useful contribution to the community. For a prospective user evaluating rearview, including the following in the documentation would be of great help:

  1. Documentation around failover / restoration considerations for rearview itself.

  2. Duration of use in production and documentation of any observed gotchas, numbers related to rearview's uptime, performance (with respect to number of metrics, poll interval) and scale (w.r.t number of metrics and frequency of sampling) in a production environment.

  3. Is rearview still in active use / development internally ? Any other adopters outside of LivingSocial?

Thanks.

statsd integration

Hey guys,

How does statsd used with the product? I see this in the logs with it disabled

[warn] application - Send will be NOOP because statsd.enabled is not enabled

Since I dont use stats I am not sure what this actually means...

Rearview::ResultsHandler:0x64e17c9c> firing event :error

Am seeing the data in graphite, but don't see the data in rearview. Below is the error log:
I, [2014-04-18T13:19:34.245000 #11876] INFO -- : #Rearview::ResultsHandler:0x64e17c9c firing event :error for #<Rearview::Job id: 5, created_at: "2014-04-18 11:28:31", updated_at: "2014-04-18 13:18:33", name: "my ABC monitor", active: true, last_run: "2014-04-18 13:19:34", cron_expr: "0 * * * * ?", status: "error", user_id: 1, alert_keys: [], deleted_at: nil, error_timeout: 60, next_run: nil, description: "test 123", app_id: 1, metrics: ["alias(servers.prod.abc, "abc")"], monitor_expr: "puts @timeseries\n\nabc = @a.values.sum\ngraph_value["...", minutes: 10, to_date: "now">

want to debug rearview

Trent/Others,
I want to debug rearview rails application. When i use ruby-debug gem, the application stops and hangs when it hits 'debugger' line of code. Am thinking of using 'pry'. Would rearview work with Pry? Please let me know.

monitor fails

After having gotten rearview up, I tried adding my first monitor. Here's the expressions section:

puts @timeseries

avg = @a.values.mean
raise "Running #{avg} transactions!" if avg > 1

When I hit the test button I get this error output:

/home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find i18n-0.6.5 in any of the sources (Bundler::GemNotFound)
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/spec_set.rb:85:in `map!'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/spec_set.rb:85:in `materialize'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/definition.rb:133:in `specs'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/definition.rb:178:in `specs_for'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/definition.rb:167:in `requested_specs'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/environment.rb:18:in `requested_specs'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/runtime.rb:13:in `setup'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler.rb:119:in `setup'
    from /home/rearview/.rvm/gems/jruby-1.7.10/gems/bundler-1.5.2/lib/bundler/setup.rb:17:in `<top (required)>'
    from /home/rearview/.rvm/rubies/ruby-1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/rearview/.rvm/rubies/ruby-1.9.3-p484/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require'

The gem does seem to be there, but I'm an rvm n00b.

Scheduler/Job errors should not generate email alerts

I think it timed out getting data from Graphite. It might be something else. I got the following email alert:

ALERT: java.util.concurrent.TimeoutException: No response received after 120000

Monitor: Auth-Error-Rate-Prod
Description: None

Alerted On: 11/22/2013 20:48:30 UTC

Another example below. In this case the monitor works fine most of the time:

ALERT: rearview.model.GraphiteMetricException:

Graphite encountered an unexpected error while handling your request.

Please contact your site administrator if the problem persists.


Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/opt/g/7ac8d61a7b/webapp/graphite/render/views.py", line 118, in renderView
    seriesList = evaluateTarget(requestContext, target)
  File "/opt/g/7ac8d61a7b/webapp/graphite/render/evaluator.py", line 9, in evaluateTarget
    tokens = grammar.parseString(target)
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 1031, in parseString
    loc, tokens = self._parse( instring, 0 )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2543, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2543, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2543, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2398, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2543, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2288, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2735, in parseImpl
    loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2288, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2651, in parseImpl
    loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2288, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2543, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2398, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2543, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2398, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2288, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 905, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2355, in parseImpl
    return maxMatchExp._parse( instring, loc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 962, in _parseCache
    value = self._parseNoCache( instring, loc, doActions, callPreParse )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 909, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 2606, in parseImpl
    self.expr.tryParse( instring, loc )
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 947, in tryParse
    return self._parse( instring, loc, doActions=False )[0]
  File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 956, in _parseCache
    value = ParserElement._exprArgCache[ lookup ]
KeyError: (")", u'highestMax(transformNull(summarize(maxSeries(tnt-auth-prod.summarized.com.ea.tnt.service.auth.rest.v1.AccessTokenResource.*.getAccessToken.95percentile),"30min","avg"), 0), 1)', 174, True, False)

Monitor: Auth-AccessToken-Response-30min-Prod
Description: None

Should it send out alerts for internal errors? Is there a way to prevent this from happening?

Is there a way to interact with database from the monitor scripts ?

Hi,

I want to use some simple sql queries such as create, insert, update, select etc from monitor scripts. I am planning to perform these operations on a mysql database used by rearview i.e (database mentioned in database.yml). Mysql is installed on the same box as reaview.

Is it possible to interact with database from monitor scripts ? If not is there any other way to achieve this ?

Thanks

config/initializers/rearview.rb is missing

The documentation mentions this file needs to be modified before running rearview, but the file is missing from the source code.

This probably causes running rake RAILS_ENV=production rearview:config:verify to fail with the following reason:

using "production" configuration:
authentication={:strategy=>:database}
default_from=rearview@localhost
default_url_options=nil
enable_alerts=true
enable_monitor=true
graphite_url=nil
logger=nil
pagerduty_url=https://events.pagerduty.com/generic/2010-04-15/create_event.json
preload_jobs=true
sandbox_dir=nil
sandbox_exec=nil
sandbox_timeout=5
verify=false
validating...rake aborted!
can't convert nil into String
org/jruby/RubyFile.java:1895:in `join'
org/jruby/RubyFile.java:826:in `join'
org/jruby/RubyProc.java:271:in `call'
org/jruby/RubyArray.java:1613:in `each'
org/jruby/RubyArray.java:1613:in `each'
org/jruby/RubyKernel.java:1101:in `load'
org/jruby/RubyKernel.java:1121:in `eval'
/Users/khash/.rvm/gems/jruby-1.7.5@global/bin/jruby_executable_hooks:15:in `(root)'
Tasks: TOP => rearview:config:verify
(See full trace by running task with --trace)
D, [2014-01-12T11:52:23.061000 #44446] DEBUG -- : Shutdown completed cleanly

Email and Pagerduty Setup

Hi, For setting up email alerts do I just have to configure SMTP settings or have to create a new Mailer as well ? Sorry if its a dumb question as I am new to ruby and rails so not sure how things work.

For SMTP, in config/environments/production.rb I have added these configs.

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "email-smtp.us-east-1.amazonaws.com",
:port => 25,
:user_name => "myusername",
:password => "mypassword",
:authentication => :login,
:enable_starttls_auto => true }

Also could you give insights on setting up pagerduty ?

Thanks in advance

Alerts getting delivered at an interval of 60 minutes.

Hi,

Rearview is sending email alerts after every 60 minutes even if monitors are triggered every 5 minutes or any other interval for that matter.

My graphite server is in Pacific time zone and because of that I made smal changes in the 'create_from_to_dates' function in monitor_runner.rb file.
This is how it looks.

def create_from_to_dates(minutes = nil, to_date = nil)
logger.debug "#{self}#create_from_to_dates minutes:#{minutes} to_date:#{to_date}"
graphite_date_format = '%H:%M_%Y%m%d'
incoming_date_format = '%m/%d/%Y %H:%M'
mins = minutes.nil? ? @@DEFAULT_MINUTES : minutes.to_i
if to_date == "now" || to_date.nil?
local = DateTime.now
pacific_offset = Rational(-6,24)
now = local.new_offset(pacific_offset)
else
now = DateTime.strptime(to_date, incoming_date_format)
pacific_offset = Rational(-6,24)
now = now.new_offset(pacific_offset)
end
to = (now - 10.minutes).strftime(graphite_date_format)
from = (now - (mins + 15).minutes).strftime(graphite_date_format)
logger.debug "#{self}#create_from_to_dates from:#{from} to:#{to}"
[from,to]
end

This is the only change I made.

I spent a lot of time digging into this but did not had any luck. Do you know what might be the reason for this ?

In order to interact with Pacific time zone is there any other place where I need to make any changes ?

Thanks in advance.

Rearview-Scala version unable to send email on alerts

Hi,

I have setup rearview-scala version on EC2 instance and using Amazon SES.

In the conf/common.conf file I have updated values as follows:

statsd.enabled=false
graphite.host="https://hostedgraphite.com/acces-key"

email.from="[email protected]"
email.host="email-smtp.us-east-1.amazonaws.com"
email.port=465
email.user="xyz"
email.password="abc"
alert.class_names = ["rearview.alert.LiveEmailAlert"]

with these configs rearview does not send emails on alerts. I tried on both ports i.e 25 and 465. Even telnet to email-smtp.us-east-1.amazonaws.com 465 was successful.

Am I missing anything ?

database setup fails

I'm using postgres 9.1 as my database:
/bin/setup
....
Setting up databases...
== BaseSchema: migrating =====================================================
-- create_table("applications", {:force=>true})
-> 0.0220s
-- add_index("applications", ["ancestry"], {:name=>"index_applications_on_ancestry"})
-> 0.0060s
-> 0 rows
-- add_index("applications", ["user_id"], {:name=>"user_id"})
-> 0.0190s
-> 0 rows
-- create_table("job_data", {:force=>true})
rake aborted!
An error has occurred, this and all later migrations canceled:

The limit on text can be at most 1GB - 1byte./home/rearview/.rvm/gems/jruby-1.7.10/gems/activerecord-jdbc-adapter-1.3.4
/lib/arjdbc/postgresql/adapter.rb:126:in `type_to_sql'

Default alert URI not working

Probably I misunderstood something, but why I need those default alert URI if it not used? Alerts are never sent using the data from default alert URIs, no?

future times and bad metrics

In writing my first monitors, I am not getting any data. Upon running tshark to watch the outgoing queries to graphite I saw this:

330.465848    10.0.2.15 -> 10.11.12.28  HTTP GET /render?from=22:40_20140128&until=22:41_20140128&format=raw&target=alias(stats.gauges.pg.9_1.ca-blah.database.blah_prod_ca.active_sessions,%22active_sessions%22) HTTP/1.1

The target took my literal input into the target field in the web ui. Also, the timestamps provided seem to be in UTC, but I'm in UTC-6, rendering them futuristic, even though is specified the bounds as 1min and now.

java.lang.ClassNotFoundException: javax/crypto/JceSecurity

The database setup step of bin/setup from a clean rvm gemset and jruby 1.7.5 throws the following exception:

D, [2014-01-12T11:43:47.120000 #44332] DEBUG -- : Shutdown completed cleanly
LoadError: load error: /Users/khash/work/readview/config/environment -- java.lang.ClassNotFoundException: javax/crypto/JceSecurity
               require at org/jruby/RubyKernel.java:1082
               require at /Users/khash/.rvm/rubies/jruby-1.7.5/lib/ruby/gems/shared/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:229
       load_dependency at /Users/khash/.rvm/rubies/jruby-1.7.5/lib/ruby/gems/shared/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:214
               require at /Users/khash/.rvm/rubies/jruby-1.7.5/lib/ruby/gems/shared/gems/activesupport-4.0.2/lib/active_support/dependencies.rb:229
  require_environment! at /Users/khash/.rvm/rubies/jruby-1.7.5/lib/ruby/gems/shared/gems/railties-4.0.2/lib/rails/application.rb:189
                (root) at /Users/khash/.rvm/rubies/jruby-1.7.5/lib/ruby/gems/shared/gems/railties-4.0.2/lib/rails/commands.rb:44
               require at org/jruby/RubyKernel.java:1082
                (root) at bin/rails:12

Bundle installed problems

bundle install
Gemfile syntax error compile error
on line 44: syntax error, unexpected ':', expecting kEND
gem 'sdoc', require: false
^
how to resolve this problem?

Database exception when creating user.

Failed to store user
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'created' cannot be null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.6.0_27]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.6.0_27]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.6.0_27]
at java.lang.reflect.Constructor.newInstance(Constructor.java:534) ~[na:1.6.0_27]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) ~[mysql-connector-java-5.1.21.jar:na]
at com.mysql.jdbc.Util.getInstance(Util.java:386) ~[mysql-connector-java-5.1.21.jar:na]

Rearview::MonitorService crashing on startup

Hello there! I seem to be facing a problem of my own design as Rearview::MonitorService is crashing on startup with Celluloid::DeadTaskError as the only clue:

2014-05-16_03:52:52.47370 [JRubyWorker-1] INFO / - #<Rearview::MonitorService:0x2d858dff> starting up service...
2014-05-16_03:52:52.47371
2014-05-16_03:52:52.48289 [RubyThread-13: /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/internal_pool.rb:56] INFO / - Rearview::MonitorService crashed!
2014-05-16_03:52:52.48291 Celluloid::DeadTaskError: cannot resume a dead task (dead fiber called)
2014-05-16_03:52:52.48292       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/tasks/task_fiber.rb:25:in `deliver'
2014-05-16_03:52:52.48293       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/tasks.rb:69:in `resume'
2014-05-16_03:52:52.48294       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/responses.rb:11:in `dispatch'
2014-05-16_03:52:52.48294       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/actor.rb:331:in `handle_message'
2014-05-16_03:52:52.48295       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/actor.rb:174:in `run'
2014-05-16_03:52:52.48297       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/actor.rb:157:in `initialize'
2014-05-16_03:52:52.48299       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/thread_handle.rb:13:in `initialize'
2014-05-16_03:52:52.48300       org/jruby/RubyProc.java:249:in `call'
2014-05-16_03:52:52.48300       /data/app/rearview/installs/rearview_bba883c9d4335407b321a9420f047a008aa1d173/vendor/bundle/jruby/1.9/gems/celluloid-0.14.1/lib/celluloid/internal_pool.rb:59:in `create'
2014-05-16_03:52:52.48301
2014-05-16_03:52:52.56617 [main] INFO / - An exception happened during JRuby-Rack startup

I'm pretty surprised Celluloid isn't logging some other error here. Also if I manually try to run the same code from the Rails console, it works, which is rather perplexing.

Anyway, as Celluloid's author I really hate seeing hard-to-debug scenarios like this and sure would love to make it easier to figure out what's wrong, particularly since this problem is a roadblock for me personally! ๐Ÿ˜„

enhancement: highlight exception raising data points

For metrics that have a "raise", highlight the data points in some manner in the graph to show that an alert/exception was thrown at that point. Not sure of the manner of the highlight, blinking would probably be bad annoying :)

Running in "production" ?

Hello,

This product looks great, thanks so much for open sourcing it . I want to deploy this for a few members of my team to play with, but I am not sure how best to deploy it. is the ./sbc start recommended just for development or is that fine for a staging deployment for my team ? Sorry if this is a dumb question, I am just not very familiar w/ Scala so I wanted to make sure my team gets the best experience

Thanks

-John

How can I get count of alerts sent over a time period.

Hi,

Can someone help me understand the significance/purpose of 'job_errors' table ?

Is there a way to compute no. of alerts triggered by a monitor over a time interval ?
This interval can be a day, a week or a month.

I feel this can be achieved from 'job_errors' table because I see entries in this table with status 'failed'. But this does not convince me much because in my case the no. of alerts generated by a monitor till now are more than the no. of entries in 'job_errors' with status='failed' for that monitor.

I have been digging into code/logs to understand the purpose of 'Job_errors' table but have not reached to any conclusion yet.

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.