Summary number als integer in agent plugin

Hi,
I have written an agent plugin, that should print the value in the summary as integer, but I have: “events failure: 0.00”

I am using: cmk.agent_based.v2

Here is the relevant part, where I define events_failure as int.

    events_failure = int(section.get("events_failure"))
    yield from check_levels(
        events_failure,
        levels_upper = (events_failed_level),
        label = "events failure",
    )

Do I need to define integer somehow in the check_levels function?

Can somebody please help me?

Best regards,
Andreas

1 Like

If you do not supply a render function to check_levels, then it displays the values as a float with 2 digits precision (%.2f) by default.

In the module ~/lib/python3/cmk/base/api/agent_based/render.py are various render functions defined, e.g. render.bytes (which adds the unit B/kB/GB etc.) or render.percent etc.

There is no render function for simple integers, but you can supply your own:

# renders a given number as a string with thousands separator:
def my_render_func(value) -> str:
    return  f"{value:,d}"

yield from check_levels(
    events_failure,
    levels_upper = (events_failed_level),
    label = "events failure",
    render_func = my_render_func
)

# or with a lambda function instead of an explicit function:
yield from check_levels(
    events_failure,
    levels_upper = (events_failed_level),
    label = "events failure",
    render_func = lambda value: f"{value:,d}"
)

If you want to use any of the predefined render functions, you can do it like so:

from cmk.base.plugins.agent_based.agent_based_api.v1 import render

yield from check_levels(
    ...
    render_func = render.filesize
)
1 Like

Thank you, that solves my questions.