Exemple #1
0
        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*/ }
        }
Exemple #2
0
        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); });
        }
Exemple #3
0
        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();
        }