Commit graph

281 commits

Author SHA1 Message Date
Christian Hesse
a0d1709244 log-forward: notify on rate limit 2020-09-28 20:26:29 +02:00
Christian Hesse
b0db9c7d52 global-functions: $SendTelegram: scissors symbol for truncation 2020-09-28 19:53:32 +02:00
Christian Hesse
9ea6b159b6 global-functions: $SendTelegram: truncate messages if too long
Telegram messages have a maximum length of 4096 characters. Truncate if
too long, keep some spare characters for status messages.
2020-09-27 20:38:09 +02:00
Christian Hesse
697e32a306 log-forward: add filter on log message text 2020-09-25 22:21:59 +02:00
Christian Hesse
c3ea555233 dhcp-to-dns: notify on acting on all bound leases 2020-09-25 22:20:34 +02:00
Christian Hesse
9f16e0644b global-functions: notify on Telegram queue 2020-09-25 22:19:16 +02:00
Christian Hesse
9bec6914cc netwatch-notify: notify on configurable check count threshold 2020-09-25 22:17:26 +02:00
Christian Hesse
956244d53b collect-wireless-mac: add symbol in notification 2020-09-18 13:11:33 +02:00
Christian Hesse
1367a59c27 daily-psk: add symbol in notification 2020-09-18 13:08:29 +02:00
Christian Hesse
49737af6d1 extend magic pattern with "by RouterOS"
This matches the string included in export.
2020-09-18 11:00:27 +02:00
Christian Hesse
6c3bcdecb2 global-functions: add missing colon 2020-09-17 21:21:04 +02:00
Christian Hesse
52f4f484e5 global-functions: $FlushTelegramQueue: destroy empty queue 2020-09-14 23:56:59 +02:00
Christian Hesse
a03c8773da global-functions: $FlushTelegramQueue: give hint on queued message 2020-09-14 23:22:02 +02:00
Christian Hesse
1b68e42bc6 global-functions: queue Telegram notifications on failure and re-send
This introduces function $FlushTelegramQueue, which flushes queue of
Telegram notifications. Notifications are appended to the queue if
sending failed.
2020-09-14 22:56:52 +02:00
Christian Hesse
fae28357c7 global-functions: $DefaultRouteIsReachable: exclude blackhole 2020-09-01 23:15:57 +02:00
Christian Hesse
ff5cdc3019 [ ... print count-only ...] -> [ :len [ ... find ... ] ]
Using 'print count-only' always prints a number to terminal, even if the
value is evaluated in a condition or assigned to a variable. This can be
quite annoying. Behavior will not chance (SUP-25503), so replacing the
code...
2020-08-26 09:29:52 +02:00
Christian Hesse
d65874e142 global-functions: $TimeIsSync: return gracefully...
Situation will not improve... But chances are that RTC is available with
correct time, for example from host inside CHR vm. So return gracefully.
2020-08-21 23:39:36 +02:00
Christian Hesse
8c988ac55a global-functions: $TimeIsSync: warn on missing time source 2020-08-21 23:35:29 +02:00
Christian Hesse
7febb6a0f4 global-functions: $TimeIsSync: return false if cloud enabled but not ready 2020-08-21 23:33:12 +02:00
Christian Hesse
cc375704f3 global-functions: $TimeIsSync: return false if ntp client enabled but not synced 2020-08-21 23:25:53 +02:00
Christian Hesse
6575cb3321 notify about support for dhcp server name in fqdn 2020-08-07 22:15:30 +02:00
Christian Hesse
3b28440b05 global-functions: drop $GetRandomSha256, introduce $GetRandom20CharHex
Do do generate certificate, but use scep-server otp.
2020-07-25 16:17:01 +02:00
Christian Hesse
3e1746f43e check-certificates: add symbol in notification 2020-07-17 11:52:54 +02:00
Christian Hesse
b91edc9e39 global-functions: $ScriptInstallUpdate: add symbol in notification 2020-07-17 11:40:24 +02:00
Christian Hesse
e0fe98a274 cloud-backup: add symbol in notification 2020-07-17 11:22:40 +02:00
Christian Hesse
075859c898 global-functions: introduce and use $SymbolForNotification 2020-07-17 08:12:00 +02:00
Christian Hesse
7862ce5f19 global-functions: introduce $SymbolByUnicodeName 2020-07-17 07:52:56 +02:00
Christian Hesse
4c61cd0b65 global-functions: $DeviceInfo: use $IfThenElse 2020-07-16 21:06:13 +02:00
Christian Hesse
910641b6fa global-functions: introduce $IfThenElse 2020-07-16 20:34:27 +02:00
Christian Hesse
6bce0a4b6a add 'log-forward', drop 'early-errors' 2020-07-15 12:41:29 +02:00
Christian Hesse
9740b1f269 global-functions: $ScriptInstallUpdate: update wording for notification 2020-07-14 21:28:35 +02:00
Christian Hesse
f4d6e07dbb global-config: dropped $ScriptUpdatesIgnore, use ignore flag in comment 2020-07-14 17:02:41 +02:00
Christian Hesse
d1b6ca3d0b notify about auto patch updates in check-routeros-update 2020-07-14 17:02:36 +02:00
Christian Hesse
4a52d51a36 notify about hooks in netwatch-notify 2020-07-14 17:02:31 +02:00
Christian Hesse
aec63407e8 notify about options in script comments 2020-07-14 16:23:04 +02:00
Christian Hesse
883920aeae notify about $IPCalc 2020-07-14 16:22:17 +02:00
Christian Hesse
23563cb9aa notify about early-errors 2020-07-14 16:16:46 +02:00
Christian Hesse
c4ff95b3ae global-functions: $MailServerIsUp: do immediate check 2020-07-14 10:59:08 +02:00
Christian Hesse
16685dd332 global-functions: $DNSIsResolving: try a domain that is unlikely to be cached 2020-07-14 09:12:44 +02:00
Christian Hesse
d8b2055fbc global-functions: add $VersionToNum 2020-07-07 00:01:00 +02:00
Christian Hesse
ef2cb11665 global-functions: $ScriptInstallUpdate: get base url and suffix from comment
Just set 'base-url=https://example.com/...' and/or 'url-suffix=\h=branch'
in comment to overwrite settings from global configuration.
2020-07-02 00:58:06 +02:00
Christian Hesse
e38f3fb022 global-functions: $ScriptInstallUpdate: support ignore from comment
Just add 'ignore' in comment...
2020-07-02 00:41:37 +02:00
Christian Hesse
149340ff34 global-functions: $ParseKeyValueStore: allow equals sign in value 2020-07-02 00:41:37 +02:00
Christian Hesse
2aaea7c58e global-functions: $ParseKeyValueStore: key without value for boolean true 2020-07-02 00:41:37 +02:00
Christian Hesse
5b03ae4fa2 global-functions: do not initialize $Sent* variables
The scripts work without initialization, removing this makes sure the
value is not overwritten on global functions reload.
2020-06-30 20:26:37 +02:00
Christian Hesse
2093661552 global-functions: $GetRandomNumber: limit at 2^32-1 2020-06-30 20:06:55 +02:00
Christian Hesse
baba79e3f5 global-functions: $GetRandomNumber: return 32bit number without limit 2020-06-29 16:32:19 +02:00
Christian Hesse
38760d05b0 global-functions: add $IPCalc
[admin@MikroTik] > $IPCalc 192.168.88.188/20
Address:   192.168.88.188
Netmask:   255.255.240.0
Network:   192.168.80.0/20
HostMin:   192.168.80.1
HostMax:   192.168.95.254
Broadcast: 192.168.95.255
2020-06-23 13:19:27 +02:00
Christian Hesse
71ad56aacc explicitly name the license
Copyright (C) 2013-2020 Christian Hesse <mail@eworm.de>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

