. * * @package LibreNMS * @link https://www.librenms.org * @copyright 2020 Tony Murray * @author Tony Murray */ namespace LibreNMS\OS; use LibreNMS\Interfaces\Data\DataStorageInterface; use LibreNMS\Interfaces\Polling\OSPolling; use LibreNMS\OS\Shared\Unix; use LibreNMS\RRD\RrdDefinition; class Pfsense extends Unix implements OSPolling { public function pollOS(DataStorageInterface $datastore): void { $oids = snmp_get_multi($this->getDeviceArray(), [ 'pfStateTableCount.0', 'pfStateTableSearches.0', 'pfStateTableInserts.0', 'pfStateTableRemovals.0', 'pfCounterMatch.0', 'pfCounterBadOffset.0', 'pfCounterFragment.0', 'pfCounterShort.0', 'pfCounterNormalize.0', 'pfCounterMemDrop.0', ], '-OQUs', 'BEGEMOT-PF-MIB'); if (is_numeric($oids[0]['pfStateTableCount'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('states', 'GAUGE', 0); $fields = [ 'states' => $oids[0]['pfStateTableCount'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_states', $tags, $fields); $this->enableGraph('pf_states'); } if (is_numeric($oids[0]['pfStateTableSearches'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('searches', 'COUNTER', 0); $fields = [ 'searches' => $oids[0]['pfStateTableSearches'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_searches', $tags, $fields); $this->enableGraph('pf_searches'); } if (is_numeric($oids[0]['pfStateTableInserts'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('inserts', 'COUNTER', 0); $fields = [ 'inserts' => $oids[0]['pfStateTableInserts'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_inserts', $tags, $fields); $this->enableGraph('pf_inserts'); } if (is_numeric($oids[0]['pfStateTableRemovals'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('removals', 'COUNTER', 0); $fields = [ 'removals' => $oids[0]['pfStateTableRemovals'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_removals', $tags, $fields); $this->enableGraph('pf_removals'); } if (is_numeric($oids[0]['pfCounterMatch'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('matches', 'COUNTER', 0); $fields = [ 'matches' => $oids[0]['pfCounterMatch'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_matches', $tags, $fields); $this->enableGraph('pf_matches'); } if (is_numeric($oids[0]['pfCounterBadOffset'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('badoffset', 'COUNTER', 0); $fields = [ 'badoffset' => $oids[0]['pfCounterBadOffset'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_badoffset', $tags, $fields); $this->enableGraph('pf_badoffset'); } if (is_numeric($oids[0]['pfCounterFragment'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('fragmented', 'COUNTER', 0); $fields = [ 'fragmented' => $oids[0]['pfCounterFragment'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_fragmented', $tags, $fields); $this->enableGraph('pf_fragmented'); } if (is_numeric($oids[0]['pfCounterShort'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('short', 'COUNTER', 0); $fields = [ 'short' => $oids[0]['pfCounterShort'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_short', $tags, $fields); $this->enableGraph('pf_short'); } if (is_numeric($oids[0]['pfCounterNormalize'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('normalized', 'COUNTER', 0); $fields = [ 'normalized' => $oids[0]['pfCounterNormalize'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_normalized', $tags, $fields); $this->enableGraph('pf_normalized'); } if (is_numeric($oids[0]['pfCounterMemDrop'] ?? null)) { $rrd_def = RrdDefinition::make()->addDataset('memdropped', 'COUNTER', 0); $fields = [ 'memdropped' => $oids[0]['pfCounterMemDrop'], ]; $tags = compact('rrd_def'); $datastore->put($this->getDeviceArray(), 'pf_memdropped', $tags, $fields); $this->enableGraph('pf_memdropped'); } } }