コード例 #1
0
        public IPageManager Apply()
        {
            if (listView == null)
            {
                listView               = resolverFactory.Resolve <UCIndexesListView>();
                listView.Id            = "QzqMws4HH0GfDcDn/K8JRQ==";
                listView.ControlName   = "attributes_list_management";
                listView.ControlHeader = "Attributes";
                listView.Description   = "List of Attributes";
                listView.SetIndexType(EntityType.Attribute);
            }

            if (content == null)
            {
                content               = resolverFactory.Resolve <UCIndexDetail>();
                content.Id            = "EFp0ZhUYMkSo3SY5Y6y7AA==";
                content.ControlName   = "attribute_detail_management";
                content.ControlHeader = "Manage Attribute";
                content.Description   = "Manage Attribute Detail";
                content.ActivatedById = "QzqMws4HH0GfDcDn/K8JRQ==";
                content.SetIndexType(EntityType.Attribute);
            }

            eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
            {
                PageDefinition = listView
            });

            eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
            {
                PageDefinition = content
            });
            return(this);
        }
コード例 #2
0
        public IPageManager Apply()
        {
            if (listView == null)
            {
                listView               = resolverFactory.Resolve <UCIndexesListView>();
                listView.Id            = "lS2j9IRSTE+c8TFL7LFgZA==";
                listView.ControlName   = "entities_list_management";
                listView.ControlHeader = "Entities";
                listView.Description   = "List of Entities";
                listView.SetIndexType(EntityType.Entity);
            }

            if (content == null)
            {
                content               = resolverFactory.Resolve <UCIndexDetail>();
                content.Id            = "1JFIy8jqlU2LKbwoDkCc7g==";
                content.ControlName   = "entity_detail_management";
                content.ControlHeader = "Manage Entity";
                content.Description   = "Manage Entity Detail";
                content.ActivatedById = listView.Id;
                content.SetIndexType(EntityType.Entity);
            }

            eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
            {
                PageDefinition = listView
            });

            eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
            {
                PageDefinition = content
            });
            return(this);
        }
コード例 #3
0
        public IPageManager Apply()
        {
            if (uCSettingsListView == null)
            {
                uCSettingsListView = resolverFactory.Resolve <UCSettingsListView>();
            }

            if (uCSettingsContent == null)
            {
                uCSettingsContent = resolverFactory.Resolve <UCSettingsContent>();
                uCSettingsContent.SetSettingProviders(settingProviders);
            }

            eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
            {
                PageDefinition = uCSettingsListView
            });

            eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
            {
                PageDefinition = uCSettingsContent
            });

            return(this);
        }
コード例 #4
0
        private async Task <bool> InitAllEntities()
        {
            try
            {
                //IsLoading = true;
                await Task.Run(async() =>
                {
                    using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
                        using (var indexerManager = ResolverFactory.Resolve <IndexerManager>())
                        {
                            indexerManager.OnReport(s => Logger.Information(s));
                            var allEntities = entityRepository.GetAll();
                            foreach (var entity in allEntities)
                            {
                                await indexerManager.Init();
                                await indexerManager.PullAll(true);
                            }
                        }
                });

                Message = "All entities has been initialized.";
                Logger.Information(Message);

                return(true);
            }
            catch (Exception ex)
            {
                ErrorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                //IsLoading = false;
            }
        }
コード例 #5
0
        public override async Task Invoke(IStepExecutionContext context = null)
        {
            var logger      = ResolverFactory.Resolve <ILogger>("SyncService");
            var errorLogger = ResolverFactory.Resolve <ILogger>("Error");

            try
            {
                logger.Information($@"Queueing index changes of {IndexModel.Name}/{IndexModel.Id}...");
                queueChangesManager.SetIndex(IndexModel);
                queueChangesManager.OnReport(s => logger.Information(s));
                await queueChangesManager.QueueChanges();

                logger.Information($@"Queued index changes of {IndexModel.Name}/{IndexModel.Id}");
            }
            catch (Exception ex)
            {
                errorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                Counter += 1;
                ResolverFactory.Release(logger);
                ResolverFactory.Release(errorLogger);
                logger      = null;
                errorLogger = null;
            }
        }
