Skip to content

Commit 658fef6

Browse files
authored
Merge pull request freddy36#18 from HeinleinSupport/cmk2.4
support for cmk 2.4
2 parents 0d4a7eb + 9f1baec commit 658fef6

File tree

13 files changed

+427
-362
lines changed

13 files changed

+427
-362
lines changed

bird/lib/check_mk/base/plugins/agent_based/bird.py renamed to bird/agent_based/bird.py

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -94,25 +94,29 @@
9494
# 10000 1401204399 /etc/bird/bird.conf.common
9595
# 10000 1399909638 /etc/bird/bird.conf.local
9696

97-
from .agent_based_api.v1.type_defs import (
98-
CheckResult,
99-
DiscoveryResult,
100-
)
10197

102-
from .agent_based_api.v1 import (
98+
from collections.abc import Mapping # type: ignore
99+
from typing import Any # type: ignore
100+
101+
from cmk.agent_based.v2 import (
102+
AgentSection,
103103
check_levels,
104+
CheckPlugin,
105+
CheckResult,
106+
DiscoveryResult,
104107
get_rate,
105108
get_value_store,
106-
register,
109+
Metric,
107110
render,
108111
Result,
109-
Metric,
110-
State,
112+
RuleSetType,
111113
Service,
112-
)
114+
State,
115+
StringTable,
116+
)
113117

114118
import time
115-
import datetime
119+
import datetime # pyright: ignore[reportShadowedImports]
116120

