mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
ebe2ecf524
* Add migrations and seeds * Fix spacing validation issues * Fix linting * Update tabs to spaces * Update daily and install process * Make build-base.php use the new migrations if empty or at dbschema 1000. Seed 1000 into the database. Temp fix for the route table index length (this table basically isn't used...) * Fix typo in seed. Hard code legacy schema checks to version 1000 (999 would have worked as is) * Port association table no longer exists * Make database validate again * DB schema, remove as many DB::statement as possible * update migrations add librenms cli entry point (artisan) update validate to check laravel migrations * remove statements from users migration * Fix up daily.sh and the 1000 migration * Update migrations to current state Take advantage of environment variables to set DB credentials. * Fix style issues * Update schema * fix test db collation * Fix migration table definition * update db migrations * Update migrations * Update stats callback. Just count the total migrations applied. * Update 1000.sql. * update migrations * remove the graph type seeder, it is no longer needed * update docs * fix whitespace * remove extra schema * update tests * fix sort * add message * dbSchema should actually be 1000 * add character set to db create * Fix some artisan issues * Update schema
138 lines
7.6 KiB
PHP
138 lines
7.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* LibreNMS
|
|
*
|
|
* Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version. Please see LICENSE.txt at the top level of
|
|
* the source code distribution for details.
|
|
*/
|
|
|
|
$enabled = dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'enabled'");
|
|
if ($enabled == 1) {
|
|
if (dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'uuid'") == '') {
|
|
dbInsert(array('name' => 'uuid', 'value' => guidv4(openssl_random_pseudo_bytes(16))), 'callback');
|
|
}
|
|
|
|
$uuid = dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'uuid'");
|
|
|
|
$version = version_info();
|
|
$queries = array(
|
|
'alert_rules' => 'SELECT COUNT(*) AS `total`,`severity` FROM `alert_rules` WHERE `disabled`=0 GROUP BY `severity`',
|
|
'alert_templates' => 'SELECT COUNT(*) AS `total` FROM `alert_templates`',
|
|
'api_tokens' => 'SELECT COUNT(*) AS `total` FROM `api_tokens` WHERE `disabled`=0',
|
|
'applications' => 'SELECT COUNT(*) AS `total`,`app_type` FROM `applications` GROUP BY `app_type`',
|
|
'bgppeer_state' => 'SELECT COUNT(*) AS `total`,`bgpPeerState` FROM `bgpPeers` GROUP BY `bgpPeerState`',
|
|
'bgppeer_status' => 'SELECT COUNT(*) AS `total`,`bgpPeerAdminStatus` FROM `bgpPeers` GROUP BY `bgpPeerAdminStatus`',
|
|
'bills' => 'SELECT COUNT(*) AS `total`,`bill_type` FROM `bills` GROUP BY `bill_type`',
|
|
'cef' => 'SELECT COUNT(*) AS `total` FROM `cef_switching`',
|
|
'cisco_asa' => 'SELECT COUNT(*) AS `total`,`oid` FROM `ciscoASA` WHERE `disabled` = 0 GROUP BY `oid`',
|
|
'mempool' => 'SELECT COUNT(*) AS `total`,`mempool_descr` FROM `mempools` GROUP BY `mempool_descr`',
|
|
'dbschema' => 'SELECT COUNT(*) AS `total`, COUNT(*) AS `version` FROM `migrations`',
|
|
'snmp_version' => 'SELECT COUNT(*) AS `total`,`snmpver` FROM `devices` GROUP BY `snmpver`',
|
|
'os' => 'SELECT COUNT(*) AS `total`,`os` FROM `devices` GROUP BY `os`',
|
|
'type' => 'SELECT COUNT(*) AS `total`,`type` FROM `devices` GROUP BY `type`',
|
|
'hardware' => 'SELECT COUNT(*) AS `total`, `hardware` FROM `devices` GROUP BY `hardware`',
|
|
'ipsec' => 'SELECT COUNT(*) AS `total` FROM `ipsec_tunnels`',
|
|
'ipv4_addresses' => 'SELECT COUNT(*) AS `total` FROM `ipv4_addresses`',
|
|
'ipv4_macaddress' => 'SELECT COUNT(*) AS `total` FROM ipv4_mac',
|
|
'ipv4_networks' => 'SELECT COUNT(*) AS `total` FROM ipv4_networks',
|
|
'ipv6_addresses' => 'SELECT COUNT(*) AS `total` FROM `ipv6_addresses`',
|
|
'ipv6_networks' => 'SELECT COUNT(*) AS `total` FROM `ipv6_networks`',
|
|
'xdp' => 'SELECT COUNT(*) AS `total`,`protocol` FROM `links` GROUP BY `protocol`',
|
|
'ospf' => 'SELECT COUNT(*) AS `total`,`ospfVersionNumber` FROM `ospf_instances` GROUP BY `ospfVersionNumber`',
|
|
'ospf_links' => 'SELECT COUNT(*) AS `total`,`ospfIfType` FROM `ospf_ports` GROUP BY `ospfIfType`',
|
|
'arch' => 'SELECT COUNT(*) AS `total`,`arch` FROM `packages` GROUP BY `arch`',
|
|
'pollers' => 'SELECT COUNT(*) AS `total` FROM `pollers`',
|
|
'port_type' => 'SELECT COUNT(*) AS `total`,`ifType` FROM `ports` GROUP BY `ifType`',
|
|
'port_ifspeed' => 'SELECT COUNT(*) AS `total`,ROUND(`ifSpeed`/1000/1000) FROM `ports` GROUP BY `ifSpeed`',
|
|
'port_vlans' => 'SELECT COUNT(*) AS `total`,`state` FROM `ports_vlans` GROUP BY `state`',
|
|
'processes' => 'SELECT COUNT(*) AS `total` FROM `processes`',
|
|
'processors' => 'SELECT COUNT(*) AS `total`,`processor_type` FROM `processors` GROUP BY `processor_type`',
|
|
'pseudowires' => 'SELECT COUNT(*) AS `total` FROM `pseudowires`',
|
|
'sensors' => 'SELECT COUNT(*) AS `total`,`sensor_class` FROM `sensors` GROUP BY `sensor_class`',
|
|
'wireless' => 'SELECT COUNT(*) AS `total`,`sensor_class` FROM `wireless_sensors` GROUP BY `sensor_class`',
|
|
'storage' => 'SELECT COUNT(*) AS `total`,`storage_type` FROM `storage` GROUP BY `storage_type`',
|
|
'toner' => 'SELECT COUNT(*) AS `total`,`toner_type` FROM `toner` GROUP BY `toner_type`',
|
|
'vlans' => 'SELECT COUNT(*) AS `total`,`vlan_type` FROM `vlans` GROUP BY `vlan_type`',
|
|
'vminfo' => 'SELECT COUNT(*) AS `total`,`vm_type` FROM `vminfo` GROUP BY `vm_type`',
|
|
'vmware' => 'SELECT COUNT(*) AS `total` FROM `vminfo`',
|
|
'vrfs' => 'SELECT COUNT(*) AS `total` FROM `vrfs`',
|
|
'mysql_version' => 'SELECT 1 AS `total`, @@version AS `version`',
|
|
);
|
|
|
|
|
|
foreach ($queries as $name => $query) {
|
|
$data = dbFetchRows($query);
|
|
$response[$name] = $data;
|
|
}
|
|
$response['php_version'][] = array('total' => 1, 'version' => $version['php_ver']);
|
|
$response['rrdtool_version'][] = array('total' => 1, 'version' => $version['rrdtool_ver']);
|
|
$response['netsnmp_version'][] = array('total' => 1, 'version' => $version['netsnmp_ver']);
|
|
|
|
// collect sysDescr and sysObjectID for submission
|
|
$device_info = dbFetchRows('SELECT COUNT(*) AS `count`,`os`, `sysDescr`, `sysObjectID` FROM `devices`
|
|
WHERE `sysDescr` IS NOT NULL AND `sysObjectID` IS NOT NULL GROUP BY `os`, `sysDescr`, `sysObjectID`');
|
|
|
|
// sanitize sysDescr
|
|
$device_info = array_map(function ($entry) {
|
|
// remove hostnames from linux, macosx, and SunOS
|
|
$entry['sysDescr'] = preg_replace_callback('/^(Linux |Darwin |FreeBSD |SunOS )[A-Za-z0-9._\-]+ ([0-9.]{3,9})/', function ($matches) {
|
|
return $matches[1] . 'hostname ' .$matches[2];
|
|
}, $entry['sysDescr']);
|
|
|
|
// wipe serial numbers, preserve the format
|
|
$sn_patterns = array('/[A-Z]/', '/[a-z]/', '/[0-9]/');
|
|
$sn_replacements = array('A', 'a', '0');
|
|
$entry['sysDescr'] = preg_replace_callback(
|
|
'/((s\/?n|serial num(ber)?)[:=]? ?)([a-z0-9.\-]{4,16})/i',
|
|
function ($matches) use ($sn_patterns, $sn_replacements) {
|
|
return $matches[1] . preg_replace($sn_patterns, $sn_replacements, $matches[4]);
|
|
},
|
|
$entry['sysDescr']
|
|
);
|
|
|
|
return $entry;
|
|
}, $device_info);
|
|
|
|
$output = array(
|
|
'uuid' => $uuid,
|
|
'data' => $response,
|
|
'info' => $device_info,
|
|
);
|
|
$data = json_encode($output);
|
|
$submit = array('data' => $data);
|
|
|
|
$fields = '';
|
|
foreach ($submit as $key => $value) {
|
|
$fields .= $key.'='.$value.'&';
|
|
}
|
|
|
|
rtrim($fields, '&');
|
|
|
|
$post = curl_init();
|
|
set_curl_proxy($post);
|
|
curl_setopt($post, CURLOPT_URL, $config['callback_post']);
|
|
curl_setopt($post, CURLOPT_POST, count($submit));
|
|
curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
|
|
curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);
|
|
$result = curl_exec($post);
|
|
} elseif ($enabled == 2) {
|
|
$uuid = dbFetchCell("SELECT `value` FROM `callback` WHERE `name` = 'uuid'");
|
|
$fields = "uuid=$uuid";
|
|
|
|
$clear = curl_init();
|
|
set_curl_proxy($clear);
|
|
curl_setopt($clear, CURLOPT_URL, $config['callback_clear']);
|
|
curl_setopt($clear, CURLOPT_POST, count($clear));
|
|
curl_setopt($clear, CURLOPT_POSTFIELDS, $fields);
|
|
curl_setopt($clear, CURLOPT_RETURNTRANSFER, 1);
|
|
$result = curl_exec($clear);
|
|
dbDelete('callback', '`name`="uuid"', array());
|
|
dbUpdate(array('value' => '0'), 'callback', '`name` = "enabled"', array());
|
|
}
|