コード例 #6
0
        public T Create <T>(object owner) where T : BaseRepository
        {
            lock (lockObject)
            {
                T result = null;
                List <BaseRepository> repos = null;
                if (!_registeredInstances.ContainsKey(owner))
                {
                    repos = new List <BaseRepository>();
                    _registeredInstances.Add(owner, repos);
                }
                else
                {
                    repos = _registeredInstances[owner]?.Where(r => r != null && !r.IsDisposed).ToList();
                }

                if (repos == null)
                {
                    repos = new List <BaseRepository>();
                    _registeredInstances[owner] = repos;
                }

                result = repos.Where(r => r is T).Select(r => r as T).FirstOrDefault();
                if (result == null || result.IsDisposed)
                {
                    result = _resolverFactory.Resolve <T>();
                    repos.Add(result);
                }
                // Update the list
                _registeredInstances[owner] = repos;
                return(result);
            }
        }
コード例 #7
0
        public override PullResult Preview()
        {
            using (var attributeRepository = ResolverFactory.Resolve <AttributeRepository>())
            {
                var options = attributeRepository.LoadOptions(AttributeModel.Id.ToString());
                var limit   = options.GetValue("puller_page_limit", 100);
                var offset  = 0;

                var sqlScript = GetSqlScript(options, false); // should call raw SQL instead of calling view
                var sets      = adapter.Query(sqlScript, new
                {
                    Limit  = limit,
                    Offset = offset
                });
                var set     = sets.FirstOrDefault();
                var results = set?.Rows?.Select(r =>
                {
                    var jObj = JObject.FromObject(r);
                    jObj.Remove("RowNum");
                    return(jObj.ToObject(typeof(object)));
                });
                return(new PullResult
                {
                    Status = results?.Count() > 0 ? PullState.HasData : PullState.Invalid,
                    LastToken = new
                    {
                        Limit = limit,
                        Offset = offset
                    },
                    Data = results
                });
            }
        }
コード例 #8
0
ファイル: EntityPuller.cs プロジェクト: tww19861004/fastSQL
 public override PullResult Preview()
 {
     using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
     {
         var options   = entityRepository.LoadOptions(EntityModel.Id.ToString());
         int limit     = options.GetValue("puller_page_limit", 100);
         var isSql2008 = options.GetValue("puller_is_sql_2008", true);
         int offset    = 0;
         var sqlScript = GetSqlScript(options, false);
         var sets      = adapter.Query(sqlScript, new
         {
             Limit  = limit,
             Offset = offset
         });
         var set     = sets.FirstOrDefault();
         var results = set?.Rows?.Select(r =>
         {
             var jObj = JObject.FromObject(r);
             jObj.Remove("RowNum");
             return(jObj.ToObject(typeof(object)));
         });
         return(new PullResult
         {
             Status = results?.Count() > 0 ? PullState.HasData : PullState.Invalid,
             LastToken = new
             {
                 Limit = limit,
                 Offset = offset
             },
             Data = results
         });
     }
 }
コード例 #9
0
        public override async Task Invoke(IStepExecutionContext context = null)
        {
            var indexerManager = ResolverFactory.Resolve <IndexerManager>();
            var logger         = ResolverFactory.Resolve <ILogger>("SyncService");
            var errorLogger    = ResolverFactory.Resolve <ILogger>("Error");

            indexerManager.OnReport(s => logger.Information(s));
            try
            {
                logger.Information($@"Updating index changes of {IndexModel.Name}/{IndexModel.Id}...");
                indexerManager.SetIndex(IndexModel as IIndexModel);
                await indexerManager.PullNext();

                await Task.Run(() => { });

                logger.Information($@"Updated index changes of {IndexModel.Name}/{IndexModel.Id}");
                Counter += 1;
            }
            catch (Exception ex)
            {
                errorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                indexerManager?.Dispose();
                ResolverFactory.Release(logger);
                ResolverFactory.Release(errorLogger);
                logger      = null;
                errorLogger = null;
            }
        }
