parsedmarc-dockerized/data/Dockerfiles/parsedmarc-init/start.sh

83 lines
3.0 KiB
Bash

#!/bin/bash
# Copyright 2020, Patrik Kernstock.
set -x
echo "## ELASTICSEARCH"
echo "Setting permissions..."
chmod g+rwx -R /usr/share/elasticsearch/data/
chgrp 0 -R /usr/share/elasticsearch/data/
echo "## KIBANA"
exportFile="/etc/parsedmarc/kibana_export.ndjson"
if [ ! -f "${exportFile}" ]; then
# trigger empty file to trigger below update logic.
touch ${exportFile}
fi
echo "Downloading dashboard from GitHub..."
rm /etc/parsedmarc/kibana_export.ndjson.tmp
curl https://raw.githubusercontent.com/domainaware/parsedmarc/master/kibana/export.ndjson \
-o /etc/parsedmarc/kibana_export.ndjson.tmp
if [ ${?} -ne 0 ]; then
echo "Downloading kibana export failed."
else
fileNew=$(wc -c "${exportFile}.tmp" | awk -F' ' '{ print $1 }')
fileOld=$(wc -c "${exportFile}" | awk -F' ' '{ print $1 }')
if [ "$fileNew" == "$fileOld" ]; then
echo "File size is the same. Not proceeding."
else
echo "File size is different... updating..."
while ! curl -s -f -I http://kibana:5601 >/dev/null; do
echo "Kibana not responding... waiting 5 secs..."
sleep 5
done
echo "Kibana responded. Waiting 10s, then proceeding with dashboard update..."
sleep 10
rm ${exportFile}
mv ${exportFile}.tmp ${exportFile}
RES=$(curl -X POST http://kibana:5601/api/saved_objects/_import?overwrite=true \
-H "kbn-xsrf: true" --form file=@${exportFile})
echo "Result: $RES"
if [ ${?} -ne 0 ]; then
echo "[!!!] Import might have failed. Manual check recommended."
else
# if the flag exists, we already set the defaultRoute once. So we don't do that again.
if [ ! -f "/etc/parsedmarc/flag.defaultRouteSet" ]; then
DEF_DASHBOARD_NAME="DMARC Summary"
echo "Setting '${DEF_DASHBOARD_NAME}' dashboard as default route..."
DEF_DASHBOARD_ID=$(cat "${exportFile}" | jq --arg DBNAME "${DEF_DASHBOARD_NAME}" 'select(.attributes.title == $DBNAME) | .id' | tr -d '"')
if [ "$DEF_DASHBOARD_ID" != "" ]; then
echo "Found dashboard ID: ${DEF_DASHBOARD_ID}"
DEFAULT_ROUTE="/app/kibana#/dashboard/${DEF_DASHBOARD_ID}"
echo "DefaultRoute being set to: ${DEFAULT_ROUTE}"
curl -X POST -H "kbn-xsrf: true" -H "Content-Type: application/json" \
"http://kibana:5601/api/kibana/settings/defaultRoute" \
-d "{\"value\": \"${DEFAULT_ROUTE}\"}"
if [ ${?} -ne 0 ]; then
echo "[!!!] Setting defaultRoute seems to gone wrong. Manual check recommended."
else
echo "DefaultRoute set."
echo "Notice: This might require a restart of Kibana to take effect. Not done automatically as part of this script."
echo -e "# This is a flag to remember which defaultRoute we set in the past:\n${DEFAULT_ROUTE}" \
> /etc/parsedmarc/flag.defaultRouteSet
fi
else
echo "[!] Default dashboard with name '${DEF_DASHBOARD_NAME}' could not be found."
fi
fi
fi
echo "Dashboard import done."
fi
fi
sleep 3
# Create empty file to let other containers know that we're ready.
touch /ready
sleep infinity # or while true; do sleep 86400; done
exit 0