private void CleanUpAndTrackingHeartbeatOnElapsed(object sender, ElapsedEventArgs e) { try { jiraTimerCollection.RemoveTimersOlderThanDays(settingsCollection.AppSettings.KeepTimersForDays); idleTimerCollection.RemoveOldTimers(); jiraConnection.UpdateCache(); var runningTimerId = jiraTimerCollection.GetRunningTimerId(); if (runningTimerId.HasValue) { var runningTimer = jiraTimerCollection.GetTimer(runningTimerId.Value); if (runningTimer.DateStarted.Date != DateTime.Now.Date) { jiraTimerCollection.StopTimer(runningTimerId.Value, true); jiraTimerCollection.StartTimer(runningTimerId.Value); } } BackendModifiedTimers?.Invoke(this, null); if (settingsCollection.InternalSettings.LastHeartbeatTracked.Date < DateTime.UtcNow.Date) { if (versionControl.IsAutomatedDeploy && jiraConnection.IsConnected) { DailyTrackingEvent?.Invoke(this, null); trackUsage.TrackAppUsage(TrackingType.DailyHeartbeat); settingsCollection.InternalSettings.SetLastHeartbeatTracked(DateTime.UtcNow); settingsCollection.SaveSettings(); } } } catch { /*Suppress Errors, if this fails timers won't be removed*/ } }
public void Initialise() { settingsCollection.Initialise(); idleTimerCollection.Initialise(); jiraTimerCollection.Initialise(); recentJiraCollection.Initialise(); if (settingsCollection.InternalSettings.LastChangeLogVersion == new Version(0, 0, 0, 0) && settingsCollection.InternalSettings.NewUser) { throw new MissingConfigException("New User"); } jiraConnection.ReConnect(settingsCollection.JiraConnectionSettings, settingsCollection.ExportSettings); cleanUpAndTrackingHeartbeat.Start(); jiraExportHeartbeat.Start(); BackendModifiedTimers?.Invoke(this, null); if (Settings.AppSettings.TimerRunningOnShutdown.HasValue) { var timer = jiraTimerCollection.GetTimer(Settings.AppSettings.TimerRunningOnShutdown.Value); if (timer != null && timer.DateStarted.Date == DateTime.Now.Date) { JiraTimerCollection.StartTimer(Settings.AppSettings.TimerRunningOnShutdown.Value); } Settings.AppSettings.TimerRunningOnShutdown = null; SaveSettings(false, false); } if (Settings.AppSettings.NoTimerRunningOnShutdown.HasValue) { ActivityChecker.SetValue(Settings.AppSettings.NoTimerRunningOnShutdown.Value); Settings.AppSettings.NoTimerRunningOnShutdown = null; SaveSettings(false, false); } CleanUpAndTrackingHeartbeatOnElapsed(this, null); IsInitialised = true; Task.Run(() => { JiraExportHeartbeatHeartbeatOnElapsed(this, null); }); }
private void JiraExportHearbeatHearbeatOnElapsed(object sender, ElapsedEventArgs e) { exportedHeartbeatMutex.WaitOne(); var issueCache = new List <Issue>(); try { var keepTimersForDays = settingsCollection.AppSettings.KeepTimersForDays; if (keepTimersForDays > 0) { keepTimersForDays = keepTimersForDays * -1; } var workingDate = DateTime.Now.AddDays(keepTimersForDays + 1); var doCheck = false; if (lastMissingTimerCheck < DateTime.UtcNow.AddHours(-1)) { doCheck = true; lastMissingTimerCheck = DateTime.UtcNow; } var checkDates = new Dictionary <DateTime, List <JiraTimer> >(); while (workingDate.Date <= DateTime.Now.Date) { var timersOnDate = jiraTimerCollection.GetTimersForADate(workingDate.Date).ToList(); if (doCheck || timersOnDate.Any(x => !x.LastJiraTimeCheck.HasValue || x.LastJiraTimeCheck.Value < DateTime.UtcNow.AddMinutes(-30))) { checkDates.Add(workingDate, timersOnDate); } workingDate = workingDate.AddDays(1); } var jirasExportedTo = jiraConnection.GetWorkLoggedForDates(checkDates.Keys).ToList(); foreach (var checkDate in checkDates) { foreach (var timeExport in jirasExportedTo.Where(x => x.LoggedDate.Date == checkDate.Key.Date)) { if (!checkDate.Value.Any(x => x.JiraReference == timeExport.JiraRef)) { var issue = issueCache.FirstOrDefault(x => x.key == timeExport.JiraRef); if (issue == null) { issue = jiraConnection.GetJiraIssue(timeExport.JiraRef); issueCache.Add(issue); } var timerReference = jiraTimerCollection.AddTimer(issue, checkDate.Key.Date, new TimeSpan(), false); jiraTimerCollection.RefreshFromJira(timerReference, issue, timeExport.TimeSpent); BackendModifiedTimers?.Invoke(this, null); } } foreach (var timer in checkDate.Value.Where(x => !x.LocalTimer)) { var issue = issueCache.FirstOrDefault(x => x.key == timer.JiraReference); if (issue == null) { issue = jiraConnection.GetJiraIssue(timer.JiraReference); issueCache.Add(issue); } var time = jirasExportedTo.FirstOrDefault(x => x.JiraRef == timer.JiraReference && x.LoggedDate.Date == checkDate.Key.Date)?.TimeSpent; jiraTimerCollection.RefreshFromJira(timer.UniqueId, issue, time ?? TimeSpan.Zero); } } } catch { /*Surpress the error*/ } exportedHeartbeatMutex.ReleaseMutex(); }