fix error catching and handling

This commit is contained in:
Philip Henning 2026-01-05 03:36:56 +01:00
parent 7265261dc3
commit af1631ee5a

View file

@ -44,59 +44,61 @@ onerror Err {
} }
:local GetAnnouncedIP do={ :local GetAnnouncedIP do={
:do { :local Records;
:local AnnouncedIP;
:onerror GetAnnouncedIPErr in={
$LogPrint debug $ScriptName ("GetAnnouncedIP - started"); $LogPrint debug $ScriptName ("GetAnnouncedIP - started");
[/system/script/run "JParseFunctions"; global JSONLoad; global JSONLoads; global JSONUnload]; [/system/script/run "JParseFunctions"; global JSONLoad; global JSONLoads; global JSONUnload];
$LogPrint debug $ScriptName ("GetAnnouncedIP - JParseFunctions loaded"); $LogPrint debug $ScriptName ("GetAnnouncedIP - JParseFunctions loaded");
:local Records; :set Records ([$JSONLoads ([/tool/fetch "$APIUrl/zones/$ZoneName/rrsets/$RecordName/$RecordType" http-method=get http-header-field="Authorization: Bearer $APIToken" output=user as-value]->"data")]->"rrset"->"records");
:local AnnouncedIP; $LogPrint debug $ScriptName ("GetAnnouncedIP - Records received: " . [:len $Records]);
foreach rec in=$Records do={
:set Records ([$JSONLoads ([/tool/fetch "$APIUrl/zones/$ZoneName/rrsets/$RecordName/$RecordType" http-method=get http-header-field="Authorization: Bearer $APIToken" output=user as-value]->"data")]->"rrset"->"records"); $LogPrint debug $ScriptName ("GetAnnouncedIP - Record: Name: \"" . $RecordName . "\", Type: \"" . $RecordType . "\", Value: \"" . ($rec->"value") . "\", Comment: \"" . ($rec->"comment") . "\"");
$LogPrint debug $ScriptName ("GetAnnouncedIP - Records received: " . [:len $Records]);
foreach rec in=$Records do={
$LogPrint debug $ScriptName ("GetAnnouncedIP - Record: Name: \"" . $RecordName . "\", Type: \"" . $RecordType . "\", Value: \"" . ($rec->"value") . "\", Comment: \"" . ($rec->"comment") . "\"");
}
:if ([:len $Records] > 1) do={
:error ("Multiple records found for \"$RecordName.$ZoneName\", RecordType: $RecordType. This is not supported.");
} else={
:if ([:len $Records] = 1) do={
:set AnnouncedIP ($Records->0->"value");
} }
}
$LogPrint debug $ScriptName ("GetAnnouncedIP - Announced IP is: " . $AnnouncedIP);
:return $AnnouncedIP; :if ([:len $Records] > 1) do={
} on-error={ :error ("Multiple records found for \"$RecordName.$ZoneName\", RecordType: $RecordType. This is not supported.");
:local Err $message; } else={
:if ([:len $Records] = 1) do={
:set AnnouncedIP ($Records->0->"value");
}
}
$LogPrint debug $ScriptName ("GetAnnouncedIP - Announced IP is: " . $AnnouncedIP);
:if ([:find $Err "404"] != -1) do={ :return $AnnouncedIP;
} do={
$LogPrint debug $ScriptName ("GetAnnouncedIP - Error Message: " . $GetAnnouncedIPErr);
:if ([:find "$GetAnnouncedIPErr" "status 404";] >= 1) do={
$LogPrint debug $ScriptName ("GetAnnouncedIP - Announced IP is not set"); $LogPrint debug $ScriptName ("GetAnnouncedIP - Announced IP is not set");
:return false; :return false;
} }
:error ("GetAnnouncedIP - API Error - $Err"); :error ("GetAnnouncedIP - API Error - $GetAnnouncedIPErr");
} }
:return $AnnouncedIP;
} }
:local APISetRecord do={ :local APISetRecord do={
:do { :local APIResponse;
:onerror APISetRecordErr in={
$LogPrint debug $ScriptName ("APISetRecord - started"); $LogPrint debug $ScriptName ("APISetRecord - started");
[/system/script/run "JParseFunctions"; global JSONLoad; global JSONLoads; global JSONUnload]; [/system/script/run "JParseFunctions"; global JSONLoad; global JSONLoads; global JSONUnload];
$LogPrint debug $ScriptName ("APISetRecord - JParseFunctions loaded"); $LogPrint debug $ScriptName ("APISetRecord - JParseFunctions loaded");
:local Records; :local Records;
:local Record; :local Record;
:local APIResponse;
:local Payload; :local Payload;
:do { :onerror GetRecordsErr in={
:set Records ([$JSONLoads ([/tool/fetch "$APIUrl/zones/$ZoneName/rrsets/$RecordName/$RecordType" http-method=get http-header-field="Authorization: Bearer $APIToken" output=user as-value]->"data")]->"rrset"->"records"); :set Records ([$JSONLoads ([/tool/fetch "$APIUrl/zones/$ZoneName/rrsets/$RecordName/$RecordType" http-method=get http-header-field="Authorization: Bearer $APIToken" output=user as-value]->"data")]->"rrset"->"records");
} on-error={ } do={
:if ([:find $message "404"] != -1) do={ :if ([:find "$GetRecordsErr" "status 404";] >= 1) do={
:set Records [:toarray ""]; :set Records [:toarray ""];
} else={ } else={
$LogPrint error $ScriptName ("APISetRecord - Could not get record from API - $message"); $LogPrint error $ScriptName ("APISetRecord - Could not get record from API - $GetRecordsErr");
} }
} }
$LogPrint debug $ScriptName ("APISetRecord - Records received: " . [:len $Records]); $LogPrint debug $ScriptName ("APISetRecord - Records received: " . [:len $Records]);
@ -138,11 +140,12 @@ onerror Err {
$JSONUnload; $JSONUnload;
$LogPrint debug $ScriptName ("APISetRecord - JSONUnload done"); $LogPrint debug $ScriptName ("APISetRecord - JSONUnload done");
$LogPrint debug $ScriptName ("APISetRecord - finished"); $LogPrint debug $ScriptName ("APISetRecord - finished");
return $APIResponse; :return $APIResponse;
} on-error={ } do={
#TODO Send error via Notification system #TODO Send error via Notification system
$LogPrint error $ScriptName ("Could not set record - $message"); $LogPrint error $ScriptName ("Could not set record - Zone: " . $ZoneName . ", RecordName: " . $RecordName . ", RecordType: " . $RecordType . " - API Error: " . $APISetRecordErr);
} }
:return $APIResponse;
} }