#!/bin/sh

START_TIME=$(date +%s)
HIGH_LOAD=0
TIMEOUT=600 # 8分钟

TAG="load_monitor"

logger -t "$TAG" "start monitoring load"
sleep 5
echo 0 >/sys/class/leds/errled/brightness

while true; do
  LOAD=$(awk '{print $1}' /proc/loadavg)
  NOW=$(date +%s)
  ELAPSED=$((NOW - START_TIME))

  logger -t "$TAG" "load=$LOAD elapsed=${ELAPSED}s high_load=$HIGH_LOAD"

  # load > 5
  if awk "BEGIN {exit !($LOAD > 3)}"; then
    if [ "$HIGH_LOAD" -eq 0 ]; then
      logger -t "$TAG" "load higher than 5, waiting for recovery"
    fi
    HIGH_LOAD=1
  fi

  # 曾经超过5，并且恢复到2以下
  if [ "$HIGH_LOAD" -eq 1 ] && awk "BEGIN {exit !($LOAD < 1)}"; then
    logger -t "$TAG" "haha: load recovered below 2"
    # generate gateway install id
    if [ ! -f /root/gateway_install_id ]; then
      hexdump -n 6 -e '6/1 "%02x"' /dev/urandom >/root/gateway_install_id
    fi
    /etc/init.d/ha_register start
    /etc/init.d/ha_web_ui start
    /etc/init.d/zigbee start
    /etc/init.d/zwave start
    /etc/init.d/frpc start
    /root/check_network.sh &
    /root/reset_default.sh &
    exit 0
  fi

  # 超时兜底
  if [ "$ELAPSED" -ge "$TIMEOUT" ]; then
    logger -t "$TAG" "haha: timeout after 8 minutes"
    # generate gateway install id
    if [ ! -f /root/gateway_install_id ]; then
      hexdump -n 6 -e '6/1 "%02x"' /dev/urandom >/root/gateway_install_id
    fi
    /etc/init.d/ha_register start
    /etc/init.d/ha_web_ui start
    /etc/init.d/zigbee start
    /etc/init.d/zwave start
    /etc/init.d/frpc start
    /root/check_network.sh &
    /root/reset_default.sh &
    exit 0
  fi

  sleep 1
done
