Пример #1
0
        private string ComposeBody()
        {
            var sb = new StringBuilder();

            sb.Append("General:\n");
            sb.AppendFormat(" - Total number of candidates registered: {0}\n", _userMetricsRepository.GetRegisteredUserCount());
            sb.AppendFormat(" - Total number of candidates registered and activated: {0}\n", _userMetricsRepository.GetRegisteredAndActivatedUserCount());

            // Apprenticeship applications.
            sb.Append("Apprenticeships:\n");
            sb.AppendFormat(" - Total number of applications: {0}\n", _apprenticeshipMetricsRepository.GetApplicationCount());
            sb.AppendFormat("   - Draft: {0}\n", _apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.Draft));
            sb.AppendFormat("   - Submitted: {0}\n", _apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.Submitted));
            sb.AppendFormat("   - Expired or Withdrawn: {0}\n", _apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.ExpiredOrWithdrawn));
            sb.AppendFormat("   - Unsuccessful: {0}\n", _apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.Unsuccessful));
            sb.AppendFormat("   - Successful: {0}\n", _apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.Successful));

            // Apprenticeship applications per candidate.
            sb.AppendFormat(" - Total number of candidates with at least one application in any state: {0}\n",
                            _apprenticeshipMetricsRepository.GetApplicationCountPerCandidate());

            sb.AppendFormat(" - Total number of candidates with at least one application in draft: {0}\n",
                            _apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate(ApplicationStatuses.Draft));

            sb.AppendFormat(" - Total number of candidates with at least one submitted application: {0}\n",
                            _apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate(ApplicationStatuses.Submitting) +
                            _apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate(ApplicationStatuses.Submitted));

            sb.AppendFormat(" - Total number of candidates with at least one successful application: {0}\n",
                            _apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate(ApplicationStatuses.Successful));

            sb.AppendFormat(" - Total number of candidates with at least one unsuccessful application: {0}\n",
                            _apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate(ApplicationStatuses.Unsuccessful));

            // Traineeships.
            sb.Append("Traineeships:\n");
            sb.AppendFormat(" - Total number of applications submitted: {0}\n", _traineeshipMetricsRepository.GetApplicationCount());
            sb.AppendFormat(" - Total number of candidates with applications: {0}\n", _traineeshipMetricsRepository.GetApplicationsPerCandidateCount());

            // Communications.
            sb.Append("Communications:\n");
            sb.AppendFormat(" - Expiring draft applications emails sent today: {0}\n", _communicationsMetricsRepository.GetDraftApplicationEmailsSentToday());

            return(sb.ToString());
        }