https://www.gnu.org/licenses/#GPL
https://www.gnu.org/licenses/gpl.html
https://www.gnu.org/licenses/gpl.md
2020-06-19 22:17:42 +02:00
Christian Hesse
12015af855 global-functions: $GetRandomNumber: use $GetRandomSha256 2020-06-18 12:52:59 +02:00
Christian Hesse
529dbbe4f8 global-functions: rename $GetRandom -> $GetRandomNumber 2020-06-18 12:49:52 +02:00
Christian Hesse
a1d05f93c6 global-functions: add $GetRandomSha256 2020-06-18 12:23:50 +02:00
Christian Hesse
e871cb5a69 global-functions: add $WaitFullyConnected 2020-05-26 23:35:24 +02:00
Christian Hesse
4166bf91c3 global-functions: add $WaitDNSResolving 2020-05-26 23:34:58 +02:00
Christian Hesse
b7172b69ce global-functions: add $DNSIsResolving 2020-05-26 23:33:49 +02:00
Christian Hesse
83a8743879 global-functions: $WaitTimeSync: replace comment with debug output 2020-05-17 23:41:54 +02:00
Christian Hesse
3179994017 global-functions: $DownloadPackage: replace comment with debug output 2020-05-17 23:40:59 +02:00
Christian Hesse
255b2a8244 global-functions: $MailServerIsUp: handle resolve errors 2020-05-15 20:34:33 +02:00
Christian Hesse
215bf78ce1 global-functions: $MailServerIsUp: remove duplicate define 2020-05-15 20:31:54 +02:00
Christian Hesse
77338563b7 global-functions: $MailServerIsUp: use prepared value 2020-05-15 20:29:15 +02:00
Christian Hesse
b5d1e7aa83 global-functions: $WaitTimeSync: run rotate-ntp less frequently 2020-05-15 20:23:14 +02:00
Christian Hesse
12a29d076f global-functions: $WaitTimeSync: failing rotate-ntp is not fatal
Resolving ntp servers fais if internet connectivity is not established.
So this is not fatal, we want to catch error and fall through, then
continue.
2020-05-13 14:07:12 +02:00
Christian Hesse
378a1785f4 global-functions: $ScriptInstallUpdate: log when reloading code 2020-05-04 11:06:02 +02:00
Christian Hesse
ce4d332f55 global-functions: $DownloadPackage: support downloading bundle 2020-05-04 09:21:23 +02:00
Christian Hesse
14dd16ef5a global-functions: $CertificateNameByCN: replace apostrophe 2020-04-24 11:09:02 +02:00
Christian Hesse
b67712cfe4 global-functions: add $WaitDefaultRouteReachable 2020-04-22 22:21:06 +02:00
Christian Hesse
999763a263 global-functions: add $DefaultRouteIsReachable 2020-04-22 22:20:42 +02:00
Christian Hesse
d6ce774fd8 global-functions: $TimeIsSync: unbreak with bundled ntp client 2020-04-22 10:08:23 +02:00
Christian Hesse
96598b2d34 global-functions: $DownloadPackage: do not re-download 2020-04-07 12:54:46 +02:00
Christian Hesse
df177212d1 global-functions: $SendTelegram: use $LogPrintExit 2020-04-03 16:59:10 +02:00
Christian Hesse
af77645174 global-functions: $SendEMail: use $LogPrintExit 2020-04-03 16:59:10 +02:00
Christian Hesse
6f354c8bb0 global-functions: $ScriptFromTerminal: use $LogPrintExit 2020-04-03 16:59:10 +02:00
Christian Hesse
9c3ce55ee4 global-functions: $MailServerIsUp: use $LogPrintExit 2020-04-03 16:59:10 +02:00
Christian Hesse
596fb5f835 global-functions: $CertificateDownload: use $LogPrintExit 2020-04-03 16:59:10 +02:00
Christian Hesse
7cdeb9185e global-functions: $CertificateAvailable: use $LogPrintExit 2020-04-03 16:59:10 +02:00
Christian Hesse
324f5b0ba4 global-functions: $SendTelegram: check status of certificate download 2020-04-03 15:03:27 +02:00
Christian Hesse
e963e09114 global-functions: $GetMacVendor: check status of certificate download 2020-04-03 15:03:27 +02:00
Christian Hesse
abb97601ce global-functions: $DownloadPackage: check status of certificate download 2020-04-03 15:03:27 +02:00
Christian Hesse
dfeaa1ed41 global-functions: $Certificate{Available,Download}: return and check status 2020-04-03 14:24:24 +02:00
Christian Hesse
afd33b8e25 global-functions: $ScriptInstallUpdate: log and print changes 2020-04-01 11:38:25 +02:00
Christian Hesse
a598cca2da global-functions: $SendTelegram: always return a value
... overwise it opens a prompt "value:".
2020-03-31 13:35:59 +02:00
Christian Hesse
40970fb738 global-functions: $SendEMail: always return a value
... overwise it opens a prompt "value:".
2020-03-31 13:34:30 +02:00
Christian Hesse
e33b4af433 global-functions: $ScriptInstallUpdate: ignore empty scripts
Now that script-updates is gone we support installing new scripts with
$ScriptInstallUpdate only.
2020-03-31 12:58:13 +02:00
Christian Hesse
2363f75e7f ask for GitHub and GitLab stars 2020-03-27 22:19:33 +01:00
Christian Hesse
1d93e92dcd Notify about new documentation! 2020-03-27 22:12:49 +01:00
Christian Hesse
070ae8ecb5 link global-{config,config-overlay,functions} to main README 2020-03-27 22:12:49 +01:00
Christian Hesse
5f46ef7635 completely replace script-updates with $ScriptInstallUpdate 2020-03-23 14:01:20 +01:00
Christian Hesse
f50e416e49 global-functions: introduce $MkDir
This is a dirty hack... RouterOS does not support creating directories,
so we mis-use http server and fetch tool.
2020-03-20 09:26:12 +01:00
Christian Hesse
98585afe1c add script 'global-wait'
Run this in schedulers that fire on startup without interval. Schedulers
should look something like this:

