Exemple #1
0
		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
			};
		}
Exemple #2
0
    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());
    }
Exemple #3
0
    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}&amp;host_id={3}&amp;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}&amp;host_id={3}&amp;revision_id={4}' title='{5}'>{0}{6}</a></td>",
                             revision, state_str, lane_id, host_id, revision_id, "", str_date);
        }
    }
Exemple #4
0
 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 }
     });
 }
Exemple #5
0
    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}&amp;host_id={3}&amp;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}&amp;host_id={3}&amp;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());
    }