public Log(DSCReport dscReport, StatusData statusData) { if (dscReport != null) { // If there is no status in DSC Report, Job is InProgress if (dscReport.Status == null) { this.status = "InProgress"; } else { this.status = dscReport.Status; } // Get data from DSC Report this.jobId = dscReport.JobId; this.operationType = dscReport.OperationType; this.refreshMode = dscReport.RefreshMode; this.rebootRequested = dscReport.RebootRequested; this.timestamp = dscReport.EndTime; // Get data from DSC StatusReport, if available if (statusData != null) { this.durationInSeconds = statusData.DurationInSeconds; this.numberOfResources = statusData.NumberOfResources; this.hostname = statusData.Hostname; if (statusData.Error != null) { this.error = statusData.Error; } if (statusData.ResourcesInDesiredState != null) { foreach (Resource resource in statusData.ResourcesInDesiredState) { if (this.resourcesInDesiredState != "") { this.resourcesInDesiredState += ", "; } this.resourcesInDesiredState += resource.InstanceName; } if (statusData.ResourcesInDesiredState.Length < this.numberOfResources) { this.compliant = false; } } if (statusData.ResourcesNotInDesiredState != null) { foreach (Resource resource in statusData.ResourcesNotInDesiredState) { if (this.resourcesNotInDesiredState != "") { this.resourcesNotInDesiredState += ", "; } this.resourcesNotInDesiredState += resource.InstanceName; if (resource.Error != null) { if (this.error != "") { this.error += "\r\n"; } this.error += resource.InstanceName + @" """ + resource.Error + @""""; } } } } } }
private void Application_BeginRequest(Object source, EventArgs e) { // Create HttpApplication and HttpContext objects to access // request and response properties. HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; var urlMatch = SendReportRegex.Match(context.Request.Path); if (urlMatch.Success) { var agentId = urlMatch.Groups["AgentId"]; // Loading POST data byte[] postData = new byte[context.Request.InputStream.Length]; // save the position so that further processing of the request happens normally var originalPosition = context.Request.InputStream.Position; try { context.Request.InputStream.Read(postData, 0, (int)context.Request.InputStream.Length); } catch { postData = null; } finally { // reset the position for normal request execution context.Request.InputStream.Position = originalPosition; } // Decoding POST data as JSON DSCReport dscReport = new DSCReport(); StatusData statusData = new StatusData(); if (postData != null && postData.Length > 0) { // Extract data from main report try { string postDataStr = System.Text.Encoding.ASCII.GetString(postData); JavaScriptSerializer json_serializer = new JavaScriptSerializer(); dscReport = json_serializer.Deserialize <DSCReport>(postDataStr); } catch { dscReport = null; } // Extract data from StatusData part of main report if (dscReport != null && dscReport.StatusData.Length > 0) { try { string statusDataStr = dscReport.StatusData[0]; JavaScriptSerializer json_serializer = new JavaScriptSerializer(); statusData = json_serializer.Deserialize <StatusData>(statusDataStr); } catch { statusData = null; } } else { statusData = null; } // Write report on disk if (dscReport.Status != null || ReportInProgress) { if (Directory.Exists(ReportsFolder)) { var fileName = $"{agentId}.json"; // compute file name based on AgentId var fileFullPath = Path.Combine(ReportsFolder, fileName); try { // write to file request content using (var fileWriter = new FileStream(fileFullPath, FileMode.Create)) { using (var binaryWriter = new BinaryWriter(fileWriter)) { binaryWriter.Write(postData); binaryWriter.Flush(); binaryWriter.Close(); } } } catch { // TODO if needed } } } // Write new log line in log file Log log = new Log(dscReport, statusData); log.Flush(); } } }