Giter VIP home page Giter VIP logo

tasseo's Introduction

Tasseo

Build Status

Reading the tea leaves.

graph

Overview

Tasseo is a lightweight, easily configurable, near-realtime dashboard for time-series metrics. Charts are refreshed every two seconds and provide a heads-up view of the most current value.

The default behavior is designed for a retention policy with a 1-second resolution for at least 5 minutes, although this can be modified within the dashboard and metric attributes.

Tasseo was originally designed for the Graphite TSDB, but has since been extended to support InfluxDB, Librato Metrics, and Amazon CloudWatch backend sources.

Configuration

Examples

Creating your own dashboard is as simple as dropping a JSON file into the dashboards directory, committing it, and pushing the code to a Heroku app. The name of your file (minus the .js suffix) becomes the name of your dashboard. Here's an example configuration that you could put in e.g. dashboards/example.js:

var metrics =
[
  {
    "alias": "pulse-events-per-second",
    "target": "pulse.pulse-events-per-second",
    "warning": 100,
    "critical": 500
  }
];

The target attribute is the only mandatory field. As you might expect, each dashboard can contain an arbitrary list of different Graphite metrics. Another perfectly valid example, this time including the dashboard-level attribute period:

var period = 3;
var metrics =
[
  { "target": "pulse.hermes-econns-apps-per-minute" },
  { "target": "pulse.hermes-econns-per-minute" },
  { "target": "pulse.hermes-elevated-route-lookups-per-minute" },
  { "target": "pulse.hermes-errors-per-minute" },
  { "target": "pulse.hermes-h10-per-minute" },
  { "target": "pulse.hermes-h11-per-minute" },
  { "target": "pulse.hermes-h12-per-minute" },
  { "target": "pulse.hermes-h13-per-minute" },
  { "target": "pulse.hermes-h14-per-minute" },
  { "target": "pulse.hermes-h18-per-minute" },
  { "target": "pulse.hermes-h99-per-minute" }
];

As an alternative to static dashboard layouts, it's possible to use a false target to pad cells on the dashboard grid. Because metrics are read in a predictable manner from their respective .js files, this provides a mechanism for organizing an otherwise uncontrollable layout.

var metrics =
[
  { "target": "foo" },
  { "target": false },
  { "target": "bar" }
];

Thresholds

warning and critical thresholds are optional. If defined, the color of the graph will change when the current value exceeds the respective threshold. If the thresholds are reversed (i.e. critical is lower than warning), Tasseo understands that an inverse threshold is expected.

Dashboard Attributes

