public object Any (LatestBuilds request) { var result = new List<KeyValuePair<DBHost, DBRevisionWorkView2>> (); List<DBLane> lanes = null; var hostLanes = new List<DBHostLane> (); using (DB db = new DB ()) { lanes = db.GetAllLanes (); using (IDbCommand cmd = db.CreateCommand ()) { cmd.CommandText = @" SELECT HostLane.* FROM HostLane WHERE hidden = false"; using (IDataReader reader = cmd.ExecuteReader ()) while (reader.Read ()) hostLanes.Add (new DBHostLane (reader)); } foreach (DBHostLane hl in hostLanes) { DBRevisionWorkView2 revisionWork = null; using (IDbCommand cmd = db.CreateCommand ()) { cmd.CommandText = @"SELECT R.* FROM (" + DBRevisionWorkView2.SQL.Replace (';', ' ') + ") AS R WHERE R.host_id = @host_id AND R.lane_id = @lane_id LIMIT @limit"; DB.CreateParameter (cmd, "host_id", hl.host_id); DB.CreateParameter (cmd, "lane_id", hl.lane_id); DB.CreateParameter (cmd, "limit", 1); using (IDataReader reader = cmd.ExecuteReader ()) while (reader.Read ()) revisionWork = new DBRevisionWorkView2 (reader); } result.Add (new KeyValuePair<DBHost, DBRevisionWorkView2> (Utils.FindHost (db, revisionWork.host_id), revisionWork)); } } var list = result.Where (view => view.Value != null).Select (view => { var item = view.Value; var lane = lanes.Where (l => l.id == item.lane_id).FirstOrDefault (); var parent = Utils.GetTopMostParent (lane, lanes); return new Build { Commit = item.revision, CommitId = item.revision_id, Date = item.completed ? item.endtime : item.date, Lane = lane.lane, LaneID = lane.id, Project = parent.lane, State = item.State, Author = item.author, BuildBot = view.Key == null ? string.Empty : view.Key.host, HostID = item.host_id, Url = Utils.MakeBuildUrl (item.lane_id, item.host_id, item.revision_id) }; }).OrderByDescending (b => b.Date).ToList (); return new LatestBuildsResponse { LatestBuilds = list }; }
public string GenerateOverview(FrontPageResponse data) { StringBuilder matrix = new StringBuilder(); LaneTreeNode tree = BuildTree(data); List <StringBuilder> header_rows = new List <StringBuilder> (); List <int> hostlane_order = new List <int> (); if (tree == null) { return(string.Empty); } // This renders all the host header lanes WriteLanes(header_rows, tree, 0, tree.Depth); matrix.AppendLine("<table class='buildstatus'>"); for (int i = 0; i < header_rows.Count; i++) { if (header_rows [i].Length == 0) { continue; } matrix.Append("<tr>"); matrix.Append(header_rows [i]); matrix.AppendLine("</tr>"); } // Renders all the hosts matrix.AppendLine("<tr>"); WriteHostLanes(matrix, tree, data.Hosts, hostlane_order); matrix.AppendLine("</tr>"); // Renders all the builds int counter = 0; int added = 0; StringBuilder row = new StringBuilder(); do { added = 0; row.Length = 0; for (int i = 0; i < hostlane_order.Count; i++) { int hl_id = hostlane_order [i]; var rev = FindRevisionWorkViews(data, hl_id); DBRevisionWorkView2 work = null; if (rev != null && rev.Count > counter) { work = rev [counter]; added++; } WriteWorkCell(row, work); } if (added > 0 && row.Length > 0) { matrix.Append("<tr>"); matrix.Append(row.ToString()); matrix.Append("</tr>"); } counter++; } while (counter <= limit && added > 0); matrix.AppendLine("</table>"); return(matrix.ToString()); }
void WriteWorkCell(StringBuilder row, DBRevisionWorkView2 work) { if (work == null) { row.Append("<td>-</td>"); return; } string revision = work.revision; int lane_id = work.lane_id; int host_id = work.host_id; int revision_id = work.revision_id; DBState state = work.State; bool completed = work.completed; string state_str = state.ToString().ToLowerInvariant(); bool is_working; string str_date = string.Empty; if (work.endtime != null && work.endtime.Value.Year > 2000) { str_date = "<br/>" + TimeDiffToString(work.endtime.Value, DateTime.UtcNow); } switch (state) { case DBState.Executing: is_working = true; break; case DBState.NotDone: case DBState.Paused: case DBState.DependencyNotFulfilled: case DBState.Ignore: is_working = false; break; default: is_working = !completed; break; } long dummy; if (revision.Length > 16 && !long.TryParse(revision, out dummy)) { revision = revision.Substring(0, 8); } if (is_working) { row.AppendFormat( @"<td class='{1}'> <center> <table class='executing'> <td> <a href='ViewLane.aspx?lane_id={2}&host_id={3}&revision_id={4}' title='{5}'>{0}{6}</a> </td> </table> <center> </td>" , revision, state_str, lane_id, host_id, revision_id, "", str_date); } else { row.AppendFormat("<td class='{1}'><a href='ViewLane.aspx?lane_id={2}&host_id={3}&revision_id={4}' title='{5}'>{0}{6}</a></td>", revision, state_str, lane_id, host_id, revision_id, "", str_date); } }
private Dictionary <string, object> RevisionWorkToDict(FrontPageResponse data, DBLane l, DBRevisionWorkView2 w) { return(new Dictionary <string, object> { { "id", w.id }, { "author", w.author }, { "host_id", w.host_id }, { "host", data.Hosts.Find(h => h.id == w.host_id).host }, { "revision", w.revision }, { "revision_id", w.revision_id }, { "completed", w.completed }, { "status", w.state }, { "endtime", w.endtime }, { "date", w.date }, { "lane", l.lane }, { "repository", l.repository }, { "branch", l.max_revision } }); }
public string GenerateOverview(FrontPageResponse data) { StringBuilder matrix = new StringBuilder(); LaneTreeNode tree = BuildTree(data); List <StringBuilder> header_rows = new List <StringBuilder> (); List <int> hostlane_order = new List <int> (); if (tree == null) { return(string.Empty); } WriteLanes(header_rows, tree, 0, tree.Depth); matrix.AppendLine("<table class='buildstatus'>"); for (int i = 0; i < header_rows.Count; i++) { if (header_rows [i].Length == 0) { continue; } matrix.Append("<tr>"); matrix.Append(header_rows [i]); matrix.AppendLine("</tr>"); } matrix.AppendLine("<tr>"); WriteHostLanes(matrix, tree, data.Hosts, hostlane_order); matrix.AppendLine("</tr>"); int counter = 0; int added = 0; StringBuilder row = new StringBuilder(); do { added = 0; row.Length = 0; for (int i = 0; i < hostlane_order.Count; i++) { int hl_id = hostlane_order [i]; List <DBRevisionWorkView2> rev = null; DBRevisionWorkView2 work = null; for (int k = 0; k < data.RevisionWorkHostLaneRelation.Count; k++) { if (data.RevisionWorkHostLaneRelation [k] == hl_id) { rev = data.RevisionWorkViews [k]; break; } } if (rev != null && rev.Count > counter) { work = rev [counter]; added++; } if (work != null) { string revision = work.revision; int lane_id = work.lane_id; int host_id = work.host_id; int revision_id = work.revision_id; DBState state = work.State; bool completed = work.completed; string state_str = state.ToString().ToLowerInvariant(); bool is_working; string str_date = string.Empty; if (work.endtime.Year > 2000) { str_date = "<br/>" + TimeDiffToString(work.endtime, DateTime.UtcNow); } switch (state) { case DBState.Executing: is_working = true; break; case DBState.NotDone: case DBState.Paused: case DBState.DependencyNotFulfilled: case DBState.Ignore: is_working = false; break; default: is_working = !completed; break; } long dummy; if (revision.Length > 16 && !long.TryParse(revision, out dummy)) { revision = revision.Substring(0, 8); } if (is_working) { row.AppendFormat( @"<td class='{1}'> <center> <table class='executing'> <td> <a href='ViewLane.aspx?lane_id={2}&host_id={3}&revision_id={4}' title='{5}'>{0}{6}</a> </td> </table> <center> </td>" , revision, state_str, lane_id, host_id, revision_id, "", str_date); } else { row.AppendFormat("<td class='{1}'><a href='ViewLane.aspx?lane_id={2}&host_id={3}&revision_id={4}' title='{5}'>{0}{6}</a></td>", revision, state_str, lane_id, host_id, revision_id, "", str_date); } } else { row.Append("<td>-</td>"); } } if (added > 0 && row.Length > 0) { matrix.Append("<tr>"); matrix.Append(row.ToString()); matrix.Append("</tr>"); } counter++; } while (counter <= limit && added > 0); matrix.AppendLine("</table>"); return(matrix.ToString()); }