ソースを参照

Mongo Healthcheck

Olga Kutafieva 7 年 前
コミット
b8eadf8797
2 ファイル変更33 行追加0 行削除
  1. 3 0
      Dockerfile
  2. 30 0
      mongo-healthcheck.sh

+ 3 - 0
Dockerfile

@@ -0,0 +1,3 @@
+FROM registry.sdsys.ru/mongo:3.0
+COPY mongo-healthcheck.sh /mongo-healthcheck.sh
+RUN chmod +x /mongo-healthcheck.sh

+ 30 - 0
mongo-healthcheck.sh

@@ -0,0 +1,30 @@
+
+if [[ -n $1 ]]; then
+    myhost=$1
+else
+    myhost=localhost:27017
+fi
+
+EVAL="var i=0; rs.status().members.forEach( function(myDoc) { if (myDoc.name==\"$myhost\") { print(myDoc.stateStr); i++;} })"
+
+state=`echo $EVAL | mongo --host $myhost --quiet |tail -1`
+
+
+if [[ $state == "PRIMARY" ]];then
+    echo "0"
+    exit 0
+fi
+
+if [[ $state == "SECONDARY" ]];then
+    date=`mongo --host $myhost --eval 'rs.status().date;' |tail -1`
+    dates=`date -d "$date" "+%s"`
+    lastHeartbeat=`mongo --host $myhost --quiet --eval 'var i=0; rs.status().members.forEach( function(myDoc) { if (myDoc.stateStr=="PRIMARY") { print(myDoc.lastHeartbeat); i++;} })' |tail -1`
+    datelh=`date -d "$lastHeartbeat" "+%s"`
+    if [[ $(($dates-$datelh)) -le "60" ]]; then
+        echo "0"
+        exit 0
+    fi
+fi
+
+echo "1"
+exit 1