Asterisk app: add IAX2 peer graphs (#11078)

* Asterisk app: add IAX2 peer graphs

* It's an entirely new graph and will not break existing graphs.
* The asterisk extend script must be updated to provide the appropriate poller data.
* The PR for librenms-agent/snmp/asterisk is here: https://github.com/librenms/librenms-agent/pull/274

* code climate, round 1

* clarified unit text

* code climate, round 2

* changes needed to properly generate test data

* linux_asterisk-v1 test data
This commit is contained in:
Joseph Tingiris
2020-02-03 12:47:27 -05:00
committed by GitHub
parent 051ca6503f
commit 02bc15c206
7 changed files with 208 additions and 29 deletions

View File

@@ -4,6 +4,9 @@ use LibreNMS\RRD\RrdDefinition;
$name = 'asterisk';
$app_id = $app['app_id'];
echo "$name, app_id=$app_id ";
if (!empty($agent_data[$name])) {
$rawdata = $agent_data[$name];
} else {
@@ -12,13 +15,17 @@ if (!empty($agent_data[$name])) {
$rawdata = snmp_walk($device, $oid, $options);
$rawdata = str_replace("<<<asterisk>>>\n", '', $rawdata);
}
# Format Data
$lines = explode("\n", $rawdata);
$asterisk = array();
$asterisk_metrics = array();
foreach ($lines as $line) {
list($var,$value) = explode('=', $line);
$asterisk[$var] = $value;
}
unset($lines);
# Asterisk stats
$rrd_name = array('app', $name, 'stats', $app_id);
$rrd_def = RrdDefinition::make()
@@ -29,7 +36,8 @@ $rrd_def = RrdDefinition::make()
->addDataset('sipmonoffline', 'GAUGE', 0, 10000)
->addDataset('sipunmononline', 'GAUGE', 0, 10000)
->addDataset('sipunmonoffline', 'GAUGE', 0, 10000);
$fields = array(
$sip_fields = array(
'calls' => $asterisk['Calls'],
'channels' => $asterisk['Channels'],
'sipeers' => $asterisk['SipPeers'],
@@ -38,8 +46,34 @@ $fields = array(
'sipunmononline' => $asterisk['SipUnMonOnline'],
'sipunmonoffline' => $asterisk['SipUnMonOffline']
);
$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def');
data_update($device, 'app', $tags, $fields);
update_application($app, $rawdata, $fields);
unset($lines, $asterisk, $rrd_name, $rrd_def, $fields, $tags, $rawdata);
$asterisk_metrics['stats'] = $sip_fields;
$sip_tags = compact('name', 'app_id', 'rrd_name', 'rrd_def');
data_update($device, 'app', $sip_tags, $sip_fields);
unset($rrd_name, $rrd_def, $sip_fields, $sip_tags);
# Additional iax2 stats
$rrd_name = array('app', $name, 'iax2', $app_id);
$rrd_def = RrdDefinition::make()
->addDataset('iax2peers', 'GAUGE', 0, 10000)
->addDataset('iax2online', 'GAUGE', 0, 10000)
->addDataset('iax2offline', 'GAUGE', 0, 10000)
->addDataset('iax2unmonitored', 'GAUGE', 0, 10000);
$iax2_fields = array(
'iax2peers' => $asterisk['Iax2Peers'],
'iax2online' => $asterisk['Iax2Online'],
'iax2offline' => $asterisk['Iax2Offline'],
'iax2unmonitored' => $asterisk['Iax2Unmonitored']
);
$asterisk_metrics['iax2'] = $iax2_fields;
$iax2_tags = compact('name', 'app_id', 'rrd_name', 'rrd_def');
data_update($device, 'app', $iax2_tags, $iax2_fields);
update_application($app, $rawdata, $asterisk_metrics);
unset($rrd_name, $rrd_def, $iax2_fields, $iax2_tags);
unset($asterisk, $asterisk_metrics, $rawdata); // these are used for all rrds