//file names
        protected virtual string GetSearchPattern(TemporaryStorageParameters queueParams)
        {
            string version = queueParams.EntityVersion.ToString();
            string pattern = $"{queueParams.QueueType}-{version}-{DALConstants.TEMP_FILE_SEARCH_PATTERN}";

            return(pattern);
        }
        public virtual Dictionary <Guid, TS> Select(TemporaryStorageParameters queueParams)
        {
            var items = new Dictionary <Guid, TS>();

            string searchPattern = GetSearchPattern(queueParams);

            FileInfo[] files = _repository.GetAllFiles(_tempFileFolder, searchPattern);

            foreach (FileInfo file in files)
            {
                TS   item = _repository.ReadBinary <TS>(file.FullName);
                Guid?Id   = ParseIdFromFileName(queueParams, file.Name);

                if (item == null)
                {
                    string message = string.Format(SenderInternalMessages.Filerepository_CorruptedFile, file.Name);
                    throw new FileNotFoundException(message);
                }
                else if (Id.HasValue == false)
                {
                    string message = string.Format(SenderInternalMessages.Filerepository_InvalidGuidName, file.Name);
                    throw new FileNotFoundException(message);
                }

                items.Add(Id.Value, item);
            }

            return(items);
        }
 public virtual void Delete(TemporaryStorageParameters queueParams, List <Guid> Ids)
 {
     foreach (Guid Id in Ids)
     {
         Delete(queueParams, Id);
     }
 }
Пример #4
0
        public void TemporaryStorage_InsertTest()
        {
            var temporaryStorageParameters = new TemporaryStorageParameters()
            {
                QueueType     = NotificationsConstants.TS_DISPATCH_QUEUE_KEY,
                EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION
            };
            var signalEvent = new SignalEvent <long>
            {
                TemplateDataDict = new Dictionary <string, string>
                {
                    { "customer", "Crabs" }
                },
                PredefinedAddresses = new List <DeliveryAddress>
                {
                    new DeliveryAddress
                    {
                        Address      = "address",
                        DeliveryType = 1,
                        Language     = "lang"
                    }
                }
            };
            Guid id = Guid.NewGuid();

            _tempStorage.Insert(temporaryStorageParameters, id, signalEvent);

            TemporaryStorage_SelectTest(id, signalEvent);
        }
        protected virtual string GetFilePath(TemporaryStorageParameters queueParams, Guid Id)
        {
            string version  = queueParams.EntityVersion.ToString();
            string shortId  = ShortGuid.Encode(Id);
            string fileName = $"{queueParams.QueueType}-{version}-{shortId}{DALConstants.TEMP_FILE_EXTENSION}";

            return(Path.Combine(_tempFileFolder, fileName));
        }
        //init
        public SignalEventFlushJob(SenderSettings senderSettings, ITemporaryStorage <SignalEvent <TKey> > temporaryStorage
                                   , ISignalEventQueries <TKey> queries)
            : base(senderSettings, temporaryStorage, queries)
        {
            FlushPeriod = senderSettings.FlushJobFlushPeriod;
            QueueLimit  = senderSettings.FlushJobQueueLimit;
            IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled;

            _temporaryStorageParameters = new TemporaryStorageParameters()
            {
                QueueType     = NotificationsConstants.TS_EVENT_QUEUE_KEY,
                EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION
            };
        }
Пример #7
0
        private void TemporaryStorage_SelectTest(Guid id, SignalEvent <long> expectedSignalEvent)
        {
            var temporaryStorageParameters = new TemporaryStorageParameters()
            {
                QueueType     = NotificationsConstants.TS_DISPATCH_QUEUE_KEY,
                EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION
            };

            Dictionary <Guid, SignalEvent <long> > eventsList = _tempStorage
                                                                .Select(temporaryStorageParameters);
            SignalEvent <long> actualEvent = eventsList[id];

            actualEvent.TemplateDataDict["customer"].ShouldBe("Crabs");
            actualEvent.PredefinedAddresses[0].Address.ShouldBe("address");
        }