コード例 #10
0
        public override async Task Invoke(IStepExecutionContext context = null)
        {
            var entityRepository = ResolverFactory.Resolve <EntityRepository>();
            var logger           = ResolverFactory.Resolve <ILogger>("SyncService");
            var errorLogger      = ResolverFactory.Resolve <ILogger>("Error");

            try
            {
                logger.Information($@"Requeuing items of {IndexModel.Name}/{IndexModel.Id}...");
                await Task.Run(() => entityRepository.ChangeStateOfIndexedItems(IndexModel, ItemState.None, ItemState.Invalid, null));

                logger.Information($@"Requeued items of {IndexModel.Name}/{IndexModel.Id}");
            }
            catch (Exception ex)
            {
                errorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                Counter += 1;
                entityRepository?.Dispose();
                ResolverFactory.Release(logger);
                ResolverFactory.Release(errorLogger);
                logger      = null;
                errorLogger = null;
            }
        }
コード例 #11
0
        private async Task <bool> InitAllIndexes()
        {
            try
            {
                using (var attributeRepository = ResolverFactory.Resolve <AttributeRepository>())
                    using (var indexerManager = ResolverFactory.Resolve <IndexerManager>())
                    {
                        indexerManager.OnReport(s => Logger.Information(s));
                        var allAttributes = attributeRepository.GetAll();
                        foreach (var attr in allAttributes)
                        {
                            indexerManager.SetIndex(attr);
                            await indexerManager.Init();

                            await indexerManager.PullAll(true);
                        }
                    }
                Message = "All attributes has been initialized.";
                Logger.Information(Message);

                return(true);
            }
            catch (Exception ex)
            {
                ErrorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                //IsLoading = false;
            }
        }
コード例 #12
0
ファイル: ErrorReporter.cs プロジェクト: tww19861004/fastSQL
        public override async Task Queue()
        {
            await Task.Run(() =>
            {
                using (var messageRepository = ResolverFactory.Resolve <MessageRepository>())
                {
                    var limit  = 500;
                    var offset = 0;
                    while (true)
                    {
                        var messages = messageRepository.GetUnqueuedMessages(ReporterModel, MessageType.Error, limit, offset);
                        if (messages == null || messages.Count() <= 0)
                        {
                            break;
                        }

                        foreach (var message in messages)
                        {
                            messageRepository.LinkToReporter(message.Id.ToString(), ReporterModel);
                        }
                        offset += limit;
                    }
                }
            });
        }
