fix monitors in status pages

This commit is contained in:
lucasheld 2022-08-26 14:04:43 +02:00
parent 464d0b9e71
commit c6b3d59221
3 changed files with 51 additions and 17 deletions

View file

@ -6,12 +6,25 @@ from uptime_kuma_test_case import UptimeKumaTestCase
class TestStatusPage(UptimeKumaTestCase): class TestStatusPage(UptimeKumaTestCase):
def test_status_page(self): def test_status_page(self):
monitor_id = self.add_monitor()
slug = "slug1" slug = "slug1"
expected_status_page = { expected_status_page = {
"slug": slug, "slug": slug,
"title": "status page 1", "title": "status page 1",
"description": "description 1", "description": "description 1",
"showPoweredBy": False "showPoweredBy": False,
"publicGroupList": [
{
'name': 'Services',
'weight': 1,
'monitorList': [
{
"id": monitor_id
}
]
}
]
} }
# slug must be unique # slug must be unique
@ -35,7 +48,9 @@ class TestStatusPage(UptimeKumaTestCase):
status_pages = self.api.get_status_pages() status_pages = self.api.get_status_pages()
status_page = self.find_by_id(status_pages, slug, "slug") status_page = self.find_by_id(status_pages, slug, "slug")
self.assertIsNotNone(status_page) self.assertIsNotNone(status_page)
self.compare(status_page, expected_status_page) # publicGroupList and incident is not available in status pages
expected_status_page_config = {i: expected_status_page[i] for i in expected_status_page if i != "publicGroupList"}
self.compare(status_page, expected_status_page_config)
# edit status page # edit status page
expected_status_page["title"] = "status page 1 new" expected_status_page["title"] = "status page 1 new"

View file

@ -6,6 +6,22 @@ from uptime_kuma_api import UptimeKumaApi, Event, MonitorType
token = None token = None
def compare(subset, superset):
for key, value in subset.items():
value2 = superset.get(key)
if type(value) == list:
for i in range(len(value)):
if not value2 or not compare(value[i], value2[i]):
return False
elif type(value) == dict:
if not compare(value, value2):
return False
else:
if value != value2:
return False
return True
class UptimeKumaTestCase(unittest.TestCase): class UptimeKumaTestCase(unittest.TestCase):
api = None api = None
url = "http://127.0.0.1:3001" url = "http://127.0.0.1:3001"
@ -40,7 +56,7 @@ class UptimeKumaTestCase(unittest.TestCase):
self.api.disconnect() self.api.disconnect()
def compare(self, superset, subset): def compare(self, superset, subset):
self.assertTrue(subset.items() <= superset.items()) self.assertTrue(compare(subset, superset))
def find_by_id(self, objects, value, key="id"): def find_by_id(self, objects, value, key="id"):
for obj in objects: for obj in objects:
@ -48,7 +64,7 @@ class UptimeKumaTestCase(unittest.TestCase):
return obj return obj
def add_monitor(self): def add_monitor(self):
r = self.api.add_monitor(type="http", name="monitor 1", url="http://127.0.0.1") r = self.api.add_monitor(type=MonitorType.HTTP, name="monitor 1", url="http://127.0.0.1")
monitor_id = r["monitorID"] monitor_id = r["monitorID"]
return monitor_id return monitor_id

View file

@ -1,6 +1,7 @@
import json import json
import time import time
import requests
import socketio import socketio
from . import AuthMethod from . import AuthMethod
@ -226,18 +227,14 @@ def _build_status_page_data(
showPoweredBy: bool = True, showPoweredBy: bool = True,
icon: str = "/icon.svg", icon: str = "/icon.svg",
monitors: list = None publicGroupList: list = None
): ):
if theme not in ["light", "dark"]: if theme not in ["light", "dark"]:
raise ValueError raise ValueError
if not domainNameList: if not domainNameList:
domainNameList = [] domainNameList = []
public_group_list = [] if not publicGroupList:
if monitors: publicGroupList = []
public_group_list.append({
"name": "Services",
"monitorList": monitors
})
config = { config = {
"id": id, "id": id,
"slug": slug, "slug": slug,
@ -252,7 +249,7 @@ def _build_status_page_data(
"footerText": footerText, "footerText": footerText,
"showPoweredBy": showPoweredBy "showPoweredBy": showPoweredBy
} }
return slug, config, icon, public_group_list return slug, config, icon, publicGroupList
def _check_missing_arguments(required_params, kwargs): def _check_missing_arguments(required_params, kwargs):
@ -641,11 +638,16 @@ class UptimeKumaApi(object):
return r return r
def get_status_page(self, slug: str): def get_status_page(self, slug: str):
r = self._call('getStatusPage', slug) r1 = self._call('getStatusPage', slug)
config = r["config"] r2 = requests.get(f"{self.url}/api/status-page/{slug}").json()
del r["config"]
r.update(config) config = r1["config"]
return r config.update(r2["config"])
return {
**config,
"incident": r2["incident"],
"publicGroupList": r2["publicGroupList"]
}
def add_status_page(self, slug: str, title: str): def add_status_page(self, slug: str, title: str):
return self._call('addStatusPage', (title, slug)) return self._call('addStatusPage', (title, slug))
@ -655,6 +657,7 @@ class UptimeKumaApi(object):
def save_status_page(self, slug: str, **kwargs): def save_status_page(self, slug: str, **kwargs):
status_page = self.get_status_page(slug) status_page = self.get_status_page(slug)
status_page.pop("incident")
status_page.update(kwargs) status_page.update(kwargs)
data = _build_status_page_data(**status_page) data = _build_status_page_data(**status_page)
return self._call('saveStatusPage', data) return self._call('saveStatusPage', data)