summaryrefslogtreecommitdiffstats
path: root/modules-available/statistics/pages/machine.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/statistics/pages/machine.inc.php')
-rw-r--r--modules-available/statistics/pages/machine.inc.php65
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`