* Added a status page that shows all the currently executing build steps.

[?]
Aug 31, 2010, 3:27 PM
EFWN7JBV7YIHNMCA6ZGFRSHZIUQJ2EX57SWYGVT7ZRJCHPIM2R3QC

Dependencies

  • [2] 6FRLEP4P first try for timeline of last 24 hours in hydra
  • [3] ZWCTAZGL added newsitems, added some admin options to clear various caches.
  • [4] GAIBDEZZ * Store the name of the machine that performed a build step in the
  • [5] TQKGQ5R3
  • [6] BD3GRK4B * Get rid of "positive failures" and separate log phases.
  • [7] BHZXGT2H * Channels: provide an index page that lists all the packages in the
  • [8] ZVTSOVHN * Support Subversion checkouts.
  • [9] H7CNGK4O * Log evaluation errors etc. in the DB.
  • [10] JTRG7RDQ add support for git as jobinput
  • [11] PBFZEQLZ
  • [12] R5D7DZPE
  • [13] 3E6IP3R3 * Add the name of the jobset to ReleaseSetJobs, otherwise we can't
  • [14] LBNVQXUB * Build the /build stuff in a separate controller.
  • [15] EYNG4EL4 * Regenerate the bindings from a clean sqlite database.
  • [16] 37R34XJO * Negative caching: don't perform a build if a dependency already
  • [17] VHYWSRIS * Add nix version to footer of hydra pages
  • [18] YAPITGB3 * Boolean inputs.
  • [19] IK53RV4V
  • [20] AHTEIK7G * Added a maintainers field to the Builds table.
  • [21] GNIEG2GC * Disambiguate jobs by jobset name. I.e. jobs with the same name in
  • [22] SHBLLAVH * More global substitution.
  • [23] JM3DPYOM generated schema with new dbix class schema loader, grrrrrr
  • [24] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [25] 3ZCEPLNO
  • [26] TLZ2SPBR
  • [27] B72GLND4
  • [28] D3DIBMOK * For products that are directories (like manuals), allow a default
  • [29] UAPS46BQ
  • [30] S66BOMVU * Added authentication.
  • [31] HK32XC42
  • [32] KN3VYE5P * Cleaned up the foreign key constraints.
  • [33] JLDUSNUO * Unify rendering of finished and scheduled builds.
  • [34] J5UVLXOK * Start of a basic Catalyst web interface.
  • [35] T2232OBS * Add some DB indices to make the /releases page much faster.
  • [36] V4RNHJNR * Add a link to each project's homepage. Suggested by karltk.
  • [37] S6OISBQ3 * Mark the "current" builds in a jobset, i.e. those corresponding to
  • [38] 3HCBU2FA
  • [39] S5PV6IIM * Represent jobs explicitly in the DB.
  • [40] 4D4U5IPY * Allow jobsets to be disabled.
  • [41] LCKWLQW3 * In Sqlite "release" is now a keyword, so use "release_" instead.
  • [42] ECBA3GQO * Make the schema class names match the case of the SQL table names.
  • [43] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [44] RU7AQO7U * Role-based access control. Only admins can create projects. Only
  • [45] RBNQKATL * Adding persistant releases. A release is a named set of builds.
  • [46] KSVD6RAP * hydra: queue stats (nr running builds / nr queued builds)
  • [47] 6BLUKEQ2 * Caching of "path" inputs, and fake a revision number for those.
  • [48] OD5FSS5A * Quick hack to allow viewing of dependency graphs (via nix-store -q
  • [49] P5X4P6VK * Renaming "release sets" to "views" (not finished yet). Having
  • [50] TWVSALRL * Allow the maximum number of concurrent builds per platform to be
  • [51] VJHIHMEH * Store the meta.longDescription and meta.license attributes in the
  • [52] KOTB7BKV
  • [53] YTZOC7C5 * Editing of jobset inputs.
  • [54] CLJQCY2X * Store info about all the build actions and allow them to be
  • [55] CMU3YKOU * Store the release name.
  • [*] JFZNAYJX * Showing releases.
  • [*] 5IK6NYKF
  • [*] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [*] ELABMHJI * hydra: layout changes
  • [*] D5QIOJGP * Move everything up one directory.
  • [*] 7YBYT2LQ
  • [*] N22GPKYT * Put info about logs / build products in the DB.

Change contents

  • edit in src/lib/Hydra/Controller/Build.pm at line 38
    [5.850][5.850:883]()
    $c->stash->{curTime} = time;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 15
    [5.23][5.0:25]()
    my ($self, $c) = @_;
    [5.23]
    [5.0]
    my ($self, $c, @args) = @_;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 18
    [5.464][5.108:172](),[5.172][3.2210:2215](),[3.2215][5.1:196](),[5.1][5.1:196]()
    $c->stash->{nixVersion} = $ENV{"NIX_RELEASE"} || "<devel>";
    $c->stash->{nrRunningBuilds} = $c->model('DB::BuildSchedulingInfo')->search({ busy => 1 }, {})->count();
    $c->stash->{nrQueuedBuilds} = $c->model('DB::BuildSchedulingInfo')->count();
    [5.464]
    [5.1351]
    $c->stash->{nixVersion} = $ENV{"NIX_RELEASE"} || "<devel>";
    $c->stash->{curTime} = time;
    if (scalar(@args) && $args[0] ne "static") {
    $c->stash->{nrRunningBuilds} = $c->model('DB::BuildSchedulingInfo')->search({ busy => 1 }, {})->count();
    $c->stash->{nrQueuedBuilds} = $c->model('DB::BuildSchedulingInfo')->count();
    }
  • edit in src/lib/Hydra/Controller/Root.pm at line 78
    [57.2122]
    [58.545]
  • edit in src/lib/Hydra/Controller/Root.pm at line 95
    [2.557]
    [2.557]
  • edit in src/lib/Hydra/Controller/Root.pm at line 97
    [2.558]
    [59.9461]
    sub status :Local {
    my ($self, $c) = @_;
    $c->stash->{steps} = [ $c->model('DB::BuildSteps')->search(
    { 'me.busy' => 1, 'schedulingInfo.busy' => 1 },
    { join => [ 'schedulingInfo' ]
    , order_by => [ 'machine', 'outpath' ]
    } ) ];
    }
  • edit in src/lib/Hydra/Schema/BuildSteps.pm at line 105
    [4.155]
    [4.155]
    size: undef
    =head2 system
    data_type: text
    default_value: undef
    is_nullable: 1
  • edit in src/lib/Hydra/Schema/BuildSteps.pm at line 197
    [4.267]
    [5.2685]
    "system",
    {
    data_type => "text",
    default_value => undef,
    is_nullable => 1,
    size => undef,
    },
  • replacement in src/lib/Hydra/Schema/BuildSteps.pm at line 220
    [5.2959][4.268:410]()
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-08-31 15:40:29
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CC/XBHMiRLuQSI+nEFW50g
    [5.2959]
    [5.2959]
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-08-31 17:19:01
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:BU1na1One0SzUwilm7YmQQ
    __PACKAGE__->belongs_to(
    "schedulingInfo",
    "Hydra::Schema::BuildSchedulingInfo",
    { id => "build" },
    );
  • edit in src/root/static/css/hydra.css at line 56
    [60.1538]
    [60.1538]
  • edit in src/root/static/css/hydra.css at line 61
    [5.10389]
    [60.1577]
    td.right {
    text-align: right;
    }
  • edit in src/root/static/css/hydra.css at line 65
    [60.1578]
    [60.1578]
  • file addition: status.tt (----------)
    [61.1486]
    [% WRAPPER layout.tt title="Hydra status" %]
    [% PROCESS common.tt %]
    <h1>Hydra Status</h1>
    <table class="tablesorter">
    <thead>
    <tr><th>Machine</th><th>Type</th><th>Build</th><th>Step</th><th>What</th><th>Since</th></tr>
    </thead>
    <tbody>
    [% FOREACH step IN steps %]
    <tr>
    <td><tt>[% IF step.machine; step.machine.match('@(.*)').0; ELSE; 'localhost'; END %]</tt></td>
    <td><tt>[% step.system %]</tt></td>
    <td><a href="[% c.uri_for('/build' step.build.id) %]">[% step.build.id %]</a></td>
    <td><a href="[% c.uri_for('/build' step.build.id 'nixlog' step.stepnr) %]">[% step.stepnr %]</a></td>
    <td><tt>[% step.outpath.match('-(.*)').0 %]</tt></td>
    <td class='right'>[% INCLUDE renderDuration duration = curTime - step.starttime %] </td>
    </tr>
    [% END %]
    </tbody>
    </table>
    [% END %]
  • edit in src/script/hydra_build.pl at line 267
    [5.5774]
    [5.5774]
    , system => $3
  • edit in src/sql/hydra.sql at line 239
    [4.1207]
    [5.7556]
    system text,