public void ExecuteJob(ConnectionSetting connection, ReportJob job)
        {
            try
            {
                // get the executor relevant to the command type
                IReportExecutor reportExecutor = _reportExecutorFactory.GetReportExecutor(job.CommandType);

                // mark the job as processing
                _logger.Info("Moving job {0} (Id: {1}) into processing state", job.ReportName, job.Id);
                _startJobCommand.Execute(connection, job.Id);

                // extract the data into a data table
                _logger.Info("Processing job for report {0} ({1})", job.ReportName, job.Id);
                reportExecutor.ExecuteJob(connection, job);

                // mark the job as processed
                _logger.Info("Marking job {0} (Id: {1}) as complete", job.ReportName, job.Id);
                _finaliseJobCommand.Execute(connection, job.Id);

                _logger.Info("Completed job for report {0} ({1})", job.ReportName, job.Id);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, ex.Message);

                // mark the job as errored
                _logger.Info("Saving error information job for report {0} ({1})", job.ReportName, job.Id);
                _failJobCommand.Execute(connection, job.Id, ex);
            }
        }
Esempio n. 2
0
        public void ExecuteJob_OnExecute_DownloadsFile()
        {
            // setup
            ReportJob job = new ReportJob();

            job.Command        = Guid.NewGuid().ToString();
            job.OutputFilePath = Environment.CurrentDirectory;
            job.OutputFileName = Path.GetRandomFileName();

            string expectedOutPath = Path.Combine(job.OutputFilePath, job.OutputFileName);

            // execute
            _reportExecutor.ExecuteJob(null, job);

            // assert
            _webClientWrapper.Received(1).UseDefaultCredentials = true;
            _webClientWrapper.Received(1).DownloadFile(job.Command, expectedOutPath);
        }
        public void ExecuteJob_OnExecute_CreatesConnectionUsingFactory()
        {
            // setup
            string            connString  = Guid.NewGuid().ToString();
            ConnectionSetting connSetting = new ConnectionSetting(Guid.NewGuid().ToString(), connString);
            ReportJob         job         = new ReportJob();

            IDbConnection dbConn = Substitute.For <IDbConnection>();

            _dbConnectionFactory.CreateConnection(connString, true).Returns(dbConn);

            IDbCommand cmd = Substitute.For <IDbCommand>();

            dbConn.CreateCommand().Returns(cmd);

            // execute
            _reportExecutor.ExecuteJob(connSetting, job);

            // assert
            _dbConnectionFactory.Received(1).CreateConnection(connString, true);
        }