private static int RecreateReport(GlobalOptions globalOptions, CohortPackagerCliOptions cliOptions) { Logger logger = LogManager.GetCurrentClassLogger(); logger.Info($"Recreating report for job {cliOptions.ExtractionId}"); MongoDbOptions mongoDbOptions = globalOptions.MongoDatabases.ExtractionStoreOptions; MongoClient client = MongoClientHelpers.GetMongoClient(mongoDbOptions, SmiCliInit.HostProcessName); var jobStore = new MongoExtractJobStore(client, mongoDbOptions.DatabaseName); // NOTE(rkm 2020-10-22) Sets the extraction root to the current directory IJobReporter reporter = JobReporterFactory.GetReporter( "FileReporter", jobStore, new FileSystem(), Directory.GetCurrentDirectory(), cliOptions.ReportFormat.ToString(), cliOptions.OutputNewLine ?? globalOptions.CohortPackagerOptions.ReportNewLine, createJobIdFile: false ); try { reporter.CreateReport(cliOptions.ExtractionId); } catch (Exception e) { logger.Error(e); return(1); } return(0); }
public void GetReporter_UsesOutputNewLine() { // TODO(rkm 2020-11-26) Maybe improve this by building list using reflection to cover new types in future? var reporterImpls = new List <Type> { typeof(FileReporter), typeof(LoggingReporter) }; // NOTE(rkm 2020-11-20) Ensure we aren't testing the Environment.NewLine, which will be the default if the format is not properly passed string testNewLine = (Environment.NewLine == "\r\n") ? "\n" : "\r\n"; foreach (Type reporterImpl in reporterImpls) { IJobReporter reporter = JobReporterFactory.GetReporter( reporterImpl.Name, new Mock <IExtractJobStore>().Object, new MockFileSystem(), extractRoot: "", reportFormatStr: "Combined", testNewLine ); var asBase = reporter as JobReporterBase; Assert.NotNull(asBase); Assert.AreEqual(testNewLine, asBase.ReportNewLine); } }
public ExtractJobWatcher( CohortPackagerOptions options, IExtractJobStore jobStore, Action <Exception> exceptionCallback, [NotNull] IJobCompleteNotifier jobCompleteNotifier, [NotNull] IJobReporter reporter) { _jobStore = jobStore; _exceptionCallback = exceptionCallback; _reporter = reporter; _notifier = jobCompleteNotifier; _processTimer = new SysTimers.Timer(TimeSpan.FromSeconds(options.JobWatcherTimeoutInSeconds).TotalMilliseconds); _processTimer.Elapsed += TimerElapsedEvent; }
public void GetReporter_ConstructsLoggingReporter() { var mockJobStore = new Mock <IExtractJobStore>(); IJobReporter reporter = JobReporterFactory.GetReporter( reporterTypeStr: "LoggingReporter", mockJobStore.Object, new MockFileSystem(), extractRoot: "", reportFormatStr: "Combined", reportNewLine: null ); var loggingReporter = reporter as LoggingReporter; Assert.NotNull(loggingReporter); Assert.AreEqual(ReportFormat.Combined, loggingReporter.ReportFormat); }
/// <summary> /// Default constructor for CohortPackagerHost /// </summary> /// <param name="globals"></param> /// <param name="jobStore"></param> /// <param name="fileSystem"></param> /// <param name="reporter"> /// Pass to override the default IJobReporter that will be created from /// Globals.CohortPackagerOptions.ReportFormat. That value should not be set if a reporter is passed. /// </param> /// <param name="notifier"></param> /// <param name="rabbitMqAdapter"></param> /// <param name="dateTimeProvider"></param> public CohortPackagerHost( [NotNull] GlobalOptions globals, [CanBeNull] ExtractJobStore jobStore = null, [CanBeNull] IFileSystem fileSystem = null, [CanBeNull] IJobReporter reporter = null, [CanBeNull] IJobCompleteNotifier notifier = null, [CanBeNull] IRabbitMqAdapter rabbitMqAdapter = null, [CanBeNull] DateTimeProvider dateTimeProvider = null ) : base(globals, rabbitMqAdapter) { if (jobStore == null) { MongoDbOptions mongoDbOptions = Globals.MongoDatabases.ExtractionStoreOptions; jobStore = new MongoExtractJobStore( MongoClientHelpers.GetMongoClient(mongoDbOptions, HostProcessName), mongoDbOptions.DatabaseName, dateTimeProvider ); } else if (dateTimeProvider != null) { throw new ArgumentException("jobStore and dateTimeProvider are mutually exclusive arguments"); } // If not passed a reporter or notifier, try and construct one from the given options string reportFormatStr = Globals.CohortPackagerOptions.ReportFormat; if (reporter == null) { reporter = JobReporterFactory.GetReporter( Globals.CohortPackagerOptions.ReporterType, jobStore, fileSystem ?? new FileSystem(), Globals.FileSystemOptions.ExtractRoot, reportFormatStr, Globals.CohortPackagerOptions.ReportNewLine ); } else { if (!string.IsNullOrWhiteSpace(reportFormatStr)) { throw new ArgumentException($"Passed an IJobReporter, but this conflicts with the ReportFormat of '{reportFormatStr}' in the given options"); } if (fileSystem != null) { throw new ArgumentException("Passed a fileSystem, but this will be unused as also passed an existing IJobReporter"); } } notifier ??= JobCompleteNotifierFactory.GetNotifier( Globals.CohortPackagerOptions.NotifierType ); _jobWatcher = new ExtractJobWatcher( globals.CohortPackagerOptions, jobStore, ExceptionCallback, notifier, reporter ); AddControlHandler(new CohortPackagerControlMessageHandler(_jobWatcher)); // Setup our consumers _requestInfoMessageConsumer = new ExtractionRequestInfoMessageConsumer(jobStore); _fileCollectionMessageConsumer = new ExtractFileCollectionMessageConsumer(jobStore); _anonFailedMessageConsumer = new AnonFailedMessageConsumer(jobStore); _anonVerificationMessageConsumer = new AnonVerificationMessageConsumer(jobStore); }