/ system scheduler {
  add name=global-scripts on-event="/ system script { run global-config; run global-config-overlay; run global-functions; }" start-time=startup;
  add name=bridge-port-to-default on-event="/ system script { run global-wait; run bridge-port-to-default; }" start-time=startup;
}
2020-03-12 08:40:29 +01:00
Christian Hesse
8992b18166 global-functions: $DeviceInfo: more indention 2020-03-09 09:29:36 +01:00
Christian Hesse
3d07ebde05 global-functions: $SendEMail: invert condition 2020-03-05 11:00:36 +01:00
Christian Hesse
227151e189 global-functions: $SendTelegram: invert condition 2020-03-05 11:00:36 +01:00
Christian Hesse
34db2e34db global-functions: $SendTelegram: allow to override chatid
This allows to send Telegram messages to different contact or group.
Use something like this:

/system scheduler add name=netwatch-notify interval=1m start-time=startup \
  on-event=":global TelegramChatIdOverride \"-1234\"; / system script run netwatch-notify; :set TelegramChatIdOverride;"
2020-03-05 10:54:48 +01:00
Christian Hesse
bf41a8d48a always use severity 'warning', not just 'warn' 2020-03-05 09:18:23 +01:00
Christian Hesse
792eba8465 global-functions: $LogPrintExit: add debugging option 2020-03-05 08:11:17 +01:00
Christian Hesse
628ae1bd70 bridge-port-to-default: use $ParseKeyValueStore...
... and unbreak last commit removing delay (69352c90).
This requires a change in configuration syntax. Change this...

    comment="default:br-local, alt:br-guest"

