protected void Page_Load(object sender, EventArgs e)
    {
        try {
            GetViewLaneDataResponse response;

            response = Master.WebService.GetViewLaneData2(Master.WebServiceLogin,
                                                          Utils.TryParseInt32(Request ["lane_id"]), Request ["lane"],
                                                          Utils.TryParseInt32(Request ["host_id"]), Request ["host"],
                                                          Utils.TryParseInt32(Request ["revision_id"]), Request ["revision"], false);

            DBHost     host     = response.Host;
            DBLane     lane     = response.Lane;
            DBRevision revision = response.Revision;

            if (lane == null || host == null || revision == null)
            {
                Response.Redirect("index.aspx", false);
                return;
            }

            header.InnerHtml = ViewLane.GenerateHeader(response, lane, host, revision, "Html report for");
            htmlreport.Attributes ["src"]    = Request.Url.ToString().Replace("Embedded", "");
            htmlreport.Attributes ["onload"] = "javascript: resizeToFillIFrame (document.getElementById ('" + htmlreport.ClientID + "'));";
            ClientScript.RegisterStartupScript(GetType(), "resizeIFrame", "<script type='text/javascript'>resizeToFillIFrame (document.getElementById ('" + htmlreport.ClientID + "'));</script>");
        } catch (Exception ex) {
            Response.Write(ex.ToString().Replace("\n", "<br/>"));
        }
    }
