public async Task Run([QueueTrigger("circuitbreaker", Connection = "CircuitBreakerStorageAccountConnectionString")] CircuitBreakerMessage message)
        {
            await _circuitBreakerRepository.UpdateConfigurationAsync(message);

            await _circuitBreakerRepository.AddOperationAsync(message);

            await _circuitBreakerRepository.UpdateStateAsync(message.ServiceName, message.FunctionName);
        }
        public async Task AddOperationAsync(CircuitBreakerMessage message)
        {
            var tableReference = _storageAccount.CreateCloudTableClient().GetTableReference(TABLE_OPERATION);

            var operationEntity = new OperationEntity
            {
                IsSuccess    = message.IsSuccess,
                PartitionKey = $"{message.ServiceName}_{message.FunctionName}",
                RowKey       = Guid.NewGuid().ToString()
            };

            await tableReference.ExecuteAsync(TableOperation.InsertOrMerge(operationEntity));
        }
        public async Task UpdateConfigurationAsync(CircuitBreakerMessage message)
        {
            var tableReference = _storageAccount.CreateCloudTableClient().GetTableReference(TABLE_CONFIGURATION);

            var configurationEntity = new ConfigurationEntity
            {
                PartitionKey                        = message.ServiceName,
                RowKey                              = message.FunctionName,
                FailureRequestThreshold             = message.FailureRequestThreshold,
                FailureRequestThresholdMilliseconds = message.FailureRequestThresholdMilliseconds,
                HalfOpenSuccessThreshold            = message.HalfOpenSuccessThreshold,
                OpenTimeoutExpireMilliseconds       = message.OpenTimeoutExpireMilliseconds
            };

            await tableReference.ExecuteAsync(TableOperation.InsertOrMerge(configurationEntity));
        }