示例#1
0
        private void AssertThatThereIsACacheDataProvider(ILoadMetadata metadata, IEnumerable<IProcessTask> processTasks)
        {
            const string whatWeExpected = @"(we expected one that was a MEF class implementing ICachedDataProvider since you are trying to execute a cache based data load)";

            List<ProcessTask> incompatibleProviders = new List<ProcessTask>();
            List<ProcessTask> compatibleProviders = new List<ProcessTask>();


            foreach (ProcessTask task in processTasks)
            {
                //it's not a DataProvider
                if (!task.ProcessTaskType.Equals(ProcessTaskType.DataProvider))
                    continue;

                
                var type = task.CatalogueRepository.MEF.GetType(task.Path);

                if (typeof(ICachedDataProvider).IsAssignableFrom(type))
                    compatibleProviders.Add(task);
                else
                    incompatibleProviders.Add(task);
            }

            if (!incompatibleProviders.Any() && !compatibleProviders.Any())
                throw new CacheDataProviderFindingException("LoadMetadata " + metadata + " does not have ANY process tasks of type ProcessTaskType.DataProvider " + whatWeExpected);

            if (!compatibleProviders.Any())
                throw new CacheDataProviderFindingException("LoadMetadata " + metadata + " has some DataProviders tasks but none of them wrap classes that implement ICachedDataProvider " + whatWeExpected + " FYI the data providers in your load wrap the following classes:" + string.Join(",", incompatibleProviders.Select(t => t.Path)));

            if (compatibleProviders.Count > 1)
                throw new CacheDataProviderFindingException("LoadMetadata " + metadata + " has multiple cache DataProviders tasks (" + string.Join(",", compatibleProviders.Select(p => p.ToString())) + "), you are only allowed 1");

        }
示例#2
0
 protected ScheduledJobFactory(int?overrideNumberOfDaysToLoad, ILoadMetadata loadMetadata, ILogManager logManager)
 {
     OverrideNumberOfDaysToLoad = overrideNumberOfDaysToLoad;
     JobDescription             = loadMetadata.Name;
     LoadMetadata = loadMetadata;
     LogManager   = logManager;
 }
 public CheckEntireDataLoadProcess(ILoadMetadata loadMetadata, HICDatabaseConfiguration databaseConfiguration, HICLoadConfigurationFlags loadConfigurationFlags, MEF mef)
 {
     _databaseConfiguration  = databaseConfiguration;
     _loadConfigurationFlags = loadConfigurationFlags;
     _mef         = mef;
     LoadMetadata = loadMetadata;
 }
示例#4
0
        public ChooseLoadDirectoryUI(ILoadMetadata loadMetadata)
        {
            InitializeComponent();

            var help = loadMetadata.CatalogueRepository.CommentStore.GetDocumentationIfExists("ILoadMetadata.LocationOfFlatFiles", false, true);

            helpIcon1.SetHelpText("Location Of Flat Files", help);
        }
        /// <summary>
        /// Preferred Constructor, creates RAW, STAGING, LIVE connection strings based on the data access points in the LoadMetadata, also respects the ServerDefaults for RAW override (if any)
        /// </summary>
        /// <param name="lmd"></param>
        /// <param name="namer"></param>
        public HICDatabaseConfiguration(ILoadMetadata lmd, INameDatabasesAndTablesDuringLoads namer = null) :
            this(lmd.GetDistinctLiveDatabaseServer(), namer, lmd.CatalogueRepository.GetServerDefaults(), lmd.OverrideRAWServer)
        {
            var globalIgnorePattern = GetGlobalIgnorePatternIfAny(lmd.CatalogueRepository);

            if (globalIgnorePattern != null && !string.IsNullOrWhiteSpace(globalIgnorePattern.Regex))
            {
                IgnoreColumns = new Regex(globalIgnorePattern.Regex);
            }
        }
示例#6
0
        public ICacheLayout CreateCacheLayout(ILoadProgress loadProgress, ILoadMetadata metadata)
        {
            AssertThatThereIsACacheDataProvider(metadata, metadata.ProcessTasks.Where(p=>!p.IsDisabled));

            var cp = loadProgress.CacheProgress;

            var factory = new CachingPipelineUseCase(cp);
            var destination = factory.CreateDestinationOnly(new ThrowImmediatelyDataLoadEventListener());

            return destination.CreateCacheLayout();
        }
