private void CreateBuildRow(QaReportDataRow row) { // 增加单元测试结果行 for (int j = 0; j < GroupNames.Length; j++) { // 取各小组的扫描数据 GroupDailySummary2 summary = this.TodaySummary.FirstOrDefault(x => x.GroupName == GroupNames[j]); if (summary != null) { // 早期没有数据,或者没有启用编译任务 if (summary.Data.BuildIsOK.HasValue == false) { row.Cells[j] = new QaReportDataCell("--", "#999"); } else if (summary.Data.BuildIsOK.Value) { row.Cells[j] = new QaReportDataCell("PASS", "green"); } // 编译失败 else { row.Cells[j] = new QaReportDataCell("ERROR", "red"); } } else { // 未知场景,也按没有采集数据来处理 row.Cells[j] = new QaReportDataCell("--", "#999"); } } }
/// <summary> /// 重新计算某一天的小组日汇总数据 /// URL: /ajax/scan/Admin/RefreshDailySummary.ppx?day=2016-04-28 /// </summary> /// <param name="day"></param> /// <returns></returns> public string RefreshDailySummary(DateTime day) { List <GroupDailySummary2> list = new List <GroupDailySummary2>(); foreach (JobOption job in JobManager.Jobs) { // 计算当天的汇总数据 TotalResult data = ScanResultCache.LoadTotalResult(job.Id, day, true); GroupDailySummary2 summary = new GroupDailySummary2(); summary.GroupName = job.Name; summary.Data = ToSummary2(data); list.Add(summary); } string filename = GetDataFileName(day); string savepath = Path.GetDirectoryName(filename); if (Directory.Exists(savepath) == false) { Directory.CreateDirectory(savepath); } string json = list.ToJson(); File.WriteAllText(filename, json); return(json); }
private void CreateCodeCoverRow(QaReportDataRow row) { // 增加单元测试结果行 for (int j = 0; j < GroupNames.Length; j++) { // 取各小组的扫描数据 GroupDailySummary2 summary = this.TodaySummary.FirstOrDefault(x => x.GroupName == GroupNames[j]); if (summary != null) { string text = summary.Data.CodeCover.ToString() + "%"; // 单元测试如果执行失败,就以 -1 表示 if (summary.Data.CodeCover < 0) { row.Cells[j] = new QaReportDataCell("ERROR", "red"); } else if (summary.Data.CodeCover == 0) { if (_isExistUnitTestData) { row.Cells[j] = new QaReportDataCell("0", "red"); } else { // 老数据中,没有采集单元数据,需要特殊处理 row.Cells[j] = new QaReportDataCell("--", "#999"); } } else if (summary.Data.CodeCover < 60) { row.Cells[j] = new QaReportDataCell(text, "red"); } else if (summary.Data.CodeCover >= 80) { row.Cells[j] = new QaReportDataCell(text, "green"); } else { row.Cells[j] = new QaReportDataCell(text, null); } } else { // 未知场景,也按没有采集数据来处理 row.Cells[j] = new QaReportDataCell("--", "#999"); } } }
private void CreateUnitTestRow(QaReportDataRow row) { // 增加单元测试结果行 for (int j = 0; j < GroupNames.Length; j++) { // 取各小组的扫描数据 GroupDailySummary2 summary = this.TodaySummary.FirstOrDefault(x => x.GroupName == GroupNames[j]); if (summary != null) { string text = $"{summary.Data.UnitTestPassed}/{summary.Data.UnitTestTotal}"; // 单元测试如果执行失败,就以 -1 表示 if (summary.Data.UnitTestTotal < 0) { row.Cells[j] = new QaReportDataCell("ERROR", "red"); } else if (summary.Data.UnitTestTotal == 0) { if (_isExistUnitTestData) { row.Cells[j] = new QaReportDataCell("0", "red"); } else { // 老数据中,没有采集单元数据,需要特殊处理 row.Cells[j] = new QaReportDataCell("--", "#999"); } } else { if (summary.Data.UnitTestPassed == summary.Data.UnitTestTotal) { row.Cells[j] = new QaReportDataCell(text, "green"); } else // 如果单元测试不能 100% 通过,就用红字显示 { row.Cells[j] = new QaReportDataCell(text, "red"); } } } else { // 未知场景,也按没有采集数据来处理 row.Cells[j] = new QaReportDataCell("--", "#999"); } } }
private QaReportDataCell CreateCell(string scanKind, string groupName) { string propertyName = s_propertyDict[scanKind]; PropertyInfo property = typeof(TotalSummary2).GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public); GroupDailySummary2 todaySummary = this.TodaySummary.Find(x => x.GroupName == groupName); int todayValue = todaySummary?.Data != null ? (int)property.GetValue(todaySummary.Data, null) : 0; GroupDailySummary2 lastdaySummary = this.LastdaySummary.Find(x => x.GroupName == groupName); int lastdayValue = lastdaySummary?.Data != null ? (int)property.GetValue(lastdaySummary.Data, null) : 0; return(new QaReportDataCell(todayValue, lastdayValue)); }
private QaReportDataCell CreateTotalCell(string groupName) { GroupDailySummary2 todaySummary = this.TodaySummary.Find(x => x.GroupName == groupName); int todayValue = 0; if (todaySummary?.Data != null) { todayValue = todaySummary.Data.BaseTotal; } GroupDailySummary2 lastdaySummary = this.LastdaySummary.Find(x => x.GroupName == groupName); int lastdayValue = 0; if (lastdaySummary?.Data != null) { lastdayValue = lastdaySummary.Data.BaseTotal; } return(new QaReportDataCell(todayValue, lastdayValue)); }
public object GetKindTotal(string flag, string kind) { if (string.IsNullOrEmpty(kind)) { kind = "BaseTotal"; } // 1、根据参数名找到对应的属性,后续将读取这个属性的值 PropertyInfo p = typeof(TotalSummary2).GetProperty(kind, BindingFlags.Instance | BindingFlags.Public); if (p == null) { throw new ArgumentException($"kind参数值 {kind} 不是有效的属性名称。"); } // 2、确定开始和结束日期 DateTime start, end; GetDateRnage(flag, out start, out end); // 保存有效的日期值(有数据文件) List <string> dayList = new List <string>(); HighchartsDataSeries[] series = (from b in JobManager.Jobs let h = new HighchartsDataSeries { Name = b.Name, Data = new List <int>() } select h).ToArray(); // 3、加载日期范围内的数据 DailySummaryHelper helper = new DailySummaryHelper(); for ( ; start <= end; start = start.AddDays(1)) { // 加载每一天的汇总数据 List <GroupDailySummary2> data = helper.LoadData(start); if (data == null) { continue; } // 将日期保存下来,做为X轴 dayList.Add(start.ToDateString()); // 根据小组来循环匹配数据(填充每行的数据) foreach (var s in series) { GroupDailySummary2 group = data.FirstOrDefault(x => x.GroupName == s.Name); if (group != null) { int value = (int)p.GetValue(group.Data); s.Data.Add(value); } else { s.Data.Add(0); // 没有找到就用【零】来填充 } } } // 4、构造Highcharts控件所需要的数据对象 return(new { chart = new { type = "line" }, title = new { text = "代码扫描问题趋势分析表" }, xAxis = new { categories = (from x in dayList let s = x.Substring(5) select s).ToArray() }, yAxis = new { title = new { text = "基础问题小计数量" } }, series = series }); }