Example #1
0
        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);
        }
Example #2
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);
            }
        }
Example #3
0
        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;
        }
Example #4
0
        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);
        }
Example #5
0
        /// <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);
        }