feat: expose live enterprise domain presence
This commit is contained in:
parent
406e9d8a7d
commit
ef1734baee
4 changed files with 81 additions and 2 deletions
|
|
@ -36,6 +36,12 @@ DOMAINS = {
|
|||
}
|
||||
ENTERPRISE_MANAGED_DOMAINS = {"DOMAIN-ZS", "DOMAIN-MAIN", "DOMAIN-SUB", "DOMAIN-ZERO"}
|
||||
EXTERNAL_FOUNDATION_DOMAINS = {"DOMAIN-FIFTH"}
|
||||
HOSTED_DOMAIN_NODES = {
|
||||
"DOMAIN-MAIN": ("AW-GZ-001-MAIN", "AW-GZ-001 · 光湖主域"),
|
||||
"DOMAIN-SUB": ("AW-GZ-001-SUB", "AW-GZ-001 · 光湖分域"),
|
||||
"DOMAIN-ZERO": ("AW-GZ-001-ZERO", "AW-GZ-001 · 光湖零域"),
|
||||
"DOMAIN-ZS": ("AW-GZ-001-ZS", "AW-GZ-001 · 光湖零感域"),
|
||||
}
|
||||
|
||||
|
||||
def now():
|
||||
|
|
@ -77,9 +83,28 @@ def connection():
|
|||
capsule_hash TEXT NOT NULL, created_at INTEGER NOT NULL, expires_at INTEGER NOT NULL
|
||||
);
|
||||
""")
|
||||
observed_at = now()
|
||||
for domain_id, name in DOMAINS.items():
|
||||
state = "EXTERNAL_PRIVATE_FOUNDATION" if domain_id in EXTERNAL_FOUNDATION_DOMAINS else "PENDING_ENTRY_NODE"
|
||||
db.execute("INSERT OR IGNORE INTO domains VALUES (?, ?, ?, ?)", (domain_id, name, state, now()))
|
||||
db.execute("INSERT OR IGNORE INTO domains VALUES (?, ?, ?, ?)", (domain_id, name, state, observed_at))
|
||||
for domain_id, (node_id, display_name) in HOSTED_DOMAIN_NODES.items():
|
||||
db.execute(
|
||||
"INSERT OR IGNORE INTO nodes VALUES (?, ?, NULL, 'ACTIVE', ?, '127.0.0.1', ?, ?, ?, ?)",
|
||||
(
|
||||
node_id,
|
||||
domain_id,
|
||||
display_name,
|
||||
json.dumps(["health_check"]),
|
||||
"server-local-lighthouse",
|
||||
observed_at,
|
||||
observed_at,
|
||||
),
|
||||
)
|
||||
db.execute(
|
||||
"UPDATE nodes SET state='ACTIVE', last_heartbeat=? WHERE id=?",
|
||||
(observed_at, node_id),
|
||||
)
|
||||
db.execute("UPDATE domains SET state='HOSTED_ACTIVE' WHERE id=?", (domain_id,))
|
||||
db.commit()
|
||||
return db
|
||||
|
||||
|
|
@ -250,7 +275,16 @@ class Handler(BaseHTTPRequestHandler):
|
|||
return self.respond(200, {"ok": True, "service": "guanghu-enterprise-lighthouse", "mode": "map-intent-agent-gate", "map_hash": map_hash, "execution": "disabled"})
|
||||
if self.path == "/v1/status":
|
||||
counts = {row["state"]: row["count"] for row in db.execute("SELECT state, COUNT(*) AS count FROM nodes GROUP BY state")}
|
||||
return self.respond(200, {"ok": True, "domains": [dict(row) for row in db.execute("SELECT id,name,state FROM domains ORDER BY id")], "node_counts": counts, "fixed_actions": sorted(FIXED_ACTIONS), "raw_shell": "rejected"})
|
||||
return self.respond(200, {
|
||||
"ok": True,
|
||||
"node_id": "AW-GZ-001",
|
||||
"host_state": "ONLINE",
|
||||
"observed_at": now(),
|
||||
"domains": [dict(row) for row in db.execute("SELECT id,name,state FROM domains ORDER BY id")],
|
||||
"node_counts": counts,
|
||||
"fixed_actions": sorted(FIXED_ACTIONS),
|
||||
"raw_shell": "rejected",
|
||||
})
|
||||
if self.path in {"/v1/navigation-map", "/v2/global-navigation-map"}:
|
||||
try:
|
||||
body, map_hash = navigation_map()
|
||||
|
|
|
|||
Loading…
Reference in a new issue