111 lines
4.3 KiB
PHP
111 lines
4.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage map
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
?>
|
|
<script type='text/javascript' src='//www.google.com/jsapi'></script>
|
|
<script type='text/javascript'>
|
|
google.load('visualization', '1.1', {'packages': ['geochart']});
|
|
google.setOnLoadCallback(drawRegionsMap);
|
|
|
|
function drawRegionsMap() {
|
|
var data = new google.visualization.DataTable();
|
|
data.addColumn('number', 'Latitude');
|
|
data.addColumn('number', 'Longitude');
|
|
data.addColumn('string', 'Location');
|
|
data.addColumn('number', 'Status');
|
|
data.addColumn('number', 'Devices');
|
|
data.addColumn({type: 'string', role: 'tooltip'});
|
|
data.addColumn('string', 'url');
|
|
data.addRows([
|
|
<?php
|
|
$locations_up = [];
|
|
$locations_down = [];
|
|
foreach (get_locations() as $location) {
|
|
$location_name = ($location === '' ? OBS_VAR_UNSET : strtr(escape_html($location), "'\\", "`/"));
|
|
$location_url = generate_location_url($location);
|
|
$devices_down = [];
|
|
$devices_up = [];
|
|
$count = $GLOBALS['cache']['device_locations'][$location];
|
|
$down = 0;
|
|
foreach ($GLOBALS['cache']['devices']['id'] as $device) {
|
|
if ($device['location'] == $location) {
|
|
if ($device['status'] == "0" && $device['ignore'] == "0") {
|
|
$down++;
|
|
$devices_down[] = $device['hostname'];
|
|
$lat = (is_numeric($device['location_lat']) ? $device['location_lat'] : $config['geocoding']['default']['lat']);
|
|
$lon = (is_numeric($device['location_lon']) ? $device['location_lon'] : $config['geocoding']['default']['lon']);
|
|
} elseif ($device['status'] == "1") {
|
|
$devices_up[] = $device['hostname'];
|
|
$lat = (is_numeric($device['location_lat']) ? $device['location_lat'] : $config['geocoding']['default']['lat']);
|
|
$lon = (is_numeric($device['location_lon']) ? $device['location_lon'] : $config['geocoding']['default']['lon']);
|
|
}
|
|
}
|
|
}
|
|
$count = (($count < 100) ? $count : 100);
|
|
if ($down > 0) {
|
|
$locations_down[] = "[$lat, $lon, '$location_name', $down, " . $count * $down . ", '" . count($devices_up) . " Devices UP, " . count($devices_down) . " Devices DOWN: (" . implode(", ", $devices_down) . ")', '$location_url']";
|
|
} elseif ($count) {
|
|
$locations_up[] = "[" . $lat . ", " . $lon . ", '" . $location_name . "', 0, " . $count . ", '" . count($devices_up) . " Devices UP: (" . implode(", ", $devices_up) . ")', '$location_url']";
|
|
}
|
|
}
|
|
echo(implode(",\n ", array_merge($locations_up, $locations_down)));
|
|
?>
|
|
]);
|
|
|
|
var options = {
|
|
region: '<?php echo $config['frontpage']['map']['region']; ?>',
|
|
resolution: '<?php echo $config['frontpage']['map']['resolution']; ?>',
|
|
displayMode: 'markers',
|
|
keepAspectRatio: 0,
|
|
//width: 1240,
|
|
//height: 480,
|
|
is3D: true,
|
|
legend: 'none',
|
|
enableRegionInteractivity: true,
|
|
<?php if ($config['frontpage']['map']['realworld']) {
|
|
echo "\t\t datalessRegionColor: '#93CA76',";
|
|
} else {
|
|
echo "\t\t datalessRegionColor: '#d5d5d5',";
|
|
}
|
|
if ($config['frontpage']['map']['realworld']) {
|
|
echo "\t\t backgroundColor: {fill: '#000000'},";
|
|
} ?>
|
|
backgroundColor: {fill: 'transparent'},
|
|
magnifyingGlass: {enable: true, zoomFactor: 5},
|
|
colorAxis: {values: [0, 1, 2, 3], colors: ['darkgreen', 'orange', 'orangered', 'red']},
|
|
markerOpacity: 0.75,
|
|
sizeAxis: {minValue: 1, maxValue: 10, minSize: 10, maxSize: 40}
|
|
};
|
|
|
|
var view = new google.visualization.DataView(data);
|
|
// exclude last url column in the GeoChart
|
|
view.setColumns([0, 1, 2, 3, 4, 5]);
|
|
|
|
var chart = new google.visualization.GeoChart(document.getElementById('map'));
|
|
google.visualization.events.addListener(chart, 'ready', onReady);
|
|
|
|
function onReady() {
|
|
google.visualization.events.addListener(chart, 'select', gotoLocation);
|
|
}
|
|
|
|
function gotoLocation() {
|
|
var selection = chart.getSelection();
|
|
var item = selection[0];
|
|
var url = data.getValue(item.row, 6);
|
|
window.location = url;
|
|
}
|
|
|
|
chart.draw(view, options);
|
|
}
|
|
</script>
|