示例#1
0
        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);
        }
示例#2
0
        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);
        }