1 | <?php |
||
2 | |||
3 | /* |
||
4 | * LibreNMS |
||
5 | * |
||
6 | * Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa> |
||
7 | * |
||
8 | * This program is free software: you can redistribute it and/or modify it |
||
9 | * under the terms of the GNU General Public License as published by the |
||
10 | * Free Software Foundation, either version 3 of the License, or (at your |
||
11 | * option) any later version. Please see LICENSE.txt at the top level of |
||
12 | * the source code distribution for details. |
||
13 | */ |
||
14 | |||
15 | $enabled = dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'enabled'"); |
||
16 | if ($enabled == 1) { |
||
17 | if (dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'uuid'") == '') { |
||
18 | dbInsert(['name' => 'uuid', 'value' => guidv4(openssl_random_pseudo_bytes(16))], 'callback'); |
||
19 | } |
||
20 | |||
21 | $uuid = dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'uuid'"); |
||
22 | |||
23 | $version = version_info(); |
||
24 | $queries = [ |
||
25 | 'alert_rules' => 'SELECT COUNT(*) AS `total`,`severity` FROM `alert_rules` WHERE `disabled`=0 GROUP BY `severity`', |
||
26 | 'alert_templates' => 'SELECT COUNT(*) AS `total` FROM `alert_templates`', |
||
27 | 'api_tokens' => 'SELECT COUNT(*) AS `total` FROM `api_tokens` WHERE `disabled`=0', |
||
28 | 'applications' => 'SELECT COUNT(*) AS `total`,`app_type` FROM `applications` GROUP BY `app_type`', |
||
29 | 'bgppeer_state' => 'SELECT COUNT(*) AS `total`,`bgpPeerState` FROM `bgpPeers` GROUP BY `bgpPeerState`', |
||
30 | 'bgppeer_status' => 'SELECT COUNT(*) AS `total`,`bgpPeerAdminStatus` FROM `bgpPeers` GROUP BY `bgpPeerAdminStatus`', |
||
31 | 'bills' => 'SELECT COUNT(*) AS `total`,`bill_type` FROM `bills` GROUP BY `bill_type`', |
||
32 | 'cef' => 'SELECT COUNT(*) AS `total` FROM `cef_switching`', |
||
33 | 'cisco_asa' => 'SELECT COUNT(*) AS `total`,`oid` FROM `ciscoASA` WHERE `disabled` = 0 GROUP BY `oid`', |
||
34 | 'mempool' => 'SELECT COUNT(*) AS `total`,`mempool_descr` FROM `mempools` GROUP BY `mempool_descr`', |
||
35 | 'dbschema' => 'SELECT COUNT(*) AS `total`, COUNT(*) AS `version` FROM `migrations`', |
||
36 | 'snmp_version' => 'SELECT COUNT(*) AS `total`,`snmpver` FROM `devices` GROUP BY `snmpver`', |
||
37 | 'os' => 'SELECT COUNT(*) AS `total`,`os` FROM `devices` GROUP BY `os`', |
||
38 | 'type' => 'SELECT COUNT(*) AS `total`,`type` FROM `devices` GROUP BY `type`', |
||
39 | 'hardware' => 'SELECT COUNT(*) AS `total`, `hardware` FROM `devices` GROUP BY `hardware`', |
||
40 | 'ipsec' => 'SELECT COUNT(*) AS `total` FROM `ipsec_tunnels`', |
||
41 | 'ipv4_addresses' => 'SELECT COUNT(*) AS `total` FROM `ipv4_addresses`', |
||
42 | 'ipv4_macaddress' => 'SELECT COUNT(*) AS `total` FROM ipv4_mac', |
||
43 | 'ipv4_networks' => 'SELECT COUNT(*) AS `total` FROM ipv4_networks', |
||
44 | 'ipv6_addresses' => 'SELECT COUNT(*) AS `total` FROM `ipv6_addresses`', |
||
45 | 'ipv6_networks' => 'SELECT COUNT(*) AS `total` FROM `ipv6_networks`', |
||
46 | 'xdp' => 'SELECT COUNT(*) AS `total`,`protocol` FROM `links` GROUP BY `protocol`', |
||
47 | 'ospf' => 'SELECT COUNT(*) AS `total`,`ospfVersionNumber` FROM `ospf_instances` GROUP BY `ospfVersionNumber`', |
||
48 | 'ospf_links' => 'SELECT COUNT(*) AS `total`,`ospfIfType` FROM `ospf_ports` GROUP BY `ospfIfType`', |
||
49 | 'arch' => 'SELECT COUNT(*) AS `total`,`arch` FROM `packages` GROUP BY `arch`', |
||
50 | 'pollers' => 'SELECT COUNT(*) AS `total` FROM `pollers`', |
||
51 | 'port_type' => 'SELECT COUNT(*) AS `total`,`ifType` FROM `ports` GROUP BY `ifType`', |
||
52 | 'port_ifspeed' => 'SELECT COUNT(*) AS `total`,ROUND(`ifSpeed`/1000/1000) FROM `ports` GROUP BY `ifSpeed`', |
||
53 | 'port_vlans' => 'SELECT COUNT(*) AS `total`,`state` FROM `ports_vlans` GROUP BY `state`', |
||
54 | 'processes' => 'SELECT COUNT(*) AS `total` FROM `processes`', |
||
55 | 'processors' => 'SELECT COUNT(*) AS `total`,`processor_type` FROM `processors` GROUP BY `processor_type`', |
||
56 | 'pseudowires' => 'SELECT COUNT(*) AS `total` FROM `pseudowires`', |
||
57 | 'sensors' => 'SELECT COUNT(*) AS `total`,`sensor_class` FROM `sensors` GROUP BY `sensor_class`', |
||
58 | 'sla' => 'SELECT COUNT(*) AS `total`,`rtt_type` FROM `slas` GROUP BY `rtt_type`', |
||
59 | 'wireless' => 'SELECT COUNT(*) AS `total`,`sensor_class` FROM `wireless_sensors` GROUP BY `sensor_class`', |
||
60 | 'storage' => 'SELECT COUNT(*) AS `total`,`storage_type` FROM `storage` GROUP BY `storage_type`', |
||
61 | 'toner' => 'SELECT COUNT(*) AS `total`,`supply_type` FROM `printer_supplies` GROUP BY `supply_type`', |
||
62 | 'vlans' => 'SELECT COUNT(*) AS `total`,`vlan_type` FROM `vlans` GROUP BY `vlan_type`', |
||
63 | 'vminfo' => 'SELECT COUNT(*) AS `total`,`vm_type` FROM `vminfo` GROUP BY `vm_type`', |
||
64 | 'vmware' => 'SELECT COUNT(*) AS `total` FROM `vminfo`', |
||
65 | 'vrfs' => 'SELECT COUNT(*) AS `total` FROM `vrfs`', |
||
66 | 'mysql_version' => 'SELECT 1 AS `total`, @@version AS `version`', |
||
67 | ]; |
||
68 | |||
69 | foreach ($queries as $name => $query) { |
||
70 | $data = dbFetchRows($query); |
||
71 | $response[$name] = $data; |
||
72 | } |
||
73 | $response['php_version'][] = ['total' => 1, 'version' => $version['php_ver']]; |
||
74 | $response['python_version'][] = ['total' => 1, 'version' => $version['python_ver']]; |
||
75 | $response['rrdtool_version'][] = ['total' => 1, 'version' => $version['rrdtool_ver']]; |
||
76 | $response['netsnmp_version'][] = ['total' => 1, 'version' => $version['netsnmp_ver']]; |
||
77 | |||
78 | // collect sysDescr and sysObjectID for submission |
||
79 | $device_info = dbFetchRows('SELECT COUNT(*) AS `count`,`os`, `sysDescr`, `sysObjectID` FROM `devices` |
||
80 | WHERE `sysDescr` IS NOT NULL AND `sysObjectID` IS NOT NULL GROUP BY `os`, `sysDescr`, `sysObjectID`'); |
||
81 | |||
82 | // sanitize sysDescr |
||
83 | $device_info = array_map(function ($entry) { |
||
84 | // remove hostnames from linux, macosx, and SunOS |
||
85 | $entry['sysDescr'] = preg_replace_callback('/^(Linux |Darwin |FreeBSD |SunOS )[A-Za-z0-9._\-]+ ([0-9.]{3,9})/', function ($matches) { |
||
86 | return $matches[1] . 'hostname ' . $matches[2]; |
||
87 | }, $entry['sysDescr']); |
||
88 | |||
89 | // wipe serial numbers, preserve the format |
||
90 | $sn_patterns = ['/[A-Z]/', '/[a-z]/', '/[0-9]/']; |
||
91 | $sn_replacements = ['A', 'a', '0']; |
||
92 | $entry['sysDescr'] = preg_replace_callback( |
||
93 | '/((s\/?n|serial num(ber)?)[:=]? ?)([a-z0-9.\-]{4,16})/i', |
||
94 | function ($matches) use ($sn_patterns, $sn_replacements) { |
||
95 | return $matches[1] . preg_replace($sn_patterns, $sn_replacements, $matches[4]); |
||
96 | }, |
||
97 | $entry['sysDescr'] |
||
98 | ); |
||
99 | |||
100 | return $entry; |
||
101 | }, $device_info); |
||
102 | |||
103 | $output = [ |
||
104 | 'uuid' => $uuid, |
||
105 | 'data' => $response, |
||
106 | 'info' => $device_info, |
||
107 | ]; |
||
108 | $data = json_encode($output); |
||
109 | $submit = ['data' => $data]; |
||
110 | |||
111 | $fields = ''; |
||
112 | foreach ($submit as $key => $value) { |
||
113 | $fields .= $key . '=' . $value . '&'; |
||
114 | } |
||
115 | |||
116 | rtrim($fields, '&'); |
||
117 | |||
118 | $post = curl_init(); |
||
119 | set_curl_proxy($post); |
||
120 | curl_setopt($post, CURLOPT_URL, \LibreNMS\Config::get('callback_post')); |
||
121 | curl_setopt($post, CURLOPT_POST, count($submit)); |
||
122 | curl_setopt($post, CURLOPT_POSTFIELDS, $fields); |
||
123 | curl_setopt($post, CURLOPT_RETURNTRANSFER, 1); |
||
124 | $result = curl_exec($post); |
||
125 | } elseif ($enabled == 2) { |
||
126 | $uuid = dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'uuid'"); |
||
127 | $fields = "uuid=$uuid"; |
||
128 | |||
129 | $clear = curl_init(); |
||
130 | set_curl_proxy($clear); |
||
131 | curl_setopt($clear, CURLOPT_URL, \LibreNMS\Config::get('callback_clear')); |
||
132 | curl_setopt($clear, CURLOPT_POST, count($clear)); |
||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
133 | curl_setopt($clear, CURLOPT_POSTFIELDS, $fields); |
||
134 | curl_setopt($clear, CURLOPT_RETURNTRANSFER, 1); |
||
135 | $result = curl_exec($clear); |
||
136 | dbDelete('callback', '`name`="uuid"', []); |
||
137 | dbUpdate(['value' => '0'], 'callback', '`name` = "enabled"', []); |
||
138 | } |
||
139 |