function generate_status_query($vars) { $sql = "SELECT * FROM `status`"; $sql .= " LEFT JOIN `status-state` USING(`status_id`)"; $sql .= " WHERE 1"; // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'status.status_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'status.device_id'); break; case "id": $sql .= generate_query_values($value, 'status.status_id'); break; case "class": $sql .= generate_query_values($value, 'status.entPhysicalClass'); break; case "event": $sql .= generate_query_values($value, 'status_event'); break; } } $sql .= $GLOBALS['cache']['where']['devices_permitted']; return $sql; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage web * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function generate_sla_query($vars) { $sql = 'SELECT * FROM `slas` '; $sql .= ' LEFT JOIN `slas-state` USING (`sla_id`)'; $sql .= ' WHERE `deleted` = 0'; // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'slas.sla_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'slas.device_id'); break; case "id": $sql .= generate_query_values($value, 'slas.sla_id'); break; case "owner": $sql .= generate_query_values($value, 'slas.sla_owner'); break; case "rtt_type": $sql .= generate_query_values($value, 'slas.rtt_type'); break; case "event": $sql .= generate_query_values($value, 'rtt_event'); break; } } $sql .= $GLOBALS['cache']['where']['devices_permitted']; return $sql; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage web * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function generate_vm_query($vars) { $sql = 'SELECT * FROM `vminfo` WHERE 1 '; // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'vm_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'device_id'); break; case "os": $sql .= generate_query_values($value, 'vm_guestos'); break; case "state": $sql .= generate_query_values($value, 'vm_state'); break; case "memory": $sql .= generate_query_values($value, 'vm_memory'); break; case "cpu": $sql .= generate_query_values($value, 'vm_cpucount'); break; } } $sql .= $GLOBALS['cache']['where']['devices_permitted']; return $sql; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage web * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function generate_pseudowire_query($vars) { $sql = 'SELECT * FROM `pseudowires` '; $sql .= ' LEFT JOIN `pseudowires-state` USING (`pseudowire_id`)'; //$sql .= " WHERE `pwRowStatus` = 'active'"; $sql .= ' WHERE 1'; // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'pseudowire_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'device_id'); break; case "port": case "port_id": $sql .= generate_query_values($value, 'port_id'); break; case "id": $sql .= generate_query_values($value, 'pseudowire_id'); break; case "pwid": $sql .= generate_query_values($value, 'pwID'); break; case "pwtype": $sql .= generate_query_values($value, 'pwType'); break; case "psntype": $sql .= generate_query_values($value, 'pwPsnType'); break; case "peer_id": $sql .= generate_query_values($value, 'peer_device_id'); break; case "peer_addr": $sql .= generate_query_values($value, 'peer_addr'); break; case "event": $sql .= generate_query_values($value, 'event'); break; } } $sql .= $GLOBALS['cache']['where']['devices_permitted']; return $sql; }
/** * Build devices where array * * This function returns an array of "WHERE" statements from a $vars array. * The returned array can be implode()d and used on the devices table. * Originally extracted from the /devices/ page * * @param array $vars * @return array */ function build_devices_where_array($vars) { $where_array = array(); foreach ($vars as $var => $value) { if ($value != '') { switch ($var) { case 'group': $values = get_group_entities($value); $where_array[$var] = generate_query_values($values, 'device_id'); break; case 'hostname': case 'sysname': $where_array[$var] = generate_query_values($value, $var, '%LIKE%'); break; case 'location_text': $where_array[$var] = generate_query_values($value, 'devices.location', '%LIKE%'); break; case 'location': $where_array[$var] = generate_query_values($value, 'devices.location'); break; case 'location_lat': case 'location_lon': case 'location_country': case 'location_state': case 'location_county': case 'location_city': if ($GLOBALS['config']['geocoding']['enable']) { $where_array[$var] = generate_query_values($value, 'devices_locations.' . $var); } break; case 'os': case 'version': case 'hardware': case 'features': case 'type': case 'status': case 'ignore': case 'disabled': $where_array[$var] = generate_query_values($value, $var); break; case 'graph': $where_array[$var] = generate_query_values(devices_with_graph($value), "devices.device_id"); } } } return $where_array; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage functions * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function generate_p2pradio_query($vars) { $sql = "SELECT * FROM `p2p_radios`"; $sql .= ' WHERE 1' . generate_query_permitted(array('device')); // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'radio_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'device_id'); break; } } return $sql; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage web * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function generate_processor_query($vars) { $sql = "SELECT * FROM `processors`"; $sql .= " LEFT JOIN `processors-state` USING(`processor_id`)"; $sql .= ' WHERE 1' . generate_query_permitted(array('device')); // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'processor_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'device_id'); break; } } return $sql; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage web * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function build_mempool_query($vars) { global $config, $cache; $sql = 'SELECT *, `mempools`.`mempool_id` AS `mempool_id` FROM `mempools`'; $sql .= ' LEFT JOIN `mempools-state` USING(`mempool_id`)'; $sql .= ' WHERE 1' . generate_query_permitted(array('device')); // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'mempools.mempool_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'mempools.device_id'); break; } } return $sql; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage webui * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function build_printersupplies_query($vars) { $sql = 'SELECT * FROM `printersupplies`'; $sql .= ' WHERE 1' . generate_query_permitted(array('device')); // Build query foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'printersupplies.supply_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'printersupplies.device_id'); break; case "supply": $sql .= generate_query_values($value, 'printersupplies.supply_type'); break; } } return $sql; }
function permissions_cache($user_id) { $permissions = array(); foreach (dbFetchRows("SELECT * FROM `entity_permissions` WHERE `user_id` = ?", array($user_id)) as $entity) { switch ($entity['entity_type']) { case "group": // this is a group, so expand it's members into an array $group = get_group_by_id($entity['entity_id']); foreach (get_group_entities($entity['entity_id']) as $group_entity_id) { $permissions[$group['entity_type']][$group_entity_id] = TRUE; } //break; // And also store self group permission in cache //break; // And also store self group permission in cache default: $permissions[$entity['entity_type']][$entity['entity_id']] = TRUE; break; } } // For limited users expand device permission into entity permission if ((!isset($_SESSION['user_limited']) || $_SESSION['user_limited']) && count($permissions['device'])) { foreach ($GLOBALS['config']['entities'] as $entity_type => $entity_def) { if ($entity_type == 'device' || $entity_def['hide'] || empty($entity_def['table_fields']['device_id'])) { continue; } $devices = array_keys($permissions['device']); $query = 'SELECT `' . $entity_def['table_fields']['id'] . '` FROM `' . $entity_def['table'] . '`'; $query .= ' WHERE 1 ' . generate_query_values($devices, $entity_def['table_fields']['device_id']); foreach (dbFetchColumn($query) as $entity_id) { $permissions[$entity_type][$entity_id] = TRUE; } } } // Alerts $alert = array(); foreach (dbFetchRows('SELECT `alert_table_id`, `device_id`, `entity_id`, `entity_type` FROM `alert_table`') as $alert_table_entry) { //r($alert_table_entry); if (is_entity_permitted($alert_table_entry['entity_id'], $alert_table_entry['entity_type'], $alert_table_entry['device_id'], $permissions)) { $alert[$alert_table_entry['alert_table_id']] = TRUE; } } if (count($alert)) { $permissions['alert'] = $alert; } return $permissions; }
/** * Build ports WHERE array * * This function returns an array of "WHERE" statements from a $vars array. * The returned array can be implode()d and used on the ports table. * Originally extracted from the /ports/ page * * @param array $vars * @return array */ function build_ports_where_array($vars) { $where = array(); foreach ($vars as $var => $value) { if ($value != '') { switch ($var) { case 'location': $where[] = generate_query_values($value, $var); break; case 'device_id': $where[] = generate_query_values($value, 'ports.device_id'); break; case 'group': $values = get_group_entities($value); $where[] = generate_query_values($values, 'ports.port_id'); break; case 'disable': $var = 'disabled'; case 'disabled': // FIXME. 'disabled' column never used in ports.. // FIXME. 'disabled' column never used in ports.. case 'deleted': case 'ignore': case 'ifSpeed': case 'ifType': $where[] = generate_query_values($value, 'ports.' . $var); break; case 'hostname': case 'ifAlias': case 'ifDescr': $where[] = generate_query_values($value, $var, '%LIKE%'); break; case 'port_descr_type': $where[] = generate_query_values($value, $var, 'LIKE'); break; case 'errors': if ($value == 1 || $value == "yes") { $where[] = " AND (`ifInErrors_delta` > '0' OR `ifOutErrors_delta` > '0')"; } break; case 'alerted': if ($value == "yes") { $where[] = ' AND `ifAdminStatus` = "up" AND (`ifOperStatus` = "lowerLayerDown" OR `ifOperStatus` = "down")'; } case 'state': if ($value == "down") { $where[] = 'AND `ifAdminStatus` = "up" AND (`ifOperStatus` = "lowerLayerDown" OR `ifOperStatus` = "down")'; } else { if ($value == "up") { $where[] = 'AND `ifAdminStatus` = "up" AND ( `ifOperStatus` = "up" OR `ifOperStatus` = "monitoring" )'; } else { if ($value == "admindown") { $where[] = 'AND `ifAdminStatus` = "down"'; } } } break; case 'cbqos': if ($value && $value != 'no') { $where[] = generate_query_values($GLOBALS['cache']['ports']['cbqos'], 'ports.port_id'); } break; } } } return $where; }
* Observium * * This file is part of Observium. * * @package observium * @subpackage webui * @copyright (C) 2006-2015 Adam Armstrong * */ global $sensor_type; $sql = "SELECT *, `sensors`.`sensor_id` AS `sensor_id` FROM `sensors`"; $sql .= " LEFT JOIN `sensors-state` ON `sensors`.`sensor_id` = `sensors-state`.`sensor_id`"; $sql .= " WHERE `sensors`.`sensor_class` = ?" . generate_query_permitted(array('device')); // Groups if (isset($vars['group'])) { $values = get_group_entities($vars['group']); $sql .= generate_query_values($values, 'sensors.sensor_id'); } $sensors = array(); foreach (dbFetchRows($sql, array($sensor_type)) as $sensor) { if (isset($cache['devices']['id'][$sensor['device_id']])) { $sensor['hostname'] = $cache['devices']['id'][$sensor['device_id']]['hostname']; $sensor['html_row_class'] = $cache['devices']['id'][$sensor['device_id']]['html_row_class']; $sensors[] = $sensor; } } $sensors = array_sort_by($sensors, 'hostname', SORT_ASC, SORT_STRING, 'sensor_descr', SORT_ASC, SORT_STRING); $sensors_count = count($sensors); // Pagination $pagination_html = pagination($vars, $sensors_count); echo $pagination_html;
<?php //add up totals in/out for each type, put it in an array. $totals_array = array(); foreach ($config['frontpage']['portpercent'] as $type => $data) { $totalInOctets = 0; $totalOutOctets = 0; //fetch ports in group using existing observium functioon foreach (get_group_entities($data['group']) as $port) { $octets = dbFetchRow("SELECT `ifInOctets_rate`, `ifOutOctets_rate` FROM `ports` WHERE `port_id` = ?", array($port)); $totalInOctets = $totalInOctets + $octets['ifInOctets_rate']; $totalOutOctets = $totalOutOctets + $octets['ifOutOctets_rate']; } $totals_array[$type]["in"] = $totalInOctets * 8; $totals_array[$type]["out"] = $totalOutOctets * 8; } // total things up $totalIn = 0; $totalOut = 0; foreach ($totals_array as $type => $dir) { $totalIn = $totalIn + $dir[in]; $totalOut = $totalOut + $dir[out]; } $percentage_bar = array(); $percentage_bar['border'] = "#EEE"; $percentage_bar['bg'] = "#f0f0f0"; $percentage_bar['width'] = "100%"; //$percentage_bar['text'] = $avai_perc."%"; //$percentage_bar['text_c'] = "#E25A00"; $percentage_bar_out = $percentage_bar; // do the real work
/** * Params: * short * pagination, pageno, pagesize * device_id, entity_id, entity_type, message, timestamp_from, timestamp_to */ function get_events_array($vars) { $array = array(); // Short events? (no pagination, small out) $array['short'] = isset($vars['short']) && $vars['short']; // With pagination? (display page numbers in header) $array['pagination'] = isset($vars['pagination']) && $vars['pagination']; pagination($vars, 0, TRUE); // Get default pagesize/pageno $array['pageno'] = $vars['pageno']; $array['pagesize'] = $vars['pagesize']; $start = $array['pagesize'] * $array['pageno'] - $array['pagesize']; $pagesize = $array['pagesize']; // Begin query generate $param = array(); $where = ' WHERE 1 '; foreach ($vars as $var => $value) { if ($value != '') { switch ($var) { case 'device': case 'device_id': $where .= generate_query_values($value, 'device_id'); break; case 'port': case 'entity': case 'entity_id': $where .= generate_query_values($value, 'entity_id'); break; case 'severity': $where .= generate_query_values($value, 'severity'); break; case 'type': case 'entity_type': $where .= generate_query_values($value, 'entity_type'); break; case 'message': $where .= generate_query_values($value, 'message', '%LIKE%'); break; case 'timestamp_from': $where .= ' AND `timestamp` >= ?'; $param[] = $value; break; case 'timestamp_to': $where .= ' AND `timestamp` <= ?'; $param[] = $value; break; case "group": case "group_id": $values = get_group_entities($value); $where .= generate_query_values($values, 'entity_id'); $where .= generate_query_values(get_group_entity_type($value), 'entity_type'); break; } } } // Show events only for permitted devices $query_permitted = generate_query_permitted(); $query = 'FROM `eventlog` '; $query .= $where . $query_permitted; $query_count = 'SELECT COUNT(*) ' . $query; $query_updated = 'SELECT MAX(`timestamp`) ' . $query; $query = 'SELECT * ' . $query; $query .= ' ORDER BY `event_id` DESC '; $query .= "LIMIT {$start},{$pagesize}"; // Query events $array['entries'] = dbFetchRows($query, $param); // Query events count if ($array['pagination'] && !$array['short']) { $array['count'] = dbFetchCell($query_count, $param); $array['pagination_html'] = pagination($vars, $array['count']); } else { $array['count'] = count($array['entries']); } // Query for last timestamp //$array['updated'] = dbFetchCell($query_updated, $param); return $array; }
/** * Observium * * This file is part of Observium. * * @package observium * @subpackage web * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ function print_storage_table($vars) { global $cache, $config; $graph_type = "storage_usage"; $sql = "SELECT *, `storage`.`storage_id` AS `storage_id` FROM `storage`"; $sql .= " LEFT JOIN `storage-state` USING(`storage_id`)"; $sql .= ' WHERE 1' . generate_query_permitted(array('device')); // Build query if (!isset($vars['ignored'])) { $vars['ignored'] = 0; } foreach ($vars as $var => $value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'storage.storage_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'storage.device_id'); break; case 'ignored': $sql .= generate_query_values($value, 'storage.storage_ignore'); break; } } $storages = array(); foreach (dbFetchRows($sql) as $storage) { if (isset($cache['devices']['id'][$storage['device_id']])) { $storage['hostname'] = $cache['devices']['id'][$storage['device_id']]['hostname']; $storage['html_row_class'] = $cache['devices']['id'][$storage['device_id']]['html_row_class']; $storages[] = $storage; } } // Sorting // FIXME. Sorting can be as function, but in must before print_table_header and after get table from db switch ($vars['sort_order']) { case 'desc': $sort_order = SORT_DESC; $sort_neg = SORT_ASC; break; case 'reset': unset($vars['sort'], $vars['sort_order']); // no break here // no break here default: $sort_order = SORT_ASC; $sort_neg = SORT_DESC; } switch ($vars['sort']) { case 'usage': $storages = array_sort_by($storages, 'storage_perc', $sort_neg, SORT_NUMERIC); break; case 'mountpoint': $storages = array_sort_by($storages, 'storage_descr', $sort_order, SORT_STRING); break; case 'size': case 'free': case 'used': $storages = array_sort_by($storages, 'storage_' . $vars['sort'], $sort_neg, SORT_NUMERIC); break; default: $storages = array_sort_by($storages, 'hostname', $sort_order, SORT_STRING, 'storage_descr', $sort_order, SORT_STRING); break; } $storages_count = count($storages); // Pagination $pagination_html = pagination($vars, $storages_count); echo $pagination_html; if ($vars['pageno']) { $storages = array_chunk($storages, $vars['pagesize']); $storages = $storages[$vars['pageno'] - 1]; } // End Pagination echo generate_box_open(); print_storage_table_header($vars); foreach ($storages as $storage) { print_storage_row($storage, $vars); } echo "</tbody></table>"; echo generate_box_close(); echo $pagination_html; }
function cache_syslog_rules_assoc() { $device_rules = array(); foreach (dbFetchRows("SELECT * FROM `syslog_rules_assoc`") as $laa) { //print_r($laa); if ($laa['entity_type'] == 'group') { $devices = get_group_entities($laa['entity_id']); foreach ($devices as $dev_id) { $device_rules[$dev_id][$laa['la_id']] = TRUE; } } elseif ($laa['entity_type'] == 'device') { $device_rules[$laa['entity_id']][$laa['la_id']] = TRUE; } } return $device_rules; }
function build_sensor_query($vars) { $sql = "SELECT * FROM `sensors`"; $sql .= " LEFT JOIN `sensors-state` USING (`sensor_id`)"; $sql .= " WHERE `sensor_deleted` = 0"; // Build query foreach ($vars as $var => $value) { switch ($var) { case "metric": if ($value != "sensors") { $sql .= generate_query_values($value, 'sensors.sensor_class'); } break; case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values($values, 'sensors.sensor_id'); break; case "device": case "device_id": $sql .= generate_query_values($value, 'sensors.device_id'); break; case "entity_id": $sql .= generate_query_values($value, 'sensors.measured_entity'); break; case "entity_type": $sql .= generate_query_values($value, 'sensors.measured_class'); break; case "id": $sql .= generate_query_values($value, 'sensors.sensor_id'); break; case "event": $sql .= generate_query_values($value, 'sensor_event'); break; } } // $sql .= $GLOBALS['cache']['where']['devices_permitted']; $sql .= generate_query_permitted(array('device', 'sensor')); return $sql; }
if (!$config['web_show_disabled'] && !isset($vars['disabled'])) { $vars['disabled'] = '0'; } if ($vars['format'] != 'graphs') { // reset all from/to vars if not use graphs unset($vars['from'], $vars['to'], $vars['timestamp_from'], $vars['timestamp_to'], $vars['graph']); } /// FIXME - new style (print_search_simple) of searching here $where = ' WHERE 1 '; $where_array = array(); $query_permitted = generate_query_permitted(array('device'), array('device_table' => 'devices')); foreach ($vars as $var => $value) { if ($value != '') { switch ($var) { case 'group': $values = get_group_entities($value); $where_array[$var] = generate_query_values($values, 'device_id'); break; case 'hostname': case 'sysname': $where_array[$var] = generate_query_values($value, $var, '%LIKE%'); break; case 'location_text': $where_array[$var] = generate_query_values($value, 'location', '%LIKE%'); break; case 'os': case 'version': case 'hardware': case 'features': case 'type': case 'status':
function cache_alert_maintenance() { $return = array(); $now = time(); $maints = dbFetchRows("SELECT * FROM `alerts_maint` WHERE `maint_start` < ? AND `maint_end` > ?", array($now, $now)); if (is_array($maints) && count($maints)) { $return['count'] = count($maints); foreach ($maints as $maint) { if ($maint['maint_global'] == 1) { $return['global'][$maint['maint_id']] = $maint; } else { $assocs = dbFetchRows("SELECT * FROM `alerts_maint_assoc` WHERE `maint_id` = ?", array($maint['maint_id'])); foreach ($assocs as $assoc) { switch ($assoc['entity_type']) { case "group": // this is a group, so expand it's members into an array $group = get_group_by_id($assoc['entity_id']); $entities = get_group_entities($assoc['entity_id']); foreach ($entities as $entity) { $return[$group['entity_type']][$entity] = TRUE; } break; default: $return[$assoc['entity_type']][$assoc['entity_id']] = TRUE; break; } } } } } //print_r($return); return $return; }