39 lines
981 B
Python
39 lines
981 B
Python
# retoor <retoor@molodetz.nl>
|
|
import json
|
|
|
|
from molodetz.database.core import db, now_iso
|
|
|
|
|
|
def get_service_state(name):
|
|
if "service_state" not in db.tables:
|
|
return None
|
|
return db["service_state"].find_one(name=name)
|
|
|
|
|
|
def ensure_service_state(name):
|
|
row = get_service_state(name)
|
|
if row:
|
|
return row["id"]
|
|
return db["service_state"].insert(
|
|
{
|
|
"name": name,
|
|
"status": "stopped",
|
|
"last_run": None,
|
|
"next_run": None,
|
|
"started_at": None,
|
|
"heartbeat": None,
|
|
"logs": "[]",
|
|
"metrics": "{}",
|
|
"updated_at": now_iso(),
|
|
}
|
|
)
|
|
|
|
|
|
def write_service_state(row_id, **fields):
|
|
for key in ("logs", "metrics"):
|
|
if key in fields and not isinstance(fields[key], str):
|
|
fields[key] = json.dumps(fields[key])
|
|
fields["id"] = row_id
|
|
fields["updated_at"] = now_iso()
|
|
db["service_state"].update(fields, ["id"])
|