コード例 #13
0
        public override async Task Queue()
        {
            await Task.Run(() =>
            {
                using (var messageRepository = ResolverFactory.Resolve <MessageRepository>())
                    using (var queueItemRepository = ResolverFactory.Resolve <QueueItemRepository>())
                    {
                        var showDebugInfo    = Options.FirstOrDefault(o => o.Name == "show_debug_info").Value;
                        var showProgressInfo = Options.FirstOrDefault(o => o.Name == "show_progress_info").Value;
                        var limit            = 500;
                        var offset           = 0;
                        while (true)
                        {
                            // Create success message (MessageType = Information)
                            var successItems = queueItemRepository.GetQueuedItemsByStatus(
                                PushState.Success,
                                PushState.Failed | PushState.UnexpectedError | PushState.ValidationFailed | PushState.Ignore | PushState.Reported, // exclude items that are reported, failed...
                                limit,
                                offset);

                            foreach (var item in successItems)
                            {
                                var messageText = string.Empty;
                                messageText     = item.TargetEntityType == EntityType.Entity
                                ? GetEntityMessage(item, out IIndexModel indexModel, out IndexItemModel itemModel)
                                : GetAttributeMessage(item, out indexModel, out itemModel);

                                if (showDebugInfo == bool.TrueString)
                                {
                                    //var message = messageRepository.GetById(item.MessageId.ToString());
                                    messageText = $@"{messageText}
* Index Info:
```{JsonConvert.SerializeObject(indexModel, Formatting.Indented)}```
* Index Item Info:
```{JsonConvert.SerializeObject(itemModel, Formatting.Indented)}```";
                                }

                                if (showProgressInfo == bool.TrueString)
                                {
                                    var message = messageRepository.GetById(item.MessageId.ToString());
                                    messageText = $@"{messageText}
* Progress:
```{message.Message}```";
                                }

                                var messageId = messageRepository.Create(new
                                {
                                    CreatedAt   = DateTime.Now.ToUnixTimestamp(),
                                    Message     = messageText,
                                    MessageType = MessageType.Information,
                                    Status      = MessageStatus.None
                                });

                                messageRepository.LinkToReporter(messageId, ReporterModel);
                            }
                            offset += limit;
                        }
                    }
            });
        }
コード例 #14
0
 public override PullResult Preview()
 {
     using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
     {
         var options   = entityRepository.LoadOptions(EntityModel.Id.ToString());
         int limit     = options.GetValue("puller_page_limit", 100);
         int offset    = 0;
         var sqlScript = GetSqlScript(options, limit, offset + limit, false);
         var sets      = adapter.Query(sqlScript, new
         {
             Limit  = limit,
             Offset = offset + limit
         });
         var set     = sets.FirstOrDefault();
         var results = set?.Rows;
         return(new PullResult
         {
             Status = results?.Count() > 0 ? PullState.HasData : PullState.Invalid,
             LastToken = new
             {
                 Limit = limit,
                 Offset = offset
             },
             Data = results
         });
     }
 }
コード例 #15
0
 public SyncService(
     ResolverFactory resolverFactory,
     EntityRepository entityRepository,
     AttributeRepository attributeRepository,
     IWorkflowHost host,
     IEnumerable <IBaseWorkflow> workflows)
 {
     _logger                  = resolverFactory.Resolve <ILogger>("SyncService");
     _errorLogger             = resolverFactory.Resolve <ILogger>("Error");
     this.resolverFactory     = resolverFactory;
     this.entityRepository    = entityRepository;
     this.attributeRepository = attributeRepository;
     _host          = host;
     this.workflows = workflows;
     //RegisterWorkflows();
 }
コード例 #16
0
        public override async Task Invoke(IStepExecutionContext context = null)
        {
            var reporterRepository = ResolverFactory.Resolve <ReporterRepository>();
            var logger             = ResolverFactory.Resolve <ILogger>("SyncService");
            var errorLogger        = ResolverFactory.Resolve <ILogger>("Error");

            try
            {
                var reportModels = reporterRepository.GetAll();
                var loopResult   = Parallel.ForEach(reportModels, async(r, i) =>
                {
                    var options  = reporterRepository.LoadOptions(r.Id.ToString(), r.EntityType);
                    var reporter = reporters.FirstOrDefault(rt => rt.Id == r.ReporterId);
                    reporter.SetOptions(options.Select(o => new OptionItem {
                        Name = o.Key, Value = o.Value
                    }));
                    reporter.SetReportModel(r);
                    await reporter.Queue();
                });
                await Task.Run(() => 1);
            }
            catch (Exception ex)
            {
                errorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                reporterRepository?.Dispose();
                ResolverFactory.Release(logger);
                ResolverFactory.Release(errorLogger);
                logger      = null;
                errorLogger = null;
            }
        }
