From 6c30135404684f497f5993195f4590a779c1eb08 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Tue, 21 Jan 2025 17:50:43 +0000 Subject: [PATCH] feat(source): Add relative time since last activity to logging Makes logs easier to read when looking for stale source/player --- src/backend/sources/AbstractSource.ts | 10 ++++++---- src/backend/utils/TimeUtils.ts | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/backend/sources/AbstractSource.ts b/src/backend/sources/AbstractSource.ts index 4ad38e31..72005dba 100644 --- a/src/backend/sources/AbstractSource.ts +++ b/src/backend/sources/AbstractSource.ts @@ -33,7 +33,7 @@ import { sortByNewestPlayDate, sortByOldestPlayDate, } from "../utils.js"; -import { comparePlayTemporally, temporalAccuracyIsAtLeast, todayAwareFormat } from "../utils/TimeUtils.js"; +import { comparePlayTemporally, temporalAccuracyIsAtLeast, timeToHumanTimestamp, todayAwareFormat } from "../utils/TimeUtils.js"; import { getRoot } from '../ioc.js'; import { componentFileLogger } from '../common/logging.js'; import { WebhookPayload } from '../common/infrastructure/config/health/webhooks.js'; @@ -440,6 +440,8 @@ export default abstract class AbstractSource extends AbstractComponent implement const activeThreshold = this.lastActivityAt.add(checkActiveFor, 's'); const inactiveFor = dayjs.duration(Math.abs(activeThreshold.diff(dayjs(), 'millisecond'))).humanize(false); + const relativeActivity = dayjs.duration(this.lastActivityAt.diff(dayjs(), 'ms')); + const humanRelativeActivity = relativeActivity.asSeconds() > -3 ? '' : ` (${timeToHumanTimestamp(relativeActivity)} ago)`; let friendlyInterval = ''; const friendlyLastFormat = todayAwareFormat(this.lastActivityAt); if (activeThreshold.isBefore(dayjs())) { @@ -452,12 +454,12 @@ export default abstract class AbstractSource extends AbstractComponent implement sleepTime = interval + backoff; } if(isDebugMode()) { - debugMsgs.push(`Last activity ${friendlyLastFormat} is ${inactiveFor} outside of polling period (last activity + ${checkActiveFor}s)`); + debugMsgs.push(`Last activity ${friendlyLastFormat}${humanRelativeActivity} is ${inactiveFor} outside of polling period (last activity + ${checkActiveFor}s)`); } else { - debugMsgs.push(`Last activity was at ${friendlyLastFormat}`); + debugMsgs.push(`Last activity was at ${friendlyLastFormat}${humanRelativeActivity}`); } } else { - debugMsgs.push(`Last activity was at ${friendlyLastFormat}`); + debugMsgs.push(`Last activity was at ${friendlyLastFormat}${humanRelativeActivity}`); friendlyInterval = `${formatNumber(sleepTime)}s`; } debugMsgs.push(`Next check in ${friendlyInterval}`); diff --git a/src/backend/utils/TimeUtils.ts b/src/backend/utils/TimeUtils.ts index ef8d4fb1..82431c48 100644 --- a/src/backend/utils/TimeUtils.ts +++ b/src/backend/utils/TimeUtils.ts @@ -288,7 +288,7 @@ export const parseDurationFromTimestamp = (timestamp: any) => { export type Milliseconds = number; export const timeToHumanTimestamp = (val: ReturnType | Milliseconds): string => { - const ms = dayjs.isDuration(val) ? val.asMilliseconds() : val; + const ms = dayjs.isDuration(val) ? Math.abs(val.asMilliseconds()) : val; // less than one hour if(ms < 3600000) {