Пример #8
0
        //init
        public EventQueue(SenderSettings senderSettings, ITemporaryStorage <SignalEvent <TKey> > temporaryStorage
                          , ISignalFlushJob <SignalEvent <TKey> > signalFlushJob, ILogger logger)
            : base(temporaryStorage)
        {
            _signalFlushJob = signalFlushJob;
            _logger         = logger;

            PersistBeginOnItemsCount  = senderSettings.SignalQueuePersistBeginOnItemsCount;
            PersistEndOnItemsCount    = senderSettings.SignalQueuePersistEndOnItemsCount;
            IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled;

            _temporaryStorageParameters = new TemporaryStorageParameters()
            {
                QueueType     = NotificationsConstants.TS_EVENT_QUEUE_KEY,
                EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION
            };
        }
        //init
        public DispatchQueue(SenderSettings senderSettings, ITemporaryStorage <SignalDispatch <TKey> > temporaryStorage
                             , IDispatchChannelRegistry <TKey> dispatcherRegistry, ISignalFlushJob <SignalDispatch <TKey> > signalFlushJob
                             , ILogger logger)
            : base(temporaryStorage)
        {
            _dispatcherRegistry = dispatcherRegistry;
            _signalFlushJob     = signalFlushJob;
            _logger             = logger;

            RetryPeriod               = senderSettings.SignalQueueRetryPeriod;
            MaxFailedAttempts         = senderSettings.DatabaseSignalProviderItemsMaxFailedAttempts;
            PersistBeginOnItemsCount  = senderSettings.SignalQueuePersistBeginOnItemsCount;
            PersistEndOnItemsCount    = senderSettings.SignalQueuePersistEndOnItemsCount;
            IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled;

            _temporaryStorageParameters = new TemporaryStorageParameters()
            {
                QueueType     = NotificationsConstants.TS_DISPATCH_QUEUE_KEY,
                EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION
            };
        }
Пример #10
0
        //init
        public SignalDispatchFlushJob(SenderSettings senderSettings, ITemporaryStorage <SignalDispatch <TKey> > temporaryStorage,
                                      ISignalDispatchQueries <TKey> dispatchQueries, ILockTracker <TKey> dispatchLockTracker,
                                      IConsolidationLockTracker <TKey> consolidationLockTracker)
            : base(senderSettings, temporaryStorage, dispatchQueries)
        {
            _dispatchQueries          = dispatchQueries;
            _dispatchLockTracker      = dispatchLockTracker;
            _consolidationLockTracker = consolidationLockTracker;

            IsTemporaryStorageEnabled   = senderSettings.SignalQueueIsTemporaryStorageEnabled;
            _temporaryStorageParameters = new TemporaryStorageParameters()
            {
                QueueType     = NotificationsConstants.TS_DISPATCH_QUEUE_KEY,
                EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION
            };

            //how to flush items
            _flushQueues[FlushAction.DeleteConsolidated] = new FlushQueue <SignalWrapper <SignalDispatch <TKey> > >(signals => DeleteConsolidatedDispatches(signals));

            //what to do after flushing
            _flushedItemsHandlers.Add(ForgetDispatchLocks);
            _flushedItemsHandlers.Add(ForgetConsolidationLocks);
        }
        protected virtual Guid?ParseIdFromFileName(TemporaryStorageParameters queueParams, string fileName)
        {
            Match match = _fileIdRegex.Match(fileName);

            if (match.Success == false ||
                match.Groups.Count < 2 ||
                match.Groups[1].Success == false)
            {
                return(null);
            }

            string shortGuidId = match.Groups[1].Value;

            try
            {
                Guid Id = ShortGuid.Decode(shortGuidId);
                return(Id);
            }
            catch
            {
            }
            return(null);
        }
        public virtual void Delete(TemporaryStorageParameters queueParams, Guid Id)
        {
            string filePath = GetFilePath(queueParams, Id);

            _repository.Delete(filePath);
        }
 public virtual void Update(TemporaryStorageParameters queueParams, Guid Id, TS item)
 {
     Insert(queueParams, Id, item);
 }
        //file actions
        public virtual void Insert(TemporaryStorageParameters queueParams, Guid Id, TS item)
        {
            string filePath = GetFilePath(queueParams, Id);

            _repository.CreateBinary(filePath, item);
        }