public async Task <EnvironmentViewModel> CreateAsync([FromBody] EnvironmentViewModel environmentViewModel) { CustomerPrincipal principal; DateTime startTime; Dictionary <string, double> eventMetrics; Dictionary <string, string> eventProperties; EnvironmentEntity entity; string password; environmentViewModel.AssertNotNull(nameof(environmentViewModel)); try { startTime = DateTime.Now; principal = (CustomerPrincipal)HttpContext.Current.User; if (string.IsNullOrEmpty(environmentViewModel.Id)) { environmentViewModel.Id = Guid.NewGuid().ToString(); } password = Guid.NewGuid().ToString(); await Service.Vault.StoreAsync(password, environmentViewModel.Password); entity = new EnvironmentEntity(principal.CustomerId, environmentViewModel.Id) { Endpoint = environmentViewModel.Endpoint, ETag = "*", Name = environmentViewModel.Name, Organization = principal.Organization, Password = password, Username = environmentViewModel.Username }; await Service.Storage.WriteToTableAsync(MigrationConstants.EnvironmentTableName, entity); await Service.ServiceBus.WriteToQueueAsync(MigrationConstants.EnvironmentQueueName, entity); // Capture the request for the customer summary for analysis. eventProperties = new Dictionary <string, string> { { "Email", principal.Email }, { "EnvironmentId", environmentViewModel.Id }, { "EnvironmentName", environmentViewModel.Name }, { "PrincipalCustomerId", principal.CustomerId } }; // Track the event measurements for analysis. eventMetrics = new Dictionary <string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } }; Service.Telemetry.TrackEvent("/api/environment/create", eventProperties, eventMetrics); return(environmentViewModel); } finally { entity = null; eventMetrics = null; eventProperties = null; principal = null; } }
public async Task <EnvironmentsViewModel> DeleteAsync([FromBody] EnvironmentViewModel environmentViewModel) { CustomerPrincipal principal; DateTime startTime; Dictionary <string, double> eventMetrics; Dictionary <string, string> eventProperties; EnvironmentEntity entity; EnvironmentsViewModel model; List <MailboxEntity> mailboxes; environmentViewModel.AssertNotNull(nameof(environmentViewModel)); try { startTime = DateTime.Now; principal = (CustomerPrincipal)HttpContext.Current.User; entity = await Service.Storage.GetEntityAsync <EnvironmentEntity>( MigrationConstants.EnvironmentTableName, principal.CustomerId, environmentViewModel.Id); if (entity == null) { throw new EntityNotFoundException(Resources.EntityNotFoundException); } if (!string.IsNullOrEmpty(entity.Password)) { await Service.Vault.DeleteAsync(entity.Password); } mailboxes = await Service.Storage.GetEntitiesAsync <MailboxEntity>( MigrationConstants.MailboxTableName, m => m.PartitionKey.Equals(environmentViewModel.Id)); await Service.Storage.DeleteEntitiesAsync(MigrationConstants.MailboxTableName, mailboxes); await Service.Storage.DeleteEntityAsync(MigrationConstants.EnvironmentTableName, entity); model = await GetEnvironmentsAsync(); // Capture the request for the customer summary for analysis. eventProperties = new Dictionary <string, string> { { "Email", principal.Email }, { "EnvironmentId", environmentViewModel.Id }, { "EnvironmentName", environmentViewModel.Name }, { "PrincipalCustomerId", principal.CustomerId } }; // Track the event measurements for analysis. eventMetrics = new Dictionary <string, double> { { "ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds }, { "NumberOfEnvironments", model.Environments.Count } }; Service.Telemetry.TrackEvent("/api/environment/delete", eventProperties, eventMetrics); return(model); } finally { entity = null; eventMetrics = null; eventProperties = null; mailboxes = null; principal = null; } }