コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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;
            }
        }