Skip to content

Commit 5eefca1

Browse files
authored
feat: remove z, bound time range (#902)
1 parent 1e65953 commit 5eefca1

File tree

3 files changed

+38
-21
lines changed

3 files changed

+38
-21
lines changed

frontend/components/traces/traces-table/index.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ export default function TracesTable() {
134134

135135
const isTopSpan = spanData.parentSpanId === null;
136136

137-
138137
if (existingTraceIndex !== -1) {
139138
// Update existing trace
140139
const newTraces = [...currentTraces];
@@ -148,8 +147,14 @@ export default function TracesTable() {
148147

149148
newTraces[existingTraceIndex] = {
150149
...existingTrace,
151-
startTime: new Date(existingTrace.startTime).getTime() < new Date(spanData.startTime).getTime() ? existingTrace.startTime : spanData.startTime,
152-
endTime: new Date(existingTrace.endTime).getTime() > new Date(spanData.endTime).getTime() ? existingTrace.endTime : spanData.endTime,
150+
startTime:
151+
new Date(existingTrace.startTime).getTime() < new Date(spanData.startTime).getTime()
152+
? existingTrace.startTime
153+
: spanData.startTime,
154+
endTime:
155+
new Date(existingTrace.endTime).getTime() > new Date(spanData.endTime).getTime()
156+
? existingTrace.endTime
157+
: spanData.endTime,
153158
totalTokens: existingTrace.totalTokens + spanInputTokens + spanOutputTokens,
154159
inputTokens: existingTrace.inputTokens + spanInputTokens,
155160
outputTokens: existingTrace.outputTokens + spanOutputTokens,
@@ -160,7 +165,9 @@ export default function TracesTable() {
160165
topSpanId: isTopSpan ? spanData.spanId : existingTrace.topSpanId,
161166
topSpanType: isTopSpan ? spanData.spanType : existingTrace.topSpanType,
162167
userId: spanData.attributes?.["lmnr.association.properties.user_id"] || existingTrace.userId,
163-
tags: Array.from(new Set([...existingTrace.tags, ...(spanData.attributes?.["lmnr.association.properties.tags"] || [])])),
168+
tags: Array.from(
169+
new Set([...existingTrace.tags, ...(spanData.attributes?.["lmnr.association.properties.tags"] || [])])
170+
),
164171
status: existingTrace.status !== "error" ? spanData.status : existingTrace.status,
165172
sessionId: spanData.attributes?.["lmnr.association.properties.session_id"] || existingTrace.sessionId,
166173
};
@@ -174,10 +181,14 @@ export default function TracesTable() {
174181
sessionId: spanData.attributes?.["session.id"] || null,
175182
inputTokens: spanData.attributes?.["gen_ai.usage.input_tokens"] || 0,
176183
outputTokens: spanData.attributes?.["gen_ai.usage.output_tokens"] || 0,
177-
totalTokens: (spanData.attributes?.["gen_ai.usage.input_tokens"] || 0) + (spanData.attributes?.["gen_ai.usage.output_tokens"] || 0),
184+
totalTokens:
185+
(spanData.attributes?.["gen_ai.usage.input_tokens"] || 0) +
186+
(spanData.attributes?.["gen_ai.usage.output_tokens"] || 0),
178187
inputCost: spanData.attributes?.["gen_ai.usage.input_cost"] || 0,
179188
outputCost: spanData.attributes?.["gen_ai.usage.output_cost"] || 0,
180-
totalCost: (spanData.attributes?.["gen_ai.usage.input_cost"] || 0) + (spanData.attributes?.["gen_ai.usage.output_cost"] || 0),
189+
totalCost:
190+
(spanData.attributes?.["gen_ai.usage.input_cost"] || 0) +
191+
(spanData.attributes?.["gen_ai.usage.output_cost"] || 0),
181192
metadata: spanData.attributes?.["metadata"] || null,
182193
topSpanId: isTopSpan ? spanData.spanId : null,
183194
traceType: "DEFAULT",
@@ -205,7 +216,6 @@ export default function TracesTable() {
205216

206217
// SSE connection for realtime updates
207218
useEffect(() => {
208-
209219
// Disable realtime updates if there are filters or search
210220
if (filter.length > 0 || !!textSearchFilter) {
211221
return;

frontend/components/ui/date-range-filter.tsx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
'use client';
1+
"use client";
22

3-
import { formatDate } from "date-fns";
3+
import { formatDate, subYears } from "date-fns";
44
import { CalendarIcon } from "lucide-react";
55
import { usePathname, useRouter, useSearchParams } from "next/navigation";
66
import { useEffect, useState } from "react";
@@ -9,7 +9,7 @@ import { DateRange as ReactDateRange } from "react-day-picker";
99
import { cn } from "@/lib/utils";
1010

1111
import { Button } from "./button";
12-
import { Calendar } from "./calendar";
12+
import { Calendar, CalendarProps } from "./calendar";
1313
import { Label } from "./label";
1414
import { Popover, PopoverContent, PopoverTrigger } from "./popover";
1515
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./select";
@@ -42,7 +42,11 @@ const RANGES: DateRange[] = [
4242
},
4343
];
4444

45-
function AbsoluteDateRangeFilter() {
45+
function AbsoluteDateRangeFilter({
46+
disabled = { after: new Date(), before: subYears(new Date(), 1) },
47+
}: {
48+
disabled?: CalendarProps["disabled"];
49+
}) {
4650
const searchParams = new URLSearchParams(useSearchParams().toString());
4751
const pathName = usePathname();
4852
const router = useRouter();
@@ -59,10 +63,10 @@ function AbsoluteDateRangeFilter() {
5963
urlFrom = new Date(searchParams.get("startDate") as string);
6064
setStartTime({
6165
hour: urlFrom.getHours().toString().padStart(2, "0"),
62-
minute: urlFrom.getMinutes().toString().padStart(2, "0")
66+
minute: urlFrom.getMinutes().toString().padStart(2, "0"),
6367
});
6468
}
65-
} catch (e) { }
69+
} catch (e) {}
6670

6771
let urlTo: Date | undefined = undefined;
6872
try {
@@ -71,10 +75,10 @@ function AbsoluteDateRangeFilter() {
7175
urlTo = new Date(searchParams.get("endDate") as string);
7276
setEndTime({
7377
hour: urlTo.getHours().toString().padStart(2, "0"),
74-
minute: urlTo.getMinutes().toString().padStart(2, "0")
78+
minute: urlTo.getMinutes().toString().padStart(2, "0"),
7579
});
7680
}
77-
} catch (e) { }
81+
} catch (e) {}
7882

7983
if (calendarDate === undefined || urlFrom === undefined || urlTo === undefined) {
8084
setCalendarDate({
@@ -143,7 +147,7 @@ function AbsoluteDateRangeFilter() {
143147
selected={calendarDate}
144148
onSelect={setCalendarDate}
145149
numberOfMonths={2}
146-
disabled={{ after: new Date() }}
150+
disabled={disabled}
147151
pagedNavigation
148152
/>
149153
<div className="p-3">
@@ -252,8 +256,11 @@ function AbsoluteDateRangeFilter() {
252256
</div>
253257
);
254258
}
255-
256-
export default function DateRangeFilter() {
259+
export default function DateRangeFilter({
260+
disabled = { after: new Date(), before: subYears(new Date(), 1) },
261+
}: {
262+
disabled?: CalendarProps["disabled"];
263+
}) {
257264
const searchParams = new URLSearchParams(useSearchParams().toString());
258265
const pathName = usePathname();
259266
const router = useRouter();
@@ -287,7 +294,7 @@ export default function DateRangeFilter() {
287294
{range.name}
288295
</div>
289296
))}
290-
<AbsoluteDateRangeFilter />
297+
<AbsoluteDateRangeFilter disabled={disabled} />
291298
</>
292299
}
293300
</div>

frontend/lib/actions/common/query-builder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ const buildTimeRangeConditions = (options: TimeRangeOptions): ConditionResult =>
5656

5757
if (startTime) {
5858
const conditions: string[] = [`${timeColumn} >= {startTime:String}`];
59-
const params: QueryParams = { startTime };
59+
const params: QueryParams = { startTime: startTime.replace("Z", "") };
6060

6161
if (endTime) {
6262
conditions.push(`${timeColumn} <= {endTime:String}`);
63-
params.endTime = endTime;
63+
params.endTime = endTime.replace("Z", "");
6464
} else {
6565
conditions.push(`${timeColumn} <= now()`);
6666
}

0 commit comments

Comments
 (0)