:global GlobalFuncReady false;
# Git commit id & info, expected configuration version
-:global CommitId "main/533/c2ac9dd7";
+:global CommitId "main/534/4c2d0f51";
:global CommitTAG "unknown";
-:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 09:10:03 04.05.2026.";
+:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 09:30:03 04.05.2026.";
# The variables are received right here.
:global GlobalConfVersion 138;
:set CheckCert [ $IfThenElse ($CheckCert = "false") "no" "yes-without-crl" ];
:local DirName ("tmpfs/" . [ $CleanName $ScriptName ]);
:if ([ $MkDir $DirName ] = false) do={
- $LogPrint error $0 ("Failed creating directory!");
+ :log error ($0 . " Failed creating directory!");
:return false;
}
:local FileName ($DirName . "/" . [ $CleanName $0 ] . "-" . [ $GetRandom20CharAlNum ]);
:if ([ $WaitForFile $FileName 500ms ] = true) do={
$RmFile $FileName;
}
- $LogPrint debug $0 ("Failed downloading from " . $Url . " - " . $Err);
+ :log debug ($0 . " Failed downloading from " . $Url . " - " . $Err);
$RmDir $DirName;
:return false;
}
:if ([ $WaitForFile $FileName 5s ] = false) do={
- $LogPrint debug $0 ("The file downloaded from " . $Url . " did not show up.");
+ :log debug ($0 . " The file downloaded from " . $Url . " did not show up.");
:return false;
}
:local FileSize [ /file/get $FileName size ];
:return $Return;
}
-
:set FetchUserAgentStr do={
:local Caller [ :tostr $1 ];
:set FileGet do={
:local FileName [ :tostr $1 ];
:global WaitForFile;
- :if ([ $WaitForFile $FileName 0s ] = false) do={:return false}
+ :if ([ $WaitForFile $FileName 0s ] = false) do={
+ :return false;
+ }
:local FileVal false;
- :do {:set FileVal [ /file/get $FileName ];
+ :do {
+ :set FileVal [ /file/get $FileName ];
} on-error={ }
:return $FileVal;
}
:set RmDir do={
:local DirName [ :tostr $1 ];
:global FileGet;
- :global LogPrint;
- $LogPrint debug $0 ("Removing directory: ". $DirName);
+ :log debug ($0 . " Removing directory: ". $DirName);
:local DirVal [ $FileGet $DirName ];
- :if ($DirVal = false) do={$LogPrint debug $0 ("... which does not exist."); :return true};
- :if ($DirVal->"type" != "directory") do={$LogPrint error $0 ("Directory '" . $DirName . "' is not a directory."); :return false};
- :onerror Err {/file/remove $DirName} do={$LogPrint error $0 ("Removing directory '" . $DirName . "' failed: " . $Err); :return false};
+ :if ($DirVal = false) do={
+ :log debug ($0 . " ... which does not exist.");
+ :return true;
+ };
+ :if ($DirVal->"type" != "directory") do={
+ :log error ($0 . " Directory '" . $DirName . "' is not a directory.");
+ :return false;
+ };
+ :onerror Err {
+ /file/remove $DirName;
+ } do={
+ :log error ($0 . " Removing directory '" . $DirName . "' failed: " . $Err);
+ :return false;
+ };
:return true;
}
:set RmFile do={
:local FileName [ :tostr $1 ];
:global FileGet;
- :global LogPrint;
- $LogPrint debug $0 ("Removing file: ". $FileName);
+ :log debug ($0 . " Removing file: ". $FileName);
:local FileVal [ $FileGet $FileName ];
- :if ($FileVal = false) do={$LogPrint debug $0 ("... which does not exist."); :return true}
+ :if ($FileVal = false) do={
+ :log debug ($0 . " ... which does not exist.");
+ :return true;
+ }
:if ($FileVal->"type" = "directory" || $FileVal->"type" = "disk") do={
- $LogPrint error $0 ("File '" . $FileName . "' is not a file."); :return false}
+ :log error ($0 . " File '" . $FileName . "' is not a file.");
+ :return false;
+ }
:onerror Err {
/file/remove $FileName;
- } do={$LogPrint error $0 ("Removing file '" . $FileName . "' failed: " . $Err); :return false}
+ } do={
+ :log error ($0 . " Removing file '" . $FileName . "' failed: " . $Err); :return false;
+ }
:return true;
}
:global FileGet;
:global RmDir;
:global WaitForFile;
- :global LogPrint;
+
:local MkTmpfs do={
:global WaitForFile;
:local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];
:if ([ :len $TmpFs ] = 1) do={
:if ([ /disk/get $TmpFs disabled ] = true) do={
- $LogPrint info $0 ("The tmpfs is disabled, enabling.");
+ :log info ($0 . " The tmpfs is disabled, enabling.");
/disk/enable $TmpFs;
}
:return true;
}
- $LogPrint info $0 ("Creating disk of type tmpfs.");
+ :log info ($0 . " Creating disk of type tmpfs.");
$RmDir "tmpfs";
:onerror Err {
/disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/get total-memory ] / 3);
$WaitForFile "tmpfs";
} do={
- $LogPrint warning $0 ("Creating disk of type tmpfs failed: " . $Err);
+ :log warning ($0 . " Creating disk of type tmpfs failed: " . $Err);
:return false;
}
:return true;
:if ($Path = "") do={
:return true;
}
- $LogPrint debug $0 ("Making directory: " . $Path);
+ :log debug ($0 . " Making directory: " . $Path);
:local PathVal [ $FileGet $Path ];
:if ($PathVal->"type" = "directory") do={
- $LogPrint debug $0 ("... which already exists.");
+ :log debug ($0 . " ... which already exists.");
:return true;
}
:if ([ :pick $Path 0 5 ] = "tmpfs") do={
/file/add type="directory" name=$Path;
$WaitForFile $Path;
} do={
- $LogPrint warning $0 ("Making directory '" . $Path . "' failed: " . $Err);
+ :log warning ($0 . " Making directory '" . $Path . "' failed: " . $Err);
:return false;
}
:return true;
:local Required [ :tostr $2 ];
:local Warn [ :tostr $3 ];
:global IfThenElse;
- :global LogPrint;
:global VersionToNum;
:if (!($Required ~ "^\\d+\\.\\d+((alpha|beta|rc|\\.)\\d+|)\$")) do={
- $LogPrint error $0 ("No valid RouterOS version: " . $Required);
+ :log error ($0 . " No valid RouterOS version: " . $Required);
:return false;
}
:if ([ $VersionToNum $Required ] > [ $VersionToNum [ /system/package/update/get installed-version ] ]) do={
:if ($Warn = "true") do={
- $LogPrint warning $0 ("This " . [ $IfThenElse ([ :pick $Caller 0 ] = ("\$")) "function" "script" ] . \
+ :log warning ($0 . " This " . [ $IfThenElse ([ :pick $Caller 0 ] = ("\$")) "function" "script" ] . \
" '" . $Caller . "' (at least specific functionality) requires RouterOS " . $Required . ". Please update!");
}
:return false;
:local WaitMax [ :totime $2 ];
:global GetRandom20CharAlNum;
:global IfThenElse;
- :global LogPrint;
:global ScriptLockOrder;
:if ([ :typeof $ScriptLockOrder ] = "nothing") do={
:set ScriptLockOrder ({});
}
:if ([ :typeof $WaitMax ] = "nil" ) do={:set WaitMax 0s}
:if ([ :len [ /system/script/find where name=$Script ] ] = 0) do={
- $LogPrint error $0 ("A script named '" . $Script . "' does not exist!");
+ :log error ($0 . " A script named '" . $Script . "' does not exist!");
:error false;
}
:if ([ $JobCount $Script ] = 0) do={
:error false;
}
:if ([ $TicketCount $Script ] >= [ $JobCount $Script ]) do={
- $LogPrint error $0 ("More tickets than running scripts '" . $Script . "', resetting!");
+ :log error ($0 . " More tickets than running scripts '" . $Script . "', resetting!");
:set ($ScriptLockOrder->$Script) ({});
/system/script/job/remove [ find where script=$Script ];
}
[ $IfThenElse ($WaitTime < $WaitMax) " and timed out waiting for lock" "" ] . "...");
:return false;
}
+
:set SendNotification do={ :onerror Err {
:global SendNotification2;
$SendNotification2 ({ origin=$0; subject=$1; message=$2; link=$3; silent=$4 });
} do={:global ExitOnError; $ExitOnError $0 $Err}
}
+
:set SendNotification2 do={
:local Notification $1;
:global NotificationFunctions;
($NotificationFunctions->$FunctionName) ("\$NotificationFunctions->\"" . $FunctionName . "\"") $Notification;
}
}
+
:set SymbolByUnicodeName do={
:local Name [ :tostr $1 ];
:global EitherOr;
- :global LogPrint;
:global SymbolsExtra;
:local Symbols ({
"abacus"="\F0\9F\A7\AE";
"large-orange-circle-10-31"="\F0\9F\8E\83";
"large-red-circle-04-01"="\F0\9F\8D\92" };
:if ([ :len ($Symbols->$Name) ] = 0) do={
- $LogPrint warning $0 ("No symbol available for name '" . $Name . "'!");
+ :log warning ($0 . "No symbol available for name '" . $Name . "'!");
:return "";
}
:return ([ $EitherOr ($Special->($Name . $Magic)) ($Symbols->$Name) ] . "\EF\B8\8F");
}
+
:set SymbolForNotification do={
:global NotificationsWithSymbols;
:global SymbolByUnicodeName;
:foreach Symbol in=[ :toarray $1 ] do={:set Return ($Return . [ $SymbolByUnicodeName $Symbol ])}
:return ($Return . " ");
}
+
:set Unix2Dos do={:return [ :tocrlf [ :tostr $1 ] ]}
:set UrlEncode do={
:local Input [ :tostr $1 ];
}
:return $Return;
}
+
:set ValidateSyntax do={
:local Code [ :tostr $1 ];
- :global LogPrint;
:onerror Err {
[ :parse (":local Validate do={\n" . $Code . "\n}") ];
} do={
- $LogPrint debug $0 ("Valdation failed: " . $Err);
+ :log debug ($0 . "Validation failed: " . $Err);
:return false;
}
:return true;
}
+
:set IsDNSResolving do={
:do {:resolve "api.telegram.org"} on-error={:return false}
:return true;
}
+
:set IsFullyConnected do={
:global IsDNSResolving;
:global IsTimeSync;
:if ([ $IsTimeSync ] = false) do={:return false};
:return true;
}
+
:set IsTimeSync do={
:global IsTimeSyncCached;
:global IsTimeSyncResetNtp;