feat(func): Use centralized log func
Create single logging function that can be called and then forwards the request to the appropriate logging backend function for completion.
This commit is contained in:
@@ -35,18 +35,18 @@ badParam() {
|
||||
if [ "$1" = "null" ]; then
|
||||
printf "\n%sERROR: '%s' cannot have a NULL (empty) value.\n" "$err" "$2"
|
||||
printf "%sPlease use '--help' for assistance.%s\n\n" "$cyan" "$norm"
|
||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \
|
||||
([ "$logToConsole" -eq 0 ]) && writeLog \
|
||||
"${2} cannot have a NULL (empty) value" "critical" "fail" "preexec" 1
|
||||
exit 1
|
||||
elif [ "$1" = "dne" ]; then
|
||||
printf "\n%sERROR: '%s %s'\n" "$err" "$2" "$3"
|
||||
printf "file or directory does not exist or is empty.%s\n\n" "$norm"
|
||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \
|
||||
([ "$logToConsole" -eq 0 ]) && writeLog \
|
||||
"${3}: file or directory does not exist or is empty" "critical" "fail" "preexec" 1
|
||||
exit 1
|
||||
elif [ "$1" = "errMsg" ]; then
|
||||
printf "\n%sERROR: %s%s\n\n" "$err" "$2" "$norm"
|
||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \
|
||||
([ "$logToConsole" -eq 0 ]) && writeLog \
|
||||
"${2%%\Exit*}" "fatal" "fail" "preexec" 1
|
||||
exit 1
|
||||
fi
|
||||
@@ -85,7 +85,7 @@ listCFErrors() {
|
||||
messages="${messages#*_}"
|
||||
|
||||
# output to log
|
||||
writePlainTextLog "${message}" "err" "fail" "$2:CF-ERR" "$code"
|
||||
writeLog "${message}" "err" "fail" "$2:CF-ERR" "$code"
|
||||
done
|
||||
}
|
||||
|
||||
@@ -130,6 +130,17 @@ writePlainTextLog() {
|
||||
>>"$logFile"
|
||||
}
|
||||
|
||||
writeLog() {
|
||||
([ "$logToNone" ]) && return
|
||||
|
||||
PT_LOG_LEVEL="$(standardizeLogLevels "$2")"
|
||||
([ "$logDebug" -eq 0 ] && [ "$PT_LOG_LEVEL" = "DEBUG" ]) && return
|
||||
|
||||
([ "$logToJournal" ]) && return # TODO: replace this with function when implemented
|
||||
([ "$useJsonLogFmt" -eq 1 ]) && return # TODO: replace this with function when implemented
|
||||
([ "$useSyslogLogFmt" -eq 1 ]) && writePlainTextLog "$@"
|
||||
}
|
||||
|
||||
scriptExamples() {
|
||||
newline
|
||||
printf "Update Cloudflare DNS host A/AAAA records with current IP address.\n"
|
||||
@@ -247,6 +258,7 @@ scriptName="$(basename "$0")"
|
||||
logFile="$scriptPath/${scriptName%.*}.log"
|
||||
logToJournal=0
|
||||
logToConsole=0
|
||||
logToNone=0
|
||||
logDebug=0
|
||||
useJsonLogFmt=1
|
||||
useSyslogLogFmt=0
|
||||
@@ -296,6 +308,7 @@ while [ $# -gt 0 ]; do
|
||||
--log-none)
|
||||
# do not log anything
|
||||
logFile="/dev/null"
|
||||
logToNone=1
|
||||
;;
|
||||
--log-debug)
|
||||
# log debugging messages
|
||||
@@ -355,7 +368,7 @@ while [ $# -gt 0 ]; do
|
||||
*)
|
||||
printf "\n%sUnknown option: %s\n" "$err" "$1"
|
||||
printf "%sUse '--help' for valid options.%s\n\n" "$cyan" "$norm"
|
||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \
|
||||
([ "$logToConsole" -eq 0 ]) && writeLog \
|
||||
"Unknown script parameter: '${1}'" "critical" "fail" "preexec" 1
|
||||
exit 1
|
||||
;;
|
||||
@@ -366,12 +379,12 @@ done
|
||||
### pre-flight checks
|
||||
if ! command -v curl >/dev/null; then
|
||||
printf "\n%sThis script requires that 'curl' is installed and accessible. Exiting.%s\n\n" "$err" "$norm"
|
||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog "'curl' must be installed and accessible" "fatal" "fail" "preexec" 2
|
||||
([ "$logToConsole" -eq 0 ]) && writeLog "'curl' must be installed and accessible" "fatal" "fail" "preexec" 2
|
||||
exit 2
|
||||
fi
|
||||
if ! command -v jq >/dev/null; then
|
||||
printf "\n%sThis script requires that 'jq' is installed and accessible. Exiting.%s\n\n" "$err" "$norm"
|
||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog "'jq' must be installed and accessible" "fatal" "fail" "preexec" 2
|
||||
([ "$logToConsole" -eq 0 ]) && writeLog "'jq' must be installed and accessible" "fatal" "fail" "preexec" 2
|
||||
exit 2
|
||||
fi
|
||||
if [ -z "$dnsRecords" ]; then
|
||||
@@ -387,14 +400,14 @@ if [ "$logToJournal" -eq 1 ] && ! command -v logger >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
### initial log entries
|
||||
writePlainTextLog "starting '${scriptName}'" "info" "ok" "script"
|
||||
writePlainTextLog "script path: ${scriptPath}/${scriptName}" "debug" "ok" "startup"
|
||||
writePlainTextLog "credentials file: ${accountFile}" "debug" "ok" "startup"
|
||||
writeLog "starting '${scriptName}'" "info" "ok" "script"
|
||||
writeLog "script path: ${scriptPath}/${scriptName}" "debug" "ok" "startup"
|
||||
writeLog "credentials file: ${accountFile}" "debug" "ok" "startup"
|
||||
|
||||
if [ "$ip4" -eq 1 ]; then
|
||||
writePlainTextLog "mode: IPv4" "debug" "ok" "startup"
|
||||
writeLog "mode: IPv4" "debug" "ok" "startup"
|
||||
elif [ "$ip6" -eq 1 ]; then
|
||||
writePlainTextLog "mode: IPv6" "debug" "ok" "startup"
|
||||
writeLog "mode: IPv6" "debug" "ok" "startup"
|
||||
fi
|
||||
|
||||
# detect and report IP address
|
||||
@@ -402,21 +415,21 @@ if [ -z "$ipAddress" ]; then
|
||||
# detect public ip address
|
||||
if [ "$ip4" -eq 1 ]; then
|
||||
if ! ipAddress="$(curl -s $ip4DetectionSvc)"; then
|
||||
writePlainTextLog \
|
||||
writeLog \
|
||||
"Unable to auto-detect this machine's public IP address; try again later or supply the IP address to be used" "err" "fail" "detectip" 10
|
||||
exit 10
|
||||
fi
|
||||
fi
|
||||
if [ "$ip6" -eq 1 ]; then
|
||||
if ! ipAddress="$(curl -s $ip6DetectionSvc)"; then
|
||||
writePlainTextLog \
|
||||
writeLog \
|
||||
"Unable to auto-detect this machine's public IP address; try again later or supply the IP address to be used" "err" "fail" "detectip" 10
|
||||
exit 10
|
||||
fi
|
||||
fi
|
||||
writePlainTextLog "DDNS IP address (detected): $ipAddress" "info" "ok" "startup"
|
||||
writeLog "DDNS IP address (detected): $ipAddress" "info" "ok" "startup"
|
||||
else
|
||||
writePlainTextLog "DDNS IP address (supplied): $ipAddress" "info" "ok" "startup"
|
||||
writeLog "DDNS IP address (supplied): $ipAddress" "info" "ok" "startup"
|
||||
fi
|
||||
|
||||
# iterate DNS records to update
|
||||
@@ -428,7 +441,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
||||
if [ -z "$record" ]; then
|
||||
continue
|
||||
fi
|
||||
writePlainTextLog "DNS host record '${record}' queued for update" "info" "ok" "startup"
|
||||
writeLog "DNS host record '${record}' queued for update" "info" "ok" "startup"
|
||||
done
|
||||
|
||||
### read Cloudflare credentials
|
||||
@@ -445,14 +458,14 @@ case "$accountFile" in
|
||||
;;
|
||||
esac
|
||||
if [ -z "$cfKey" ]; then
|
||||
writePlainTextLog "Cloudflare authorized API key (cfKey) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 21
|
||||
writeLog "Cloudflare authorized API key (cfKey) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 21
|
||||
exit 21
|
||||
fi
|
||||
if [ -z "$cfZoneId" ]; then
|
||||
writePlainTextLog "Cloudflare zone id (cfZoneId) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 22
|
||||
writeLog "Cloudflare zone id (cfZoneId) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 22
|
||||
exit 22
|
||||
fi
|
||||
writePlainTextLog "Cloudflare credentials file read successfully" "debug" "ok" "creds"
|
||||
writeLog "Cloudflare credentials file read successfully" "debug" "ok" "creds"
|
||||
|
||||
### connect to Cloudflare and do what needs to be done!
|
||||
dnsRecordsToUpdate="$dnsRecords$dnsSeparator"
|
||||
@@ -477,7 +490,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
||||
-H "Authorization: Bearer ${cfKey}" \
|
||||
-H "Content-Type: application/json"
|
||||
)"; then
|
||||
writePlainTextLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "cflogin" 3
|
||||
writeLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "cflogin" 3
|
||||
exit 3
|
||||
fi
|
||||
|
||||
@@ -486,7 +499,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
||||
cfSuccess="$(printf "%s" "$cfLookup" | jq -r '.success')"
|
||||
if [ "$cfSuccess" = "false" ]; then
|
||||
listCFErrors "$cfLookup" "cflogin"
|
||||
writePlainTextLog "Cloudflare API error; review any previously logged 'CF-ERR:' lines for details." "err" "fail" "cflogin" 25
|
||||
writeLog "Cloudflare API error; review any previously logged 'CF-ERR:' lines for details." "err" "fail" "cflogin" 25
|
||||
exit 25
|
||||
fi
|
||||
|
||||
@@ -494,18 +507,18 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
||||
|
||||
# skip to the next host if an existing host record cannot be found (this script *updates* only, does not create!)
|
||||
if [ "$resultCount" = "0" ]; then
|
||||
writePlainTextLog "Cannot find an existing record matching '${record}' to update" "warn" "warn" "ddns"
|
||||
writeLog "Cannot find an existing record matching '${record}' to update" "warn" "warn" "ddns"
|
||||
invalidDomainCount=$((invalidDomainCount + 1))
|
||||
continue
|
||||
fi
|
||||
|
||||
objectId=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .id')
|
||||
currentIpAddr=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .content')
|
||||
writePlainTextLog "The current IP address for '${record}' is ${currentIpAddr}" "debug" "ok" "ddns"
|
||||
writeLog "The current IP address for '${record}' is ${currentIpAddr}" "debug" "ok" "ddns"
|
||||
|
||||
# skip to next hostname if record already up to date
|
||||
if [ "$currentIpAddr" = "$ipAddress" ]; then
|
||||
writePlainTextLog "The IP address for '${record}' is already up to date" "info" "ok" "ddns"
|
||||
writeLog "The IP address for '${record}' is already up to date" "info" "ok" "ddns"
|
||||
continue
|
||||
fi
|
||||
|
||||
@@ -519,17 +532,17 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
||||
-H "Content-Type: application/json" \
|
||||
--data "${updateJSON}"
|
||||
)"; then
|
||||
writePlainTextLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "ddns" 3
|
||||
writeLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "ddns" 3
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# note update success or failure
|
||||
cfSuccess="$(printf "%s" "$cfResult" | jq '.success')"
|
||||
if [ "$cfSuccess" = "true" ]; then
|
||||
writePlainTextLog "The IP address for '${record}' successfully updated" "info" "ok" "ddns"
|
||||
writeLog "The IP address for '${record}' successfully updated" "info" "ok" "ddns"
|
||||
else
|
||||
listCFErrors "$cfResult" "ddns"
|
||||
writePlainTextLog "Unable to update the IP address for '${record}'" "err" "fail" "ddns"
|
||||
writeLog "Unable to update the IP address for '${record}'" "err" "fail" "ddns"
|
||||
# do not exit with error, API error here is probably an update issue specific to this host
|
||||
# increment counter and note it after all processing finished
|
||||
failedHostCount=$((failedHostCount + 1))
|
||||
@@ -538,14 +551,14 @@ done
|
||||
|
||||
# exit
|
||||
if [ "$invalidDomainCount" -ne 0 ]; then
|
||||
writePlainTextLog "${invalidDomainCount} invalid host(s) were supplied for updating" "warn" "warn" "ddns"
|
||||
writeLog "${invalidDomainCount} invalid host(s) were supplied for updating" "warn" "warn" "ddns"
|
||||
fi
|
||||
if [ "$failedHostCount" -ne 0 ]; then
|
||||
writePlainTextLog \
|
||||
writeLog \
|
||||
"${failedHostCount} host update(s) failed; review 'CF-ERR:' lines in this log to help determine what may have gone wrong" "err" "fail" "ddns" 26
|
||||
exit 26
|
||||
else
|
||||
writePlainTextLog "${scriptName} completed successfully" "info" "ok" "script"
|
||||
writeLog "${scriptName} completed successfully" "info" "ok" "script"
|
||||
fi
|
||||
|
||||
### exit return codes
|
||||
|
||||
Reference in New Issue
Block a user