public FileDataSource(IDataSourceUpdates dataSourceUpdates, FileDataTypes.IFileReader fileReader,
                       List <string> paths, bool autoUpdate, Func <string, object> alternateParser, bool skipMissingPaths,
                       FileDataTypes.DuplicateKeysHandling duplicateKeysHandling,
                       Logger logger)
 {
     _logger            = logger;
     _dataSourceUpdates = dataSourceUpdates;
     _paths             = new List <string>(paths);
     _parser            = new FlagFileParser(alternateParser);
     _dataMerger        = new FlagFileDataMerger(duplicateKeysHandling);
     _fileReader        = fileReader;
     _skipMissingPaths  = skipMissingPaths;
     if (autoUpdate)
     {
         try
         {
             _reloader = new FileWatchingReloader(_paths, TriggerReload);
         }
         catch (Exception e)
         {
             LogHelpers.LogException(_logger, "Unable to watch files for auto-updating", e);
             _reloader = null;
         }
     }
     else
     {
         _reloader = null;
     }
 }
        internal StreamProcessor(
            LdClientContext context,
            IDataSourceUpdates dataSourceUpdates,
            Uri baseUri,
            TimeSpan initialReconnectDelay,
            EventSourceCreator eventSourceCreator
            )
        {
            _log = context.Basic.Logger.SubLogger(LogNames.DataSourceSubLog);
            _log.Info("Connecting to LaunchDarkly stream");

            _dataSourceUpdates     = dataSourceUpdates;
            _httpConfig            = context.Http;
            _initialReconnectDelay = initialReconnectDelay;
            _diagnosticStore       = context.DiagnosticStore;
            _initTask  = new TaskCompletionSource <bool>();
            _streamUri = new Uri(baseUri, "/all");

            _storeStatusMonitoringEnabled = _dataSourceUpdates.DataStoreStatusProvider.StatusMonitoringEnabled;
            if (_storeStatusMonitoringEnabled)
            {
                _dataSourceUpdates.DataStoreStatusProvider.StatusChanged += OnDataStoreStatusChanged;
            }

            _es = (eventSourceCreator ?? CreateEventSource)(_streamUri, _httpConfig);
            _es.MessageReceived += OnMessage;
            _es.Error           += OnError;
            _es.Opened          += OnOpen;
        }
Beispiel #3
0
 public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates updateSink)
 {
     if (Instance is MockDataSourceBase m)
     {
         m.UpdateSink = updateSink;
     }
     return(Instance);
 }
 /// <inheritdoc/>
 public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
 {
     return(new StreamProcessor(
                context,
                dataSourceUpdates,
                _baseUri ?? DefaultBaseUri,
                _initialReconnectDelay,
                _eventSourceCreator
                ));
 }
Beispiel #5
0
        /// <summary>
        /// Called internally by the SDK to associate this test data source with an
        /// <see cref="LdClient"/> instance. You do not need to call this method.
        /// </summary>
        /// <param name="context">created internally by <c>LdClient</c></param>
        /// <param name="dataSourceUpdates">created internally by <c>LdClient</c></param>
        /// <returns>a data source instance</returns>
        public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
        {
            var instance = new DataSourceImpl(this, dataSourceUpdates, context.Basic.Logger.SubLogger("DataSource.TestData"));

            lock (_lock)
            {
                _instances.Add(instance);
            }
            return(instance);
        }
Beispiel #6
0
        /// <inheritdoc/>
        public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
        {
            context.Basic.Logger.Warn("You should only disable the streaming API if instructed to do so by LaunchDarkly support");
            FeatureRequestor requestor = new FeatureRequestor(context, _baseUri ?? DefaultBaseUri);

            return(new PollingProcessor(
                       context,
                       requestor,
                       dataSourceUpdates,
                       _pollInterval
                       ));
        }
