. * * @package LibreNMS * @link http://librenms.org * @copyright 2020 Tony Murray * @author Tony Murray */ namespace LibreNMS\OS; use LibreNMS\Interfaces\Discovery\OSDiscovery; use LibreNMS\OS; class Exa extends OS implements OSDiscovery { public function discoverOS(): void { $device = $this->getDeviceModel(); $info = snmp_getnext_multi($this->getDevice(), 'e7CardSoftwareVersion e7CardSerialNumber', '-OQUs', 'E7-Calix-MIB'); $device->version = $info['e7CardSoftwareVersion']; $device->serial = $info['e7CardSerialNumber']; $device->hardware = "Calix " . $device->sysDescr; $cards = explode("\n", snmp_walk($this->getDevice(), '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))); } }