diff --git a/agent_based/checkpoint_vsx.py b/agent_based/checkpoint_vsx.py deleted file mode 100644 index 878da36edd65f48bec2a54c3c735b5f82cdd793e..0000000000000000000000000000000000000000 --- a/agent_based/checkpoint_vsx.py +++ /dev/null @@ -1,259 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# License: GNU General Public License v2 -# -# Author: thl-cmk[at]outlook[dot]com -# URL : https://thl-cmk.hopto.org -# Date : 2017-17-05 -# -# Check Point vsx Cluster status -# -# Monitor status of virtual systems in Check Point vsx/vsls cluster -# -# 2018-08-03: changed snmp scan function -# 2018-08-13: code cleanup, add metrics -# 2020-06-08: changed snmp-scan function -# 2021-09-06: rewritten for CMK 2.0 -# -# ToDo: create WATO for discovery and check function, -# if we discover other than 'virtual system' we need to adjust parse/check function -# -# snmpwalk sample -# -# .1.3.6.1.4.1.2620.1.16.22.1.1.1.3.0 = Gauge32: 2 -# .1.3.6.1.4.1.2620.1.16.22.1.1.2.3.0 = Gauge32: 2 -# .1.3.6.1.4.1.2620.1.16.22.1.1.3.3.0 = STRING: "HRI" -# .1.3.6.1.4.1.2620.1.16.22.1.1.4.3.0 = STRING: "Virtual System" -# .1.3.6.1.4.1.2620.1.16.22.1.1.5.3.0 = STRING: "10.140.1.3" -# .1.3.6.1.4.1.2620.1.16.22.1.1.6.3.0 = STRING: "Standard" -# .1.3.6.1.4.1.2620.1.16.22.1.1.7.3.0 = STRING: "Active" -# .1.3.6.1.4.1.2620.1.16.22.1.1.8.3.0 = STRING: "Trust established" -# .1.3.6.1.4.1.2620.1.16.22.1.1.9.3.0 = STRING: "Standby" -# .1.3.6.1.4.1.2620.1.16.22.1.1.10.3.0 = Gauge32: 0 -# -# .1.3.6.1.4.1.2620.1.16.23.1.1.2.3.0 = Gauge32: 40 -# .1.3.6.1.4.1.2620.1.16.23.1.1.3.3.0 = Gauge32: 864 -# .1.3.6.1.4.1.2620.1.16.23.1.1.4.3.0 = Gauge32: 14900 -# .1.3.6.1.4.1.2620.1.16.23.1.1.5.3.0 = STRING: "69459" -# .1.3.6.1.4.1.2620.1.16.23.1.1.6.3.0 = STRING: "2405" -# .1.3.6.1.4.1.2620.1.16.23.1.1.7.3.0 = STRING: "67054" -# .1.3.6.1.4.1.2620.1.16.23.1.1.8.3.0 = STRING: "0" -# .1.3.6.1.4.1.2620.1.16.23.1.1.9.3.0 = STRING: "4228862" -# .1.3.6.1.4.1.2620.1.16.23.1.1.10.3.0 = STRING: "72445" -# .1.3.6.1.4.1.2620.1.16.23.1.1.11.3.0 = STRING: "0" -# .1.3.6.1.4.1.2620.1.16.23.1.1.12.3.0 = STRING: "7074" -# .1.3.6.1.4.1.2620.1.16.23.1.1.13.3.0 = INTEGER: 0 -# -import time -from dataclasses import dataclass -from typing import List, Dict, Optional, Tuple - -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( - register, - Service, - Result, - State, - SNMPTree, - all_of, - startswith, - any_of, - equals, - Metric, - get_value_store, - get_rate, - GetRateError, -) -from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( - DiscoveryResult, - CheckResult, - StringTable, -) - - -@dataclass -class CheckpointVsx: - vsxStatusVSId: str - vsxStatusVsType: str - vsxStatusMainIP: str - vsxStatusPolicyName: str - vsxStatusVsPolicyType: str - vsxStatusSicTrustState: str - vsxStatusHAState: str - vsxStatusVSWeight: str - vsxCountersConnNum: int - vsxCountersConnPeakNum: int - vsxCountersConnTableLimit: int - metrics_rate: List[Tuple[str, int]] - - -def parse_checkpoint_vsx_system(string_table: StringTable) -> Optional[Dict[str, CheckpointVsx]]: - vsx_systems = {} - for entry in string_table: - try: - vsxStatusVSId, vsxStatusVsName, vsxStatusVsType, vsxStatusMainIP, vsxStatusPolicyName, vsxStatusVsPolicyType, \ - vsxStatusSicTrustState, vsxStatusHAState, vsxStatusVSWeight, vsxCountersConnNum, vsxCountersConnPeakNum, \ - vsxCountersConnTableLimit, vsxCountersPackets, vsxCountersDroppedTotal, vsxCountersAcceptedTotal, \ - vsxCountersRejectedTotal, vsxCountersBytesAcceptedTotal, vsxCountersBytesDroppedTotal, \ - vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal = entry - except ValueError: - return - # if vsxStatusVsType.lower() in ['virtual system']: # , 'vsx gateway', 'virtual switch', 'virtual router' - vsx_systems[vsxStatusVsName] = CheckpointVsx( - vsxStatusVSId=vsxStatusVSId, - vsxStatusVsType=vsxStatusVsType, - vsxStatusMainIP=vsxStatusMainIP, - vsxStatusPolicyName=vsxStatusPolicyName, - vsxStatusVsPolicyType=vsxStatusVsPolicyType, - vsxStatusSicTrustState=vsxStatusSicTrustState, - vsxStatusHAState=vsxStatusHAState, - vsxStatusVSWeight=vsxStatusVSWeight, - vsxCountersConnNum=int(vsxCountersConnNum), - vsxCountersConnPeakNum=int(vsxCountersConnPeakNum), - vsxCountersConnTableLimit=int(vsxCountersConnTableLimit), - metrics_rate=[ - ('packets_processed', int(vsxCountersPackets)), - ('packets_dropped', int(vsxCountersDroppedTotal)), - ('packets_accepted', int(vsxCountersAcceptedTotal)), - ('packets_rejected', int(vsxCountersRejectedTotal)), - ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)), - ('bytes_dropped', int(vsxCountersBytesDroppedTotal)), - ('bytes_rejected', int(vsxCountersBytesRejectedTotal)), - ('loggs_send', int(vsxCountersLoggedTotal)), - ], - ) - return vsx_systems - - -def discovery_checkpoint_vsx_system(params, section: Dict[str, CheckpointVsx]) -> DiscoveryResult: - for key in section.keys(): - if section[key].vsxStatusVsType.lower() in params['vsType']: - yield Service( - item=key, - parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState} - ) - - -def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) -> CheckResult: - try: - vsx = section[item] - except KeyError: - yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data') - return - - if not vsx.vsxStatusSicTrustState.lower() in ['trust established']: - yield Result(state=State.WARN, notice='SIC not established') - - if vsx.vsxStatusVsType.lower() == 'virtual system': - yield Result(state=State.OK, notice=f'System name: {item}') - yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}') - yield Result(state=State.OK, summary=f'VS ID: {vsx.vsxStatusVSId}', details='Virtual system ID:') - yield Result(state=State.OK, notice=f'System type: {vsx.vsxStatusVsType}') - - if not vsx.vsxStatusHAState.lower() in ['active', 'standby']: - yield Result(state=State.WARN, summary=f'H/A Status: {vsx.vsxStatusHAState}') - else: - yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}') - - if not vsx.vsxStatusVsPolicyType.lower() in ['active']: - yield Result(state=State.CRIT, notice='No policy installed') - - if params['policyname'] != vsx.vsxStatusPolicyName: # policy changed - yield Result( - state=State.WARN, - notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}' - ) - - if params['ha_state'] != vsx.vsxStatusHAState: # H/A state changed - yield Result( - state=State.WARN, - notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}' - ) - - yield Result(state=State.OK, notice=f'SIC status: {vsx.vsxStatusSicTrustState}') - yield Result(state=State.OK, notice=f'Weight: {vsx.vsxStatusVSWeight}') - yield Result(state=State.OK, notice=f'Policy name: {vsx.vsxStatusPolicyName}') - yield Result(state=State.OK, notice=f'Policy type: {vsx.vsxStatusVsPolicyType}') - - # metrics rate - now_time = time.time() - value_store = get_value_store() - metrics_prefix = 'checkpoint_vsx_' - - for key, value in vsx.metrics_rate: - try: - value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True) - except GetRateError: - value = 0 - yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None)) - - # metrics count - if vsx.vsxCountersConnTableLimit > 0: - yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections', - boundaries=(0, vsx.vsxCountersConnTableLimit), - levels=(None, vsx.vsxCountersConnTableLimit)) - else: - yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections') - yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak') - else: - yield Result(state=State.OK, notice=f'System name: {item}') - yield Result(state=State.OK, summary=f'Virtual system ID: {vsx.vsxStatusVSId}') - yield Result(state=State.OK, summary=f'System Type: {vsx.vsxStatusVsType}') - yield Result(state=State.OK, summary=f'SIC status: {vsx.vsxStatusSicTrustState}') - - -register.snmp_section( - name='checkpoint_vsx_system', - parse_function=parse_checkpoint_vsx_system, - supersedes=[ - 'checkpoint_vsx', - 'checkpoint_vsx_connections', - 'checkpoint_vsx_traffic', - 'checkpoint_vsx_packets', - 'checkpoint_vsx_status', - ], - fetch=SNMPTree( - base='.1.3.6.1.4.1.2620.1.16', # CHECKPOINT-MIB::vsx - oids=[ - '22.1.1.1', # vsxStatusVSId - '22.1.1.3', # vsxStatusVsName - '22.1.1.4', # vsxStatusVsType - '22.1.1.5', # vsxStatusMainIP - '22.1.1.6', # vsxStatusPolicyName - '22.1.1.7', # vsxStatusVsPolicyType - '22.1.1.8', # vsxStatusSicTrustState - '22.1.1.9', # vsxStatusHAState - '22.1.1.10', # vsxStatusVSWeight - '23.1.1.2', # vsxCountersConnNum - '23.1.1.3', # vsxCountersConnPeakNum - '23.1.1.4', # vsxCountersConnTableLimit - '23.1.1.5', # vsxCountersPackets - '23.1.1.6', # vsxCountersDroppedTotal - '23.1.1.7', # vsxCountersAcceptedTotal - '23.1.1.8', # vsxCountersRejectedTotal - '23.1.1.9', # vsxCountersBytesAcceptedTotal - '23.1.1.10', # vsxCountersBytesDroppedTotal - '23.1.1.11', # vsxCountersBytesRejectedTotal - '23.1.1.12', # vsxCountersLoggedTotal - ]), - detect=any_of( - startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'), - all_of( - equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'), - equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'), - ) - ) -) - -register.check_plugin( - name='checkpoint_vsx_system', - service_name='VSX System %s', - discovery_function=discovery_checkpoint_vsx_system, - discovery_default_parameters={ - 'vsType': ['virtual system', 'vsx gateway', 'virtual switch', 'virtual router'] - }, - discovery_ruleset_name='checkpoint_vsx_system', - check_function=check_checkpoint_vsx_system, - check_default_parameters={}, - check_ruleset_name='checkpoint_vsx_system', -)