1<?php
2
3/**
4 * Observium Network Management and Monitoring System
5 * Copyright (C) 2006-2015, Adam Armstrong - http://www.observium.org
6 *
7 * @package    observium
8 * @subpackage webui
9 * @author     Adam Armstrong <adama@observium.org>
10 * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
11 *
12 */
13
14$sensor_types = array_keys($config['sensor_types']);
15
16foreach ($sensor_types as $sensor_type)
17{
18  $sql  = "SELECT * FROM `sensors`";
19  //$sql .= " LEFT JOIN `sensors-state` USING(`sensor_id`)";
20  $sql .= " WHERE `sensor_class` = ? AND `device_id` = ? AND `sensor_deleted` = 0 ORDER BY `sensor_type`, `entPhysicalIndex` * 1, `sensor_descr`"; // order numerically by entPhysicalIndex for ports
21
22  // Cache all sensors
23  foreach (dbFetchRows($sql, array($sensor_type, $device['device_id'])) as $entry)
24  {
25    if (strlen($entry['measured_class']) && is_numeric($entry['measured_entity']) && !in_array($entry['sensor_class'], array('counter', 'state')))
26    {
27      // Sensors bounded with measured class, mostly ports
28      // array index -> ['measured']['port']['345'][] = sensor array
29      $sensors_db['measured'][$entry['measured_class']][$entry['measured_entity']][] = $entry;
30    } else {
31      $sensors_db[$sensor_type][$entry['sensor_id']] = $entry;
32    }
33  }
34}
35//r($sensors_db['measured']);
36
37// Now print founded bundle (measured_class+sensor)
38if (isset($sensors_db['measured']))
39{
40  $vars['measured_icon'] = FALSE; // Hide measured icons
41  foreach ($sensors_db['measured'] as $measured_class => $measured_entity)
42  {
43    $box_args = array('title' => nicecase($measured_class).' sensors',
44                      'url'   => generate_url(array('page' => 'device', 'device' => $device['device_id'], 'tab' => $measured_class.'s', 'view' => 'sensors')),
45                      'icon'  => $config['icon']['sensor']
46                      );
47    echo generate_box_open($box_args);
48
49    echo' <table class="table table-condensed table-striped">';
50
51    foreach ($measured_entity as $entity_id => $entry)
52    {
53      $entity      = get_entity_by_id_cache($measured_class, $entity_id);
54      //r($entity);
55      $entity_link = generate_entity_link($measured_class, $entity);
56      $entity_type = entity_type_translate_array($measured_class);
57
58      // Remove port name from sensor description
59      $rename_from = [];
60      if ($measured_class == 'port')
61      {
62        $rename_from[] = $entity['port_label'];
63        $rename_from[] = $entity['ifDescr'];
64        $rename_from[] = $entity['port_label_short'];
65        if (strlen($entity['port_label_base']) > 4) { $rename_from[] = $entity['port_label_base']; }
66        $rename_from = array_unique($rename_from);
67      } else {
68          $rename_from[] = entity_rewrite($measured_class, $entity);
69      }
70      //r($rename_from);
71      //echo('      <tr class="'.$port['row_class'].'">
72      //  <td class="state-marker"></td>
73      echo('      <tr>
74        <td colspan="6" class="entity">' . get_icon($entity_type['icon']) . '&nbsp;' . $entity_link . '</td></tr>');
75      foreach ($entry as $sensor)
76      {
77        $sensor['sensor_descr'] = trim(str_ireplace($rename_from, '', $sensor['sensor_descr']), ":- \t\n\r\0\x0B");
78        if (empty($sensor['sensor_descr']))
79        {
80          // Some time sensor descriptions equals to entity name
81          $sensor['sensor_descr'] = nicecase($sensor['sensor_class']);
82        }
83
84        print_sensor_row($sensor, $vars);
85      }
86    }
87
88?>
89      </table>
90<?php
91    echo generate_box_close();
92  }
93  // End for print bounds, unset this array
94  unset($sensors_db['measured']);
95}
96
97foreach ($sensors_db as $sensor_type => $sensors)
98{
99  if ($sensor_type == 'measured') { continue; } // Just be on the safe side
100
101  if (count($sensors))
102  {
103    $box_args = array('title' => nicecase($sensor_type),
104                      'url'   => generate_url(array('page' => 'device', 'device' => $device['device_id'], 'tab' => 'health', 'metric' => $sensor_type)),
105                      'icon'  => $config['sensor_types'][$sensor_type]['icon'],
106                      );
107    echo generate_box_open($box_args);
108
109    echo('<table class="table table-condensed table-striped">');
110    foreach ($sensors as $sensor)
111    {
112      print_sensor_row($sensor, $vars);
113    }
114
115    echo("</table>");
116    echo generate_box_close();
117  }
118}
119
120// EOF
121