示例#7
0
        public DataLoadProcess(IRDMPPlatformRepositoryServiceLocator repositoryLocator, ILoadMetadata loadMetadata, ICheckable preExecutionChecker, ILogManager logManager, IDataLoadEventListener dataLoadEventListener, IDataLoadExecution loadExecution, HICDatabaseConfiguration configuration)
        {
            _repositoryLocator    = repositoryLocator;
            LoadMetadata          = loadMetadata;
            DataLoadEventListener = dataLoadEventListener;
            _configuration        = configuration;
            LoadExecution         = loadExecution;
            _preExecutionChecker  = preExecutionChecker;
            LogManager            = logManager;
            ExitCode = ExitCodeType.Success;

            JobProvider = new JobFactory(loadMetadata, logManager);
        }
示例#8
0
        /// <summary>
        /// Creates a new operation in the data load (e.g. copy files from A to B, load all CSV files to RAW table B etc)
        /// </summary>
        /// <param name="repository"></param>
        /// <param name="parent"></param>
        /// <param name="stage"></param>
        public ProcessTask(ICatalogueRepository repository, ILoadMetadata parent, LoadStage stage)
        {
            var order = repository.GetAllObjectsWithParent <ProcessTask>(parent).Select(t => t.Order).DefaultIfEmpty().Max() + 1;

            repository.InsertAndHydrate(this, new Dictionary <string, object>
            {
                { "LoadMetadata_ID", parent.ID },
                { "ProcessTaskType", ProcessTaskType.Executable.ToString() },
                { "LoadStage", stage },
                { "Name", "New Process" + Guid.NewGuid() },
                { "Order", order }
            });
        }
示例#9
0
        public LoadProgressSummaryReport(LoadProgress loadProgress)
        {
            _loadProgress  = loadProgress;
            _loadMetadata  = _loadProgress.LoadMetadata;
            _cacheProgress = _loadProgress.CacheProgress;

            try
            {
                dqeRepository = new DQERepository(loadProgress.CatalogueRepository);
            }
            catch (NotSupportedException)
            {
                dqeRepository = null;
            }
        }
示例#10
0
        public HICDataLoadFactory(ILoadMetadata loadMetadata, HICDatabaseConfiguration databaseConfiguration, HICLoadConfigurationFlags loadConfigurationFlags, ICatalogueRepository repository, ILogManager logManager)
        {
            _databaseConfiguration  = databaseConfiguration;
            _loadConfigurationFlags = loadConfigurationFlags;
            _repository             = repository;
            _logManager             = logManager;
            LoadMetadata            = loadMetadata;

            // If we are not supplied any catalogues to load, it is expected that we will load all catalogues associated with the provided ILoadMetadata
            _cataloguesToLoad = LoadMetadata.GetAllCatalogues().ToList();
            if (!_cataloguesToLoad.Any())
            {
                throw new InvalidOperationException("LoadMetadata " + LoadMetadata.ID + " is not related to any Catalogues, there is nothing to load");
            }
        }
示例#11
0
        public LoadArgsDictionary(ILoadMetadata loadMetadata, StandardDatabaseHelper dbDeployInfo)
        {
            if (string.IsNullOrWhiteSpace(loadMetadata.LocationOfFlatFiles))
            {
                throw new Exception(@"No Project Directory (LocationOfFlatFiles) has been configured on LoadMetadata " + loadMetadata.Name);
            }

            _dbDeployInfo = dbDeployInfo;
            _loadMetadata = loadMetadata;

            LoadArgs = new Dictionary <LoadStage, IStageArgs>();
            foreach (LoadStage loadStage in Enum.GetValues(typeof(LoadStage)))
            {
                LoadArgs.Add(loadStage, CreateLoadArgs(loadStage));
            }
        }
示例#12
0
        public ChooseLoadDirectoryUI(IActivateItems activator, ILoadMetadata loadMetadata)
        {
            InitializeComponent();

            SetItemActivator(activator);

            var help = loadMetadata.CatalogueRepository.CommentStore.GetDocumentationIfExists("ILoadMetadata.LocationOfFlatFiles", false, true);

            helpIcon1.SetHelpText("Location Of Flat Files", help);

            if (!string.IsNullOrWhiteSpace(loadMetadata.LocationOfFlatFiles))
            {
                tbUseExisting.Text = loadMetadata.LocationOfFlatFiles;
                CheckExistingProjectDirectory();
            }
        }
