Browse code

Merge "Add a service_check function"

Jenkins authored on 2012/12/13 03:20:01
Showing 2 changed files
... ...
@@ -715,6 +715,8 @@ function restart_service() {
715 715
 function screen_it {
716 716
     NL=`echo -ne '\015'`
717 717
     SCREEN_NAME=${SCREEN_NAME:-stack}
718
+    SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
719
+
718 720
     if is_service_enabled $1; then
719 721
         # Append the service to the screen rc file
720 722
         screen_rc "$1" "$2"
... ...
@@ -730,7 +732,7 @@ function screen_it {
730 730
             screen -S $SCREEN_NAME -p $1 -X log on
731 731
             ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log
732 732
         fi
733
-        screen -S $SCREEN_NAME -p $1 -X stuff "$2$NL"
733
+        screen -S $SCREEN_NAME -p $1 -X stuff "$2 || touch \"$SERVICE_DIR/$SCREEN_NAME/$1.failure\"$NL"
734 734
     fi
735 735
 }
736 736
 
... ...
@@ -755,6 +757,47 @@ function screen_rc {
755 755
     fi
756 756
 }
757 757
 
758
+# Helper to remove the *.failure files under $SERVICE_DIR/$SCREEN_NAME
759
+# This is used for service_check when all the screen_it are called finished
760
+# init_service_check
761
+function init_service_check() {
762
+    SCREEN_NAME=${SCREEN_NAME:-stack}
763
+    SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
764
+
765
+    if [[ ! -d "$SERVICE_DIR/$SCREEN_NAME" ]]; then
766
+        mkdir -p "$SERVICE_DIR/$SCREEN_NAME"
767
+    fi
768
+
769
+    rm -f "$SERVICE_DIR/$SCREEN_NAME"/*.failure
770
+}
771
+
772
+# Helper to get the status of each running service
773
+# service_check
774
+function service_check() {
775
+    local service
776
+    local failures
777
+    SCREEN_NAME=${SCREEN_NAME:-stack}
778
+    SERVICE_DIR=${SERVICE_DIR:-${DEST}/status}
779
+
780
+
781
+    if [[ ! -d "$SERVICE_DIR/$SCREEN_NAME" ]]; then
782
+        echo "No service status directory found"
783
+        return
784
+    fi
785
+
786
+    # Check if there is any falure flag file under $SERVICE_DIR/$SCREEN_NAME
787
+    failures=`ls "$SERVICE_DIR/$SCREEN_NAME"/*.failure 2>/dev/null`
788
+
789
+    for service in $failures; do
790
+        service=`basename $service`
791
+        service=${service::-8}
792
+        echo "Error: Service $service is not running"
793
+    done
794
+
795
+    if [ -n "$failures" ]; then
796
+        echo "More details about the above errors can be found with screen, with ./rejoin-stack.sh"
797
+    fi
798
+}
758 799
 
759 800
 # ``pip install`` the dependencies of the package before ``setup.py develop``
760 801
 # so pip and not distutils processes the dependency chain
... ...
@@ -923,6 +923,8 @@ sleep 1
923 923
 # Set a reasonable status bar
924 924
 screen -r $SCREEN_NAME -X hardstatus alwayslastline "$SCREEN_HARDSTATUS"
925 925
 
926
+# Initialize the directory for service status check
927
+init_service_check
926 928
 
927 929
 # Keystone
928 930
 # --------
... ...
@@ -1700,6 +1702,8 @@ if [[ -x $TOP_DIR/local.sh ]]; then
1700 1700
     $TOP_DIR/local.sh
1701 1701
 fi
1702 1702
 
1703
+# Check the status of running services
1704
+service_check
1703 1705
 
1704 1706
 # Fin
1705 1707
 # ===