#!/usr/bin/env python3 from pprint import pprint from .agent_based_api.v1 import register, render, Service, Result, State, Metric def getStateUpper(levels, value): warn, crit = levels if value >= crit: return State.CRIT if value >= warn: return State.WARN return State.OK def getStateLower(levels, value): warn, crit = levels if value < crit: return State.CRIT if value < warn: return State.WARN return State.OK def discover_nextcloud_database(section): yield(Service()) def check_nextcloud_database(params, section): for key in section: if key == "database": opcache_hit_rate = section[key]["opcache_hit_rate"] size = section[key]["size"] type = section[key]["type"] version = section[key]["version"] levels = params["levels_database_opcache_hit_rate"] # create graph for opcache hit rate yield Metric("nc_database_opcache_hit_rate", opcache_hit_rate, levels=levels) # create graph for database size yield Metric("nc_database_size", size) state = getStateLower(levels, opcache_hit_rate) summary = f"PHP OPCache hit rate: {render.percent(opcache_hit_rate)}" details = f"\nDatabase type: {type}\nDatabase version: {version}\nDatabase size: {render.bytes(size)}" yield(Result(state=state, summary=summary, details=details)) def parse_nextcloud_database_section(string_table): parsed_data = { "database" : {} } params_list = [ "NC_Database_Type", "NC_Database_Version", "NC_Database_Size", "NC_OPCache_Hit_Rate" ] for line in string_table: if line[0] in params_list: param = line[0] value = line[1] if param == "NC_Database_Type": parsed_data["database"]["type"] = value elif param == "NC_Database_Version": parsed_data["database"]["version"] = value elif param == "NC_Database_Size": parsed_data["database"]["size"] = int(value) elif param == "NC_OPCache_Hit_Rate": parsed_data["database"]["opcache_hit_rate"] = float(value) return parsed_data register.agent_section( name="nextcloud_database", parse_function=parse_nextcloud_database_section, ) register.check_plugin( name="nextcloud_database", service_name="Nextcloud Database", discovery_function=discover_nextcloud_database, check_function=check_nextcloud_database, check_default_parameters={ "levels_database_opcache_hit_rate": (99.7, 99.1), }, check_ruleset_name="nextcloud_database", )