From 0af90b2baa9e941bbe6b9256848cd0c8bbb277e8 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sun, 12 Sep 2021 18:16:43 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_asg_smo_counters.py    | 205 ++++++-------
 checkpoint_asg_smo_counters.mkp               | Bin 2558 -> 3373 bytes
 packages/checkpoint_asg_smo_counters          |   7 +-
 .../metrics/checkpoint_asg_smo_counters.py    | 288 ++++++++++++++++++
 4 files changed, 389 insertions(+), 111 deletions(-)
 create mode 100644 web/plugins/metrics/checkpoint_asg_smo_counters.py

diff --git a/agent_based/checkpoint_asg_smo_counters.py b/agent_based/checkpoint_asg_smo_counters.py
index f67256f..f35d377 100644
--- a/agent_based/checkpoint_asg_smo_counters.py
+++ b/agent_based/checkpoint_asg_smo_counters.py
@@ -10,7 +10,7 @@
 # Monitor Check Point Maestro SMO SGM Counters
 #
 # 2021-09-10: rewritten for CMK 2.0
-#
+# 2021-09-11: added metrics file
 #
 # sample snmpwalk 
 # .1.3.6.1.4.1.2620.1.48.20.1.0 = STRING: "111802"
@@ -35,12 +35,12 @@
 # .1.3.6.1.4.1.2620.1.48.20.20.0 = STRING: "0"
 # .1.3.6.1.4.1.2620.1.48.20.21.0 = STRING: "N/A"
 #
-# sample info
-# [[u'111802', u'0', u'84', u'91', u'N/A', u'0', u'0', u'9', u'79', u'1', u'0', u'0', u'0', u'1', u'0', u'7', u'0', u'0', u'0', u'0', u'N/A']]
+# sample string_table
+# [['111802', '0', '84', '91', 'N/A', '0', '0', '9', '79', '1', '0', '0', '0', '1', '0', '7', '0', '0', '0', '0', 'N/A']]
 #
-import time
+
 from dataclasses import dataclass
-from typing import List, Dict, NamedTuple, Optional
+from typing import Dict
 
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     register,
@@ -53,8 +53,6 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     startswith,
     any_of,
     equals,
-    check_levels,
-    render,
 )
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
     DiscoveryResult,
@@ -63,7 +61,15 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
 )
 
 
-def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, Dict[str, int]]:
+@dataclass
+class CheckpointAsgSmoCounters:
+    counters: Dict[str, int]
+    label: str
+    unit: str
+    text: str
+
+
+def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, CheckpointAsgSmoCounters]:
     items = {}
     for entry in string_table:
         asgThroughput, asgConnectionRate, asgPacketRate, asgConcurrConn, asgClearConn, asgAccelConnectionRate, \
@@ -71,120 +77,103 @@ def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, Di
         asgAccelLoadMin, asgAccelLoadMax, asgInstancesLoadAvg, asgInstancesLoadMin, asgInstancesLoadMax, \
         asgVpnThroughput, asgVpnConn, asgNatConnRate, asgNatConn, asgVsxCpu1MinAvg = entry
 
