public DirectoryService(IDirectoryRepository directoryRepository, IQueueService queueService, IQueueRepository queueRepository, ILogger logger)
 {
     _directoryRepository = directoryRepository;
     _queueService = queueService;
     _queueRepository = queueRepository;
     _logger = logger;
 }
Esempio n. 2
0
 public DirectoriesController(IWebHostEnvironment webHostEnvironment,
                              IDirectoryRepository directoryRepository,
                              ITranslator translator)
 {
     _webHostEnvironment  = webHostEnvironment;
     _directoryRepository = directoryRepository;
     _translator          = translator;
 }
 public EndpointResolverService(IDirectoryService directoryService, IDefaultEndpointConfiguration defaultEndpointConfiguration, IUrlBuilder urlBuilder, IDirectoryRepository directoryRepository, ILogger logger)
 {
     _directoryService = directoryService;
     _defaultEndpointConfiguration = defaultEndpointConfiguration;
     _urlBuilder = urlBuilder;
     _directoryRepository = directoryRepository;
     _logger = logger;
 }
Esempio n. 4
0
        public void Init()
        {
            var connectionFactory = new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider);

            _directoryRepository = new OrmLiteDirectoryRepository(connectionFactory);
            _directoryRepository.InitSchema();
            _directoryRepository.RegisterDirectory(OrmLiteDirectoryRepositoryTest.Directory1);
            _directoryRepository.RegisterDirectory(OrmLiteDirectoryRepositoryTest.Directory2);
        }
Esempio n. 5
0
 public ConvertTextureCommandHandler(
     IDirectoryRepository directoryRepository,
     ILogger logger,
     ITextureService textureService)
 {
     _directoryRepository = directoryRepository;
     _logger         = logger;
     _textureService = textureService;
 }
Esempio n. 6
0
        private static Mock <IServiceBase> MockAuthService(IDirectoryRepository repository, MockHttpRequest request = null)
        {
            request = request ?? new MockHttpRequest();
            var mockAuthService = new Mock <IServiceBase>();

            mockAuthService.SetupGet(s => s.Request).Returns(request);
            System.Func <IDirectoryRepository> resolveRepo = () => repository;
            mockAuthService.Setup(x => x.TryResolve <IDirectoryRepository>()).Returns(resolveRepo);
            return(mockAuthService);
        }
 public FilesController(IWebHostEnvironment webHostEnvironment,
                        IDirectoryRepository directoryRepository,
                        IUploadedFileRepository uploadedFileRepository,
                        ITranslator translator)
 {
     _webHostEnvironment     = webHostEnvironment;
     _directoryRepository    = directoryRepository;
     _uploadedFileRepository = uploadedFileRepository;
     _translator             = translator;
 }
Esempio n. 8
0
 public FilesManager(ICache <FilesManager> cache, IEmailSender emailSender,
                     IFilesRepository fileRepo, IDirectoryRepository direRepo,
                     IDirectoryObjectRepository direObjRepo)
 {
     this.emailSender = emailSender;
     this.cache       = cache;
     this.fileRepo    = fileRepo;
     this.direRepo    = direRepo;
     this.direObjRepo = direObjRepo;
 }
        public static async Task <Directory> GetOrFailAsync(this IDirectoryRepository repository, int id)
        {
            var directory = await repository.GetAsync(id);

            if (directory == null)
            {
                throw new Exception($"Directory with id '{id}' does not exist.");
            }

            return(directory);
        }
Esempio n. 10
0
 public LoadService(IDataService dataService,
                    IWebService webService,
                    IBrandRepository brandRepository,
                    IDirectoryRepository directoryRepository)
 {
     this.dataService         = dataService;
     this.webService          = webService;
     this.brandRepository     = brandRepository;
     this.directoryRepository = directoryRepository;
     catalogRepository        = new CatalogRepository(dataService);
     photoRepository          = new PhotoRepository(dataService);
 }
 public MatrixCalculatorService(ILogger <MatrixCalculatorService> logger,
                                IOptions <CalculatorServiceOptions> options,
                                IDirectoryRepository directoryRepository,
                                IMatrixRepository matrixRepository,
                                ICalculator calculator)
 {
     _logger = logger;
     _directoryRepository = directoryRepository;
     _matrixRepository    = matrixRepository;
     _options             = options.Value;
     _calculator          = calculator;
 }
        public IEnumerable <CounterRecord> RequestRecords(DateTime runDate, CounterReport report)
        {
            if (_arguments.JsonRepository != null)
            {
                using (IDirectoryRepository localJsonRepo = RepositoryFactory.CreateDirectoryRepository(_arguments.JsonRepository))
                {
                    List <DirectoryObjectMetadata> jsonFiles = localJsonRepo.ListFiles().ToList();

                    if (jsonFiles.Any(x => x.Name == $"{Name} {runDate:yyyy-MM-dd} {report}.json"))
                    {
                        DirectoryObjectMetadata directoryObjectMetadata = jsonFiles.First(x => x.Name == $"{Name} {runDate:yyyy-MM-dd} {report}.json");
                        using (Stream openFile = localJsonRepo.OpenFile(directoryObjectMetadata.Name))
                        {
                            string jsonString = new StreamReader(openFile).ReadToEnd();
                            foreach (var record in JsonConvert.DeserializeObject <IEnumerable <CounterRecord> >(jsonString))
                            {
                                yield return(record);
                            }
                        }

                        yield break;
                    }
                }
            }

            LogMessage($"Requesting {report.ToString()}");
            var reportItems = GetResponse(runDate, report.ToString());

            if (reportItems == null)
            {
                yield break;
            }

            foreach (IReportItem reportItem in reportItems)
            {
                if (reportItem.ItemDataType == Sushi.DataType.Platform && string.IsNullOrWhiteSpace(reportItem.ItemName))
                {
                    reportItem.ItemName = reportItem.ItemPublisher;
                }

                yield return(new CounterRecord
                {
                    ItemName = reportItem.ItemName,
                    ItemPlatform = reportItem.ItemPlatform,
                    ItemType = Convert(reportItem.ItemDataType),
                    RunDate = runDate,
                    Identifiers = reportItem.ItemIdentifier.Bind(a => a.Select(i => Convert(i, reportItem.ItemPlatform, reportItem.ItemDataType)).Where(i => i != null).ToArray(), new CounterIdentifier[] { }),
                    Metrics = reportItem.ItemPerformance.SelectMany(m => m.Instance).Select(i => new CounterMetric {
                        MetricType = Convert(i.MetricType), MetricValue = Int32.Parse(i.Count)
                    }).ToArray()
                });
            }
        }