Dashboard-level attributes are top-level variables defined in your dashboard configuration.

  • period - Range (in minutes) of data to query from Graphite. (optional, defaults to 5)
  • refresh - Refresh interval for charts, in milliseconds. (optional, defaults to 2000)
  • theme - Default theme for dashboard. Currently the only option is dark. (optional)
  • padnulls - Determines whether to pad null values or not. (optional, defaults to true)
  • title - Dictates whether the dashboard title is shown or not. (optional, defaults to true)
  • toolbar - Dictates whether the toolbar is shown or not. (optional, defaults to true)
  • normalColor - Set normal graph color. (optional, defaults to #afdab1)
  • criticalColor - Set critical graph color. (optional, defaults to #d59295)
  • warningColor - Set warning graph color. (optional, defaults to #f5cb56)
  • interpolation - Line smoothing method supported by D3. (optional, defaults to step-after)
  • renderer - Rendering method supported by D3. (optional, defaults to area)
  • stroke - Dictates whether stroke outline is shown or not. (optional, defaults to true)

Metric Attributes

Metric-level attributes are attributes of the metric object(s) in your metrics array.

  • alias - Short name for the metric. (optional)
  • target - Full target name as used by Graphite. Can contain a combination of chained functions. (mandatory)
  • description - Text description or comment. (optional)
  • link - External link to apply to metric name or alias. (optional)
  • warning - Warning threshold. Exceeding this value causes the graph to turn yellow. (optional)
  • critical - Critical threshold. Exceeding this value causes the graph to turn red. (optional)
  • unit - Arbitrary string that can be used to designate a unit value; for example, "Mbps". (optional)
  • series - Name of the InfluxDB series that each target belongs to. (mandatory for InfluxDB)
  • transform - A function that takes the value and returns a transformed value. (optional)
  • scale - Use a dynamic y-axis scale rather than defaulting to zero min. (optional)
  • where - A where clause to pass to InfluxDB. (optional for InfluxDB)
  • Amazon CloudWatch specific fields which are documented here and are discussed in the Amazon CloudWatch section below
    • Namespace, MetricName, Dimensions, Statistics, EndTime, StartTime, Period, Unit

Deployment

The only required environment variable is GRAPHITE_URL. This should be set to the base URL of your Graphite composer (e.g. https://graphite.yourdomain.com). If your server requires Basic Auth, you can set the GRAPHITE_AUTH variable (e.g. username:password).

Local

$ rvm use 1.9.2
$ bundle install
$ export GRAPHITE_URL=...
$ export GRAPHITE_AUTH=... # e.g. username:password (optional)
$ foreman start
$ open http://127.0.0.1:5000

Heroku

$ export DEPLOY=production/staging/you
$ heroku create -r $DEPLOY -s cedar tasseo-$DEPLOY
$ heroku config:set -r $DEPLOY GRAPHITE_URL=...
$ heroku config:set -r $DEPLOY GRAPHITE_AUTH=...
$ git push $DEPLOY master
$ heroku scale -r $DEPLOY web=1
$ heroku open -r $DEPLOY

Graphite Server Configuration

In order to support CORS with JSON instead of JSONP, we need to allow specific headers and allow the cross-domain origin request. The following are suggested settings for Apache 2.x. Adjust as necessary for your environment or webserver.

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"

If your Graphite composer is protected by basic authentication, you have to ensure that the HTTP verb OPTIONS is allowed unauthenticated. This looks like the following for Apache:

<Location />
    AuthName "graphs restricted"
    AuthType Basic
    AuthUserFile /etc/apache2/htpasswd
    <LimitExcept OPTIONS>
      require valid-user
    </LimitExcept>
</Location>

See http://blog.rogeriopvl.com/archives/nginx-and-the-http-options-method/ for an Nginx example.

Alternate Backends

Librato Metrics

Tasseo can be configured to fetch metrics from Librato Metrics instead of Graphite by setting the LIBRATO_AUTH environment variable instead of GRAPHITE_AUTH.

The format of this variable is:

LIBRATO_AUTH=<username>:<token>

By default, all sources for a metric are aggregated. To limit to a specific source, specify the source: option when defining a metric. For instance, to limit to the "web1" source:

{
  target: "fetch.timer",
  source: "web1"
}

If you are sending data less frequently than 1 second, you should adjust the period= and refresh= configuration settings accordingly.

For instance, if you were sending metrics every 60 seconds, this could be sufficient:

var period = 60;
var refresh = 30000;

InfluxDB

Tasseo can also be configured to fetch metrics from an InfluxDB server. The necessary environment variables are INFLUXDB_URL and INFLUXDB_AUTH. Within the configuration, each target must also contain a series attribute.

The formats of these variables are:

INFLUXDB_URL=http://sandbox.influxdb.org:8086
INFLUXDB_AUTH=<username>:<password>

Sample configuration:

var metrics =
[
  {
    target: "available",
    series: "disk_usage",
    transform: function(value) {
      // metric is logged in MB but we want to display GB
      return value / 1024;
    },
    // minimum y axis value will equal minimum metric y value (instead of 0)
    scale: true,
    db: "points"
  }
]

Is equivalent to the InfluxDB query select available from disk_usage.

Amazon CloudWatch

Tasseo can be configured to fetch metrics from Amazon CloudWatch instead of Graphite by setting the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_REGION environment variables instead of GRAPHITE_AUTH. As warned here, only use AWS IAM code credentials that have read only access to specific resources. These environment variables are used on the client and may be downloaded by anyone who happens to browse to your deployed dashboard. In addition, you will need to write var usingCloudWatch = true; in the metric configuration file.

By default, metric values are aggregated, come in 1 minute segments (CloudWatch's minimum), and span the default Tasseo 5 minute period (these correspond to the fields: "Statistics", "Period", and "EndTime"/"StartTime"). These fields are documented further here. The fields "Namespace", "MetricName", "Dimensions", must be specified by the user. Although a target is required to be present, its value is irrelevant. An example for getting the Put latency off of a Kinesis Stream:

{
    'target': '',
    'Namespace': 'AWS/Kinesis',
    'MetricName': 'PutRecord.Latency',
    'Dimensions': [
      {
        'Name': 'StreamName',
        'Value': 'what-i-named-my-stream'
      }
    ]
  }

To view data on a bigger window, you should adjust the period= configuration variable accordingly. period, given in minutes, will affect the window set by "StartTime" and "EndTime". You can override any of the CloudWatch settings from your metric JSON.

For instance, if you wanted to see metrics for the last hour, and have them refresh every minute, this could be sufficient:

var period = 60; // 60 minutes
var refresh = 1 * 60 * 1000; // 1 minute

To get an idea of what values for "Namespace", "MetricName", "Dimensions" are necessary for your purposes, consult your CloudWatch dashboard or browse the response of the listMetrics API.

GitHub Authentication

To authenticate against a GitHub organization, set the following environment variables:

$ export GITHUB_CLIENT_ID=<id>
$ export GITHUB_CLIENT_SECRET=<secret>
$ export GITHUB_AUTH_ORGANIZATION=<org>

To register an OAuth application, go here: https://github.com/settings/applications

License

Tasseo is distributed under a 3-clause BSD license. Third-party software libraries included with this project are distributed under their respective licenses.

tasseo's People

Contributors

atmos avatar darkhelmet avatar dependabot[bot] avatar dm-ptp avatar ebouchut avatar eric avatar errordeveloper avatar fcuny avatar gorsuch avatar hectcastro avatar inokappa avatar joelittlejohn avatar luxflux avatar mblair avatar obfuscurity avatar rickr avatar roidrage avatar sergeylanzman 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

tasseo's Issues

Basic Auth problems

Hi

Basic Auth does not work for me, it ends up with the following message in the js-console:

OPTIONS https://<host>/render/?target=<target>&from=-60minutes&format=json 401 (Authorization Required)
XMLHttpRequest cannot load https://<host>/render/?target=<target>&from=-60minutes&format=json. Origin https://tasseo.<host> is not allowed by Access-Control-Allow-Origin.

If I remove the basic auth stuff, it works. So this has nothing to do with CORS, I think.

My Apache configuration looks like this for graphite:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"
<Location />
  AuthName "graphs restricted"
  AuthType Basic
  AuthUserFile /etc/apache2/htpasswd
  require valid-user
</Location>

For Tasseo, I have the following settings:

SetEnv GRAPHITE_URL https://<host>
SetEnv GRAPHITE_AUTH <user>:<pass>

And yep, username and password work :)

The given GRAPHITE_AUTH appears in the website source code. If I add a debug statement here:

console.log(base64);

I can see that the base64 is generated...

In the Logfile I can see the following entries:

<IP> - - [09/Jun/2012:13:10:18 +0200] "OPTIONS /render/?target=<target>&from=-60minutes&format=json HTTP/1.1" 401 164

Any ideas?

Rendering artifacts

Every so often one or more charts will render with some "negative space" artifacts. Not sure if this is a bug within d3.js, Rickshaw, Tasseo or possibly a browser bug. It might be related to nulls in the datum although I've attempted to mitigate that by padding them with the previous value (or 0 for the 0-index).

artifact

It should be possible to embed a Tasseo dashboard in an iframe

We have different kinds of dashboards, some displayed by Tasseo, some written by ourselves.

We lay them out in HTML using iframes to gather different dashboards into a single display. But we cannot add Tasseo dashboards to our displays without hacking the Tasseo source because Tasseo sends the X-Frame-Options: sameorigin header, which stops browsers from showing Tasseo dashboards in an iframe.

The fix is to add the following statement to the configure options in web.rb:

set :protection, :except => :frame_options

Can this be added to the official Tasseo source?

Validation on Graphite Datasource Can Fail on Composite Queries

Hi, the commit 2 months ago (fdc6d17) to address the alignment problem when Graphite fails to find values for the requested metric has an undesirable side effect when composite functions are chained together in a query for a metric (like for example a sumSeries on 2 metrics):

Graphite does not necessarily return the parameters requested in the same order in the JSON returned and so the underscorejs find function can fail (I presume Graphite does some kind of sorting). Graphite also seems to like injecting space characters inconsistently too:

/render/?target=sumSeries(api.foo.rate,api.bar.rate)

JSON:
[
{
target: "sumSeries(api.bar.rate,api.foo.rate)"
.... etc
}
]

A temporary workaround I'm implementing at the moment is to adjust my dashboard config to use the ordering that's sent back from Graphite, but it's something worth considering, or flagging as a gotcha when working with Graphite.

Adam

Send email if thresholds are violated.

If we had functionality to send emails when a threshold is breached we could use this instead of seyren &/or Rearview for our alerting system. This will be useful as hosted graphite supports tasseo and we could get rid of one component in our tech stack.

InfluxDB query broken

I accidentally left my test series ("data") in the query. Need to change that to a series variable and support it in the configuration syntax.

Package as a gem

It would be really cool if tasseo was packaged as a gem so it could be run without having to clone/fork the repo. With that option available, here's what I might do to run it on Heroku:

$ mkdir dashboards
$ cat <<EOF > dashboards/foo.js
var metrics = { ... }
EOF
$ cat <<EOF > Gemfile
source :rubygems
gem "tasseo"
EOF
$ bundle install
...
$ cat <<EOF > Procfile
web: bundle exec tasseo-web --port $PORT --dashboards dashboards
EOF
$ heroku create -s cedar
$ git push heroku master

This way I only need to bundle update tasseo or similar to update the app instead of dealing with an entire repo.

Wild Cards

Greetings,

I am trying to pull a common metric from a few servers. I have the target set to "servers.serverregex*.allmetric.metric.value" i dont believe this is being picked up. I was wondering if there was a way to do this.

Thanks

Thanks for the inspiration

I've just released a new open-source project that was originally based on tasseo, so I thought I should drop you a quick note first and foremost to say thanks. Tasseo is a really cool project and it was really fun playing with it, looking at the code, and drawing (lots of) great ideas from it.

It would be great to find ways to collaborate somehow for the benefit of the graphite community.

The project is called giraffe and is available on github. Would be great to hear what you think, get some feedback or share ideas.

getting solid square graph instead of gradual slope.

hello,

whatever value i read from graphite Tasseo only shows a solid square as graphic and it does not update while the value does go up.

so this makes the graph irrelevant while the value is right and up to date.

what could be wrong in my config ?

thanks,
ben-

Get tasseo working on graphite on apache

Hi - We have setup graphite on apache(wsgi). All setup/installations were done as Python based build/install's from source because of limitations on our network. How do I get tasseo setup on this environment where we don't have chef/puppet/heroku etc? I've tried reading through the forums with no luck yet, any help would be highly appreciated

word wrap long metric names

Metric names can get quite long, and if they contain only dots, letters and numbers will not be wrapped. I have added this custom style and think it would be a good standard addition:

.overlay-name { font-size: 12pt; word-wrap: break-word; }

geting solid square graph instead of slope.

hello,

some of the value read from graphite ar every large e.g 980237536 , in such case the graph is just a solid square, so the right value leads to an irrelevant graph.

is there any way to avoid a big solid square for those values ?

thanks,
ben-

Factor tasseo-js out of this repo

Hi,

Tasseo is great for my purposes of displaying available metrics. However I use only JavaScript part, without this additional Ruby stuff (I have my own webserver with build-in company-wide auth capabilities, etc). Also I need no auto discovery of dashboars and whatsoever.

I would be glad if you could split this repo into "tasseo-js" containing only JavaSciprt and CSS (+minimal index.html example) and "tasseo" that will contain all the remaining Ruby stuff.

Best regards

Padding graphs broken?

Hi,

I'm currently observing an issue when placing a padding ("target": false) element between graphs in Tasseo. When I add these padding graphs, the dashboard fails to load completely for me. From my observations this looks to be because the buildContainers process accounts for the missing index and builds an array smaller than the number of divs on the page (var j = i - falseTargets). But the createsGraph process just iterates over all and skips the ones with a false target. At least, I think that's what the cause was. Either way, my somewhat hacky temp fix locally was to remove the "j" variable and use the "i" index from the for loop for each element in the array.

There might be a more elegant solution to this!

adding link to graph has error

I'm adding this graph to a test dashboard. When I add a link, it fails. Here's the config:

[
{
"alias": "153_cpu_idle",
"target": "stats.empire-production-app-153.vmstat.cpu.idle",
"critical": "95",
"warning": "5",
"description": "foomanchu",
"link": "http://www.google.com",
"unit": "ticks"
}
];

Attaching screenshot of the error:

Screen Shot 2013-04-02 at 9 27 49 PM

dashboard error

Hello,

I don't understand why my dashboard doesn't work.

It seems to be ok, i see my dashboard on the web page but here is my server 404 log view :

11:09:04 web.1  | 10.10.100.71 - - [07/Feb/2014 11:09:04] "GET /render/?target=keepLastValue(brain3.migration.copy)&from=-5minutes&format=json HTTP/1.1" 404 1049 0.0237

Could you help me to undestand this pb ?

Thank you.

Getting "No dashboard files found."

I have two files in my "dashboards" directory

  • example.js
  • openfiles.js

However once I pushed its saying no dashboards found

export DEPLOY=production
heroku create -r $DEPLOY -s cedar xxxxxxxx-dashboard-$DEPLOY
heroku config:set -r $DEPLOY GITHUB_CLIENT_ID=xxxx
heroku config:set -r $DEPLOY GITHUB_CLIENT_SECRET=xxxx
heroku config:set -r $DEPLOY GITHUB_AUTH_ORGANIZATION=xxxx
heroku config:set -r $DEPLOY GRAPHITE_URL=http://graphite.xxxxxx.net
git push $DEPLOY master
heroku scale -r $DEPLOY web=1
heroku open -r $DEPLOY

Any ideas whats going on ?

Can't include any 'derivative'-type metric in a dashboard

If my graphite target uses the derivative or nonNegativeDerivative functions, the first value in the datapoints array is always null (for obvious reasons).

Tasseo doesn't appear to be able to handle this. I see the following in the Chrome console:

Uncaught TypeError: Cannot read property 'lastKnownValue' of undefined tasseo.js:126
    (anonymous function) tasseo.js:126
    f.Callbacks.o jquery.min.js:2
    f.Callbacks.p.fireWith jquery.min.js:2
    w jquery.min.js:4
    f.support.ajax.f.ajaxTransport.send.d

and all graphs on the dashboard show a value of '0'.

404's in foreman stdout

Browser on client - Webserver hosting tasseo - Graphite server

The http://webserver:5000 returns the list of dashboards as expected
Clicking on an example dashboard, brings up the dashboard, but only the loading circle appears, no graph.
In the stdout where I started foreman, I see 404's:
GET /graphite/render/?target=keepLastValue(icinga.webserver.load.load1)&from=-5minutes&format=json HTTP/1.1" 404

Yet, from the webserver:

curl "graphite/render/?target=keepLastValue(icinga.webserver.load.load1)&from=-5minutes&format=json"

Returns:
[{"target": "keepLastValue(icinga.webserver.load.load1)", "datapoints": [[0.08, 1440984240], [0.03, 1440984300], [0.38, 1440984360], [0.19, 1440984420], [0.19, 1440984480]]}]

What am I missing?

Graphs do not line up when metric fails

If a list of metrics contain a dud (say, syntax error in the target string) the metrics will not line up with the graphs.

That is to say, if I provide metrics [1,2,3,4,5,6,7] and metric 4 is bad, the graphs on the dashboard will show [1,2,3,5,6,7,null] in the graphs.

This means that the failing graph is obscured. The only hint of an issue is the 0 value on the last graph and an unclear error in the JS console.

Perhaps the metrics should be lined up to the graphs based on the expected target path? Alternately, show a big error when the expected count of metrics is not returned? Or both...

Access-Control-Allow-Origin

Hi All,

I'm trying to run Tasseo for the first time. I have a Graphite instance running at localhost:8080 and the Tasseo server at localhost:5000. I've exported GRAPHITE_URL=http://localhost:8080 and created an example dashboard in Tasseo. No auth is required to access my Graphite. However, I'm facing the following Javascript error:

XMLHttpRequest cannot load http://localhost:8080/render/?target=keepLastValue(system.loadavg_15min)&from=-5minutes&format=json. 
Origin http://localhost:5000 is not allowed by Access-Control-Allow-Origin.

My dashboard file looks like this:

var metrics =
[
  {
    "alias": "system.loadavg_15min",
    "target": "system.loadavg_15min",
    "warning": 100,
    "critical": 500
  }
];

I'm able to retrieve successful responses with data from Graphite when I point my browser to the Graphite query url.

I read your README several time to make sure I followed every required steps. Anyway, is there anything I might be missing? Is there anything I have to change in the Tasseo code (I wouldn't expect that)?

Thanks

Multiple graphite hosts

Is there a way to define what graphite url to pull a metric from in the dashboard files? Like if you have more than 1 graphite cluster?

Not worked Influxdb

success: function(metricResult) {
        var datapoints = metricResult[0].points;
        var newDatapoints = _.map(datapoints, function(datapoint) {
          //return { x: datapoint[0], y: datapoint[datapoint.length - 1] }
          return { x: datapoint[0], y: parseFloat(datapoint[2]) }
        })
        metric.update(newDatapoints)
      }

Need better specs around github auth

Looking at the spec work I put in today, there is not very good coverage around github oauth. I'll make it a point to circle back and add some tests for that. Opening an issue until that's covered.

Cell padding with dummy metrics

In lieu of a more structured layout mechanism (which is unlikely to happen), offer a form of dummy metric that can be used to pad the grid and help align metrics according to user preference.

Get tasseo working on graphite on apache

Could not reopen #85 , added below comment for #85 . Please help.

Pardon my ignorance , but I still cant get it right. I have graphite working on my apache. I have configured other tools like grafana on the same apache and it also works fine. I cant get tasseo working though , below is the configuration in apache setup for tasseo. Do I still need to run an configure/install after unzipping the tasseo project from git hub ? At this point I have just unzipped it to docroot of apache and created an alias to that directory.

bash-3.2$ cat ../conf/vhosts/graphite-vhost.conf | grep Access-Control
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"

bash-3.2$ cat ../conf/vhosts/graphite-vhost.conf | grep GRAP
SetEnv GRAPHITE_URL http://graphite.domain.com:8080

bash-3.2$ cat ../conf/vhosts/graphite-vhost.conf | grep tasseo
Alias /tasseo /app/graphite/webapp/tasseo

bash-3.2$ ls -lrt /app/graphite/webapp/tasseo
total 17
-rwxr-xr-x 1 grphusr grphusr 8876 Apr 14 19:42 README.md
-rwxr-xr-x 1 grphusr grphusr 129 Apr 14 19:42 Rakefile
-rwxr-xr-x 1 grphusr grphusr 48 Apr 14 19:42 Procfile
-rwxr-xr-x 1 grphusr grphusr 1426 Apr 14 19:42 LICENSE
-rwxr-xr-x 1 grphusr grphusr 1818 Apr 14 19:42 Gemfile.lock
-rwxr-xr-x 1 grphusr grphusr 224 Apr 14 19:42 Gemfile
-rwxr-xr-x 1 grphusr grphusr 60 Apr 14 19:42 config.ru
drwxr-xr-x 3 grphusr grphusr 96 Jul 8 16:46 lib
drwxr-xr-x 2 grphusr grphusr 96 Jul 8 16:46 spec
drwxr-xr-x 2 grphusr grphusr 96 Jul 9 15:24 dashboards

bash-3.2$ ls -lrt /app/graphite/webapp/tasseo/dashboards/
total 1
-rw-r--r-- 1 grphusr grphusr 194 Jul 9 15:24 example.js

bash-3.2$ cat /app/graphite/webapp/tasseo/dashboards/example.js
var metrics =
[
{
"alias": "stats.gauges.myhost.cpupercent",
"target": "stats.gauges.myhost.cpupercent",
"warning": 100,
"critical": 500
}
];

Memory leak

There remains a fairly significant memory leak; not within the Tasseo codebase per se, but as a side effect of using jQuery ajax with jsonp. See the following references:

http://forum.jquery.com/topic/memory-leaks-with-ajax-calls
http://forum.jquery.com/topic/memory-leaks-ajax-calls-in-combination-with-setinterval
http://bugs.jquery.com/ticket/5048

Disappointingly, the ticket referenced in the latter was closed wontfix. Unless I can track down a workaround, Tasseo may be forced to using non-JSONP or possibly retooling to use Graphite's raw output instead. Hopefully not.

In this screenshot you can see the Comparison view of two heap snapshots. The primary offender is a bunch of string objects hanging around. I'm not sure if these are orphaned because we went on to do something else (shouldn't happen with the callback afaik) or because of an ajax failure. The latter seems unlikely since I'm not seeing any network errors in the inspector.

heap comparison

In this screenshot you can see the memory footprint of Tasseo, the tab its running in, and the renderer for that tab. I'm not sure what the difference is between the latter two, but we can clearly see in the Memory Timeline that Tasseo's memory footprint is flat.

memory footprint

Memory Leak

There is a slow but steady memory leak in tasseo.js.

Add extra information to graphs

Hello,

What are your thoughts on adding a short description to each graph? Maybe displayed as a tool tip or expandable div?

I'd like to avoid questions like "What is this graph showing" without having to add too much text to the alias.

Happy to implement but wanted to get some thoughts on it first :)

Mark

NaN

Sometimes the page shows "Nan" when there is no data available for a given metric at a particular time-slice. Just display the previous value (with a reasonable bound on how far back this can reach).

Initial values drawn at wrong end of the graph

I have a metric in which 0 indicates a healthy value. Whenever the value rises above 0, I notice that the graph first populates on the left side (where the text is) before being redrawn at the correct location on the right side of the graph. Let me know if this isn't clear enough..

Navigation menu

Provide a quick way to jump between dashboards. Presumably a drop down from the current dashboard title.

trouble using Graphite metric functions

Hi,
I'm just getting started with Tasseo, but am a longtim Graphite user. When I added a simple graph, it works fine. If I try and use a Graphite function like sumSeries, I get an error and no graph is rendered.

[
{
"alias": "153_cpu",
"target": "sumSeries(stats.empire-production-app-153.vmstat.cpu.*)",
"critical": "95",
"warning": "5",
"description": "foo",
"unit": "ticks"
}
];

Screen Shot 2013-04-02 at 9 23 50 PM

Adding an external "link" doesn't work either, but I'll raise second issue for that. Mentioning in case they're related.

Thanks for your help,
Brian

Render before setInterval

Currently we wait until setInterval() completes once without rendering. This causes an extended visual latency when the refresh is set to a higher-than-default value (> 2000). Optionally, also load something to let the visitor know we're processing the request.

Threshold colors do not revert

The color changes to yellow or red when a warning or critical threshold has been reached, but does not switch back to green when the value falls back below the threshold.

Uncaught TypeError: Cannot read property 'points' of undefined

Hey,

I am sorry if my report lacks of information.

I am having this error after starting tasseo running foreman start
I can see this error on Google Chrome console.

Versions used:
Ruby 1.9.2 (same as listed in the documentation)
Centos 6.4 (ruby-devel package and rvm)
collectd 5.4.x
InfluxDB 0.9

I am setting INFLUXDB_URL and INFLUXDB_AUTH environment variables pointing to my local machine.

INFLUXDB_URL = http://192.168.33.15:8086/db/test
INFLUXDB_AUTH=test:test

Why do I need to use open as described in the docs?

Follows the code raising the error in the title:

  refreshMetric: function(metric, period) {
    var self = this;

    $.ajax({
      url: this.urlForMetric(metric, period),
      dataType: 'json',
      error: function(xhr, textStatus, errorThrown) { console.log(errorThrown); },
      success: function(metricResult) {
        var datapoints = metricResult[0].points;
        var newDatapoints = _.map(datapoints, function(datapoint) {
          return { x: datapoint[0], y: datapoint[datapoint.length - 1] } // <--- THIS LINE
        })
        metric.update(newDatapoints)
      }
    })
  },

Do you need more info? My InfluxDB and collectd instances are up and running fine.

IE 6 Support???

Tasseo does not load properly in IE 6. Please address this.

Metrics conversion

Hello,

I'm quite new to Tasseo. I successfully manged to install and configure a sample dashboard using Tasseo.

How to convert the metrics to required unit before it gets displayed?

For example, metrics like memory, response time are generally received in bytes and milliseconds respectively. It would be easier understand if they are displayed after being converted( to probably MBs and seconds in this case)

Thanks,
Ganga

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.