|
15 | 15 | return; |
16 | 16 | } |
17 | 17 |
|
18 | | -$ports = $returned['data']; |
19 | | - |
20 | 18 | $ports_rrd_def = RrdDefinition::make() |
21 | 19 | ->addDataset('total_conns', 'GAUGE', 0) |
22 | 20 | ->addDataset('total_to', 'GAUGE', 0) |
|
61 | 59 | ->addDataset('fromUNKNOWN', 'GAUGE', 0) |
62 | 60 | ->addDataset('fromother', 'GAUGE', 0); |
63 | 61 |
|
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 | + ]; |
121 | 71 |
|
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; |
123 | 76 | } |
| 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); |
124 | 87 | } |
125 | 88 |
|
126 | | -// check for added or removed instances |
| 89 | +// Check for added or removed ports |
| 90 | +$ports_keys = array_keys($ports); |
127 | 91 | $old_ports = $app->data['ports'] ?? []; |
| 92 | +$app->data = ['ports' => $ports_keys]; |
| 93 | + |
| 94 | +// Log changes if any |
128 | 95 | $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 | +} |
130 | 100 |
|
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); |
137 | 104 | Eventlog::log($log_message, $device['device_id'], 'application'); |
138 | 105 | } |
139 | 106 |
|
140 | | -update_application($app, 'OK', data_flatten($ports)); |
| 107 | +update_application($app, 'OK', Arr::dot($ports)); |
0 commit comments