Esempio n. 13
0
        private IEnumerable <EZProxyLog> ParseFile(IDirectoryRepository source, string file)
        {
            Stream       stream = source.OpenFile(file);
            StreamReader reader = new StreamReader(stream);
            string       line;
            int          index = 0;

            while ((line = reader.ReadLine()) != null)
            {
                index++;
                bool overall = overallExpression.IsMatch(line);

                if (!overall && !legacyExpression.IsMatch(line))
                {
                    LogMessage($"  ERROR on Line {index} Unknown log format found: {line}");
                    continue;
                    //throw new InvalidDataException("ERROR Unknown log format found: " + line);
                }

                Match           match  = overall ? overallExpression.Match(line) : legacyExpression.Match(line);
                GroupCollection groups = match.Groups;

                if (overall)
                {
                    yield return(new EZProxyLog
                    {
                        IP = groups["IP"].Value,
                        Username = ParseUsername(groups["Username"].Value),
                        DateTime = ParseDate(groups["DateTime"].Value),
                        Request = groups["Request"].Value,
                        HTTPCode = Int16.Parse(groups["HTTPCode"].Value),
                        BytesTransferred = Int32.Parse(groups["BytesTransferred"].Value),
                        Referer = ParseNull(groups["Referer"].Value),
                        UserAgent = ParseNull(groups["UserAgent"].Value),
                    });
                }
                else
                {
                    yield return(new EZProxyLog
                    {
                        IP = groups["IP"].Value,
                        Username = ParseUsername(groups["Username"].Value),
                        DateTime = ParseDate(groups["DateTime"].Value),
                        Request = groups["Request"].Value,
                        HTTPCode = Int16.Parse(groups["HTTPCode"].Value),
                        BytesTransferred = Int32.Parse(groups["BytesTransferred"].Value),
                    });
                }
            }
        }
Esempio n. 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FileFsClient"/> class.
 /// </summary>
 /// <param name="fileRepository">File repository instance.</param>
 /// <param name="directoryRepository">Directory repository instance.</param>
 /// <param name="entryRepository">Entry repository instance.</param>
 /// <param name="externalFileManager">External file manager instance.</param>
 /// <param name="optimizer">Optimizer instance.</param>
 /// <param name="transactionWrapper">Transaction wrapper instance.</param>
 /// <param name="storageOperationLocker">Storage operation locker instance.</param>
 public FileFsClient(
     IFileRepository fileRepository,
     IDirectoryRepository directoryRepository,
     IEntryRepository entryRepository,
     IExternalFileManager externalFileManager,
     IStorageOptimizer optimizer,
     ITransactionWrapper transactionWrapper,
     IStorageOperationLocker storageOperationLocker)
 {
     _fileRepository         = fileRepository;
     _directoryRepository    = directoryRepository;
     _entryRepository        = entryRepository;
     _externalFileManager    = externalFileManager;
     _optimizer              = optimizer;
     _transactionWrapper     = transactionWrapper;
     _storageOperationLocker = storageOperationLocker;
 }
Esempio n. 15
0
 public GameSettingsProcessWatcher(
     Plugins plugins,
     string communicationAddress,
     ushort communicationPort,
     ComponentAssembler assembler,
     IDirectoryRepository directoryRepository,
     IGameRepository gameRepository,
     IInjectionService injectionService,
     ILogger logger,
     IProcessWatcher processWatcher)
 {
     _plugins = plugins;
     _communicationAddress = communicationAddress;
     _communicationPort    = communicationPort;
     _assembler            = assembler;
     _directoryRepository  = directoryRepository;
     _injectionService     = injectionService;
     _gameRepository       = gameRepository;
     _logger         = logger;
     _processWatcher = processWatcher;
 }
