diff options
author | Michael Wood <michael.g.wood@intel.com> | 2015-03-13 14:34:41 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-03-21 00:00:27 +0000 |
commit | 3c5e2917604315775eebe7e62a560a853e5b1c58 (patch) | |
tree | d9312698dba69508bb67ce2df502c149d0bad195 | |
parent | 2f684f1bdc188fde5142ee95989994a7990984c5 (diff) | |
download | ast2050-yocto-poky-3c5e2917604315775eebe7e62a560a853e5b1c58.zip ast2050-yocto-poky-3c5e2917604315775eebe7e62a560a853e5b1c58.tar.gz |
bitbake: toaster: Add cancel build to latest build section
Add this functionality to the common managed_mrb_section
Make sure we are using the correct version of this template in the
projects template and remove now redundant code.
[YOCTO #7351]
(Bitbake rev: 23f1439a5d3e8f4053826794c6502eca20189054)
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
5 files changed, 53 insertions, 69 deletions
diff --git a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js index 3832066..fcf82ac 100644 --- a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js +++ b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js @@ -93,6 +93,33 @@ var libtoaster = (function (){ } }); } + /* cancelABuild: + * url: xhr_projectbuild + * builds_ids: space separated list of build request ids + * onsuccess: callback for successful execution + * onfail: callback for failed execution + */ + function _cancelABuild(url, build_ids, onsuccess, onfail){ + $.ajax( { + type: "POST", + url: url, + data: { 'buildCancel': build_ids }, + headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, + success: function (_data) { + if (_data.error !== "ok") { + console.warn(_data.error); + } else { + if (onsuccess !== undefined) onsuccess(_data); + } + }, + error: function (_data) { + console.warn("Call failed"); + console.warn(_data); + if (onfail) onfail(data); + } + }); + } + /* Get a project's configuration info */ function _getProjectInfo(url, projectId, onsuccess, onfail){ $.ajax({ @@ -197,6 +224,7 @@ var libtoaster = (function (){ return { reload_params : reload_params, startABuild : _startABuild, + cancelABuild : _cancelABuild, makeTypeahead : _makeTypeahead, getProjectInfo: _getProjectInfo, getLayerDepsForProject : _getLayerDepsForProject, diff --git a/bitbake/lib/toaster/toastergui/templates/managed_mrb_section.html b/bitbake/lib/toaster/toastergui/templates/managed_mrb_section.html index 51610e4..a6d4ac6 100644 --- a/bitbake/lib/toaster/toastergui/templates/managed_mrb_section.html +++ b/bitbake/lib/toaster/toastergui/templates/managed_mrb_section.html @@ -3,6 +3,7 @@ {% load humanize %} {%if mru|length > 0%} +{# Template provides the latest builds section requires mru in the context which can be added from _managed_get_latest_builds #} <div class="page-header top-air"> <h1> Latest builds @@ -118,6 +119,7 @@ <div class="span4 lead">Build queued <i title="This build will start as soon as a build server is available" class="icon-question-sign get-help get-help-blue heading-help" data-toggle="tooltip"></i> </div> + <button class="btn btn-info pull-right cancel-build-btn" data-build-id="{{buildrequest.id}}" data-request-url="{% url 'xhr_projectbuild' buildrequest.project.id %}" >Cancel</button> {% elif buildrequest.state == buildrequest.REQ_CREATED %} @@ -155,37 +157,25 @@ <script> -/* ensure csrf cookie exists {% csrf_token %} */ -function _makeXHRBuildCall(url, data, onsuccess, onfail) { - $.ajax( { - type: "POST", - url: url, - data: data, - headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, - success: function (_data) { - if (_data.error != "ok") { - alert(_data.error); - } else { - if (onsuccess != undefined) onsuccess(_data); - } - }, - error: function (_data) { - alert("Call failed"); - console.log(_data); - if (onfail) onfail(data); - } }); +function scheduleBuild(url, projectName, projectUrl, buildlist) { + console.log("scheduleBuild"); + libtoaster.startABuild(url, null, buildlist.join(" "), function(){ + window.location.reload(); + }, null); } +$(document).ready(function(){ -function scheduleBuild(url, projectName, projectUrl, buildlist) { - console.log("scheduleBuild"); - _makeXHRBuildCall(url, {targets: buildlist.join(" ")}, function (_data) { + $(".cancel-build-btn").click(function (){ + var url = $(this).data('request-url'); + var buildIds = $(this).data('build-id'); + var btn = $(this); - $('#latest-builds').prepend("<div class=\"alert alert-info project-name\"><span class=\"label label-info\"><a href=\""+projectUrl+"\">"+projectName+"</a></span><div class=\"row-fluid\">" + - "<div class=\"span5 lead\">" + buildlist.join(" ") + - "</div><div class=\"span4 lead\">Build queued <i title=\"This build will start as soon as a build server is available\" class=\"icon-question-sign get-help get-help-blue heading-help\"></i></div></div></div>"); + libtoaster.cancelABuild(url, buildIds, function(){ + btn.parents(".alert").fadeOut(); + }, null); }); -} +}); </script> diff --git a/bitbake/lib/toaster/toastergui/templates/mrb_section.html b/bitbake/lib/toaster/toastergui/templates/mrb_section.html index 432955a..c7bddf0 100644 --- a/bitbake/lib/toaster/toastergui/templates/mrb_section.html +++ b/bitbake/lib/toaster/toastergui/templates/mrb_section.html @@ -50,9 +50,6 @@ <span class="lead{%if not MANAGED or not build.project%} pull-right{%endif%}"> Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent|sectohms }}</a> </span> - {% if MANAGED and build.project %} - <a class="btn {%if build.outcome == build.SUCCEEDED%}btn-success{%elif build.outcome == build.FAILED%}btn-danger{%else%}btn-info{%endif%} pull-right" onclick="scheduleBuild({% url 'xhr_projectbuild' build.project.id as bpi%}{{bpi|json}}, {{build.project.name|json}}, {{build.get_sorted_target_list|mapselect:'target'|json}})">Run again</a> - {% endif %} </div> {%endif%} {%if build.outcome == build.IN_PROGRESS %} @@ -68,41 +65,5 @@ {% endfor %} </div> - -<script> - -function _makeXHRBuildCall(url, data, onsuccess, onfail) { - $.ajax( { - type: "POST", - url: url, - data: data, - headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, - success: function (_data) { - if (_data.error != "ok") { - console.warn(_data.error); - } else { - if (onsuccess != undefined) onsuccess(_data); - } - }, - error: function (_data) { - console.warn("Call failed"); - console.warn(_data); - if (onfail) onfail(data); - } }); -} - - -function scheduleBuild(url, projectName, buildlist) { - console.warn("scheduleBuild"); - _makeXHRBuildCall(url, {targets: buildlist.join(" ")}, function (_data) { - - $('#latest-builds').prepend('<div class="alert alert-info" style="padding-top:0px">' + '<span class="label label-info" style="font-weight: normal; margin-bottom: 5px; margin-left:-15px; padding-top:5px;">'+projectName+'</span><div class="row-fluid">' + - '<div class="span4 lead">' + buildlist.join(" ") + - '</div><div class="span4 lead pull-right">Build queued. Your build will start shortly.</div></div></div>'); - }); -} - -</script> - {%endif%} diff --git a/bitbake/lib/toaster/toastergui/templates/projects.html b/bitbake/lib/toaster/toastergui/templates/projects.html index 88d5bd3..88ee4bc 100644 --- a/bitbake/lib/toaster/toastergui/templates/projects.html +++ b/bitbake/lib/toaster/toastergui/templates/projects.html @@ -7,7 +7,7 @@ {% block pagecontent %} - {% include "mrb_section.html" %} + {% include "managed_mrb_section.html" %} <div class="page-header top-air"> diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 661023e..26c8760 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -1871,8 +1871,7 @@ if toastermain.settings.MANAGED: # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds) # most recent build is like projects' most recent builds, but across all projects - build_mru = BuildRequest.objects.all() - build_mru = list(build_mru.filter(Q(state__lt=BuildRequest.REQ_COMPLETED) or Q(state=BuildRequest.REQ_DELETED)).order_by("-pk")) + list(build_mru.filter(state__in=[BuildRequest.REQ_COMPLETED, BuildRequest.REQ_FAILED]).order_by("-pk")[:3]) + build_mru = _managed_get_latest_builds() fstypes_map = {}; for build_request in build_info: @@ -3130,6 +3129,12 @@ if toastermain.settings.MANAGED: } return render(request, "unavailable_artifact.html", context) + # This returns the mru object that is needed for the + # managed_mrb_section.html template + def _managed_get_latest_builds(): + build_mru = BuildRequest.objects.all() + build_mru = list(build_mru.filter(Q(state__lt=BuildRequest.REQ_COMPLETED) or Q(state=BuildRequest.REQ_DELETED)).order_by("-pk")) + list(build_mru.filter(state__in=[BuildRequest.REQ_COMPLETED, BuildRequest.REQ_FAILED]).order_by("-pk")[:3]) + return build_mru def projects(request): @@ -3153,7 +3158,7 @@ if toastermain.settings.MANAGED: project_info = _build_page_range(Paginator(queryset, pagesize), request.GET.get('page', 1)) # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds) - build_mru = Build.objects.order_by("-started_on")[:3] + build_mru = _managed_get_latest_builds() # translate the project's build target strings fstypes_map = {}; |