2023-03-11 14:29:54 +01:00
|
|
|
#!/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)
|
2023-08-16 12:12:13 +02:00
|
|
|
summary = f"PHP OPCache hit rate: {render.percent(opcache_hit_rate)}"
|
2023-03-11 14:29:54 +01:00
|
|
|
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",
|
2023-08-08 09:12:08 +02:00
|
|
|
)
|