Skip to content

Commit 3658396

Browse files
Added build statistics.
Added build status description, build number, project name and build description. Added progress bar of current build. Layout tweaks.
1 parent 9ddbbb7 commit 3658396

File tree

6 files changed

+94
-27
lines changed

6 files changed

+94
-27
lines changed

BuildMonitor/Content/Site.css

+8-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ html * {
108108
}
109109

110110
.buildInfo {
111-
margin-top: -8px;
111+
margin-top: -6px;
112112
margin-bottom: -3px;
113113
color: #777;
114114
}
@@ -117,6 +117,13 @@ html * {
117117
color: #999;
118118
}
119119

120+
.buildInfoBuildNumber{
121+
font-size: 20px;
122+
color: #777;
123+
margin-top: 2px;
124+
margin-bottom: -8px;
125+
}
126+
120127
.buildInfoBranch {
121128
font-size: 20px;
122129
color: #777;

BuildMonitor/Helpers/BuildMonitorModelHandlerBase.cs

+39-9
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,34 @@ public abstract class BuildMonitorModelHandlerBase : IBuildMonitorModelHandler
1414
protected readonly string buildTypesUrl;
1515
protected readonly string runningBuildsUrl;
1616
protected readonly string buildStatusUrl;
17-
protected readonly string buildQueueUrl;
17+
protected readonly string buildStatisticsUrl;
18+
protected readonly string buildQueueUrl;
1819
protected Dictionary<string, dynamic> runningBuilds;
1920

2021
protected dynamic projectsJson;
2122
protected dynamic buildTypesJson;
2223
protected dynamic buildQueueJson;
2324
protected dynamic buildStatusJson;
25+
protected dynamic buildStatisticsJson;
2426

25-
protected BuildMonitorModelHandlerBase()
27+
/// <summary>
28+
/// Initializes a new instance of the <see cref="BuildMonitorModelHandlerBase"/> class.
29+
/// </summary>
30+
protected BuildMonitorModelHandlerBase()
2631
{
2732
teamCityUrl = ConfigurationManager.AppSettings["teamcity_api_url"];
2833
projectsUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_projects"];
2934
buildTypesUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_buildtypes"];
3035
runningBuildsUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_runningbuilds"];
3136
buildStatusUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_buildstatus"];
32-
buildQueueUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_buildqueue"];
37+
buildStatisticsUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_buildstatistics"];
38+
buildQueueUrl = teamCityUrl + ConfigurationManager.AppSettings["teamcity_api_buildqueue"];
3339
}
3440

35-
protected void GetTeamCityBuildsJson()
41+
/// <summary>
42+
/// Gets the team city builds json.
43+
/// </summary>
44+
protected void GetTeamCityBuildsJson()
3645
{
3746
var projectsJsonString = RequestHelper.GetJson(projectsUrl);
3847
projectsJson = JsonConvert.DeserializeObject<dynamic>(projectsJsonString);
@@ -46,7 +55,10 @@ protected void GetTeamCityBuildsJson()
4655
UpdateRunningBuilds();
4756
}
4857

49-
private void UpdateRunningBuilds()
58+
/// <summary>
59+
/// Updates the running builds.
60+
/// </summary>
61+
private void UpdateRunningBuilds()
5062
{
5163
try
5264
{
@@ -74,12 +86,21 @@ private void UpdateRunningBuilds()
7486
}
7587
}
7688

77-
protected void UpdateBuildStatusFromRunningBuildJson(string buildId)
89+
/// <summary>
90+
/// Updates the build status from running build json.
91+
/// </summary>
92+
/// <param name="buildId">The build identifier.</param>
93+
protected void UpdateBuildStatusFromRunningBuildJson(string buildId)
7894
{
7995
buildStatusJson = runningBuilds[buildId];
8096
}
8197

82-
protected BuildStatus GetBuildStatusForRunningBuild(string buildId)
98+
/// <summary>
99+
/// Gets the build status for running build.
100+
/// </summary>
101+
/// <param name="buildId">The build identifier.</param>
102+
/// <returns></returns>
103+
protected BuildStatus GetBuildStatusForRunningBuild(string buildId)
83104
{
84105
if (runningBuilds.ContainsKey(buildId))
85106
{
@@ -107,7 +128,12 @@ protected BuildStatus GetBuildStatusForRunningBuild(string buildId)
107128
}
108129
}
109130

110-
protected string[] GetRunningBuildBranchAndProgress(string buildId)
131+
/// <summary>
132+
/// Gets the running build branch and progress.
133+
/// </summary>
134+
/// <param name="buildId">The build identifier.</param>
135+
/// <returns></returns>
136+
protected string[] GetRunningBuildBranchAndProgress(string buildId)
111137
{
112138
var result = new[]
113139
{
@@ -131,7 +157,11 @@ protected string[] GetRunningBuildBranchAndProgress(string buildId)
131157

132158
public abstract BuildMonitorViewModel GetModel();
133159

134-
protected string GetLastRunText()
160+
/// <summary>
161+
/// Gets the last run text.
162+
/// </summary>
163+
/// <returns></returns>
164+
protected string GetLastRunText()
135165
{
136166
const int second = 1;
137167
const int minute = 60 * second;

BuildMonitor/Helpers/CustomBuildMonitorModelHandler.cs

+9-5
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,17 @@ private void AddBuilds(ref Project project, Group group)
7474
var build = new Build()
7575
{
7676
Id = buildTypeJson.id,
77-
Name = job.Text ?? buildTypeJson.name
77+
Name = job.Text ?? buildTypeJson.name,
78+
Description = buildTypeJson.description,
79+
ProjectName = buildTypeJson.projectName
7880
};
7981

8082
var url = string.Format(buildStatusUrl, build.Id);
8183
var buildStatusJsonString = RequestHelper.GetJson(url);
8284
buildStatusJson = JsonConvert.DeserializeObject<dynamic>(buildStatusJsonString ?? string.Empty);
8385

84-
build.Branch = (buildStatusJson != null)
85-
? (buildStatusJson.branchName ?? "default")
86+
build.Branch = (buildStatusJson != null)
87+
? (buildStatusJson.branchName ?? "default")
8688
: "unknown";
8789

8890
build.Number = (buildStatusJson != null)
@@ -95,11 +97,13 @@ private void AddBuilds(ref Project project, Group group)
9597
UpdateBuildStatusFromRunningBuildJson(build.Id);
9698
}
9799

98-
build.UpdatedBy = GetUpdatedBy();
100+
build.Number = (string)buildStatusJson.number;
101+
build.UpdatedBy = GetUpdatedBy();
99102
build.LastRunText = GetLastRunText();
100103
build.IsQueued = IsBuildQueued(build.Id);
104+
build.StatusDescription = (string)buildStatusJson.statusText;
101105

102-
if (build.Status == BuildStatus.Running)
106+
if (build.Status == BuildStatus.Running)
103107
{
104108
var result = GetRunningBuildBranchAndProgress(build.Id);
105109
build.Branch = result[0];

BuildMonitor/Helpers/DefaultBuildMonitorModelHandler.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,17 @@ private void AddBuilds(ref Project project)
4949
var build = new Build()
5050
{
5151
Id = buildTypeJson.id,
52-
Name = buildTypeJson.name
52+
Name = buildTypeJson.name,
53+
Description = buildTypeJson.description,
54+
ProjectName = buildTypeJson.projectName
5355
};
5456

5557
var url = string.Format(buildStatusUrl, build.Id);
5658
var buildStatusJsonString = RequestHelper.GetJson(url);
5759
buildStatusJson = JsonConvert.DeserializeObject<dynamic>(buildStatusJsonString ?? string.Empty);
5860

59-
build.Branch = (buildStatusJson != null)
60-
? (buildStatusJson.branchName ?? "default")
61+
build.Branch = (buildStatusJson != null)
62+
? (buildStatusJson.branchName ?? "default")
6163
: "unknown";
6264

6365
build.Status = GetBuildStatusForRunningBuild(build.Id);
@@ -66,7 +68,8 @@ private void AddBuilds(ref Project project)
6668
UpdateBuildStatusFromRunningBuildJson(build.Id);
6769
}
6870

69-
build.UpdatedBy = GetUpdatedBy();
71+
build.Number = (string)buildStatusJson.number;
72+
build.UpdatedBy = GetUpdatedBy();
7073
build.LastRunText = GetLastRunText();
7174
build.IsQueued = IsBuildQueued(build.Id);
7275
build.StatusDescription = (string)buildStatusJson.statusText;

BuildMonitor/Models/Home/Build.cs

+21-3
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,34 @@ public class Build
44
{
55
public string Id { get; set; }
66
public string Name { get; set; }
7-
public BuildStatus Status { get; set; }
8-
public string Branch { get; set; }
7+
public string Description { get; set; }
8+
public string ProjectName { get; set; }
9+
public string Number { get; set; }
10+
public BuildStatus Status { get; set; }
11+
public string StatusText { get; set; }
12+
public string Branch { get; set; }
913
public string Progress { get; set; }
1014
public string UpdatedBy { get; set; }
1115
public string LastRunText { get; set; }
1216
public bool IsQueued { get; set; }
1317
public string StatusDescription { get; set; }
1418

19+
// Build Statistics
20+
public int BuildDuration { get; set; }
21+
public double CodeCoverageC { get; set; }
22+
public double CodeCoverageM { get; set; }
23+
public double CodeCoverageS { get; set; }
24+
public int IgnoredTestCount { get; set; }
25+
public int PassedTestCount { get; set; }
26+
public int TotalTestCount { get; set; }
1527

16-
public string StatusText
28+
/// <summary>
29+
/// Gets the status text.
30+
/// </summary>
31+
/// <value>
32+
/// The status text.
33+
/// </value>
34+
public string StatusStateText
1735
{
1836
get
1937
{

BuildMonitor/Views/Shared/_BuildItem.cshtml

+10-5
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22

33
<div id="[email protected]" class="col-sm-6 col-md-4 col-lg-3">
44
<div class="well buildItemWell">
5-
<h4 class="buildTitle text-cutoff">@Model.Name</h4>
6-
<h2 class="[email protected] text-cutoff">@Model.StatusText</h2>
7-
<p class="buildInfo text-cutoff">@Model.StatusDescription</p>
5+
<h4 class="buildTitle text-cutoff">@Model.Name (@Model.Description)</h4>
6+
<h2 class="[email protected] text-cutoff">@Model.StatusStateText</h2>
7+
<p class="buildInfoBuildNumber text-cutoff">
8+
Status <span class="buildInfoHighlight">@Model.StatusDescription</span>
9+
</p>
10+
<p class="buildInfoBuildNumber text-cutoff">
11+
Build <span class="buildInfoHighlight">@Model.Number</span>
12+
</p>
813
<p class="buildInfoBranch text-cutoff">
914
Branch <span class="buildInfoHighlight">@Model.Branch</span>
1015
@if (!string.IsNullOrWhiteSpace(Model.Progress))
@@ -15,14 +20,14 @@
1520
{
1621
<span> ▪ </span><span class="buildInfoProgressHighlight">queued</span>
1722
}
18-
</p>
23+
</p>
1924
@if (!string.IsNullOrWhiteSpace(Model.Progress))
2025
{
2126
<div class="progress">
2227
<div class="progress-bar" role="progressbar" aria-valuenow="@Model.Progress"
2328
aria-valuemin="0" aria-valuemax="100" style="width:@Model.Progress">
2429
<span class="sr-only">@Model.Progress Complete</span>
25-
</div>
30+
</div>
2631
</div>
2732
}
2833
<p class="buildInfo text-cutoff">Last updated by <span class="buildInfoHighlight">@Model.UpdatedBy</span> @Model.LastRunText</p>

0 commit comments

Comments
 (0)