SPB Git

perf: boost no longer bumps the config version (probes re-downloaded 22k targets every cycle), cached /config payload, direct JSON responses for heavy endpoints

Simon-Pierre Boucher committed (Sep 13, 2026) parent 8162818 Browse files

8 changed files +5,720 −32

modified apps/api/src/internetpressure/api/admin.py +6 −3
@@ -109,11 +109,14 @@ class TargetIn(BaseModel):
109 109 enabled: bool = True
110 110
111 111
112 −@router.get("/targets")
113 −async def admin_targets(_: str = Depends(require_admin)) -> dict[str, Any]:
112 +@router.get("/targets", response_model=None)
113 +async def admin_targets(_: str = Depends(require_admin)): # type: ignore[no-untyped-def]
114 + from fastapi.responses import Response
115 +
114 116 from ..registry import list_targets
117 + from ..util import dumps
115 118
116 − return {"targets": await list_targets()}
119 + return Response(dumps({"targets": await list_targets()}), media_type="application/json")
117 120
118 121
119 122 @router.post("/targets", status_code=201)
modified apps/api/src/internetpressure/api/public.py +10 −5
@@ -320,8 +320,8 @@ async def _observed(target_ids: list[str], hours: int) -> dict[str, Any]:
320 320 return r or {}
321 321
322 322
323 −@router.get("/services")
324 −async def services() -> dict[str, Any]:
323 +@router.get("/services", response_model=None)
324 +async def services() -> Response:
325 325 live = await _live("services") or []
326 326 targets = await list_targets(enabled_only=True)
327 327 out = []
@@ -331,7 +331,9 @@ async def services() -> dict[str, Any]:
331 331 out.append({**{k: s.get(k) for k in ("slug", "name", "category", "pressure", "level", "level_label", "targets", "affected_regions", "importance")},
332 332 "observed_availability_24h": r3(obs.get("availability")) if obs.get("n") else None,
333 333 "vendor_status": s.get("vendor_status")})
334 − return {"ts": iso(utcnow()), "services": out}
334 + from ..util import dumps
335 +
336 + return Response(dumps({"ts": iso(utcnow()), "services": out}), media_type="application/json")
335 337
336 338
337 339 @router.get("/service/{slug}")
@@ -430,7 +432,7 @@ async def _targets_summary(targets: list[dict[str, Any]]) -> list[dict[str, Any]
430 432 return out
431 433
432 434
433 −@router.get("/targets")
435 +@router.get("/targets", response_model=None)
434 436 async def targets(category: str | None = None, q: str | None = None, country: str | None = None, tier: int | None = None,
435 437 limit: int = Query(300, ge=1, le=3000), offset: int = Query(0, ge=0)) -> dict[str, Any]:
436 438 ts = await list_targets(enabled_only=True)
@@ -446,7 +448,10 @@ async def targets(category: str | None = None, q: str | None = None, country: st
446 448 total = len(ts)
447 449 cats = sorted({t["category"] for t in await list_targets(enabled_only=True)})
448 450 page = ts[offset: offset + limit]
449 − return {"total": total, "limit": limit, "offset": offset, "categories": cats, "targets": await _targets_summary(page)}
451 + from ..util import dumps
452 +
453 + return Response(dumps({"total": total, "limit": limit, "offset": offset, "categories": cats, "targets": await _targets_summary(page)}),
454 + media_type="application/json")
450 455
451 456
452 457 @router.get("/target/{target_id}")
modified apps/api/src/internetpressure/engine/loop.py +13 −13
@@ -301,27 +301,27 @@ class Engine:
301 301 return 0
302 302
303 303 async def _boost(self, ctx: Ctx, sigs) -> None: # type: ignore[no-untyped-def]
304 + """Sampling boost for stressed targets (≥ 2 probes at stress ≥ 0.5). Sticky for `boost_seconds`, recomputed at
305 + most once a minute, delivered to probes inside every batch response — never through a config-version bump."""
306 + if time.time() - getattr(self, "_boost_at", 0.0) < 60:
307 + return
308 + self._boost_at = time.time()
304 309 sch = ctx.cfg.scheduler
305 310 stressed: dict[str, set[str]] = {}
306 311 for s in sigs:
307 312 if s.pair.stress >= 0.5 and s.tags.probe_id != "*":
308 313 stressed.setdefault(s.tags.target_id, set()).add(s.tags.probe_id)
309 − boosted = sorted(t for t, ps in stressed.items() if len(ps) >= 2)[:40]
314 + new_ids = {t for t, ps in stressed.items() if len(ps) >= 2}
310 315 cur = await rds.get_json("ip:boost") or {}
316 + until_cur = parse_ts(cur.get("until")) if cur else None
317 + keep = set(cur.get("targets") or []) if (until_cur and until_cur > utcnow()) else set()
318 + boosted = sorted(keep | new_ids)[:60]
311 319 if boosted:
312 320 until = utcnow() + __import__("datetime").timedelta(seconds=int(sch.get("boost_seconds", 900)))
313 − new = {"targets": boosted, "factor": float(sch.get("boost_factor", 0.5)), "until": iso(until)}
314 − if set(cur.get("targets") or []) != set(boosted):
315 − await rds.set_json("ip:boost", new, ex=int(sch.get("boost_seconds", 900)) + 60)
316 − await bump_config_version()
317 − else:
318 − await rds.set_json("ip:boost", new, ex=int(sch.get("boost_seconds", 900)) + 60)
319 − elif cur:
320 − # let it expire naturally, but drop the list if it was set by us and nothing is stressed anymore
321 − until = parse_ts(cur.get("until"))
322 − if until and until < utcnow():
323 − await rds.r().delete("ip:boost")
324 − await bump_config_version()
321 + await rds.set_json("ip:boost", {"targets": boosted, "factor": float(sch.get("boost_factor", 0.5)), "until": iso(until)},
322 + ex=int(sch.get("boost_seconds", 900)) + 60)
323 + elif cur and until_cur and until_cur < utcnow():
324 + await rds.r().delete("ip:boost")
325 325
326 326 async def _publish(self, now, health, gp, regions_out, countries_out, services_out, asns_out, fronts, incidents,
327 327 routing: RoutingResult, g: ScopeScore, scopes, sigs, published_events, corr_active, allowed) -> None: # type: ignore[no-untyped-def]
modified apps/api/src/internetpressure/ingest/router.py +21 −7
@@ -101,11 +101,16 @@ async def _schedule() -> dict[str, Any]:
101 101 }
102 102
103 103
104 −@router.get("/config")
105 −async def probe_config(request: Request) -> dict[str, Any]:
106 − p = await _authenticate(request, b"")
104 +_targets_cache: tuple[str, list[dict[str, Any]]] | None = None # (config_version, payload)
105 +
106 +
107 +async def _targets_payload(version: str) -> list[dict[str, Any]]:
108 + """The target list is identical for every probe and only changes with the config version: build it once."""
109 + global _targets_cache
110 + if _targets_cache and _targets_cache[0] == version:
111 + return _targets_cache[1]
107 112 targets = await list_targets(enabled_only=True)
108 − out_targets = [
113 + out = [
109 114 {
110 115 "target_id": t["target_id"], "name": t["name"], "hostname": t["hostname"], "url": t["url"], "ip": t["ip"],
111 116 "port": t["port"], "category": t["category"], "provider": t["provider"], "service_id": t["service_id"],
@@ -114,14 +119,23 @@ async def probe_config(request: Request) -> dict[str, Any]:
114 119 }
115 120 for t in targets
116 121 ]
117 − return {
122 + _targets_cache = (version, out)
123 + return out
124 +
125 +
126 +@router.get("/config", response_model=None)
127 +async def probe_config(request: Request) -> Response:
128 + p = await _authenticate(request, b"")
129 + version = await config_version()
130 + body = {
118 131 "server_time": iso(utcnow()),
119 − "config_version": await config_version(),
132 + "config_version": version,
120 133 "probe": {k: p[k] for k in ("probe_id", "name", "region", "country", "city", "provider", "asn", "lat", "lon", "enabled")},
121 134 "schedule": await _schedule(),
122 135 "resolvers": RESOLVERS,
123 − "targets": out_targets,
136 + "targets": await _targets_payload(version),
124 137 }
138 + return Response(dumps(body), media_type="application/json")
125 139
126 140
127 141 def _m_row(probe_id: str, m: Any) -> dict[str, Any] | None:
modified apps/api/src/internetpressure/registry.py +3 −4
@@ -201,11 +201,10 @@ async def save_config_override(value: dict[str, Any], actor: str = "admin") -> P
201 201
202 202 async def compute_config_version() -> str:
203 203 row = await pg.fetchrow("SELECT count(*) AS n, max(updated_at) AS m FROM targets")
204 − boost = await rds.get_json("ip:boost") or {}
205 204 cfgrow = await pg.fetchrow("SELECT updated_at FROM config WHERE key='pressure'")
206 − h = hashlib.sha1(
207 − f"{row['n']}|{row['m']}|{dumps_str(boost)}|{cfgrow['updated_at'] if cfgrow else ''}".encode()
208 − ).hexdigest()[:8]
205 + # NB: the sampling boost is deliberately NOT part of the version — probes receive it in every batch response,
206 + # a version bump would make all of them re-download the whole target list.
207 + h = hashlib.sha1(f"{row['n']}|{row['m']}|{cfgrow['updated_at'] if cfgrow else ''}".encode()).hexdigest()[:8]
209 208 return f"{utcnow().strftime('%Y%m%dT%H%M%SZ')}-{h}"
210 209
211 210
added data/seed/services-fragments/developer.yaml +333 −0
@@ -0,0 +1,333 @@
1 +# Services fragment — developer platforms, SaaS, AI and security providers with a machine-readable public status page.
2 +# Every connector verified 2026-09-13 with curl (Statuspage `/api/v2/summary.json` → page + status.indicator; status.io `/1.0/status/<id>`
3 +# → result.status_overall). Providers on custom / Instatus / incident.io / Hund pages (PagerDuty, Notion, JetBrains, DocuSign, DeepSeek,
4 +# OpenRouter, Auth0, Algolia, Adobe, Cisco, CrowdStrike, Bitwarden, Mailchimp, Intercom, Zendesk, Zoho, Calendly, Modal, Cursor, …) are omitted.
5 +services:
6 + # ───────── ai (49)
7 + - { slug: wandb, name: "Weights & Biases", category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.wandb.com/api/v2/summary.json" } }
8 + - { slug: comet, name: Comet ML, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.comet.com/api/v2/summary.json" } }
9 + - { slug: pinecone, name: Pinecone, category: ai, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.pinecone.io/api/v2/summary.json" } }
10 + - { slug: zilliz, name: Zilliz, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.zilliz.com/api/v2/summary.json" } }
11 + - { slug: turbopuffer, name: turbopuffer, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.turbopuffer.com/api/v2/summary.json" } }
12 + - { slug: tavily, name: Tavily, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.tavily.com/api/v2/summary.json" } }
13 + - { slug: moonshot, name: Moonshot AI, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.moonshot.cn/api/v2/summary.json" } }
14 + - { slug: perplexity, name: Perplexity, category: ai, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.perplexity.com/api/v2/summary.json" } }
15 + - { slug: stability, name: Stability AI, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.stability.ai/api/v2/summary.json" } }
16 + - { slug: runway, name: Runway, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.runwayml.com/api/v2/summary.json" } }
17 + - { slug: heygen, name: HeyGen, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.heygen.com/api/v2/summary.json" } }
18 + - { slug: synthesia, name: Synthesia, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.synthesia.io/api/v2/summary.json" } }
19 + - { slug: d-id, name: D-ID, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.d-id.com/api/v2/summary.json" } }
20 + - { slug: descript, name: Descript, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.descript.com/api/v2/summary.json" } }
21 + - { slug: cartesia, name: Cartesia, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.cartesia.ai/api/v2/summary.json" } }
22 + - { slug: deepgram, name: Deepgram, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.deepgram.com/api/v2/summary.json" } }
23 + - { slug: assemblyai, name: AssemblyAI, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.assemblyai.com/api/v2/summary.json" } }
24 + - { slug: speechmatics, name: Speechmatics, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.speechmatics.com/api/v2/summary.json" } }
25 + - { slug: retell, name: Retell AI, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.retellai.com/api/v2/summary.json" } }
26 + - { slug: bland, name: Bland AI, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.bland.ai/api/v2/summary.json" } }
27 + - { slug: hume, name: Hume AI, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.hume.ai/api/v2/summary.json" } }
28 + - { slug: poe, name: Poe, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.poe.com/api/v2/summary.json" } }
29 + - { slug: groq, name: Groq, category: ai, asns: [], importance: 3, status: { kind: statuspage, url: "https://groqstatus.com/api/v2/summary.json" } }
30 + - { slug: cerebras, name: Cerebras, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.cerebras.ai/api/v2/summary.json" } }
31 + - { slug: sambanova, name: SambaNova, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.sambanova.ai/api/v2/summary.json" } }
32 + - { slug: fireworks, name: Fireworks AI, category: ai, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.fireworks.ai/api/v2/summary.json" } }
33 + - { slug: baseten, name: Baseten, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.baseten.co/api/v2/summary.json" } }
34 + - { slug: lambda-labs, name: Lambda, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.lambdalabs.com/api/v2/summary.json" } }
35 + - { slug: coreweave, name: CoreWeave, category: ai, asns: [], importance: 3, status: { kind: statusio, url: "https://status.coreweave.com/1.0/status/5e126e998f2f032e1f8f0f4b" } }
36 + - { slug: paperspace, name: Paperspace, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.paperspace.com/api/v2/summary.json" } }
37 + - { slug: nebius, name: Nebius, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.nebius.com/api/v2/summary.json" } }
38 + - { slug: crusoe, name: Crusoe, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.crusoecloud.com/api/v2/summary.json" } }
39 + - { slug: braintrust, name: Braintrust, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.braintrust.dev/api/v2/summary.json" } }
40 + - { slug: langfuse, name: Langfuse, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.langfuse.com/api/v2/summary.json" } }
41 + - { slug: crewai, name: CrewAI, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.crewai.com/api/v2/summary.json" } }
42 + - { slug: botpress, name: Botpress, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.botpress.com/api/v2/summary.json" } }
43 + - { slug: voiceflow, name: Voiceflow, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.voiceflow.com/api/v2/summary.json" } }
44 + - { slug: cursor, name: Cursor, category: ai, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.cursor.com/api/v2/summary.json" } }
45 + - { slug: windsurf, name: Windsurf, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.windsurf.com/api/v2/summary.json" } }
46 + - { slug: tabnine, name: Tabnine, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.tabnine.com/api/v2/summary.json" } }
47 + - { slug: ampcode, name: Amp, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.ampcode.com/api/v2/summary.json" } }
48 + - { slug: lovable, name: Lovable, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.lovable.dev/api/v2/summary.json" } }
49 + - { slug: bolt, name: Bolt.new, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.bolt.new/api/v2/summary.json" } }
50 + - { slug: devin, name: "Devin (Cognition)", category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.devin.ai/api/v2/summary.json" } }
51 + - { slug: manus, name: Manus, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.manus.im/api/v2/summary.json" } }
52 + - { slug: augment, name: Augment Code, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.augmentcode.com/api/v2/summary.json" } }
53 + - { slug: qodo, name: Qodo, category: ai, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.qodo.ai/api/v2/summary.json" } }
54 + - { slug: otter, name: Otter.ai, category: ai, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.otter.ai/api/v2/summary.json" } }
55 + - { slug: nvidia-ngc, name: NVIDIA NGC, category: ai, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.ngc.nvidia.com/api/v2/summary.json" } }
56 + # ───────── cloud (13)
57 + - { slug: storj, name: Storj, category: cloud, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.storj.io/api/v2/summary.json" } }
58 + - { slug: tigris, name: Tigris, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.tigrisdata.com/api/v2/summary.json" } }
59 + - { slug: latitude, name: Latitude.sh, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.latitude.sh/api/v2/summary.json" } }
60 + - { slug: outscale, name: Outscale, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.outscale.com/api/v2/summary.json" } }
61 + - { slug: sync, name: Sync.com, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.sync.com/api/v2/summary.json" } }
62 + - { slug: egnyte, name: Egnyte, category: cloud, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.egnyte.com/api/v2/summary.json" } }
63 + - { slug: sharefile, name: ShareFile, category: cloud, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.sharefile.com/api/v2/summary.json" } }
64 + - { slug: jottacloud, name: Jottacloud, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.jottacloud.com/api/v2/summary.json" } }
65 + - { slug: tresorit, name: Tresorit, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.tresorit.com/api/v2/summary.json" } }
66 + - { slug: carbonite, name: Carbonite, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.carbonite.com/api/v2/summary.json" } }
67 + - { slug: crashplan, name: CrashPlan, category: cloud, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.crashplan.com/api/v2/summary.json" } }
68 + - { slug: rubrik, name: Rubrik, category: cloud, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.rubrik.com/api/v2/summary.json" } }
69 + - { slug: cohesity, name: Cohesity, category: cloud, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.cohesity.com/api/v2/summary.json" } }
70 + # ───────── commerce (9)
71 + - { slug: chargebee, name: Chargebee, category: commerce, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.chargebee.com/api/v2/summary.json" } }
72 + - { slug: recurly, name: Recurly, category: commerce, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.recurly.com/api/v2/summary.json" } }
73 + - { slug: zuora, name: Zuora, category: commerce, asns: [], importance: 2, status: { kind: statuspage, url: "https://trust.zuora.com/api/v2/summary.json" } }
74 + - { slug: fastspring, name: FastSpring, category: commerce, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.fastspring.com/api/v2/summary.json" } }
75 + - { slug: commercetools, name: commercetools, category: commerce, asns: [], importance: 2, status: { kind: statusio, url: "https://status.commercetools.com/1.0/status/56e4295370fe4ece420002bb" } }
76 + - { slug: recharge, name: Recharge, category: commerce, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.rechargepayments.com/api/v2/summary.json" } }
77 + - { slug: yotpo, name: Yotpo, category: commerce, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.yotpo.com/api/v2/summary.json" } }
78 + - { slug: shipbob, name: ShipBob, category: commerce, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.shipbob.com/api/v2/summary.json" } }
79 + - { slug: taxjar, name: TaxJar, category: commerce, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.taxjar.com/api/v2/summary.json" } }
80 + # ───────── developer (185)
81 + - { slug: travis-ci, name: Travis CI, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://www.traviscistatus.com/api/v2/summary.json" } }
82 + - { slug: buildkite, name: Buildkite, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://www.buildkitestatus.com/api/v2/summary.json" } }
83 + - { slug: bitrise, name: Bitrise, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.bitrise.io/api/v2/summary.json" } }
84 + - { slug: semaphoreci, name: Semaphore CI, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.semaphoreci.com/api/v2/summary.json" } }
85 + - { slug: harness, name: Harness, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.harness.io/api/v2/summary.json" } }
86 + - { slug: octopus, name: Octopus Deploy, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.octopus.com/api/v2/summary.json" } }
87 + - { slug: codefresh, name: Codefresh, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.codefresh.io/api/v2/summary.json" } }
88 + - { slug: codecov, name: Codecov, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.codecov.com/api/v2/summary.json" } }
89 + - { slug: coveralls, name: Coveralls, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.coveralls.io/api/v2/summary.json" } }
90 + - { slug: codeclimate, name: Code Climate, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.codeclimate.com/api/v2/summary.json" } }
91 + - { slug: snyk, name: Snyk, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.snyk.io/api/v2/summary.json" } }
92 + - { slug: mend, name: Mend.io, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.mend.io/api/v2/summary.json" } }
93 + - { slug: gitguardian, name: GitGuardian, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.gitguardian.com/api/v2/summary.json" } }
94 + - { slug: semgrep, name: Semgrep, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.semgrep.dev/api/v2/summary.json" } }
95 + - { slug: pulumi, name: Pulumi, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.pulumi.com/api/v2/summary.json" } }
96 + - { slug: expo, name: Expo, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.expo.dev/api/v2/summary.json" } }
97 + - { slug: browserstack, name: BrowserStack, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.browserstack.com/api/v2/summary.json" } }
98 + - { slug: saucelabs, name: Sauce Labs, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.saucelabs.com/api/v2/summary.json" } }
99 + - { slug: applitools, name: Applitools, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.applitools.com/api/v2/summary.json" } }
100 + - { slug: percy, name: Percy, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.percy.io/api/v2/summary.json" } }
101 + - { slug: stoplight, name: Stoplight, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.stoplight.io/api/v2/summary.json" } }
102 + - { slug: readme, name: ReadMe, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://www.readmestatus.com/api/v2/summary.json" } }
103 + - { slug: gitbook, name: GitBook, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://www.gitbookstatus.com/api/v2/summary.json" } }
104 + - { slug: mintlify, name: Mintlify, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.mintlify.com/api/v2/summary.json" } }
105 + - { slug: depot, name: Depot, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.depot.dev/api/v2/summary.json" } }
106 + - { slug: kong, name: Kong, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.konghq.com/api/v2/summary.json" } }
107 + - { slug: mergify, name: Mergify, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.mergify.com/api/v2/summary.json" } }
108 + - { slug: sourcegraph, name: Sourcegraph, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://sourcegraphstatus.com/api/v2/summary.json" } }
109 + - { slug: gitpod, name: Gitpod, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://www.gitpodstatus.com/api/v2/summary.json" } }
110 + - { slug: datacamp, name: DataCamp, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.datacamp.com/api/v2/summary.json" } }
111 + - { slug: gemfury, name: Gemfury, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.gemfury.com/api/v2/summary.json" } }
112 + - { slug: rollbar, name: Rollbar, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.rollbar.com/api/v2/summary.json" } }
113 + - { slug: bugsnag, name: Bugsnag, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.bugsnag.com/api/v2/summary.json" } }
114 + - { slug: honeybadger, name: Honeybadger, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.honeybadger.io/api/v2/summary.json" } }
115 + - { slug: airbrake, name: Airbrake, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.airbrake.io/api/v2/summary.json" } }
116 + - { slug: scoutapm, name: Scout APM, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.scoutapm.com/api/v2/summary.json" } }
117 + - { slug: dynatrace, name: Dynatrace, category: developer, asns: [], importance: 3, status: { kind: statusio, url: "https://api.status.io/1.0/status/546d8cb6af8407b6730000cb" } }
118 + - { slug: lightstep, name: Lightstep, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.lightstep.com/api/v2/summary.json" } }
119 + - { slug: loggly, name: Loggly, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.loggly.com/api/v2/summary.json" } }
120 + - { slug: sumologic, name: Sumo Logic, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.sumologic.com/api/v2/summary.json" } }
121 + - { slug: axiom, name: Axiom, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.axiom.co/api/v2/summary.json" } }
122 + - { slug: cribl, name: Cribl, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.cribl.cloud/api/v2/summary.json" } }
123 + - { slug: logzio, name: Logz.io, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.logz.io/api/v2/summary.json" } }
124 + - { slug: coralogix, name: Coralogix, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.coralogix.com/api/v2/summary.json" } }
125 + - { slug: mezmo, name: Mezmo, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.mezmo.com/api/v2/summary.json" } }
126 + - { slug: logrocket, name: LogRocket, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.logrocket.com/api/v2/summary.json" } }
127 + - { slug: opsgenie, name: Opsgenie, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://opsgenie.status.atlassian.com/api/v2/summary.json" } }
128 + - { slug: xmatters, name: xMatters, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.xmatters.com/api/v2/summary.json" } }
129 + - { slug: lumigo, name: Lumigo, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.lumigo.io/api/v2/summary.json" } }
130 + - { slug: observeinc, name: Observe, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.observeinc.com/api/v2/summary.json" } }
131 + - { slug: netdata, name: Netdata, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.netdata.cloud/api/v2/summary.json" } }
132 + - { slug: auvik, name: Auvik, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.auvik.com/api/v2/summary.json" } }
133 + - { slug: logicmonitor, name: LogicMonitor, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.logicmonitor.com/api/v2/summary.json" } }
134 + - { slug: ninjaone, name: NinjaOne, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.ninjaone.com/api/v2/summary.json" } }
135 + - { slug: connectwise, name: ConnectWise, category: developer, asns: [], importance: 2, status: { kind: statusio, url: "https://status.connectwise.com/1.0/status/619cf82551fec9053d612f09" } }
136 + - { slug: atera, name: Atera, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.atera.com/api/v2/summary.json" } }
137 + - { slug: bigpanda, name: BigPanda, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.bigpanda.io/api/v2/summary.json" } }
138 + - { slug: deadmanssnitch, name: "Dead Man's Snitch", category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.deadmanssnitch.com/api/v2/summary.json" } }
139 + - { slug: hetrixtools, name: HetrixTools, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.hetrixtools.com/api/v2/summary.json" } }
140 + - { slug: planetscale, name: PlanetScale, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://www.planetscalestatus.com/api/v2/summary.json" } }
141 + - { slug: cockroach, name: CockroachDB, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.cockroachlabs.cloud/api/v2/summary.json" } }
142 + - { slug: prisma, name: Prisma, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://www.prisma-status.com/api/v2/summary.json" } }
143 + - { slug: convex, name: Convex, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.convex.dev/api/v2/summary.json" } }
144 + - { slug: directus, name: Directus, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.directus.cloud/api/v2/summary.json" } }
145 + - { slug: hygraph, name: Hygraph, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.hygraph.com/api/v2/summary.json" } }
146 + - { slug: prismic, name: Prismic, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.prismic.io/api/v2/summary.json" } }
147 + - { slug: bubble, name: Bubble, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.bubble.io/api/v2/summary.json" } }
148 + - { slug: retool, name: Retool, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.retool.com/api/v2/summary.json" } }
149 + - { slug: coda, name: Coda, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.coda.io/api/v2/summary.json" } }
150 + - { slug: make, name: Make, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.make.com/api/v2/summary.json" } }
151 + - { slug: pipedream, name: Pipedream, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.pipedream.com/api/v2/summary.json" } }
152 + - { slug: workato, name: Workato, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.workato.com/api/v2/summary.json" } }
153 + - { slug: tray, name: Tray.ai, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.tray.io/api/v2/summary.json" } }
154 + - { slug: celigo, name: Celigo, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.celigo.com/api/v2/summary.json" } }
155 + - { slug: boomi, name: Boomi, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.boomi.com/api/v2/summary.json" } }
156 + - { slug: temporal, name: Temporal, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.temporal.io/api/v2/summary.json" } }
157 + - { slug: inngest, name: Inngest, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.inngest.com/api/v2/summary.json" } }
158 + - { slug: sevalla, name: Sevalla, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.sevalla.com/api/v2/summary.json" } }
159 + - { slug: aiven, name: Aiven, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.aiven.io/api/v2/summary.json" } }
160 + - { slug: clickhouse, name: ClickHouse, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.clickhouse.com/api/v2/summary.json" } }
161 + - { slug: singlestore, name: SingleStore, category: developer, asns: [], importance: 2, status: { kind: statusio, url: "https://status.singlestore.com/1.0/status/5f75344c593ae004ba02aaa6" } }
162 + - { slug: tinybird, name: Tinybird, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.tinybird.co/api/v2/summary.json" } }
163 + - { slug: materialize, name: Materialize, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.materialize.com/api/v2/summary.json" } }
164 + - { slug: firebolt, name: Firebolt, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.firebolt.io/api/v2/summary.json" } }
165 + - { slug: influxdata, name: InfluxData, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.influxdata.com/api/v2/summary.json" } }
166 + - { slug: couchbase, name: Couchbase, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.couchbase.com/api/v2/summary.json" } }
167 + - { slug: neo4j, name: Neo4j, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.neo4j.io/api/v2/summary.json" } }
168 + - { slug: bloomreach, name: Bloomreach, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.bloomreach.com/api/v2/summary.json" } }
169 + - { slug: redpanda, name: Redpanda, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.redpanda.com/api/v2/summary.json" } }
170 + - { slug: cloudamqp, name: CloudAMQP, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.cloudamqp.com/api/v2/summary.json" } }
171 + - { slug: dbt, name: dbt Labs, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.getdbt.com/api/v2/summary.json" } }
172 + - { slug: census, name: Census, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.getcensus.com/api/v2/summary.json" } }
173 + - { slug: rudderstack, name: RudderStack, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.rudderstack.com/api/v2/summary.json" } }
174 + - { slug: tealium, name: Tealium, category: developer, asns: [], importance: 2, status: { kind: statusio, url: "https://status.tealium.com/1.0/status/56216ec56de34e1e5900016f" } }
175 + - { slug: stitch, name: Stitch, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.stitchdata.com/api/v2/summary.json" } }
176 + - { slug: matillion, name: Matillion, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.matillion.com/api/v2/summary.json" } }
177 + - { slug: metabase, name: Metabase, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.metabase.com/api/v2/summary.json" } }
178 + - { slug: mode, name: Mode Analytics, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.modeanalytics.com/api/v2/summary.json" } }
179 + - { slug: hex, name: Hex, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.hex.tech/api/v2/summary.json" } }
180 + - { slug: sigma, name: Sigma Computing, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.sigmacomputing.com/api/v2/summary.json" } }
181 + - { slug: preset, name: Preset, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.preset.io/api/v2/summary.json" } }
182 + - { slug: astronomer, name: Astronomer, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.astronomer.io/api/v2/summary.json" } }
183 + - { slug: prefect, name: Prefect, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.prefect.io/api/v2/summary.json" } }
184 + - { slug: umbraco, name: Umbraco, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.umbraco.io/api/v2/summary.json" } }
185 + - { slug: contentstack, name: Contentstack, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.contentstack.com/api/v2/summary.json" } }
186 + - { slug: kontent, name: Kontent.ai, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.kontent.ai/api/v2/summary.json" } }
187 + - { slug: buttercms, name: ButterCMS, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.buttercms.com/api/v2/summary.json" } }
188 + - { slug: builderio, name: Builder.io, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.builder.io/api/v2/summary.json" } }
189 + - { slug: duda, name: Duda, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.duda.co/api/v2/summary.json" } }
190 + - { slug: uploadcare, name: Uploadcare, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.uploadcare.com/api/v2/summary.json" } }
191 + - { slug: filestack, name: Filestack, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.filestack.com/api/v2/summary.json" } }
192 + - { slug: clerk, name: Clerk, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.clerk.com/api/v2/summary.json" } }
193 + - { slug: fusionauth, name: FusionAuth, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.fusionauth.io/api/v2/summary.json" } }
194 + - { slug: zitadel, name: Zitadel, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.zitadel.com/api/v2/summary.json" } }
195 + - { slug: workos, name: WorkOS, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.workos.com/api/v2/summary.json" } }
196 + - { slug: frontegg, name: Frontegg, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.frontegg.com/api/v2/summary.json" } }
197 + - { slug: yubico, name: Yubico, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.yubico.com/api/v2/summary.json" } }
198 + - { slug: dashlane, name: Dashlane, category: developer, asns: [], importance: 2, status: { kind: statusio, url: "https://status.dashlane.com/1.0/status/5aabcb89fccc4b04d3774443" } }
199 + - { slug: keeper, name: Keeper Security, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://statuspage.keeper.io/api/v2/summary.json" } }
200 + - { slug: veracode, name: Veracode, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.veracode.com/api/v2/summary.json" } }
201 + - { slug: contrast, name: Contrast Security, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.contrastsecurity.com/api/v2/summary.json" } }
202 + - { slug: censys, name: Censys, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.censys.io/api/v2/summary.json" } }
203 + - { slug: greynoise, name: GreyNoise, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.greynoise.io/api/v2/summary.json" } }
204 + - { slug: cesium, name: Cesium, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.cesium.com/api/v2/summary.json" } }
205 + - { slug: radar, name: Radar, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.radar.com/api/v2/summary.json" } }
206 + - { slug: smarty, name: Smarty, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.smarty.com/api/v2/summary.json" } }
207 + - { slug: cos, name: "Center for Open Science (OSF)", category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.cos.io/api/v2/summary.json" } }
208 + - { slug: apify, name: Apify, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.apify.com/api/v2/summary.json" } }
209 + - { slug: browserbase, name: Browserbase, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.browserbase.com/api/v2/summary.json" } }
210 + - { slug: serpapi, name: SerpApi, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.serpapi.com/api/v2/summary.json" } }
211 + - { slug: warp, name: Warp, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.warp.dev/api/v2/summary.json" } }
212 + - { slug: semanticscholar, name: Semantic Scholar, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.semanticscholar.org/api/v2/summary.json" } }
213 + - { slug: grammarly, name: Grammarly, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.grammarly.com/api/v2/summary.json" } }
214 + - { slug: linear, name: Linear, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://linearstatus.com/api/v2/summary.json" } }
215 + - { slug: smartsheet, name: Smartsheet, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.smartsheet.com/api/v2/summary.json" } }
216 + - { slug: lucid, name: Lucid Software, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.lucid.co/api/v2/summary.json" } }
217 + - { slug: autodesk, name: Autodesk, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://health.autodesk.com/api/v2/summary.json" } }
218 + - { slug: frameio, name: Frame.io, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.frame.io/api/v2/summary.json" } }
219 + - { slug: bentley, name: Bentley Systems, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.bentley.com/api/v2/summary.json" } }
220 + - { slug: onshape, name: Onshape, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.onshape.com/api/v2/summary.json" } }
221 + - { slug: ptc, name: PTC, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.ptc.com/api/v2/summary.json" } }
222 + - { slug: mendix, name: Mendix, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.mendix.com/api/v2/summary.json" } }
223 + - { slug: altium, name: Altium, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.altium.com/api/v2/summary.json" } }
224 + - { slug: blackduck, name: Black Duck, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.blackduck.com/api/v2/summary.json" } }
225 + - { slug: pandadoc, name: PandaDoc, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.pandadoc.com/api/v2/summary.json" } }
226 + - { slug: hellosign, name: Dropbox Sign, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.hellosign.com/api/v2/summary.json" } }
227 + - { slug: signnow, name: signNow, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.signnow.com/api/v2/summary.json" } }
228 + - { slug: airslate, name: airSlate, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.airslate.com/api/v2/summary.json" } }
229 + - { slug: pdffiller, name: pdfFiller, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.pdffiller.com/api/v2/summary.json" } }
230 + - { slug: signeasy, name: Signeasy, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.signeasy.com/api/v2/summary.json" } }
231 + - { slug: signable, name: Signable, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.signable.co.uk/api/v2/summary.json" } }
232 + - { slug: nitro, name: Nitro, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.gonitro.com/api/v2/summary.json" } }
233 + - { slug: clearbit, name: Clearbit, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.clearbit.com/api/v2/summary.json" } }
234 + - { slug: quip, name: Quip, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.quip.com/api/v2/summary.json" } }
235 + - { slug: helpscout, name: Help Scout, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.helpscout.com/api/v2/summary.json" } }
236 + - { slug: gorgias, name: Gorgias, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.gorgias.com/api/v2/summary.json" } }
237 + - { slug: kustomer, name: Kustomer, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.kustomer.com/api/v2/summary.json" } }
238 + - { slug: heap, name: Heap, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.heap.io/api/v2/summary.json" } }
239 + - { slug: hotjar, name: Hotjar, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.hotjar.com/api/v2/summary.json" } }
240 + - { slug: fullstory, name: FullStory, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.fullstory.com/api/v2/summary.json" } }
241 + - { slug: pendo, name: Pendo, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.pendo.io/api/v2/summary.json" } }
242 + - { slug: appcues, name: Appcues, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.appcues.com/api/v2/summary.json" } }
243 + - { slug: walkme, name: WalkMe, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.walkme.com/api/v2/summary.json" } }
244 + - { slug: optimizely, name: Optimizely, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.optimizely.com/api/v2/summary.json" } }
245 + - { slug: statsig, name: Statsig, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.statsig.com/api/v2/summary.json" } }
246 + - { slug: flagsmith, name: Flagsmith, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.flagsmith.com/api/v2/summary.json" } }
247 + - { slug: devcycle, name: DevCycle, category: developer, asns: [], importance: 1, status: { kind: statusio, url: "https://api.status.io/1.0/status/6a28108059348e05f706f393" } }
248 + - { slug: typeform, name: Typeform, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.typeform.com/api/v2/summary.json" } }
249 + - { slug: surveymonkey, name: SurveyMonkey, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.surveymonkey.com/api/v2/summary.json" } }
250 + - { slug: qualtrics, name: Qualtrics, category: developer, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.qualtrics.com/api/v2/summary.json" } }
251 + - { slug: jotform, name: Jotform, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.jotform.com/api/v2/summary.json" } }
252 + - { slug: bamboohr, name: BambooHR, category: developer, asns: [], importance: 2, status: { kind: statusio, url: "https://status.bamboohr.com/1.0/status/54f0de009d6f51e7140002b7" } }
253 + - { slug: greenhouse, name: Greenhouse, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.greenhouse.io/api/v2/summary.json" } }
254 + - { slug: lever, name: Lever, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.lever.co/api/v2/summary.json" } }
255 + - { slug: ashby, name: Ashby, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.ashbyhq.com/api/v2/summary.json" } }
256 + - { slug: personio, name: Personio, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.personio.de/api/v2/summary.json" } }
257 + - { slug: lattice, name: Lattice, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.lattice.com/api/v2/summary.json" } }
258 + - { slug: blackboard, name: Blackboard, category: developer, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.blackboard.com/api/v2/summary.json" } }
259 + - { slug: codility, name: Codility, category: developer, asns: [], importance: 1, status: { kind: statusio, url: "https://status.codility.com/1.0/status/602b8b3348af2205ab890df0" } }
260 + - { slug: codesignal, name: CodeSignal, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.codesignal.com/api/v2/summary.json" } }
261 + - { slug: maze, name: Maze, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.maze.co/api/v2/summary.json" } }
262 + - { slug: usertesting, name: UserTesting, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.usertesting.com/api/v2/summary.json" } }
263 + - { slug: productboard, name: Productboard, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.productboard.com/api/v2/summary.json" } }
264 + - { slug: aha, name: "Aha!", category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.aha.io/api/v2/summary.json" } }
265 + - { slug: shortcut, name: Shortcut, category: developer, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.shortcut.com/api/v2/summary.json" } }
266 + # ───────── finance (2)
267 + - { slug: navan, name: Navan, category: finance, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.navan.com/api/v2/summary.json" } }
268 + - { slug: carta, name: Carta, category: finance, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.carta.com/api/v2/summary.json" } }
269 + # ───────── infrastructure (25)
270 + - { slug: sentinelone, name: SentinelOne, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.sentinelone.com/api/v2/summary.json" } }
271 + - { slug: eset, name: ESET, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.eset.com/api/v2/summary.json" } }
272 + - { slug: umbrella, name: Cisco Umbrella, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.umbrella.com/api/v2/summary.json" } }
273 + - { slug: jamf, name: Jamf, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.jamf.com/api/v2/summary.json" } }
274 + - { slug: kandji, name: Kandji, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.kandji.io/api/v2/summary.json" } }
275 + - { slug: addigy, name: Addigy, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.addigy.com/api/v2/summary.json" } }
276 + - { slug: omnissa, name: Omnissa Workspace ONE, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.workspaceone.com/api/v2/summary.json" } }
277 + - { slug: tenable, name: Tenable, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.tenable.com/api/v2/summary.json" } }
278 + - { slug: qualys, name: Qualys, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.qualys.com/api/v2/summary.json" } }
279 + - { slug: wiz, name: Wiz, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.wiz.io/api/v2/summary.json" } }
280 + - { slug: aquasec, name: Aqua Security, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.aquasec.com/api/v2/summary.json" } }
281 + - { slug: upwind, name: Upwind, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.upwind.io/api/v2/summary.json" } }
282 + - { slug: traceable, name: Traceable, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.traceable.ai/api/v2/summary.json" } }
283 + - { slug: wallarm, name: Wallarm, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.wallarm.com/api/v2/summary.json" } }
284 + - { slug: path, name: Path Network, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.path.net/api/v2/summary.json" } }
285 + - { slug: recordedfuture, name: Recorded Future, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.recordedfuture.com/api/v2/summary.json" } }
286 + - { slug: zerofox, name: ZeroFox, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.zerofox.com/api/v2/summary.json" } }
287 + - { slug: anomali, name: Anomali, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.anomali.com/api/v2/summary.json" } }
288 + - { slug: valimail, name: Valimail, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.valimail.com/api/v2/summary.json" } }
289 + - { slug: abnormal, name: Abnormal Security, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.abnormalsecurity.com/api/v2/summary.json" } }
290 + - { slug: webroot, name: Webroot, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.webroot.com/api/v2/summary.json" } }
291 + - { slug: f-secure, name: F-Secure, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.f-secure.com/api/v2/summary.json" } }
292 + - { slug: withsecure, name: WithSecure, category: infrastructure, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.withsecure.com/api/v2/summary.json" } }
293 + - { slug: spycloud, name: SpyCloud, category: infrastructure, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.spycloud.com/api/v2/summary.json" } }
294 + - { slug: openvpn, name: OpenVPN, category: infrastructure, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.openvpn.com/api/v2/summary.json" } }
295 + # ───────── messaging (33)
296 + - { slug: resend, name: Resend, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://resend-status.com/api/v2/summary.json" } }
297 + - { slug: sparkpost, name: SparkPost, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.sparkpost.com/api/v2/summary.json" } }
298 + - { slug: bird, name: Bird, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.bird.com/api/v2/summary.json" } }
299 + - { slug: mailjet, name: Mailjet, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.mailjet.com/api/v2/summary.json" } }
300 + - { slug: plivo, name: Plivo, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.plivo.com/api/v2/summary.json" } }
301 + - { slug: infobip, name: Infobip, category: messaging, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.infobip.com/api/v2/summary.json" } }
302 + - { slug: onesignal, name: OneSignal, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.onesignal.com/api/v2/summary.json" } }
303 + - { slug: courier, name: Courier, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.courier.com/api/v2/summary.json" } }
304 + - { slug: knock, name: Knock, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.knock.app/api/v2/summary.json" } }
305 + - { slug: getstream, name: Stream, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.getstream.io/api/v2/summary.json" } }
306 + - { slug: daily, name: Daily, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.daily.co/api/v2/summary.json" } }
307 + - { slug: 100ms, name: 100ms, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.100ms.live/api/v2/summary.json" } }
308 + - { slug: livekit, name: LiveKit, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.livekit.io/api/v2/summary.json" } }
309 + - { slug: apivideo, name: api.video, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.api.video/api/v2/summary.json" } }
310 + - { slug: startmail, name: StartMail, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.startmail.com/api/v2/summary.json" } }
311 + - { slug: aircall, name: Aircall, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.aircall.io/api/v2/summary.json" } }
312 + - { slug: dialpad, name: Dialpad, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.dialpad.com/api/v2/summary.json" } }
313 + - { slug: talkdesk, name: Talkdesk, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.talkdesk.com/api/v2/summary.json" } }
314 + - { slug: genesys, name: Genesys Cloud, category: messaging, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.mypurecloud.com/api/v2/summary.json" } }
315 + - { slug: constantcontact, name: Constant Contact, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.constantcontact.com/api/v2/summary.json" } }
316 + - { slug: klaviyo, name: Klaviyo, category: messaging, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.klaviyo.com/api/v2/summary.json" } }
317 + - { slug: braze, name: Braze, category: messaging, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.braze.com/api/v2/summary.json" } }
318 + - { slug: iterable, name: Iterable, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.iterable.com/api/v2/summary.json" } }
319 + - { slug: attentive, name: Attentive, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.attentivemobile.com/api/v2/summary.json" } }
320 + - { slug: postscript, name: Postscript, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.postscript.io/api/v2/summary.json" } }
321 + - { slug: activecampaign, name: ActiveCampaign, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.activecampaign.com/api/v2/summary.json" } }
322 + - { slug: mailerlite, name: MailerLite, category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.mailerlite.com/api/v2/summary.json" } }
323 + - { slug: getresponse, name: GetResponse, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.getresponse.com/api/v2/summary.json" } }
324 + - { slug: aweber, name: AWeber, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.aweber.com/api/v2/summary.json" } }
325 + - { slug: drip, name: Drip, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.drip.com/api/v2/summary.json" } }
326 + - { slug: omnisend, name: Omnisend, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.omnisend.com/api/v2/summary.json" } }
327 + - { slug: kit, name: "Kit (ConvertKit)", category: messaging, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.kit.com/api/v2/summary.json" } }
328 + - { slug: superhuman, name: Superhuman, category: messaging, asns: [], importance: 1, status: { kind: statuspage, url: "https://status.superhuman.com/api/v2/summary.json" } }
329 + # ───────── social (1)
330 + - { slug: substack, name: Substack, category: social, asns: [], importance: 3, status: { kind: statuspage, url: "https://substack.statuspage.io/api/v2/summary.json" } }
331 + # ───────── streaming (2)
332 + - { slug: vimeo, name: Vimeo, category: streaming, asns: [], importance: 3, status: { kind: statuspage, url: "https://status.vimeo.com/api/v2/summary.json" } }
333 + - { slug: jwplayer, name: JW Player, category: streaming, asns: [], importance: 2, status: { kind: statuspage, url: "https://status.jwplayer.com/api/v2/summary.json" } }
added data/targets/fragments/developer.yaml +5333 −0
Large diff (5,333 lines) is not loaded by default to keep the page fast.Load diff
modified infra/compose.yml +1 −0
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme