Adding a new Graph#

Example#

Quick example, showing an svn diff to add a graph coming from the Unix Agent, into the "Graphs" tab of a device ("System" sub-page).

Added:
   observer/trunk/html/includes/graphs/device/ksm_pages.inc.php
   observer/trunk/includes/polling/unix-agent/ksm.inc.php
Modified:
   observer/trunk/includes/definitions.inc.php
   observer/trunk/includes/polling/unix-agent.inc.php
   observer/trunk/scripts/agent-local/ksm
Log:
ksm shared pages graph via agent script

Added: observer/trunk/html/includes/graphs/device/ksm_pages.inc.php
===================================================================
--- observer/trunk/html/includes/graphs/device/ksm_pages.inc.php                                (rev 0)
+++ observer/trunk/html/includes/graphs/device/ksm_pages.inc.php        2012-09-11 15:31:14 UTC (rev 3378)
@@ -0,0 +1,23 @@
+<?php
+
+$rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/ksm-pages.rrd";
+
+$stats = array('shared', 'sharing', 'unshared');
+
+$i=0;
+foreach ($stats as $stat)
+{
+  $i++;
+  $rrd_list[$i]['filename'] = $rrd_filename;
+  $rrd_list[$i]['descr'] = "Pages " . ucfirst($stat);
+  $rrd_list[$i]['ds'] = "pages" . ucfirst($stat);
+}
+
+$colours='mixed';
+
+$nototal = 1;
+$simple_rrd = 1;
+
+include("includes/graphs/generic_multi_line.inc.php");
+
+?>

Modified: observer/trunk/includes/definitions.inc.php
===================================================================
--- observer/trunk/includes/definitions.inc.php 2012-09-11 13:26:37 UTC (rev 3377)
+++ observer/trunk/includes/definitions.inc.php 2012-09-11 15:31:14 UTC (rev 3378)
@@ -1052,6 +1052,10 @@
 $config['graph_types']['device']['uptime']['order'] = '0';
 $config['graph_types']['device']['uptime']['descr'] = 'System Uptime';

+$config['graph_types']['device']['ksm_pages']['section'] = 'system';
+$config['graph_types']['device']['ksm_pages']['order'] = '0';
+$config['graph_types']['device']['ksm_pages']['descr'] = 'KSM Shared Pages';
+
 $config['graph_types']['device']['vpdn_sessions_l2tp']['section'] = 'vpdn';
 $config['graph_types']['device']['vpdn_sessions_l2tp']['order'] = '0';
 $config['graph_types']['device']['vpdn_sessions_l2tp']['descr'] = 'VPDN L2TP Sessions';

Added: observer/trunk/includes/polling/unix-agent/ksm.inc.php
===================================================================
--- observer/trunk/includes/polling/unix-agent/ksm.inc.php                              (rev 0)
+++ observer/trunk/includes/polling/unix-agent/ksm.inc.php      2012-09-11 15:31:14 UTC (rev 3378)
@@ -0,0 +1,28 @@
+<?php
+
+$ksm = $agent_data['ksm'];
+unset($agent_data['ksm']);
+
+foreach (explode("\n",$ksm) as $line)
+{
+  list($field,$contents) = explode("=",$line,2);
+  $agent_data['ksm'][$field] = trim($contents);
+}
+
+$rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/ksm-pages.rrd";
+
+if (!is_file($rrd_filename))
+{
+  rrdtool_create($rrd_filename, "--step 300 \
+    DS:pagesShared:GAUGE:600:0:125000000000 \
+    DS:pagesSharing:GAUGE:600:0:125000000000 \
+    DS:pagesUnshared:GAUGE:600:0:125000000000 ".$config['rrd_rra']);
+}
+
+rrdtool_update($rrd_filename, "N:" . $agent_data['ksm']['pages_shared'] . ":" . $agent_data['ksm']['pages_sharing'] . ":" . $agent_data['ksm']['pages_unshared']);
+
+$graphs['ksm_pages'] = TRUE;
+
+unset($ksm);
+
+?>

Explanation#

In short: make rrd, make graph template, set $graphs['<graph_name>'] to true, and add the graph_name to the definitions file.

Note: if you're adding a new section, don't forget to add it to the $config['graph_sections'] array!