diff --git a/pkg/scheduler/cache/event_handlers.go b/pkg/scheduler/cache/event_handlers.go index f29355d6d2..07ed8cafc8 100644 --- a/pkg/scheduler/cache/event_handlers.go +++ b/pkg/scheduler/cache/event_handlers.go @@ -420,6 +420,8 @@ func (sc *SchedulerCache) setPodGroup(ss *schedulingapi.PodGroup) error { sc.Jobs[job].Queue = schedulingapi.QueueID(sc.defaultQueue) } + metrics.UpdateE2eSchedulingStartTimeByJob(sc.Jobs[job].Name, string(sc.Jobs[job].Queue), sc.Jobs[job].Namespace, + sc.Jobs[job].CreationTimestamp.Time) return nil } diff --git a/pkg/scheduler/metrics/job.go b/pkg/scheduler/metrics/job.go index 2b8d31fcb9..47ef091a69 100644 --- a/pkg/scheduler/metrics/job.go +++ b/pkg/scheduler/metrics/job.go @@ -52,6 +52,7 @@ func RegisterJobRetries(jobID string) { // DeleteJobMetrics delete all metrics related to the job func DeleteJobMetrics(jobName, queue, namespace string) { e2eJobSchedulingDuration.DeleteLabelValues(jobName, queue, namespace) + e2eJobSchedulingStartTime.DeleteLabelValues(jobName, queue, namespace) e2eJobSchedulingLastTime.DeleteLabelValues(jobName, queue, namespace) unscheduleTaskCount.DeleteLabelValues(jobName) jobShare.DeleteLabelValues(namespace, jobName) diff --git a/pkg/scheduler/metrics/metrics.go b/pkg/scheduler/metrics/metrics.go index a56fb6f62a..f4acc7593b 100644 --- a/pkg/scheduler/metrics/metrics.go +++ b/pkg/scheduler/metrics/metrics.go @@ -62,6 +62,15 @@ var ( []string{"job_name", "queue", "job_namespace"}, ) + e2eJobSchedulingStartTime = promauto.NewGaugeVec( + prometheus.GaugeOpts{ + Subsystem: VolcanoNamespace, + Name: "e2e_job_scheduling_start_time", + Help: "E2E job scheduling start time", + }, + []string{"job_name", "queue", "job_namespace"}, + ) + e2eJobSchedulingLastTime = promauto.NewGaugeVec( prometheus.GaugeOpts{ Subsystem: VolcanoNamespace, @@ -160,6 +169,11 @@ func UpdateE2eSchedulingDurationByJob(jobName string, queue string, namespace st e2eJobSchedulingLatency.Observe(DurationInMilliseconds(duration)) } +// UpdateE2eSchedulingStartTimeByJob updates the start time of scheduling +func UpdateE2eSchedulingStartTimeByJob(jobName string, queue string, namespace string, t time.Time) { + e2eJobSchedulingStartTime.WithLabelValues(jobName, queue, namespace).Set(ConvertToUnix(t)) +} + // UpdateE2eSchedulingLastTimeByJob updates the last time of scheduling func UpdateE2eSchedulingLastTimeByJob(jobName string, queue string, namespace string, t time.Time) { e2eJobSchedulingLastTime.WithLabelValues(jobName, queue, namespace).Set(ConvertToUnix(t))