Beispiel #7
0
        public PollingProcessorTest(ITestOutputHelper testOutput) : base(testOutput)
        {
            _mockFeatureRequestor = new Mock <IFeatureRequestor>();
            _featureRequestor     = _mockFeatureRequestor.Object;
            _dataStore            = new InMemoryDataStore();
            var dataSourceUpdatesImpl = TestUtils.BasicDataSourceUpdates(_dataStore, testLogger);

            _dataSourceUpdates        = dataSourceUpdatesImpl;
            _dataSourceStatusProvider = new DataSourceStatusProviderImpl(dataSourceUpdatesImpl);
            _config  = Configuration.Default(sdkKey);
            _context = new LdClientContext(new BasicConfiguration(sdkKey, false, testLogger), _config);
        }
Beispiel #8
0
        /// <inheritdoc/>
        public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
        {
            var configuredBaseUri = _baseUri ??
                                    StandardEndpoints.SelectBaseUri(context.Basic.ServiceEndpoints, e => e.StreamingBaseUri, "Streaming", context.Basic.Logger);

            return(new StreamProcessor(
                       context,
                       dataSourceUpdates,
                       configuredBaseUri,
                       _initialReconnectDelay,
                       _eventSourceCreator
                       ));
        }
 public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
 {
     if (context.Basic.Offline)
     {
         // If they have explicitly called Offline(true) to disable everything, we'll log this slightly
         // more specific message.
         context.Basic.Logger.Info("Starting LaunchDarkly client in offline mode");
     }
     else
     {
         context.Basic.Logger.Info("LaunchDarkly client will not connect to LaunchDarkly for feature flag data");
     }
     return(NullDataSource.Instance);
 }
Beispiel #10
0
 internal PollingProcessor(
     LdClientContext context,
     IFeatureRequestor featureRequestor,
     IDataSourceUpdates dataSourceUpdates,
     TimeSpan pollInterval
     )
 {
     _featureRequestor  = featureRequestor;
     _dataSourceUpdates = dataSourceUpdates;
     _taskExecutor      = context.TaskExecutor;
     _pollInterval      = pollInterval;
     _initTask          = new TaskCompletionSource <bool>();
     _log = context.Basic.Logger.SubLogger(LogNames.DataSourceSubLog);
 }
Beispiel #11
0
        /// <inheritdoc/>
        public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
        {
            var configuredBaseUri = _baseUri ??
                                    StandardEndpoints.SelectBaseUri(context.Basic.ServiceEndpoints, e => e.PollingBaseUri, "Polling",
                                                                    context.Basic.Logger);

            context.Basic.Logger.Warn("You should only disable the streaming API if instructed to do so by LaunchDarkly support");
            FeatureRequestor requestor = new FeatureRequestor(context, configuredBaseUri);

            return(new PollingProcessor(
                       context,
                       requestor,
                       dataSourceUpdates,
                       _pollInterval
                       ));
        }
Beispiel #12
0
 internal DataSourceImpl(TestData parent, IDataSourceUpdates updates, Logger log)
 {
     _parent  = parent;
     _updates = updates;
     _log     = log;
 }
Beispiel #13
0
 /// <inheritdoc/>
 public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
 {
     return(new FileDataSource(dataSourceUpdates, _fileReader, _paths, _autoUpdate,
                               _parser, _skipMissingPaths, _duplicateKeysHandling,
                               context.Basic.Logger.SubLogger(LogNames.DataSourceSubLog)));
 }
Beispiel #14
0
 public DataSourceWithData(IDataSourceUpdates dataSourceUpdates, FullDataSet <ItemDescriptor> data)
 {
     _dataSourceUpdates = dataSourceUpdates;
     _data = data;
 }
Beispiel #15
0
 public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates) =>
 new DataSourceWithData(dataSourceUpdates, _data);
Beispiel #16
0
 IDataSource IDataSourceFactory.CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates) => _ds;
 public IDataSource CreateDataSource(LdClientContext context, IDataSourceUpdates dataSourceUpdates)
 {
     _updates = dataSourceUpdates;
     return(new TestDataSource(_data, dataSourceUpdates));
 }
 internal TestDataSource(FullDataSet <ItemDescriptor> data, IDataSourceUpdates updates)
 {
     _data    = data;
     _updates = updates;
 }