to...

    comment="default=br-local, alt=br-guest"
2020-03-03 13:32:00 +01:00
Christian Hesse
001e7eeb39 global-functions: sort alphabetically 2020-02-28 15:26:26 +01:00
Christian Hesse
3db752bc97 global-functions: $ScriptLock: use $LogPrintExit 2020-02-27 13:51:27 +01:00
Christian Hesse
ceaa83b83e global-functions: merge $LogAnd{Error,Put} to $LogPrintExit ...
... and fix logging.

Logging with severity from variable (:log $severity ...) is not
possible, this is considered a syntax error. Also the 'workaround' with
parsing code failed with missing message in log.

The reliable code is a lot longer, so merge the two functions to save a
lot of duplicate code.
2020-02-26 14:19:54 +01:00
Christian Hesse
312caf3f90 global-functions: introduce $LogAndPut 2020-02-26 12:11:50 +01:00
Christian Hesse
3ebf68a08c global-functions: $LogAndError: add severity 2020-02-26 12:09:19 +01:00
Christian Hesse
556fc2d0d3 global-functions: introduce $LogAndError 2020-02-24 19:53:15 +01:00
Christian Hesse
19b80ee063 global-functions: $WaitTimeSync: rotate ntp servers minutely
Signed-off-by: Christian Hesse <mail@eworm.de>
2020-02-24 13:01:45 +01:00
Christian Hesse
5fab77abad global-functions: introduce $WaitTimeSync 2020-02-24 12:55:18 +01:00
Christian Hesse
77ec3293f0 global-functions: introduce $TimeIsSync 2020-02-24 11:06:17 +01:00
Christian Hesse
7d2239f24e global-functions: introduce $MailServerIsUp 2020-02-24 10:48:04 +01:00
Christian Hesse
e376845b12 global-functions: introduce and use $CertificateNameByCN 2020-02-06 18:18:56 +01:00
Christian Hesse
b5f4c2c87e global-config: drop $ScriptUpdatesConfigChangesIgnore
Comment or remove $GlobalConfigVersion in global-config-overlay
to disable change notifications.
2020-02-04 20:19:46 +01:00
Christian Hesse
03af7d6d9c global-functions: $CharacterReplace: do not limit string length
I've tried something like this to update a device:

