timestamp stuff
Some checks are pending
/ setup (push) Waiting to run

This commit is contained in:
soaxelbrooke 2025-07-16 19:40:38 -07:00
parent 327909395e
commit b70a6ce9a7
3 changed files with 32 additions and 32 deletions

View file

@ -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())),
])
))
])

View file

@ -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
}));

View file

@ -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<PartitionSummary> = 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<PartitionSummary> = 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();