Skip to content

Commit

Permalink
Load on demand pass 1
Browse files Browse the repository at this point in the history
  • Loading branch information
AdityaHegde committed Jan 31, 2025
1 parent d3003b8 commit fdcecec
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { getExploreStates } from "@rilldata/web-common/features/explores/selectors";

export const load = async ({ url, parent }) => {
const { explore, metricsView, timeRanges, defaultExplorePreset, token } =
await parent();
const { explore, metricsView, defaultExplorePreset, token } = await parent();
const exploreName = token?.resourceName;
const metricsViewSpec = metricsView.metricsView?.state?.validSpec;
const exploreSpec = explore.explore?.state?.validSpec;
Expand All @@ -14,6 +13,5 @@ export const load = async ({ url, parent }) => {
metricsViewSpec,
exploreSpec,
defaultExplorePreset,
timeRanges,
);
};
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { getExploreStates } from "@rilldata/web-common/features/explores/selectors";

export const load = async ({ url, parent, params }) => {
const { explore, metricsView, timeRanges, defaultExplorePreset } =
await parent();
const { explore, metricsView, defaultExplorePreset } = await parent();
const { organization, project, dashboard: exploreName } = params;
const metricsViewSpec = metricsView.metricsView?.state?.validSpec;
const exploreSpec = explore.explore?.state?.validSpec;
Expand All @@ -16,7 +15,6 @@ export const load = async ({ url, parent, params }) => {
metricsViewSpec,
exploreSpec,
defaultExplorePreset,
timeRanges,
),
};
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import { parseRillTime } from "@rilldata/web-common/features/dashboards/url-state/time-ranges/parser";
import {
normaliseRillTime,
parseRillTime,
validateRillTime,
} from "@rilldata/web-common/features/dashboards/url-state/time-ranges/parser";
import { dedupe } from "@rilldata/web-common/lib/arrayUtils";
import type { DashboardTimeControls } from "@rilldata/web-common/lib/time/types";
import { get } from "svelte/store";
import { runtime } from "@rilldata/web-common/runtime-client/runtime-store";
import {
Expand All @@ -20,18 +25,75 @@ export async function fetchTimeRanges(
...(exploreSpec.timeRanges?.length
? exploreSpec.timeRanges.map((t) => t.range!)
: []),
].map((tr) => {
try {
const rillTime = parseRillTime(tr);
if (defaultPreset.timezone) {
rillTime.addTimezone(defaultPreset.timezone);
}
return rillTime.toString();
} catch {
return tr;
].map(normaliseRillTime),
);
const rillTimesWithTimezones = rillTimes.map((tr) => {
try {
const rillTime = parseRillTime(tr);
if (defaultPreset.timezone) {
rillTime.addTimezone(defaultPreset.timezone);
}
}),
return rillTime.toString();
} catch {
return tr;
}
});

const instanceId = get(runtime).instanceId;
const metricsViewName = exploreSpec.metricsView!;

const timeRangesResp = await queryClient.fetchQuery({
queryKey: getQueryServiceMetricsViewTimeRangesQueryKey(
instanceId,
metricsViewName,
{ expressions: rillTimesWithTimezones },
),
queryFn: () =>
queryServiceMetricsViewTimeRanges(instanceId, metricsViewName, {
expressions: rillTimesWithTimezones,
}),
});
return (
timeRangesResp.timeRanges?.map((tr, i) => ({
start: tr.start,
end: tr.end,
expression: rillTimes[i],
})) ?? []
);
}

