docs(monitors): document heartbeat and metric monitors; add heartbeat e2e
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import { test, expect } from "@playwright/test";
|
||||
import { ensureOwner, signIn } from "./helpers";
|
||||
|
||||
const BASE_URL = process.env.E2E_BASE_URL ?? "http://localhost:3000";
|
||||
|
||||
test("heartbeat monitor: URL ping, /fail, header ping", async ({ page, request }) => {
|
||||
const owner = await ensureOwner(request);
|
||||
await signIn(page, owner.email, owner.password);
|
||||
|
||||
const create = await page.request.post(`${BASE_URL}/api/monitors`, {
|
||||
data: {
|
||||
name: `e2e heartbeat ${Date.now()}`,
|
||||
type: "heartbeat",
|
||||
target: { period_sec: 3600, grace_sec: 300 },
|
||||
enabled: true,
|
||||
},
|
||||
});
|
||||
expect(create.status()).toBe(201);
|
||||
const monitor = await create.json();
|
||||
expect(monitor.heartbeat_token).toBeTruthy();
|
||||
|
||||
const ping = await request.get(`${BASE_URL}/public/hb/${monitor.heartbeat_token}`);
|
||||
expect(ping.status()).toBe(200);
|
||||
expect(await ping.text()).toBe("OK");
|
||||
|
||||
let got = await (await page.request.get(`${BASE_URL}/api/monitors/${monitor.monitor_id}`)).json();
|
||||
expect(got.state.status).toBe("up");
|
||||
|
||||
await new Promise((r) => setTimeout(r, 1100)); // per-token limit is 1/s
|
||||
const fail = await request.post(`${BASE_URL}/public/hb/${monitor.heartbeat_token}/fail`, { data: "disk full" });
|
||||
expect(fail.status()).toBe(200);
|
||||
|
||||
got = await (await page.request.get(`${BASE_URL}/api/monitors/${monitor.monitor_id}`)).json();
|
||||
expect(got.state.status).toBe("down");
|
||||
expect(got.state.message).toContain("disk full");
|
||||
|
||||
const incidents = await (await page.request.get(`${BASE_URL}/api/monitors/${monitor.monitor_id}/incidents`)).json();
|
||||
expect(incidents.length).toBeGreaterThan(0);
|
||||
|
||||
await new Promise((r) => setTimeout(r, 1100));
|
||||
const headerPing = await request.post(`${BASE_URL}/public/hb`, { headers: { "X-Vantage-Token": monitor.heartbeat_token } });
|
||||
expect(headerPing.status()).toBe(200);
|
||||
got = await (await page.request.get(`${BASE_URL}/api/monitors/${monitor.monitor_id}`)).json();
|
||||
expect(got.state.status).toBe("up");
|
||||
|
||||
expect((await request.get(`${BASE_URL}/public/hb/not-a-real-token`)).status()).toBe(404);
|
||||
expect((await request.post(`${BASE_URL}/public/hb`)).status()).toBe(404);
|
||||
|
||||
await page.goto(`${BASE_URL}/monitors/${monitor.monitor_id}`);
|
||||
await expect(page.getByText(/last ping/i)).toBeVisible();
|
||||
});
|
||||
Reference in New Issue
Block a user