Index: html/includes/graphs/device/nsAAAAuths.inc.php
===================================================================
--- html/includes/graphs/device/nsAAAAuths.inc.php	(nonexistent)
+++ html/includes/graphs/device/nsAAAAuths.inc.php	(working copy)
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * Observium
+ *
+ *   This file is part of Observium.
+ *
+ * @package    observium
+ * @subpackage graphs
+ * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
+ *
+ */
+
+//$scale_min = 0;
+$colours = "mixed";
+$nototal = 0;
+$unit_text = "Authentications";
+$graph_max = 1;
+$rrd_filename = get_rrd_path($device, "nsAAAStatsGroup.rrd");
+//$log_y = FALSE;
+
+$array = array(
+        'AuthFail'            => array('descr' => 'AuthFail'),
+        'AuthSuccess'         => array('descr' => 'AuthSuccess'),
+        'AuthNonHttpFail'     => array('descr' => 'AuthNonHttpFail'),
+        'AuthOnlyHttpFail'    => array('descr' => 'AuthOnlyHttpFail'),
+        'AuthNonHttpSuccess'  => array('descr' => 'AuthNonHttpSuccess'),
+        'AuthOnlyHttpSuccess' => array('descr' => 'AuthOnlyHttpSuccess')
+);
+
+if (rrd_is_file($rrd_filename))
+{
+  foreach ($array as $ds => $data)
+  {
+    $rrd_list[$i]['filename'] = $rrd_filename;
+    $rrd_list[$i]['descr']    = $data['descr'];
+    $rrd_list[$i]['ds']       = $ds;
+    $rrd_list[$i]['colour']   = $config['graph_colours'][$colours][$i];
+    $i++;
+  }
+} else {
+  echo("file missing: $file");
+}
+
+include($config['html_dir']."/includes/graphs/generic_multi_line.inc.php");
+
+// EOF
Index: html/includes/graphs/device/nsAAAICAConnections.inc.php
===================================================================
--- html/includes/graphs/device/nsAAAICAConnections.inc.php	(nonexistent)
+++ html/includes/graphs/device/nsAAAICAConnections.inc.php	(working copy)
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Observium
+ *
+ *   This file is part of Observium.
+ *
+ * @package    observium
+ * @subpackage graphs
+ * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
+ *
+ */
+
+$scale_min = 0;
+$colours = "mixed";
+$nototal = 0;
+$unit_text = "Connections";
+$graph_max = 1;
+$rrd_filename = get_rrd_path($device, "nsAAAStatsGroup.rrd");
+//$log_y = FALSE;
+
+$array = array(
+        'CurICAOnlyConn'     => array('descr' => 'CurICAOnlyConn'),
+        'CurICAConn'         => array('descr' => 'CurICAConn')
+);
+
+if (rrd_is_file($rrd_filename))
+{
+  foreach ($array as $ds => $data)
+  {
+    $rrd_list[$i]['filename'] = $rrd_filename;
+    $rrd_list[$i]['descr']    = $data['descr'];
+    $rrd_list[$i]['ds']       = $ds;
+    $rrd_list[$i]['colour']   = $config['graph_colours'][$colours][$i];
+    $i++;
+  }
+} else {
+  echo("file missing: $file");
+}
+
+include($config['html_dir']."/includes/graphs/generic_multi_line.inc.php");
+
+// EOF
Index: html/includes/graphs/device/nsAAASessions.inc.php
===================================================================
--- html/includes/graphs/device/nsAAASessions.inc.php	(nonexistent)
+++ html/includes/graphs/device/nsAAASessions.inc.php	(working copy)
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * Observium
+ *
+ *   This file is part of Observium.
+ *
+ * @package    observium
+ * @subpackage graphs
+ * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
+ *
+ */
+
+$scale_min = 0;
+$colours = "mixed";
+$nototal = 0;
+$unit_text = "Connections";
+$graph_max = 1;
+$rrd_filename = get_rrd_path($device, "nsAAAStatsGroup.rrd");
+//$log_y = FALSE;
+
+$array = array(
+        'TotSessions'        => array('descr' => 'TotSessions'),
+        'TotSessionTimeout'  => array('descr' => 'TotSessionTimeout'),
+        'CurSessions'        => array('descr' => 'CurSessions'),
+        'CurICASessions'     => array('descr' => 'CurICASessions'),
+        'CurTMSessions'      => array('descr' => 'CurTMSessions'),
+        'TotTMSessions'      => array('descr' => 'TotTMSessions')
+);
+
+if (rrd_is_file($rrd_filename))
+{
+  foreach ($array as $ds => $data)
+  {
+    $rrd_list[$i]['filename'] = $rrd_filename;
+    $rrd_list[$i]['descr']    = $data['descr'];
+    $rrd_list[$i]['ds']       = $ds;
+    $rrd_list[$i]['colour']   = $config['graph_colours'][$colours][$i];
+    $i++;
+  }
+} else {
+  echo("file missing: $file");
+}
+
+include($config['html_dir']."/includes/graphs/generic_multi_line.inc.php");
+
+// EOF
Index: includes/definitions/graphtypes.inc.php
===================================================================
--- includes/definitions/graphtypes.inc.php	(revision 11841)
+++ includes/definitions/graphtypes.inc.php	(working copy)
@@ -15,7 +15,7 @@
 $config['graph_sections'] = array(
   'general', 'system', 'processor', 'memory', 'storage', 'netstats', 'wireless', 'firewall',
   'custom', 'bng', 'vpdn', 'appliance',
-  'netapp', 'netscaler_tcp', 'netscaler_ssl', 'netscaler_http', 'netscaler_comp',
+  'netapp', 'netscaler_tcp', 'netscaler_ssl', 'netscaler_http', 'netscaler_aaa', 'netscaler_comp',
   'loadbalancer', 'cgn', 'l2tp', 'proxysg', 'license', 'authentication', 'ospf',
   'f5_ssl', 'dhcp', 'pcoip', 'xdsl', 'poller'
 );
