. * * @package LibreNMS * @link https://www.librenms.org * @copyright 2020 Tony Murray * @author Tony Murray */ namespace LibreNMS\OS; use App\Models\Device; use LibreNMS\Device\WirelessSensor; use LibreNMS\Interfaces\Discovery\Sensors\WirelessApCountDiscovery; use LibreNMS\Interfaces\Discovery\Sensors\WirelessClientsDiscovery; use LibreNMS\Interfaces\Polling\OSPolling; use LibreNMS\OS\Shared\Fortinet; use LibreNMS\RRD\RrdDefinition; class Fortigate extends Fortinet implements OSPolling, WirelessClientsDiscovery, WirelessApCountDiscovery { public function discoverOS(Device $device): void { parent::discoverOS($device); // yaml $device->hardware = $device->hardware ?: $this->getHardwareName(); } public function pollOS(): void { $sessions = snmp_get($this->getDeviceArray(), 'FORTINET-FORTIGATE-MIB::fgSysSesCount.0', '-Ovq'); if (is_numeric($sessions)) { $rrd_def = RrdDefinition::make()->addDataset('sessions', 'GAUGE', 0, 3000000); echo "Sessions: $sessions\n"; $fields = [ 'sessions' => $sessions, ]; $tags = compact('rrd_def'); app()->make('Datastore')->put($this->getDeviceArray(), 'fortigate_sessions', $tags, $fields); $this->enableGraph('fortigate_sessions'); } $cpu_usage = snmp_get($this->getDeviceArray(), 'FORTINET-FORTIGATE-MIB::fgSysCpuUsage.0', '-Ovq'); if (is_numeric($cpu_usage)) { $rrd_def = RrdDefinition::make()->addDataset('LOAD', 'GAUGE', -1, 100); echo "CPU: $cpu_usage%\n"; $fields = [ 'LOAD' => $cpu_usage, ]; $tags = compact('rrd_def'); app()->make('Datastore')->put($this->getDeviceArray(), 'fortigate_cpu', $tags, $fields); $this->enableGraph('fortigate_cpu'); } } public function discoverWirelessClients() { $oid = '.1.3.6.1.4.1.12356.101.14.2.7.0'; return [ new WirelessSensor('clients', $this->getDeviceId(), $oid, 'fortigate', 1, 'Clients: Total'), ]; } public function discoverWirelessApCount() { $oid = '.1.3.6.1.4.1.12356.101.14.2.5.0'; return [ new WirelessSensor('ap-count', $this->getDeviceId(), $oid, 'fortigate', 1, 'Connected APs'), ]; } }