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()); }
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()); }