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
|
if [ "$1" = "null" ]; then
|
||||||
printf "\n%sERROR: '%s' cannot have a NULL (empty) value.\n" "$err" "$2"
|
printf "\n%sERROR: '%s' cannot have a NULL (empty) value.\n" "$err" "$2"
|
||||||
printf "%sPlease use '--help' for assistance.%s\n\n" "$cyan" "$norm"
|
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
|
"${2} cannot have a NULL (empty) value" "critical" "fail" "preexec" 1
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$1" = "dne" ]; then
|
elif [ "$1" = "dne" ]; then
|
||||||
printf "\n%sERROR: '%s %s'\n" "$err" "$2" "$3"
|
printf "\n%sERROR: '%s %s'\n" "$err" "$2" "$3"
|
||||||
printf "file or directory does not exist or is empty.%s\n\n" "$norm"
|
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
|
"${3}: file or directory does not exist or is empty" "critical" "fail" "preexec" 1
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$1" = "errMsg" ]; then
|
elif [ "$1" = "errMsg" ]; then
|
||||||
printf "\n%sERROR: %s%s\n\n" "$err" "$2" "$norm"
|
printf "\n%sERROR: %s%s\n\n" "$err" "$2" "$norm"
|
||||||
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \
|
([ "$logToConsole" -eq 0 ]) && writeLog \
|
||||||
"${2%%\Exit*}" "fatal" "fail" "preexec" 1
|
"${2%%\Exit*}" "fatal" "fail" "preexec" 1
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -85,7 +85,7 @@ listCFErrors() {
|
|||||||
messages="${messages#*_}"
|
messages="${messages#*_}"
|
||||||
|
|
||||||
# output to log
|
# output to log
|
||||||
writePlainTextLog "${message}" "err" "fail" "$2:CF-ERR" "$code"
|
writeLog "${message}" "err" "fail" "$2:CF-ERR" "$code"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,6 +130,17 @@ writePlainTextLog() {
|
|||||||
>>"$logFile"
|
>>"$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() {
|
scriptExamples() {
|
||||||
newline
|
newline
|
||||||
printf "Update Cloudflare DNS host A/AAAA records with current IP address.\n"
|
printf "Update Cloudflare DNS host A/AAAA records with current IP address.\n"
|
||||||
@@ -247,6 +258,7 @@ scriptName="$(basename "$0")"
|
|||||||
logFile="$scriptPath/${scriptName%.*}.log"
|
logFile="$scriptPath/${scriptName%.*}.log"
|
||||||
logToJournal=0
|
logToJournal=0
|
||||||
logToConsole=0
|
logToConsole=0
|
||||||
|
logToNone=0
|
||||||
logDebug=0
|
logDebug=0
|
||||||
useJsonLogFmt=1
|
useJsonLogFmt=1
|
||||||
useSyslogLogFmt=0
|
useSyslogLogFmt=0
|
||||||
@@ -296,6 +308,7 @@ while [ $# -gt 0 ]; do
|
|||||||
--log-none)
|
--log-none)
|
||||||
# do not log anything
|
# do not log anything
|
||||||
logFile="/dev/null"
|
logFile="/dev/null"
|
||||||
|
logToNone=1
|
||||||
;;
|
;;
|
||||||
--log-debug)
|
--log-debug)
|
||||||
# log debugging messages
|
# log debugging messages
|
||||||
@@ -355,7 +368,7 @@ while [ $# -gt 0 ]; do
|
|||||||
*)
|
*)
|
||||||
printf "\n%sUnknown option: %s\n" "$err" "$1"
|
printf "\n%sUnknown option: %s\n" "$err" "$1"
|
||||||
printf "%sUse '--help' for valid options.%s\n\n" "$cyan" "$norm"
|
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
|
"Unknown script parameter: '${1}'" "critical" "fail" "preexec" 1
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
@@ -366,12 +379,12 @@ done
|
|||||||
### pre-flight checks
|
### pre-flight checks
|
||||||
if ! command -v curl >/dev/null; then
|
if ! command -v curl >/dev/null; then
|
||||||
printf "\n%sThis script requires that 'curl' is installed and accessible. Exiting.%s\n\n" "$err" "$norm"
|
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
|
exit 2
|
||||||
fi
|
fi
|
||||||
if ! command -v jq >/dev/null; then
|
if ! command -v jq >/dev/null; then
|
||||||
printf "\n%sThis script requires that 'jq' is installed and accessible. Exiting.%s\n\n" "$err" "$norm"
|
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
|
exit 2
|
||||||
fi
|
fi
|
||||||
if [ -z "$dnsRecords" ]; then
|
if [ -z "$dnsRecords" ]; then
|
||||||
@@ -387,14 +400,14 @@ if [ "$logToJournal" -eq 1 ] && ! command -v logger >/dev/null 2>&1; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
### initial log entries
|
### initial log entries
|
||||||
writePlainTextLog "starting '${scriptName}'" "info" "ok" "script"
|
writeLog "starting '${scriptName}'" "info" "ok" "script"
|
||||||
writePlainTextLog "script path: ${scriptPath}/${scriptName}" "debug" "ok" "startup"
|
writeLog "script path: ${scriptPath}/${scriptName}" "debug" "ok" "startup"
|
||||||
writePlainTextLog "credentials file: ${accountFile}" "debug" "ok" "startup"
|
writeLog "credentials file: ${accountFile}" "debug" "ok" "startup"
|
||||||
|
|
||||||
if [ "$ip4" -eq 1 ]; then
|
if [ "$ip4" -eq 1 ]; then
|
||||||
writePlainTextLog "mode: IPv4" "debug" "ok" "startup"
|
writeLog "mode: IPv4" "debug" "ok" "startup"
|
||||||
elif [ "$ip6" -eq 1 ]; then
|
elif [ "$ip6" -eq 1 ]; then
|
||||||
writePlainTextLog "mode: IPv6" "debug" "ok" "startup"
|
writeLog "mode: IPv6" "debug" "ok" "startup"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# detect and report IP address
|
# detect and report IP address
|
||||||
@@ -402,21 +415,21 @@ if [ -z "$ipAddress" ]; then
|
|||||||
# detect public ip address
|
# detect public ip address
|
||||||
if [ "$ip4" -eq 1 ]; then
|
if [ "$ip4" -eq 1 ]; then
|
||||||
if ! ipAddress="$(curl -s $ip4DetectionSvc)"; 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
|
"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
|
exit 10
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ "$ip6" -eq 1 ]; then
|
if [ "$ip6" -eq 1 ]; then
|
||||||
if ! ipAddress="$(curl -s $ip6DetectionSvc)"; 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
|
"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
|
exit 10
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
writePlainTextLog "DDNS IP address (detected): $ipAddress" "info" "ok" "startup"
|
writeLog "DDNS IP address (detected): $ipAddress" "info" "ok" "startup"
|
||||||
else
|
else
|
||||||
writePlainTextLog "DDNS IP address (supplied): $ipAddress" "info" "ok" "startup"
|
writeLog "DDNS IP address (supplied): $ipAddress" "info" "ok" "startup"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# iterate DNS records to update
|
# iterate DNS records to update
|
||||||
@@ -428,7 +441,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
|||||||
if [ -z "$record" ]; then
|
if [ -z "$record" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
writePlainTextLog "DNS host record '${record}' queued for update" "info" "ok" "startup"
|
writeLog "DNS host record '${record}' queued for update" "info" "ok" "startup"
|
||||||
done
|
done
|
||||||
|
|
||||||
### read Cloudflare credentials
|
### read Cloudflare credentials
|
||||||
@@ -445,14 +458,14 @@ case "$accountFile" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
if [ -z "$cfKey" ]; then
|
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
|
exit 21
|
||||||
fi
|
fi
|
||||||
if [ -z "$cfZoneId" ]; then
|
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
|
exit 22
|
||||||
fi
|
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!
|
### connect to Cloudflare and do what needs to be done!
|
||||||
dnsRecordsToUpdate="$dnsRecords$dnsSeparator"
|
dnsRecordsToUpdate="$dnsRecords$dnsSeparator"
|
||||||
@@ -477,7 +490,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
|||||||
-H "Authorization: Bearer ${cfKey}" \
|
-H "Authorization: Bearer ${cfKey}" \
|
||||||
-H "Content-Type: application/json"
|
-H "Content-Type: application/json"
|
||||||
)"; then
|
)"; 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
|
exit 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -486,7 +499,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
|||||||
cfSuccess="$(printf "%s" "$cfLookup" | jq -r '.success')"
|
cfSuccess="$(printf "%s" "$cfLookup" | jq -r '.success')"
|
||||||
if [ "$cfSuccess" = "false" ]; then
|
if [ "$cfSuccess" = "false" ]; then
|
||||||
listCFErrors "$cfLookup" "cflogin"
|
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
|
exit 25
|
||||||
fi
|
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!)
|
# skip to the next host if an existing host record cannot be found (this script *updates* only, does not create!)
|
||||||
if [ "$resultCount" = "0" ]; then
|
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))
|
invalidDomainCount=$((invalidDomainCount + 1))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
objectId=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .id')
|
objectId=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .id')
|
||||||
currentIpAddr=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .content')
|
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
|
# skip to next hostname if record already up to date
|
||||||
if [ "$currentIpAddr" = "$ipAddress" ]; then
|
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
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -519,17 +532,17 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
|
|||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
--data "${updateJSON}"
|
--data "${updateJSON}"
|
||||||
)"; then
|
)"; 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
|
exit 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# note update success or failure
|
# note update success or failure
|
||||||
cfSuccess="$(printf "%s" "$cfResult" | jq '.success')"
|
cfSuccess="$(printf "%s" "$cfResult" | jq '.success')"
|
||||||
if [ "$cfSuccess" = "true" ]; then
|
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
|
else
|
||||||
listCFErrors "$cfResult" "ddns"
|
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
|
# 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
|
# increment counter and note it after all processing finished
|
||||||
failedHostCount=$((failedHostCount + 1))
|
failedHostCount=$((failedHostCount + 1))
|
||||||
@@ -538,14 +551,14 @@ done
|
|||||||
|
|
||||||
# exit
|
# exit
|
||||||
if [ "$invalidDomainCount" -ne 0 ]; then
|
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
|
fi
|
||||||
if [ "$failedHostCount" -ne 0 ]; then
|
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
|
"${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
|
exit 26
|
||||||
else
|
else
|
||||||
writePlainTextLog "${scriptName} completed successfully" "info" "ok" "script"
|
writeLog "${scriptName} completed successfully" "info" "ok" "script"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### exit return codes
|
### exit return codes
|
||||||
|
|||||||
Reference in New Issue
Block a user