コード例 #17
0
        private void OnManageIndex(OpenManageIndexPageEventArgument obj)
        {
            if (obj.IndexModel.EntityType != _indexType)
            {
                return;
            }
            var window = resolverFactory.Resolve <WManageIndex>();

            window.Owner   = Application.Current.MainWindow;
            window.Closed += (s, e) => resolverFactory.Release(window);
            window.SetPuller(obj.Puller);
            window.SetIndexer(obj.Indexer);
            window.SetPusher(obj.Pusher);
            window.SetIndex(obj.IndexModel);
            window.SetMapper(obj.Mapper);
            window.ShowDialog();
        }
コード例 #18
0
 public Task <int> Loaded()
 {
     using (var reporterRepository = ResolverFactory.Resolve <ReporterRepository>())
     {
         Reporters = new ObservableCollection <ReporterModel>(reporterRepository.GetAll());
         return(Task.FromResult(0));
     }
 }
コード例 #19
0
 public Task <int> Loaded()
 {
     using (var connectionRepository = ResolverFactory.Resolve <ConnectionRepository>())
     {
         Connections = new ObservableCollection <ConnectionModel>(connectionRepository.GetAll());
         return(Task.FromResult(0));
     }
 }
コード例 #20
0
 public Task <int> Loaded()
 {
     using (var messageDeliveryChannelRepository = ResolverFactory.Resolve <MessageDeliveryChannelRepository>())
     {
         Channels = new ObservableCollection <MessageDeliveryChannelModel>(messageDeliveryChannelRepository.GetAll());
         return(Task.FromResult(0));
     }
 }
コード例 #21
0
        public override async Task <bool> Validate()
        {
            try
            {
                var ok = true;
                //IsLoading = true;
                await Task.Run(() =>
                {
                    using (var connectionRepository = ResolverFactory.Resolve <ConnectionRepository>())
                        using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
                            using (var attributeRepository = ResolverFactory.Resolve <AttributeRepository>())
                            {
                                var allAttributes = attributeRepository.GetAll();
                                foreach (var attr in allAttributes)
                                {
                                    var initialized = true;
                                    var entity      = entityRepository.GetById(attr.EntityId.ToString());
                                    var options     = attributeRepository.LoadOptions(attr.Id.ToString());
                                    var connection  = connectionRepository.GetById(attr.SourceConnectionId.ToString());
                                    var puller      = pullers.FirstOrDefault(p => p.IsImplemented(attr.SourceProcessorId, entity.SourceProcessorId, connection.ProviderId));
                                    var indexer     = indexers.FirstOrDefault(p => p.IsImplemented(attr.SourceProcessorId, entity.SourceProcessorId, connection.ProviderId));
                                    puller.SetIndex(attr);
                                    puller.SetOptions(options.Select(o => new OptionItem {
                                        Name = o.Key, Value = o.Value
                                    }));
                                    initialized = initialized && puller.Initialized();
                                    indexer.SetIndex(attr);
                                    indexer.SetOptions(options.Select(o => new OptionItem {
                                        Name = o.Key, Value = o.Value
                                    }));
                                    initialized = initialized && entityRepository.Initialized(attr);

                                    ok = ok && initialized;
                                    if (!ok)
                                    {
                                        Logger.Information($@"Index ""{entity.Name}"" is not initialized.");
                                        break;
                                    }
                                }
                            }
                });

                Message = "All attributes has been initialized.";
                Logger.Information(Message);

                return(true);
            }
            catch (Exception ex)
            {
                ErrorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                //IsLoading = false;
            }
        }
