internal static FirehoseSettings Load(NameValueCollection nvc) { var settings = new FirehoseSettings { Region = nvc["region"] ?? string.Empty, AccessKey = nvc["access_key"] ?? string.Empty, SecretKey = nvc["secret_key"] ?? string.Empty, Stream = nvc["stream"] ?? string.Empty, RoleArn = nvc["role_arn"] ?? string.Empty, StsTokenAgeInMinutes = GetStsTokenMaxAgeInMins(nvc["sts_token_maxage_minutes"]) }; // Parse // Handle defaults if (string.IsNullOrWhiteSpace(settings.Region) == true) { settings.Region = Defaults.Region; } if (string.IsNullOrWhiteSpace(settings.Stream) == true) { settings.Stream = Defaults.Stream; } // Calculate and assign signature var data = Encoding.UTF8.GetBytes($"{settings.Region}-{settings.SecretKey}-{settings.AccessKey}-{settings.RoleArn}"); using (var sha = SHA512.Create()) { settings.Signature = Convert.ToBase64String(sha.ComputeHash(data)); } return(settings); }
public async Task <FirehoseClient> CreateAsync(FirehoseSettings settings) { using (await Lock.ReadLockAsync()) { FirehoseClient client; if (Cache.TryGetValue(settings.Signature, out client) && client.IsValid()) { return(client); } } using (await Lock.WriteLockAsync()) { FirehoseClient client; if (Cache.TryGetValue(settings.Signature, out client) && client.IsValid()) { return(client); } if (client != null && client.IsValid() == false) { client.Dispose(); Cache.Remove(settings.Signature); } var newClient = await CreateNewAsync(settings); Cache[settings.Signature] = newClient; return(newClient); } }
private FirehoseClient CreateNew(FirehoseSettings settings) { var region = RegionEndpoint.GetBySystemName(settings.Region); if (settings.HasKeys == true) { var credentials = new BasicAWSCredentials(settings.AccessKey, settings.SecretKey); return(new FirehoseClient(new AmazonKinesisFirehoseClient(credentials, region))); } else { return(new FirehoseClient(new AmazonKinesisFirehoseClient(region))); } }
public FirehoseClient Create(FirehoseSettings settings) { FirehoseClient client = null; var waitHandle = new ManualResetEvent(false); Task.Factory.StartNew(async() => { try { client = await CreateAsync(settings); } finally { waitHandle.Set(); } }); waitHandle.WaitOne(); return(client); }
private async Task <FirehoseClient> CreateNewWithRoleAsync(FirehoseSettings settings) { using (var stsClient = new AmazonSecurityTokenServiceClient()) { Credentials credentials = null; var assumeRoleRequest = new AssumeRoleRequest() { RoleArn = settings.RoleArn, RoleSessionName = settings.Stream, DurationSeconds = settings.StsTokenAgeInMinutes * 60 }; var assumeRoleResponse = await stsClient.AssumeRoleAsync(assumeRoleRequest); credentials = assumeRoleResponse.Credentials; var region = RegionEndpoint.GetBySystemName(settings.Region); var client = new FirehoseClient(new AmazonKinesisFirehoseClient(credentials, region), DateTime.UtcNow.AddMinutes(settings.StsTokenAgeInMinutes)); return(client); } }
private async Task <FirehoseSettings> GetSettings() { var nvc = await _config.GetGlobalConfigurationAsNameValueCollectionAsync("logging", "firehose"); return(FirehoseSettings.Load(nvc ?? new NameValueCollection())); }
private async Task <FirehoseClient> CreateNewAsync(FirehoseSettings settings) { return(settings.HasRole ? await CreateNewWithRoleAsync(settings) : CreateNew(settings)); }