Skip to content

Commit 6c71f74

Browse files
authored
Update app portactivity polling code (librenms#17954)
* Update port activity code change to . separators for metrics * style fix
1 parent ed76141 commit 6c71f74

File tree

2 files changed

+84
-117
lines changed

2 files changed

+84
-117
lines changed

includes/polling/applications/portactivity.inc.php

Lines changed: 36 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
return;
1616
}
1717

18-
$ports = $returned['data'];
19-
2018
$ports_rrd_def = RrdDefinition::make()
2119
->addDataset('total_conns', 'GAUGE', 0)
2220
->addDataset('total_to', 'GAUGE', 0)
@@ -61,80 +59,49 @@
6159
->addDataset('fromUNKNOWN', 'GAUGE', 0)
6260
->addDataset('fromother', 'GAUGE', 0);
6361

64-
//
65-
// update the RRD files for each port
66-
//
67-
68-
if (is_array($ports)) {
69-
$ports_keys = array_keys($ports);
70-
$ports_keys_int = 0;
71-
while (isset($ports[$ports_keys[$ports_keys_int]])) {
72-
if (is_array($ports[$ports_keys[$ports_keys_int]])) {
73-
$rrd_name = ['app', $name, $app->app_id, $ports_keys[$ports_keys_int]];
74-
$fields = [
75-
'total_conns' => $ports[$ports_keys[$ports_keys_int]]['total_conns'] ?? null,
76-
'total_to' => $ports[$ports_keys[$ports_keys_int]]['total_to'] ?? null,
77-
'total_from' => $ports[$ports_keys[$ports_keys_int]]['total_from'] ?? null,
78-
'totalLISTEN' => $ports[$ports_keys[$ports_keys_int]]['total']['LISTEN'] ?? null,
79-
'totalCLOSED' => $ports[$ports_keys[$ports_keys_int]]['total']['CLOSED'] ?? null,
80-
'totalSYN_SENT' => $ports[$ports_keys[$ports_keys_int]]['total']['SYN_SENT'] ?? null,
81-
'totalSYN_RECEIVED' => $ports[$ports_keys[$ports_keys_int]]['total']['SYN_RECEIVED'] ?? null,
82-
'totalESTABLISHED' => $ports[$ports_keys[$ports_keys_int]]['total']['ESTABLISHED'] ?? null,
83-
'totalCLOSE_WAIT' => $ports[$ports_keys[$ports_keys_int]]['total']['CLOSE_WAIT'] ?? null,
84-
'totalFIN_WAIT_1' => $ports[$ports_keys[$ports_keys_int]]['total']['FIN_WAIT_1'] ?? null,
85-
'totalCLOSING' => $ports[$ports_keys[$ports_keys_int]]['total']['CLOSING'] ?? null,
86-
'totalLAST_ACK' => $ports[$ports_keys[$ports_keys_int]]['total']['LAST_ACK'] ?? null,
87-
'totalFIN_WAIT_2' => $ports[$ports_keys[$ports_keys_int]]['total']['FIN_WAIT_2'] ?? null,
88-
'totalTIME_WAIT' => $ports[$ports_keys[$ports_keys_int]]['total']['TIME_WAIT'] ?? null,
89-
'totalUNKNOWN' => $ports[$ports_keys[$ports_keys_int]]['total']['UNKNOWN'] ?? null,
90-
'totalother' => $ports[$ports_keys[$ports_keys_int]]['total']['other'] ?? null,
91-
'toLISTEN' => $ports[$ports_keys[$ports_keys_int]]['to']['LISTEN'] ?? null,
92-
'toCLOSED' => $ports[$ports_keys[$ports_keys_int]]['to']['CLOSED'] ?? null,
93-
'toSYN_SENT' => $ports[$ports_keys[$ports_keys_int]]['to']['SYN_SENT'] ?? null,
94-
'toSYN_RECEIVED' => $ports[$ports_keys[$ports_keys_int]]['to']['SYN_RECEIVED'] ?? null,
95-
'toESTABLISHED' => $ports[$ports_keys[$ports_keys_int]]['to']['ESTABLISHED'] ?? null,
96-
'toCLOSE_WAIT' => $ports[$ports_keys[$ports_keys_int]]['to']['CLOSE_WAIT'] ?? null,
97-
'toFIN_WAIT_1' => $ports[$ports_keys[$ports_keys_int]]['to']['FIN_WAIT_1'] ?? null,
98-
'toCLOSING' => $ports[$ports_keys[$ports_keys_int]]['to']['CLOSING'] ?? null,
99-
'toLAST_ACK' => $ports[$ports_keys[$ports_keys_int]]['to']['LAST_ACK'] ?? null,
100-
'toFIN_WAIT_2' => $ports[$ports_keys[$ports_keys_int]]['to']['FIN_WAIT_2'] ?? null,
101-
'toTIME_WAIT' => $ports[$ports_keys[$ports_keys_int]]['to']['TIME_WAIT'] ?? null,
102-
'toUNKNOWN' => $ports[$ports_keys[$ports_keys_int]]['to']['UNKNOWN'] ?? null,
103-
'toother' => $ports[$ports_keys[$ports_keys_int]]['to']['other'] ?? null,
104-
'fromLISTEN' => $ports[$ports_keys[$ports_keys_int]]['from']['LISTEN'] ?? null,
105-
'fromCLOSED' => $ports[$ports_keys[$ports_keys_int]]['from']['CLOSED'] ?? null,
106-
'fromSYN_SENT' => $ports[$ports_keys[$ports_keys_int]]['from']['SYN_SENT'] ?? null,
107-
'fromSYN_RECEIVED' => $ports[$ports_keys[$ports_keys_int]]['from']['SYN_RECEIVED'] ?? null,
108-
'fromESTABLISHED' => $ports[$ports_keys[$ports_keys_int]]['from']['ESTABLISHED'] ?? null,
109-
'fromCLOSE_WAIT' => $ports[$ports_keys[$ports_keys_int]]['from']['CLOSE_WAIT'] ?? null,
110-
'fromFIN_WAIT_1' => $ports[$ports_keys[$ports_keys_int]]['from']['FIN_WAIT_1'] ?? null,
111-
'fromCLOSING' => $ports[$ports_keys[$ports_keys_int]]['from']['CLOSING'] ?? null,
112-
'fromLAST_ACK' => $ports[$ports_keys[$ports_keys_int]]['from']['LAST_ACK'] ?? null,
113-
'fromFIN_WAIT_2' => $ports[$ports_keys[$ports_keys_int]]['from']['FIN_WAIT_2'] ?? null,
114-
'fromTIME_WAIT' => $ports[$ports_keys[$ports_keys_int]]['from']['TIME_WAIT'] ?? null,
115-
'fromUNKNOWN' => $ports[$ports_keys[$ports_keys_int]]['from']['UNKNOWN'] ?? null,
116-
'fromother' => $ports[$ports_keys[$ports_keys_int]]['from']['other'] ?? null,
117-
];
118-
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $ports_rrd_def, 'rrd_name' => $rrd_name];
119-
app('Datastore')->put($device, 'app', $tags, $fields);
120-
}
62+
$ports = $returned['data'];
63+
// Update RRD files for each port
64+
$states = ['LISTEN', 'CLOSED', 'SYN_SENT', 'SYN_RECEIVED', 'ESTABLISHED', 'CLOSE_WAIT', 'FIN_WAIT_1', 'CLOSING', 'LAST_ACK', 'FIN_WAIT_2', 'TIME_WAIT', 'UNKNOWN', 'other'];
65+
foreach ($ports as $port_key => $port_data) {
66+
$fields = [
67+
'total_conns' => $port_data['total_conns'] ?? null,
68+
'total_to' => $port_data['total_to'] ?? null,
69+
'total_from' => $port_data['total_from'] ?? null,
70+
];
12171

122-
$ports_keys_int++;
72+
foreach ($states as $state) {
73+
$fields["total$state"] = $port_data['total'][$state] ?? null;
74+
$fields["to$state"] = $port_data['to'][$state] ?? null;
75+
$fields["from$state"] = $port_data['from'][$state] ?? null;
12376
}
77+
78+
$tags = [
79+
'name' => $name,
80+
'app_id' => $app->app_id,
81+
'port' => $port_key,
82+
'rrd_def' => $ports_rrd_def,
83+
'rrd_name' => ['app', $name, $app->app_id, $port_key],
84+
];
85+
86+
app('Datastore')->put($device, 'app', $tags, $fields);
12487
}
12588

126-
// check for added or removed instances
89+
// Check for added or removed ports
90+
$ports_keys = array_keys($ports);
12791
$old_ports = $app->data['ports'] ?? [];
92+
$app->data = ['ports' => $ports_keys];
93+
94+
// Log changes if any
12895
$added_ports = array_diff($ports_keys, $old_ports);
129-
$removed_ports = array_diff($old_ports, $ports_keys);
96+
if ($added_ports) {
97+
$log_message = 'Portactivity Port Change: Added ' . implode(',', $added_ports);
98+
Eventlog::log($log_message, $device['device_id'], 'application');
99+
}
130100

131-
// if we have any source instances, save and log
132-
if (count($added_ports) > 0 || count($removed_ports) > 0) {
133-
$app->data = ['ports' => $ports_keys];
134-
$log_message = 'Portactivity Port Change:';
135-
$log_message .= count($added_ports) > 0 ? ' Added ' . implode(',', $added_ports) : '';
136-
$log_message .= count($removed_ports) > 0 ? ' Removed ' . implode(',', $added_ports) : '';
101+
$removed_ports = array_diff($old_ports, $ports_keys);
102+
if ($removed_ports) {
103+
$log_message = 'Portactivity Port Change: Removed ' . implode(',', $removed_ports);
137104
Eventlog::log($log_message, $device['device_id'], 'application');
138105
}
139106

140-
update_application($app, 'OK', data_flatten($ports));
107+
update_application($app, 'OK', Arr::dot($ports));

0 commit comments

Comments
 (0)