public async Task <InvokeResult> DeleteInstanceAsync(String instanceId, EntityHeader org, EntityHeader user)
        {
            var instance = await _instanceRepo.GetInstanceAsync(instanceId);

            await AuthorizeAsync(instance, AuthorizeResult.AuthorizeActions.Delete, user, org);
            await CheckForDepenenciesAsync(instance);

            var repo = await _deviceManagerRepo.GetDeviceRepositoryAsync(instance.DeviceRepository.Id, org, user);

            if (repo != null)
            {
                /* Upon deletion release the repo so it can be used somewhere else */
                repo.Instance = null;
                await _deviceManagerRepo.UpdateDeviceRepositoryAsync(repo, org, user);
            }

            await _instanceRepo.DeleteInstanceAsync(instanceId);

            if (!EntityHeader.IsNullOrEmpty(instance.PrimaryHost))
            {
                var host = await _deploymentHostManager.GetDeploymentHostAsync(instance.PrimaryHost.Id, org, user);

                if (host.HostType.Value == HostTypes.Dedicated)
                {
                    await _deploymentHostManager.DeleteDeploymentHostAsync(host.Id, org, user);
                }
            }

            return(InvokeResult.Success);
        }
        public async Task <ListResponse <UsageMetrics> > GetMetricsForInstanceAsync(string instanceId, ListRequest request, EntityHeader org, EntityHeader user)
        {
            var instance = await _deploymentInstanceRepo.GetInstanceAsync(instanceId);

            await AuthorizeOrgAccessAsync(user, org, typeof(UsageMetrics), Core.Validation.Actions.Read, "Instance");

            if (instance.LogStorage.Value == LogStorage.Local)
            {
                var proxy = _proxyFactory.Create <IUsageMetricsRepo>(new ProxySettings {
                    OrganizationId = org.Id, InstanceId = instanceId
                });
                return(await proxy.GetMetricsForInstanceAsync(instanceId, request));
            }
            else
            {
                return(await _metricsRepo.GetMetricsForInstanceAsync(instanceId, request));
            }
        }
        public async Task <ListResponse <TelemetryReportData> > GetForDeviceAsync(DeviceRepository deviceRepo, string deviceId, string recordType, ListRequest request, EntityHeader org, EntityHeader user)
        {
            if (deviceRepo.Instance == null)
            {
                return(ListResponse <TelemetryReportData> .FromError("No associated instance."));
            }

            await base.AuthorizeOrgAccessAsync(user, org, typeof(TelemetryReportData));

            var instance = await _deploymentInstanceRepo.GetInstanceAsync(deviceRepo.Instance.Id);

            if (instance.LogStorage.Value == LogStorage.Local)
            {
                var proxy = _proxyFactory.Create <ITelemetryService>(new ProxySettings {
                    OrganizationId = org.Id, InstanceId = deviceRepo.Instance.Id
                });
                return(await proxy.GetForPemAsync(deviceId, recordType, request));
            }
            else
            {
                return(await _telemetryService.GetForDeviceAsync(deviceId, recordType, request));
            }
        }
示例#4
0
        public async Task <InvokeResult> DeployHostAsync(String id, EntityHeader org, EntityHeader user)
        {
            var instance = await _instanceRepo.GetInstanceAsync(id);

            var host = await _hostRepo.GetDeploymentHostAsync(instance.PrimaryHost.Id);

            var transitionResult = CanTransitionToState(host, instance, DeploymentActivityTaskTypes.DeployHost, org, user);

            if (!transitionResult.Successful)
            {
                return(transitionResult);
            }

            return(await PerformActionAsync(instance, org, user, DeploymentActivityTaskTypes.DeployHost));
        }