Example #2
0
    public string GenerateLaneTable(GetViewTableDataResponse response, DBLane lane, DBHost host, bool horizontal, int page, int limit)
    {
        StringBuilder             matrix       = new StringBuilder();
        StringBuilder             tooltip      = new StringBuilder();
        bool                      new_revision = true;
        int                       revision_id  = 0;
        List <DBRevisionWorkView> views        = response.RevisionWorkViews;
        List <List <TableNode> >  table        = new List <List <TableNode> > ();
        List <TableNode>          row          = new List <TableNode> ();
        List <TableNode>          header       = new List <TableNode> ();

        for (int i = 0; i < views.Count; i++)
        {
            while (header.Count <= views [i].sequence)
            {
                header.Add(null);
            }
            if (header [views [i].sequence] != null)
            {
                continue;
            }

            var node = new TableNode(string.Format("<a href='ViewWorkTable.aspx?lane_id={0}&amp;host_id={1}&amp;command_id={2}'>{3}</a>", lane.id, host.id, views [i].command_id, views [i].command));
            node.command_id             = views [i].command_id;
            header [views [i].sequence] = node;
        }
        header.RemoveAll(delegate(TableNode match) { return(match == null); });
        header.Insert(0, new TableNode("Revision", true));
        header.Insert(1, new TableNode("Diff", true));
        header.Insert(2, new TableNode("Author", true));
        //if (Authentication.IsInRole (response, MonkeyWrench.DataClasses.Logic.Roles.Administrator)) {
        //    header.Insert (3, new TableNode ("Select", true));
        //}
        header.Add(new TableNode("Host", true));
        header.Add(new TableNode("Duration", true));
        table.Add(header);

        bool   failed   = false;
        double duration = 0;

        for (int i = 0; i < views.Count; i++)
        {
            DBRevisionWorkView view = views [i];
            DBState            revisionwork_state = (DBState)view.revisionwork_state;
            DBState            state = (DBState)view.state;

            new_revision = revision_id != view.revision_id;
            revision_id  = view.revision_id;

            if (new_revision)
            {
                if (i > 0)
                {
                    table.Add(row);
                    row [row.Count - 1] = new TableNode(TimeSpan.FromSeconds(duration).ToString(), row [0].@class);
                }

                string revision = view.revision;
                long   dummy;
                if (revision.Length > 16 && !long.TryParse(revision, out dummy))
                {
                    revision = revision.Substring(0, 8);
                }

                string clazz = revisionwork_state.ToString().ToLower();
                clazz = clazz + " " + DarkenColor(clazz, table.Count);
                row   = new List <TableNode> ();

                tooltip.Length = 0;
                tooltip.AppendFormat("Author: {0}.", view.author);
                if (view.starttime.Date.Year > 2000)
                {
                    tooltip.AppendFormat(" Build start date: {0}.", view.starttime.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss UTC"));
                }

                row.Add(new TableNode(string.Format("<a href='ViewLane.aspx?lane_id={0}&amp;host_id={1}&amp;revision_id={2}' title='{4}'>{3}</a>", lane.id, host.id, view.revision_id, revision, tooltip.ToString()), clazz));
                row.Add(new TableNode(string.Format(ViewLane.CalculateDiffLink(lane.repository, view.revision))));
                row.Add(new TableNode(view.author));

                //if (Authentication.IsInRole (response, MonkeyWrench.DataClasses.Logic.Roles.Administrator))
                //    row.Add (new TableNode (string.Format ("<input type=checkbox id='id_revision_chk_{1}' name='revision_id_{0}' />", view.revision_id, i)));
                while (row.Count < header.Count - 2)
                {
                    row.Add(new TableNode("-"));
                }
                row.Add(new TableNode(view.workhost ?? ""));
                row.Add(new TableNode(""));
                failed   = false;
                duration = 0;
            }

            if (view.endtime > view.starttime)
            {
                duration += (view.endtime - view.starttime).TotalSeconds;
            }

            if (state == DBState.Failed && !view.nonfatal)
            {
                failed = true;
            }
            else if (revisionwork_state == DBState.Failed)
            {
                failed = true;
            }

            // result
            string result;
            bool   completed = true;
            switch (state)
            {
            case DBState.NotDone:
                completed = false;
                result    = failed ? "skipped" : "queued"; break;

            case DBState.Executing:
                completed = false;
                result    = "running"; break;

            case DBState.Failed:
                result = view.nonfatal ? "issues" : "failure"; break;

            case DBState.Success:
                result = "success"; break;

            case DBState.Aborted:
                result = "aborted"; break;

            case DBState.Timeout:
                result = "timeout"; break;

            case DBState.Paused:
                completed = false;
                result    = "paused"; break;

            case DBState.Ignore:
                completed = false;
                result    = "ignore"; break;

            default:
                completed = true;
                result    = "unknown"; break;
            }

            for (int j = 2; j < header.Count; j++)
            {
                if (header [j].command_id == view.command_id)
                {
                    if (completed)
                    {
                        row [j] = new TableNode(string.Format("<a href='{0}'>{1}</a>", Utilities.CreateWebServiceDownloadUrl(Request, view.id, view.command + ".log", true), result));
                    }
                    else
                    {
                        row [j] = new TableNode(result);
                    }
                    row [j].@class = result + " " + DarkenColor(result, table.Count);
                    break;
                }
            }
        }

        table.Add(row);
        row [row.Count - 1] = new TableNode(TimeSpan.FromSeconds(duration).ToString(), row [0].@class);

        matrix.AppendLine("<table class='buildstatus'>");
        if (horizontal)
        {
            for (int i = 0; i < header.Count; i++)
            {
                matrix.Append("<tr>");
                for (int j = 0; j < table.Count; j++)
                {
                    TableNode node = table [j] [i];
                    string    td   = node.is_header ? "th" : "td";
                    matrix.Append('<');
                    matrix.Append(td);
                    if (node.@class != null)
                    {
                        matrix.Append(" class='");
                        matrix.Append(node.@class);
                        matrix.Append("'");
                    }

                    /*
                     * if (node.style != null) {
                     *      matrix.Append (" style='");
                     *      matrix.Append (node.style);
                     *      matrix.Append ("'");
                     * }*/
                    matrix.Append(">");
                    matrix.Append(node.text);
                    matrix.Append("</");
                    matrix.Append(td);
                    matrix.Append(">");
                }
                matrix.AppendLine("</tr>");
            }
        }
        else
        {
            for (int i = 0; i < table.Count; i++)
            {
                matrix.Append("<tr>");
                for (int j = 0; j < row.Count; j++)
                {
                    TableNode node = table [i] [j];
                    string    td   = node.is_header ? "th" : "td";
                    matrix.Append('<');
                    matrix.Append(td);
                    if (node.@class != null)
                    {
                        matrix.Append(" class='");
                        matrix.Append(node.@class);
                        matrix.Append("'");
                    }

                    /*
                     * if (node.style != null) {
                     *      matrix.Append (" style='");
                     *      matrix.Append (node.style);
                     *      matrix.Append ("'");
                     * }*/
                    matrix.Append(">");
                    matrix.Append(node.text);
                    matrix.Append("</");
                    matrix.Append(td);
                    matrix.Append(">");
                }
                matrix.AppendLine("</tr>");
            }
        }
        matrix.AppendLine("</table>");
        return(matrix.ToString());
    }