private static AzureBlobStorageLogConfiguration ToInternalConfiguration(AzureBlobStorageLogPublicConfiguration configuration) { Contract.RequiresNotNullOrEmpty(configuration.SecretName); Contract.RequiresNotNullOrEmpty(configuration.WorkspaceFolderPath); var result = new AzureBlobStorageLogConfiguration(new ContentStore.Interfaces.FileSystem.AbsolutePath(configuration.WorkspaceFolderPath)); if (configuration.ContainerName != null) { result.ContainerName = configuration.ContainerName; } if (configuration.WriteMaxDegreeOfParallelism != null) { result.WriteMaxDegreeOfParallelism = configuration.WriteMaxDegreeOfParallelism.Value; } if (configuration.WriteMaxIntervalSeconds != null) { result.WriteMaxInterval = TimeSpan.FromSeconds(configuration.WriteMaxIntervalSeconds.Value); } if (configuration.WriteMaxBatchSize != null) { result.WriteMaxBatchSize = configuration.WriteMaxBatchSize.Value; } if (configuration.UploadMaxDegreeOfParallelism != null) { result.UploadMaxDegreeOfParallelism = configuration.UploadMaxDegreeOfParallelism.Value; } if (configuration.UploadMaxIntervalSeconds != null) { result.UploadMaxInterval = TimeSpan.FromSeconds(configuration.UploadMaxIntervalSeconds.Value); } return(result); }
private static async Task <AzureBlobStorageLog> CreateAzureBlobStorageLogAsync(OperationContext operationContext, DistributedCacheServiceArguments arguments, AzureBlobStorageLogPublicConfiguration configuration) { Contract.RequiresNotNull(configuration); // There is a big issue here: on the one hand, we'd like to be able to configure everything from the XML // instead of our JSON configuration, simply because the XML is self-contained. On the other hand, the XML // will likely be shared across all stamps, so there's no "stamp-specific" configuration in there. That // means all stamp-level configuration must be done through the JSON. AzureBlobStorageCredentials credentials = null; if (configuration.UseSasTokens) { var secrets = await arguments.Host.RetrieveSecretsAsync(new List <RetrieveSecretsRequest>() { new RetrieveSecretsRequest(configuration.SecretName, SecretKind.SasToken) }, token : operationContext.Token); credentials = new AzureBlobStorageCredentials((UpdatingSasToken)secrets[configuration.SecretName]); } else { var secrets = await arguments.Host.RetrieveSecretsAsync(new List <RetrieveSecretsRequest>() { new RetrieveSecretsRequest(configuration.SecretName, SecretKind.PlainText) }, token : operationContext.Token); credentials = new AzureBlobStorageCredentials((PlainTextSecret)secrets[configuration.SecretName]); } var azureBlobStorageLogConfiguration = ToInternalConfiguration(configuration); var azureBlobStorageLog = new AzureBlobStorageLog( configuration: azureBlobStorageLogConfiguration, context: operationContext, clock: SystemClock.Instance, fileSystem: new PassThroughFileSystem(), telemetryFieldsProvider: arguments.TelemetryFieldsProvider, credentials: credentials); await azureBlobStorageLog.StartupAsync().ThrowIfFailure(); return(azureBlobStorageLog); }