public static void DeactivateJob(string guid, DatabaseObjectStorageEntryUsable <ChainScheduleManager <T> > dataInstanceWrapper = null) { if (guid == null) { throw new ArgumentNullException(nameof(guid)); } ChainedExecutionData currentChainedExecutionData; using (dataInstanceWrapper = dataInstanceWrapper ?? GetInstance()) { ChainScheduleManager <T> dataInstance = dataInstanceWrapper.Data; currentChainedExecutionData = dataInstance.Jobs.FirstOrDefault(data => data.Guid == guid); if (currentChainedExecutionData == null) { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, "Manual", "Error", $"Es wurde kein Job mit der GUID: {guid} zum deaktivieren gefunden!\r\nDieser Eintrag wird nun übersprungen\r\nEs sind noch {dataInstance.Jobs.Count} Aufträge in der Queue.\r\nAktueller Auftrag ist: {dataInstance.CurrentJob}")); return; } dataInstance.CurrentJob = ""; CallNextJob(currentChainedExecutionData, dataInstanceWrapper); currentChainedExecutionData.ChainedActionExecutionData.DeactivateAction(); dataInstance.Jobs.RemoveAll(data => data.Guid == currentChainedExecutionData.ChainedActionExecutionData.Guid); } }
private static void ActivateJob(string guid) { if (guid == null) { throw new ArgumentNullException(nameof(guid)); } using (DatabaseObjectStorageEntryUsable <ChainScheduleManager <T> > dataInstanceWrapper = GetInstance()) { ChainScheduleManager <T> dataInstance = dataInstanceWrapper.Data; ChainedExecutionData currentChainedExecutionData = dataInstance.Jobs.FirstOrDefault(data => data.Guid == guid); if (currentChainedExecutionData == null) { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, "Manual", "Error", $"Es wurde kein Job mit der GUID: {guid} zum aktivieren gefunden!\r\nDieser Eintrag wird nun übersprungen\r\nEs sind noch {dataInstance.Jobs.Count} Aufträge in der Queue.\r\nAktueller Auftrag ist: {dataInstance.CurrentJob}")); return; } dataInstance.CurrentJob = guid; TimeSpan duration = (currentChainedExecutionData.ChainedActionExecutionData.Duration * currentChainedExecutionData.ChainedActionExecutionData.DurationOverride / 100 * GetGlobalOverride()); currentChainedExecutionData.StartTime = DateTime.Now.TimeOfDay; currentChainedExecutionData.ChainedActionExecutionData.ActivateAction(duration); currentChainedExecutionData.DeactivationJob = BackgroundJob.Schedule(() => DeactivateJob(currentChainedExecutionData.Guid, null), duration); currentChainedExecutionData.Duration = duration; } }
public static void AddEntry(T manualActionExecution, string elementEventSource) { if (manualActionExecution == null) { throw new ArgumentNullException(nameof(manualActionExecution)); } if (elementEventSource == null) { throw new ArgumentNullException(nameof(elementEventSource)); } using (DatabaseObjectStorageEntryUsable <ChainScheduleManager <T> > dataInstanceWrapper = GetInstance()) { ChainScheduleManager <T> dataInstance = dataInstanceWrapper.Data; if (dataInstance.CurrentJob == "" && dataInstance.Jobs.Count > 0) { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, "System", "Warn", $"ChainScheduleManager: Es ist kein aktuell ausgeführter Job spezifiziert, jedoch sind noch {dataInstance.Jobs.Count} Jobs in der Queue. Diese werden nun vom ältesten beginnend abgearbeitet. {JsonConvert.SerializeObject(dataInstance.Jobs.First())}")); Task.Run(() => ActivateJob(dataInstance.Jobs.First().Guid)); } if (dataInstance.Jobs.Count == 0 || dataInstance.Jobs.All(data => data.NextGuid != "")) { ChainedExecutionData newChainedExecutionData = new ChainedExecutionData(manualActionExecution, elementEventSource, ""); dataInstance.Jobs.Add(newChainedExecutionData); Task.Run(() => ActivateJob(newChainedExecutionData.Guid)); } else { ChainedExecutionData previousChainedExecutionData = dataInstance.Jobs.Last(data => data.NextGuid == ""); previousChainedExecutionData.NextGuid = manualActionExecution.Guid; dataInstance.Jobs.Add(new ChainedExecutionData(manualActionExecution, elementEventSource, previousChainedExecutionData.Guid)); } } }
public static void DeactivateAll(string operatingMode) { string result = new HttpClient(GetHttpClientHandler()).GetAsync($"https://{PrivateData.RemoteHostName}/watering/ctrl/99/off/").EnsureResultSuccessStatusCode().Result.Content.ReadAsStringAsync().Result; ResultClass deserializeObject = JsonConvert.DeserializeObject <ResultClass>(result); if (deserializeObject.CurrentState == false) { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, operatingMode, "OK", $"Alle Kanäle wurden deaktiviert.\r\nDie Antwort des Servers lautet: {result}")); } else { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, operatingMode, "Error", $"Es wurde versucht alle Kanäle zu deaktivieren, dies ist Fehlgeschlagen.\r\nDie Antwort des Servers lautet: {result}")); } }
public static void Activate(int channelId, bool activateMasterChannel, string operatingMode) { string result = new HttpClient(GetHttpClientHandler()).GetAsync($"https://{PrivateData.RemoteHostName}/watering/ctrl/{channelId}/on/?master={(activateMasterChannel ? "on" : "off")}").EnsureResultSuccessStatusCode().Result.Content.ReadAsStringAsync().Result; ResultClass deserializeObject = JsonConvert.DeserializeObject <ResultClass>(result); if (deserializeObject.CurrentState == true) { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, operatingMode, "OK", $"Der Kanal {channelId} wurde {(activateMasterChannel ? "mit" : "ohne")} dem MasterKanal aktiviert.\r\nDie Antwort des Servers lautet: {result}")); } else { HistoryController.AddLogEntry(new HistoryElement(DateTime.Now, operatingMode, "Error", $"Es wurde versucht, den Kanal {channelId} {(activateMasterChannel ? "mit" : "ohne")} dem MasterKanal zu aktiviert, dies ist Fehlgeschlagen.\r\nDie Antwort des Servers lautet: {result}")); } }