コード例 #22
0
        private string GetAttributeMessage(QueueItemModel item, out IIndexModel indexModel, out IndexItemModel itemModel)
        {
            using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
                using (var attributeRepository = ResolverFactory.Resolve <AttributeRepository>())
                {
                    var attributeModel = attributeRepository.GetById(item.TargetEntityId.ToString());
                    var entityModel    = entityRepository.GetById(attributeModel.EntityId.ToString());

                    var entityOptions = entityRepository.LoadOptions(entityModel.Id.ToString(), new List <string> {
                        "Indexer"
                    });
                    var attributeOptions = attributeRepository.LoadOptions(attributeModel.Id.ToString(), new List <string> {
                        "Indexer"
                    });

                    var attributeItemModel = attributeRepository.GetIndexedItemById(attributeModel, item.TargetItemId);
                    var entityItemModel    = entityRepository.GetIndexedItemBySourceId(entityModel, attributeItemModel.GetSourceId());
                    itemModel = attributeItemModel;

                    var entityReporterMappingOption  = entityOptions.FirstOrDefault(o => o.Key == "indexer_reporter_columns");
                    var entityReporterMappingColumns = !string.IsNullOrWhiteSpace(entityReporterMappingOption?.Value)
                    ? JsonConvert.DeserializeObject <List <ReporterColumnMapping> >(entityReporterMappingOption.Value)
                    : new List <ReporterColumnMapping> {
                        new ReporterColumnMapping {
                            SourceName  = "Value",
                            MappingName = "Name",
                            Key         = true,
                            Value       = true
                        }
                    };

                    var attributeReporterMappingOption  = attributeOptions.FirstOrDefault(o => o.Key == "indexer_reporter_columns");
                    var attributeReporterMappingColumns = !string.IsNullOrWhiteSpace(attributeReporterMappingOption?.Value)
                    ? JsonConvert.DeserializeObject <List <ReporterColumnMapping> >(attributeReporterMappingOption.Value)
                    : new List <ReporterColumnMapping> {
                        new ReporterColumnMapping {
                            SourceName  = "Value",
                            MappingName = "Name",
                            Key         = true,
                            Value       = true
                        }
                    };
                    var keys = entityReporterMappingColumns.Where(r => r.Key)
                               .Select(r => $@"_{r.MappingName}_: {entityItemModel.GetValue(r.SourceName)?.ToString() ?? "(empty)"}");
                    var vals = attributeReporterMappingColumns.Where(r => r.Value)
                               .Select(r => $@"_{r.MappingName}_: {attributeItemModel.GetValue(r.SourceName)?.ToString() ?? "(empty)"}");
                    if (attributeReporterMappingColumns.Count == 1)
                    {
                        vals = attributeReporterMappingColumns.Where(r => r.Value)
                               .Select(r => $@"{attributeItemModel.GetValue(r.SourceName)?.ToString() ?? "(empty)"}");
                    }
                    var executed   = item.ExecutedAt.UnixTimeToTime().ToString("G");
                    var executedIn = item.ExecutedAt - item.ExecuteAt;
                    indexModel = attributeModel;
                    return($@"*{indexModel.Name}* ({string.Join(", ", keys)}): {vals} {executed} in {executedIn} second(s)");
                }
        }
コード例 #23
0
 public EntitiesSettingsProvider(
     EntitiesSettingsOptionManager optionManager,
     EntityRepository entityRepository,
     ConnectionRepository connectionRepository,
     IndexerManager indexerManager,
     IEnumerable <IEntityPuller> pullers,
     IEnumerable <IEntityIndexer> indexers,
     ResolverFactory resolverFactory) : base(optionManager)
 {
     this.entityRepository     = entityRepository;
     this.connectionRepository = connectionRepository;
     this.indexerManager       = indexerManager;
     this.pullers  = pullers;
     this.indexers = indexers;
     this.indexerManager.OnReport(s => this.logger.Information(s));
     this.logger      = resolverFactory.Resolve <ILogger>("SyncService");
     this.errorLogger = resolverFactory.Resolve <ILogger>("Error");
 }
コード例 #24
0
 public BaseReporter(IOptionManager optionManager,
                     ResolverFactory resolverFactory,
                     MessageDeliveryChannelRepository messageDelieveryChannelRepository)
 {
     OptionManager        = optionManager;
     this.resolverFactory = resolverFactory;
     this.messageDelieveryChannelRepository = messageDelieveryChannelRepository;
     Logger = resolverFactory.Resolve <ILogger>("SyncService");
 }
