public string GetScriptStatus(ref BackgroundWorker bgWorker, string fileName, ReportType reportType) { foreach (ServerData srv in multiDbData) { foreach (List <DatabaseOverride> ovr in srv.OverrideSequence.Values) { threadTotal++; lock (StatusReporting.SyncObj) { StatusReporting.SyncObj.WorkingRunners++; } StatusReportRunner runner = new StatusReportRunner(this.buildData, srv.ServerName, ovr, projectFilePath); runners.Add(runner); System.Threading.ThreadPool.QueueUserWorkItem(ProcessThreadedScriptStatus, runner); } } int counter = 0; while (StatusReporting.SyncObj.WorkingRunners > 0) { System.Threading.Thread.Sleep(100); counter++; if (bgWorker != null && (counter % 2 == 0)) { bgWorker.ReportProgress(StatusReporting.SyncObj.WorkingRunners, String.Format("Threads remaining: {0}", StatusReporting.SyncObj.WorkingRunners.ToString())); } } if (bgWorker != null) { bgWorker.ReportProgress(0, "Collating Results..."); } ServerStatusDataCollection coll = new ServerStatusDataCollection(); coll.BuildFileNameFull = this.buildZipFileName; foreach (StatusReportRunner runner in this.runners) { coll[runner.ServerName][runner.BaseDatabase] = runner.Status; } return(GenerateReport(coll, fileName, reportType)); }
private string GenerateReport(ServerStatusDataCollection collection, string fileName, ReportType reportType) { MemoryStream ms = new MemoryStream(); StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { System.Xml.Serialization.XmlSerializer xmlS = new System.Xml.Serialization.XmlSerializer(typeof(ServerStatusDataCollection)); xmlS.Serialize(sw, collection); sw.Flush(); sw.Close(); } if (fileName.Length > 0) { XmlTextReader xsltReader; XslCompiledTransform trans = new XslCompiledTransform(); StringReader sr = new StringReader(sb.ToString()); StringReader xsltText; XmlTextReader xmlReader = new XmlTextReader(sr); XPathDocument xPathDoc = new XPathDocument(xmlReader); using (XmlTextWriter fileWriter = new XmlTextWriter(fileName, Encoding.UTF8)) { string extension = Path.GetExtension(fileName).ToLower(); switch (reportType) { case ReportType.HTML: xsltText = new StringReader(Properties.Resources.ServerReport_html); xsltReader = new XmlTextReader(xsltText); trans.Load(xsltReader); trans.Transform(xPathDoc, null, fileWriter); break; case ReportType.Summary: xsltText = new StringReader(Properties.Resources.ServerReport_summary); xsltReader = new XmlTextReader(xsltText); trans.Load(xsltReader); trans.Transform(xPathDoc, null, fileWriter); break; case ReportType.XML: byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(sb.ToString()); string utf8String = System.Text.Encoding.UTF8.GetString(utf8Bytes); utf8String = utf8String.Replace("utf-16", "utf-8"); fileWriter.WriteRaw(utf8String); break; case ReportType.CSV: default: xsltText = new StringReader(Properties.Resources.ServerReport_csv); xsltReader = new XmlTextReader(xsltText); trans.Load(xsltReader); trans.Transform(xPathDoc, null, fileWriter); break; } } } return(sb.ToString()); }