11import { createHash } from "node:crypto" ;
22import { connect } from "node:tls" ;
3- import { chQuery } from "@databuddy/db" ;
3+ // import { chQuery } from "@databuddy/db";
44import { websiteService } from "@databuddy/services/websites" ;
55import { captureError , record } from "./lib/tracing" ;
66import type { ActionResult , UptimeData } from "./types" ;
@@ -35,11 +35,11 @@ type FetchFailure = {
3535 error : string ;
3636} ;
3737
38- type Heartbeat = {
39- status : number ;
40- retries : number ;
41- streak : number ;
42- } ;
38+ // type Heartbeat = {
39+ // status: number;
40+ // retries: number;
41+ // streak: number;
42+ // };
4343
4444export function lookupWebsite (
4545 id : string
@@ -237,80 +237,86 @@ function getProbeMetadata(): Promise<{ ip: string; region: string }> {
237237 } ) ;
238238}
239239
240- function getLastHeartbeat ( siteId : string ) : Promise < Heartbeat | null > {
241- return record ( "uptime.get_last_heartbeat" , async ( ) => {
242- try {
243- const rows = await chQuery < {
244- status : number ;
245- retries : number ;
246- failure_streak : number ;
247- } > (
248- `
249- SELECT status, retries, failure_streak
250- FROM uptime.uptime_monitor
251- WHERE site_id = {siteId:String}
252- ORDER BY timestamp DESC
253- LIMIT 1
254- ` ,
255- { siteId }
256- ) ;
257-
258- if ( ! rows || rows . length === 0 ) {
259- return null ;
260- }
261-
262- return {
263- status : rows [ 0 ] . status ,
264- retries : rows [ 0 ] . retries ,
265- streak : rows [ 0 ] . failure_streak ,
266- } ;
267- } catch ( error ) {
268- console . error ( "Failed to fetch last heartbeat:" , error ) ;
269- return null ;
270- }
271- } ) ;
272- }
240+ // function getLastHeartbeat(siteId: string): Promise<Heartbeat | null> {
241+ // return record("uptime.get_last_heartbeat", async () => {
242+ // try {
243+ // const rows = await chQuery<{
244+ // status: number;
245+ // retries: number;
246+ // failure_streak: number;
247+ // }>(
248+ // `
249+ // SELECT status, retries, failure_streak
250+ // FROM uptime.uptime_monitor
251+ // WHERE site_id = {siteId:String}
252+ // ORDER BY timestamp DESC
253+ // LIMIT 1
254+ // `,
255+ // { siteId }
256+ // );
257+
258+ // if (!rows || rows.length === 0) {
259+ // return null;
260+ // }
261+
262+ // return {
263+ // status: rows[0].status,
264+ // retries: rows[0].retries,
265+ // streak: rows[0].failure_streak,
266+ // };
267+ // } catch (error) {
268+ // console.error("Failed to fetch last heartbeat:", error);
269+ // return null;
270+ // }
271+ // });
272+ // }
273273
274274// the retry logic - this prevents false alarms when a site has a temporary hiccup
275- function calculateStatus (
276- isUp : boolean ,
277- last : Heartbeat | null ,
278- maxRetries : number
279- ) : { status : number ; retries : number ; streak : number } {
275+ // function calculateStatus(
276+ // isUp: boolean,
277+ // last: Heartbeat | null,
278+ // maxRetries: number
279+ // ): { status: number; retries: number; streak: number } {
280+ // const { UP, DOWN } = MonitorStatus;
281+ // // const { UP, DOWN, PENDING } = MonitorStatus;
282+
283+ // // first time checking this site
284+ // if (!last) {
285+ // // if (!isUp && maxRetries > 0) {
286+ // // return { status: PENDING, retries: 1, streak: 0 };
287+ // // }
288+ // return { status: isUp ? UP : DOWN, retries: 0, streak: isUp ? 0 : 1 };
289+ // }
290+
291+ // // site was up, now it's down
292+ // if (last.status === UP && !isUp) {
293+ // // if (maxRetries > 0 && last.retries < maxRetries) {
294+ // // return {
295+ // // status: PENDING,
296+ // // retries: last.retries + 1,
297+ // // streak: last.streak,
298+ // // };
299+ // // }
300+ // return { status: DOWN, retries: 0, streak: last.streak + 1 };
301+ // }
302+
303+ // // still pending, still down
304+ // // if (last.status === PENDING && !isUp && last.retries < maxRetries) {
305+ // // return { status: PENDING, retries: last.retries + 1, streak: last.streak };
306+ // // }
307+
308+ // // confirmed down or recovered
309+ // if (!isUp) {
310+ // return { status: DOWN, retries: 0, streak: last.streak + 1 };
311+ // }
312+
313+ // return { status: UP, retries: 0, streak: 0 };
314+ // }
315+
316+ // simplified status calculation - just UP or DOWN based on current check
317+ function calculateStatus ( isUp : boolean ) : { status : number ; retries : number ; streak : number } {
280318 const { UP , DOWN } = MonitorStatus ;
281- // const { UP, DOWN, PENDING } = MonitorStatus;
282-
283- // first time checking this site
284- if ( ! last ) {
285- // if (!isUp && maxRetries > 0) {
286- // return { status: PENDING, retries: 1, streak: 0 };
287- // }
288- return { status : isUp ? UP : DOWN , retries : 0 , streak : isUp ? 0 : 1 } ;
289- }
290-
291- // site was up, now it's down
292- if ( last . status === UP && ! isUp ) {
293- // if (maxRetries > 0 && last.retries < maxRetries) {
294- // return {
295- // status: PENDING,
296- // retries: last.retries + 1,
297- // streak: last.streak,
298- // };
299- // }
300- return { status : DOWN , retries : 0 , streak : last . streak + 1 } ;
301- }
302-
303- // still pending, still down
304- // if (last.status === PENDING && !isUp && last.retries < maxRetries) {
305- // return { status: PENDING, retries: last.retries + 1, streak: last.streak };
306- // }
307-
308- // confirmed down or recovered
309- if ( ! isUp ) {
310- return { status : DOWN , retries : 0 , streak : last . streak + 1 } ;
311- }
312-
313- return { status : UP , retries : 0 , streak : 0 } ;
319+ return { status : isUp ? UP : DOWN , retries : 0 , streak : 0 } ;
314320}
315321
316322export function checkUptime (
@@ -325,17 +331,22 @@ export function checkUptime(
325331 const timestamp = Date . now ( ) ;
326332
327333 // gather all the data we need in parallel
328- const [ pingResult , lastBeat , probe ] = await Promise . all ( [
334+ const [ pingResult , probe ] = await Promise . all ( [
329335 pingWebsite ( normalizedUrl ) ,
330- getLastHeartbeat ( siteId ) ,
331336 getProbeMetadata ( ) ,
332337 ] ) ;
333-
334- const { status, retries, streak } = calculateStatus (
335- pingResult . ok ,
336- lastBeat ,
337- maxRetries
338- ) ;
338+ // const [pingResult, lastBeat, probe] = await Promise.all([
339+ // pingWebsite(normalizedUrl),
340+ // getLastHeartbeat(siteId),
341+ // getProbeMetadata(),
342+ // ]);
343+
344+ const { status, retries, streak } = calculateStatus ( pingResult . ok ) ;
345+ // const { status, retries, streak } = calculateStatus(
346+ // pingResult.ok,
347+ // lastBeat,
348+ // maxRetries
349+ // );
339350
340351 // site is down - minimal data
341352 if ( ! pingResult . ok ) {
0 commit comments