117121
_bird_status_default_levels = {
118122
"uptime_low_threshold": 300,
@@ -244,12 +248,12 @@ def parse_bird(string_table):
244248

245249
return section
246250

247-
register.agent_section(
251+
agent_section_bird = AgentSection(
248252
name="bird",
249253
parse_function=parse_bird,
250254
)
251255

252-
register.agent_section(
256+
agent_section_bird6 = AgentSection(
253257
name="bird6",
254258
parse_function=parse_bird,
255259
)
@@ -320,12 +324,13 @@ def check_bird_memory(params, section) -> CheckResult:
320324
return
321325
for name, value_text, value_bytes in section['memory']:
322326
key = name.replace(" ", "_").split(":")[0] # memory part wasn't parsed correctly, quick fix
323-
warn, crit = params.get('memory_levels_'+key, (None, None))
324-
yield from check_levels(value_bytes,
325-
levels_upper=(warn, crit),
326-
metric_name=key,
327-
render_func=render.bytes,
328-
label=name)
327+
yield from check_levels(
328+
value_bytes,
329+
levels_upper=params.get(f"memory_levels_{key}"),
330+
metric_name=key,
331+
render_func=render.bytes,
332+
label=name,
333+
)
329334

330335
def discover_bird_protocols(section) -> DiscoveryResult:
331336
for protocol in section.get('protocols', {}):
@@ -387,7 +392,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
387392
route_stats_levels_key = limit_name.lower().rstrip('e')+"ed"
388393
crit = limit['value']
389394
warn = int(params['route_stats_levels_limit_warning_factor']/100.0 * crit)
390-
limit_bounds[route_stats_levels_key] = { 'upper': (warn, crit) }
395+
limit_bounds[route_stats_levels_key] = { "upper": ("fixed", (warn, crit)) }
391396
if limit['hit']:
392397
state = State.CRIT
393398
if limit['action'] == "warn":
@@ -400,12 +405,14 @@ def check_bird_protocols(item, params, section) -> CheckResult:
400405
bounds = limit_bounds.get(key, {})
401406
if key in route_stats_levels:
402407
bounds.update(route_stats_levels[key])
403-
yield from check_levels(value,
404-
levels_upper=bounds.get('upper', (None, None)),
405-
levels_lower=bounds.get('lower', (None, None)),
406-
metric_name="route_stats_"+key,
407-
label=key,
408-
notice_only=True)
408+
yield from check_levels(
409+
value,
410+
levels_upper=bounds.get('upper'),
411+
levels_lower=bounds.get('lower'),
412+
metric_name="route_stats_"+key,
413+
label=key,
414+
notice_only=True,
415+
)
409416

410417
this_time = time.time()
411418
value_store = get_value_store()
@@ -437,7 +444,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
437444
yield Result(state=State.WARN,
438445
summary="state of %s is %s" % (neighbour['Router_IP'], neighbour_state))
439446

440-
register.check_plugin(
447+
check_plugin_bird_status = CheckPlugin(
441448
name="bird_status",
442449
service_name="BIRD Status",
443450
sections=["bird"],
@@ -447,7 +454,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
447454
check_ruleset_name="bird_status",
448455
)
449456

450-
register.check_plugin(
457+
check_plugin_bird6_status = CheckPlugin(
451458
name="bird6_status",
452459
service_name="BIRD6 Status",
453460
sections=["bird6"],
@@ -457,7 +464,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
457464
check_ruleset_name="bird_status",
458465
)
459466

460-
register.check_plugin(
467+
check_plugin_bird_memory = CheckPlugin(
461468
name="bird_memory",
462469
service_name="BIRD Memory",
463470
sections=["bird"],
@@ -467,7 +474,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
467474
check_ruleset_name="bird_memory",
468475
)
469476

470-
register.check_plugin(
477+
check_plugin_bird5_memory = CheckPlugin(
471478
name="bird6_memory",
472479
service_name="BIRD6 Memory",
473480
sections=["bird6"],
@@ -477,7 +484,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
477484
check_ruleset_name="bird6_memory",
478485
)
479486

480-
register.check_plugin(
487+
check_plugin_bird_protocols = CheckPlugin(
481488
name="bird_protocols",
482489
service_name="BIRD Protocol %s",
483490
sections=["bird"],
@@ -487,7 +494,7 @@ def check_bird_protocols(item, params, section) -> CheckResult:
487494
check_ruleset_name="bird_protocols",
488495
)
489496

490-
register.check_plugin(
497+
check_plugin_bird6_protocols = CheckPlugin(
491498
name="bird6_protocols",
492499
service_name="BIRD6 Protocol %s",
493500
sections=["bird6"],

bird/bird

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{'author': 'Frederik Kriewitz <frederik@kriewitz.eu>',
2+
'description': 'Checks the status, memory and protocols of the BIRD Internet '
3+
'Routing Daemon.\n',
4+
'download_url': 'https://github.com/freddy36/check_mk_extensions/',
5+
'files': {'agents': ['plugins/bird'],
6+
'cmk_addons_plugins': ['bird/agent_based/bird.py',
7+
'bird/checkman/bird6_memory',
8+
'bird/checkman/bird6_protocols',
9+
'bird/checkman/bird6_status',
10+
'bird/checkman/bird_memory',
11+
'bird/checkman/bird_protocols',
12+
'bird/checkman/bird_status',
13+
'bird/graphing/metrics.py',
14+
'bird/graphing/perfometer.py',
15+
'bird/rulesets/bird.py',
16+
'bird/rulesets/bird_cee.py'],
17+
'lib': ['python3/cmk/base/cee/plugins/bakery/bird.py']},
18+
'name': 'bird',
19+
'title': 'BIRD Internet Routing Daemon Check',
20+
'version': '6.0.1',
21+
'version.min_required': '2.3.0b1',
22+
'version.packaged': '2.4.0p10',
23+
'version.usable_until': None}

bird/bird-5.0.1.mkp

-10.7 KB
Binary file not shown.

bird/bird-6.0.1.mkp

11.6 KB
Binary file not shown.

bird/graphing/metrics.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python3
2+
# -*- encoding: utf-8; py-indent-offset: 4 -*-
3+
4+
from cmk.graphing.v1 import Title, metrics
5+
6+
UNIT_BYTES = metrics.Unit(metrics.IECNotation('B'))
7+
UNIT_COUNTER = metrics.Unit(metrics.DecimalNotation(''), metrics.StrictPrecision(2))
8+
UNIT_COUNTER_IMPORTED = metrics.Unit(metrics.DecimalNotation('imported'), metrics.StrictPrecision(2))
9+
UNIT_PER_SECOND = metrics.Unit(metrics.DecimalNotation('/s'))
10+
UNIT_TIME = metrics.Unit(metrics.TimeNotation())
11+
12+
metric_Protocols = metrics.Metric(name='Protocols', title=Title("Protocols"), unit=UNIT_BYTES, color=metrics.Color.DARK_PINK,)
13+
metric_ROA_tables = metrics.Metric(name='ROA_tables', title=Title("ROA Tables"), unit=UNIT_BYTES, color=metrics.Color.DARK_PINK,)
14+
metric_Route_attributes = metrics.Metric(name='Route_attributes', title=Title("Route Attributes"), unit=UNIT_BYTES, color=metrics.Color.DARK_BLUE,)
15+
metric_Routing_tables = metrics.Metric(name='Routing_tables', title=Title("Routing Tables"), unit=UNIT_BYTES, color=metrics.Color.GREEN,)
16+
metric_Total = metrics.Metric(name='Total', title=Title("Total"), unit=UNIT_BYTES, color=metrics.Color.ORANGE,)
17+
metric_route_change_stats_Export_updates_accepted = metrics.Metric(name='route_change_stats_Export_updates_accepted', title=Title("Export updates accepted"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_PINK,)
18+
metric_route_change_stats_Export_updates_filtered = metrics.Metric(name='route_change_stats_Export_updates_filtered', title=Title("Export updates filtered"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_PURPLE,)
19+
metric_route_change_stats_Export_updates_ignored = metrics.Metric(name='route_change_stats_Export_updates_ignored', title=Title("Export updates ignored"), unit=UNIT_PER_SECOND, color=metrics.Color.PURPLE,)
20+
metric_route_change_stats_Export_updates_received = metrics.Metric(name='route_change_stats_Export_updates_received', title=Title("Export updates received"), unit=UNIT_PER_SECOND, color=metrics.Color.GREEN,)
21+
metric_route_change_stats_Export_updates_rejected = metrics.Metric(name='route_change_stats_Export_updates_rejected', title=Title("Export updates rejected"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_GRAY,)
22+
metric_route_change_stats_Export_withdraws_accepted = metrics.Metric(name='route_change_stats_Export_withdraws_accepted', title=Title("Export withdraws accepted"), unit=UNIT_PER_SECOND, color=metrics.Color.CYAN,)
23+
metric_route_change_stats_Export_withdraws_filtered = metrics.Metric(name='route_change_stats_Export_withdraws_filtered', title=Title("Export withdraws filtered"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_BLUE,)
24+
metric_route_change_stats_Export_withdraws_ignored = metrics.Metric(name='route_change_stats_Export_withdraws_ignored', title=Title("Export withdraws ignored"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_CYAN,)
25+
metric_route_change_stats_Export_withdraws_received = metrics.Metric(name='route_change_stats_Export_withdraws_received', title=Title("Export withdraws received"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_YELLOW,)
26+
metric_route_change_stats_Export_withdraws_rejected = metrics.Metric(name='route_change_stats_Export_withdraws_rejected', title=Title("Export withdraws rejected"), unit=UNIT_PER_SECOND, color=metrics.Color.LIGHT_GRAY,)
27+
metric_route_change_stats_Import_updates_accepted = metrics.Metric(name='route_change_stats_Import_updates_accepted', title=Title("Import updates accepted"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_ORANGE,)
28+
metric_route_change_stats_Import_updates_filtered = metrics.Metric(name='route_change_stats_Import_updates_filtered', title=Title("Import updates filtered"), unit=UNIT_PER_SECOND, color=metrics.Color.GREEN,)
29+
metric_route_change_stats_Import_updates_ignored = metrics.Metric(name='route_change_stats_Import_updates_ignored', title=Title("Import updates ignored"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_GRAY,)
30+
metric_route_change_stats_Import_updates_received = metrics.Metric(name='route_change_stats_Import_updates_received', title=Title("Import updates received"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_BLUE,)
31+
metric_route_change_stats_Import_updates_rejected = metrics.Metric(name='route_change_stats_Import_updates_rejected', title=Title("Import updates rejected"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_CYAN,)
32+
metric_route_change_stats_Import_withdraws_accepted = metrics.Metric(name='route_change_stats_Import_withdraws_accepted', title=Title("Import withdraws accepted"), unit=UNIT_PER_SECOND, color=metrics.Color.LIGHT_BROWN,)
33+
metric_route_change_stats_Import_withdraws_filtered = metrics.Metric(name='route_change_stats_Import_withdraws_filtered', title=Title("Import withdraws filtered"), unit=UNIT_PER_SECOND, color=metrics.Color.GRAY,)
34+
metric_route_change_stats_Import_withdraws_ignored = metrics.Metric(name='route_change_stats_Import_withdraws_ignored', title=Title("Import withdraws ignored"), unit=UNIT_PER_SECOND, color=metrics.Color.LIGHT_BROWN,)
35+
metric_route_change_stats_Import_withdraws_received = metrics.Metric(name='route_change_stats_Import_withdraws_received', title=Title("Import withdraws received"), unit=UNIT_PER_SECOND, color=metrics.Color.GREEN,)
36+
metric_route_change_stats_Import_withdraws_rejected = metrics.Metric(name='route_change_stats_Import_withdraws_rejected', title=Title("Import withdraws rejected"), unit=UNIT_PER_SECOND, color=metrics.Color.DARK_BLUE,)
37+
metric_route_stats_exported = metrics.Metric(name='route_stats_exported', title=Title("Prefixes Exported"), unit=UNIT_COUNTER, color=metrics.Color.LIGHT_PINK,)
38+
metric_route_stats_imported = metrics.Metric(name='route_stats_imported', title=Title("Prefixes Imported"), unit=UNIT_COUNTER, color=metrics.Color.DARK_PINK,)
39+
metric_route_stats_preferred = metrics.Metric(name='route_stats_preferred', title=Title("Prefixes Preferred"), unit=UNIT_COUNTER, color=metrics.Color.ORANGE,)
40+
metric_since = metrics.Metric(name='since', title=Title("Since"), unit=UNIT_TIME, color=metrics.Color.DARK_PINK,)
41+
metric_time_since_last_reconfiguration = metrics.Metric(name='time_since_last_reconfiguration', title=Title("Time since last reconfiguration"), unit=UNIT_TIME, color=metrics.Color.DARK_PINK,)

bird/graphing/perfometer.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env python3
2+
# -*- encoding: utf-8; py-indent-offset: 4 -*-
3+
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
4+
#
5+
# This file is part of the check_mk bird check.
6+
#
7+
# The check_mk bird check is free software: you can redistribute it
8+
# and/or modify it under the terms of the GNU General Public License
9+
# as published by the Free Software Foundation, either version 3 of
10+
# the License, or (at your option) any later version.
11+
#
12+
# The check_mk bird check is distributed in the hope that it will
13+
# be useful, but WITHOUT ANY WARRANTY; without even the implied
14+
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15+
# See the GNU General Public License for more details.
16+
#
17+
# You should have received a copy of the GNU General Public License
18+
# along with it. If not, see <http://www.gnu.org/licenses/>.
19+
#
20+
# Copyright 2014 by Frederik Kriewitz <frederik@kriewitz.eu>.
21+
22+
from cmk.graphing.v1 import perfometers
23+
24+
def _perfometer_bird_protocols(name: str) -> perfometers.Perfometer:
25+
return perfometers.Perfometer(
26+
name=name,
27+
focus_range=perfometers.FocusRange(
28+
lower=perfometers.Closed(0),
29+
upper=perfometers.Open(40000),
30+
),
31+
segments=["route_stats_imported"],
32+
)
33+
34+
perfometer_bird_protocols = _perfometer_bird_protocols("bird_protocols")
35+
perfometer_bird6_protocols = _perfometer_bird_protocols("bird6_protocols")
36+
37+
def _perfometer_bird_memory(name: str) -> perfometers.Perfometer:
38+
return perfometers.Perfometer(
39+
name=name,
40+
focus_range=perfometers.FocusRange(
41+
lower=perfometers.Closed(0),
42+
upper=perfometers.Open(900),
43+
),
44+
segments=["Total"],
45+
)
46+
47+
perfometer_bird_memory = _perfometer_bird_memory("bird_memory")
48+
perfometer_bird6_memory = _perfometer_bird_memory("bird6_memory")

bird/lib/python3/cmk/base/cee/plugins/bakery/bird.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@
1616
# Boston, MA 02110-1301 USA.
1717

1818
from pathlib import Path
19-
from typing import Any, Dict
19+
from typing import Any, Dict # pyright: ignore[reportShadowedImports]
2020

21-
from .bakery_api.v1 import FileGenerator, OS, Plugin, register
21+
from cmk.base.plugins.bakery.bakery_api.v1 import (
22+
FileGenerator,
23+
OS,
24+
Plugin,
25+
register,
26+
)
2227

2328
def get_bird_files(conf: Dict[str, Any]) -> FileGenerator:
24-
yield Plugin(base_os=OS.LINUX,
25-
source=Path("bird"))
29+
if conf.get("deploy"):
30+
yield Plugin(base_os=OS.LINUX,
31+
source=Path("bird"))
2632

2733
register.bakery_plugin(
2834
name="bird",

0 commit comments

Comments
 (0)