ScheduledScriptPlugin.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Comal.Classes;
  2. using InABox.Clients;
  3. using InABox.Core;
  4. using InABox.Scripting;
  5. using System;
  6. namespace Comal.TaskScheduler.Shared
  7. {
  8. public class ScheduledScriptPlugin : SchedulePlugin<ScheduledScript>
  9. {
  10. public override bool Execute(Schedule schedule, ScheduledScript entity)
  11. {
  12. if (schedule.DueDate.AddDays(0 - schedule.LeadTime) <= DateTime.Now)
  13. {
  14. Logger.Send(LogType.Information,ClientFactory.UserID," * Executing Module.Execute()");
  15. DateTime duedate = DateTime.Now.AddDays(schedule.LeadTime);
  16. var script = new ScriptDocument(entity.Script);
  17. try
  18. {
  19. if (script.Compile())
  20. {
  21. bool result = false;
  22. try
  23. {
  24. result = script.Execute();
  25. }
  26. catch (Exception eRun)
  27. {
  28. Logger.Send(LogType.Error, ClientFactory.UserID, "Execute: " + CoreUtils.FormatException(eRun));
  29. }
  30. if (result)
  31. {
  32. Logger.Send(LogType.Information, ClientFactory.UserID, " * Execute() returns true - updating schedule");
  33. schedule.DueDate = schedule.GetNextDate(schedule.Rollover.Equals(ScheduleRollover.FromDueDate) ? schedule.DueDate : duedate);
  34. new Client<Schedule>().Save(schedule, "Schedule Updated by Task (Due Date)");
  35. }
  36. else
  37. Logger.Send(LogType.Information, ClientFactory.UserID, " * Execute() returns false - skipping schedule update");
  38. return true;
  39. }
  40. else
  41. {
  42. Logger.Send(LogType.Error, ClientFactory.UserID, "Script failed to Compile:");
  43. foreach (var line in script.Result.Split('\n'))
  44. Logger.Send(LogType.Information, "", line);
  45. return false;
  46. }
  47. }
  48. catch (Exception eComp)
  49. {
  50. Logger.Send(LogType.Error, ClientFactory.UserID, "Compile: "+eComp.Message);
  51. }
  52. }
  53. return false;
  54. }
  55. }
  56. }