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 }; }
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.ToString().ToLowerInvariant() }, { "endtime", w.endtime }, { "date", w.date }, { "lane", l.lane }, { "repository", l.repository }, { "branch", l.max_revision } }; }
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); } }