示例#13
0
        public DataLoadJob(IRDMPPlatformRepositoryServiceLocator repositoryLocator, string description, ILogManager logManager, ILoadMetadata loadMetadata, ILoadDirectory directory, IDataLoadEventListener listener, HICDatabaseConfiguration configuration)
        {
            _logManager       = logManager;
            RepositoryLocator = repositoryLocator;
            LoadMetadata      = loadMetadata;
            LoadDirectory     = directory;
            Configuration     = configuration;
            _listener         = listener;
            Description       = description;

            List <ICatalogue> catalogues = LoadMetadata.GetAllCatalogues().ToList();

            if (LoadMetadata != null)
            {
                _loggingTask = GetLoggingTask(catalogues);
            }

            RegularTablesToLoad = catalogues.SelectMany(catalogue => catalogue.GetTableInfoList(false)).Distinct().ToList();
            LookupTablesToLoad  = catalogues.SelectMany(catalogue => catalogue.GetLookupTableInfoList()).Distinct().ToList();
        }
示例#14
0
 public ScheduledDataLoadJob(IRDMPPlatformRepositoryServiceLocator repositoryLocator, string description, ILogManager logManager, ILoadMetadata loadMetadata, ILoadDirectory directory, IDataLoadEventListener listener, HICDatabaseConfiguration configuration)
     : base(repositoryLocator, description, logManager, loadMetadata, directory, listener, configuration)
 {
 }
示例#15
0
 public PreExecutionChecker(ILoadMetadata loadMetadata, HICDatabaseConfiguration overrideDatabaseConfiguration)
 {
     _loadMetadata          = loadMetadata;
     _databaseConfiguration = overrideDatabaseConfiguration ?? new HICDatabaseConfiguration(loadMetadata);
     _cataloguesToLoad      = _loadMetadata.GetAllCatalogues().ToList();
 }
示例#16
0
 public CatalogueLoadChecks(ILoadMetadata loadMetadata, HICLoadConfigurationFlags loadConfigurationFlags, HICDatabaseConfiguration databaseConfiguration)
 {
     _loadMetadata           = loadMetadata;
     _loadConfigurationFlags = loadConfigurationFlags;
     _databaseConfiguration  = databaseConfiguration;
 }
示例#17
0
 public ProcessTaskChecks(ILoadMetadata loadMetadata)
 {
     _loadMetadata = loadMetadata;
 }
 public AnyAvailableLoadProgressSelectionStrategy(ILoadMetadata loadMetadata)
 {
     _loadMetadata = loadMetadata;
 }
 public SingleScheduledJobFactory(ILoadProgress loadProgress, IJobDateGenerationStrategy jobDateGenerationStrategy, int overrideNumberOfDaysToLoad, ILoadMetadata loadMetadata, ILogManager logManager) : base(overrideNumberOfDaysToLoad, loadMetadata, logManager)
 {
     _loadProgress = loadProgress;
     _jobDateGenerationStrategy = jobDateGenerationStrategy;
 }
示例#20
0
 public JobFactory(ILoadMetadata loadMetadata, ILogManager logManager)
 {
     _loadMetadata = loadMetadata;
     _logManager   = logManager;
 }
