Пример #1
0
        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);
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
 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));
         }
     }
 }
Пример #4
0
        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}"));
            }
        }
Пример #5
0
        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}"));
            }
        }