-        items['Concurrent connections'] = {
-            'asgConcurrConn': int(asgConcurrConn),
-            'asgAccelConcurrConn': int(asgAccelConcurrConn),
-            'asgNonAccelConcurrConn': int(asgNonAccelConcurrConn),
-        }
-        items['Connection rate'] = {
-            'asgConnectionRate': int(asgConnectionRate),
-            'asgAccelConnectionRate': int(asgAccelConnectionRate),
-            'asgNonAccelConnectionRate': int(asgNonAccelConnectionRate),
-        }
-
-        items['Load'] = {
-            'asgLoad': int(asgLoad),
-            'asgAccelLoadAvg': int(asgAccelLoadAvg),
-            'asgAccelLoadMin': int(asgAccelLoadMin),
-            'asgAccelLoadMax': int(asgAccelLoadMax),
-        }
-
-        items['Instances load'] = {
-            'asgInstancesLoadAvg': int(asgInstancesLoadAvg),
-            'asgInstancesLoadMin': int(asgInstancesLoadMin),
-            'asgInstancesLoadMax': int(asgInstancesLoadMax),
-        }
-        items['NAT'] = {
-            'asgNatConnRate': int(asgNatConnRate),
-            'asgNatConn': int(asgNatConn),
-        }
-        items['VPN'] = {
-            'asgVpnThroughput': int(asgVpnThroughput),
-            'asgVpnConn': int(asgVpnConn),
-        }
-        items['Throughput'] = {
-            'asgThroughput': int(asgThroughput),
-        }
-        items['Packet rate'] = {
-            'asgPacketRate': int(asgPacketRate),
-        }
-    return items
-
-
-def discovery_checkpoint_asg_smo_counters(section:Dict[str, Dict[str, int]]) -> DiscoveryResult:
-    # sample parsed
-    # {
-    #  'Load': {'asgAccelLoadAvg': 0, 'asgAccelLoadMin': 0, 'asgLoad': 1, 'asgAccelLoadMax': 0},
-    #  'Connection rate': {'asgConnectionRate': 0, 'asgNonAccelConnectionRate': 0, 'asgAccelConnectionRate': 0},
-    #  'Instances load': {'asgInstancesLoadMin': 0, 'asgInstancesLoadMax': 7, 'asgInstancesLoadAvg': 1},
-    #  'Throughput': {'asgThroughput': 111802},
-    #  'Concurrent connections': {'asgAccelConcurrConn': 9, 'asgNonAccelConcurrConn': 79, 'asgConcurrConn': 91},
-    #  'NAT': {'asgNatConn': 0, 'asgNatConnRate': 0},
-    #  'VPN': {'asgVpnConn': 0, 'asgVpnThroughput': 0},
-    #  'Packet rate': {'asgPacketRate': 84}}
-    #
+        items['Concurrent connections'] = CheckpointAsgSmoCounters(
+            counters={
+                'concurr_conn': int(asgConcurrConn),
+                'accel_concurr_conn': int(asgAccelConcurrConn),
+                'non_accel_concurr_conn': int(asgNonAccelConcurrConn),
+            },
+            label='all/accelerated/non accelerated',
+            unit='connections',
+            text=f'{int(asgConcurrConn):d}/{int(asgAccelConcurrConn):d}/{int(asgNonAccelConcurrConn):d}',
+        )
+        items['Connection rate'] = CheckpointAsgSmoCounters(
+            counters={
+                'connection_rate': int(asgConnectionRate),
+                'accel_connection_rate': int(asgAccelConnectionRate),
+                'non_accel_connection_rate': int(asgNonAccelConnectionRate),
+            },
+            label='current/average/min/max',
+            unit='connections/s',
+            text=f'{int(asgLoad):d}/{int(asgAccelLoadAvg):d}/{int(asgAccelLoadMin):d}/{int(asgAccelLoadMax):d}',
+        )
+        items['Load'] = CheckpointAsgSmoCounters(
+            counters={
+                'load': int(asgLoad),
+                'accel_load_avg': int(asgAccelLoadAvg),
+                'accel_load_min': int(asgAccelLoadMin),
+                'accel_load_max': int(asgAccelLoadMax),
+            },
+            label='current/average/min/max',
+            unit='%',
+            text=f'{int(asgLoad):d}/{int(asgAccelLoadAvg):d}/{int(asgAccelLoadMin):d}/{int(asgAccelLoadMax):d}',
+        )
+        items['Instances load'] = CheckpointAsgSmoCounters(
+            counters={
+                'instances_load_avg': int(asgInstancesLoadAvg),
+                'instances_load_min': int(asgInstancesLoadMin),
+                'instances_load_max': int(asgInstancesLoadMax),
+            },
+            label='average/min/max',
+            unit='%',
+            text=f'{int(asgInstancesLoadAvg):d}/{int(asgInstancesLoadMin):d}/{int(asgInstancesLoadMax):d}',
+        )
+        items['NAT'] = CheckpointAsgSmoCounters(
+            counters={
+                'nat_conn_rate': int(asgNatConnRate),
+                'nat_conn': int(asgNatConn),
+            },
+            label='NAT Connections/NAT connection rate',
+            unit='connections',
+            text=f'{int(asgNatConn):d}/{int(asgNatConn):d}',
+        )
+        items['VPN'] = CheckpointAsgSmoCounters(
+            counters={
+                'vpn_throughput': int(asgVpnThroughput),
+                'vpn_conn': int(asgVpnConn),
+            },
+            label='VPN Connections/VPN Throughput',
+            unit='',
+            text=f'{int(asgVpnConn):d}/{int(asgVpnThroughput):d}',
+        )
+        items['Throughput'] = CheckpointAsgSmoCounters(
+            counters={
+                'throughput': int(asgThroughput),
+            },
+            label='Throughput',
+            unit='Bytes/s',
+            text=f'{int(asgThroughput):d}'
+        )
+        items['Packet rate'] = CheckpointAsgSmoCounters(
+            counters={
+                'packet_rate': int(asgPacketRate),
+            },
+            label='Packet Rate',
+            unit='Packets/s',
+            text=f'{int(asgPacketRate):d}',
+        )
+    if items:
+        return items
+
 
