diff options
Diffstat (limited to 'modules-available/statistics/pages/machine.inc.php')
-rw-r--r-- | modules-available/statistics/pages/machine.inc.php | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/modules-available/statistics/pages/machine.inc.php b/modules-available/statistics/pages/machine.inc.php index fdb04023..62abc8d2 100644 --- a/modules-available/statistics/pages/machine.inc.php +++ b/modules-available/statistics/pages/machine.inc.php @@ -61,33 +61,64 @@ class SubPage Message::addError('unknown-machine', $uuid); return; } + if (Module::isAvailable('locations') && !Location::isLeaf($client['locationid'])) { + $client['hasroomplan'] = false; + } + User::assertPermission('machine.view-details', (int)$client['locationid']); + // Hack: Get raw collected data + if (Request::get('raw', false)) { + Header('Content-Type: text/plain; charset=utf-8'); + die($client['data']); + } // Parse data $hdds = array(); if ($client['data'][0] === '{') { $json = json_decode($client['data'], true); if (is_array($json)) { $client += self::parseJson($uuid, $json); - $hdds['hdds'] = self::parseJsonHdd($uuid); + $hdds['hdds'] = self::queryHddData($uuid); } } else { self::parseLegacy($client, $hdds); } unset($client['data']); // Get rid of configured speed, if equal to maximum speed - foreach ($client['ram'] as &$ram) { - if (isset($ram['Configured Memory Speed']) && $ram['Configured Memory Speed'] === $ram['Speed']) { - unset($ram['Configured Memory Speed']); + foreach ($client['ram'] as &$item) { + if (isset($item['Configured Memory Speed']) && $item['Configured Memory Speed'] === $item['Speed']) { + unset($item['Configured Memory Speed']); } } - if (Module::isAvailable('locations') && !Location::isLeaf($client['locationid'])) { - $client['hasroomplan'] = false; - } - User::assertPermission('machine.view-details', (int)$client['locationid']); - // Hack: Get raw collected data - if (Request::get('raw', false)) { - Header('Content-Type: text/plain; charset=utf-8'); - die($client['data']); + unset($item); + $client['lspci1'] = $client['lspci2'] = []; + foreach ($client['lspci'] as $item) { + $item['vendor_s'] = PciId::getPciId(PciId::VENDOR, $item['vendor']); + $item['device_s'] = PciId::getPciId(PciId::DEVICE, $item['vendor'] . $item['device']); + if ($item['vendor_s'] === false) { + $pciLookup[$item['vendor']] = true; + } + if ($item['device_s'] === false) { + $pciLookup[$item['vendor'] . ':' . $item['device']] = true; + } + $class = $item['class']; + if ($class === '0300' || $class === '0200' || $class === '0403') { + $dst =& $client['lspci1']; + } else { + $dst =& $client['lspci2']; + } + if (!isset($dst[$class])) { + $dst[$class] = [ + 'class' => $class, + 'class_s' => PciId::getPciId(PciId::DEVCLASS, $class, true), + 'entries' => [], + ]; + } + $dst[$class]['entries'][] = $item; } + unset($dst, $client['lspci']); + ksort($client['lspci1']); + ksort($client['lspci2']); + $client['lspci1'] = array_values($client['lspci1']); + $client['lspci2'] = array_values($client['lspci2']); // Runmode if (Module::isAvailable('runmode')) { $data = RunMode::getRunMode($uuid, RunMode::DATA_STRINGS); @@ -211,6 +242,10 @@ class SubPage Permission::addGlobalTags($client['perms'], null, ['hardware.projectors.edit', 'hardware.projectors.view']); // Throw output at user Render::addTemplate('machine-main', $client); + if (!empty($pciLookup)) { + Render::addTemplate('js-pciquery', + ['missing_ids' => json_encode(array_keys($pciLookup))]); + } // Sessions $NOW = time(); $cutoff = $NOW - 86400 * 7; @@ -366,8 +401,7 @@ class SubPage HardwareParserLegacy::parseHdd($hdds, $section[2]); } if ($section[1] === 'PCI ID') { - $client['lspci1'] = $client['lspci2'] = array(); - HardwareParserLegacy::parsePci($client['lspci1'], $client['lspci2'], $section[2]); + $client['lspci'] = HardwareParserLegacy::parsePci($section[2]); } if (isset($hdds['hdds']) && $section[1] === 'smartctl') { // This currently requires that the partition table section comes first... @@ -381,6 +415,7 @@ class SubPage { $return = [ 'cpu' => $json['cpu'] ?? [], + 'lspci' => $json['lspci'] ?? [], 'ram' => array_map(function($item) { return HardwareParser::prepareDmiProperties($item); }, HardwareParser::getDmiHandles($json, 17)), @@ -407,7 +442,7 @@ class SubPage return $return; } - private static function parseJsonHdd(string $uuid): array + private static function queryHddData(string $uuid): array { $hdds = []; $ret = Database::simpleQuery("SELECT mp.`machinehwid`, mp.`prop`, mp.`value`, mp.`numeric` |