aboutsummaryrefslogtreecommitdiffstats
path: root/global-functions
AgeCommit message (Expand)AuthorFilesLines
2023-01-31check-routeros-update: drop check for cap•••This becomes complicated with legacy wireless and wifiwave2 package, old and new CAPsMAN. Let's just drop the check. change-91Gravatar Christian Hesse1-1/+1
2023-01-31introduce telegram-chat•••Druvis from Mikrotik produced a video "MikroTik Telegram bot - Chat with your Router?". He shows his script to chat with a Router via Telegram bot to send it commands: https://youtu.be/KLX6j3sLRIE This script is kind of limited and has several issues... 🥴 Let's make it robust, usable, multi-device capable and just fun! 😁 (Sadly Mikrotik has a policy to not allow links in Youtube comments. Thus my comment with several hints was removed immediately. If anybody is in contact with Druvis... Please tell him about this script!) change-90Gravatar Christian Hesse1-1/+2
2023-01-31global-functions: $WaitForFile: allow to give iterations...•••... to increase timeout. Every iteration is about 100ms. Gravatar Christian Hesse1-1/+3
2023-01-26global-functions: $LogPrintExit2: always print the message...•••... even on error. Not sure why and when this broke. Gravatar Christian Hesse1-5/+5
2023-01-23check-certificates: make the warning time configurablechange-89Gravatar Christian Hesse1-1/+1
2023-01-23global-functions: $MkDir: catch error on creating tmpfsGravatar Christian Hesse1-1/+7
2023-01-23global-functions: $MkDir: create with reasonable tmpfs-max-size•••Giving no tmpfs-max-size breaks with RouterOS 7.8beta2, where a size limit is enforced. routeros-7.8beta2Gravatar Christian Hesse1-1/+1
2023-01-20check-health: notify about new featureschange-88Gravatar Christian Hesse1-1/+1
2023-01-20check-health: monitor free RAM•••---- ✂️ ---- 🗃️📉️ Health warning: free RAM The available free RAM on MikroTik is at 18% (47MiB)! ---- ✂️ ---- 🗃️📈️ Health recovery: free RAM The available free RAM on MikroTik increased to 65% (168MiB). ---- ✂️ ---- Gravatar Christian Hesse1-0/+1
2023-01-20check-health: monitor CPU load•••---- ✂️ ---- 🧮️📈️ Health warning: CPU load The average CPU load on MikroTik is at 76%! ---- ✂️ ---- 🧮️📉️ Health recovery: CPU load The average CPU load on MikroTik decreased to 64%. ---- ✂️ ---- Gravatar Christian Hesse1-0/+1
2023-01-20global-functions: $RequiredRouterOS: check for valid version stringGravatar Christian Hesse1-0/+6
2023-01-20global-functions: use new functionality for version checkGravatar Christian Hesse1-3/+2
2023-01-20global-functions: $ScriptInstallUpdate: add a version check for scripts•••New RouterOS releases bring new features, and thus new syntax. Installing a new script on old RouterOS results in syntax errors. We want to give clear warning messages, so by adding an extra comment into the script... # requires RouterOS, version=7.8beta3 ... installing on unsupported RouterOS version is mitigated. Gravatar Christian Hesse1-10/+19
2023-01-20global-functions: implement $Grep...•••... that returns the first line that matches a pattern. Gravatar Christian Hesse1-0/+21
2023-01-12global-functions: $MkDir: no early continue for dir "tmpfs"...•••... as we want a RAM disk. Gravatar Christian Hesse1-1/+1
2023-01-12global-functions: $ScriptInstallUpdate: handle config version decrease...•••... and log a warning. Gravatar Christian Hesse1-1/+7
2023-01-12mod/notification-*: support extra text (or emojis 🚀) in notification tagschange-87Gravatar Christian Hesse1-1/+1
2023-01-11mod/notification-email: move $QuotedPrintable (from global-functions)•••This is used for e-mail only... Gravatar Christian Hesse1-37/+0
2023-01-10sms-forward: support hookschange-86Gravatar Anatoly Bubenkov1-1/+1
2023-01-02update copyright for 2023Gravatar Christian Hesse1-1/+1
2022-12-13global-functions: $MkDir: create a tmpfs (RAM disk)...•••... if the path starts with "tmpfs/". This helps to mitigate flash wear. routeros-7.7rc1Gravatar Christian Hesse1-0/+10
2022-12-13global-functions: $MkDir: create directories recursivelyGravatar Christian Hesse1-14/+30
2022-12-13global-functions: $MkDir: rename internal variableGravatar Christian Hesse1-10/+10
2022-12-13global-functions: $MkDir: fail if non-directory path existsGravatar Christian Hesse1-0/+5
2022-12-12global-functions: check RouterOS version before loading modulesGravatar Christian Hesse1-3/+3
2022-12-06global-functions: $SymbolByUnicodeName: append variation selector-16...•••... to specify that the preceding character should be displayed with emoji presentation. https://unicode-table.com/en/FE0F/ Gravatar Christian Hesse1-1/+1
2022-11-29global-functions: introduce $IsMacLocallyAdministered...•••... and use it in $GetMacVendor. Gravatar Christian Hesse1-1/+11
2022-11-22global-functions: $IsTimeSync: no cloud on x86Gravatar Christian Hesse1-2/+3
2022-11-22global-functions: $IsTimeSync: no cloud with CHR free licenseGravatar Christian Hesse1-0/+5
2022-11-22global-functions: $ScriptLock: use shorter random string•••... but with all characters from alphabet with $GetRandom20CharAlNum. Gravatar Christian Hesse1-2/+2
2022-11-22global-functions: $MkDir: use shorter random string•••... but with all characters from alphabet with $GetRandom20CharAlNum. Gravatar Christian Hesse1-2/+2
2022-09-28global-functions: $ScriptInstallUpdate: disable notification only...•••... if requested, but keep output and logs. Gravatar Christian Hesse1-16/+16
2022-09-28global-functions: $ScriptInstallUpdate: drop dead code...Gravatar Christian Hesse1-4/+1
2022-09-25global-functions: $ScriptInstallUpdate: drop code for permission workaround•••This is no longer used as 'netwatch-syslog' is gone. Gravatar Christian Hesse1-4/+1
2022-09-25drop 'netwatch-syslog'•••To filter in firewall you should use something like this: /ip/firewall/filter/add action=reject chain=output out-interface-list=WAN port=514 protocol=udp reject-with=icmp-admin-prohibited; /ip/firewall/filter/add action=reject chain=forward out-interface-list=WAN port=514 protocol=udp reject-with=icmp-admin-prohibited; change-85Gravatar Christian Hesse1-1/+1
2022-09-25introduce 'mod/notification-email', split off from global-functionschange-84Gravatar Christian Hesse1-128/+1
2022-09-25global-functions: $FlushEmailQueue: do not flush if sendingGravatar Christian Hesse1-0/+5
2022-09-20global-functions: $GetMacVendor: detect locally administered addresses•••https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local_(U/L_bit) Gravatar Christian Hesse1-0/+4
2022-09-15global-functions: $FlushEmailQueue: use $0 for scheduler nameGravatar Christian Hesse1-6/+6
2022-09-15global-functions: $FlushEmailQueue: do not flush with resolver issues•••Flushing the mail queue with resolver issues can flood the log with messages like: e-mail;error Error sending e-mail <=?utf-8?Q?[MikroTik] =F0=9F=92=BE=E2=98=81 Cloud backup?=>: DNS resolve failed Try to avoid this... Gravatar Christian Hesse1-0/+6
2022-09-13global-functions: $GetMacVendor: switched to Let's Encrypt (R3)•••So let's check for the correct one, and drop the other. Gravatar Christian Hesse1-1/+1
2022-09-09global-functions: $ScriptInstallUpdate: prepare for future certificate chainGravatar Christian Hesse1-0/+4
2022-09-07global-functions: introduce $GetRandom20CharAlNumGravatar Christian Hesse1-0/+8
2022-09-07global-functions: $GetRandom20CharHex: add optional parameter for lengthGravatar Christian Hesse1-1/+3
2022-08-25global-functions: $SymbolByUnicodeName: add 'earth'Gravatar Christian Hesse1-0/+1
2022-08-05global-functions: $GetRandomNumber: use :rndnum•••This is available in RouterOS 7.x... Signed-off-by: Christian Hesse <mail@eworm.de> Gravatar Michael Gisbers1-8/+2
2022-08-05global-functions: $GetRandom20CharHex: use :rndstr•••This is available in RouterOS 7.x... Signed-off-by: Christian Hesse <mail@eworm.de> Gravatar Michael Gisbers1-1/+1
2022-07-21global-functions: $IsTimeSync: cache a positive result•••The functions do not rely on perfectly synced time. About the right time is fine, that should make sure certificates are valid and mails are sent with reasonable headers. So cache the result if system is fine for later use. Gravatar Christian Hesse1-0/+8
2022-07-21global-functions: $IsTimeSync: drop the extra condition...•••... as ddns is not required to be enabled. The public address is available anyway, but not set in DNS. Gravatar Christian Hesse1-1/+1
2022-07-21global-functions: $IsTimeSync: drop old code•••In RouterOS 7.x the ntp client and server are bundled and unique and can not be unavailable. Also it does no longer have a 'last-adjustment' property... Gravatar Christian Hesse1-8/+2
2022-07-21global-functions: $IsFullyConnected: remove trailing spaceGravatar Christian Hesse1-1/+1
2022-07-13global-functions: update initialization of empty array•••Having the parenthesis here is important for valid syntax! Gravatar Christian Hesse1-7/+7
2022-07-06global-config: new setting to disable news and change notifications...•••... and also drop the version from global-config and global-config-overlay. change-83Gravatar Christian Hesse1-14/+10
2022-07-06netwatch-notify: rename parameter: hostname -> name•••Starting with RouterOS 7.4 the netwatch tool has been extended, it can now do tcp and http probes. Rename the parameter for reasonable naming with services. change-82Gravatar Christian Hesse1-1/+1
2022-07-05global-functions: introduce function $PrettyPrint•••... to add trailing carriage return when printing to terminal: [admin@MikroTik] > $PrettyPrint [ $DeviceInfo ] Hostname: MikroTik Board name: hAP ac^2 Architecture: arm Model: RouterBOARD D52G-5HacD2HnD-TC Serial number: 8A2A09A221A1 RouterOS: Channel: testing Installed: 7.4rc1 RouterOS-Scripts: Current: 81 Gravatar Christian Hesse1-0/+10
2022-06-28global-functions: $ScriptInstallUpdate: remove script on failure when installingGravatar Christian Hesse1-1/+7
2022-06-20global-functions: introduce function $IsFullyConnectedGravatar Christian Hesse1-0/+19
2022-06-20global-functions: rename internal function: $TimeIsSync -> $IsTimeSyncGravatar Christian Hesse1-33/+33
2022-06-20global-functions: rename internal function: $DNSIsResolving -> $IsDNSResolvingGravatar Christian Hesse1-15/+15
2022-06-20global-functions: rename internal function: $DefaultRouteIsReachable -> $IsDe...Gravatar Christian Hesse1-11/+11
2022-06-17global-functions: $WaitTimeSync: drop declaration of unused functionGravatar Christian Hesse1-1/+0
2022-06-16fix typos: 'at lease' -> 'at least'Gravatar Christian Hesse1-2/+2
2022-06-15drop script 'rotate-ntp'•••For RouterOS 6.x a separate package 'ntp' exists. This adds server functionality, but allows ip addresses for the client only. I added the script 'rotate-ntp' to update addresses from names... Now with RouterOS 7.x there's no extra package and the limitation does no longer exist. So let's just drop the script. This adds migration code, that... * removes the script from configuration * removes a scheduler from configuration * sets the configured ntp pool name for ntp client change-81Gravatar Christian Hesse1-9/+1
2022-05-20log-forward: change symbol for notificationGravatar Christian Hesse1-0/+1
2022-05-17global-functions: $FlushEmailQueue: return if time is not synced•••The local system time is used in the mail header. We do not want the mails to be sent in the past, so return early (and thus wait for time being synced). Gravatar Christian Hesse1-0/+6
2022-05-12notify about freeze of routeros-v7 branchchange-80Gravatar Christian Hesse1-1/+1
2022-05-11global-functions: RouterOS v7 path syntaxGravatar Christian Hesse1-83/+78
2022-04-28global-functions: $LogPrintExit2: handle empty nameGravatar Christian Hesse1-1/+1
2022-04-28global-functions: catch runtime error when loading modulesGravatar Christian Hesse1-1/+5
2022-04-28global-functions: validate syntax of modulesGravatar Christian Hesse1-1/+6
2022-04-28global-functions: set $0 with script name•••Now that we have some active code at the bottom... Gravatar Christian Hesse1-2/+4
2022-04-26global-functions: $DefaultRouteIsReachable: update properties for ROS 7.xrouteros-7.x-6Gravatar Christian Hesse1-1/+1
2022-04-26global-functions: $ScriptInstallUpdate: support giving comment...•••... for new scripts. This allows to have extra settings from the beginning, for example: $ScriptInstallUpdate script1,script2 "base-url=https://example.com/your/custom/repository/" Gravatar Christian Hesse1-2/+3
2022-03-30introduce backup-partitionchange-79Gravatar Christian Hesse1-1/+1
2022-03-08global-functions: (re-)introduce global $Read•••... to interactively read input from user on terminal. Gravatar Christian Hesse1-0/+6
2022-03-01global-functions: $FlushEmailQueue: delay if "in-progress"...•••Something else is sending a mail... Let's wait and hope the status is not confused. Gravatar Christian Hesse1-0/+1
2022-02-24global-functions: $DeviceInfo: firmware only if upgrade pendingGravatar Christian Hesse1-1/+2
2022-02-21doc/mod: notify about new documentationchange-78Gravatar Christian Hesse1-1/+1
2022-02-10global-functions: $DownloadPackage: handle special cases•••This is a RouterOS v7 only change! * Revert commit 1e6931c8e34d5035cb07baa98b57eccbcd4278ab (but keep the cherry-picked one in branch routeros-v6). * Drop special case 'routeros-$arch', which no longer exists. * Update package name 'system' to 'routeros'. This should be the correct name, and is expected by CAPsMAN. No idea why package-name property for the file is different... Gravatar Christian Hesse1-7/+3
2022-02-10global-functions: $MkDir: do not act without directoryGravatar Christian Hesse1-0/+4
2022-02-10introduce firmware-upgrade-rebootchange-77Gravatar Christian Hesse1-1/+1
2022-02-10netwatch-notify: allow to suppress notification on host downchange-76Gravatar Christian Hesse1-1/+1
2022-01-20global-functions: $ScriptInstallUpdate: quote names in log outputGravatar Christian Hesse1-9/+9
2022-01-20global-functions: $ScriptInstallUpdate: give final url in debug outputGravatar Christian Hesse1-7/+6
2022-01-17global-functions: $DownloadPackage: handle special case with name•••For RouterOS 6.x bundled package version and architecture are swapped. Closes: #21 Gravatar Christian Hesse1-0/+4
2022-01-17global-functions: $DownloadPackage: give url in debug outputGravatar Christian Hesse1-3/+3
2022-01-14global: notify about merging 'routeros-v7' into 'main'change-75Gravatar Christian Hesse1-1/+1
2022-01-14global-functions: bump the required version for RouterOS 7.x•••... but keep a warning when running RouterOS v6. Gravatar Christian Hesse1-5/+4
2022-01-07hotspot-to-wpa: support settings from templatechange-74Gravatar Christian Hesse1-1/+1
2022-01-06Migrate configuration and send notification on renameschange-73Gravatar Christian Hesse1-1/+1
2022-01-03introduce netwatch-dnschange-72Gravatar Christian Hesse1-1/+1
2022-01-01update copyright for 2022Gravatar Christian Hesse1-1/+1
2021-12-20global-functions: $RequiredRouterOS: fix warning•••Passing a boolean does not work... Handle as string. Gravatar Christian Hesse1-5/+4
2021-12-14global-functions: $DownloadPackage: make directory first•••The fetch command creates the directory itself, however using $MkDir gives better error message when creating directory fails. Gravatar Christian Hesse1-0/+6
2021-12-14global-functions: $MkDir: log errorGravatar Christian Hesse1-1/+3
2021-12-14global-functions: $NotificationFunctions->"email": do not declare unused func...Gravatar Christian Hesse1-1/+0
2021-12-13global-functions: $DeviceInfo: show license level if available•••This now shows license level for CHR. The property is named different for Routerboards. As these have the license bundled to hardware anyway we do not show it there. Gravatar Christian Hesse1-0/+3
2021-12-13README: changes for RouterOS v6change-71Gravatar Christian Hesse1-1/+1
2021-12-10global-functions: $ScriptLock: simplify cleanup codeGravatar Christian Hesse1-5/+2
2021-12-09global-functions: $ScriptLock: remove ticket in a loop•••This was not required with RouterOS v6, but for any reason removing a ticket may fail with RouterOS v7 in very rare cases. So remove in a loop... Gravatar Christian Hesse1-1/+2