private static void ReadStatistics(ProjectStatsData data, XmlReader xmlReader) { xmlReader.Read(); int buildIdCounter = 0; while (xmlReader.NodeType != XmlNodeType.EndElement) { switch (xmlReader.Name) { case "timestamp": xmlReader.Read(); break; case "integration": ProjectStatsBuildEntry entry = new ProjectStatsBuildEntry(buildIdCounter++); entry.BuildLabel = ReadAttribute(xmlReader, "build-label"); ReadIntegrationEntry(entry, ReadAttribute(xmlReader, "status"), xmlReader); data.Builds.Add(entry); break; default: throw new NotSupportedException(); } } xmlReader.Read(); }
private static void ReadIntegrationEntry(ProjectStatsBuildEntry data, string status, XmlReader xmlReader) { xmlReader.Read(); AddBuildStatus(data, status); while (xmlReader.NodeType != XmlNodeType.EndElement) { switch (xmlReader.Name) { case "statistic": string key = ReadAttribute(xmlReader, "name"); string value = xmlReader.ReadElementContentAsString(); data.Parameters.Add(key, value); break; default: throw new NotSupportedException(); } } xmlReader.Read(); }
private static void AddBuildStatus(ProjectStatsBuildEntry data, string status) { //Add build status parameters to parameter list data.Parameters.Add("Success", "0"); data.Parameters.Add("Exception", "0"); data.Parameters.Add("Failure", "0"); switch (status) { case "Exception": data.Parameters["Exception"] = "1"; break; case "Failure": data.Parameters["Failure"] = "1"; break; case "Success": data.Parameters["Success"] = "1"; break; } }
private void PrepareDataMatrix( ProjectStatsData data, ProjectStatsGraph graph, ProjectStatsGraphData graphData, List <string> xLabels) { int buildId = 0; xLabels.Clear(); // go through all builds for (int i = 0; i < data.Builds.Count; i++) { // show last 50 builds on graph if parameter is set to false if (!showBuildProjectHistory) { if (i < data.Builds.Count - BuildNumbers) { continue; } } ProjectStatsBuildEntry entry = data.Builds[i]; // ignore unsuccessful builds if (graph.IgnoreFailures && entry.Parameters["Success"] == "0") { continue; } // flag, that marks if parameter value will be added to the list or // value will increase existing value (depends on buildId) bool addValue = false; // if the current build label has not already been added to the xLabels if (entry.BuildLabel != xLabels.Find(temp => temp == entry.BuildLabel)) { // add build name to list. Build name will be shown on x-axis xLabels.Add(entry.BuildLabel); addValue = true; buildId = entry.BuildId; } // go through all graph parameters foreach (ProjectStatsGraphParameter parameter in graph.GraphParameters) { double value = 0; // if parameter exists in build statistic then get parameter value if (entry.Parameters.ContainsKey(parameter.ParameterName)) { if (parameter.ParameterType == typeof(TimeSpan)) { value = TimeSpan.Parse(entry.Parameters[parameter.ParameterName]).TotalSeconds; } else if (parameter.ParameterType == typeof(double)) { value = Convert.ToDouble( entry.Parameters[parameter.ParameterName], CultureInfo.InvariantCulture); } } if (addValue) { // set value graphData.SetValue(buildId, parameter.ParameterName, value); } else { // increment value graphData.IncValue(buildId, parameter.ParameterName, value); } } } }