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