VBWHG272ASPCVRBVSR7B2VXAPSSYXTWFMAN6ZV2KEQUHWLRRPYYQC GS4SFHCPF76AX2U4NLLJGUISF6Y4AHYWEW3GLTDCKVDDXLSIGXUQC GJFYEU3SVP7TDSYXVZEYGKN4NVWSZX4754PPPTOYPRHUO5RMDWPQC PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLAC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC HPEG2RHVNHOPB5T4ZRXANIRBMVOVY3B5GFETJRYOTDJFVAYH2TQAC 36M6DGITWMQQGZ7VROEHUOY4FP7OHPJ5DXMQMHHISBIAJLQE24YAC XDDCO6CHPWGXFV3RSMMUYY45DTXJXQNYYHUT2PCYAGRODK43MD6AC VVOAXWH4EKVYSDOOKDQN3FHU2JRNNKEG7G4E7YRB7HEVYXHVP63QC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC FU4GO5VN3PKQ3DKOHVHJTMHUKOKMKWS27TIULQ3FMEFXRED5Q44AC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC 2GUAKGTBTNFFER343SQWSLFYIXXHJLDSGH5JHF7QMC3AVZB7Q3TQC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC 2R7GHSA4NUXPRWRPVXYDYWFIVVJGSUWUI2IPJGFN6ILZIAZGXGCAC TCXFZZFNJAO6UBBRHJLBXHDPCCKTXIPVFJ3YCDIBS4W7ZJTAI4NAC NW3ZYPCMDAFPCVDJ5HQ4EHGFDMI3U2Z4GCM6A6ER7NVRJVV4TCVAC }sub history_graphs : Chained('buildChain') PathPart('history-graphs') {my ($self, $c) = @_;my $build = $c->stash->{build};if ($build->finished) {$c->stash->{prevBuilds} = [$c->model('DB::Builds')->search({ project => $c->stash->{project}->name, jobset => $c->stash->{build}->jobset->name, job => $c->stash->{build}->job->name, 'me.system' => $build->system, finished => 1, buildstatus => 0, 'me.id' => { '<=' => $build->id }}, { join => "actualBuildStep", "+select" => ["actualBuildStep.stoptime - actualBuildStep.starttime"], "+as" => ["actualBuildTime"], order_by => "me.id DESC", rows => 50})];}$c->stash->{template} = 'build-history-tab.tt';
#__PACKAGE__->has_one(# "actualBuildStep",# "Hydra::Schema::BuildSteps",# { 'foreign.outpath' => 'self.outpath'# , 'foreign.build' => 'self.id'# },#);
__PACKAGE__->has_one("actualBuildStep","Hydra::Schema::BuildSteps",{ 'foreign.drvpath' => 'self.drvpath', 'foreign.build' => 'self.id'},);
[% PROCESS common.tt %][% PROCESS "product-list.tt" %][% USE HTML %][% USE Date %]<h3>Build time history (in seconds)</h3><div id="placeholder" style="width:800px;height:400px;"></div><div id="overview" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script src="[% c.uri_for("/static/js/flot/jquery.flot.js") %]" type="text/javascript"></script><script src="[% c.uri_for("/static/js/flot/jquery.flot.selection.js") %]" type="text/javascript"></script><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %]var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};var plot = $.plot($("#placeholder"), [d], options);var overview = $.plot($("#overview"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});// now connect the two$("#placeholder").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});$("#overview").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});$("#placeholder").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});</script><h3>Store path size history (in MB)</h3><div id="placeholder-size" style="width:800px;height:400px;"></div><div id="overview-size" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %]var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};var plot = $.plot($("#placeholder-size"), [d], options);var overview = $.plot($("#overview-size"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});// now connect the two$("#placeholder-size").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder-size"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});$("#overview-size").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});$("#placeholder-size").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});</script>
[% IF prevBuilds %]<div id="tabs-history" class="tab-pane"><h3>Build time history (in seconds)</h3><div id="placeholder" style="width:800px;height:400px;"></div><div id="overview" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script src="[% c.uri_for("/static/js/flot/jquery.flot.js") %]" type="text/javascript"></script><script src="[% c.uri_for("/static/js/flot/jquery.flot.selection.js") %]" type="text/javascript"></script><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %]var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};var plot = $.plot($("#placeholder"), [d], options);var overview = $.plot($("#overview"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});// now connect the two$("#placeholder").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});$("#overview").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});$("#placeholder").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});</script><h3>Store path size history (in MB)</h3><div id="placeholder-size" style="width:800px;height:400px;"></div><div id="overview-size" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %]var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};
var overview = $.plot($("#overview-size"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});// now connect the two$("#placeholder-size").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder-size"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});$("#overview-size").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});$("#placeholder-size").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});</script></div>[% END %]