feat: query language docs in swagger description

This commit is contained in:
M1 2026-03-16 14:02:55 +04:00
parent 33d1209ac9
commit eb45152c29
1 changed files with 93 additions and 1 deletions

View File

@ -12,7 +12,99 @@ await migrate();
const app = new Elysia()
.use(cors())
.use(swagger({ path: "/docs", documentation: { info: { title: "PingQL API", version: "0.1.0" } } }))
.use(swagger({
path: "/docs",
documentation: {
info: {
title: "PingQL API",
version: "0.1.0",
description: `
## Query Language
A MongoDB-style query language for defining when a monitor is **up** or **down**.
By default (no query), a monitor is up when HTTP status < 400.
---
### Fields
| Field | Type | Description |
|---|---|---|
| \`status\` | number | HTTP status code |
| \`body\` | string | Response body as text |
| \`headers.<name>\` | string | Response header (e.g. \`headers.content-type\`) |
| \`$responseTime\` | number | Latency in milliseconds |
| \`$certExpiry\` | number | Days until SSL cert expires |
| \`$json\` | object | JSONPath against response body |
| \`$select\` | object | CSS selector against response HTML |
---
### Operators
| Operator | Description |
|---|---|
| \`$eq\` \`$ne\` | Equal / not equal |
| \`$gt\` \`$gte\` \`$lt\` \`$lte\` | Numeric comparison |
| \`$contains\` \`$startsWith\` \`$endsWith\` | String matching |
| \`$regex\` | Regular expression |
| \`$exists\` | Field is present and non-null |
| \`$in\` | Value is in array |
| \`$and\` \`$or\` \`$not\` | Logical operators |
---
### Examples
**Status code:**
\`\`\`json
{ "status": { "$lt": 400 } }
\`\`\`
**Body content:**
\`\`\`json
{ "body": { "$contains": "healthy" } }
\`\`\`
**JSON response field:**
\`\`\`json
{ "$json": { "$.data.status": { "$eq": "ok" } } }
\`\`\`
**CSS selector (HTML pages):**
\`\`\`json
{ "$select": { ".status-badge": { "$contains": "operational" } } }
\`\`\`
**Response time:**
\`\`\`json
{ "$responseTime": { "$lt": 500 } }
\`\`\`
**SSL cert expiry:**
\`\`\`json
{ "$certExpiry": { "$gt": 14 } }
\`\`\`
**Logical:**
\`\`\`json
{ "$and": [{ "status": 200 }, { "body": { "$contains": "ok" } }] }
\`\`\`
**$consider mark DOWN when conditions match:**
\`\`\`json
{ "$consider": "down", "$responseTime": { "$gt": 2000 } }
\`\`\`
Full docs: [/dashboard/docs](/dashboard/docs)
`.trim(),
},
tags: [
{ name: "account", description: "Account registration and settings" },
{ name: "monitors", description: "Create and manage monitors" },
],
},
}))
.get("/", () => ({ name: "PingQL", version: "0.1.0", docs: "/docs", dashboard: "/dashboard" }), { detail: { hide: true } })
.use(dashboard)
.use(account)