Commit version 24.12.13800

This commit is contained in:
2025-01-06 17:35:06 -05:00
parent b7f6a79c2c
commit 55d9218816
6133 changed files with 4239740 additions and 1374287 deletions

View File

@ -4,9 +4,9 @@
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2021 Observium Limited
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
@ -17,295 +17,446 @@
// Darwin hostname.local 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64
// Darwin hostname.local 19.5.0 Darwin Kernel Version 19.5.0: Tue May 26 20:41:44 PDT 2020; root:xnu-6153.121.2~2/RELEASE_X86_64 x86_64
// Darwin hostname.local 20.3.0 Darwin Kernel Version 20.3.0: Thu Jan 21 00:07:06 PST 2021; root:xnu-7195.81.3~1/RELEASE_X86_64 x86_64
// Darwin hostname.local 24.2.0 Darwin Kernel Version 24.2.0: Fri Dec 6 19:02:12 PST 2024; root:xnu-11215.61.5~2/RELEASE_ARM64_T6031 arm64
if (preg_match('/Darwin Kernel Version (?<kernel>\d\S+): .* root\S+ (?<arch>\S+)/', $poll_device['sysDescr'], $matches)) {
$kernel = $matches['kernel'];
$arch = $matches['arch'];
$kernel = $matches['kernel'];
$arch = $matches['arch'];
$macos_kernels = [
// Cats
9 => [ 'version' => '10.5', 'name' => 'Leopard', 'icon' => '' ],
10 => [ 'version' => '10.6', 'name' => 'Snow Leopard', 'icon' => '' ],
11 => [ 'version' => '10.7', 'name' => 'Lion', 'icon' => 'macos-lion' ],
12 => [ 'version' => '10.8', 'name' => 'Mountain Lion', 'icon' => 'macos-mountain-lion' ],
// Mountains
13 => [ 'version' => '10.9', 'name' => 'Mavericks', 'icon' => 'macos-mavericks' ],
14 => [ 'version' => '10.10', 'name' => 'Yosemite', 'icon' => 'macos-yosemite' ],
15 => [ 'version' => '10.11', 'name' => 'El Capitan', 'icon' => 'macos-el-capitan' ],
16 => [ 'version' => '10.12', 'name' => 'Sierra', 'icon' => 'macos-sierra' ],
17 => [ 'version' => '10.13', 'name' => 'High Sierra', 'icon' => 'macos-high-sierra' ],
18 => [ 'version' => '10.14', 'name' => 'Mojave', 'icon' => 'macos-mojave' ],
19 => [ 'version' => '10.15', 'name' => 'Catalina', 'icon' => 'macos-catalina' ],
20 => [ 'version' => '11.0', 'name' => 'Big Sur', 'icon' => 'macos-big-sur' ],
];
$macos_kernels = [
// Cats
9 => [ 'version' => '10.5', 'name' => 'Leopard', 'icon' => '' ],
10 => [ 'version' => '10.6', 'name' => 'Snow Leopard', 'icon' => '' ],
11 => [ 'version' => '10.7', 'name' => 'Lion', 'icon' => 'macos-lion' ],
12 => [ 'version' => '10.8', 'name' => 'Mountain Lion', 'icon' => 'macos-mountain-lion' ],
// Mountains
13 => [ 'version' => '10.9', 'name' => 'Mavericks', 'icon' => 'macos-mavericks' ],
14 => [ 'version' => '10.10', 'name' => 'Yosemite', 'icon' => 'macos-yosemite' ],
15 => [ 'version' => '10.11', 'name' => 'El Capitan', 'icon' => 'macos-el-capitan' ],
16 => [ 'version' => '10.12', 'name' => 'Sierra', 'icon' => 'macos-sierra' ],
17 => [ 'version' => '10.13', 'name' => 'High Sierra', 'icon' => 'macos-high-sierra' ],
18 => [ 'version' => '10.14', 'name' => 'Mojave', 'icon' => 'macos-mojave' ],
19 => [ 'version' => '10.15', 'name' => 'Catalina', 'icon' => 'macos-catalina' ],
// Places
20 => [ 'version' => '11', 'name' => 'Big Sur', 'icon' => 'macos-big-sur' ],
21 => [ 'version' => '12', 'name' => 'Monterey', 'icon' => 'macos-monterey' ],
22 => [ 'version' => '13', 'name' => 'Ventura', 'icon' => 'macos-ventura' ],
23 => [ 'version' => '14', 'name' => 'Sonoma', 'icon' => 'macos-sonoma' ],
24 => [ 'version' => '15', 'name' => 'Sequoia', 'icon' => 'macos-sequoia' ],
];
// 19.5.0 -> 10.15.5, 14.0.0 -> 10.10
list($k1, $k2, $k3) = explode('.', $kernel);
if (isset($macos_kernels[$k1])) {
$version = $macos_kernels[$k1]['version'] . '.' . $k2;
if ($k3 > 0) {
$version .= '.' . $k3;
// 19.5.0 -> 10.15.5, 14.0.0 -> 10.10
// 24.2.0 -> 15.2, 20.3.0 -> 11.3
[ $k1, $k2, $k3 ] = explode('.', $kernel);
if (isset($macos_kernels[$k1])) {
$version = $macos_kernels[$k1]['version'] . '.' . $k2;
if ($k3 > 0) {
$version .= '.' . $k3;
}
$features = $macos_kernels[$k1]['name'];
if (strlen($macos_kernels[$k1]['icon'])) {
$icon = $macos_kernels[$k1]['icon'];
}
} else {
$version = $kernel;
}
$features = $macos_kernels[$k1]['name'];
if (strlen($macos_kernels[$k1]['icon'])) {
$icon = $macos_kernels[$k1]['icon'];
}
} else {
$version = $kernel;
}
} else {
list(,,$version) = explode (' ', $poll_device['sysDescr']);
[, , $version] = explode(' ', $poll_device['sysDescr']);
}
$hardware = rewrite_unix_hardware($poll_device['sysDescr']);
// Hardware/serial/type "extend" support
if (is_device_mib($device, 'UCD-SNMP-MIB')) {
// Append this line to /etc/snmp/snmpd.conf:
// extend .1.3.6.1.4.1.2021.7890.2 hardware /usr/sbin/system_profiler SPHardwareDataType SPSoftwareDataType
// restart service:
// sudo launchctl unload -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist
// sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist
// Check output:
// snmpget -v2c -c <community> <hostname> .1.3.6.1.4.1.2021.7890.2.3.1.2.8.104.97.114.100.119.97.114.101
/*
Hardware:
// Append this line to /etc/snmp/snmpd.conf:
// extend .1.3.6.1.4.1.2021.7890.2 hardware /usr/sbin/system_profiler SPHardwareDataType SPSoftwareDataType
// restart service:
// sudo launchctl unload -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist
// sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist
// Check output:
// snmpget -v2c -c <community> <hostname> .1.3.6.1.4.1.2021.7890.2.3.1.2.8.104.97.114.100.119.97.114.101
/*
Hardware:
Hardware Overview:
Hardware Overview:
Model Name: MacBook Pro
Model Identifier: MacBookPro16,1
Processor Name: 8-Core Intel Core i9
Processor Speed: 2.3 GHz
Number of Processors: 1
Total Number of Cores: 8
L2 Cache (per Core): 256 KB
L3 Cache: 16 MB
Hyper-Threading Technology: Enabled
Memory: 16 GB
System Firmware Version: 1554.80.3.0.0 (iBridge: 18.16.14347.0.0,0)
Serial Number (system): C02ZJ6XXXXX
Hardware UUID: XXXX-9AE6-5112-A312-XXXXXX
Provisioning UDID: XXXX-9AE6-5112-A312-XXXXXX
Activation Lock Status: Enabled
Model Name: MacBook Pro
Model Identifier: MacBookPro16,1
Processor Name: 8-Core Intel Core i9
Processor Speed: 2.3 GHz
Number of Processors: 1
Total Number of Cores: 8
L2 Cache (per Core): 256 KB
L3 Cache: 16 MB
Hyper-Threading Technology: Enabled
Memory: 16 GB
System Firmware Version: 1554.80.3.0.0 (iBridge: 18.16.14347.0.0,0)
Serial Number (system): C02ZJ6XXXXX
Hardware UUID: XXXX-9AE6-5112-A312-XXXXXX
Provisioning UDID: XXXX-9AE6-5112-A312-XXXXXX
Activation Lock Status: Enabled
Software:
Software:
System Software Overview:
System Software Overview:
System Version: macOS 11.2.3 (20D91)
Kernel Version: Darwin 20.3.0
Boot Volume: Macintosh HD
Boot Mode: Normal
Computer Name: hostname
User Name: System Administrator (root)
Secure Virtual Memory: Enabled
System Integrity Protection: Enabled
Time since boot: 5 days 20:57
*/
System Version: macOS 11.2.3 (20D91)
Kernel Version: Darwin 20.3.0
Boot Volume: Macintosh HD
Boot Mode: Normal
Computer Name: hostname
User Name: System Administrator (root)
Secure Virtual Memory: Enabled
System Integrity Protection: Enabled
Time since boot: 5 days 20:57
*/
$hw = snmp_get_oid($device, '.1.3.6.1.4.1.2021.7890.2.3.1.2.8.104.97.114.100.119.97.114.101', 'UCD-SNMP-MIB');
if (strlen($hw)) {
$hw = snmp_get_oid($device, '.1.3.6.1.4.1.2021.7890.2.3.1.2.8.104.97.114.100.119.97.114.101', 'UCD-SNMP-MIB');
if (strlen($hw)) {
$hw_array = [];
foreach (explode("\n", $hw) as $line) {
list($param, $value) = explode(': ', trim($line), 2);
$hw_array = [];
foreach (explode("\n", $hw) as $line) {
[$param, $value] = explode(': ', trim($line), 2);
switch ($param) {
case 'Model Name':
case 'Model Identifier':
case 'Processor Name':
case 'Processor Speed':
case 'Number of Processors':
case 'Total Number of Cores':
case 'Memory':
// useful info for detect hardware
$param = strtolower(str_replace(' ', '_', $param));
$hw_array[$param] = $value;
break;
switch ($param) {
case 'Model Name':
case 'Model Identifier':
case 'Processor Name':
case 'Processor Speed':
case 'Number of Processors':
case 'Total Number of Cores':
case 'Memory':
// useful info for detect hardware
$param = strtolower(str_replace(' ', '_', $param));
$hw_array[$param] = $value;
break;
case 'Serial Number (system)':
$serial = $value;
break;
case 'Serial Number (system)':
$serial = $value;
break;
case 'System Version':
// accurate version
list(, $version) = explode(' ', $value);
break;
case 'System Version':
// accurate version
[, $version] = explode(' ', $value);
break;
case 'Time since boot':
// accurate uptime?..
break;
}
case 'Time since boot':
// accurate uptime?..
break;
}
}
if ($hw_array) {
print_debug_vars($hw_array);
$hardware = $hw_array['model_name'];
// idents
preg_match('/^(?<base>[a-z]+)(?<num>[\d,]+)/i', $hw_array['model_identifier'], $ident);
if (str_starts($hw_array['model_identifier'], ['iMacPro', 'MacPro'])) {
// iMacPro1,1 - iMac Pro "10-Core" 3.0 27-Inch (5K, Late 2017)
// MacPro7,1 - Mac Pro "28-Core" 2.5 (2019)
// MacPro7,1 - Mac Pro "28-Core" 2.5 (2019 - Rack)
$type = 'workstation';
// append processor cores
$hardware .= ' "' . $hw_array['total_number_of_cores'] . '-Core"';
// append processor speed
$hardware .= ' ' . preg_replace('/[^\d\.]+$/', '', $hw_array['processor_speed']);
// extra
if ($ident['base'] === 'iMacPro') {
switch ($ident['num']) {
case '1,1':
$hardware .= ' 27-Inch (Late 2017, 5K)';
break;
//case '1,2': $hardware .= ' (Early 2013)'; break;
}
} elseif ($ident['base'] === 'MacPro') {
switch ($ident['num']) {
case '4,1':
$hardware .= ' (2009)';
break;
case '5,1':
$hardware .= ' (2012)';
break;
case '6,1':
$hardware .= ' (Late 2013)';
break;
case '7,1':
$hardware .= ' (2019)';
break;
}
}
} elseif (str_starts($hw_array['model_identifier'], ['iMac', 'Macmini', 'MacBook'])) {
// iMac19,2 - iMac 21.5-Inch "Core i7" 3.2 (4K, 2019)
// Macmini8,1 - Mac mini "Core i7" 3.2 (Late 2018)
// MacBook10,1 - MacBook "Core m3" 1.2 12" (Mid-2017)
// MacBookAir9,1 - MacBook Air "Core i7" 1.2 13" (Scissor, 2020)
// MacBookPro16,1 - MacBook Pro 16-Inch "Core i9" 2.4 2019 (Scissor)
$type = 'workstation';
// append processor
$hardware .= ' "' . preg_replace('/^.*Intel /', '', $hw_array['processor_name']) . '"';
// append processor speed
$hardware .= ' ' . preg_replace('/[^\d\.]+$/', '', $hw_array['processor_speed']);
// extra
if ($ident['base'] === 'MacBookPro') {
switch ($ident['num']) {
case '10,1':
$hardware .= ' 15" (Early 2013)';
break;
case '10,2':
$hardware .= ' 13" (Early 2013)';
break;
case '11,1':
$hardware .= ' 13" (Late 2013)';
break;
case '11,2':
$hardware .= ' 15" (Late 2013, IG)';
break;
case '11,3':
$hardware .= ' 15" (Late 2013, DG)';
break;
case '11,4':
$hardware .= ' 15" (Mid-2015, IG)';
break;
case '11,5':
$hardware .= ' 15" (Mid-2015, DG)';
break;
case '12,1':
$hardware .= ' 13" (Early 2015)';
break;
case '12,2':
$hardware .= ' 13" (Early 2015)';
break;
case '12,3':
$hardware .= ' 15" (Early 2015)';
break;
case '13,1':
$hardware .= ' 13" (Late 2016)';
break;
case '13,2':
$hardware .= ' 13" (Touch/Late 2016)';
break;
case '13,3':
$hardware .= ' 15" (Touch/Late 2016)';
break;
case '14,1':
$hardware .= ' 13" (Mid 2017)';
break;
case '14,2':
$hardware .= ' 13" (Touch/Mid 2017)';
break;
case '14,3':
$hardware .= ' 15" (Touch/Mid 2017)';
break;
case '15,1':
$hardware .= ' 15" (2018)';
break;
case '15,2':
$hardware .= ' 13" (2018)';
break;
case '15,3':
$hardware .= ' 13" (2018, Vega)';
break;
case '15,4':
$hardware .= ' 13" (2019, 2)';
break;
case '16,1':
$hardware .= ' 16" (2019)';
break;
case '16,2':
$hardware .= ' 13" (2020, 4)';
break;
case '16,3':
$hardware .= ' 13" (2020, 2)';
break;
case '16,4':
$hardware .= ' 16" (2019, 5600M)';
break;
case '17,1':
$hardware .= ' 13" (M1, 2020)';
break;
}
} elseif ($ident['base'] === 'MacBookAir') {
switch ($ident['num']) {
case '5,1':
$hardware .= ' 11" (Mid 2012)';
break;
case '5,2':
$hardware .= ' 13" (Mid 2012)';
break;
case '6,1':
$hardware .= ' 11" (Early 2014)';
break;
case '6,2':
$hardware .= ' 13" (Early 2014)';
break;
case '7,1':
$hardware .= ' 11" (Early 2015)';
break;
case '7,2':
$hardware .= ' 13" (Early 2015)';
break;
case '8,1':
$hardware .= ' 13" (Late 2018)';
break;
case '8,2':
$hardware .= ' 13" (2019)';
break;
case '9,1':
$hardware .= ' 13" (2020)';
break;
//case '9,2': $hardware .= ' 13" (Early 2013)'; break;
case '10,1':
$hardware .= ' 13" (M1, 2020)';
break;
}
} elseif ($ident['base'] === 'Macmini') {
switch ($ident['num']) {
case '5,1':
$hardware .= ' (Mid 2011)';
break;
case '5,2':
$hardware .= ' (Mid 2011)';
break;
case '5,3':
$hardware .= ' (Mid 2011)';
$type = 'server';
break; // Server
case '6,1':
$hardware .= ' (Late 2012)';
break;
case '6,2':
$hardware .= ' (Late 2012)';
$type = 'server';
break; // Server
case '7,1':
$hardware .= ' (Late 2014)';
break;
case '8,1':
$hardware .= ' (Late 2018)';
break;
case '9,1':
$hardware .= ' (M1, 2020)';
break;
}
} elseif ($ident['base'] === 'iMac') {
switch ($ident['num']) {
case '13,1':
$hardware .= ' (Late 2012)';
break;
case '13,2':
$hardware .= ' (Late 2012)';
break;
case '14,1':
$hardware .= ' (Late 2013)';
break;
case '14,2':
$hardware .= ' (Late 2013)';
break;
case '14,3':
$hardware .= ' (Late 2013)';
break;
case '14,4':
$hardware .= ' (Mid 2014)';
break;
case '15,1':
$hardware .= ' (Late 2014, 5K)';
break;
case '16,1':
$hardware .= ' (Late 2015)';
break;
case '16,2':
$hardware .= ' (Late 2015, 4K)';
break;
case '17,1':
$hardware .= ' (Late 2015, 5K)';
break;
//case '17,2': $hardware .= ' (Mid-2017, 4K)'; break;
//case '17,3': $hardware .= ' (Mid-2017, 5K)'; break;
case '18,1':
$hardware .= ' (Mid 2017)';
break;
case '18,2':
$hardware .= ' (Mid 2017, 4K)';
break;
case '18,3':
$hardware .= ' (Mid 2017, 5K)';
break;
case '19,1':
$hardware .= ' 27-Inch (2019)';
break;
case '19,2':
$hardware .= ' 21.5-Inch (2019, 4K)';
break;
case '19,3':
$hardware .= ' (2019, 5K)';
break;
case '20,1':
$hardware .= ' 27-Inch (Mid 2020, 5K)';
break;
case '20,2':
$hardware .= ' 27-Inch (Mid 2020, 5K, 5700/XT)';
break;
case '21,1':
$hardware .= ' 24-Inch (M1, 2021)';
break; // 8-Core
case '21,2':
$hardware .= ' 24-Inch (M1, 2021, 7c)';
break; // 7-Core
}
}
} elseif (str_starts($hw_array['model_identifier'], ['PowerBook', 'PowerMac'])) {
// PowerBook5,9 - PowerBook G4 1.67 17" (DLSD/HR - Al)
// PowerMac11,2 - Power Macintosh G5 "Quad Core" (2.5)
$type = 'workstation';
} elseif (str_starts($hw_array['model_identifier'], ['RackMac', 'Xserve'])) {
$type = 'server';
// append processor speed
$hardware .= ' ' . preg_replace('/[^\d\.]+$/', '', $hw_array['processor_speed']);
// append processor cores
$hardware .= ' "' . $hw_array['total_number_of_cores'] . '-Core"';
// extra
if ($ident['base'] === 'Xserve') {
switch ($ident['num']) {
case '1,1':
$hardware .= ' (Late 2006)';
break;
case '2,1':
$hardware .= ' (Early 2008)';
break;
case '3,1':
$hardware .= ' (Early 2009)';
break;
}
}
}
}
}
if ($hw_array) {
print_debug_vars($hw_array);
$hardware = $hw_array['model_name'];
// idents
preg_match('/^(?<base>[a-z]+)(?<num>[\d,]+)/i', $hw_array['model_identifier'], $ident);
if (str_starts($hw_array['model_identifier'], [ 'iMacPro', 'MacPro' ])) {
// iMacPro1,1 - iMac Pro "10-Core" 3.0 27-Inch (5K, Late 2017)
// MacPro7,1 - Mac Pro "28-Core" 2.5 (2019)
// MacPro7,1 - Mac Pro "28-Core" 2.5 (2019 - Rack)
$type = 'workstation';
// append processor cores
$hardware .= ' "' . $hw_array['total_number_of_cores'] . '-Core"';
// append processor speed
$hardware .= ' ' . preg_replace('/[^\d\.]+$/', '', $hw_array['processor_speed']);
// extra
if ($ident['base'] === 'iMacPro') {
switch ($ident['num']) {
case '1,1': $hardware .= ' 27-Inch (Late 2017, 5K)'; break;
//case '1,2': $hardware .= ' (Early 2013)'; break;
}
} elseif ($ident['base'] === 'MacPro') {
switch ($ident['num']) {
case '4,1': $hardware .= ' (2009)'; break;
case '5,1': $hardware .= ' (2012)'; break;
case '6,1': $hardware .= ' (Late 2013)'; break;
case '7,1': $hardware .= ' (2019)'; break;
}
}
} elseif (str_starts($hw_array['model_identifier'], [ 'iMac', 'Macmini', 'MacBook' ])) {
// iMac19,2 - iMac 21.5-Inch "Core i7" 3.2 (4K, 2019)
// Macmini8,1 - Mac mini "Core i7" 3.2 (Late 2018)
// MacBook10,1 - MacBook "Core m3" 1.2 12" (Mid-2017)
// MacBookAir9,1 - MacBook Air "Core i7" 1.2 13" (Scissor, 2020)
// MacBookPro16,1 - MacBook Pro 16-Inch "Core i9" 2.4 2019 (Scissor)
$type = 'workstation';
// append processor
$hardware .= ' "' . preg_replace('/^.*Intel /', '', $hw_array['processor_name']) . '"';
// append processor speed
$hardware .= ' ' . preg_replace('/[^\d\.]+$/', '', $hw_array['processor_speed']);
// extra
if ($ident['base'] === 'MacBookPro') {
switch ($ident['num']) {
case '10,1': $hardware .= ' 15" (Early 2013)'; break;
case '10,2': $hardware .= ' 13" (Early 2013)'; break;
case '11,1': $hardware .= ' 13" (Late 2013)'; break;
case '11,2': $hardware .= ' 15" (Late 2013, IG)'; break;
case '11,3': $hardware .= ' 15" (Late 2013, DG)'; break;
case '11,4': $hardware .= ' 15" (Mid-2015, IG)'; break;
case '11,5': $hardware .= ' 15" (Mid-2015, DG)'; break;
case '12,1': $hardware .= ' 13" (Early 2015)'; break;
case '12,2': $hardware .= ' 13" (Early 2015)'; break;
case '12,3': $hardware .= ' 15" (Early 2015)'; break;
case '13,1': $hardware .= ' 13" (Late 2016)'; break;
case '13,2': $hardware .= ' 13" (Touch/Late 2016)'; break;
case '13,3': $hardware .= ' 15" (Touch/Late 2016)'; break;
case '14,1': $hardware .= ' 13" (Mid 2017)'; break;
case '14,2': $hardware .= ' 13" (Touch/Mid 2017)'; break;
case '14,3': $hardware .= ' 15" (Touch/Mid 2017)'; break;
case '15,1': $hardware .= ' 15" (2018)'; break;
case '15,2': $hardware .= ' 13" (2018)'; break;
case '15,3': $hardware .= ' 13" (2018, Vega)'; break;
case '15,4': $hardware .= ' 13" (2019, 2)'; break;
case '16,1': $hardware .= ' 16" (2019)'; break;
case '16,2': $hardware .= ' 13" (2020, 4)'; break;
case '16,3': $hardware .= ' 13" (2020, 2)'; break;
case '16,4': $hardware .= ' 16" (2019, 5600M)'; break;
case '17,1': $hardware .= ' 13" (M1, 2020)'; break;
}
} elseif ($ident['base'] === 'MacBookAir') {
switch ($ident['num']) {
case '5,1': $hardware .= ' 11" (Mid 2012)'; break;
case '5,2': $hardware .= ' 13" (Mid 2012)'; break;
case '6,1': $hardware .= ' 11" (Early 2014)'; break;
case '6,2': $hardware .= ' 13" (Early 2014)'; break;
case '7,1': $hardware .= ' 11" (Early 2015)'; break;
case '7,2': $hardware .= ' 13" (Early 2015)'; break;
case '8,1': $hardware .= ' 13" (Late 2018)'; break;
case '8,2': $hardware .= ' 13" (2019)'; break;
case '9,1': $hardware .= ' 13" (2020)'; break;
//case '9,2': $hardware .= ' 13" (Early 2013)'; break;
case '10,1': $hardware .= ' 13" (M1, 2020)'; break;
}
} elseif ($ident['base'] === 'Macmini') {
switch ($ident['num']) {
case '5,1': $hardware .= ' (Mid 2011)'; break;
case '5,2': $hardware .= ' (Mid 2011)'; break;
case '5,3': $hardware .= ' (Mid 2011)'; $type = 'server'; break; // Server
case '6,1': $hardware .= ' (Late 2012)'; break;
case '6,2': $hardware .= ' (Late 2012)'; $type = 'server'; break; // Server
case '7,1': $hardware .= ' (Late 2014)'; break;
case '8,1': $hardware .= ' (Late 2018)'; break;
case '9,1': $hardware .= ' (M1, 2020)'; break;
}
} elseif ($ident['base'] === 'iMac') {
switch ($ident['num']) {
case '13,1': $hardware .= ' (Late 2012)'; break;
case '13,2': $hardware .= ' (Late 2012)'; break;
case '14,1': $hardware .= ' (Late 2013)'; break;
case '14,2': $hardware .= ' (Late 2013)'; break;
case '14,3': $hardware .= ' (Late 2013)'; break;
case '14,4': $hardware .= ' (Mid 2014)'; break;
case '15,1': $hardware .= ' (Late 2014, 5K)'; break;
case '16,1': $hardware .= ' (Late 2015)'; break;
case '16,2': $hardware .= ' (Late 2015, 4K)'; break;
case '17,1': $hardware .= ' (Late 2015, 5K)'; break;
//case '17,2': $hardware .= ' (Mid-2017, 4K)'; break;
//case '17,3': $hardware .= ' (Mid-2017, 5K)'; break;
case '18,1': $hardware .= ' (Mid 2017)'; break;
case '18,2': $hardware .= ' (Mid 2017, 4K)'; break;
case '18,3': $hardware .= ' (Mid 2017, 5K)'; break;
case '19,1': $hardware .= ' 27-Inch (2019)'; break;
case '19,2': $hardware .= ' 21.5-Inch (2019, 4K)'; break;
case '19,3': $hardware .= ' (2019, 5K)'; break;
case '20,1': $hardware .= ' 27-Inch (Mid 2020, 5K)'; break;
case '20,2': $hardware .= ' 27-Inch (Mid 2020, 5K, 5700/XT)'; break;
case '21,1': $hardware .= ' 24-Inch (M1, 2021)'; break; // 8-Core
case '21,2': $hardware .= ' 24-Inch (M1, 2021, 7c)'; break; // 7-Core
}
}
} elseif (str_starts($hw_array['model_identifier'], [ 'PowerBook', 'PowerMac' ])) {
// PowerBook5,9 - PowerBook G4 1.67 17" (DLSD/HR - Al)
// PowerMac11,2 - Power Macintosh G5 "Quad Core" (2.5)
$type = 'workstation';
} elseif (str_starts($hw_array['model_identifier'], [ 'RackMac', 'Xserve' ])) {
$type = 'server';
// append processor speed
$hardware .= ' ' . preg_replace('/[^\d\.]+$/', '', $hw_array['processor_speed']);
// append processor cores
$hardware .= ' "' . $hw_array['total_number_of_cores'] . '-Core"';
// extra
if ($ident['base'] === 'Xserve') {
switch ($ident['num']) {
case '1,1': $hardware .= ' (Late 2006)'; break;
case '2,1': $hardware .= ' (Early 2008)'; break;
case '3,1': $hardware .= ' (Early 2009)'; break;
}
}
}
}
}
}
/* https://everymac.com/systems/by_capability/mac-specs-by-machine-model-machine-id.html