#!/usr/bin/env python3 import sqlite3 p = '/volume1/xtao-data/uptime-kuma/kuma.db' con = sqlite3.connect(p) con.row_factory = sqlite3.Row cur = con.cursor() cur.execute("insert or ignore into status_page (slug,title,description,icon,theme,published,search_engine_index,show_tags,footer_text,show_powered_by,show_certificate_expiry) values (?,?,?,?,?,?,?,?,?,?,?)", ('xtao','XTAO Status','XTAO edge and control plane status','/icon.svg','light',1,0,0,'',0,1)) page_id = cur.execute("select id from status_page where slug=?", ('xtao',)).fetchone()['id'] cur.execute("insert or ignore into status_page_cname (status_page_id,domain) values (?,?)", (page_id,'status.xtao.net')) cur.execute("insert or ignore into `group` (name,public,active,weight,status_page_id) values (?,?,?,?,?)", ('NAS Edge',1,1,1000,page_id)) group_id = cur.execute("select id from `group` where name=? and status_page_id=?", ('NAS Edge', page_id)).fetchone()['id'] monitors = [ ('Traefik HTTPS','https://git.xtao.net/', 'http', 1), ('Forgejo','https://git.xtao.net/', 'http', 1), ('Status Page','https://status.xtao.net/status/xtao', 'http', 1), ('Nextcloud','https://cloud.xtao.net/status.php', 'http', 0), ] for name, url, typ, ignore_tls in monitors: row = cur.execute("select id from monitor where name=?", (name,)).fetchone() if row is None: cur.execute("insert into monitor (name,active,interval,url,type,ignore_tls,maxretries,retry_interval,accepted_statuscodes_json,method) values (?,?,?,?,?,?,?,?,?,?)", (name,1,60,url,typ,ignore_tls,1,60,'[\"200-299\"]','GET')) mon_id = cur.lastrowid else: mon_id = row['id'] cur.execute("update monitor set active=1, interval=60, url=?, type=?, ignore_tls=?, accepted_statuscodes_json='[\"200-299\"]', method='GET' where id=?", (url,typ,ignore_tls,mon_id)) cur.execute("insert or ignore into monitor_group (monitor_id,group_id,weight,send_url) values (?,?,?,?)", (mon_id,group_id,1000,0)) con.commit() print(f"PASS kuma_public_status_configured slug=xtao monitors={len(monitors)} values=redacted")