. * * @link https://www.librenms.org * * @copyright 2020 Tony Murray * @author Tony Murray */ namespace LibreNMS\OS; use App\Models\Device; use LibreNMS\Interfaces\Discovery\OSDiscovery; use LibreNMS\OS; class Exa extends OS implements OSDiscovery { public function discoverOS(Device $device): void { $info = snmp_getnext_multi($this->getDeviceArray(), ['e7CardSoftwareVersion', 'e7CardSerialNumber'], '-OQUs', 'E7-Calix-MIB'); $device->version = $info['e7CardSoftwareVersion'] ?? null; $device->serial = $info['e7CardSerialNumber'] ?? null; $device->hardware = 'Calix ' . $device->sysDescr; $cards = explode("\n", snmp_walk($this->getDeviceArray(), 'e7CardProvType', '-OQv', 'E7-Calix-MIB')); $card_count = []; foreach ($cards as $card) { $card_count[$card] = ($card_count[$card] ?? 0) + 1; } $device->features = implode(', ', array_map(function ($card) use ($card_count) { return ($card_count[$card] > 1 ? $card_count[$card] . 'x ' : '') . $card; }, array_keys($card_count))); } }