1export default async function(req: Request): Promise<Response> {
2 console.log(req);
3 return new Response(
1export default async function (req: Request): Promise<Response> {
2 return Response.json({ ok: true })
3}
1export default async function (req: Request): Promise<Response> {
2 return Response.json({ ok: true })
3}
1export default async function (req: Request): Promise<Response> {
2 return Response.json({ ok: true })
3}
9const thisURL = parseProject(import.meta.url).links.self.project;
10
11function StatusRow({ rows }) {
12 return (
13 <div className="w-full flex flex-col space-y-2">
31}
32
33function StatusSection({ url, rows }) {
34 const sectionRows = rows.filter(row => row[0] === url);
35 const percentUp = Math.round((sectionRows.filter(row => row[1]).length / sectionRows.length) * 100);
47}
48
49export default async function(req: Request): Promise<Response> {
50 const { rows } = await sqlite.execute(
51 "select url, ok, duration, timestamp from uptime order by timestamp desc limit 200",
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2export function SparklineSVG({ strokeWidth = 2, data = [], fill = "none", stroke = "black" }) {
3 const padding = 2;
4 const xMargin = 25;
4const thisURL = parseProject(import.meta.url).links.self.latest;
5
6export async function notify(message: string) {
7 await email({ subject: message, text: `Email sent from ${thisURL}` });
8}
7);
8
9export async function uptimeCheck(url: string, attempt = 1) {
10 let reason: string = "";
11 let status: number | null = null;
1export default async function (req: Request): Promise<Response> {
2 return Response.json({ ok: true })
3}
1export default async function(req: Request): Promise<Response> {
2 const html = `
3 <!DOCTYPE html>