example.js (131 lines of code) (raw):

'use strict'; var grafana = require('./index'); var Row = grafana.Row; var Dashboard = grafana.Dashboard; var Panels = grafana.Panels; var Target = grafana.Target; var Alert = grafana.Alert; var Condition = grafana.Condition; // For grafana v1, the URL should look something like: // // https://your.grafana.com/elasticsearch/grafana-dash/dashboard/ // // Bascially, grafana v1 used elastic search as its backend, but grafana v2 // has its own backend. Because of this, the URL for grafana v2 should look // something like this: // // https://your.grafanahost.com/grafana2/api/dashboards/db/ grafana.configure({ url: 'https://your.grafanahost.com/grafana2/api/dashboards/db/', cookie: 'auth-openid=REPLACETOKENIFAPPLICABLE', headers: {'x': 'y'} }); // Dashboard Constants var TITLE = 'TEST API dashboard'; var TAGS = ['myapp', 'platform']; var TEMPLATING = [{ name: 'dc', options: ['dc1', 'dc2'] }, { name: 'smoothing', options: ['30min', '10min', '5min', '2min', '1min'] }]; var ANNOTATIONS = [{ name: 'Deploy', target: 'stats.$dc.production.deploy' }]; var REFRESH = '1m'; // Target prefixes var SERVER_PREFIX = 'servers.app*-$dc.myapp.'; var COUNT_PREFIX = 'stats.$dc.counts.myapp.'; function generateDashboard() { // Rows var volumeRow = new Row({ title: 'Request Volume' }); var systemRow = new Row({ title: 'System / OS' }); // Panels: request volume var rpsGraphPanel = new Panels.Graph({ title: 'req/sec', span: 8, targets: [ new Target(COUNT_PREFIX + 'statusCode.*'). transformNull(0). sum(). hitcount('1seconds'). scale(0.1). alias('rps') ] }); // set alert on request volume when it's (max) value is lower than 1 req / sec var condition = new Condition() .withReducer('max') .withEvaluator(1, 'lt') .onQuery('A'); var alert = new Alert() .addCondition(condition); rpsGraphPanel.addAlert(alert); var rpsStatPanel = new Panels.SingleStat({ title: 'Current Request Volume', postfix: 'req/sec', span: 4, targets: [ new Target(COUNT_PREFIX + 'statusCode.*'). sum(). scale(0.1) ] }); var favDashboardList = new Panels.DashboardList({ title: 'My Favorite Dashboard', span: 4, mode: 'search', query: 'dashboard list' }); // Panels: system health var cpuGraph = new Panels.Graph({ title: 'CPU', span: 4, targets: [ new Target(SERVER_PREFIX + 'cpu.user'). nonNegativeDerivative(). scale(1 / 60). scale(100). averageSeries(). alias('avg'), new Target(SERVER_PREFIX + 'cpu.user'). nonNegativeDerivative(). scale(1 / 60). scale(100). percentileOfSeries(95, false). alias('p95') ] }); var rssGraph = new Panels.Graph({ title: 'Memory', span: 4, targets: [ new Target(SERVER_PREFIX + 'memory.rss'). averageSeries(). alias('rss') ] }); var fdsGraph = new Panels.Graph({ title: 'FDs', span: 4, targets: [ new Target(SERVER_PREFIX + 'fds'). averageSeries(). movingAverage('10min'). alias('moving avg') ] }); // Dashboard var dashboard = new Dashboard({ title: TITLE, tags: TAGS, templating: TEMPLATING, annotations: ANNOTATIONS, refresh: REFRESH }); // Layout: panels volumeRow.addPanel(rpsGraphPanel); volumeRow.addPanel(rpsStatPanel); volumeRow.addPanel(favDashboardList); systemRow.addPanel(cpuGraph); systemRow.addPanel(rssGraph); systemRow.addPanel(fdsGraph); // Layout: rows dashboard.addRow(volumeRow); dashboard.addRow(systemRow); // Finish grafana.publish(dashboard); } module.exports = { generate: generateDashboard }; if (require.main === module) { generateDashboard(); }