Esempio n. 16
0
 public GameSettingsWatchableProcess(
     AggregateId gameId,
     Plugins plugins,
     string communicationAddress,
     ushort communicationPort,
     ComponentAssembler assembler,
     IDirectoryRepository directoryRepository,
     IGameRepository gamesRepository,
     IInjectionService injectionService,
     ILogger logger)
 {
     GameId   = gameId;
     _plugins = plugins;
     _communicationAddress = communicationAddress;
     _communicationPort    = communicationPort;
     _assembler            = assembler;
     _directoryRepository  = directoryRepository;
     _gameRepository       = gamesRepository;
     _injectionService     = injectionService;
     _logger = logger;
 }
Esempio n. 17
0
 public DataManager(IDirectoryRepository directory, IMaterialRepository material)
 {
     Directory = directory;
     Material  = material;
 }
Esempio n. 18
0
 public DataManager(IDirectoryRepository directoryRepository, IContentRepository contentRepository)
 {
     DirectoryRepository = directoryRepository;
     ContentRepository   = contentRepository;
 }
Esempio n. 19
0
 public ActivityDirectory(IDirectoryRepository repository)
 {
     _repository = repository;
 }
Esempio n. 20
0
 public AlcoholDirectory(IDirectoryRepository repository)
 {
     _repository = repository;
 }
        public override void Execute(DateTime runDate, Action <string> logMessage, System.Threading.CancellationToken cancellationToken)
        {
            using (IDirectoryRepository source = RepositoryFactory.CreateDirectoryRepository(_directoryArgs))
            {
                logMessage($"Connected to source repository '{source.Name}' ({source.ConnectionString})");

                using (IDirectoryRepository destination = RepositoryFactory.CreateDirectoryRepository(_logDirectoryArgs))
                {
                    logMessage($"Connected to destination repository '{destination.Name}' ({destination.ConnectionString})");

                    Regex filePattern = new Regex(_arguments.FilePattern);

                    foreach (DirectoryObjectMetadata file in source.ListFiles().Where(x => x.Path.Contains(".zip")))
                    {
                        string tempZipDirectoryPath = file.Path.Replace(".zip", "");
                        string tempZipDirectoryName = file.Name.Replace(".zip", "");
                        ZipFile.ExtractToDirectory(file.Path, tempZipDirectoryPath);
                        source.DeleteFile(file.Path);

                        foreach (String unzippedfile in source.ListFiles(tempZipDirectoryName).Select(x => x.Path).Where(x => filePattern.IsMatch(x)))
                        {
                            string        filename     = unzippedfile.Split(new[] { "\\" }, StringSplitOptions.None).Last();
                            List <String> currentFiles = source.ListFiles().Select(x => x.Name).ToList();
                            if (!currentFiles.Contains(filename))
                            {
                                source.MoveFile(unzippedfile, filename);
                            }
                        }

                        foreach (String gzipFile in source.ListFiles(tempZipDirectoryName).Select(x => x.Path).Where(x => x.Contains(".gz")))
                        {
                            string        fileNameConcat = tempZipDirectoryName + ".log";
                            List <String> currentFiles   = destination.ListFiles().Select(x => x.Name).ToList();
                            if (!currentFiles.Contains(fileNameConcat))
                            {
                                using (GZipStream gzipStream = new GZipStream(source.OpenFile(gzipFile), CompressionMode.Decompress))
                                {
                                    using (Stream unzippedDestination = destination.CreateFile(fileNameConcat, Repository.Directory.FileCreationMode.ThrowIfFileExists))
                                    {
                                        gzipStream.CopyTo(unzippedDestination);
                                    }
                                }
                            }
                        }

                        source.DeleteDirectory(tempZipDirectoryPath);
                    }
                }

                List <String> modified = new List <String>();
                Int32         newCount = 0;

                using (IDatabaseRepository <IHarvesterDataContext> harvester = RepositoryFactory.CreateHarvesterRepository(_harvesterArgs))
                {
                    logMessage($"Connected to database '{harvester.Name}' ({harvester.ConnectionString})");

                    IEnumerable <DirectoryObjectMetadata> sourceFiles = source.ListFiles("/");
                    Dictionary <String, DirectoryRecord>  dictionary  = harvester.DataContext.DirectoryRecords.Where(d => d.Operation.Name == Name && d.Repository.Name == source.Name).ToDictionary(d => d.FilePath);

                    Entities.Repository repository = harvester.DataContext.Repositories.First(x => x.Name == source.Name);

                    if (OperationID == 0)
                    {
                        logMessage("Warning: OperationID was not set properly. Correcting this.");
                        OperationID = harvester.DataContext.Operations.First(d => d.Name == Name).ID;
                    }

                    foreach (DirectoryObjectMetadata file in sourceFiles)
                    {
                        if (!dictionary.ContainsKey(file.Path))
                        {
                            modified.Add(file.Name);
                            newCount++;

                            harvester.DataContext.DirectoryRecords.InsertOnSubmit(new DirectoryRecord
                            {
                                OperationID      = OperationID,
                                RepositoryID     = repository.ID,
                                FilePath         = file.Path,
                                FileModifiedDate = file.ModifiedDate,
                                CreationDate     = DateTime.Now,
                                ModifiedDate     = DateTime.Now
                            });
                        }
                        else
                        {
                            DirectoryRecord element = dictionary[file.Path];

                            if (file.ModifiedDate > element.FileModifiedDate)
                            {
                                modified.Add(file.Name);
                                element.FileModifiedDate = file.ModifiedDate;
                                element.ModifiedDate     = DateTime.Now;
                            }
                        }
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        source.Dispose();
                        harvester.Dispose();
                        cancellationToken.ThrowIfCancellationRequested();
                    }
                    harvester.DataContext.SubmitChanges();
                }

                logMessage($"Discovered {modified.Count} files to be processed ({newCount} new and {modified.Count - newCount} updated).");

                if (modified.Count == 0)
                {
                    return;
                }

                using (IDatabaseRepository <IStatisticsDataContext> destination = RepositoryFactory.CreateStatisticsRepository(_statisticsArgs))
                {
                    logMessage($"Connected to database '{destination.Name}' ({destination.ConnectionString})");

                    StreamParser <EZProxyAudit> Parser = new StreamParser <EZProxyAudit>();

                    List <EZProxyAudit> records = modified.Select(file =>
                    {
                        logMessage($"Processing '{file}':");

                        int lineNumber = 0;

                        return(Parser.ParseStream(source.OpenFile(file)).Select(x => new EZProxyAudit
                        {
                            DateTime = x.DateTime,
                            Event = x.Event,
                            IP = x.IP,
                            Other = x.Other,
                            Session = x.Session,
                            Username = x.Username,
                            LineNumber = lineNumber++,
                        }));
                    }).SelectMany(x => x).ToList();

                    logMessage($"Records Found: {records.Count}");

                    destination.DataContext.BulkImportEZProxyAudit(records.ToDataReader(r => new object[] { r.DateTime, r.Event, r.IP, r.Username, r.Session, r.Other, r.LineNumber }));
                }
            }
        }
        public override void Execute(DateTime runDate, Action <string> logMessage, CancellationToken cancellationToken)
        {
            using (IDirectoryRepository source = RepositoryFactory.CreateDirectoryRepository(_directoryArgs))
            {
                logMessage($"Connected to source repository '{source.Name}' ({source.ConnectionString})");

                List <String> modified = new List <String>();
                Int32         newCount = 0;

                List <DirectoryObjectMetadata> sourceFiles = source.ListFiles("/").Where(y => y.Name.ToLower().StartsWith("daily_transaction_export_for_vamp") && (y.Name.Contains(".txt") || y.Name.Contains(".csv"))).ToList();

                using (IDatabaseRepository <IHarvesterDataContext> harvester = RepositoryFactory.CreateHarvesterRepository(_harvesterArgs))
                {
                    logMessage($"Connected to database '{harvester.Name}' ({harvester.ConnectionString})");

                    if (OperationID == 0)
                    {
                        logMessage("Warning: OperationID was not set properly. Correcting this.");
                        OperationID = harvester.DataContext.Operations.First(d => d.Name == Name).ID;
                    }
                    Dictionary <String, DirectoryRecord> dictionary = harvester.DataContext.DirectoryRecords.Where(d => d.OperationID == OperationID && d.RepositoryID == harvester.DataContext.Repositories.First(y => y.Name == source.Name).ID).ToDictionary(d => d.FilePath);

                    foreach (DirectoryObjectMetadata file in sourceFiles)
                    {
                        if (!dictionary.ContainsKey(file.Path))
                        {
                            modified.Add(file.Name);
                            newCount++;
                        }
                        else
                        {
                            DirectoryRecord element = dictionary[file.Path];

                            if (file.ModifiedDate > element.FileModifiedDate)
                            {
                                modified.Add(file.Name);
                            }
                        }
                    }
                }

                logMessage($"Discovered {modified.Count} files to be processed ({newCount} new and {modified.Count - newCount} updated).");

                if (modified.Count == 0 && newCount == 0)
                {
                    logMessage("No Records to be processed.");
                    return;
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    source.Dispose();
                    cancellationToken.ThrowIfCancellationRequested();
                }

                using (IDatabaseRepository <IStatisticsDataContext> destination = RepositoryFactory.CreateStatisticsRepository(_databaseArgs))
                {
                    logMessage($"Connected to destination database '{destination.Name}' ({destination.ConnectionString})");

                    var records = modified.Select(file =>
                    {
                        logMessage($"Processing '{file}':");

                        Stream inputStream = source.OpenFile(file);

                        CountingEnumerable <WmsTransactionRecord> counter = new CountingEnumerable <WmsTransactionRecord>(ReadLines(inputStream, GetFileDate(file)));

                        return(Tuple.Create(counter, (Action)(() =>
                        {
                            inputStream.Dispose();
                            logMessage($"\t{counter.Count} records processed.");
                        })));
                    }).SelectMany(i => i).Select(wms => new
                    {
                        wms.EventType,
                        wms.InstitutionName,
                        ItemBarcode = wms.ItemBarcode == "N/A" ? null : wms.ItemBarcode,
                        UserBarcode = wms.UserBarcode == "N/A" ? null : wms.UserBarcode,
                        wms.LoanCheckedOutDate,
                        wms.LoanDueDate,
                        wms.RecordDate
                    }).ToList();

                    logMessage($"Processed {records.Count} records");

                    try
                    {
                        destination.DataContext.BulkImportTransactions(records.ToDataReader(x => new object[] { x.ItemBarcode, x.UserBarcode, x.LoanDueDate, x.LoanCheckedOutDate, runDate, x.EventType, x.InstitutionName, x.RecordDate }));
                        UpdateHarvesterRecord(logMessage, sourceFiles, source.Name, _harvesterArgs);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                        throw;
                    }
                    finally
                    {
                        destination.DataContext.Connection.Close();
                        destination.DataContext.Dispose();
                    }
                }
            }
        }