Пример #2
0
        private string ComposeBody()
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();

            var sb = new StringBuilder();

            sb.Append("General:\n");
            sb.AppendFormat(" - Total number of candidates registered: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetRegisteredUserCount));
            sb.AppendFormat(" - Total number of candidates registered and activated: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetActivatedUserCount));
            sb.AppendFormat(" - Total number of unactivated candidates: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetUnactivatedUserCount));
            sb.AppendFormat(" - Total number of unactivated candidates with expired activation codes: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetUnactivatedExpiredCodeUserCount));
            sb.AppendFormat(" - Total number of dormant candidates: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetDormantUserCount));
            sb.AppendFormat(" - Total number of deleted candidates: {0} ({1}ms)\n", TimedMongoCall(() => { return(_auditMetricsRepository.GetAuditCount("User.HardDeleteUser") + _auditMetricsRepository.GetAuditCount(AuditEventTypes.HardDeleteCandidateUser)); }));

            var oneWeekAgo    = DateTime.UtcNow.AddDays(-7);
            var fourWeeksAgo  = DateTime.UtcNow.AddDays(-28);
            var customDaysAgo = DateTime.UtcNow.AddDays(-_validNumberOfDaysSinceUserActivity);

            sb.AppendFormat(" - Total number of candidates active in the last week: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetActiveUserCount, oneWeekAgo));
            sb.AppendFormat(" - Total number of candidates active in the last four weeks: {0} ({1}ms)\n", TimedMongoCall(_userMetricsRepository.GetActiveUserCount, fourWeeksAgo));
            sb.AppendFormat(" - Total number of candidates active in the last {2} days: {0} ({1}ms)\n", GetActiveUserCount(_userMetricsRepository.GetActiveUserCount, customDaysAgo));

            sb.AppendFormat(" - Total number of candidates with verified mobile numbers: {0} ({1}ms)\n", TimedMongoCall(_candidateMetricsRepository.GetVerfiedMobileNumbersCount));

            sb.AppendFormat(" - Total number of saved searches: {0} ({1}ms)\n", TimedMongoCall(_savedSearchesMetricsRepository.GetSavedSearchesCount));

            // Apprenticeship applications.
            sb.Append("Apprenticeships:\n");
            sb.AppendFormat(" - Total number of applications: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationCount));
            sb.AppendFormat("   - Saved: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCount, ApplicationStatuses.Saved));
            sb.AppendFormat("   - Draft: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCount, ApplicationStatuses.Draft));
            sb.AppendFormat("   - Submitted: {0} ({1}ms)\n", TimedMongoCall(() => { return(_apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.Submitted) + _apprenticeshipMetricsRepository.GetApplicationStateCount(ApplicationStatuses.InProgress)); }));
            sb.AppendFormat("   - Expired or Withdrawn: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCount, ApplicationStatuses.ExpiredOrWithdrawn));
            sb.AppendFormat("   - Unsuccessful: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCount, ApplicationStatuses.Unsuccessful));
            sb.AppendFormat("   - Successful: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCount, ApplicationStatuses.Successful));

            // Apprenticeship applications per candidate.
            var s1 = TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate, ApplicationStatuses.Submitting);
            var s2 = TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate, ApplicationStatuses.Submitted);

            sb.AppendFormat(" - Total number of candidates with at least one submitted application: {0} ({1}ms + {2}ms)\n", (int)s1[0] + (int)s2[0], s1[1], s2[1]);

            sb.AppendFormat(" - Total number of candidates with at least one successful application: {0} ({1}ms)\n", TimedMongoCall(_apprenticeshipMetricsRepository.GetApplicationStateCountPerCandidate, ApplicationStatuses.Successful));

            sb.AppendFormat(" - Total number of Apprenticeships: {0}\n", _vacancyMetricsProvider.GetApprenticeshipsCount());

            // Traineeships.
            sb.Append("Traineeships:\n");
            sb.AppendFormat(" - Total number of applications submitted: {0} ({1}ms)\n", TimedMongoCall(_traineeshipMetricsRepository.GetApplicationCount));
            sb.AppendFormat(" - Total number of candidates with applications: {0} ({1}ms)\n", TimedMongoCall(_traineeshipMetricsRepository.GetApplicationsPerCandidateCount));
            sb.AppendFormat(" - Total number of candidates who have dismissed the traineeship prompt: {0} ({1}ms)\n", TimedMongoCall(_candidateMetricsRepository.GetDismissedTraineeshipPromptCount));

            sb.AppendFormat(" - Total number of Traineeships: {0}\n", _vacancyMetricsProvider.GetTraineeshipsCount());

            // Communications.
            sb.Append("Communications:\n");
            sb.AppendFormat(" - Number of expiring draft applications processed today: {0} ({1}ms)\n", TimedMongoCall(_expiringDraftsMetricsRepository.GetDraftApplicationsProcessedToday));
            sb.AppendFormat(" - Number of application status alerts processed today: {0} ({1}ms)\n", TimedMongoCall(_applicationStatusAlertsMetricsRepository.GetApplicationStatusAlertsProcessedToday));
            sb.AppendFormat(" - Number of saved search alerts processed today: {0} ({1}ms)\n", TimedMongoCall(_savedSearchAlertMetricsRepository.GetSavedSearchAlertsProcessedToday));
            sb.AppendFormat(" - Number of contact us emails sent today: {0} ({1}ms)\n", TimedMongoCall(_contactMessagesMetricsRepository.GetContactMessagesSentToday));

            //Daily Stats
            sb.Append("Daily:\n");
            var today           = DateTime.UtcNow;
            var midnightAmToday = new DateTime(today.Year, today.Month, today.Day);

            AddDailyStats(sb, midnightAmToday.AddDays(-1));
            AddDailyStats(sb, midnightAmToday.AddDays(-2));

            stopwatch.Stop();

            var message = string.Format("Daily metrics queries took {0}", stopwatch.Elapsed);

            if (stopwatch.ElapsedMilliseconds > 120000)
            {
                _logger.Warn(message);
            }
            else
            {
                _logger.Info(message);
            }

            return(sb.ToString());
        }