public async Task <WorkableTask> Execute([FromBody] ExecuteScriptParameters parameters) { logger.LogInformation($"Executing {parameters.Id?.ToString() ?? parameters.Name} with parameters '{string.Join(";", parameters.Parameters?.Select(p => $"{p.Key}={p.Value}")??new string[0])}'"); try { if (parameters.Id.HasValue) { if (!string.IsNullOrEmpty(parameters.Name)) { throw new ArgumentException("Either id or name has to be set, not both"); } return(await executionservice.Execute(parameters.Id.Value, parameters.Revision, parameters.Parameters, parameters.Wait)); } if (!string.IsNullOrEmpty(parameters.Name)) { return(await executionservice.Execute(parameters.Name, parameters.Revision, parameters.Parameters, parameters.Wait)); } if (parameters.Code != null) { return(await executionservice.Execute(parameters.Code, parameters.Parameters, parameters.Wait)); } } catch (Exception e) { WorkableTask failtask = new WorkableTask { Id = Guid.NewGuid(), Status = TaskStatus.Failure, Started = DateTime.Now, Finished = DateTime.Now, Log = new List <string>(new[] { e.ToString() }), Parameters = parameters.Parameters, Type = WorkableType.Script, }; await taskservice.StoreTask(failtask); return(failtask); } throw new ArgumentException("Script id/name or scoped code to execute is required"); }
async Task CheckTasks() { List <ScheduledTask> tasks = new List <ScheduledTask>(); ScheduledTaskFilter filter = new ScheduledTaskFilter { DueTime = DateTime.Now }; while (true) { Page <ScheduledTask> page = await scheduledtaskservice.List(filter); tasks.AddRange(page.Result); if (page.Result.Length == 0 || !page.Continue.HasValue) { break; } filter.Continue = page.Continue; } foreach (ScheduledTask task in tasks) { switch (task.WorkableType) { case WorkableType.Workflow: await workflowexecutor.Execute(await workflowcompiler.BuildWorkflow(task.WorkableName), new Dictionary <string, object>(), false); break; case WorkableType.Script: await scriptexecutor.Execute(task.WorkableName, task.WorkableRevision); break; } try { await scheduledtaskservice.UpdateExecution(task.Id, task.NextExecutionTime()); } catch (Exception e) { logger.LogError(e, $"Unable to reschedule task '{task.Id}'"); } } }