@@ -1848,6 +1848,53 @@
   )
 );
 
+$config['graph_types']['device']['nsAAAAuths'] = array(
+  'section'   => 'netscaler_aaa',
+  'file'      => 'nsAAAStatsGroup.rrd',
+  'descr'     => 'Authentications',
+  'colours'   => 'mixed',
+  'unit_text' => 'Authentications',
+  'log_y'     => FALSE,
+  'ds'        => array(
+    'aaaTotSessions'             => array('label' => 'TotSessions',   'draw' => 'AREASTACK'),
+    'aaaTotSessionTimeout'       => array('label' => 'TotSessionTimeout',   'draw' => 'AREASTACK'),
+    'aaaCurSessions'             => array('label' => 'CurSessions',   'draw' => 'AREASTACK'),
+    'aaaCurICASessions'          => array('label' => 'CurICASessions',   'draw' => 'AREASTACK'),
+    'aaaCurTMSessions'           => array('label' => 'CurTMSessions',   'draw' => 'AREASTACK'),
+    'aaaTotTMSessions'           => array('label' => 'TotTMSessions',   'draw' => 'AREASTACK'),
+  )
+);
+
+$config['graph_types']['device']['nsAAASessions'] = array(
+  'section'   => 'netscaler_aaa',
+  'file'      => 'nsAAAStatsGroup.rrd',
+  'descr'     => 'Sessions',
+  'colours'   => 'mixed',
+  'unit_text' => 'Sessions',
+  'log_y'     => FALSE,
+  'ds'        => array(
+    'aaaAuthFail'                => array('label' => 'AuthFail',   'draw' => 'AREASTACK'),
+	'aaaAuthSuccess'             => array('label' => 'AuthSuccess',   'draw' => 'AREASTACK'),
+    'aaaAuthNonHttpFail'         => array('label' => 'AuthNonHttpFail',   'draw' => 'AREASTACK'),
+    'aaaAuthOnlyHttpFail'        => array('label' => 'AuthOnlyHttpFail',   'draw' => 'AREASTACK'),
+    'aaaAuthNonHttpSuccess'      => array('label' => 'AuthNonHttpSuccess',   'draw' => 'AREASTACK'),
+    'aaaAuthOnlyHttpSuccess'     => array('label' => 'AuthOnlyHttpSuccess',   'draw' => 'AREASTACK'),
+  )
+);
+
+$config['graph_types']['device']['nsAAAICAConnections'] = array(
+  'section'   => 'netscaler_aaa',
+  'file'      => 'nsAAAStatsGroup.rrd',
+  'descr'     => 'ICA Connections',
+  'colours'   => 'mixed',
+  'unit_text' => 'Connections',
+  'log_y'     => FALSE,
+  'ds'        => array(
+    'aaaCurICAOnlyConn'         => array('label' => 'CurICAOnlyConn',   'draw' => 'AREASTACK'),
+	'aaaCurICAConn'             => array('label' => 'CurICAConn',   'draw' => 'AREASTACK'),
+  )
+);
+
 $config['graph_types']['device']['nsCompHttpSaving'] = array(
   'section'   => 'netscaler_comp',
   'descr'     => 'Bandwidth saving from TCP compression',
Index: includes/definitions/rewrites.inc.php
===================================================================
--- includes/definitions/rewrites.inc.php	(revision 11841)
+++ includes/definitions/rewrites.inc.php	(working copy)
@@ -69,6 +69,7 @@
   'netscaler_tcp' => 'NetScaler TCP',
   'netscaler_ssl' => 'NetScaler SSL',
   'netscaler_http' => 'NetScaler HTTP',
+  'netscaler_aaa' => 'NetScaler AAA',
   'netscaler_comp' => 'NetScaler Compression',
   'sla' => 'SLA',
   'wifi_wlan' => 'WiFi WLAN',
Index: includes/polling/graphs/ns-root-mib/nsAAAStatsGroup.inc.php
===================================================================
--- includes/polling/graphs/ns-root-mib/nsAAAStatsGroup.inc.php	(nonexistent)
+++ includes/polling/graphs/ns-root-mib/nsAAAStatsGroup.inc.php	(working copy)
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Observium
+ *
+ *   This file is part of Observium.
+ *
+ * @package    observium
+ * @subpackage poller
+ * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
+ *
+ */
+
+$table_defs['NS-ROOT-MIB']['nsAAAStatsGroup'] = array (
+  'table'     => 'nsAAAStatsGroup',
+  'numeric'   => '.1.3.6.1.4.1.5951.4.1.1.67',
+  'mib'       => 'NS-ROOT-MIB',
+  'mib_dir'   => 'citrix',
+  'file'      => 'nsAAAStatsGroup.rrd',
+  'descr'     => 'Netscaler AAA Statistics',
+  'graphs'    => array('nsAAAAuths', 'nsAAASessions', 'nsAAAICAConnections'),
+  'ds_rename' => array('aaa' => ''),
+  'oids'      => array(
+    'aaaAuthFail'                => array('numeric' => '1',  'descr' => 'Count of authentication failures.',                           'ds_min' => '0'),
+    'aaaAuthSuccess'             => array('numeric' => '2',  'descr' => 'Count of authentication successes.',                          'ds_min' => '0'),
+    'aaaAuthNonHttpFail'         => array('numeric' => '3',  'descr' => 'Count of non HTTP connections that failed authorization.',    'ds_min' => '0'),
+    'aaaAuthOnlyHttpFail'        => array('numeric' => '4',  'descr' => 'Count of HTTP connections that failed authorization.',        'ds_min' => '0'),
+    'aaaAuthNonHttpSuccess'      => array('numeric' => '5',  'descr' => 'Count of non HTTP connections that succeeded authorization.', 'ds_min' => '0'),
+    'aaaAuthOnlyHttpSuccess'     => array('numeric' => '6',  'descr' => 'Count of HTTP connections that succeeded authorization.',     'ds_min' => '0'),
+    'aaaTotSessions'             => array('numeric' => '7',  'descr' => 'Count of all SmartAccess AAA sessions.',                      'ds_min' => '0'),
+    'aaaTotSessionTimeout'       => array('numeric' => '8',  'descr' => 'Count of AAA sessions that have timed out.',                  'ds_min' => '0'),
+    'aaaCurSessions'             => array('numeric' => '9',  'descr' => 'Count of current SmartAccess AAA sessions.',                  'ds_type' => 'GAUGE', 'ds_min' => '0'),
+    'aaaCurICASessions'          => array('numeric' => '10', 'descr' => 'Count of current Basic ICA only sessions.',                   'ds_type' => 'GAUGE', 'ds_min' => '0'),
+    'aaaCurTMSessions'           => array('numeric' => '11', 'descr' => 'Count of current AAATM sessions.',                            'ds_type' => 'GAUGE', 'ds_min' => '0'),
+    'aaaTotTMSessions'           => array('numeric' => '12', 'descr' => 'Count of all AAATM sessions.',                                'ds_min' => '0'),
+    'aaaCurICAOnlyConn'          => array('numeric' => '13', 'descr' => 'Count of current Basic ICA only connections.',                'ds_type' => 'GAUGE', 'ds_min' => '0'),
+    'aaaCurICAConn'              => array('numeric' => '14', 'descr' => 'Count of current SmartAccess ICA connections.',               'ds_type' => 'GAUGE', 'ds_min' => '0')
+  )
+);
+
+// EOF