export async function resolveTimeRanges(
exploreSpec: V1ExploreSpec,
timeRanges: (DashboardTimeControls | undefined)[],
timezone: string | undefined,
) {
const rillTimes: string[] = [];
const rillTimeToTimeRange = new Map<number, number>();
const timeRangesToReturn = new Array<DashboardTimeControls | undefined>(
timeRanges.length,
);

timeRanges.forEach((tr, i) => {
timeRangesToReturn[i] = tr;
if (
!tr?.name ||
// already resolved
tr.start ||
tr.end ||
!validateRillTime(tr.name)
)
return;

const rillTime = parseRillTime(tr.name);
if (timezone) {
rillTime.addTimezone(timezone);
}
rillTimeToTimeRange.set(rillTimes.length, i);
rillTimes.push(rillTime.toString());
});

if (rillTimes.length === 0) return timeRangesToReturn;

const instanceId = get(runtime).instanceId;
const metricsViewName = exploreSpec.metricsView!;

Expand All @@ -45,6 +107,14 @@ export async function fetchTimeRanges(
queryServiceMetricsViewTimeRanges(instanceId, metricsViewName, {
expressions: rillTimes,
}),
staleTime: Infinity,
});
timeRangesResp.timeRanges?.forEach((tr, index) => {
const mappedIndex = rillTimeToTimeRange.get(index);
if (mappedIndex === undefined || !timeRangesToReturn[mappedIndex]) return;
timeRangesToReturn[mappedIndex].start = new Date(tr.start!);
timeRangesToReturn[mappedIndex].end = new Date(tr.end!);
});
return timeRangesResp.timeRanges ?? [];

return timeRangesToReturn;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import { getStateManagers } from "@rilldata/web-common/features/dashboards/state-managers/state-managers";
import { metricsExplorerStore } from "@rilldata/web-common/features/dashboards/stores/dashboard-stores";
import type { MetricsExplorerEntity } from "@rilldata/web-common/features/dashboards/stores/metrics-explorer-entity";
import { resolveTimeRanges } from "@rilldata/web-common/features/dashboards/time-controls/rill-time-ranges";
import {
getTimeControlState,
type TimeControlState,
Expand Down Expand Up @@ -206,7 +207,14 @@
// isLoading will never be true when the query is disabled, so we need this check before waiting for it.
if (metricsSpec.timeDimension) {
await waitUntil(() => !timeRangeSummaryIsLoading);
[initState.selectedTimeRange, initState.selectedComparisonTimeRange] =
await resolveTimeRanges(
exploreSpec,
[initState.selectedTimeRange, initState.selectedComparisonTimeRange],
initState.selectedTimezone,
);
}
console.log(initState.selectedTimeRange);
metricsExplorerStore.init(exploreName, initState);
timeControlsState ??= getTimeControlState(
metricsSpec,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
metricsViewSpec,
exploreSpec,
defaultExplorePreset,
[], // TODO
));
}
Expand Down
8 changes: 5 additions & 3 deletions web-common/src/features/explores/selectors.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import type { CreateQueryOptions, QueryFunction } from "@rilldata/svelte-query";
import type { MetricsExplorerEntity } from "@rilldata/web-common/features/dashboards/stores/metrics-explorer-entity";
import { fetchTimeRanges } from "@rilldata/web-common/features/dashboards/time-controls/rill-time-ranges";
import {
fetchTimeRanges,
resolveTimeRanges,
} from "@rilldata/web-common/features/dashboards/time-controls/rill-time-ranges";
import {
convertPresetToExploreState,
convertURLToExploreState,
Expand Down Expand Up @@ -180,7 +183,6 @@ export function getExploreStates(
metricsViewSpec: V1MetricsViewSpec | undefined,
exploreSpec: V1ExploreSpec | undefined,
defaultExplorePreset: V1ExplorePreset,
timeRanges: V1TimeRange[],
) {
if (!metricsViewSpec || !exploreSpec) {
return {
Expand All @@ -196,7 +198,7 @@ export function getExploreStates(
metricsViewSpec,
exploreSpec,
defaultExplorePreset,
timeRanges,
[],
);

const { exploreStateFromSessionStorage, errors: errorsFromLoad } =
Expand Down
4 changes: 1 addition & 3 deletions web-local/src/routes/(viz)/explore/[name]/+page.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { getExploreStates } from "@rilldata/web-common/features/explores/selectors";

export const load = async ({ url, parent, params }) => {
const { explore, metricsView, timeRanges, defaultExplorePreset } =
await parent();
const { explore, metricsView, defaultExplorePreset } = await parent();
const { name: exploreName } = params;
const metricsViewSpec = metricsView.metricsView?.state?.validSpec;
const exploreSpec = explore.explore?.state?.validSpec;
Expand All @@ -16,7 +15,6 @@ export const load = async ({ url, parent, params }) => {
metricsViewSpec,
exploreSpec,
defaultExplorePreset,
timeRanges,
),
};
};

0 comments on commit fdcecec

Please sign in to comment.