Esempio n. 23
0
        public override void Execute(DateTime runDate, Action <string> logMessage, System.Threading.CancellationToken cancellationToken)
        {
            LogMessage = logMessage;

            using (IDirectoryRepository source = RepositoryFactory.CreateDirectoryRepository(_directoryArgs))
            {
                logMessage($"Connected to source repository '{source.Name}' ({source.ConnectionString})");

                List <String> modified = new List <String>();
                Int32         newCount = 0;

                IEnumerable <DirectoryObjectMetadata> sourceFiles = source.ListFiles("/").ToList();

                using (IDatabaseRepository <IHarvesterDataContext> harvester = RepositoryFactory.CreateHarvesterRepository(_harvesterArgs))
                {
                    logMessage($"Connected to database '{harvester.Name}' ({harvester.ConnectionString})");

                    if (OperationID == 0)
                    {
                        logMessage("Warning: OperationID was not set properly. Correcting this.");
                        OperationID = harvester.DataContext.Operations.First(d => d.Name == Name).ID;
                    }

                    Dictionary <String, DirectoryRecord> dictionary = harvester.DataContext.DirectoryRecords.Where(d => d.Operation.Name == Name && d.Repository.Name == source.Name).ToDictionary(d => d.FilePath);

                    foreach (DirectoryObjectMetadata file in sourceFiles)
                    {
                        if (!dictionary.ContainsKey(file.Path))
                        {
                            modified.Add(file.Name);
                            newCount++;
                        }
                        else
                        {
                            DirectoryRecord element = dictionary[file.Path];

                            if (file.ModifiedDate > element.FileModifiedDate)
                            {
                                modified.Add(file.Name);
                            }
                        }
                    }
                }

                if (modified.Count == 0)
                {
                    logMessage("No new files to process");
                    return;
                }

                logMessage($"Discovered {modified.Count} files to be processed ({newCount} new and {modified.Count - newCount} updated).");

                if (cancellationToken.IsCancellationRequested)
                {
                    source.Dispose();
                    cancellationToken.ThrowIfCancellationRequested();
                }

                using (IDatabaseRepository <IStatisticsDataContext> destination = RepositoryFactory.CreateStatisticsRepository(_statisticsArgs))
                {
                    logMessage($"Connected to database '{destination.Name}' ({destination.ConnectionString})");

                    var successfulFiles = new List <DirectoryObjectMetadata>();


                    var records = modified.Select(file =>
                    {
                        IEnumerable <EZProxyLog> logs = ParseFile(source, file);

                        successfulFiles.Add(sourceFiles.First(x => x.Name == file));

                        return(Tuple.Create(logs, (Action)(() =>
                        {
                            logMessage($"Parsed file {file}");
                        })));
                    }).SelectMany(x => x);

                    try
                    {
                        destination.DataContext.BulkImportEZProxyLog(records.ToDataReader(r => new object[] { r.IP, r.Username, r.DateTime, r.Request, r.HTTPCode, r.BytesTransferred, r.Referer, r.UserAgent }));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                        UpdateHarvesterRecord(LogMessage, successfulFiles, source.Name, _harvesterArgs);
                        throw;
                    }
                    finally
                    {
                        destination.DataContext.Connection.Close();
                        destination.DataContext.Dispose();
                    }

                    UpdateHarvesterRecord(LogMessage, successfulFiles, source.Name, _harvesterArgs);
                }
            }
        }
