public KinesisProducer(IMessageManager ipc_manager, ISocketFactory socket_factory, string region, KPLNETConfiguration config, AwsCredentialsProvider creds_provider, AwsCredentialsProvider metrics_creds_provider, Executor executor) { region_ = region; config_ = config; socket_factory_ = socket_factory; executor_ = executor; ipc_manager_ = ipc_manager; creds_chain_ = AwsCredentialsProviderChain.create(new List <AwsCredentialsProvider> { creds_provider }); metrics_creds_chain_ = metrics_creds_provider == creds_provider ? creds_chain_ : AwsCredentialsProviderChain.create(new List <AwsCredentialsProvider> { metrics_creds_provider }); pipelines_ = new ConcurrentDictionary <string, Pipeline>(); shutdown_ = false; create_metrics_manager(); if (config.clientType == KPLNETInterface.ClientType.SocketClient) { create_http_client(); } else { create_kinesis_client(); } report_outstanding(); message_drainer_ = new Thread(() => { drain_messages(); }); message_drainer_.Start(); }
void on_set_credentials(SetCredentials set_creds) { // If the metrics_creds_chain_ is pointing to the same instance as the regular creds_chain_, and we receive a new set of creds just for metrics, we need to create a new instance of AwsCredentialsProviderChain for metrics_creds_chain_ to point to. Otherwise we'll wrongly override the regular credentials when setting the metrics credentials. if (set_creds.ForMetrics && metrics_creds_chain_ == creds_chain_) { metrics_creds_chain_ = new AwsCredentialsProviderChain(); } AwsCredentialsProviderChain chain = set_creds.ForMetrics ? metrics_creds_chain_ : creds_chain_; chain.reset ( new List <AwsCredentialsProvider> { new BasicAwsCredentialsProvider ( set_creds.Credentials.Akid, set_creds.Credentials.SecretKey, set_creds.Credentials.Token ) } ); }