public static async Task <HttpResponseMessage> EvalJobProgress([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { dynamic BodyData = await req.Content.ReadAsAsync <object>(); UnifiedProcessStatus myProcessStatus = BodyData.ToObject <UnifiedProcessStatus>(); IActionsProvider myActions = ActionProviderFactory.GetActionProvider(); //Check AssetStatus switch (myProcessStatus.AssetStatus.State) { case ExecutionStatus.Error: //Finished with error myProcessStatus.JobStatus.State = ExecutionStatus.Error; myProcessStatus.JobStatus.FinishTime = DateTime.Now; myProcessStatus.JobStatus.Duration = DateTime.Now.Subtract(myProcessStatus.JobStatus.StartTime); myActions.UpdateUnifiedProcessStatus(myProcessStatus); break; case ExecutionStatus.Running: //Same status for JOB //No Action myProcessStatus.JobStatus.State = ExecutionStatus.Running; var mmrklist = myActions.GetMMRKStatusList(myProcessStatus.AssetStatus.AssetId); int mmrkTotal = mmrklist.Count(); int mmrkFinished = mmrklist.Where(m => m.State == ExecutionStatus.Finished).Count(); myProcessStatus.JobStatus.Details = $"Generating MMRK files {mmrkFinished} of {mmrkTotal}, last update {DateTime.Now.ToString()}"; //var jobinfo = myActions.GetJobK8SDetail(myProcessStatus.JobStatus.JobID + "-1"); //myProcessStatus.JobStatus.Details += Newtonsoft.Json.JsonConvert.SerializeObject(jobinfo, Newtonsoft.Json.Formatting.Indented); break; case ExecutionStatus.Finished: //Check EmbebedCodeList int nRunning = myProcessStatus.EmbebedCodesList.Where(emc => emc.State == ExecutionStatus.Running).Count(); log.Info($"Current EMC Running {nRunning}"); if (nRunning == 0) { myProcessStatus.JobStatus.State = ExecutionStatus.Finished; myProcessStatus.JobStatus.FinishTime = DateTime.Now; myProcessStatus.JobStatus.Duration = DateTime.Now.Subtract(myProcessStatus.JobStatus.StartTime); myProcessStatus.JobStatus.Details = "Finished"; } else { int total = myProcessStatus.EmbebedCodesList.Count(); myProcessStatus.JobStatus.State = ExecutionStatus.Running; myProcessStatus.JobStatus.Details = $"Watermaerked copies {(total - nRunning)} of {total}"; } myActions.UpdateUnifiedProcessStatus(myProcessStatus); log.Info($"Updated Manifest JOB Status {myProcessStatus.JobStatus.State.ToString()}"); break; } return(req.CreateResponse(HttpStatusCode.OK, myProcessStatus, JsonMediaTypeFormatter.DefaultMediaType)); }
public static async Task <HttpResponseMessage> EvalJobProgress([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { var watch = System.Diagnostics.Stopwatch.StartNew(); dynamic BodyData = await req.Content.ReadAsAsync <object>(); UnifiedProcessStatus myProcessStatus = BodyData.ToObject <UnifiedProcessStatus>(); IActionsProvider myActions = ActionProviderFactory.GetActionProvider(SingleWaterMarkStorageAccInstanceController); int watingCopies = 0; //Check AssetStatus log.Info($"[{myProcessStatus.JobStatus.JobID}] Job Status: {myProcessStatus.JobStatus.State.ToString()} / Asset Status {myProcessStatus.AssetStatus.State.ToString()}"); switch (myProcessStatus.AssetStatus.State) { case ExecutionStatus.Error: //Finished with error myProcessStatus.JobStatus.State = ExecutionStatus.Error; myProcessStatus.JobStatus.FinishTime = DateTime.Now; myProcessStatus.JobStatus.Duration = DateTime.Now.Subtract(myProcessStatus.JobStatus.StartTime); await myActions.UpdateUnifiedProcessStatus(myProcessStatus); break; case ExecutionStatus.Running: //Same status for JOB //No Action myProcessStatus.JobStatus.State = ExecutionStatus.Running; var mmrklist = myActions.GetMMRKStatusList(myProcessStatus.AssetStatus.AssetId); int mmrkTotal = mmrklist.Count(); int mmrkFinished = mmrklist.Where(m => m.State == ExecutionStatus.Finished).Count(); myProcessStatus.JobStatus.Details = $"Generating MMRK files {mmrkFinished} of {mmrkTotal}, last update {DateTime.Now.ToString()}"; await myActions.UpdateUnifiedProcessStatus(myProcessStatus); break; case ExecutionStatus.Finished: //Check EmbebedCodeList, Count running renders plus Finished render without AssetID (not created asset yet) int nRunning = myProcessStatus.EmbebedCodesList.Where(emc => (emc.State == ExecutionStatus.Running) || ((emc.AssetID == "") && (emc.State == ExecutionStatus.Finished))).Count(); //Check Errros int nErrors = myProcessStatus.EmbebedCodesList.Where(emc => emc.State == ExecutionStatus.Error).Count(); //Total int total = myProcessStatus.EmbebedCodesList.Count(); log.Info($"Current EMC Running {nRunning}"); if (nRunning == 0) { myProcessStatus.JobStatus.State = ExecutionStatus.Finished; myProcessStatus.JobStatus.FinishTime = DateTime.Now; myProcessStatus.JobStatus.Duration = DateTime.Now.Subtract(myProcessStatus.JobStatus.StartTime); myProcessStatus.JobStatus.Details = $"Process Finished. Total Watermarked copies {total}, Success {total-nErrors} & Errors {nErrors}"; } else { myProcessStatus.JobStatus.State = ExecutionStatus.Running; myProcessStatus.JobStatus.Details = $"Process Running. Total Watermark copies {total}, Success {total - nRunning - nErrors} & Errors {nErrors}"; watingCopies = myProcessStatus.EmbebedCodesList.Where(emc => ((emc.AssetID == "") && (emc.State == ExecutionStatus.Finished))).Count(); } await myActions.UpdateUnifiedProcessStatus(myProcessStatus); log.Info($"Updated Manifest JOB Status {myProcessStatus.JobStatus.State.ToString()}"); break; } //Control Signal to LogicApp, to accelearete var myResponse = req.CreateResponse(HttpStatusCode.OK, myProcessStatus, JsonMediaTypeFormatter.DefaultMediaType); myResponse.Headers.Add("watingCopies", watingCopies.ToString()); watch.Stop(); log.Info($"[Time] Method EvalJobProgress {watch.ElapsedMilliseconds} [ms]"); return(myResponse); }