Esempio n. 24
0
 public SmokeDirectory(IDirectoryRepository repository)
 {
     _repository = repository;
 }
        /// <inheritdoc />
        public override void Execute(DateTime runDate, Action <string> logMessage, CancellationToken cancellationToken)
        {
            using (IDatabaseRepository <IStatisticsDataContext> destination = RepositoryFactory.CreateStatisticsRepository(statisticsArguments))
            {
                destination.DataContext.LogMessage = logMessage;

                logMessage($"Connected to destination database '{destination.Name}' ({destination.ConnectionString})");

                using (ICounterRepository source = RepositoryFactory.CreateCounterRepository(counterRepoArguments))
                {
                    source.LogMessage = logMessage;
                    logMessage($"Connected to source repository '{source.Name}' ({source.ConnectionString})");

                    Dictionary <CounterReport, List <CounterRecord> > preRecordsReports = source.AvailableReports.ToDictionary(report => report, report => source.RequestRecords(runDate, report).ToList());

                    if (!preRecordsReports.Any(x => x.Value.Count > 0))
                    {
                        logMessage("No Records for this date");
                        return;
                    }

                    if (localJsonArguments != null)
                    {
                        foreach (var reportRecord in preRecordsReports)
                        {
                            using (IDirectoryRepository directoryRepo = RepositoryFactory.CreateDirectoryRepository(localJsonArguments))
                            {
                                using (Stream stream = directoryRepo.CreateFile($"{source.Name} {runDate:yyyy-MM-dd} {reportRecord.Key}.json", FileCreationMode.Overwrite))
                                {
                                    JsonSerializer serializer = JsonSerializer.Create();
                                    using (JsonTextWriter jsonTextWriter = new JsonTextWriter(new StreamWriter(stream)))
                                    {
                                        serializer.Serialize(jsonTextWriter, reportRecord.Value);
                                    }
                                }
                            }
                        }
                    }

                    var preRecords = preRecordsReports.SelectMany(x => x.Value).ToList();

                    //Add Metrics of vendorRecords to single vendor record
                    foreach (var recordsByRunDate in preRecords.GroupBy(x => x.RunDate))
                    {
                        if (recordsByRunDate.Any(x => x.ItemType == ItemType.Vendor))
                        {
                            foreach (var vendorRecord in recordsByRunDate.Where(x => x.ItemType == ItemType.Vendor))
                            {
                                vendorRecord.Identifiers = new[] { new CounterIdentifier {
                                                                       IdentifierType = IdentifierType.Proprietary, IdentifierValue = source.Name
                                                                   } };
                            }
                        }
                        else
                        {
                            preRecords.Add(new CounterRecord {
                                ItemName = source.Name, ItemType = ItemType.Vendor, RunDate = recordsByRunDate.Select(y => y.RunDate).First(), Identifiers = new[] { new CounterIdentifier {
                                                                                                                                                                         IdentifierType = IdentifierType.Proprietary, IdentifierValue = source.Name
                                                                                                                                                                     } }, Metrics = new CounterMetric[] { }
                            });
                        }
                    }

                    if (preRecords.Any(x => x.ItemType == ItemType.Database))
                    {
                        foreach (CounterRecord record in preRecords)
                        {
                            if (record.ItemType != ItemType.Database)
                            {
                                continue;
                            }

                            record.ItemPlatform = source.Name;
                            record.Identifiers  = new[] { new CounterIdentifier {
                                                              IdentifierType = IdentifierType.Database, IdentifierValue = record.ItemName
                                                          } };
                        }
                    }
                    else
                    {
                        preRecords.Add(new CounterRecord {
                            ItemName = source.Name, ItemType = ItemType.Database, ItemPlatform = source.Name, RunDate = runDate, Identifiers = new[] { new CounterIdentifier {
                                                                                                                                                           IdentifierType = IdentifierType.Database, IdentifierValue = source.Name
                                                                                                                                                       } }, Metrics = new CounterMetric[] { }
                        });
                    }

                    var where = preRecords.Where(x => x.ItemType == ItemType.Vendor);

                    Console.WriteLine(where.Count());

                    var records = preRecords
                                  .Where(x => !string.IsNullOrEmpty(x.ItemName))
                                  .Select(SanitizeIdentifiers)
                                  .GroupBy(x => x, new CounterRecordComparer())
                                  .Select(AggregateDuplicates)
                                  .Select((r, i) => new { Index = i, Record = r });

                    var counterRecords = records.GroupBy(x => x.Record.RunDate).ToList();

                    logMessage($"{preRecords.Count + 1} Total Records");
                    logMessage($"{recordswithNoIdentifiers} Records with no Identifiers");
                    logMessage($"{counterRecords.Sum(x => x.Count())} Unique Records");

                    if (cancellationToken.IsCancellationRequested)
                    {
                        source.Dispose();
                        destination.DataContext.Connection.Close();
                        destination.DataContext.Dispose();
                        destination.Dispose();
                        cancellationToken.ThrowIfCancellationRequested();
                    }

                    foreach (var counterGroup in counterRecords)
                    {
                        destination.DataContext.BulkImportCounterTransactions(
                            counterGroup
                            .ToDataReader(r => new object[] { null, null, null, r.Index, r.Record.ItemName, r.Record.ItemPlatform, r.Record.ItemType, r.Record.RunDate }),
                            counterGroup
                            .SelectMany(r => r.Record.Identifiers.Bind(a => a.Select(i => new { r.Index, Identifier = i, r.Record.ItemType })))
                            .ToDataReader(i => new object[] { i.Index, i.Identifier.IdentifierType, i.Identifier.IdentifierValue, i.ItemType }),
                            counterGroup
                            .SelectMany(r => r.Record.Metrics.Bind(a => a.Select(m => new { r.Index, Metric = m })))
                            .ToDataReader(m => new object[] { m.Index, m.Metric.MetricType, m.Metric.MetricValue }));

                        //Add Record of report being run
                        using (var harvester = RepositoryFactory.CreateHarvesterRepository(harvesterArguments))
                        {
                            if (OperationID == 0)
                            {
                                logMessage("Warning: OperationID was not set properly. Correcting this.");
                                OperationID = harvester.DataContext.Operations.First(d => d.Name == Name).ID;
                            }

                            Entities.Repository repository = harvester.DataContext.Repositories.First(x => x.Name == source.Name);

                            foreach (CounterReport report in preRecordsReports.Keys)
                            {
                                if (!harvester.DataContext.CounterOperationRecords.Any(x => x.OperationID == OperationID && x.RunDate == runDate && x.Report == report.ToString()))
                                {
                                    harvester.DataContext.CounterOperationRecords.InsertOnSubmit(new CounterOperationRecord
                                    {
                                        OperationID  = OperationID,
                                        RepositoryID = repository.ID,
                                        RunDate      = runDate,
                                        Report       = report.ToString(),
                                        ExecutedDate = DateTime.Now
                                    });
                                }
                                else
                                {
                                    harvester.DataContext.CounterOperationRecords.First(x => x.OperationID == OperationID && x.RunDate == runDate && x.Report == report.ToString()).ExecutedDate = DateTime.Now;
                                }
                            }

                            harvester.DataContext.SubmitChanges();
                        }
                    }
                }
            }
        }
