Add Gitea remote info to CLAUDE.md; implement vendor integrations and remove FortiGate modules
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,8 +10,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `App portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `App portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from app portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,8 +10,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `App portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `App portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from app portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
export const name = "DRC";
|
||||
export const url = "https://wbte.drcedirect.com/PA/portals/pa";
|
||||
export const url = "https://status.drcedirect.com/PA";
|
||||
|
||||
// status.drcedirect.com is a JS-rendered Angular app with no accessible API.
|
||||
// Synthetic check against the PA INSIGHT portal instead.
|
||||
const PROBE_URL = "https://wbte.drcedirect.com/PA/portals/pa";
|
||||
// Note: /PA/portals/pa returns 500 — /PA/ is the correct probe path.
|
||||
const PROBE_URL = "https://wbte.drcedirect.com/PA/";
|
||||
|
||||
export async function checkStatus() {
|
||||
const res = await fetch(PROBE_URL, { method: "HEAD" });
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `PA INSIGHT portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `PA INSIGHT portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from PA INSIGHT portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -11,8 +11,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `Portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `Portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,8 +10,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `Destiny portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `Destiny portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from Destiny portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,8 +10,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `ConnectED portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `ConnectED portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from ConnectED portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export const name = "Microsoft 365";
|
||||
export const url = "https://admin.microsoft.com/Adminportal/Home#/servicehealth";
|
||||
export const url = "https://status.cloud.microsoft/m365/referrer=serviceStatusRedirect";
|
||||
|
||||
const GRAPH_HEALTH_URL =
|
||||
"https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews";
|
||||
|
||||
@@ -10,8 +10,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `Site responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `Site responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from site (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -26,10 +26,19 @@ export async function checkStatus() {
|
||||
const status = mapStatusCode(overall.status_code);
|
||||
|
||||
const incidents = result.incidents ?? [];
|
||||
let message;
|
||||
|
||||
if (incidents.length > 0) {
|
||||
message = incidents
|
||||
// Only surface incidents still being actively investigated or identified.
|
||||
// State 300 = Monitoring (fix deployed), 400 = Resolved — exclude both.
|
||||
const activeIncidents = incidents.filter((i) => {
|
||||
const messages = i.messages ?? [];
|
||||
if (messages.length === 0) return true;
|
||||
const latestState = messages[messages.length - 1].state;
|
||||
return latestState < 300;
|
||||
});
|
||||
|
||||
let message;
|
||||
if (activeIncidents.length > 0) {
|
||||
message = activeIncidents
|
||||
.map((i) => {
|
||||
const components = (i.containers_affected ?? [])
|
||||
.map((c) => c.name)
|
||||
|
||||
@@ -15,6 +15,16 @@ const HEADERS = {
|
||||
export async function checkStatus() {
|
||||
const res = await fetch(PROBE_URL, { method: "GET", headers: HEADERS });
|
||||
|
||||
// Cloudflare managed challenge — JS required, not a real error
|
||||
if (res.headers.get("cf-mitigated") === "challenge") {
|
||||
return {
|
||||
name,
|
||||
status: "unknown",
|
||||
message: "Cloudflare challenge blocked synthetic check — status cannot be determined.",
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
name,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
|
||||
@@ -10,8 +10,10 @@ export async function checkStatus() {
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `Admin portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `Admin portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from admin portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
export const name = "SherpaDesk";
|
||||
export const url = "https://app.sherpadesk.com/new/login/";
|
||||
export const url = "https://nhsd.sherpadesk.com/";
|
||||
|
||||
// No usable public status API — status.sherpadesk.com is a Pingdom uptime
|
||||
// report page with an invalid cert. Synthetic check against the app portal.
|
||||
const PROBE_URL = "https://app.sherpadesk.com/new/login/";
|
||||
// No usable public status API. Synthetic check against the district portal.
|
||||
// HEAD returns 404 on this host — use GET.
|
||||
const PROBE_URL = "https://nhsd.sherpadesk.com/";
|
||||
|
||||
export async function checkStatus() {
|
||||
const res = await fetch(PROBE_URL, { method: "HEAD" });
|
||||
const res = await fetch(PROBE_URL, { method: "GET" });
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `App portal responding (HTTP ${res.status}).`,
|
||||
status: res.ok ? "operational" : "degraded",
|
||||
message: res.ok
|
||||
? `App portal responding (HTTP ${res.status}).`
|
||||
: `Unexpected response from app portal (HTTP ${res.status}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -37,11 +37,14 @@ function probe(host) {
|
||||
|
||||
export async function checkStatus() {
|
||||
const statusCode = await probe(HOST);
|
||||
const ok = statusCode >= 200 && statusCode < 400;
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: `Mail portal responding (HTTP ${statusCode}).`,
|
||||
status: ok ? "operational" : "degraded",
|
||||
message: ok
|
||||
? `Mail portal responding (HTTP ${statusCode}).`
|
||||
: `Unexpected response from mail portal (HTTP ${statusCode}).`,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user