diff --git a/apps/server/src/api/v2/dashboards/[id]/GET.ts b/apps/server/src/api/v2/dashboards/[id]/GET.ts index db3d89982..8751c40a7 100644 --- a/apps/server/src/api/v2/dashboards/[id]/GET.ts +++ b/apps/server/src/api/v2/dashboards/[id]/GET.ts @@ -6,6 +6,7 @@ import { getCollectionsAssociatedWithDashboard, getDashboardById, getOrganizationMemberCount, + getUserOrganizationId, getUsersWithAssetPermissions, } from '@buster/database/queries'; import { @@ -54,6 +55,27 @@ const app = new Hono().get( c ); + const tag = `take-dashboard-screenshot-${id}`; + if ( + await shouldTakeScreenshot({ + tag, + key: screenshots_task_keys.take_dashboard_screenshot, + context: c, + }) + ) { + console.log('Taking dashboard screenshot'); + tasks.trigger( + screenshots_task_keys.take_dashboard_screenshot, + { + dashboardId: id, + organizationId: (await getUserOrganizationId(user.id))?.organizationId || '', + accessToken: c.get('accessToken'), + isOnSaveEvent: false, + } satisfies TakeDashboardScreenshotTrigger, + { tags: [tag] } + ); + } + return c.json(response); } ); diff --git a/apps/server/src/shared-helpers/screenshots.ts b/apps/server/src/shared-helpers/screenshots.ts index 884b7a0c6..fb61a5b60 100644 --- a/apps/server/src/shared-helpers/screenshots.ts +++ b/apps/server/src/shared-helpers/screenshots.ts @@ -6,7 +6,7 @@ import type { Context } from 'hono'; // It checks if a job for the given tag and key is already running or queued before starting a new one. const currentlyCheckingTags = new Set(); -const CACHE_TAG_EXPIRATION_TIME = 1000 * 15; // 15 seconds +const CACHE_TAG_EXPIRATION_TIME = 1000 * 30; // 30 seconds export const shouldTakeScreenshot = async ({ tag, diff --git a/apps/trigger/src/tasks/screenshots/take-chat-screenshot-handler.ts b/apps/trigger/src/tasks/screenshots/take-chat-screenshot-handler.ts index 770647746..2c297b6f8 100644 --- a/apps/trigger/src/tasks/screenshots/take-chat-screenshot-handler.ts +++ b/apps/trigger/src/tasks/screenshots/take-chat-screenshot-handler.ts @@ -53,10 +53,12 @@ const shouldTakeChatScreenshot = async ( return true; } - const isScreenshotExpired = await hasChatScreenshotBeenTakenWithin( + const hasRecentScreenshot = await hasChatScreenshotBeenTakenWithin( args.chatId, dayjs().subtract(4, 'weeks') ); - return !isScreenshotExpired; + logger.info('Has recent screenshot', { hasRecentScreenshot }); + + return !hasRecentScreenshot; }; diff --git a/apps/trigger/src/tasks/screenshots/take-dashboard-screenshot-handler.ts b/apps/trigger/src/tasks/screenshots/take-dashboard-screenshot-handler.ts index 98b72df1f..a6fdd18eb 100644 --- a/apps/trigger/src/tasks/screenshots/take-dashboard-screenshot-handler.ts +++ b/apps/trigger/src/tasks/screenshots/take-dashboard-screenshot-handler.ts @@ -25,6 +25,8 @@ export const takeDashboardScreenshotHandlerTask: ReturnType< isOnSaveEvent, }); + logger.info('Should take new screenshot', { shouldTakeNewScreenshot }); + if (!shouldTakeNewScreenshot) { return; } @@ -54,10 +56,12 @@ const shouldTakenNewScreenshot = async ({ return true; } - const isScreenshotExpired = await hasDashboardScreenshotBeenTakenWithin( + const hasRecentScreenshot = await hasDashboardScreenshotBeenTakenWithin( dashboardId, dayjs().subtract(24, 'hours') ); - return !isScreenshotExpired; + logger.info('Is screenshot expired', { hasRecentScreenshot }); + + return !hasRecentScreenshot; }; diff --git a/apps/trigger/src/tasks/screenshots/take-report-screenshot-handler.ts b/apps/trigger/src/tasks/screenshots/take-report-screenshot-handler.ts index de36f197a..9db0b2111 100644 --- a/apps/trigger/src/tasks/screenshots/take-report-screenshot-handler.ts +++ b/apps/trigger/src/tasks/screenshots/take-report-screenshot-handler.ts @@ -46,10 +46,10 @@ export const takeReportScreenshotHandlerTask: ReturnType< }); const shouldTakenNewScreenshot = async ({ reportId }: { reportId: string }) => { - const isScreenshotExpired = await hasReportScreenshotBeenTakenWithin( + const hasRecentScreenshot = await hasReportScreenshotBeenTakenWithin( reportId, dayjs().subtract(24, 'hours') ); - return !isScreenshotExpired; + return !hasRecentScreenshot; }; diff --git a/apps/web/src/api/buster_rest/dashboards/requests.ts b/apps/web/src/api/buster_rest/dashboards/requests.ts index 9915ab103..4a1f3489c 100644 --- a/apps/web/src/api/buster_rest/dashboards/requests.ts +++ b/apps/web/src/api/buster_rest/dashboards/requests.ts @@ -1,4 +1,9 @@ -import type { DashboardConfig, GetDashboardResponse } from '@buster/server-shared/dashboards'; +import type { + DashboardConfig, + GetDashboardParams, + GetDashboardQuery, + GetDashboardResponse, +} from '@buster/server-shared/dashboards'; import type { ShareDeleteRequest, ShareDeleteResponse, @@ -26,15 +31,8 @@ export const getDashboardById = async ({ id, password, version_number, -}: { - /** The unique identifier of the dashboard */ - id: string; - /** Optional password for accessing protected dashboards */ - password?: string; - /** The version number of the dashboard */ - version_number?: number; -}) => { - return await mainApi +}: GetDashboardParams & GetDashboardQuery) => { + return await mainApiV2 .get(`/dashboards/${id}`, { params: { password, version_number }, }) diff --git a/packages/server-shared/src/screenshots/methods/screenshot-config.ts b/packages/server-shared/src/screenshots/methods/screenshot-config.ts index 9a616e3e9..be83e6f4f 100644 --- a/packages/server-shared/src/screenshots/methods/screenshot-config.ts +++ b/packages/server-shared/src/screenshots/methods/screenshot-config.ts @@ -4,5 +4,5 @@ export const DEFAULT_SCREENSHOT_CONFIG = { width: 400 * multiplier, height: 240 * multiplier, type: 'webp' as const, - deviceScaleFactor: 1.6, + deviceScaleFactor: 1.62, };