/// <summary>
 /// Initializes a new instance of the <see cref="KinesisTapServiceManager"/> class, using custom parameters.
 /// </summary>
 /// <param name="typeLoader">An implementation of the <see cref="ITypeLoader"/> interface.</param>
 /// <param name="parameterStore">An implementation of the <see cref="IParameterStore"/> interface.</param>
 /// <param name="logger">An implementation of the <see cref="ILogger"/> interface.</param>
 public KinesisTapServiceManager(ITypeLoader typeLoader, IParameterStore parameterStore, ILogger logger)
     : this()
 {
     this.typeLoader     = typeLoader;
     this.parameterStore = parameterStore;
     this.logger         = logger;
 }
        public LogManager(ITypeLoader typeLoader, IParameterStore parameterStore)
        {
            _typeLoader     = typeLoader;
            _parameterStore = parameterStore;

            _loggerFactory = CreateLoggerFactory();
            try
            {
                ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
                _config = configurationBuilder
                          .SetBasePath(Utility.GetKinesisTapConfigPath())
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                          .Build();
            }
            catch (Exception ex)
            {
                var logger = _loggerFactory.CreateLogger <LogManager>();
                logger.LogError($"Unable to load apsettings.json. {ex.ToMinimized()}");
                throw;
            }

            ChangeToken.OnChange(() => _config.GetReloadToken(), OnConfigChanged);

            IServiceCollection serviceCollection = new ServiceCollection();

            _serviceProvider = ConfigureServices(serviceCollection, _loggerFactory);
            _updateTimer     = new Timer(CheckUpdate, null, Timeout.Infinite, Timeout.Infinite);
            _configTimer     = new Timer(CheckConfig, null, Timeout.Infinite, Timeout.Infinite);
        }
 public TelemetricsClient(IAmazonCognitoIdentity cognitoIdentityClient, IParameterStore parameterStore)
 {
     _cognitoIdentityClient = cognitoIdentityClient;
     _parameterStore        = parameterStore;
     _clientId   = parameterStore.GetParameter(CLIENT_ID);
     _httpClient = new HttpClient();
 }
        internal SessionManager(ISessionFactory sessionFactory, ITypeLoader typeLoader,
                                IParameterStore parameterStore, INetworkStatusProvider defaultNetworkProvider, ILoggerFactory loggerFactory)
        {
            StackTraceMinimizerExceptionExtensions.DoCompressStackTrace = true;

            _typeLoader             = typeLoader;
            _parameterStore         = parameterStore;
            _sessionFactory         = sessionFactory;
            _loggerFactory          = loggerFactory;
            _defaultNetworkProvider = defaultNetworkProvider;
            _logger      = _loggerFactory.CreateLogger <SessionManager>();
            _configIdMap = new PersistentConfigFileIdMap(_parameterStore);

            Directory.CreateDirectory(ExtraConfigDirPath);

            _logger.LogInformation($"Default configuration file is '{DefaultConfigPath}'");
            _logger.LogInformation($"Extra configuration directory is '{ExtraConfigDirPath}'");

            _defaultConfigWatcher = new FileSystemWatcher(Path.GetDirectoryName(DefaultConfigPath))
            {
                Filter = Path.GetFileName(DefaultConfigPath)
            };
            _extraconfigWatcher = new FileSystemWatcher(ExtraConfigDirPath)
            {
                Filter = "*.json"
            };
            HookFileWatcherEvents(_defaultConfigWatcher);
            HookFileWatcherEvents(_extraconfigWatcher);
            instance = this;
        }
        /// <summary>
        /// Store some KinesisTap conventional values to the parameter store.
        /// </summary>
        /// <param name="store">The <see cref="IParameterStore"/> instance.</param>
        /// <remarks>
        /// This is used to store conventional values to the parameter store when KT starts up.
        /// Any value set from the previous run of KT is overwritten.
        /// Doing this provides different KT classes (SessionManager, LogManager, PersistentConfigFileIdMap etc.) a unified way to resolve values,
        /// and allows easier testing as well.
        /// </remarks>
        public static void StoreConventionalValues(this IParameterStore store)
        {
            store.SetParameter(ConfigDirPathKey,
                               Path.Combine(Utility.GetKinesisTapConfigPath()));

            store.SetParameter(NLogConfigPathKey,
                               Path.Combine(Utility.GetNLogConfigDirectory(), NLogConfigFileName));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Get the current KinesisTap build number stored in the parameter store.
        /// </summary>
        public static int GetStoredBuildNumber(this IParameterStore store)
        {
            var storedValue = store.GetParameter(BuildNumberKey);

            return(int.TryParse(storedValue, out var buildNumber)
                ? buildNumber
                : 0);
        }
 public PluginContext(IConfiguration config, ILogger logger, IMetrics metrics, IDictionary <string, ICredentialProvider> credentialProviders, IParameterStore parameterStore)
 {
     _config              = config;
     _logger              = logger;
     _metrics             = metrics;
     _credentialProviders = credentialProviders;
     _parameterStore      = parameterStore;
 }
Ejemplo n.º 8
0
        public MeasChunkCreatorTest()
        {
            _parameterStoreDummy = Substitute.For <IParameterStore>();

            _parameterStoreDummy.ChunkSize                 = 20;
            _parameterStoreDummy.ChunkTimeInterval         = 1;
            _parameterStoreDummy.MessageHeaderControlIdStr = "AAC0";
            _parameterStoreDummy.MsgTail = "AB";
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="KinesisTapServiceManager"/> class, using custom parameters.
 /// </summary>
 /// <param name="typeLoader">An implementation of the <see cref="ITypeLoader"/> interface.</param>
 /// <param name="parameterStore">An implementation of the <see cref="IParameterStore"/> interface.</param>
 /// <param name="logger">An implementation of the <see cref="ILogger"/> interface.</param>
 public KinesisTapServiceManager(ITypeLoader typeLoader, IParameterStore parameterStore, ILogger logger, INetworkStatusProvider networkStatusProvider)
 {
     this.typeLoader             = typeLoader;
     this.parameterStore         = parameterStore;
     this.logger                 = logger;
     this.networkStatusProvider  = networkStatusProvider;
     this.loggerFactory          = CreateSessionLoggerFactory(parameterStore);
     PluginContext.ServiceLogger = logger;
 }
Ejemplo n.º 10
0
        private static ILoggerFactory CreateSessionLoggerFactory(IParameterStore parameterStore)
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddNLog();
#if DEBUG
            loggerFactory.AddConsole(LogLevel.Debug);
#endif
            return(loggerFactory);
        }
Ejemplo n.º 11
0
 public MeasDataChunksProvider
 (
     IMeasChunkCreator measChunkCreator,
     IParameterStore parameterStore,
     IMySerialReader mySerialReader
 )
 {
     _measChunkCreator = measChunkCreator;
     _parameterStore   = parameterStore;
     _mySerialReader   = mySerialReader;
 }
Ejemplo n.º 12
0
        public Worker(ILoggerFactory loggerFactory,
                      IParameterStore parameterStore,
                      ISessionManager sessionManager,
                      INetworkStatusProvider defaultNetworkStatusProvider,
                      IHostApplicationLifetime lifetime)
        {
            HostApplicationLifeTime = lifetime;

            _logger         = loggerFactory.CreateLogger(Utility.ProductCodeName);
            _parameterStore = parameterStore;
            _sessionManager = sessionManager;
            _defaultNetworkStatusProvider = defaultNetworkStatusProvider;
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Store some KinesisTap conventional values to the parameter store.
        /// </summary>
        /// <param name="store">The <see cref="IParameterStore"/> instance.</param>
        /// <remarks>
        /// This is used to store conventional values to the parameter store when KT starts up.
        /// Any value set from the previous run of KT is overwritten.
        /// Doing this provides different KT classes (SessionManager, LogManager, PersistentConfigFileIdMap etc.) a unified way to resolve values,
        /// and allows easier testing as well.
        /// </remarks>
        public static void StoreConventionalValues(this IParameterStore store)
        {
            store.SetParameter(NLogConfigPathKey,
                               Path.Combine(Utility.GetKinesisTapConfigPath(), "NLog.xml"));

            store.SetParameter(DefaultConfigurationPathKey,
                               Path.Combine(Utility.GetKinesisTapConfigPath(), DefaultConfigFileName));

            store.SetParameter(ExtraConfigurationDirectoryPathKey,
                               Utility.GetKinesisTapExtraConfigPath());

            store.SetParameter(BuildNumberKey,
                               ProgramInfo.GetBuildNumber().ToString());
        }
Ejemplo n.º 14
0
 public PluginContext(
     IConfiguration config,
     ILogger logger,
     IMetrics metrics,
     IBookmarkManager bookmarkManager,
     IDictionary <string, ICredentialProvider> credentialProviders,
     IParameterStore parameterStore)
 {
     Configuration        = config;
     Logger               = logger;
     Metrics              = metrics;
     BookmarkManager      = bookmarkManager;
     _credentialProviders = credentialProviders;
     ParameterStore       = parameterStore;
 }
Ejemplo n.º 15
0
        public LogManager(ITypeLoader typeLoader, IParameterStore parameterStore)
        {
            _typeLoader     = typeLoader;
            _parameterStore = parameterStore;
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            _config = configurationBuilder
                      .SetBasePath(Utility.GetKinesisTapConfigPath())
                      .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                      .Build();

            ChangeToken.OnChange(() => _config.GetReloadToken(), OnConfigChanged);

            IServiceCollection serviceCollection = new ServiceCollection();

            _serviceProvider = ConfigureServices(serviceCollection, _config);
            _updateTimer     = new Timer(CheckUpdate, null, Timeout.Infinite, Timeout.Infinite);
            _configTimer     = new Timer(CheckConfig, null, Timeout.Infinite, Timeout.Infinite);
        }
        /// <summary>
        /// Create an instance of <see cref="IHostBuilder"/>
        /// </summary>
        public static IHostBuilder Create(string[] args)
        {
            // set 'ComputerName' environment variable if not on Windows
            if (!OperatingSystem.IsWindows())
            {
                SetComputerNameEnvironmentVariable();
            }

            var builder = new HostBuilder()
                          .ConfigureServices((hostContext, services) =>
            {
                services.AddSingleton <IAppDataFileProvider>(sp => new ProtectedAppDataFileProvider(Utility.GetKinesisTapProgramDataPath()));
                services.AddSingleton <ITypeLoader>(_ => new PluginLoader());
                services.AddSingleton(_ =>
                {
                    IParameterStore store = OperatingSystem.IsWindows()
                            ? new RegistryParameterStore()
                            : new SimpleParameterStore(Path.Combine(Utility.GetProfileDirectory(), "config"));

                    store.StoreConventionalValues();
                    return(store);
                });
                services.AddSingleton <INetworkStatusProvider>(services =>
                                                               new DefaultNetworkStatusProvider(services.GetService <ILogger <DefaultNetworkStatusProvider> >()));
                services.AddSingleton <ISessionManager, SessionManager>();
                services.AddSingleton(_ => new FactoryCatalogs
                {
                    SourceFactoryCatalog             = new FactoryCatalog <ISource>(),
                    SinkFactoryCatalog               = new FactoryCatalog <IEventSink>(),
                    CredentialProviderFactoryCatalog = new FactoryCatalog <ICredentialProvider>(),
                    GenericPluginFactoryCatalog      = new FactoryCatalog <IGenericPlugin>(),
                    PipeFactoryCatalog               = new FactoryCatalog <IPipe>(),
                    RecordParserCatalog              = new FactoryCatalog <IRecordParser>()
                });
                services.AddSingleton <IMetrics>(services
                                                 => new KinesisTapMetricsSource("_KinesisTapMetricsSource", services.GetService <ILogger <IMetrics> >()));
                services.AddSingleton <ISessionFactory, DefaultSessionFactory>();
                services.AddHostedService <Worker>();
            });

            return(builder);
        }
Ejemplo n.º 17
0
        public LogManager(int id, IConfiguration config, DateTime startTime,
                          ITypeLoader typeLoader, IParameterStore parameterStore,
                          ILoggerFactory loggerFactory, INetworkStatusProvider defaultNetworkStatusProvider,
                          IConfigurationSection defaultCredentialsSection = null, bool validated = false)
        {
            Id        = id;
            StartTime = startTime;

            _config                    = config;
            _loggerFactory             = loggerFactory;
            _typeLoader                = typeLoader;
            _parameterStore            = parameterStore;
            _networkStatus             = new NetworkStatus(defaultNetworkStatusProvider);
            _defaultCredentialsSection = defaultCredentialsSection;

            _descriptiveName = string.IsNullOrWhiteSpace(config[ConfigConstants.CONFIG_DESCRIPTIVE_NAME])
                ? string.Empty
                : _config[ConfigConstants.CONFIG_DESCRIPTIVE_NAME];

            _logger    = _loggerFactory.CreateLogger($"session:{_descriptiveName}");
            _validated = validated;
            _logger.LogDebug("Configuration is validated: {0}", _validated);
        }
Ejemplo n.º 18
0
        public Session(
            string name,
            IConfiguration config,
            IMetrics metrics,
            IServiceProvider services,
            bool validated)
        {
            Name        = name;
            StartTime   = DateTime.Now;
            IsValidated = validated;

            if (IsDefault && validated)
            {
                throw new ArgumentException("The default session cannot be validated");
            }

            _config         = config;
            _metrics        = metrics;
            _services       = services;
            _loggerFactory  = services.GetService <ILoggerFactory>();
            _parameterStore = services.GetService <IParameterStore>();
            _networkStatus  = new NetworkStatus(services.GetService <INetworkStatusProvider>());
            _logger         = _loggerFactory.CreateLogger(DisplayName);
            _logger.LogDebug("Configuration is validated: {0}", IsValidated);
            _bookmarkManager = new FileBookmarkManager(Utility.GetBookmarkDirectory(name),
                                                       _loggerFactory.CreateLogger($"{DisplayName}:{nameof(IBookmarkManager)}"),
                                                       services.GetService <IAppDataFileProvider>());

            var factoryCatalogs = services.GetService <FactoryCatalogs>();

            _sourceFactoryCatalog             = factoryCatalogs.SourceFactoryCatalog;
            _sinkFactoryCatalog               = factoryCatalogs.SinkFactoryCatalog;
            _credentialProviderFactoryCatalog = factoryCatalogs.CredentialProviderFactoryCatalog;
            _genericPluginFactoryCatalog      = factoryCatalogs.GenericPluginFactoryCatalog;
            _pipeFactoryCatalog               = factoryCatalogs.PipeFactoryCatalog;
            _recordParserCatalog              = factoryCatalogs.RecordParserCatalog;
        }
Ejemplo n.º 19
0
 public StreamHelper(IParameterStore parameterStore)
 {
     _parameterStore = parameterStore;
 }
Ejemplo n.º 20
0
 public MeasChunkCreator(IParameterStore parameterStore)
 {
     _parameterStore = parameterStore;
 }
 /// <summary>
 /// Create a new PersistentConfigFileIdMap
 /// </summary>
 /// <param name="filePath">Path to the file that backs the map</param>
 public PersistentConfigFileIdMap(IParameterStore store)
 {
     _store     = store;
     _memoryMap = LoadMapping();
 }
Ejemplo n.º 22
0
 public TelemetricsSinkConnector(IPlugInContext context) : base(context)
 {
     _parameterStore = context.ParameterStore;
     _clientId       = _parameterStore.GetParameter(ClientIdParameterName);
 }
Ejemplo n.º 23
0
 public MySerialReader(IParameterStore parameterStore)
 {
     _parameterStore = parameterStore;
 }
Ejemplo n.º 24
0
 public static string GetDefaultConfigFilePath(this IParameterStore store)
 => Path.Combine(store.GetParameter(ConfigDirPathKey), DefaultConfigFileName);
Ejemplo n.º 25
0
 public StreamHelperUnitTests()
 {
     _parameterStoreDummy = Substitute.For <IParameterStore>();
 }
Ejemplo n.º 26
0
 public static string GetConfigDirPath(this IParameterStore store) => store.GetParameter(ConfigDirPathKey);
Ejemplo n.º 27
0
 /// <inheritdoc/>
 public ISession Create(int id, IConfiguration config, DateTime startTime,
                        ITypeLoader typeLoader, IParameterStore parameterStore, ILoggerFactory loggerFactory,
                        INetworkStatusProvider networkStatusProvider, IConfigurationSection defaultCredentialsSection, bool validated)
 => new LogManager(id, config, startTime, typeLoader, parameterStore, loggerFactory, networkStatusProvider, defaultCredentialsSection, validated);
Ejemplo n.º 28
0
 public static string GetExtraConfigDirPath(this IParameterStore store)
 => Path.Combine(store.GetParameter(ConfigDirPathKey), Utility.ExtraConfigDirectoryName);
 public ConfigController(IParameterStore parameterStore)
 {
     _parameterStore = parameterStore;
 }