public static async Task <HttpResponseMessage> StartNewJob([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { var watch = System.Diagnostics.Stopwatch.StartNew(); dynamic BodyData = await req.Content.ReadAsAsync <object>(); string AssetID = BodyData.AssetID; string JobID = BodyData.JobID; string[] EmbebedCodes = BodyData.EmbebedCodes.ToObject <string[]>(); //Save Status IActionsProvider myActions = ActionProviderFactory.GetActionProvider(); try { var status = myActions.StartNewProcess(AssetID, JobID, EmbebedCodes); watch.Stop(); log.Info($"[Time] Method StartNewJob {watch.ElapsedMilliseconds} [ms]"); return(req.CreateResponse(HttpStatusCode.OK, status, JsonMediaTypeFormatter.DefaultMediaType)); } catch (Exception X) { log.Error($"{X.Message}"); return(req.CreateResponse(HttpStatusCode.InternalServerError, X, JsonMediaTypeFormatter.DefaultMediaType)); } }
public static async Task <HttpResponseMessage> StartNewJob([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { dynamic BodyData = await req.Content.ReadAsAsync <object>(); string AssetID = BodyData.AssetID; string JobID = BodyData.JobID; string[] EmbebedCodes = BodyData.EmbebedCodes.ToObject <string[]>(); //Save Status IActionsProvider myActions = ActionProviderFactory.GetActionProvider(); var status = myActions.StartNewProcess(AssetID, JobID, EmbebedCodes); return(req.CreateResponse(HttpStatusCode.OK, status, JsonMediaTypeFormatter.DefaultMediaType)); }
public static async Task <HttpResponseMessage> StartNewJob([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { var watch = System.Diagnostics.Stopwatch.StartNew(); dynamic BodyData = await req.Content.ReadAsAsync <object>(); string AssetID = BodyData.AssetID; string JobID = BodyData.JobID; string[] EmbebedCodes = BodyData.EmbebedCodes.ToObject <string[]>(); bool LockedAsset = false; //Save Status IActionsProvider myActions = ActionProviderFactory.GetActionProvider(SingleWaterMarkStorageAccInstanceController); try { //Lock to avoid multiples process start at same time (miliseconds of difference) LockedAsset = await myActions.GetAssetProcessLock(AssetID, JobID, TimeSpan.FromMinutes(1), TimeSpan.FromMilliseconds(1000)); if (!LockedAsset) { //Error to Lock asset, so start process will fail. var LockException = new Exception($"[{JobID}] Failed to lock Asset {AssetID}, Timeout! Check Trafic light table for this assets"); log.Error($"{LockException.Message}"); return(req.CreateResponse(HttpStatusCode.InternalServerError, LockException, JsonMediaTypeFormatter.DefaultMediaType)); } log.Info($"[{JobID}] Locked"); //Star Process var status = await myActions.StartNewProcess(AssetID, JobID, EmbebedCodes); //Unlock trafic light to other process to StarNewProcess await myActions.ReleaseAssetProcessLock(AssetID, JobID); log.Info($"[{JobID}] unLocked"); watch.Stop(); log.Info($"[Time] Method StartNewJob {watch.ElapsedMilliseconds} [ms]"); return(req.CreateResponse(HttpStatusCode.OK, status, JsonMediaTypeFormatter.DefaultMediaType)); } catch (Exception X) { if (LockedAsset) { await myActions.ReleaseAssetProcessLock(AssetID, JobID); log.Info($"[{JobID}] unLocked on exception"); } log.Error($"{X.Message}"); return(req.CreateResponse(HttpStatusCode.InternalServerError, X, JsonMediaTypeFormatter.DefaultMediaType)); } }