Ejemplo n.º 1
0
        public void Setup()
        {
            _queryDispatcher   = A.Fake <IQueryDispatcher>();
            _commandDispatcher = A.Fake <ICommandDispatcher>();

            _assessmentHelper = new AssessmentHelper(_queryDispatcher, _commandDispatcher);
        }
Ejemplo n.º 2
0
            private async Task ProcessTaskAsync(
                AssessmentTask taskDefinition,
                TelemetryContext telemetryContext,
                string accessToken)
            {
                var telemetryManager = TelemetryHelper.CreateTelemetryManager(telemetryContext);

                var context = AssessmentHelper.GetEnvironmentContext(
                    telemetryManager,
                    accessToken,
                    ConfigHelper.ResourceManagerEndpoint,
                    taskDefinition.SubscriptionId);

                var assessmentService = new AssessmentService();

                var assessmentReport = await assessmentService.GenerateReportAsync(
                    context,
                    taskDefinition.TargetRegion);

                var reportId = DataAccess.SaveReport(
                    taskDefinition.TenantId,
                    taskDefinition.UserObjectId,
                    assessmentReport.ReportFilePath);

                File.Delete(assessmentReport.ReportFilePath);

                TelemetryHelper.LogInformation(
                    FormattableString.Invariant($"Saved report {reportId} to database and storage account."),
                    telemetryContext);

                DataAccess.UpdateTaskStatusCompleted(
                    taskDefinition.Id,
                    reportId);

                TokenStore.Instance.RemoveTokenWrapperByTaskId(taskDefinition.Id);

                TelemetryHelper.LogInformation(
                    @"Updated task status to completed.",
                    telemetryContext);

                TelemetryHelper.WriteEvent(
                    TelemetryEventNames.TaskEnd,
                    telemetryContext);

                TelemetryHelper.LogVerbose(@"Telemetry flush.", telemetryContext);
                TelemetryHelper.Flush();

                var flushWaitingTime = TimeSpan.FromSeconds(60);

                TelemetryHelper.LogVerbose(
                    FormattableString.Invariant($"Waiting flush for {flushWaitingTime}."),
                    telemetryContext);
                Thread.Sleep(flushWaitingTime);
            }
Ejemplo n.º 3
0
        public async Task <ActionResult> Run(AssessmentWithUsageReportModel model)
        {
            try
            {
                if (model.UsageReportFile == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Please upload a file"));
                }

                var inputFileName  = model.UsageReportFile.FileName;
                var outputFileName = $"{Path.GetFileNameWithoutExtension(inputFileName)}-AssessmentReport.pdf";

                string inputContent;
                using (var reader = new StreamReader(model.UsageReportFile.InputStream))
                {
                    inputContent = await reader.ReadToEndAsync();
                }

                var context = AssessmentHelper.GetEnvironmentContext(
                    TelemetryHelper.CreateTelemetryManager(new TelemetryContext
                {
                    Properties = new Dictionary <string, string>
                    {
                        { "UsageReportFileName", model.UsageReportFile.FileName },
                        { "TargetRegion", model.SelectedTargetRegion }
                    }
                }),
                    UsageFileHelper.Parse(inputContent));

                var assessmentService = new AssessmentService();
                var assessmentReport  = await assessmentService.GenerateReportAsync(context, model.SelectedTargetRegion);

                var outputContent = System.IO.File.ReadAllBytes(assessmentReport.ReportFilePath);
                System.IO.File.Delete(assessmentReport.ReportFilePath);

                return(this.File(outputContent, "application/pdf", outputFileName));
            }
            catch (Exception ex)
            {
                Trace.TraceError(FormattableString.Invariant($"Assessment with usage report failed: {ex}"));
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
        }
Ejemplo n.º 4
0
        public async Task <ActionResult> ListSubscription()
        {
            if (!this.Request.IsAuthenticated)
            {
                return(this.View());
            }

            var owinContext  = this.HttpContext.GetOwinContext();
            var user         = owinContext.GetUser();
            var tenantId     = user.GetTenantId();
            var userObjectId = user.GetUserObjectId();

            var telemetryContext = new TelemetryContext
            {
                TenantId     = tenantId,
                UserObjectId = userObjectId
            };

            TelemetryHelper.LogVerbose(
                @"AssessmentController::ListSubscription",
                telemetryContext);

            var accessToken = user.Claims.SingleOrDefault(c => c.Type == Constants.TokenKey).Value;

            if (string.IsNullOrWhiteSpace(accessToken))
            {
                owinContext.Challenge(
                    this.Url.Action("ListSubscription", "Assessment"));
            }

            TelemetryHelper.LogInformation(
                @"Listing subscriptions",
                telemetryContext);

            var telemetryManager = TelemetryHelper.CreateTelemetryManager(telemetryContext);
            var context          = AssessmentHelper.GetEnvironmentContext(
                telemetryManager,
                accessToken,
                ConfigHelper.ResourceManagerEndpoint);

            var resourceManager = new ResourceManager(context);
            var subscriptions   = await resourceManager.ListSubscriptionsAsync();

            var tasks   = DataAccess.ListTasks(tenantId, userObjectId);
            var tenants = await Utilities.TenantNameHelper.ListTenants(accessToken, ConfigHelper.ResourceManagerEndpoint);

            TelemetryHelper.LogInformation(
                FormattableString.Invariant($"Got {subscriptions.Count} subscriptions"),
                telemetryContext);

            var model = new ListSubscriptionModel
            {
                TenantId      = tenantId,
                Tenants       = tenants,
                Subscriptions = subscriptions,
                TargetRegions = Constants.TargetRegions,
                AnyTask       = tasks.Any(),
            };

            TelemetryHelper.LogVerbose(
                FormattableString.Invariant($"AssessmentController::ListSubscription::View with model: {JsonConvert.SerializeObject(model, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })}"),
                telemetryContext);

            return(this.View(model));
        }