summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2019-04-16 09:46:09 +0200
committerSimon Rettberg2019-04-16 09:50:13 +0200
commite303914c3962cacd38d09b3d80a51627d1dc4f5c (patch)
tree0b925e3eadfaffcf60fd11ae34a0f1d2379e9ad8
parent[serversetup-bwlp-ipxe] Add debug-shell boot entry (diff)
downloadslx-admin-e303914c3962cacd38d09b3d80a51627d1dc4f5c.tar.gz
slx-admin-e303914c3962cacd38d09b3d80a51627d1dc4f5c.tar.xz
slx-admin-e303914c3962cacd38d09b3d80a51627d1dc4f5c.zip
[statistics] Handle system an mainboard model separately
...especially for BIOS updates checks...
-rw-r--r--modules-available/statistics/inc/parser.inc.php15
-rw-r--r--modules-available/statistics/lang/de/template-tags.json2
-rw-r--r--modules-available/statistics/lang/en/template-tags.json2
-rw-r--r--modules-available/statistics/page.inc.php38
-rw-r--r--modules-available/statistics/templates/machine-main.html8
5 files changed, 44 insertions, 21 deletions
diff --git a/modules-available/statistics/inc/parser.inc.php b/modules-available/statistics/inc/parser.inc.php
index 4e0740fc..be9300f4 100644
--- a/modules-available/statistics/inc/parser.inc.php
+++ b/modules-available/statistics/inc/parser.inc.php
@@ -40,12 +40,19 @@ class Parser {
}
continue;
}
- if ($section === 'System Information' || $section === 'Base Board Information') {
- if (empty($row['pcmodel']) && preg_match('/^\s*Product Name: +(\S.+?) *$/i', $line, $out)) {
+ if ($section === 'Base Board Information') {
+ if (preg_match('/^\s*Product Name: +(\S.+?) *$/i', $line, $out)) {
+ $row['mobomodel'] = $out[1];
+ }
+ if (preg_match('/^\s*Manufacturer: +(\S.+?) *$/i', $line, $out)) {
+ $row['mobomanufacturer'] = $out[1];
+ }
+ } elseif ($section === 'System Information') {
+ if (preg_match('/^\s*Product Name: +(\S.+?) *$/i', $line, $out)) {
$row['pcmodel'] = $out[1];
}
- if (empty($row['manufacturer']) && preg_match('/^\s*Manufacturer: +(\S.+?) *$/i', $line, $out)) {
- $row['manufacturer'] = $out[1];
+ if (preg_match('/^\s*Manufacturer: +(\S.+?) *$/i', $line, $out)) {
+ $row['pcmanufacturer'] = $out[1];
}
} elseif ($section === 'Physical Memory Array') {
if (!$ramOk && preg_match('/Use: System Memory/i', $line)) {
diff --git a/modules-available/statistics/lang/de/template-tags.json b/modules-available/statistics/lang/de/template-tags.json
index 7fc90201..24de69df 100644
--- a/modules-available/statistics/lang/de/template-tags.json
+++ b/modules-available/statistics/lang/de/template-tags.json
@@ -48,6 +48,7 @@
"lang_maximumAbbrev": "Max.",
"lang_memFree": "RAM frei (MB)",
"lang_memoryStats": "Arbeitsspeicher",
+ "lang_mobomodel": "Mainboard",
"lang_model": "Modell",
"lang_modelCount": "Anzahl",
"lang_modelName": "Modellname",
@@ -64,6 +65,7 @@
"lang_partSize": "Gr\u00f6\u00dfe",
"lang_partType": "Typ",
"lang_partitionSize": "Gr\u00f6\u00dfe",
+ "lang_pcmodel": "PC-Modell",
"lang_pendingSectors": "Potentiell defekte Sektoren",
"lang_powerOnTime": "Betriebszeit",
"lang_projector": "Beamer",
diff --git a/modules-available/statistics/lang/en/template-tags.json b/modules-available/statistics/lang/en/template-tags.json
index 4fb57e72..b06137cf 100644
--- a/modules-available/statistics/lang/en/template-tags.json
+++ b/modules-available/statistics/lang/en/template-tags.json
@@ -48,6 +48,7 @@
"lang_maximumAbbrev": "max.",
"lang_memFree": "RAM free (MB)",
"lang_memoryStats": "Memory",
+ "lang_mobomodel": "Mainboard",
"lang_model": "Model",
"lang_modelCount": "Count",
"lang_modelName": "Model name",
@@ -64,6 +65,7 @@
"lang_partSize": "Size",
"lang_partType": "Type",
"lang_partitionSize": "Size",
+ "lang_pcmodel": "System model",
"lang_pendingSectors": "Sectors pending reallocation",
"lang_powerOnTime": "Power on time",
"lang_projector": "Projector",
diff --git a/modules-available/statistics/page.inc.php b/modules-available/statistics/page.inc.php
index b49115da..c5da85fe 100644
--- a/modules-available/statistics/page.inc.php
+++ b/modules-available/statistics/page.inc.php
@@ -970,11 +970,13 @@ class Page_Statistics extends Page
unset($client['data']);
// BIOS update check
if (!empty($client['biosrevision'])) {
- $model = $client['manufacturer'] . '##' . $client['pcmodel'];
- $ret = $this->checkBios($model, $client['biosdate'], $client['biosrevision']);
+ $mainboard = $client['mobomanufacturer'] . '##' . $client['mobomodel'];
+ $system = $client['pcmanufacturer'] . '##' . $client['pcmodel'];
+ $ret = $this->checkBios($mainboard, $system, $client['biosdate'], $client['biosrevision']);
if ($ret === false) { // Not loaded, use AJAX
$params = [
- 'model' => $model,
+ 'mainboard' => $mainboard,
+ 'system' => $system,
'date' => $client['biosdate'],
'revision' => $client['biosrevision'],
];
@@ -1247,10 +1249,11 @@ class Page_Statistics extends Page
private function ajaxCheckBios()
{
- $model = Request::any('model', false, 'string');
+ $mainboard = Request::any('mainboard', false, 'string');
+ $system = Request::any('system', false, 'string');
$date = Request::any('date', false, 'string');
$revision = Request::any('revision', false, 'string');
- $reply = $this->checkBios($model, $date, $revision);
+ $reply = $this->checkBios($mainboard, $system, $date, $revision);
if ($reply === false) {
$data = Download::asString(CONFIG_BIOS_URL, 3, $err);
if ($err < 200 || $err >= 300) {
@@ -1258,7 +1261,7 @@ class Page_Statistics extends Page
} else {
file_put_contents(self::BIOS_CACHE, $data);
$data = json_decode($data, true);
- $reply = $this->checkBios($model, $date, $revision, $data);
+ $reply = $this->checkBios($mainboard, $system, $date, $revision, $data);
}
}
if ($reply === false) {
@@ -1269,7 +1272,7 @@ class Page_Statistics extends Page
die(Render::parse('machine-bios-update', $reply));
}
- private function checkBios($model, $date, $revision, $json = null)
+ private function checkBios($mainboard, $system, $date, $revision, $json = null)
{
if ($json === null) {
if (!file_exists(self::BIOS_CACHE) || filemtime(self::BIOS_CACHE) + 3600 < time())
@@ -1278,22 +1281,27 @@ class Page_Statistics extends Page
}
if (!is_array($json) || !isset($json['system']))
return ['error' => 'Malformed JSON, no system key'];
- if (!isset($json['system'][$model]) || !isset($json['system'][$model]['fixes']) || !isset($json['system'][$model]['match']))
+ if (isset($json['system'][$system]) && isset($json['system'][$system]['fixes']) && isset($json['system'][$system]['match'])) {
+ $match =& $json['system'][$system];
+ } elseif (isset($json['mainboard'][$mainboard]) && isset($json['mainboard'][$mainboard]['fixes']) && isset($json['mainboard'][$mainboard]['match'])) {
+ $match =& $json['mainboard'][$mainboard];
+ } else {
return ['status' => 0];
- $m = $json['system'][$model]['match'];
- if ($m === 'revision') {
+ }
+ $key = $match['match'];
+ if ($key === 'revision') {
$cmp = function ($item) { $s = explode('.', $item); return $s[0] * 0x10000 + $s[1]; };
$reference = $cmp($revision);
- } elseif ($m === 'date') {
+ } elseif ($key === 'date') {
$cmp = function ($item) { $s = explode('.', $item); return $s[2] * 10000 + $s[1] * 100 + $s[0]; };
$reference = $cmp($date);
} else {
- return ['error' => 'Invalid comparison key: ' . $m];
+ return ['error' => 'Invalid comparison key: ' . $key];
}
$retval = ['fixes' => []];
$level = 0;
- foreach ($json['system'][$model]['fixes'] as $fix) {
- if ($cmp($fix[$m]) > $reference) {
+ foreach ($match['fixes'] as $fix) {
+ if ($cmp($fix[$key]) > $reference) {
class_exists('Dictionary'); // Trigger setup of lang stuff
$lang = isset($fix['text'][LANG]) ? LANG : 'en';
$fix['text'] = $fix['text'][$lang];
@@ -1301,7 +1309,7 @@ class Page_Statistics extends Page
$level = max($level, $fix['level']);
}
}
- $retval['url'] = $json['system'][$model]['url'];
+ $retval['url'] = $match['url'];
$retval['status'] = $level;
if ($level > 5) {
$retval['class'] = 'danger';
diff --git a/modules-available/statistics/templates/machine-main.html b/modules-available/statistics/templates/machine-main.html
index 960531f6..12f1d4c5 100644
--- a/modules-available/statistics/templates/machine-main.html
+++ b/modules-available/statistics/templates/machine-main.html
@@ -199,8 +199,12 @@
</td>
</tr>
<tr>
- <td class="text-nowrap">{{lang_model}}</td>
- <td>{{pcmodel}} ({{manufacturer}})</td>
+ <td class="text-nowrap">{{lang_pcmodel}}</td>
+ <td>{{pcmodel}} ({{pcmanufacturer}})</td>
+ </tr>
+ <tr>
+ <td class="text-nowrap">{{lang_mobomodel}}</td>
+ <td>{{mobomodel}} ({{mobomanufacturer}})</td>
</tr>
{{#biosdate}}
<tr>