added new scripts
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -u
|
||||
|
||||
CONFIG="/etc/check_mk/gitea.conf"
|
||||
|
||||
#
|
||||
# CheckMK states
|
||||
#
|
||||
OK=0
|
||||
WARN=1
|
||||
CRIT=2
|
||||
UNKNOWN=3
|
||||
|
||||
if [[ ! -r "$CONFIG" ]]; then
|
||||
echo "${UNKNOWN} \"Gitea\" - Configuration file ${CONFIG} missing or unreadable"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
source "$CONFIG"
|
||||
|
||||
#
|
||||
# Defaults
|
||||
#
|
||||
GITEA_URL="${GITEA_URL:-http://127.0.0.1:3000}"
|
||||
GITEA_TOKEN="${GITEA_TOKEN:-}"
|
||||
CHECK_UPDATES="${CHECK_UPDATES:-yes}"
|
||||
GITEA_RELEASE_API="${GITEA_RELEASE_API:-https://api.github.com/repos/go-gitea/gitea/releases/latest}"
|
||||
|
||||
#
|
||||
# Requirements
|
||||
#
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
echo "${UNKNOWN} \"Gitea\" - curl is not installed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
echo "${UNKNOWN} \"Gitea\" - jq is not installed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#
|
||||
# curl options
|
||||
#
|
||||
CURL_OPTS=(
|
||||
--silent
|
||||
--show-error
|
||||
--fail
|
||||
--connect-timeout 3
|
||||
--max-time 8
|
||||
)
|
||||
|
||||
#
|
||||
# Gitea authentication
|
||||
#
|
||||
AUTH_ARGS=()
|
||||
|
||||
if [[ -n "$GITEA_TOKEN" ]]; then
|
||||
AUTH_ARGS=(
|
||||
--header "Authorization: token ${GITEA_TOKEN}"
|
||||
)
|
||||
fi
|
||||
|
||||
#
|
||||
# ---------------------------------------------------------------------------
|
||||
# Gitea health / version
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
VERSION_RESPONSE="$(
|
||||
curl \
|
||||
"${CURL_OPTS[@]}" \
|
||||
"${AUTH_ARGS[@]}" \
|
||||
"${GITEA_URL%/}/api/v1/version" \
|
||||
2>/dev/null
|
||||
)"
|
||||
|
||||
CURL_RC=$?
|
||||
|
||||
if [[ $CURL_RC -ne 0 || -z "$VERSION_RESPONSE" ]]; then
|
||||
echo "${CRIT} \"Gitea\" - API unavailable at ${GITEA_URL}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
INSTALLED_VERSION="$(
|
||||
printf '%s' "$VERSION_RESPONSE" |
|
||||
jq -r '.version // empty' 2>/dev/null
|
||||
)"
|
||||
|
||||
if [[ -z "$INSTALLED_VERSION" ]]; then
|
||||
echo "${CRIT} \"Gitea\" - API responded but no version was returned"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "${OK} \"Gitea\" - API reachable, version ${INSTALLED_VERSION}"
|
||||
|
||||
#
|
||||
# ---------------------------------------------------------------------------
|
||||
# Update check
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
if [[ "$CHECK_UPDATES" != "yes" ]]; then
|
||||
echo "${OK} \"Gitea Update\" - Update check disabled, installed ${INSTALLED_VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
RELEASE_RESPONSE="$(
|
||||
curl \
|
||||
"${CURL_OPTS[@]}" \
|
||||
--header "Accept: application/vnd.github+json" \
|
||||
--header "User-Agent: checkmk-gitea-local-check" \
|
||||
"$GITEA_RELEASE_API" \
|
||||
2>/dev/null
|
||||
)"
|
||||
|
||||
CURL_RC=$?
|
||||
|
||||
if [[ $CURL_RC -ne 0 || -z "$RELEASE_RESPONSE" ]]; then
|
||||
echo "${UNKNOWN} \"Gitea Update\" - Installed ${INSTALLED_VERSION}, unable to query upstream release"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
LATEST_VERSION="$(
|
||||
printf '%s' "$RELEASE_RESPONSE" |
|
||||
jq -r '.tag_name // empty' 2>/dev/null |
|
||||
sed 's/^v//'
|
||||
)"
|
||||
|
||||
if [[ -z "$LATEST_VERSION" ]]; then
|
||||
echo "${UNKNOWN} \"Gitea Update\" - Installed ${INSTALLED_VERSION}, upstream returned no release version"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#
|
||||
# Remove common suffixes that may appear in Gitea's version response.
|
||||
#
|
||||
# Examples:
|
||||
# 1.27.2
|
||||
# 1.27.2+gitea
|
||||
# 1.27.2 built with GNU Make
|
||||
#
|
||||
INSTALLED_CLEAN="$(
|
||||
printf '%s' "$INSTALLED_VERSION" |
|
||||
grep -oE '^[0-9]+\.[0-9]+\.[0-9]+' |
|
||||
head -n1
|
||||
)"
|
||||
|
||||
LATEST_CLEAN="$(
|
||||
printf '%s' "$LATEST_VERSION" |
|
||||
grep -oE '^[0-9]+\.[0-9]+\.[0-9]+' |
|
||||
head -n1
|
||||
)"
|
||||
|
||||
if [[ -z "$INSTALLED_CLEAN" || -z "$LATEST_CLEAN" ]]; then
|
||||
echo "${UNKNOWN} \"Gitea Update\" - Unable to compare installed=${INSTALLED_VERSION} latest=${LATEST_VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#
|
||||
# sort -V performs semantic-ish version ordering suitable for Gitea's
|
||||
# major.minor.patch release numbers.
|
||||
#
|
||||
NEWEST="$(
|
||||
printf '%s\n%s\n' "$INSTALLED_CLEAN" "$LATEST_CLEAN" |
|
||||
sort -V |
|
||||
tail -n1
|
||||
)"
|
||||
|
||||
if [[ "$INSTALLED_CLEAN" == "$LATEST_CLEAN" ]]; then
|
||||
|
||||
echo "${OK} \"Gitea Update\" - Current version ${INSTALLED_CLEAN}"
|
||||
|
||||
elif [[ "$NEWEST" == "$LATEST_CLEAN" ]]; then
|
||||
|
||||
echo "${WARN} \"Gitea Update\" - Update available: installed ${INSTALLED_CLEAN}, latest ${LATEST_CLEAN}"
|
||||
|
||||
else
|
||||
|
||||
#
|
||||
# Installed version newer than upstream latest.
|
||||
# This can happen with prerelease/dev builds.
|
||||
#
|
||||
echo "${OK} \"Gitea Update\" - Installed ${INSTALLED_CLEAN} is newer than upstream stable ${LATEST_CLEAN}"
|
||||
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user