All of lore.kernel.org
 help / color / mirror / Atom feed
* [review-request][PATCH] bitbake: toaster: Add cancel build to latest build section
@ 2015-03-13 14:34 Michael Wood
  2015-03-13 15:13 ` Barros Pena, Belen
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Wood @ 2015-03-13 14:34 UTC (permalink / raw)
  To: toaster

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]

Signed-off-by: Michael Wood <michael.g.wood@intel.com>
---
 .../lib/toaster/toastergui/static/js/libtoaster.js | 28 +++++++++++++++
 .../toastergui/templates/managed_mrb_section.html  | 42 +++++++++-------------
 .../toaster/toastergui/templates/mrb_section.html  | 39 --------------------
 .../lib/toaster/toastergui/templates/projects.html |  2 +-
 bitbake/lib/toaster/toastergui/views.py            | 11 ++++--
 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 d6e32f8..471df1c 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
@@ -119,6 +120,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 %}
 
@@ -156,37 +158,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 8034cfc..4a334f9 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -1866,8 +1866,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:
@@ -3101,6 +3100,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):
@@ -3124,7 +3129,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 = {};
-- 
2.1.0



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [review-request][PATCH] bitbake: toaster: Add cancel build to latest build section
  2015-03-13 14:34 [review-request][PATCH] bitbake: toaster: Add cancel build to latest build section Michael Wood
@ 2015-03-13 15:13 ` Barros Pena, Belen
  2015-03-17 11:05   ` Damian, Alexandru
  0 siblings, 1 reply; 3+ messages in thread
From: Barros Pena, Belen @ 2015-03-13 15:13 UTC (permalink / raw)
  To: Wood, Michael G, toaster



On 13/03/2015 14:34, "Michael Wood" <michael.g.wood@intel.com> wrote:

>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]

The UI looks good.

Thanks!

Belén

>
>Signed-off-by: Michael Wood <michael.g.wood@intel.com>
>---
> .../lib/toaster/toastergui/static/js/libtoaster.js | 28 +++++++++++++++
> .../toastergui/templates/managed_mrb_section.html  | 42
>+++++++++-------------
> .../toaster/toastergui/templates/mrb_section.html  | 39
>--------------------
> .../lib/toaster/toastergui/templates/projects.html |  2 +-
> bitbake/lib/toaster/toastergui/views.py            | 11 ++++--
> 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 d6e32f8..471df1c 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
>@@ -119,6 +120,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 %}
> 
>@@ -156,37 +158,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 8034cfc..4a334f9 100755
>--- a/bitbake/lib/toaster/toastergui/views.py
>+++ b/bitbake/lib/toaster/toastergui/views.py
>@@ -1866,8 +1866,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:
>@@ -3101,6 +3100,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):
>@@ -3124,7 +3129,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 = {};
>-- 
>2.1.0
>
>-- 
>_______________________________________________
>toaster mailing list
>toaster@yoctoproject.org
>https://lists.yoctoproject.org/listinfo/toaster



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [review-request][PATCH] bitbake: toaster: Add cancel build to latest build section
  2015-03-13 15:13 ` Barros Pena, Belen
@ 2015-03-17 11:05   ` Damian, Alexandru
  0 siblings, 0 replies; 3+ messages in thread
From: Damian, Alexandru @ 2015-03-17 11:05 UTC (permalink / raw)
  To: Barros Pena, Belen; +Cc: toaster

[-- Attachment #1: Type: text/plain, Size: 11841 bytes --]

Taken for submission,

Thank you,
Alex

On Fri, Mar 13, 2015 at 3:13 PM, Barros Pena, Belen <
belen.barros.pena@intel.com> wrote:

>
>
> On 13/03/2015 14:34, "Michael Wood" <michael.g.wood@intel.com> wrote:
>
> >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]
>
> The UI looks good.
>
> Thanks!
>
> Belén
>
> >
> >Signed-off-by: Michael Wood <michael.g.wood@intel.com>
> >---
> > .../lib/toaster/toastergui/static/js/libtoaster.js | 28 +++++++++++++++
> > .../toastergui/templates/managed_mrb_section.html  | 42
> >+++++++++-------------
> > .../toaster/toastergui/templates/mrb_section.html  | 39
> >--------------------
> > .../lib/toaster/toastergui/templates/projects.html |  2 +-
> > bitbake/lib/toaster/toastergui/views.py            | 11 ++++--
> > 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 d6e32f8..471df1c 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
> >@@ -119,6 +120,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 %}
> >
> >@@ -156,37 +158,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 8034cfc..4a334f9 100755
> >--- a/bitbake/lib/toaster/toastergui/views.py
> >+++ b/bitbake/lib/toaster/toastergui/views.py
> >@@ -1866,8 +1866,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:
> >@@ -3101,6 +3100,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):
> >@@ -3124,7 +3129,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 = {};
> >--
> >2.1.0
> >
> >--
> >_______________________________________________
> >toaster mailing list
> >toaster@yoctoproject.org
> >https://lists.yoctoproject.org/listinfo/toaster
>
> --
> _______________________________________________
> toaster mailing list
> toaster@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/toaster
>



-- 
Alex Damian
Yocto Project
SSG / OTC

[-- Attachment #2: Type: text/html, Size: 16242 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-03-17 11:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-13 14:34 [review-request][PATCH] bitbake: toaster: Add cancel build to latest build section Michael Wood
2015-03-13 15:13 ` Barros Pena, Belen
2015-03-17 11:05   ` Damian, Alexandru

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.