コード例 #25
0
ファイル: BasePuller.cs プロジェクト: tww19861004/fastSQL
 public override IPuller SetIndex(IIndexModel model)
 {
     using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
     {
         AttributeModel = model as AttributeModel;
         EntityModel    = entityRepository.GetById(AttributeModel.EntityId.ToString());
         SpreadOptions();
         return(this);
     }
 }
コード例 #26
0
        public static LoggerConfiguration SlackError(
            this LoggerSinkConfiguration loggerConfiguration,
            ResolverFactory resolverFactory,
            IFormatProvider fmtProvider = null)
        {
            var sink = resolverFactory.Resolve <SlackErrorSink>();

            sink.SetFormatPrivider(fmtProvider);
            return(loggerConfiguration.Sink(sink));
        }
コード例 #27
0
        public override PullResult PullNext(object lastToken = null)
        {
            using (var entityRepository = ResolverFactory.Resolve <EntityRepository>())
            {
                var options    = entityRepository.LoadOptions(EntityModel.Id.ToString());
                var totalCount = GetCount(options, true);

                int limit  = options.GetValue("puller_page_limit", 100);
                int offset = 0;
                if (lastToken != null)
                {
                    var jToken = JObject.FromObject(lastToken);
                    if (jToken.ContainsKey("Limit") && jToken.ContainsKey("Offset"))
                    {
                        limit  = int.Parse(jToken.GetValue("Limit").ToString());
                        offset = int.Parse(jToken.GetValue("Offset").ToString());
                        offset = offset + limit;
                    }
                }

                if (offset > totalCount) // AccessDb never knows how to stop
                {
                    return(new PullResult
                    {
                        Status = PullState.Invalid,
                        LastToken = new
                        {
                            Limit = limit,
                            Offset = offset
                        },
                        Data = null
                    });
                }

                var sqlScript = GetSqlScript(options, limit, offset + limit, true);
                var sets      = adapter.Query(sqlScript, new
                {
                    Limit  = limit,
                    Offset = offset + limit // for MsAccess only
                });
                var set     = sets.FirstOrDefault();
                var results = set?.Rows;
                return(new PullResult
                {
                    Status = results?.Count() > 0 ? PullState.HasData : PullState.Invalid,
                    LastToken = new
                    {
                        Limit = limit,
                        Offset = offset
                    },
                    Data = results
                });
            }
        }
コード例 #28
0
 public IPageManager Apply()
 {
     if (_ucContent == null)
     {
         _ucContent = resolverFactory.Resolve <UCSchedulerContent>();
     }
     eventAggregator.GetEvent <AddPageEvent>().Publish(new AddPageEventArgument
     {
         PageDefinition = _ucContent
     });
     return(this);
 }
コード例 #29
0
        public static LoggerConfiguration ApplicationOutput(
            this LoggerSinkConfiguration loggerConfiguration,
            ResolverFactory resolverFactory,
            string channel,
            IFormatProvider fmtProvider = null)
        {
            var sink = resolverFactory.Resolve <ApplicationOutputSink>();

            sink.SetFormatPrivider(fmtProvider);
            //sink.SetOwner(owner);
            sink.SetChannel(channel);
            return(loggerConfiguration.Sink(sink));
        }
コード例 #30
0
 public PullIndexParallelWorkflow(
     EntityRepository entityRepository,
     AttributeRepository attributeRepository,
     ScheduleOptionRepository scheduleOptionRepository,
     IndexerManager indexerManager,
     ResolverFactory resolverFactory)
 {
     this.entityRepository         = entityRepository;
     this.attributeRepository      = attributeRepository;
     this.scheduleOptionRepository = scheduleOptionRepository;
     this.indexerManager           = indexerManager;
     this.logger = resolverFactory.Resolve <ILogger>("Workflow");
 }