49 lines
1.4 KiB
Bash
49 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="${AW_1C_ROOT:-/opt/activitywatch/clickhouse-1c}"
|
|
ENV_FILE="${ROOT}/.env"
|
|
CH_CONTAINER="${AW_1C_CLICKHOUSE_CONTAINER:-aw-rus-1c-clickhouse}"
|
|
MAX_AGE_HOURS="${AW_1C_MAX_AGE_HOURS:-8}"
|
|
|
|
if [[ ! -f "${ENV_FILE}" ]]; then
|
|
echo "missing env file: ${ENV_FILE}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker ps --format '{{.Names}}' | grep -qx "${CH_CONTAINER}"; then
|
|
echo "clickhouse container not running: ${CH_CONTAINER}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# shellcheck disable=SC1090
|
|
. "${ENV_FILE}"
|
|
|
|
query_max_age() {
|
|
local table="$1"
|
|
docker exec "${CH_CONTAINER}" clickhouse-client \
|
|
--user "${CLICKHOUSE_USER}" \
|
|
--password "${CLICKHOUSE_PASSWORD}" \
|
|
--database "${CLICKHOUSE_DB}" \
|
|
-q "SELECT if(count()=0, -1, dateDiff('hour', max(ts), now())) FROM ${table}"
|
|
}
|
|
|
|
documents_age="$(query_max_age documents)"
|
|
reglog_age="$(query_max_age reglog_events)"
|
|
audit_age="$(query_max_age audit_events)"
|
|
host_age="$(query_max_age host_events)"
|
|
|
|
printf 'freshness documents=%sh reglog=%sh audit=%sh host=%sh threshold=%sh\n' \
|
|
"${documents_age}" "${reglog_age}" "${audit_age}" "${host_age}" "${MAX_AGE_HOURS}"
|
|
|
|
for age in "${documents_age}" "${reglog_age}" "${audit_age}" "${host_age}"; do
|
|
if [[ "${age}" == "-1" ]]; then
|
|
echo "one or more datasets are empty" >&2
|
|
exit 1
|
|
fi
|
|
if (( age > MAX_AGE_HOURS )); then
|
|
echo "freshness threshold exceeded" >&2
|
|
exit 1
|
|
fi
|
|
done
|