diff options
| -rw-r--r-- | bitbake/lib/toaster/orm/urls.py | 27 | ||||
| -rw-r--r-- | bitbake/lib/toaster/orm/views.py | 60 |
2 files changed, 87 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/orm/urls.py b/bitbake/lib/toaster/orm/urls.py new file mode 100644 index 0000000000..961bc19070 --- /dev/null +++ b/bitbake/lib/toaster/orm/urls.py | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | # | ||
| 2 | # BitBake Toaster Implementation | ||
| 3 | # | ||
| 4 | # Copyright (C) 2014 Intel Corporation | ||
| 5 | # | ||
| 6 | # This program is free software; you can redistribute it and/or modify | ||
| 7 | # it under the terms of the GNU General Public License version 2 as | ||
| 8 | # published by the Free Software Foundation. | ||
| 9 | # | ||
| 10 | # This program is distributed in the hope that it will be useful, | ||
| 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | # GNU General Public License for more details. | ||
| 14 | # | ||
| 15 | # You should have received a copy of the GNU General Public License along | ||
| 16 | # with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | |||
| 19 | |||
| 20 | from django.conf.urls import patterns, include, url | ||
| 21 | from django.views.generic import RedirectView | ||
| 22 | |||
| 23 | urlpatterns = patterns('orm.views', | ||
| 24 | # landing point for pushing a bitbake_eventlog.json file to this toaster instace | ||
| 25 | url(r'^eventfile$', 'eventfile', name='eventfile'), | ||
| 26 | ) | ||
| 27 | |||
diff --git a/bitbake/lib/toaster/orm/views.py b/bitbake/lib/toaster/orm/views.py new file mode 100644 index 0000000000..97d792b99e --- /dev/null +++ b/bitbake/lib/toaster/orm/views.py | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | # | ||
| 2 | # BitBake Toaster Implementation | ||
| 3 | # | ||
| 4 | # Copyright (C) 2014 Intel Corporation | ||
| 5 | # | ||
| 6 | # This program is free software; you can redistribute it and/or modify | ||
| 7 | # it under the terms of the GNU General Public License version 2 as | ||
| 8 | # published by the Free Software Foundation. | ||
| 9 | # | ||
| 10 | # This program is distributed in the hope that it will be useful, | ||
| 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | # GNU General Public License for more details. | ||
| 14 | # | ||
| 15 | # You should have received a copy of the GNU General Public License along | ||
| 16 | # with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | |||
| 19 | from django.views.decorators.cache import cache_control | ||
| 20 | from django.core.urlresolvers import reverse | ||
| 21 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger | ||
| 22 | from django.http import HttpResponseBadRequest, HttpResponse | ||
| 23 | from django.utils import timezone | ||
| 24 | from django.utils.html import escape | ||
| 25 | from datetime import timedelta | ||
| 26 | from django.utils import formats | ||
| 27 | from toastergui.templatetags.projecttags import json as jsonfilter | ||
| 28 | import json | ||
| 29 | import os | ||
| 30 | import tempfile | ||
| 31 | import subprocess | ||
| 32 | import toastermain | ||
| 33 | from django.views.decorators.csrf import csrf_exempt | ||
| 34 | |||
| 35 | |||
| 36 | @csrf_exempt | ||
| 37 | def eventfile(request): | ||
| 38 | """ Receives a file by POST, and runs toaster-eventreply on this file """ | ||
| 39 | if request.method != "POST": | ||
| 40 | return HttpResponseBadRequest("This API only accepts POST requests. Post a file with:\n\ncurl -F eventlog=@bitbake_eventlog.json http[s]://[server-address]/orm/eventfile\n", content_type="text/plain;utf8") | ||
| 41 | |||
| 42 | # write temporary file | ||
| 43 | (handle, abstemppath) = tempfile.mkstemp(dir="/tmp/") | ||
| 44 | with os.fdopen(handle, "w") as tmpfile: | ||
| 45 | for chunk in request.FILES['eventlog'].chunks(): | ||
| 46 | tmpfile.write(chunk) | ||
| 47 | tmpfile.close() | ||
| 48 | |||
| 49 | # compute the path to "bitbake/bin/toaster-eventreplay" | ||
| 50 | from os.path import dirname as DN | ||
| 51 | import_script = os.path.join(DN(DN(DN(DN(os.path.abspath(__file__))))), "bin/toaster-eventreplay") | ||
| 52 | if not os.path.exists(import_script): | ||
| 53 | raise Exception("script missing %s" % import_script) | ||
| 54 | scriptenv = os.environ.copy() | ||
| 55 | scriptenv["DATABASE_URL"] = toastermain.settings.getDATABASE_URL() | ||
| 56 | |||
| 57 | # run the data loading process and return the results | ||
| 58 | (out, err) = subprocess.Popen([import_script, abstemppath], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=scriptenv).communicate() | ||
| 59 | os.remove(abstemppath) | ||
| 60 | return HttpResponse("%s\n%s" % (out, err), content_type="text/plain;utf8") | ||