/ system script set source=[ $CharacterReplace [ get global-config-overlay source ] "GlobalConfigVersion 10" "GlobalConfigVersion 11" ] global-config-overlay;

This broke with global-config-overlay longer than 999 characters. So makes
sure there is no limit for string length.
2020-02-03 21:29:21 +01:00
Christian Hesse
7f81734006 global-functions: $CertificateAvailable: simplify loop 2020-02-02 15:16:36 +01:00
Christian Hesse
1e72f03e5e README: update instructions to use $ScriptInstallUpdate 2020-01-29 22:14:56 +01:00
Christian Hesse
c500243c97 global-functions: add $ScriptInstallUpdate
Just call without parameters to update scripts:

[admin@MikroTik] > $InstallAndUpdate

Add comma separated list of scripts to install and update:

[admin@MikroTik] > $InstallAndUpdate cloud-backup[,upload-backup][,...]
2020-01-29 21:44:41 +01:00
Christian Hesse
352818ea48 global-functions: $CertificateAvailable: check whole chain
The root certificate is a self-signed certificate. Check for the issue
certificate until we find the self-signed one.
2020-01-29 21:08:10 +01:00
Christian Hesse
801dce05fa global-functions: $CertificateAvailable: warn about crl download to flash
Downloading certificate crls to flash can fill up all available space.
So warn about it!
2020-01-29 09:27:00 +01:00
Christian Hesse
5741924cf9 global-functions: replace deprecated keep-result=no with output=none 2020-01-28 21:51:27 +01:00
Christian Hesse
b3a76c7e4b global-functions: $CertificateDownload: properly name new certificates 2020-01-06 10:20:19 +01:00
Christian Hesse
cf79e6c473 global-functions: do not encode dash, dot, slash and underscore 2020-01-03 11:24:12 +01:00
Christian Hesse
b1b7ed83ed global-functions: $Certificate*: add quoting around CN 2020-01-03 10:15:34 +01:00
Christian Hesse
cb1e520965 global-functions: split $CertificateAvailable to $CertificateDownload
This allows to force download even if certificate is available. We need
this for a clean update path with Let's Encrypt.
2020-01-03 10:07:55 +01:00
Christian Hesse
afb9839073 update copyright for 2020 2020-01-01 17:00:39 +01:00
Christian Hesse
d064bd349e global-functions: define first, set later 2019-12-10 14:45:35 +01:00
Christian Hesse
64341690bf global-functions: $DownloadPackage: retry on error 2019-12-05 13:20:26 +01:00
Christian Hesse
ebd5ff9bfe global-functions: introduce $ScriptFromTerminal
Checking whether or not started from terminal is tricky... We have to find
the job for the script, find its top most parent and get its type.
2019-12-03 23:45:55 +01:00
Christian Hesse
ac6c132ea0 global-functions: $DeviceInfo: append revision to model 2019-11-28 10:49:21 +01:00
Christian Hesse
7c0c27c03f global-functions: add architecture in device info 2019-10-28 13:15:10 +01:00
Christian Hesse
f40bb2c8c8 check-health: make threshold for voltage configurable 2019-10-14 19:13:31 +02:00
Christian Hesse
1cee36a911 introduce global-config-overlay 2019-09-12 21:29:41 +02:00
Michael Gisbers
2258087aab global-functions: $DeviceInfo: handle configuration version 2019-09-12 21:29:41 +02:00
Christian Hesse
94581741f4 global-functions: introduce and use $DeviceInfo 2019-09-12 21:29:41 +02:00
Christian Hesse
166bbffe1d script-updates: add donation hint in configuration warning notification 2019-08-30 14:10:58 +02:00
Christian Hesse
29dc1b8841 add script 'check-health'
This may be incomplete... Please report if you have missing PSUs,
ttemperature sensors, whatever.
2019-08-27 12:01:32 +02:00
Christian Hesse
06b93ca6c2 global-functions: support sending silent telegram notifications 2019-08-18 21:30:59 +02:00
Christian Hesse
d457421e1e global-functions: split off $SendEMail and $SendTelegram 2019-08-18 21:30:59 +02:00
Christian Hesse
ab4aef4dfb global-functions: $DownloadPackage: re-introduce check for valid package
Even if fetch tool does its job right now... Chances are that the
download servers have corrupted or empty files.
2019-08-01 18:45:54 +02:00
Christian Hesse
acce2322c3 global-functions: add $RandomDelay 2019-07-26 18:14:33 +02:00
Christian Hesse
f49b67f5e7 global-functions: add $GetRandom 2019-07-26 18:13:59 +02:00
Christian Hesse
229dc539cc global-functions: $DownloadPackage: fix downloading for CHR / x86_64 2019-07-19 15:37:01 +02:00
Christian Hesse
8d1313f588 add script 'upload-backup' 2019-07-19 11:46:29 +02:00
Christian Hesse
f79ba55637 global-functions: add $ParseKeyValueStore 2019-07-17 16:27:21 +02:00
Christian Hesse
16f04ee7ee global-functions: $CharacterReplace: use same condition in loop 2019-07-16 12:46:33 +02:00
Christian Hesse
b1b53e3d0d global-functions: append system note in e-mail signature 2019-07-16 12:42:40 +02:00
Christian Hesse
5101d57d52 backup: split off cloud-backup
Currently backup to MikroTik cloud is pretty unreliable and script can
not catch errors at runtime. Looks like this does not change any time
soon (Ticket#2019052022003204).

So let's just split off the cloud backup to make sure email backup works
as expected.
2019-06-14 15:13:41 +02:00
Christian Hesse
42834e9de1 global-functions: $CertificateAvailable: fetch by CommonName
Now that we have a proper $UrlEncode function... Fetch certificates
by CommonName.

Also remove the PEM after import.
2019-04-30 16:52:53 +02:00
Christian Hesse
7f96e5c966 global-functions: add $WaitForFile, wait for file on fetch
The fetch command is asynchronous, the file is not guaranteed to be
available when command terminates.

I opened an issue at Mikrotik support (Ticket#2019041722004999),
their answer:

> You should perform a check in a loop.
> :delay until file exist
>
> That can happen also with any configuration not just files.

So add a function to wait for a file with given name.

I have not seen this with other configuration, though.
2019-04-30 16:52:53 +02:00
Christian Hesse
b93d4d40bc drop deprecated mode= for fetch 2019-04-09 18:01:44 +02:00
Christian Hesse
ea73505ecc script-updates: send global-config changes notification just once 2019-04-03 08:30:28 +02:00
Christian Hesse
7b1c275cc2 script-updates: add option to ignore global-config changes 2019-04-02 08:48:35 +02:00
Christian Hesse
594aef2aab check-certificates: support multiple passphrases 2019-04-01 22:45:38 +02:00
Christian Hesse
26ccf41298 global-functions: prevent infinite loop 2019-03-28 12:36:12 +01:00
Christian Hesse
72d7050423 global-functions: encode all non-alphanumeric characters 2019-03-20 22:42:16 +01:00