+def discovery_checkpoint_asg_smo_counters(section:Dict[str, CheckpointAsgSmoCounters]) -> DiscoveryResult:
     for item in section.keys():
         yield Service(item=item)
 
 
-def check_checkpoint_asg_smo_counters(item, params, section:Dict[str, Dict[str, int]]) -> CheckResult:
+def check_checkpoint_asg_smo_counters(item, params, section: Dict[str, CheckpointAsgSmoCounters]) -> CheckResult:
     try:
         entry = section[item]
     except KeyError:
         yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data')
         return
 
-    for key in entry.keys():
-        yield Metric(value=entry[key], name=f'checkpoint_asg_mso_counters_{key}')
+    for key in entry.counters.keys():
+        yield Metric(value=entry.counters[key], name=f'checkpoint_asg_smo_counters_{key}')
 
-    if item.lower() == 'concurrent connections':
-        yield Result(
-            state=State.OK,
-            summary=f'all/accelerated/non accelerated: {entry["asgConcurrConn"]:d}/{entry["asgAccelConcurrConn"]:d}/{entry["asgNonAccelConcurrConn"]:d}'
-        )
-
-    elif item.lower() == 'load':
-        yield Result(
-            state=State.OK,
-            summary=f'current/average/min/max: {entry["asgLoad"]:d}/{entry["asgAccelLoadAvg"]:d}/{entry["asgAccelLoadMin"]:d}/{entry["asgAccelLoadMax"]:d}'
-        )
+    yield Result(state=State.OK, summary=f'{entry.label}: {entry.text}')
 
-    elif item.lower() == 'connection rate':
-        yield Result(
-            state=State.OK,
-            summary=f'all/accelerated/non accelerated: {entry["asgConnectionRate"]:d}/{entry["asgAccelConnectionRate"]:d}/{entry["asgNonAccelConnectionRate"]:d}'
-        )
 
-    elif item.lower() == 'instances load':
-        yield Result(
-            state=State.OK,
-            summary=f'average/min/max: {entry["asgInstancesLoadAvg"]:d}/{entry["asgInstancesLoadMin"]:d}/{entry["asgInstancesLoadMax"]:d}'
-        )
-
-    elif item.lower() == 'throughput':
-        yield Result(
-            state=State.OK,
-            summary=f'Throughput: {entry["asgThroughput"]:d}'
-        )
-
-    elif item.lower() == 'packet rate':
-        yield Result(
-            state=State.OK,
-            summary=f'Packet Rate: {entry["asgPacketRate"]:d}'
-        )
-
-    elif item.lower() == 'nat':
-        yield Result(
-            state=State.OK,
-            summary=f'NAT Connections/NAT connection rate: {entry["asgNatConn"]:d}/{entry["asgNatConn"]:d}'
-        )
-
-    elif item.lower() == 'vpn':
-        yield Result(
-            state=State.OK,
-            summary=f'VPN Connections/VPN Throughput: {entry["asgVpnConn"]:d}/{entry["asgVpnThroughput"]:d}'
-        )
 
 
 register.snmp_section(
diff --git a/checkpoint_asg_smo_counters.mkp b/checkpoint_asg_smo_counters.mkp
index 12a3e8c8a121b008617504a9f0b1343b8d0323d2..4dd5a4a8ae1485f815bd9b8637e39ed3171fea9d 100644
GIT binary patch
delta 3338
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
Ulg<ew3}>MK0@8^mD*$)^05<xH%>V!Z

