failmap/admin

View on GitHub
tools/faalwerker.sh

Summary

Maintainability
Test Coverage
#!/usr/bin/env bash

set -e -o pipefail

# stop de resultaten van deze scriptie in een logbestand
logfile=faalwerker-$$.log
exec 3>&1
exec > $logfile 2>&1

set -x
tail -f $logfile 1>&3 &

faalgastnaam="$(hostname -f)"
faalcontainernaamvoorvoegsel=websecmap-worker
faalcontainerfaalimagenaam=websecmap/websecmap:latest
faalredis=redis://faalkaart.nl:1337/0
faalp12bestand="$(realpath client.p12)"
faallogfaallevel=info
faalaantalprocessen=10
faalaantalprocessenqualys=1
faalgeheim=geheim

kloptalles (){
  if ! test -f "$faalp12bestand";then
    echo "Falen: Je hebt waarschijnlijk een bestand dat eindigt op .p12 gekregen, hernoem het naar client.p12 en zorg dat het in deze folder staat."
    exit 1
  fi

  if ! command -v docker >/dev/null;then
    echo "Falen: Installeer docker, sudo apt install docker-engine of kijk op https://docs.docker.com/install/."
    exit 1
  fi

  if ! docker ps >/dev/null;then
    echo "Falen: Zorg dat docker daemon gestart is."
    exit 1
  fi
}

wegmetdieouwezooi (){
  pkill -f "docker logs -f $faalcontainernaamvoorvoegsel" || true
  docker ps -aq --filter name=$faalcontainernaamvoorvoegsel | xargs -L1 docker rm -f || true
}

startmetfalen (){
  faalrol=$1
  faalaantalprocessen=$2

  # (stop en) verwijder huidige faalcontainers (voor de zekerheid)
  docker rm -f "$faalcontainernaamvoorvoegsel-$faalrol" &>/dev/null || true

  # haal nieuwe faalcontainerfaalimage op vanuit de server
  docker pull $faalcontainerfaalimagenaam

  # start nieuwe faalcontainers
  docker run -d --rm -ti -u nobody:nogroup \
    --name "$faalcontainernaamvoorvoegsel-$faalrol" \
    -e WORKER_ROLE="$faalrol" \
    -e BROKER=$faalredis \
    -e PASSPHRASE=$faalgeheim \
    -e HOST_HOSTNAME="$faalgastnaam" \
    -e SENTRY_DSN="$SENTRY_DSN" \
    -v "$faalp12bestand:/client.p12" \
    $faalcontainerfaalimagenaam \
    celery worker --loglevel $faallogfaallevel --pool eventlet --concurrency="$faalaantalprocessen"

  echo "Begonnen met falen"
  docker logs -f "$faalcontainernaamvoorvoegsel-$faalrol" || ret=$?
  if test "0$ret" -eq 143;then
     exit 1
  fi
}

faalafsluiten (){
  docker ps -aq --filter name=$faalcontainernaamvoorvoegsel | xargs docker rm -f || true
  echo "Klaar met falen"
}

kloptalles

wegmetdieouwezooi

while sleep 5;do
  if ping6 faalkaart.nl -c3 &>/dev/null;then
    faalipv6=
  else
    faalipv6=_ipv4_only
  fi

  trap faalafsluiten EXIT
  echo "Poging to falen begonnen"
  startmetfalen "scanner$faalipv6" "$faalaantalprocessen"
done &

while sleep 5;do
  trap faalafsluiten EXIT
  echo "Poging to falen begonnen"
  startmetfalen scanner_qualys "$faalaantalprocessenqualys"
done &

echo "Falen in de achtergrond is gestart." 1>&3