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); }
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)); } }
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)); }