delta 2514
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

diff --git a/packages/checkpoint_asg_smo_counters b/packages/checkpoint_asg_smo_counters
index aa77ead..9d0e3be 100644
--- a/packages/checkpoint_asg_smo_counters
+++ b/packages/checkpoint_asg_smo_counters
@@ -1,11 +1,12 @@
 {'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
  'description': 'Monitor Check Point Maestro SMO performance counters\n',
  'download_url': 'http://thl-cmk.hopto.org/',
- 'files': {'agent_based': ['checkpoint_asg_smo_counters.py']},
+ 'files': {'agent_based': ['checkpoint_asg_smo_counters.py'],
+           'web': ['plugins/metrics/checkpoint_asg_smo_counters.py']},
  'name': 'checkpoint_asg_smo_counters',
- 'num_files': 1,
+ 'num_files': 2,
  'title': 'Check Point Maestro SMO performance counters',
- 'version': '20210910.v0.2',
+ 'version': '20210911.v0.2a',
  'version.min_required': '2.0.0',
  'version.packaged': '2021.07.14',
  'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/metrics/checkpoint_asg_smo_counters.py b/web/plugins/metrics/checkpoint_asg_smo_counters.py
new file mode 100644
index 0000000..c59c14d
--- /dev/null
+++ b/web/plugins/metrics/checkpoint_asg_smo_counters.py
@@ -0,0 +1,288 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+)
+
+metric_info['checkpoint_asg_smo_counters_concurr_conn'] = {
+    'title': _('Connections'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_concurr_conn'] = {
+    'title': _('Connections Accelerated'),
+    'unit': 'count',
+    'color': '32/a',
+}
+metric_info['checkpoint_asg_smo_counters_non_accel_concurr_conn'] = {
+    'title': _('Connections non Accelerated'),
+    'unit': 'count',
+    'color': '16/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_connection_rate'] = {
+    'title': _('Connection Rate'),
+    'unit': '1/s',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_connection_rate'] = {
+    'title': _('Connection Rate Accelerated'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+metric_info['checkpoint_asg_smo_counters_non_accel_connection_rate'] = {
+    'title': _('Connection Rate non Accelerated'),
+    'unit': '1/s',
+    'color': '16/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_load'] = {
+    'title': _('Load'),
+    'unit': '%',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_load_max'] = {
+    'title': _('Accel load (max)'),
+    'unit': '%',
+    'color': '31/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_load_avg'] = {
+    'title': _('Accel load (avg)'),
+    'unit': '%',
+    'color': '16/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_load_min'] = {
+    'title': _('Accel load (min)'),
+    'unit': '%',
+    'color': '11/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_instances_load_avg'] = {
+    'title': _('Instances load (avg)'),
+    'unit': '%',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_instances_load_min'] = {
+    'title': _('Instances load (min)'),
+    'unit': '%',
+    'color': '32/a',
+}
+metric_info['checkpoint_asg_smo_counters_instances_load_max'] = {
+    'title': _('Instances load (max)'),
+    'unit': '%',
+    'color': '16/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_nat_conn'] = {
+    'title': _('NAT connections'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_nat_conn_rate'] = {
+    'title': _('NAT Conn Rate'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_vpn_conn'] = {
+    'title': _('VPN connections'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_vpn_throughput'] = {
+    'title': _('VPN Throughput'),
+    'unit': 'bytes/s',
+    'color': '32/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_throughput'] = {
+    'title': _('Throughput'),
+    'unit': 'bytes/s',
+    'color': '26/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_packet_rate'] = {
+    'title': _('Packet Rate'),
+    'unit': '1/s',
+    'color': '26/a',
+}
+
+graph_info['checkpoint_asg_smo_counters_connections'] = {
+    'title': _('Check Point SMO Concurrent Connections'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_non_accel_concurr_conn', 'line'),
+        ('checkpoint_asg_smo_counters_accel_concurr_conn', 'line'),
+        ('checkpoint_asg_smo_counters_concurr_conn', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_concurr_conn:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_connection_rate'] = {
+    'title': _('Check Point SMO Counter Connection Rate'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_non_accel_connection_rate', 'line'),
+        ('checkpoint_asg_smo_counters_accel_connection_rate', 'line'),
+        ('checkpoint_asg_smo_counters_connection_rate', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_connection_rate:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_accel_load'] = {
+    'title': _('Check Point SMO Counter Load'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_accel_load_min', 'line'),
+        ('checkpoint_asg_smo_counters_accel_load_avg', 'line'),
+        ('checkpoint_asg_smo_counters_accel_load_max', 'line'),
+        ('checkpoint_asg_smo_counters_load', 'area'),
+    ],
+    'range': (0, 110),
+}
+
+graph_info['checkpoint_asg_smo_counters_instances_load'] = {
+    'title': _('Check Point SMO Counter Instances Load'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_instances_load_min', 'line'),
+        ('checkpoint_asg_smo_counters_instances_load_avg', 'area'),
+        ('checkpoint_asg_smo_counters_instances_load_max', 'line'),
+    ],
+    'range': (0, 110),
+}
+
+graph_info['checkpoint_asg_smo_counters_nat_conn'] = {
+    'title': _('Check Point SMO Counter NAT connections'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_nat_conn', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_nat_conn:max'),
+}
+graph_info['checkpoint_asg_smo_counters_nat_conn_rate'] = {
+    'title': _('Check Point SMO Counter NAT connection rate'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_nat_conn_rate', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_nat_conn_rate:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_vpn_conn'] = {
+    'title': _('Check Point SMO Counter VPN connections'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_vpn_conn', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_vpn_conn:max'),
+}
+graph_info['checkpoint_asg_smo_counters_vpn_throughput'] = {
+    'title': _('Check Point SGM Counter VPN Throughput'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_vpn_throughput', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_vpn_throughput:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_throughput'] = {
+    'title': _('Check Point SGM Counter Throughput'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_throughput', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_throughput:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_packet_rate'] = {
+    'title': _('Check Point SMO Counter Packet Rate'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_packet_rate', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_packet_rate:max'),
+}
+
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_accel_concurr_conn',
+        'half_value': 100000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_non_accel_concurr_conn',
+        'half_value': 100000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_accel_connection_rate',
+        'half_value': 10000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_non_accel_connection_rate',
+        'half_value': 10000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append({
+    'type': 'linear',
+    'segments': ['checkpoint_asg_smo_counters_accel_load_avg'],
+    'total': 100,
+})
+
+perfometer_info.append({
+    'type': 'linear',
+    'segments': ['checkpoint_asg_smo_counters_instances_load_avg'],
+    'total': 100,
+})
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_nat_conn',
+        'half_value': 10000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_nat_conn_rate',
+        'half_value': 500.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_vpn_conn',
+        'half_value': 500.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_vpn_throughput',
+        'half_value': 2592000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append({
+    'type': 'logarithmic',
+    'metric': 'checkpoint_asg_smo_counters_throughput',
+    'half_value': 500.0,
+    'exponent': 2,
+})
+
+perfometer_info.append({
+    'type': 'logarithmic',
+    'metric': 'checkpoint_asg_smo_counters_packet_rate',
+    'half_value': 100000.0,
+    'exponent': 2,
+})
-- 
GitLab