Esempio n. 26
0
 public DirectoryService(IDirectoryRepository directoryRepository, IDocumentRepository documentRepository)
 {
     _directoryRepository = directoryRepository;
     _documentRepository  = documentRepository;
 }
Esempio n. 27
0
 public DataManager(IDirectoryRepository directoryRepository, IMaterialRepository materialRepository)
 {
     _directoryRepository = directoryRepository;
     _materialRepository  = materialRepository;
 }
Esempio n. 28
0
 public DirectoryService(IDirectoryRepository directoryRepository, IMapper mapper)
 {
     _directoryRepository = directoryRepository;
     _mapper = mapper;
 }
Esempio n. 29
0
 public SexDirectory(IDirectoryRepository repository)
 {
     _repository = repository;
 }
Esempio n. 30
0
        public override void Execute(DateTime runDate, Action <string> logMessage, CancellationToken cancellationToken)
        {
            using (IDirectoryRepository source = RepositoryFactory.CreateDirectoryRepository(_directoryArgs))
            {
                logMessage($"Connected to source repository '{source.Name}' ({source.ConnectionString})");

                Regex filePattern = new Regex(@"^((ITU[.]Item_inventories[.]\d{8})|(ITU[.]Circulation_Item_Inventories[.]\d{8}))[.]txt([.]zip)?$", RegexOptions.IgnoreCase);

                var sourceFilesBeforeZip = source.ListFiles().Where(y => filePattern.IsMatch(y.Name)).ToArray();
                foreach (DirectoryObjectMetadata zipFile in sourceFilesBeforeZip.Where(x => x.Path.Contains(".txt.zip")))
                {
                    if (sourceFilesBeforeZip.All(x => x.Name != zipFile.Name.Replace(".zip", "")))
                    {
                        ZipFile.ExtractToDirectory(zipFile.Path, Path.GetDirectoryName(zipFile.Path.Replace(".txt.zip", "")));
                    }
                    //source.DeleteFile(zipFile.Path);
                }

                List <String> modified = new List <String>();
                Int32         newCount = 0;

                List <DirectoryObjectMetadata> sourceFiles = source.ListFiles("/").Where(y => filePattern.IsMatch(y.Name) && !y.Name.EndsWith(".zip")).ToList();

                using (IDatabaseRepository <IHarvesterDataContext> harvester = RepositoryFactory.CreateHarvesterRepository(_harvesterArgs))
                {
                    logMessage($"Connected to database '{harvester.Name}' ({harvester.ConnectionString})");

                    Entities.Repository repository = harvester.DataContext.Repositories.First(y => y.Name == source.Name);

                    if (OperationID == 0)
                    {
                        logMessage("Warning: OperationID was not set properly. Correcting this.");
                        OperationID = harvester.DataContext.Operations.First(d => d.Name == Name).ID;
                    }

                    Dictionary <String, DirectoryRecord> dictionary = harvester.DataContext.DirectoryRecords.Where(d => d.OperationID == OperationID && d.RepositoryID == repository.ID).ToDictionary(d => d.FilePath);

                    foreach (DirectoryObjectMetadata file in sourceFiles)
                    {
                        if (!dictionary.ContainsKey(file.Path))
                        {
                            modified.Add(file.Name);
                            newCount++;
                        }
                        else
                        {
                            DirectoryRecord element = dictionary[file.Path];

                            if (file.ModifiedDate > element.FileModifiedDate)
                            {
                                modified.Add(file.Name);
                            }
                        }
                    }
                }

                if (modified.Count == 0 && newCount == 0)
                {
                    logMessage("No Records to be processed.");
                    return;
                }

                logMessage($"Discovered {modified.Count} files to be processed ({newCount} new and {modified.Count - newCount} updated).");

                if (cancellationToken.IsCancellationRequested)
                {
                    source.Dispose();
                    cancellationToken.ThrowIfCancellationRequested();
                }

                using (IDatabaseRepository <IStatisticsDataContext> destination = RepositoryFactory.CreateStatisticsRepository(_databaseArgs))
                {
                    logMessage($"Connected to destination database '{destination.Name}' ({destination.ConnectionString})");
                    bool exceptionHandled = false;
                    List <DirectoryObjectMetadata> successfulFiles = new List <DirectoryObjectMetadata>();

                    StreamParser <WmsInventoryRecord>     Parser     = new StreamParser <WmsInventoryRecord>();
                    StreamParser <WmsInventoryRecordEdge> ParserEdge = new StreamParser <WmsInventoryRecordEdge>();
                    StreamParser <WmsInventoryRecordDiff> ParserDiff = new StreamParser <WmsInventoryRecordDiff>();
                    StreamParser <WmsInventoryRecord2018> Parser2018 = new StreamParser <WmsInventoryRecord2018>();

                    if (cancellationToken.IsCancellationRequested)
                    {
                        source.Dispose();
                        cancellationToken.ThrowIfCancellationRequested();
                    }

                    var completedFiles = modified.Select <string, (string file, DateTime RunDate, IEnumerable <IWmsInventoryRecord> records)>(file =>
                    {
                        logMessage($"Processing '{file}':");

                        Stream inputStream   = source.OpenFile(file);
                        DateTime fileRunDate = GetFileDate(file);
                        string headers       = ExtractHeader(inputStream);

                        //logMessage(headers);

                        if (IsWmsInventoryRecord(headers))
                        {
                            return(file, fileRunDate, Parser.ParseStream(inputStream));
                        }

                        if (IsWmsInventoryRecord2018(headers))
                        {
                            return(file, fileRunDate, Parser2018.ParseStream(inputStream));
                        }

                        if (IsWmsInventoryRecordDiff(headers))
                        {
                            return(file, fileRunDate, ParserDiff.ParseStream(inputStream));
                        }

                        if (IsWmsInventoryRecordEdge(headers))
                        {
                            return(file, fileRunDate, ParserEdge.ParseStream(inputStream));
                        }

                        throw new InvalidDataException($"Header format not recognized: '{headers}'");
                    }).Select(wmsFileRecord =>
                    {
                        var parsed = wmsFileRecord.records.Select(wms => new InventoryRecord
                        {
                            OclcNumber          = wms.OclcNumber,
                            Title               = ParseTitle(wms.Title),
                            Author              = wms.Author,
                            MaterialFormat      = wms.MaterialFormat.ToString(),
                            Barcode             = wms.Barcode,
                            Cost                = wms.Cost,
                            LastInventoriedDate = wms.LastInventoriedDate,
                            DeletedDate         = wms.ItemDeletedDate,
                            ItemType            = wms.ItemType.ToString(),
                            CallNumber          = wms.CallNumber,
                            ShelvingLocation    = wms.ShelvingLocation?.ToString(),
                            CurrentStatus       = wms.CurrentStatus?.ToString(),
                            Description         = wms.Description,
                            RunDate             = wmsFileRecord.RunDate,
                            Anomalous           = AnomalousBarcode(wms.Barcode),
                        }).Where(y => y.Title != null || y.Barcode != null).GroupBy(x => new { x.OclcNumber, x.Barcode, x.RunDate }).Select(x => x.First()).ToArray();

                        logMessage($"Records Found: {parsed.Length}");

                        if (cancellationToken.IsCancellationRequested)
                        {
                            logMessage("Operation was cancelled");
                            exceptionHandled = true;
                            return(null);
                        }

                        if (parsed.Length <= 0)
                        {
                            logMessage("Failed to parse properly and return any meaningful records. This might mean that non of the parsed records had a Title or Barcode.");
                            exceptionHandled = true;
                            return(null);
                        }

                        try
                        {
                            destination.DataContext.BulkImportInventory(
                                parsed.ToDataReader(r => new object[] { r.OclcNumber, r.Title, r.MaterialFormat, r.Author, r.Barcode, r.Cost, r.LastInventoriedDate, r.DeletedDate, r.ItemType, r.CallNumber, r.ShelvingLocation, r.CurrentStatus, r.Description, r.RunDate, r.Anomalous }));
                        }

                        catch (SqlException ex)
                        {
                            logMessage(ex.Message);
                            if (ex.InnerException != null)
                            {
                                logMessage(ex.InnerException.ToString());
                            }
                            logMessage("Sql Server was most likely put into an unusable state after this exception and thus the whole operation was canceled.");
                            exceptionHandled = true;
                        }

                        return(sourceFiles.First(x => x.Name == wmsFileRecord.file));
                    }).Where(x => x != null);

                    foreach (var success in completedFiles)
                    {
                        successfulFiles.Add(success);
                    }

                    UpdateHarvesterRecord(logMessage, successfulFiles, source.Name, _harvesterArgs);

                    if (exceptionHandled)
                    {
                        destination.DataContext.Connection.Close();
                        destination.DataContext.Dispose();
                        throw new Exception("An Exception was encountered. At least one file failed");
                    }
                }
            }
        }
 public DirectoryService(IDirectoryRepository directoryRepository)
 {
     _directoryRepository = directoryRepository;
 }
Esempio n. 32
0
 public InteresDirectory(IDirectoryRepository repository)
 {
     _repository = repository;
 }