summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2013-10-11 13:46:23 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-10-18 11:13:13 +0100
commitd24334a5e83d09b3ab227af485971bb768bf5412 (patch)
tree2c7682da9abed81fd2478c869e0324ab051679d9 /bin
parent8a8bafc8ded98364a31878b23c64503a53affcd1 (diff)
downloadbitbake-contrib-d24334a5e83d09b3ab227af485971bb768bf5412.tar.gz
toaster: add toaster code to bitbake
This patch adds the Toaster component to Bitbake. Toaster is a module designed to record the progress of a Bitbake build, and data about the resultant artifacts. It contains a web-based interface and a REST API allowing post-facto inspection of the build process and artifacts. Features present in this build: * toaster start script * relational data model * Django boilerplate code * the REST API * the Simple UI web interface This patch has all the development history squashed together. Code portions contributed by Calin Dragomir <calindragomir@gmail.com>. Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Diffstat (limited to 'bin')
-rwxr-xr-xbin/toaster145
1 files changed, 145 insertions, 0 deletions
diff --git a/bin/toaster b/bin/toaster
new file mode 100755
index 000000000..16de52b11
--- /dev/null
+++ b/bin/toaster
@@ -0,0 +1,145 @@
+#!/bin/bash
+# (c) 2013 Intel Corp.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+# This script enables toaster event logging and
+# starts bitbake resident server
+# use as: source toaster [start|stop]
+
+# Helper function to kill a background toaster development server
+
+function webserverKillAll()
+{
+ local pidfile
+ for pidfile in ${BUILDDIR}/.toastermain.pid; do
+ if [ -f ${pidfile} ]; then
+ while kill -0 $(< ${pidfile}) 2>/dev/null; do
+ kill -SIGTERM -$(< ${pidfile}) 2>/dev/null
+ sleep 1;
+ done;
+ rm ${pidfile}
+ fi
+ done
+}
+
+
+function webserverStartAll()
+{
+ retval=0
+ python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1
+ if [ $retval -eq 1 ]; then
+ echo "Failed db sync, stopping system start" 1>&2
+ else
+ python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
+ fi
+ return $retval
+}
+
+
+# We make sure we're running in the current shell and in a good environment
+
+if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then
+ echo "Error: This script needs to be sourced. Please run as 'source toaster [start|stop]'" 1>&2;
+ exit 1
+fi
+
+if [ -z "$BUILDDIR" ] || [ -z `which bitbake` ]; then
+ echo "Error: Build environment is not setup or bitbake is not in path." 1>&2;
+ return 2
+fi
+
+BBBASEDIR=`dirname ${BASH_SOURCE}`/..
+
+
+# Verify prerequisites
+
+if ! echo "import django; print (1,4,5) == django.VERSION[0:3]" | python 2>/dev/null | grep True >/dev/null; then
+ echo -e "This program needs Django 1.4.5. Please install with\n\nsudo pip install django==1.4.5"
+ return 2
+fi
+
+
+
+# Determine the action. If specified by arguments, fine, if not, toggle it
+if [ "x$1" == "xstart" ] || [ "x$1" == "xstop" ]; then
+ CMD="$1"
+else
+ if [ -z "$BBSERVER" ]; then
+ CMD="start"
+ else
+ CMD="stop"
+ fi;
+fi
+
+NOTOASTERUI=0
+if [ "x$2" == "xnoui" ]; then
+ NOTOASTERUI=1
+fi
+
+echo "The system will $CMD."
+
+# Make sure it's safe to run by checking bitbake lock
+
+lock=1
+if [ -e $BUILDDIR/bitbake.lock ]; then
+ (flock -n 200 ) 200<$BUILDDIR/bitbake.lock || lock=0
+fi
+
+if [ ${CMD} == "start" ] && ( [ $lock -eq 0 ] || [ -e $BUILDDIR/.toastermain.pid ] ); then
+ echo "Error: bitbake lock state error. System is already on." 2>&1
+ return 3
+elif [ ${CMD} == "stop" ] && ( [ $lock -eq 1 ] || ! [ -e $BUILDDIR/.toastermain.pid ] ) ; then
+ echo "Error: bitbake lock state error. Trying to stop a stopped system ?
+If you think the system is hanged up, you can try to manually stop system with the commands
+
+# BBSERVER=localhost:8200 bitbake -m
+
+and
+
+# webserverKillAll
+" 2>&1
+ return 3
+fi
+
+
+# Execute the commands
+
+case $CMD in
+ start )
+ webserverStartAll || return 4
+ unset BBSERVER
+ bitbake --server-only -t xmlrpc -B localhost:8200
+ export BBSERVER=localhost:8200
+ if [ $NOTOASTERUI == 0 ]; then # we start the TOASTERUI only if not inhibited
+ bitbake --observe-only -u toasterui >${BUILDDIR}/toaster_ui.log 2>&1 & echo $! >${BUILDDIR}/.toasterui.pid
+ fi
+ ;;
+ stop )
+ if [ -f ${BUILDDIR}/.toasterui.pid ]; then
+ kill $(< ${BUILDDIR}/.toasterui.pid )
+ rm ${BUILDDIR}/.toasterui.pid
+ fi
+ bitbake -m
+ unset BBSERVER
+ webserverKillAll
+ # force stop any misbehaving bitbake server
+ lsof bitbake.lock | awk '{print $2}' | grep "[0-9]\+" | xargs -n1 -r kill
+ ;;
+esac
+
+echo "Successful ${CMD}."
+