示例#21
0
文件: DleRunner.cs 项目: 24418863/rdm
        public int Run(IRDMPPlatformRepositoryServiceLocator locator, IDataLoadEventListener listener, ICheckNotifier checkNotifier, GracefulCancellationToken token)
        {
            ILoadProgress loadProgress = locator.CatalogueRepository.GetObjectByID <LoadProgress>(_options.LoadProgress);
            ILoadMetadata loadMetadata = locator.CatalogueRepository.GetObjectByID <LoadMetadata>(_options.LoadMetadata);

            if (loadMetadata == null && loadProgress != null)
            {
                loadMetadata = loadProgress.LoadMetadata;
            }

            if (loadMetadata == null)
            {
                throw new ArgumentException("No Load Metadata specified");
            }

            if (loadProgress != null && loadProgress.LoadMetadata_ID != loadMetadata.ID)
            {
                throw new ArgumentException("The supplied LoadProgress does not belong to the supplied LoadMetadata load");
            }

            var databaseConfiguration = new HICDatabaseConfiguration(loadMetadata);
            var flags = new HICLoadConfigurationFlags();

            flags.ArchiveData                = !_options.DoNotArchiveData;
            flags.DoLoadToStaging            = !_options.StopAfterRAW;
            flags.DoMigrateFromStagingToLive = !_options.StopAfterSTAGING;

            var checkable = new CheckEntireDataLoadProcess(loadMetadata, databaseConfiguration, flags, locator.CatalogueRepository.MEF);

            switch (_options.Command)
            {
            case CommandLineActivity.run:

                var loggingServer = loadMetadata.GetDistinctLoggingDatabase();
                var logManager    = new LogManager(loggingServer);

                // Create the pipeline to pass into the DataLoadProcess object
                var dataLoadFactory = new HICDataLoadFactory(loadMetadata, databaseConfiguration, flags, locator.CatalogueRepository, logManager);

                IDataLoadExecution execution = dataLoadFactory.Create(listener);
                IDataLoadProcess   dataLoadProcess;

                if (loadMetadata.LoadProgresses.Any())
                {
                    //Then the load is designed to run X days of source data at a time
                    //Load Progress
                    ILoadProgressSelectionStrategy whichLoadProgress = loadProgress != null ? (ILoadProgressSelectionStrategy) new SingleLoadProgressSelectionStrategy(loadProgress) : new AnyAvailableLoadProgressSelectionStrategy(loadMetadata);

                    var jobDateFactory = new JobDateGenerationStrategyFactory(whichLoadProgress);

                    dataLoadProcess = _options.Iterative
                            ? (IDataLoadProcess) new IterativeScheduledDataLoadProcess(locator, loadMetadata, checkable, execution, jobDateFactory, whichLoadProgress, _options.DaysToLoad, logManager, listener, databaseConfiguration) :
                                      new SingleJobScheduledDataLoadProcess(locator, loadMetadata, checkable, execution, jobDateFactory, whichLoadProgress, _options.DaysToLoad, logManager, listener, databaseConfiguration);
                }
                else
                {
                    //OnDemand
                    dataLoadProcess = new DataLoadProcess(locator, loadMetadata, checkable, logManager, listener, execution, databaseConfiguration);
                }

                var exitCode = dataLoadProcess.Run(token);

                //return 0 for success or load not required otherwise return the exit code (which will be non zero so error)
                return(exitCode == ExitCodeType.Success || exitCode == ExitCodeType.OperationNotRequired? 0: (int)exitCode);

            case CommandLineActivity.check:

                checkable.Check(checkNotifier);

                return(0);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
示例#22
0
        public MultipleScheduleJobFactory(Dictionary <ILoadProgress, IJobDateGenerationStrategy> availableSchedules, int?overrideNumberOfDaysToLoad, ILoadMetadata loadMetadata, ILogManager logManager)
            : base(overrideNumberOfDaysToLoad, loadMetadata, logManager)
        {
            _availableSchedules = availableSchedules;

            _scheduleList = _availableSchedules.Keys.ToList();

            _lastScheduleId = 0;
        }
示例#23
0
 // todo: refactor to cut down on ctor params
 public IterativeScheduledDataLoadProcess(IRDMPPlatformRepositoryServiceLocator repositoryLocator, ILoadMetadata loadMetadata, ICheckable preExecutionChecker, IDataLoadExecution loadExecution, JobDateGenerationStrategyFactory jobDateGenerationStrategyFactory, ILoadProgressSelectionStrategy loadProgressSelectionStrategy, int?overrideNumberOfDaysToLoad, ILogManager logManager, IDataLoadEventListener dataLoadEventsreceiver, HICDatabaseConfiguration configuration)
     : base(repositoryLocator, loadMetadata, preExecutionChecker, loadExecution, jobDateGenerationStrategyFactory, loadProgressSelectionStrategy, overrideNumberOfDaysToLoad, logManager, dataLoadEventsreceiver, configuration)
 {
 }
示例#24
0
 public MetadataLoggingConfigurationChecks(ILoadMetadata loadMetadata)
 {
     _loadMetadata = loadMetadata;
 }
示例#25
0
 /// <summary>
 /// Preferred Constructor, creates RAW, STAGING, LIVE connection strings based on the data access points in the LoadMetadata, also respects the ServerDefaults for RAW override (if any)
 /// </summary>
 /// <param name="lmd"></param>
 /// <param name="namer"></param>
 public HICDatabaseConfiguration(ILoadMetadata lmd, INameDatabasesAndTablesDuringLoads namer = null) :
     this(lmd.GetDistinctLiveDatabaseServer(), namer, lmd.CatalogueRepository.GetServerDefaults(), lmd.OverrideRAWServer)
 {
 }