From b70a6ce9a7ceeca8b05b1781ca99b9ba710499c2 Mon Sep 17 00:00:00 2001 From: soaxelbrooke Date: Wed, 16 Jul 2025 19:40:38 -0700 Subject: [PATCH] timestamp stuff --- databuild/dashboard/pages.ts | 38 ++++++++++++++++----------------- databuild/dashboard/services.ts | 6 +++--- databuild/service/handlers.rs | 20 ++++++++--------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/databuild/dashboard/pages.ts b/databuild/dashboard/pages.ts index fbaedbd..8b74529 100644 --- a/databuild/dashboard/pages.ts +++ b/databuild/dashboard/pages.ts @@ -419,7 +419,7 @@ export const BuildStatus = { m('h1.text-3xl.font-bold.mb-4', `Build ${this.buildId}`), m('.build-meta.flex.gap-4.items-center.mb-4', [ m(BuildStatusBadge, { status: this.data.status, size: 'lg' }), - m('.timestamp.text-sm.opacity-70', formatDateTime(new Date(this.data.createdAt / 1000000).toISOString())), + m('.timestamp.text-sm.opacity-70', formatDateTime(new Date(this.data.createdAt).toISOString())), m('.partitions.text-sm.opacity-70', `${this.data.requestedPartitions?.length || 0} partitions`), ]) ]), @@ -444,7 +444,7 @@ export const BuildStatus = { m(PartitionStatusBadge, { status: status?.status || 'Unknown' }), status?.lastUpdated ? m('.updated-time.text-xs.opacity-60', - formatDateTime(new Date(status.lastUpdated / 1000000).toISOString())) : null + formatDateTime(new Date(status.lastUpdated).toISOString())) : null ]) ]); }) || [m('.text-center.py-8.text-base-content.opacity-60', 'No partitions')] @@ -470,7 +470,7 @@ export const BuildStatus = { this.data.events.map((event: any) => m('tr.hover', [ m('td.text-xs.font-mono', - formatDateTime(new Date(event.timestamp / 1000000).toISOString())), + formatDateTime(new Date(event.timestamp).toISOString())), m('td', [ m(EventTypeBadge, { eventType: event.eventType }) ]), @@ -552,7 +552,7 @@ export const PartitionsList = { const search = this.searchTerm.toLowerCase(); return this.data.partitions.filter((partition: any) => - partition.partitionRef.toLowerCase().includes(search) + partition.partition_ref.toLowerCase().includes(search) ); }, @@ -647,28 +647,28 @@ export const PartitionsList = { m('tr.hover', [ m('td', [ m('a.link.link-primary.font-mono.text-sm.break-all', { - href: `/partitions/${encodePartitionRef(partition.partitionRef)}`, + href: `/partitions/${encodePartitionRef(partition.partition_ref)}`, onclick: (e: Event) => { e.preventDefault(); - m.route.set(`/partitions/${encodePartitionRef(partition.partitionRef)}`); + m.route.set(`/partitions/${encodePartitionRef(partition.partition_ref)}`); }, - title: partition.partitionRef - }, partition.partitionRef) + title: partition.partition_ref + }, partition.partition_ref) ]), m('td', [ m(PartitionStatusBadge, { status: partition.status }) ]), - m('td.text-sm.opacity-70', formatTime(new Date(partition.updatedAt / 1000000).toISOString())), + m('td.text-sm.opacity-70', formatTime(new Date(partition.updated_at).toISOString())), m('td', [ m('button.btn.btn-sm.btn-primary', { - onclick: () => this.buildPartition(partition.partitionRef) + onclick: () => this.buildPartition(partition.partition_ref) }, 'Build'), - partition.buildRequestId ? + partition.build_request_id ? m('a.btn.btn-sm.btn-outline.ml-2', { - href: `/builds/${partition.buildRequestId}`, + href: `/builds/${partition.build_request_id}`, onclick: (e: Event) => { e.preventDefault(); - m.route.set(`/builds/${partition.buildRequestId}`); + m.route.set(`/builds/${partition.build_request_id}`); } }, 'View Build') : null ]) @@ -851,7 +851,7 @@ export const PartitionStatus = { m(PartitionStatusBadge, { status: this.data?.status || 'Unknown', size: 'lg' }), this.data?.lastUpdated ? m('.timestamp.text-sm.opacity-70', - `Last updated: ${formatDateTime(new Date(this.data.lastUpdated / 1000000).toISOString())}`) : null, + `Last updated: ${formatDateTime(new Date(this.data.lastUpdated).toISOString())}`) : null, ]) ]), @@ -890,10 +890,10 @@ export const PartitionStatus = { m(BuildStatusBadge, { status: build.status }) ]), m('td.text-sm.opacity-70', - formatDateTime(new Date(build.startedAt / 1000000).toISOString())), + formatDateTime(new Date(build.startedAt).toISOString())), m('td.text-sm.opacity-70', build.completedAt ? - formatDateTime(new Date(build.completedAt / 1000000).toISOString()) : + formatDateTime(new Date(build.completedAt).toISOString()) : '—'), m('td.text-sm.opacity-70', `${build.events?.length || 0} events`) ]) @@ -944,7 +944,7 @@ export const PartitionStatus = { this.events.events.slice(0, 20).map((event: any) => // Show first 20 events m('tr.hover', [ m('td.text-xs.font-mono', - formatDateTime(new Date(event.timestamp / 1000000).toISOString())), + formatDateTime(new Date(event.timestamp).toISOString())), m('td', [ m(EventTypeBadge, { eventType: event.eventType, size: 'xs' }) ]), @@ -1087,7 +1087,7 @@ export const JobsList = { m('td', formatDuration(job.avg_duration_ms)), m('td', (job.recent_runs || 0).toString()), m('td.text-sm.opacity-70', - job.last_run ? formatTime(new Date(job.last_run / 1000000).toISOString()) : '—'), + job.last_run ? formatTime(new Date(job.last_run).toISOString()) : '—'), ]) )) ]) @@ -1254,7 +1254,7 @@ export const JobMetrics = { ]), m('td', formatDuration(run.duration_ms)), m('td.text-sm.opacity-70', - formatTime(new Date(run.started_at / 1000000).toISOString())), + formatTime(new Date(run.started_at).toISOString())), ]) )) ]) diff --git a/databuild/dashboard/services.ts b/databuild/dashboard/services.ts index 9362f92..5c5564f 100644 --- a/databuild/dashboard/services.ts +++ b/databuild/dashboard/services.ts @@ -54,14 +54,14 @@ export class DashboardService { const recentBuilds: BuildRequest[] = activityResponse.recentBuilds.map((build: BuildSummary) => ({ id: build.buildRequestId, status: build.status, - createdAt: new Date(build.createdAt / 1000000).toISOString(), // Convert from nanoseconds to milliseconds - updatedAt: new Date(build.updatedAt / 1000000).toISOString() + createdAt: new Date(build.createdAt).toISOString(), // Backend now sends milliseconds + updatedAt: new Date(build.updatedAt).toISOString() })); const recentPartitions: PartitionBuild[] = activityResponse.recentPartitions.map((partition: PartitionSummary) => ({ ref: partition.partitionRef, status: partition.status, - updatedAt: new Date(partition.updatedAt / 1000000).toISOString(), + updatedAt: new Date(partition.updatedAt).toISOString(), buildRequestId: partition.buildRequestId || undefined })); diff --git a/databuild/service/handlers.rs b/databuild/service/handlers.rs index d9676e7..0578469 100644 --- a/databuild/service/handlers.rs +++ b/databuild/service/handlers.rs @@ -223,7 +223,7 @@ pub async fn get_build_status( let (job_label, partition_ref, delegated_build_id) = extract_navigation_data(&e.event_type); BuildEventSummary { event_id: e.event_id, - timestamp: e.timestamp, + timestamp: e.timestamp / 1_000_000, // Convert nanoseconds to milliseconds event_type: event_type_to_string(&e.event_type), message: event_to_message(&e.event_type), build_request_id: e.build_request_id, @@ -272,8 +272,8 @@ pub async fn get_build_status( build_request_id, status: final_status_string, requested_partitions, - created_at, - updated_at, + created_at: created_at / 1_000_000, // Convert nanoseconds to milliseconds + updated_at: updated_at / 1_000_000, // Convert nanoseconds to milliseconds events: event_summaries, job_graph: job_graph_json, mermaid_diagram, @@ -397,7 +397,7 @@ pub async fn get_partition_events( let (job_label, partition_ref, delegated_build_id) = extract_navigation_data(&e.event_type); BuildEventSummary { event_id: e.event_id, - timestamp: e.timestamp, + timestamp: e.timestamp / 1_000_000, // Convert nanoseconds to milliseconds event_type: event_type_to_string(&e.event_type), message: event_to_message(&e.event_type), build_request_id: e.build_request_id, @@ -708,8 +708,8 @@ pub async fn list_build_requests( build_request_id: s.build_request_id, status: format!("{:?}", s.status), requested_partitions: s.requested_partitions, - created_at: s.created_at, - updated_at: s.updated_at, + created_at: s.created_at / 1_000_000, // Convert nanoseconds to milliseconds + updated_at: s.updated_at / 1_000_000, // Convert nanoseconds to milliseconds }).collect(); let has_more = (offset + limit) < total_count; @@ -761,7 +761,7 @@ pub async fn list_partitions( let partitions: Vec = summaries.into_iter().map(|s| PartitionSummary { partition_ref: s.partition_ref, status: format!("{:?}", s.status), - updated_at: s.updated_at, + updated_at: s.updated_at / 1_000_000, // Convert nanoseconds to milliseconds build_request_id: s.build_request_id, }).collect(); @@ -794,14 +794,14 @@ pub async fn get_activity_summary( build_request_id: s.build_request_id, status: format!("{:?}", s.status), requested_partitions: s.requested_partitions, - created_at: s.created_at, - updated_at: s.updated_at, + created_at: s.created_at / 1_000_000, // Convert nanoseconds to milliseconds + updated_at: s.updated_at / 1_000_000, // Convert nanoseconds to milliseconds }).collect(); let recent_partitions: Vec = summary.recent_partitions.into_iter().map(|s| PartitionSummary { partition_ref: s.partition_ref, status: format!("{:?}", s.status), - updated_at: s.updated_at, + updated_at: s.updated_at / 1_000_000, // Convert nanoseconds to milliseconds build_request_id: s.build_request_id, }).collect();