MKP 2.4.0, added password store for app password, some changes for compatibility with NC 28
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
from pprint import pprint
|
||||
from datetime import datetime
|
||||
from .agent_based_api.v1 import register, render, Service, Result, State, Metric
|
||||
|
||||
|
||||
def getStateUpper(levels, value):
|
||||
warn, crit = levels
|
||||
if value >= crit:
|
||||
@@ -10,6 +12,7 @@ def getStateUpper(levels, value):
|
||||
return State.WARN
|
||||
return State.OK
|
||||
|
||||
|
||||
def getStateLower(levels, value):
|
||||
warn, crit = levels
|
||||
if value < crit:
|
||||
@@ -18,21 +21,32 @@ def getStateLower(levels, value):
|
||||
return State.WARN
|
||||
return State.OK
|
||||
|
||||
|
||||
def discover_nextcloud_info(section):
|
||||
yield(Service())
|
||||
|
||||
|
||||
|
||||
def check_nextcloud_info(params, section):
|
||||
for key in section:
|
||||
if key == "nextcloud":
|
||||
levels_free_space = params["levels_free_space"]
|
||||
levels_number_of_files = params["levels_number_of_files"]
|
||||
# update infos are available only from Nextcloud version 28 onwards
|
||||
try:
|
||||
last_update = section[key]["last_update"]
|
||||
update_available = section[key]["update_available"]
|
||||
last_update_human = datetime.fromtimestamp(last_update)
|
||||
except KeyError:
|
||||
last_update = "Update information not available, update to at least version 28"
|
||||
update_available = "False"
|
||||
last_update_human = "Update information not available"
|
||||
status = section[key]["status"]
|
||||
free_space = section[key]["freespace"]
|
||||
version = section[key]["version"]
|
||||
php_version = section[key]["php_version"]
|
||||
webserver = section[key]["webserver"]
|
||||
num_files = section[key]["number_files"]
|
||||
num_shares = section[key]["number_shares"]
|
||||
num_shares = section[key]["number_shares"]
|
||||
|
||||
# create graph for number of files and shares
|
||||
yield(Metric("nc_num_files", num_files))
|
||||
@@ -40,13 +54,23 @@ def check_nextcloud_info(params, section):
|
||||
|
||||
# create overall result
|
||||
summary = f"Status is {status}"
|
||||
details = f"Nextcloud version: {version}\nPHP version: {php_version}\nWebserver: {webserver}\n\nNumber of files: {num_files}\nNumber of shares: {num_shares}\n\nFree space on disk: {render.bytes(free_space)}\n"
|
||||
details = f"Nextcloud version: {version}\nLast update: {last_update_human}\nPHP version: {php_version}\nWebserver: {webserver}\n\nNumber of files: {num_files}\nNumber of shares: {num_shares}\n\nFree space on disk: {render.bytes(free_space)}\n"
|
||||
if status == "ok":
|
||||
state = State.OK
|
||||
else:
|
||||
state = State.CRIT
|
||||
yield Result(state=state, summary=summary, details=details)
|
||||
|
||||
# Create result for available updates
|
||||
if update_available != "False":
|
||||
state = State.WARN
|
||||
notice = f"Update is available"
|
||||
else:
|
||||
state = State.OK
|
||||
notice = "No update available"
|
||||
if state != State.OK:
|
||||
yield(Result(state=state, notice=notice))
|
||||
|
||||
# Create result for free space on disk
|
||||
# Levels for free space are given in GBytes, we have to adjust this here
|
||||
warn, crit = levels_free_space
|
||||
@@ -90,15 +114,20 @@ def check_nextcloud_info(params, section):
|
||||
notice = f"Number of storages: {num_storages}\nNumber of home/local/other storages: {num_storages_home}/{num_storages_local}/{num_storages_other}"
|
||||
yield(Result(state=State.OK, notice=notice))
|
||||
elif key == "apps":
|
||||
num_apps_installed = section[key]["installed"]
|
||||
num_apps_with_updates_available = section[key]["with_updates_available"]
|
||||
# create graphs for number of apps
|
||||
levels = params["levels_apps_with_updates_available"]
|
||||
yield Metric("nc_num_apps_installed", num_apps_installed)
|
||||
yield Metric("nc_apps_with_updates_available", num_apps_with_updates_available, levels=levels)
|
||||
state = getStateUpper(levels, num_apps_with_updates_available)
|
||||
notice = f"Number of installed apps: {num_apps_installed}\nNumber of apps with updates available: {num_apps_with_updates_available}"
|
||||
yield(Result(state=state, notice=notice))
|
||||
# Workaround for Nextcloud 28, "apps" info is not always available
|
||||
try:
|
||||
num_apps_installed = section[key]["installed"]
|
||||
num_apps_with_updates_available = section[key]["with_updates_available"]
|
||||
# create graphs for number of apps
|
||||
levels = params["levels_apps_with_updates_available"]
|
||||
yield Metric("nc_num_apps_installed", num_apps_installed)
|
||||
yield Metric("nc_apps_with_updates_available", num_apps_with_updates_available, levels=levels)
|
||||
state = getStateUpper(levels, num_apps_with_updates_available)
|
||||
notice = f"Number of installed apps: {num_apps_installed}\nNumber of apps with updates available: {num_apps_with_updates_available}"
|
||||
yield(Result(state=state, notice=notice))
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
|
||||
def parse_nextcloud_info_section(string_table):
|
||||
parsed_data = {
|
||||
@@ -111,6 +140,8 @@ def parse_nextcloud_info_section(string_table):
|
||||
"NC_Version",
|
||||
"NC_Freespace",
|
||||
"NC_Status",
|
||||
"NC_Last_Update",
|
||||
"NC_Update_Available",
|
||||
"NC_Webserver",
|
||||
"NC_PHP_Version",
|
||||
"NC_Num_Users",
|
||||
@@ -136,6 +167,10 @@ def parse_nextcloud_info_section(string_table):
|
||||
parsed_data["nextcloud"]["freespace"] = float(value)
|
||||
elif param == "NC_Status":
|
||||
parsed_data["nextcloud"]["status"] = value
|
||||
elif param == "NC_Last_Update":
|
||||
parsed_data["nextcloud"]["last_update"] = int(value)
|
||||
elif param == "NC_Update_Available":
|
||||
parsed_data["nextcloud"]["update_available"] = value
|
||||
elif param == "NC_Webserver":
|
||||
parsed_data["nextcloud"]["webserver"] = value
|
||||
elif param == "NC_PHP_Version":
|
||||
@@ -164,13 +199,16 @@ def parse_nextcloud_info_section(string_table):
|
||||
parsed_data["users"]["active_last1hour"] = int(value)
|
||||
elif param == "NC_Active_Users_Last_1Day":
|
||||
parsed_data["users"]["active_last1day"] = int(value)
|
||||
#pprint(parsed_data)
|
||||
return parsed_data
|
||||
|
||||
|
||||
register.agent_section(
|
||||
name="nextcloud_info",
|
||||
parse_function=parse_nextcloud_info_section,
|
||||
)
|
||||
|
||||
|
||||
register.check_plugin(
|
||||
name="nextcloud_info",
|
||||
service_name="Nextcloud Info",
|
||||
|
||||
Reference in New Issue
Block a user