From ec3378b4256f4c01c2e97b890a4d6bf6f1235efe Mon Sep 17 00:00:00 2001 From: Mingbo Peng Date: Wed, 6 Mar 2024 20:10:57 -0500 Subject: [PATCH] fix(ScheduledJobInfo): add IsCloudJobDone() and GetCloudJobDoneMessage() --- .../Wrapper/ScheduledJobInfo.cs | 68 +++++++++++++------ 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/src/PollinationSDK/Wrapper/ScheduledJobInfo.cs b/src/PollinationSDK/Wrapper/ScheduledJobInfo.cs index 3345c94c..c5a9ae43 100644 --- a/src/PollinationSDK/Wrapper/ScheduledJobInfo.cs +++ b/src/PollinationSDK/Wrapper/ScheduledJobInfo.cs @@ -124,6 +124,39 @@ public override string ToString() return this.IsLocalJob ? $"LOCAL:{this.JobSlug}@{this.SavedLocalPath}" : $"CLOUD:{this.JobSlug}"; } + public bool IsCloudJobDone(out string completeMessage) + { + completeMessage = null; + if (this.CloudJob == null) + return false; + + var status = this.CloudJob.Status?.Status; + var done = status == JobStatusEnum.Completed; + done |= status == JobStatusEnum.Failed; + done |= status == JobStatusEnum.Cancelled; + + if (done) + completeMessage = GetCloudJobDoneMessage(this.CloudJob); + return done; + + } + + public static string GetCloudJobDoneMessage(CloudJob cloudJob) + { + if (cloudJob == null) + return null; + + var status = cloudJob.Status; + var totalTime = status.FinishedAt - status.StartedAt; + var finishMessage = status.Status.ToString(); + + var total = status?.RunsCompleted + status?.RunsFailed + status?.RunsCancelled; + + finishMessage = $"{finishMessage}: [{GetUserFriendlyTimeCounter(totalTime)}]({total})"; + + return finishMessage; + } + public async Task WatchJobStatusAsync(Action progressAction = default, System.Threading.CancellationToken cancelToken = default) { @@ -177,12 +210,7 @@ public async Task WatchJobStatusAsync(Action progressAction = de // suspended by user cancelToken.ThrowIfCancellationRequested(); - var totalTime = status.FinishedAt - startTime; - var finishMessage = status.Status.ToString(); - - //progressAction?.Invoke($"Task: {status.Status}"); - - finishMessage = $"{finishMessage}: [{GetUserFriendlyTimeCounter(totalTime)}]"; + var finishMessage = GetCloudJobDoneMessage(this.CloudJob); progressAction?.Invoke(finishMessage); Helper.Logger.Information($"WatchJobStatusAsync: finished checking job [{proj.Owner.Name}/{proj.Name}/{jobId}]: [{finishMessage}]."); @@ -196,19 +224,21 @@ public async Task WatchJobStatusAsync(Action progressAction = de - string GetUserFriendlyTimeCounter(TimeSpan timeDelta) - { - string format = @"hh\:mm\:ss"; - if (timeDelta.Days > 0) - format = @"d\ hh\:mm\:ss"; - else if (timeDelta.Hours > 0) - format = @"hh\:mm\:ss"; - else if (timeDelta.Minutes > 0) - format = @"mm\:ss"; - else - format = @"ss"; - return timeDelta.ToString(format); - } + + } + + private static string GetUserFriendlyTimeCounter(TimeSpan timeDelta) + { + string format = @"hh\:mm\:ss"; + if (timeDelta.Days > 0) + format = @"d\ hh\:mm\:ss"; + else if (timeDelta.Hours > 0) + format = @"hh\:mm\:ss"; + else if (timeDelta.Minutes > 0) + format = @"mm\:ss"; + else + format = @"ss"; + return timeDelta.ToString(format); } public void CancelJob()