Compare commits

...

17 Commits

Author SHA1 Message Date
Safeguard
198ca5d410 Translated using Weblate (Russian)
Currently translated at 100.0% (809 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2026-05-15 12:20:33 +02:00
António Oliveira
03938d8c28 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (809 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_PT/
2026-05-14 16:11:33 +00:00
Jokob @NetAlertX
eafbcd52f8 Merge pull request #1636 from void-spark/main
First attempt at kea dhcp support
2026-05-12 21:22:28 +00:00
anton garcias
2fac875792 Translated using Weblate (Catalan)
Currently translated at 99.7% (807 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2026-05-12 18:11:32 +02:00
void-spark
6d661dd12c I did add a ';' from habit, removed again, must please the bunny :) 2026-05-11 22:29:37 +02:00
void-spark
39068e9824 And 'notes' to README.md 2026-05-11 22:21:10 +02:00
void-spark
957c779cb5 Add KEALSS to plugin list 2026-05-11 22:16:51 +02:00
void-spark
76612e5d0e Change default timeout to 10 seconds,
match request timeout to script timeout -1 second.
Always use at least 1 sec. timeout for request.
2026-05-11 22:09:07 +02:00
void-spark
7273899e3e Use single quote consistently
Use 'l' instead of 'lease' (I see you little rabbit)
Use [] over get in most places, if expected fields are missing an error is an acceptable outcome.
Include 'text' field in logging.
Add logging for result '3'
2026-05-11 22:03:29 +02:00
void-spark
608686e4bd Add list with settings to readme 2026-05-11 21:51:32 +02:00
void-spark
b290d3c3d2 First attempt at kea dhcp support 2026-05-10 18:15:05 +02:00
Jokob @NetAlertX
781ae2f91c Merge pull request #1635 from Neutronlul/patch-1
Fix typo in docker installation documentation
2026-05-09 23:57:06 +00:00
Tanner Snow
b7ebc8206f Fix typo in docker installation documentation 2026-05-09 16:47:32 -07:00
António Oliveira
190262a730 Translated using Weblate (Portuguese (Portugal))
Currently translated at 96.2% (779 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_PT/
2026-05-08 15:11:37 +02:00
大王叫我来巡山
5ba202c6a1 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.2% (787 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/
2026-05-08 15:11:32 +02:00
IntEx
e262f915e2 Translated using Weblate (Czech)
Currently translated at 57.8% (468 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/cs/
2026-05-07 03:11:35 +02:00
António Oliveira
b8c4e62ad5 Translated using Weblate (Portuguese (Portugal))
Currently translated at 85.2% (690 of 809 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_PT/
2026-05-07 03:11:33 +02:00
10 changed files with 865 additions and 235 deletions

View File

@@ -36,7 +36,7 @@ docker run -d --rm --network=host \
> Runtime UID/GID: The image defaults to a service user `netalertx` (UID/GID 20211). A separate readonly lock owner also uses UID/GID 20211 for 004/005 immutability. You can override the runtime UID/GID at build (ARG) or run (`--user` / compose `user:`) but must align writable mounts (`/data`, `/tmp*`) and tmpfs `uid/gid` to that choice. > Runtime UID/GID: The image defaults to a service user `netalertx` (UID/GID 20211). A separate readonly lock owner also uses UID/GID 20211 for 004/005 immutability. You can override the runtime UID/GID at build (ARG) or run (`--user` / compose `user:`) but must align writable mounts (`/data`, `/tmp*`) and tmpfs `uid/gid` to that choice.
See alternative [docked-compose examples](https://docs.netalertx.com/DOCKER_COMPOSE). See alternative [docker-compose examples](https://docs.netalertx.com/DOCKER_COMPOSE).
### Default ports ### Default ports

View File

@@ -62,6 +62,7 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
| `INTRNT` | [internet_ip](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_ip/) | 🔍 | Internet IP scanner | | | | `INTRNT` | [internet_ip](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_ip/) | 🔍 | Internet IP scanner | | |
| `INTRSPD` | [internet_speedtest](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_speedtest/) | ♻ | Internet speed test | | | | `INTRSPD` | [internet_speedtest](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/internet_speedtest/) | ♻ | Internet speed test | | |
| `IPNEIGH` | [ipneigh](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/ipneigh/) | 🔍 | Scan ARP (IPv4) and NDP (IPv6) tables | | | | `IPNEIGH` | [ipneigh](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/ipneigh/) | 🔍 | Scan ARP (IPv4) and NDP (IPv6) tables | | |
| `KEALSS` | [kea_api](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/kea_api/) | 🔍/🆎 | Pull lease data from the Kea DHCP API | | |
| `LUCIRPC` | [luci_import](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/luci_import/) | 🔍 | Import connected devices from OpenWRT | | | | `LUCIRPC` | [luci_import](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/luci_import/) | 🔍 | Import connected devices from OpenWRT | | |
| `MAINT` | [maintenance](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/maintenance/) | ⚙ | Maintenance of logs, etc. | | | | `MAINT` | [maintenance](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/maintenance/) | ⚙ | Maintenance of logs, etc. | | |
| `MQTT` | [_publisher_mqtt](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/_publisher_mqtt/) | ▶️ | MQTT for synching to Home Assistant | | | | `MQTT` | [_publisher_mqtt](https://github.com/netalertx/NetAlertX/tree/main/front/plugins/_publisher_mqtt/) | ▶️ | MQTT for synching to Home Assistant | | |

View File

@@ -66,8 +66,8 @@
"CustProps_cant_remove": "No es pot eliminar, es necessita una propietat mínim.", "CustProps_cant_remove": "No es pot eliminar, es necessita una propietat mínim.",
"DAYS_TO_KEEP_EVENTS_description": "Això és una configuració de manteniment. Especifica el nombre de dies que es conservaran els esdeveniments. Els esdeveniments antics s'esborraran periòdicament. També aplica als esdeveniments dels Connectors (Plugins).", "DAYS_TO_KEEP_EVENTS_description": "Això és una configuració de manteniment. Especifica el nombre de dies que es conservaran els esdeveniments. Els esdeveniments antics s'esborraran periòdicament. També aplica als esdeveniments dels Connectors (Plugins).",
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de", "DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
"DEEP_SLEEP_description": "", "DEEP_SLEEP_description": "Redueix l'ús de la CPU ampliant els temps d'espera inactiu entre els cicles de processament. Quan està activat, les exploracions es poden retardar fins a 1 minut i la interfície d'usuari pot ser menys sensible.",
"DEEP_SLEEP_name": "", "DEEP_SLEEP_name": "Son profund",
"DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.", "DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.",
"DISCOVER_PLUGINS_name": "Descobreix els plugins", "DISCOVER_PLUGINS_name": "Descobreix els plugins",
"DevDetail_Children_Title": "Relacions filles", "DevDetail_Children_Title": "Relacions filles",
@@ -141,7 +141,7 @@
"DevDetail_SessionTable_Duration": "Durada", "DevDetail_SessionTable_Duration": "Durada",
"DevDetail_SessionTable_IP": "IP", "DevDetail_SessionTable_IP": "IP",
"DevDetail_SessionTable_Order": "Ordre", "DevDetail_SessionTable_Order": "Ordre",
"DevDetail_Shortcut_CurrentStatus": "Estat actual", "DevDetail_Shortcut_CurrentStatus": "Estat",
"DevDetail_Shortcut_DownAlerts": "Aturar alertes", "DevDetail_Shortcut_DownAlerts": "Aturar alertes",
"DevDetail_Shortcut_Presence": "Presència", "DevDetail_Shortcut_Presence": "Presència",
"DevDetail_Shortcut_Sessions": "Sessions", "DevDetail_Shortcut_Sessions": "Sessions",
@@ -250,7 +250,7 @@
"Device_TableHead_NetworkSite": "Network Site", "Device_TableHead_NetworkSite": "Network Site",
"Device_TableHead_Owner": "Propietari", "Device_TableHead_Owner": "Propietari",
"Device_TableHead_ParentRelType": "Tipus de relació", "Device_TableHead_ParentRelType": "Tipus de relació",
"Device_TableHead_Parent_MAC": "Node pare de xarxa", "Device_TableHead_Parent_MAC": "Node pare",
"Device_TableHead_Port": "Port", "Device_TableHead_Port": "Port",
"Device_TableHead_PresentLastScan": "Presència", "Device_TableHead_PresentLastScan": "Presència",
"Device_TableHead_ReqNicsOnline": "Requereix NICs En línia", "Device_TableHead_ReqNicsOnline": "Requereix NICs En línia",
@@ -346,7 +346,7 @@
"Gen_LockedDB": "ERROR - DB podria estar bloquejada - Fes servir F12 Eines desenvolupament -> Consola o provar-ho més tard.", "Gen_LockedDB": "ERROR - DB podria estar bloquejada - Fes servir F12 Eines desenvolupament -> Consola o provar-ho més tard.",
"Gen_NetworkMask": "Màscara de xarxa", "Gen_NetworkMask": "Màscara de xarxa",
"Gen_New": "Nou", "Gen_New": "Nou",
"Gen_No_Data": "", "Gen_No_Data": "Sense dades",
"Gen_Offline": "Fora de línia", "Gen_Offline": "Fora de línia",
"Gen_Okay": "Ok", "Gen_Okay": "Ok",
"Gen_Online": "En línia", "Gen_Online": "En línia",

View File

@@ -382,13 +382,13 @@
"HRS_TO_KEEP_NEWDEV_name": "Odstranit nová zařízení po", "HRS_TO_KEEP_NEWDEV_name": "Odstranit nová zařízení po",
"HRS_TO_KEEP_OFFDEV_description": "Toto je údržbářské nastavení <b>ODSTRANĚNÍ zařízení</b>. Pokud je povoleno (<code>0</code> zakázáno), zařízení <b>Offline</b> s jejich datumem <b>Posledního připojení</b> starším, než uvedené hodiny v tomto nastavení, budou odstraněna. Použijte toto nastavení, pokud chcete automaticky mazat <b>Offline zařízení</b> po uplynutí <code>X</code> hodin offline.", "HRS_TO_KEEP_OFFDEV_description": "Toto je údržbářské nastavení <b>ODSTRANĚNÍ zařízení</b>. Pokud je povoleno (<code>0</code> zakázáno), zařízení <b>Offline</b> s jejich datumem <b>Posledního připojení</b> starším, než uvedené hodiny v tomto nastavení, budou odstraněna. Použijte toto nastavení, pokud chcete automaticky mazat <b>Offline zařízení</b> po uplynutí <code>X</code> hodin offline.",
"HRS_TO_KEEP_OFFDEV_name": "Odstranit offline zařízení po", "HRS_TO_KEEP_OFFDEV_name": "Odstranit offline zařízení po",
"LOADED_PLUGINS_description": "", "LOADED_PLUGINS_description": "Které pluginy načíst. Přidávání pluginů může aplikaci zpomalit. Přečtěte si více o pluginech, které musí být povoleny, o typech, nebo o scannovacích moźnostech v <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">dokumentaci pluginů</a>. Odpojené pluginy ztratí vaše nastavení. Pouze <code>deaktivované</code> pluginy mohou být odpojeny.",
"LOADED_PLUGINS_name": "Načtené pluginy", "LOADED_PLUGINS_name": "Načtené pluginy",
"LOG_LEVEL_description": "Toto nastavení způsobí více detailní logování. To je užitečné pro ladění událostí zapisujících do databáze.", "LOG_LEVEL_description": "Toto nastavení způsobí více detailní logování. To je užitečné pro ladění událostí zapisujících do databáze.",
"LOG_LEVEL_name": "Vypisovat dodatečné logování", "LOG_LEVEL_name": "Vypisovat dodatečné logování",
"Loading": "Načítání…", "Loading": "Načítání…",
"Login_Box": "Zadejte vaše heslo", "Login_Box": "Zadejte vaše heslo",
"Login_Default_PWD": "", "Login_Default_PWD": "Výchozí heslo \"123456\" je stále aktivní.",
"Login_Info": "Hesla jsou nastavována přes Set Password plugin. Zkontrolujte <a target=\"_blank\" href=\"https://github.com/netalertx/NetAlertX/tree/main/front/plugins/set_password\">dokumentaci SETPWD</a>, pokud máte potíže s přihlášením.", "Login_Info": "Hesla jsou nastavována přes Set Password plugin. Zkontrolujte <a target=\"_blank\" href=\"https://github.com/netalertx/NetAlertX/tree/main/front/plugins/set_password\">dokumentaci SETPWD</a>, pokud máte potíže s přihlášením.",
"Login_Psw-box": "Heslo", "Login_Psw-box": "Heslo",
"Login_Psw_alert": "Upozornění na heslo!", "Login_Psw_alert": "Upozornění na heslo!",
@@ -437,32 +437,32 @@
"Maintenance_Tool_UnlockFields_text": "Tento nástroj odstraní všechny zdrojové hodnoty ze všech sledovaných polí pro všechna zařízení, čímž efektivně odemkne všechna pole pro pluginy a uživatele. Používejte jej opatrně, protože to ovlivní celý inventář vašich zařízení.", "Maintenance_Tool_UnlockFields_text": "Tento nástroj odstraní všechny zdrojové hodnoty ze všech sledovaných polí pro všechna zařízení, čímž efektivně odemkne všechna pole pro pluginy a uživatele. Používejte jej opatrně, protože to ovlivní celý inventář vašich zařízení.",
"Maintenance_Tool_arpscansw": "Přepnout ARP sken (zapnuto/vypnuto)", "Maintenance_Tool_arpscansw": "Přepnout ARP sken (zapnuto/vypnuto)",
"Maintenance_Tool_arpscansw_noti": "Přepne ARP sken na zapnuto nebo vypnuto", "Maintenance_Tool_arpscansw_noti": "Přepne ARP sken na zapnuto nebo vypnuto",
"Maintenance_Tool_arpscansw_noti_text": "Pokud je scan vypnut, zůstává vypnutý do opětovné aktivace.", "Maintenance_Tool_arpscansw_noti_text": "Pokud je sken vypnut, zůstává vypnutý do opětovné aktivace.",
"Maintenance_Tool_arpscansw_text": "", "Maintenance_Tool_arpscansw_text": "Přepíná ARP-SCAN na zapnuto, nebo vypnuto. Jakmile je skenování vypnuto, zůstává vypnuto, dokud není znovu aktivováno. Aktivní skenování nejsou přerušena.",
"Maintenance_Tool_backup": "", "Maintenance_Tool_backup": "Záloha DB",
"Maintenance_Tool_backup_noti": "", "Maintenance_Tool_backup_noti": "Záloha DB",
"Maintenance_Tool_backup_noti_text": "", "Maintenance_Tool_backup_noti_text": "Opravdu chcete spustit zálohu DB? Ujistěte se, že neběží žádný sken.",
"Maintenance_Tool_backup_text": "", "Maintenance_Tool_backup_text": "Databázové zálohy jsou umístěny v databázovém adresáři jako ZIP archiv pojmenovaný podle jeho data vytvoření. Počet backupů není limitován.",
"Maintenance_Tool_check_visible": "", "Maintenance_Tool_check_visible": "Odšrktněte pro skrytí sloupce.",
"Maintenance_Tool_clearSourceFields_selected": "", "Maintenance_Tool_clearSourceFields_selected": "Vymazat zrojové položky",
"Maintenance_Tool_clearSourceFields_selected_noti": "", "Maintenance_Tool_clearSourceFields_selected_noti": "Vymazat zdroje",
"Maintenance_Tool_clearSourceFields_selected_text": "", "Maintenance_Tool_clearSourceFields_selected_text": "Toto vymaže všechny zdrojové položky zvolených zařízení. Tuto akci nelze vrátit zpět.",
"Maintenance_Tool_darkmode": "", "Maintenance_Tool_darkmode": "Přepnutí režimů (Tmavý/Světlý)",
"Maintenance_Tool_darkmode_noti": "", "Maintenance_Tool_darkmode_noti": "Přepnutí režimů",
"Maintenance_Tool_darkmode_noti_text": "", "Maintenance_Tool_darkmode_noti_text": "Po změně tématu se stránka pokusí znovu načíst pro aktivaci změn. Pokud bude potřeba, musí být vymazána cache.",
"Maintenance_Tool_darkmode_text": "", "Maintenance_Tool_darkmode_text": "Přepíná mezi tmavým a světlým režimem. Pokud přepínač nefunguje správně, zkuste vymazat cache prohlížeče. Změny jsou provedeny na straně serveru, takže ovlivňují všechna použitá zařízení.",
"Maintenance_Tool_del_ActHistory": "", "Maintenance_Tool_del_ActHistory": "Odstranění síťové aktivity",
"Maintenance_Tool_del_ActHistory_noti": "", "Maintenance_Tool_del_ActHistory_noti": "Odstranit síťovou aktivitu",
"Maintenance_Tool_del_ActHistory_noti_text": "", "Maintenance_Tool_del_ActHistory_noti_text": "Opravdu chcete resetovat síťovou aktivitu?",
"Maintenance_Tool_del_ActHistory_text": "", "Maintenance_Tool_del_ActHistory_text": "Grafy síťové aktivity byly resetovány. Toto neovlivní události.",
"Maintenance_Tool_del_alldev": "", "Maintenance_Tool_del_alldev": "Odstanit všechna zařízení",
"Maintenance_Tool_del_alldev_noti": "", "Maintenance_Tool_del_alldev_noti": "Odstranit zařízení",
"Maintenance_Tool_del_alldev_noti_text": "", "Maintenance_Tool_del_alldev_noti_text": "Opravdu chcete odstranit všechna zařízení?",
"Maintenance_Tool_del_alldev_text": "", "Maintenance_Tool_del_alldev_text": "Před použitím této funkce prosím proveďte zálohu. Odstranění nelze vrátit zpět. Všechna zařízení budou z databáze odstraněna.",
"Maintenance_Tool_del_allevents": "", "Maintenance_Tool_del_allevents": "Odstranit události (reset přítomnosti)",
"Maintenance_Tool_del_allevents30": "", "Maintenance_Tool_del_allevents30": "Odstranit všechny události staří 30 dní",
"Maintenance_Tool_del_allevents30_noti": "", "Maintenance_Tool_del_allevents30_noti": "Odstranit události",
"Maintenance_Tool_del_allevents30_noti_text": "", "Maintenance_Tool_del_allevents30_noti_text": "Opravdu chcete odstranit všechny události starší 30 dní? Toto vyresetuje přítomnost všech zařízení.",
"Maintenance_Tool_del_allevents30_text": "", "Maintenance_Tool_del_allevents30_text": "",
"Maintenance_Tool_del_allevents_noti": "", "Maintenance_Tool_del_allevents_noti": "",
"Maintenance_Tool_del_allevents_noti_text": "", "Maintenance_Tool_del_allevents_noti_text": "",

View File

@@ -37,7 +37,7 @@
"BackDevDetail_Tools_WOL_error": "O comando NÃO foi executado.", "BackDevDetail_Tools_WOL_error": "O comando NÃO foi executado.",
"BackDevDetail_Tools_WOL_okay": "O comando foi executado.", "BackDevDetail_Tools_WOL_okay": "O comando foi executado.",
"BackDevices_Arpscan_disabled": "Análise Arp Desativada", "BackDevices_Arpscan_disabled": "Análise Arp Desativada",
"BackDevices_Arpscan_enabled": "Análise ARP Ativada", "BackDevices_Arpscan_enabled": "Análise Arp Ativada",
"BackDevices_Backup_CopError": "A base da dados original não pode ser gravada.", "BackDevices_Backup_CopError": "A base da dados original não pode ser gravada.",
"BackDevices_Backup_Failed": "A copia de segurança foi parcialmente executada. O arquivo não pode ser criado ou está vazio.", "BackDevices_Backup_Failed": "A copia de segurança foi parcialmente executada. O arquivo não pode ser criado ou está vazio.",
"BackDevices_Backup_okay": "A copia de segurança foi feita executado corretamente com o novo arquivo", "BackDevices_Backup_okay": "A copia de segurança foi feita executado corretamente com o novo arquivo",
@@ -61,14 +61,14 @@
"BackDevices_Restore_okay": "Restauração executada com sucesso.", "BackDevices_Restore_okay": "Restauração executada com sucesso.",
"BackDevices_darkmode_disabled": "Modo Noturno Desativado", "BackDevices_darkmode_disabled": "Modo Noturno Desativado",
"BackDevices_darkmode_enabled": "Modo Noturno Ativado", "BackDevices_darkmode_enabled": "Modo Noturno Ativado",
"CLEAR_NEW_FLAG_description": "Se ativado (<code>0</code> está desativado), dispositivos marcados como<b>Novo Dispositivo</b> serão desmarcados se o limite (especificado em horas) exceder o tempo da <b>Primeira Sessão </b>.", "CLEAR_NEW_FLAG_description": "Se ativado (<code>0</code> está desativado), dispositivos marcados como <b>Novo Dispositivo</b> serão desmarcados se o limite (especificado em horas) exceder o tempo da <b>Primeira Sessão</b>.",
"CLEAR_NEW_FLAG_name": "Limpar a flag nova", "CLEAR_NEW_FLAG_name": "Limpar a flag nova",
"CustProps_cant_remove": "Não é possível remover, é necessária pelo menos uma propriedade.", "CustProps_cant_remove": "Não é possível remover, é necessária pelo menos uma propriedade.",
"DAYS_TO_KEEP_EVENTS_description": "Esta é uma definição de manutenção. Especifica o número de dias de entradas de eventos que serão mantidas. Todos os eventos mais antigos serão apagados periodicamente. Também se aplica ao Histórico de eventos do plug-in.", "DAYS_TO_KEEP_EVENTS_description": "Esta é uma definição de manutenção. Especifica o número de dias de entradas de eventos que serão mantidas. Todos os eventos mais antigos serão apagados periodicamente. Também se aplica ao Histórico de eventos do plug-in.",
"DAYS_TO_KEEP_EVENTS_name": "Apagar eventos mais antigos que", "DAYS_TO_KEEP_EVENTS_name": "Apagar eventos mais antigos que",
"DEEP_SLEEP_description": "", "DEEP_SLEEP_description": "Diminui a utilização do CPU ao prolongar tempos de espera ociosos entre ciclos de processamento. Quando ativo, análises podem ser atrasadas por até 1 minuto e o UI pode ficar menos responsivo.",
"DEEP_SLEEP_name": "", "DEEP_SLEEP_name": "Sleep profundo",
"DISCOVER_PLUGINS_description": "Desative esta opção para acelerar a inicialização e a gravação de definições. Quando desativada, os plug-ins não são descobertos e não é possível adicionar novos plug-ins à definição<code>LOADED_PLUGINS</code>.", "DISCOVER_PLUGINS_description": "Desative esta opção para acelerar a inicialização e a gravação de definições. Quando desativada, os plug-ins não são descobertos e não é possível adicionar novos plug-ins à definição <code>LOADED_PLUGINS</code>.",
"DISCOVER_PLUGINS_name": "Descobrir plugins", "DISCOVER_PLUGINS_name": "Descobrir plugins",
"DevDetail_Children_Title": "Relacionamentos de crianças", "DevDetail_Children_Title": "Relacionamentos de crianças",
"DevDetail_Copy_Device_Title": "Copiar pormenores do dispositivo", "DevDetail_Copy_Device_Title": "Copiar pormenores do dispositivo",
@@ -98,7 +98,7 @@
"DevDetail_MainInfo_Location": "Localização", "DevDetail_MainInfo_Location": "Localização",
"DevDetail_MainInfo_Name": "Nome", "DevDetail_MainInfo_Name": "Nome",
"DevDetail_MainInfo_Network": "<i class=\"fa fa-server\"> </i> Node (MAC)", "DevDetail_MainInfo_Network": "<i class=\"fa fa-server\"> </i> Node (MAC)",
"DevDetail_MainInfo_Network_Port": "<i class=\"fa fa-ethernet\"></i>Porta", "DevDetail_MainInfo_Network_Port": "<i class=\"fa fa-ethernet\"></i> Porta",
"DevDetail_MainInfo_Network_Site": "Site", "DevDetail_MainInfo_Network_Site": "Site",
"DevDetail_MainInfo_Network_Title": "Detalhes de Rede", "DevDetail_MainInfo_Network_Title": "Detalhes de Rede",
"DevDetail_MainInfo_Owner": "Proprietário", "DevDetail_MainInfo_Owner": "Proprietário",
@@ -249,8 +249,8 @@
"Device_TableHead_Name": "Nome", "Device_TableHead_Name": "Nome",
"Device_TableHead_NetworkSite": "Site da rede", "Device_TableHead_NetworkSite": "Site da rede",
"Device_TableHead_Owner": "Proprietário", "Device_TableHead_Owner": "Proprietário",
"Device_TableHead_ParentRelType": "Tipo de relação", "Device_TableHead_ParentRelType": "Relação",
"Device_TableHead_Parent_MAC": "Node de rede anterior", "Device_TableHead_Parent_MAC": "Nó parente",
"Device_TableHead_Port": "Porta", "Device_TableHead_Port": "Porta",
"Device_TableHead_PresentLastScan": "Presença", "Device_TableHead_PresentLastScan": "Presença",
"Device_TableHead_ReqNicsOnline": "Exigir NICs online", "Device_TableHead_ReqNicsOnline": "Exigir NICs online",
@@ -341,7 +341,7 @@
"Gen_Filter": "Filtro", "Gen_Filter": "Filtro",
"Gen_Flapping": "Flapping", "Gen_Flapping": "Flapping",
"Gen_Generate": "Gerar", "Gen_Generate": "Gerar",
"Gen_InvalidMac": "Endereço MAC Inválido.", "Gen_InvalidMac": "Endereço Mac inválido.",
"Gen_Invalid_Value": "Um valor inválido foi inserido", "Gen_Invalid_Value": "Um valor inválido foi inserido",
"Gen_LockedDB": "ERRO - A base de dados pode estar bloqueada - Verifique F12 Ferramentas de desenvolvimento -> Console ou tente mais tarde.", "Gen_LockedDB": "ERRO - A base de dados pode estar bloqueada - Verifique F12 Ferramentas de desenvolvimento -> Console ou tente mais tarde.",
"Gen_NetworkMask": "Máscara de Rede", "Gen_NetworkMask": "Máscara de Rede",
@@ -350,7 +350,7 @@
"Gen_Offline": "Offline", "Gen_Offline": "Offline",
"Gen_Okay": "Ok", "Gen_Okay": "Ok",
"Gen_Online": "Online", "Gen_Online": "Online",
"Gen_Purge": "Purge", "Gen_Purge": "Purgar",
"Gen_ReadDocs": "Leia mais em documentos.", "Gen_ReadDocs": "Leia mais em documentos.",
"Gen_Remove_All": "Remover tudo", "Gen_Remove_All": "Remover tudo",
"Gen_Remove_Last": "Remover o último", "Gen_Remove_Last": "Remover o último",
@@ -403,7 +403,7 @@
"Login_Toggle_Info_headline": "Informações sobre a palavra-passe", "Login_Toggle_Info_headline": "Informações sobre a palavra-passe",
"Maint_PurgeLog": "Limpar o registo", "Maint_PurgeLog": "Limpar o registo",
"Maint_RestartServer": "Reiniciar o servidor", "Maint_RestartServer": "Reiniciar o servidor",
"Maint_Restart_Server_noti_text": "Tem certeza de que deseja reiniciar o servidor backend? Isto pode causar inconsistência na app. Faça primeiro um backup da sua configuração. <br/> <br/> Nota: Isto pode levar alguns minutos.", "Maint_Restart_Server_noti_text": "Tem a certeza que quer reiniciar o servidor backend? Isto pode causar inconsistências na aplicação. Crie uma cópia de segurança primeiro. <br/><br/> Nota: isto pode demorar alguns minutos.",
"Maintenance_InitCheck": "Verificação inicial", "Maintenance_InitCheck": "Verificação inicial",
"Maintenance_InitCheck_Checking": "A verificar…", "Maintenance_InitCheck_Checking": "A verificar…",
"Maintenance_InitCheck_QuickSetupGuide": "Certifique-se de que seguiu o <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">guia de configuração rápida</a>.", "Maintenance_InitCheck_QuickSetupGuide": "Certifique-se de que seguiu o <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">guia de configuração rápida</a>.",
@@ -495,7 +495,7 @@
"Maintenance_Tool_upgrade_database_noti_text": "Tem certeza de que deseja atualizar a base de dados?<br>(talvez prefira arquivá-la)", "Maintenance_Tool_upgrade_database_noti_text": "Tem certeza de que deseja atualizar a base de dados?<br>(talvez prefira arquivá-la)",
"Maintenance_Tool_upgrade_database_text": "Este botão atualizará a base de dados para ativar o gráfico Atividade de rede nas últimas 12 horas. Faça uma cópia de segurança da sua base de dados em caso de problemas.", "Maintenance_Tool_upgrade_database_text": "Este botão atualizará a base de dados para ativar o gráfico Atividade de rede nas últimas 12 horas. Faça uma cópia de segurança da sua base de dados em caso de problemas.",
"Maintenance_Tools_Tab_BackupRestore": "Backup / Restauração", "Maintenance_Tools_Tab_BackupRestore": "Backup / Restauração",
"Maintenance_Tools_Tab_Logging": "Logs", "Maintenance_Tools_Tab_Logging": "Registos",
"Maintenance_Tools_Tab_Settings": "Configurações", "Maintenance_Tools_Tab_Settings": "Configurações",
"Maintenance_Tools_Tab_Tools": "Ferramentas", "Maintenance_Tools_Tab_Tools": "Ferramentas",
"Maintenance_Tools_Tab_UISettings": "Configurações de interface", "Maintenance_Tools_Tab_UISettings": "Configurações de interface",
@@ -503,7 +503,7 @@
"Maintenance_arp_status_off": "está atualmente desativado", "Maintenance_arp_status_off": "está atualmente desativado",
"Maintenance_arp_status_on": "Scan em curso", "Maintenance_arp_status_on": "Scan em curso",
"Maintenance_built_on": "Construído em", "Maintenance_built_on": "Construído em",
"Maintenance_current_version": "Você está atualizado. Confira o que <a href=\"https://github.com/netalertx/NetAlertX/issues/138\" target=\"_blank\"> estou a trabalhar em</a>.", "Maintenance_current_version": "Você está atualizado. Confira no que é que <a href=\"https://github.com/netalertx/NetAlertX/issues/138\" target=\"_blank\">estou a trabalhar em</a>.",
"Maintenance_database_backup": "Backups DB", "Maintenance_database_backup": "Backups DB",
"Maintenance_database_backup_found": "foram encontrados backups", "Maintenance_database_backup_found": "foram encontrados backups",
"Maintenance_database_backup_total": "uso total do disco", "Maintenance_database_backup_total": "uso total do disco",
@@ -538,7 +538,7 @@
"Navigation_Report": "Reports enviados", "Navigation_Report": "Reports enviados",
"Navigation_Settings": "Definições", "Navigation_Settings": "Definições",
"Navigation_SystemInfo": "Informação de sistema", "Navigation_SystemInfo": "Informação de sistema",
"Navigation_Workflows": "Workflows", "Navigation_Workflows": "Fluxos de Trabalho",
"Network_Assign": "Conectar ao nodo de network <i class=\"fa fa-server\"></i> em cima", "Network_Assign": "Conectar ao nodo de network <i class=\"fa fa-server\"></i> em cima",
"Network_Cant_Assign": "Não é possível atribuir o node raiz da Internet como um node folha filho.", "Network_Cant_Assign": "Não é possível atribuir o node raiz da Internet como um node folha filho.",
"Network_Cant_Assign_No_Node_Selected": "Não é possível atribuir, nenhum node pai selecionado.", "Network_Cant_Assign_No_Node_Selected": "Não é possível atribuir, nenhum node pai selecionado.",
@@ -565,13 +565,13 @@
"Network_ManageEdit_Name": "Novo nome de dispositivo", "Network_ManageEdit_Name": "Novo nome de dispositivo",
"Network_ManageEdit_Name_text": "Nome sem caracteres especiais", "Network_ManageEdit_Name_text": "Nome sem caracteres especiais",
"Network_ManageEdit_Port": " Nova contagem de portas", "Network_ManageEdit_Port": " Nova contagem de portas",
"Network_ManageEdit_Port_text": "Deixe em branco para Wi-Fi e Powerline.", "Network_ManageEdit_Port_text": "Deixe em branco para Wi-Fi e Powerline",
"Network_ManageEdit_Submit": "Guardar Alterações", "Network_ManageEdit_Submit": "Guardar Alterações",
"Network_ManageEdit_Type": "Novo tipo de dispositivo", "Network_ManageEdit_Type": "Novo tipo de dispositivo",
"Network_ManageEdit_Type_text": "-- Selecionar tipo --", "Network_ManageEdit_Type_text": "-- Selecionar tipo --",
"Network_ManageLeaf": "Gerir atribuição", "Network_ManageLeaf": "Gerir atribuição",
"Network_ManageUnassign": "Cancelar Atribuição", "Network_ManageUnassign": "Cancelar Atribuição",
"Network_NoAssignedDevices": "Este nó de rede não tem quaisquer dispositivos atribuídos (nós folha). Atribua um abaixo ou vá ao separador <b><i class=\"fa fa-info-circle\"> Detalhes</b> em qualquer dispositivo em <a href=\"devices.php\"><b><i class=\"fa fa-laptop\"></i> Dispositivos</b></a>, e atribua-o a um <i <b><i class=\"fa fa-server\"></i> Nó de rede (MAC)</b> e <b><i class=\"fa fa-ethernet\"></i> Porta</b> lá.", "Network_NoAssignedDevices": "Este nó de rede não tem quaisquer dispositivos atribuídos (nós folha). Atribua um abaixo ou vá à aba <b><i class=\"fa fa-info-circle\"></i> Detalhes</b> de qualquer dispositivo em <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Dispositivos</b></a>, e atribua os mesmos a uma rede <b><i class=\"fa fa-server\"></i> Nó (MAC)</b> e <b><i class=\"fa fa-ethernet\"></i> Porta</b> lá.",
"Network_NoDevices": "Sem dispositivos para configurar", "Network_NoDevices": "Sem dispositivos para configurar",
"Network_Node": "Nó de rede", "Network_Node": "Nó de rede",
"Network_Node_Name": "Nome do nó", "Network_Node_Name": "Nome do nó",
@@ -629,183 +629,183 @@
"REFRESH_FQDN_description": "Reanalisa todos os dispositivos e atualiza o seu Nome de Domínio Qualificado Completo (FQDN). Se estiver desativado, apenas dispositivos sem um nome conhecido serão analisados para melhorar o desempenho. Neste caso, FQDN é atualizado apenas durante a descoberta de dispositivos inicial.", "REFRESH_FQDN_description": "Reanalisa todos os dispositivos e atualiza o seu Nome de Domínio Qualificado Completo (FQDN). Se estiver desativado, apenas dispositivos sem um nome conhecido serão analisados para melhorar o desempenho. Neste caso, FQDN é atualizado apenas durante a descoberta de dispositivos inicial.",
"REFRESH_FQDN_name": "Atualizar FQDN", "REFRESH_FQDN_name": "Atualizar FQDN",
"REPORT_DASHBOARD_URL_description": "Este URL é usado como base para gerar links nos relatórios HTML (p.ex.: emails). Introduza o URL começado com <code>http://</code> incluindo o número da porta (sem barra final <code>/</code>).", "REPORT_DASHBOARD_URL_description": "Este URL é usado como base para gerar links nos relatórios HTML (p.ex.: emails). Introduza o URL começado com <code>http://</code> incluindo o número da porta (sem barra final <code>/</code>).",
"REPORT_DASHBOARD_URL_name": "", "REPORT_DASHBOARD_URL_name": "URL NetAlertX",
"REPORT_ERROR": "", "REPORT_ERROR": "A página que procura está indisponível temporariamente, por favor tente outra vez após alguns segundos",
"REPORT_MAIL_description": "", "REPORT_MAIL_description": "Se ativo, um email é enviado com uma lista de mudanças às quais subscreveu. Por favor preencha também todas as definições relacionadas com a configuração SMTP abaixo. Se está a encontrar problemas, defina <code>LOG_LEVEL</code> para <code>debug</code> e verifique o <a href=\"/maintenance.php#tab_Logging\">registo de erros</a>.",
"REPORT_MAIL_name": "", "REPORT_MAIL_name": "Ativar email",
"REPORT_TITLE": "", "REPORT_TITLE": "Reportar",
"RandomMAC_hover": "", "RandomMAC_hover": "Este dispositivo tem um endereço MAC aleatório",
"Reports_Sent_Log": "", "Reports_Sent_Log": "Registo de relatórios enviado",
"SCAN_SUBNETS_description": "", "SCAN_SUBNETS_description": "A maior parte dos scanners on-network (ARP-SCAN, NMAP, NSLOOKUP, DIG) baseiam-se em scanear interfaces de rede específicas e subredes. Veja a <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">documentação de subredes</a> para ajudar com esta definição, especialmente VLANs, quais VLANs são suportadas, ou como descobrir a máscara de rede e a sua interface. <br/> <br/> Uma alternativa a scanners on-network é ativar outro scanner de dispositivos/importadores que não dependam do NetAlert<sup>X</sup> tenha acesso à rede (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Nota: O tempo de scaneamento em si depende do número de endereços de IP a verificar, por isso configure isto com cuidado com a máscara e interface de rede apropriadas.",
"SCAN_SUBNETS_name": "", "SCAN_SUBNETS_name": "Redes a scanear",
"SYSTEM_TITLE": "", "SYSTEM_TITLE": "Informação de Sistema",
"Setting_Override": "", "Setting_Override": "Sobrescrever valor",
"Setting_Override_Description": "", "Setting_Override_Description": "Ativar esta opção irá sobrescrever o valor predefinido pela App com o valor especificado acima.",
"Settings_Metadata_Toggle": "", "Settings_Metadata_Toggle": "Mostrar/esconder metadados para definição especificada.",
"Settings_Show_Description": "", "Settings_Show_Description": "Mostrar descrição",
"Settings_device_Scanners_desync": "", "Settings_device_Scanners_desync": "⚠ Os horários de procura de dispositivos estão dessincronizados.",
"Settings_device_Scanners_desync_popup": "", "Settings_device_Scanners_desync_popup": "Horários de scanners de dispositivos (<code>*_RUN_SCHD</code>) não são o mesmo. Isto resultará em notificações de dispositivo online/offline inconsistentes. A menos que isto seja intencional, por favor use o mesmo horário para todos os <b>🔍scanners de dispositivos</b> ativos.",
"Speedtest_Results": "", "Speedtest_Results": "Resultados do Teste de Velocidade",
"Systeminfo_AvailableIps": "", "Systeminfo_AvailableIps": "IPs Disponíveis",
"Systeminfo_CPU": "", "Systeminfo_CPU": "CPU",
"Systeminfo_CPU_Cores": "", "Systeminfo_CPU_Cores": "Cores CPU:",
"Systeminfo_CPU_Name": "", "Systeminfo_CPU_Name": "Nome do CPU:",
"Systeminfo_CPU_Speed": "", "Systeminfo_CPU_Speed": "Velocidade do CPU:",
"Systeminfo_CPU_Temp": "", "Systeminfo_CPU_Temp": "Temperatura do CPU:",
"Systeminfo_CPU_Vendor": "", "Systeminfo_CPU_Vendor": "Fornecedor do CPU:",
"Systeminfo_Client_Resolution": "", "Systeminfo_Client_Resolution": "Resolução do Browser:",
"Systeminfo_Client_User_Agent": "", "Systeminfo_Client_User_Agent": "Agente do Utilizador:",
"Systeminfo_General": "", "Systeminfo_General": "Geral",
"Systeminfo_General_Date": "", "Systeminfo_General_Date": "Data:",
"Systeminfo_General_Date2": "", "Systeminfo_General_Date2": "Data2:",
"Systeminfo_General_Full_Date": "", "Systeminfo_General_Full_Date": "Data Completa:",
"Systeminfo_General_TimeZone": "", "Systeminfo_General_TimeZone": "Fuso Horário:",
"Systeminfo_Memory": "", "Systeminfo_Memory": "Memória",
"Systeminfo_Memory_Total_Memory": "", "Systeminfo_Memory_Total_Memory": "Memória total:",
"Systeminfo_Memory_Usage": "", "Systeminfo_Memory_Usage": "Utilização de memória:",
"Systeminfo_Memory_Usage_Percent": "", "Systeminfo_Memory_Usage_Percent": "Memória %:",
"Systeminfo_Motherboard": "", "Systeminfo_Motherboard": "Motherboard",
"Systeminfo_Motherboard_BIOS": "", "Systeminfo_Motherboard_BIOS": "BIOS:",
"Systeminfo_Motherboard_BIOS_Date": "", "Systeminfo_Motherboard_BIOS_Date": "Data da BIOS:",
"Systeminfo_Motherboard_BIOS_Vendor": "", "Systeminfo_Motherboard_BIOS_Vendor": "Fabricante da BIOS:",
"Systeminfo_Motherboard_Manufactured": "", "Systeminfo_Motherboard_Manufactured": "Fabricado por:",
"Systeminfo_Motherboard_Name": "", "Systeminfo_Motherboard_Name": "Nome:",
"Systeminfo_Motherboard_Revision": "", "Systeminfo_Motherboard_Revision": "Revisão:",
"Systeminfo_Network": "", "Systeminfo_Network": "Rede",
"Systeminfo_Network_Accept_Encoding": "", "Systeminfo_Network_Accept_Encoding": "Aceitar codificação:",
"Systeminfo_Network_Accept_Language": "", "Systeminfo_Network_Accept_Language": "Aceitar idioma:",
"Systeminfo_Network_Connection_Port": "", "Systeminfo_Network_Connection_Port": "Porta de conexão:",
"Systeminfo_Network_HTTP_Host": "", "Systeminfo_Network_HTTP_Host": "Anfitrião HTTP:",
"Systeminfo_Network_HTTP_Referer": "", "Systeminfo_Network_HTTP_Referer": "Referenciador HTTP:",
"Systeminfo_Network_HTTP_Referer_String": "", "Systeminfo_Network_HTTP_Referer_String": "Nenhum referenciador HTTP",
"Systeminfo_Network_Hardware": "", "Systeminfo_Network_Hardware": "Hardware de Rede",
"Systeminfo_Network_Hardware_Interface_Mask": "", "Systeminfo_Network_Hardware_Interface_Mask": "Máscara de Rede",
"Systeminfo_Network_Hardware_Interface_Name": "", "Systeminfo_Network_Hardware_Interface_Name": "Nome da Interface",
"Systeminfo_Network_Hardware_Interface_RX": "", "Systeminfo_Network_Hardware_Interface_RX": "Recebido",
"Systeminfo_Network_Hardware_Interface_TX": "", "Systeminfo_Network_Hardware_Interface_TX": "Transmitido",
"Systeminfo_Network_IP": "", "Systeminfo_Network_IP": "Internet IP:",
"Systeminfo_Network_IP_Connection": "", "Systeminfo_Network_IP_Connection": "Conexão IP:",
"Systeminfo_Network_IP_Server": "", "Systeminfo_Network_IP_Server": "IP do Servidor:",
"Systeminfo_Network_MIME": "", "Systeminfo_Network_MIME": "MIME:",
"Systeminfo_Network_Request_Method": "", "Systeminfo_Network_Request_Method": "Método do Pedido:",
"Systeminfo_Network_Request_Time": "", "Systeminfo_Network_Request_Time": "Tempo do pedido:",
"Systeminfo_Network_Request_URI": "", "Systeminfo_Network_Request_URI": "URI do Pedido:",
"Systeminfo_Network_Secure_Connection": "", "Systeminfo_Network_Secure_Connection": "Ligação segura:",
"Systeminfo_Network_Secure_Connection_String": "", "Systeminfo_Network_Secure_Connection_String": "Sem (HTTP)",
"Systeminfo_Network_Server_Name": "", "Systeminfo_Network_Server_Name": "Nome do servidor:",
"Systeminfo_Network_Server_Name_String": "", "Systeminfo_Network_Server_Name_String": "Nome de servidor não encontrado",
"Systeminfo_Network_Server_Query": "", "Systeminfo_Network_Server_Query": "Consulta de servidor:",
"Systeminfo_Network_Server_Query_String": "", "Systeminfo_Network_Server_Query_String": "Nenhuma string de consulta",
"Systeminfo_Network_Server_Version": "", "Systeminfo_Network_Server_Version": "Versão do Servidor:",
"Systeminfo_Services": "", "Systeminfo_Services": "Serviços",
"Systeminfo_Services_Description": "", "Systeminfo_Services_Description": "Descrição do Serviço",
"Systeminfo_Services_Name": "", "Systeminfo_Services_Name": "Nome do Serviço",
"Systeminfo_Storage": "", "Systeminfo_Storage": "Armazenamento",
"Systeminfo_Storage_Device": "", "Systeminfo_Storage_Device": "Dispositivo:",
"Systeminfo_Storage_Mount": "", "Systeminfo_Storage_Mount": "Ponto de montagem:",
"Systeminfo_Storage_Size": "", "Systeminfo_Storage_Size": "Tamanho:",
"Systeminfo_Storage_Type": "", "Systeminfo_Storage_Type": "Tipo:",
"Systeminfo_Storage_Usage": "", "Systeminfo_Storage_Usage": "Utilização de armazenamento",
"Systeminfo_Storage_Usage_Free": "", "Systeminfo_Storage_Usage_Free": "Livre:",
"Systeminfo_Storage_Usage_Mount": "", "Systeminfo_Storage_Usage_Mount": "Ponto de montagem:",
"Systeminfo_Storage_Usage_Total": "", "Systeminfo_Storage_Usage_Total": "Total:",
"Systeminfo_Storage_Usage_Used": "", "Systeminfo_Storage_Usage_Used": "Usado:",
"Systeminfo_System": "", "Systeminfo_System": "Sistema",
"Systeminfo_System_AVG": "", "Systeminfo_System_AVG": "Média de carregamento:",
"Systeminfo_System_Architecture": "", "Systeminfo_System_Architecture": "Arquitetura:",
"Systeminfo_System_Kernel": "", "Systeminfo_System_Kernel": "Kernel:",
"Systeminfo_System_OSVersion": "", "Systeminfo_System_OSVersion": "Sistema Operativo:",
"Systeminfo_System_Running_Processes": "", "Systeminfo_System_Running_Processes": "Processos em execução:",
"Systeminfo_System_System": "", "Systeminfo_System_System": "Sistema:",
"Systeminfo_System_Uname": "", "Systeminfo_System_Uname": "Uname:",
"Systeminfo_System_Uptime": "", "Systeminfo_System_Uptime": "Tempo de atividade:",
"Systeminfo_This_Client": "", "Systeminfo_This_Client": "Este Cliente",
"Systeminfo_USB_Devices": "", "Systeminfo_USB_Devices": "Dispositivos USB",
"TICKER_MIGRATE_TO_NETALERTX": "", "TICKER_MIGRATE_TO_NETALERTX": "⚠ Antigos locais de montagem detetados. Siga <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">este guia</a> para migrar as novas pastas <code>/data/config</code> e <code>/data/db</code> e o contentor <code>netalertx</code>.",
"TIMEZONE_description": "", "TIMEZONE_description": "Fuso horário para mostras estatísticas corretamente. Encontre o seu fuso horário <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">aqui</a>.",
"TIMEZONE_name": "", "TIMEZONE_name": "Fuso horário",
"UI_DEV_SECTIONS_description": "", "UI_DEV_SECTIONS_description": "Selecione quais elementos UI a esconder na página de dispositivos.",
"UI_DEV_SECTIONS_name": "", "UI_DEV_SECTIONS_name": "Esconder secções de dispositivos",
"UI_ICONS_description": "", "UI_ICONS_description": "Uma lista de ícones pré-definidos. Proceda com cautela, a maneira preferível de adicionar ícones é descrita na <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Documentação de ícones</a>. Pode adicionar uma etiqueta codificada em base64 SVG HTML ou Font-awesome HTML.",
"UI_ICONS_name": "", "UI_ICONS_name": "Ícones pré-definidos",
"UI_LANG_description": "", "UI_LANG_description": "Selecione o idioma de UI preferido. Ajude a traduzir ou sugira idiomas no portal online do <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
"UI_LANG_name": "", "UI_LANG_name": "Idioma do UI",
"UI_MY_DEVICES_description": "", "UI_MY_DEVICES_description": "Dispositivos cujo estado devem ser mostrados na vista predefinida <b>Os meus dispositivos</b>.",
"UI_MY_DEVICES_name": "", "UI_MY_DEVICES_name": "Mostrar na vista Os meus dispositivos",
"UI_NOT_RANDOM_MAC_description": "", "UI_NOT_RANDOM_MAC_description": "Prefixos mac que não devem ser marcados como dispositivos Aleatórios. Introduza, por exemplo, <code>52</code> para excluir dispositivos que começam com <code>52:xx:xx:xx:xx:xx</code> de serem marcados como dispositivos com um endereço MAC aleatório.",
"UI_NOT_RANDOM_MAC_name": "", "UI_NOT_RANDOM_MAC_name": "Não marcar como Aleatório",
"UI_PRESENCE_description": "", "UI_PRESENCE_description": "Selecione quais estatutos devem ser mostrados na <b>Presença de dispositivo</b> gráfico na página de <a href=\"/devices.php\" target=\"_blank\">Dispositivos</a>.",
"UI_PRESENCE_name": "", "UI_PRESENCE_name": "Mostrar em gráfico de presença",
"UI_REFRESH_description": "", "UI_REFRESH_description": "Introduza o número de segundo após os quais o UI atualiza. Defina para <code>0</code> para desativar.",
"UI_REFRESH_name": "", "UI_REFRESH_name": "Auto-atualizar UI",
"VERSION_description": "", "VERSION_description": "Valor auxiliar de versão ou data e hora para verificar se a aplicação foi atualizada.",
"VERSION_name": "", "VERSION_name": "Versão ou data e hora",
"WF_Action_Add": "", "WF_Action_Add": "Adicionar Ação",
"WF_Action_field": "", "WF_Action_field": "Campo",
"WF_Action_type": "", "WF_Action_type": "Tipo",
"WF_Action_value": "", "WF_Action_value": "Valor",
"WF_Actions": "", "WF_Actions": "Ações",
"WF_Add": "", "WF_Add": "Adicionar Fluxo de Trabalho",
"WF_Add_Condition": "", "WF_Add_Condition": "Adicionar Condição",
"WF_Add_Group": "", "WF_Add_Group": "Adicionar Grupo",
"WF_Condition_field": "", "WF_Condition_field": "Campo",
"WF_Condition_operator": "", "WF_Condition_operator": "Operador",
"WF_Condition_value": "", "WF_Condition_value": "Valor",
"WF_Conditions": "", "WF_Conditions": "Condições",
"WF_Conditions_logic_rules": "", "WF_Conditions_logic_rules": "Regras de lógica",
"WF_Duplicate": "", "WF_Duplicate": "Duplicar Fluxo de Trabalho",
"WF_Enabled": "", "WF_Enabled": "Fluxo de trabalho ativo",
"WF_Export": "", "WF_Export": "Exportar Fluxo de Trabalho",
"WF_Export_Copy": "", "WF_Export_Copy": "Copiar para o fluxo de trabalho abaixo e importar para onde for preciso.",
"WF_Import": "", "WF_Import": "Importar Fluxo de Trabalho",
"WF_Import_Copy": "", "WF_Import_Copy": "Colar no fluxo de trabalho que copiou anteriormente.",
"WF_Name": "", "WF_Name": "Nome do fluxo de trabalho",
"WF_Remove": "", "WF_Remove": "Remover Fluxo de Trabalho",
"WF_Remove_Copy": "", "WF_Remove_Copy": "Quer remover este fluxo de trabalho?",
"WF_Save": "", "WF_Save": "Guardar Fluxos de Trabalho",
"WF_Trigger": "", "WF_Trigger": "Acionador",
"WF_Trigger_event_type": "", "WF_Trigger_event_type": "Tipo de evento",
"WF_Trigger_type": "", "WF_Trigger_type": "Tipo de acionador",
"add_icon_event_tooltip": "", "add_icon_event_tooltip": "Adicionar novo ícone",
"add_option_event_tooltip": "", "add_option_event_tooltip": "Adicionar novo valor",
"copy_icons_event_tooltip": "", "copy_icons_event_tooltip": "Sobrescrever ícones de todos os dispositivos com o mesmo tipo de dispositivo",
"devices_old": "", "devices_old": "A atualizar…",
"general_event_description": "", "general_event_description": "O evento que ativou pode demorar algum tempo até que os processos de planos de fundo terminem. A execução acabou uma vez que a lista de execução abaixo fica vazia (Verifique o <a href='/maintenance.php#tab_Logging'>registo de erros</a> se encontrar problemas). <br/> <br/> Lista de execução:",
"general_event_title": "", "general_event_title": "A executar um evento ad-hoc",
"go_to_device_event_tooltip": "", "go_to_device_event_tooltip": "Navegar para o dispositivo",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "Navegar para a página de Rede do nó em questão",
"new_version_available": "", "new_version_available": "Uma versão nova está disponível.",
"report_guid": "", "report_guid": "Guid de Notificação:",
"report_guid_missing": "", "report_guid_missing": "Notificação associada não foi encontrada. Há um pequeno atraso entre notificações recentemente enviadas e as mesmas estarem disponíveis. Atualize a sua página e cache após alguns segundos. Também é possível que a notificação selecionada tenha sido eliminada durante a manutenção como especificado na definição <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Em vez disso, a última notificação é mostrada. A notificação em falta tem o seguinte GUID:",
"report_select_format": "", "report_select_format": "Selecionar Formato:",
"report_time": "", "report_time": "Tempo de notificação:",
"run_event_tooltip": "", "run_event_tooltip": "Ative a definição e guarde as suas mudanças primeiro antes de corrê-lo.",
"select_icon_event_tooltip": "", "select_icon_event_tooltip": "Selecionar ícone",
"settings_core_icon": "", "settings_core_icon": "fa-solid fa-gem",
"settings_core_label": "", "settings_core_label": "Core",
"settings_device_scanners": "", "settings_device_scanners": "Scaneadores de dispositivos usados para descobrir dispositivos que escrevem para a tabela da base de dados CurrentScan.",
"settings_device_scanners_icon": "", "settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
"settings_device_scanners_info": "", "settings_device_scanners_info": "Carregar mais scaneadores de dispositivos com a definição <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
"settings_device_scanners_label": "", "settings_device_scanners_label": "Scaneadores de dispositivos",
"settings_enabled": "", "settings_enabled": "Definições ativas",
"settings_enabled_icon": "", "settings_enabled_icon": "fa-solid fa-toggle-on",
"settings_expand_all": "", "settings_expand_all": "Expandir todos",
"settings_imported": "", "settings_imported": "Na última vez, as definições foram importadas a partir do ficheiro app.conf",
"settings_imported_label": "", "settings_imported_label": "Definições importadas",
"settings_missing": "", "settings_missing": "Nem todas as configurações foram carregadas! Carga elevada na base de dados ou na sequência de começo da aplicação. Clique no botão 🔄 de atualizar no topo.",
"settings_missing_block": "", "settings_missing_block": "Erro: Definições não carregadas corretamente. Clique no botão 🔄 de atualizar no topo ou, alternativamente, verifique o registo do navegador para detalhes (F12).",
"settings_old": "", "settings_old": "A importar definições e a reinicializar…",
"settings_other_scanners": "", "settings_other_scanners": "Outros plugins de scaneadores que não são do dispositivo estão atualmente ativos.",
"settings_other_scanners_icon": "", "settings_other_scanners_icon": "fa-solid fa-recycle",
"settings_other_scanners_label": "", "settings_other_scanners_label": "Outros scaneadores",
"settings_publishers": "", "settings_publishers": "Gateways de notificação ativados - editores que enviarão uma notificação de acordo com as suas definições.",
"settings_publishers_icon": "", "settings_publishers_icon": "fa-solid fa-paper-plane",
"settings_publishers_info": "", "settings_publishers_info": "Carregar mais Editores com a definição <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
"settings_publishers_label": "", "settings_publishers_label": "Editores",
"settings_readonly": "", "settings_readonly": "Não foi possível LÊR ou ESCREVER na <code>app.conf</code>. Tente reiniciar o contentoer e ler a <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">documentação de permissões de ficheiro</a>",
"settings_saved": "", "settings_saved": "<br/>Definições guardadas.<br/> A recarregar...<br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i><br/>",
"settings_system_icon": "", "settings_system_icon": "fa-solid fa-gear",
"settings_system_label": "", "settings_system_label": "Sistema",
"settings_update_item_warning": "", "settings_update_item_warning": "Atualize o valor abaixo. Tenha cuidado em seguir o formato anterior. <b>Validação não é efetuada.</b>",
"test_event_tooltip": "Guarde as alterações antes de testar as definições." "test_event_tooltip": "Guarde as alterações antes de testar as definições."
} }

View File

@@ -27,7 +27,7 @@
"AppEvents_ObjectType": "Тип объекта", "AppEvents_ObjectType": "Тип объекта",
"AppEvents_Plugin": "Плагин", "AppEvents_Plugin": "Плагин",
"AppEvents_Type": "Тип", "AppEvents_Type": "Тип",
"BACKEND_API_URL_description": "Используется для обеспечения связи между фронтендом и бэкендом. По умолчанию это значение установлено на <code>/server</code> и, как правило, не должно изменяться.", "BACKEND_API_URL_description": "Используется для обеспечения связи между фронтендом и бэкендом. По умолчанию это значение установлено на <code>/server</code> и, как правило, не должно изменяться.",
"BACKEND_API_URL_name": "URL-адрес серверного API", "BACKEND_API_URL_name": "URL-адрес серверного API",
"BackDevDetail_Actions_Ask_Run": "Вы хотите выполнить действие?", "BackDevDetail_Actions_Ask_Run": "Вы хотите выполнить действие?",
"BackDevDetail_Actions_Not_Registered": "Действие не зарегистрировано:· ", "BackDevDetail_Actions_Not_Registered": "Действие не зарегистрировано:· ",

View File

@@ -249,8 +249,8 @@
"Device_TableHead_Name": "名字", "Device_TableHead_Name": "名字",
"Device_TableHead_NetworkSite": "网络站点", "Device_TableHead_NetworkSite": "网络站点",
"Device_TableHead_Owner": "所有者", "Device_TableHead_Owner": "所有者",
"Device_TableHead_ParentRelType": "关系类型", "Device_TableHead_ParentRelType": "关系",
"Device_TableHead_Parent_MAC": "父网络节点", "Device_TableHead_Parent_MAC": "父节点",
"Device_TableHead_Port": "端口", "Device_TableHead_Port": "端口",
"Device_TableHead_PresentLastScan": "检测", "Device_TableHead_PresentLastScan": "检测",
"Device_TableHead_ReqNicsOnline": "需要网卡在线", "Device_TableHead_ReqNicsOnline": "需要网卡在线",
@@ -407,7 +407,7 @@
"Maintenance_InitCheck": "初步检查", "Maintenance_InitCheck": "初步检查",
"Maintenance_InitCheck_Checking": "查看中…", "Maintenance_InitCheck_Checking": "查看中…",
"Maintenance_InitCheck_QuickSetupGuide": "确保您遵循<a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">快速设置指南</a>。", "Maintenance_InitCheck_QuickSetupGuide": "确保您遵循<a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">快速设置指南</a>。",
"Maintenance_InitCheck_Success": "应用程序启动成功!", "Maintenance_InitCheck_Success": "应用程序初始化成功!",
"Maintenance_ReCheck": "重试检查", "Maintenance_ReCheck": "重试检查",
"Maintenance_Running_Version": "安装版本", "Maintenance_Running_Version": "安装版本",
"Maintenance_Status": "状态", "Maintenance_Status": "状态",

99
front/plugins/kea_api/README.md Executable file
View File

@@ -0,0 +1,99 @@
## Overview
A plugin allowing for importing devices from the Kea DHCP API.
https://www.isc.org/kea/
And specifically:
https://kea.readthedocs.io/en/kea-2.6.3/api.html#lease4-get-all
### Usage
To enable the API, first you want to add something like this to your main kea configuration (this is for debian 13):
```json
"control-socket": {
"socket-type": "unix",
"socket-name": "/run/kea/kea4-ctrl-socket"
},
"hooks-libraries": [
{
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_lease_cmds.so"
}
],
```
And you need to install kea-ctrl-agent, with a config that looks something like this:
```json
{
"Control-agent": {
"http-host": "127.0.0.1",
"http-port": 8000,
"authentication": {
"type": "basic",
"realm": "Kea Control Agent",
"directory": "/etc/kea",
"clients": [
{
"user": "kea-api",
"password-file": "kea-api-password"
}
]
},
"control-sockets": {
"dhcp4": {
"socket-type": "unix",
"socket-name": "/run/kea/kea4-ctrl-socket"
}
},
"loggers": [
{
"name": "kea-ctrl-agent",
"output-options": [
{
"output": "stdout",
"pattern": "%-5p %m\n"
}
],
"severity": "INFO",
"debuglevel": 0
}
]
}
}
```
You will need to configure the plugin with the URL to the API, and the username and password configured above (from kea-api-password file in the example)
#### Required Settings
These settings are required, besides the common device scanner settings:
- **Kea Control Agent URL** (`KEALSS_URL`): The full URL, including port number, to the Kea API.
- Default: `http://127.0.0.1:8000`
- This mirrors what you set up in the kea-ctrl-agent configuration.
- **Basic Auth Username** (`KEALSS_USER`): The user to use for authenticating with the Kea API.
- Default: `kea-api`
- This mirrors what you set up in the kea-ctrl-agent configuration.
- **Basic Auth Password** (`KEALSS_PASS`): The password to use for authenticating with the Kea API.
- This mirrors what you set up in the kea-ctrl-agent configuration.
- When using a password file, it should be the content of the password file.
### Notes
- This was tested on a basic Debian 13 install.
- When you install kea-ctrl-agent, it should ask you about creating a password.
- It's possible to run kea-ctrl-agent without password, but it's not recommended and at the moment we don't support that.
- I may provide some minimal support, if you ask nicely :)
- Version: 1.0.0
- Author: `void-spark`
- Release Date: `11/05/2026`

View File

@@ -0,0 +1,455 @@
{
"code_name": "kea_api",
"unique_prefix": "KEALSS",
"plugin_type": "device_scanner",
"execution_order" : "Layer_3",
"enabled": true,
"data_source": "script",
"data_filters": [
{
"compare_column": "objectPrimaryId",
"compare_operator": "==",
"compare_field_id": "txtMacFilter",
"compare_js_template": "'{value}'.toString()",
"compare_use_quotes": true
}
],
"show_ui": true,
"localized": ["display_name", "description", "icon"],
"mapped_to_table": "CurrentScan",
"display_name": [{"language_code": "en_us", "string": "Kea DHCP API"}],
"icon": [{"language_code": "en_us", "string": "<i class=\"fa-solid fa-hourglass-half\"></i>"}],
"description": [{"language_code": "en_us", "string": "Imports leases via Kea Control Agent REST API"}],
"database_column_definitions": [
{
"column": "index",
"css_classes": "col-sm-2",
"show": true,
"type": "none",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Index"}]
},
{
"column": "objectPrimaryId",
"mapped_to_column": "scanMac",
"css_classes": "col-sm-2",
"show": true,
"type": "device_mac",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "MAC address"}]
},
{
"column": "objectSecondaryId",
"mapped_to_column": "scanLastIP",
"css_classes": "col-sm-2",
"show": true,
"type": "device_ip",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "IP" }]
},
{
"column": "dateTimeCreated",
"css_classes": "col-sm-2",
"show": true,
"type": "label",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Created"}]
},
{
"column": "dateTimeChanged",
"mapped_to_column": "scanLastConnection",
"css_classes": "col-sm-2",
"show": true,
"type": "label",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Changed"}]
},
{
"column": "watchedValue1",
"css_classes": "col-sm-2",
"show": true,
"type": "label",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Is active"}]
},
{
"column": "watchedValue2",
"mapped_to_column": "scanName",
"css_classes": "col-sm-2",
"show": true,
"type": "label",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Hostname"}]
},
{
"column": "watchedValue4",
"css_classes": "col-sm-2",
"show": true,
"type": "label",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "State"}]
},
{
"column": "userData",
"css_classes": "col-sm-2",
"show": false,
"type": "textbox_save",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Comments"}]
},
{
"column": "Dummy",
"mapped_to_column": "scanSourcePlugin",
"mapped_to_column_data": {
"value": "KEALSS"
},
"css_classes": "col-sm-2",
"show": false,
"type": "label",
"default_value": "",
"options": [],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Scan method"}]
},
{
"column": "status",
"css_classes": "col-sm-1",
"show": true,
"type": "replace",
"default_value": "",
"options": [
{
"equals": "watched-not-changed",
"replacement": "<div style='text-align:center'><i class='fa-solid fa-square-check'></i><div></div>"
},
{
"equals": "watched-changed",
"replacement": "<div style='text-align:center'><i class='fa-solid fa-triangle-exclamation'></i></div>"
},
{
"equals": "new",
"replacement": "<div style='text-align:center'><i class='fa-solid fa-circle-plus'></i></div>"
},
{
"equals": "missing-in-last-scan",
"replacement": "<div style='text-align:center'><i class='fa-solid fa-question'></i></div>"
}
],
"localized": ["name"],
"name": [{"language_code": "en_us", "string": "Status"}]
}
],
"settings": [
{
"function": "RUN",
"events": ["run"],
"type": {
"dataType": "string",
"elements": [{"elementType": "select", "elementOptions": [], "transformers": []}]
},
"default_value": "disabled",
"options": [
"disabled",
"once",
"schedule",
"always_after_scan",
"on_new_device"
],
"localized": ["name", "description"],
"name": [{"language_code": "en_us", "string": "When to run"}],
"description": [
{
"language_code": "en_us",
"string": "Enable import of devices from <code>Kea API</code>. If you select <code>schedule</code> the scheduling settings from below are applied. If you select <code>once</code> the scan is run only once on start of the application (container) or after you update your settings. ⚠ Use the same schedule if you have multiple <i class=\"fa-solid fa-magnifying-glass-plus\"></i> Device scanners enabled."
}
]
},
{
"function": "CMD",
"type": {
"dataType": "string",
"elements": [
{ "elementType": "input", "elementOptions": [], "transformers": [] }
]
},
"default_value": "python3 /app/front/plugins/kea_api/script.py",
"options": [],
"localized": ["name", "description"],
"name": [{"language_code": "en_us", "string": "Command"}],
"description": [{"language_code": "en_us", "string": "Command to run"}]
},
{
"function": "URL",
"localized": ["name", "description"],
"name": [{"language_code": "en_us", "string": "API URL"}],
"description": [{"language_code": "en_us", "string": "Kea Control Agent URL"}],
"type": {
"dataType": "string",
"elements": [
{
"elementType": "input",
"elementOptions": [],
"transformers": []
}
]
},
"default_value": "http://127.0.0.1:8000"
},
{
"function": "USER",
"localized": ["name", "description"],
"name": [{"language_code": "en_us", "string": "API User"}],
"description": [{"language_code": "en_us", "string": "Basic Auth Username"}],
"type": {
"dataType": "string",
"elements": [
{
"elementType": "input",
"elementOptions": [],
"transformers": []
}
]
},
"default_value": "kea-api"
},
{
"function": "PASS",
"localized": ["name", "description"],
"name": [{"language_code": "en_us", "string": "API Password"}],
"description": [{"language_code": "en_us", "string": "Basic Auth Password"}],
"type": {
"dataType": "string",
"elements": [
{
"elementType": "input",
"elementOptions": [{"type": "password"}],
"transformers": []
}
]
},
"default_value": ""
},
{
"function": "RUN_SCHD",
"type": {
"dataType": "string",
"elements": [
{
"elementType": "span",
"elementOptions": [
{
"cssClasses": "input-group-addon validityCheck"
},
{
"getStringKey": "Gen_ValidIcon"
}
],
"transformers": []
},
{
"elementType": "input",
"elementOptions": [
{
"focusout": "validateRegex(this)"
},
{
"base64Regex": "Xig/OlwqfCg/OlswLTldfFsxLTVdWzAtOV18WzAtOV0rLVswLTldK3xcKi9bMC05XSspKVxzKyg/OlwqfCg/OlswLTldfDFbMC05XXwyWzAtM118WzAtOV0rLVswLTldK3xcKi9bMC05XSspKVxzKyg/OlwqfCg/OlsxLTldfFsxMl1bMC05XXwzWzAxXXxbMC05XSstWzAtOV0rfFwqL1swLTldKykpXHMrKD86XCp8KD86WzEtOV18MVswLTJdfFswLTldKy1bMC05XSt8XCovWzAtOV0rKSlccysoPzpcKnwoPzpbMC02XXxbMC02XS1bMC02XXxcKi9bMC05XSspKSQ="
}
],
"transformers": []
}
]
},
"default_value": "0 2 * * *",
"options": [],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Schedule"
}
],
"description": [
{
"language_code": "en_us",
"string": "Only enabled if you select <code>schedule</code> in the <a href=\"#KEALSS_RUN\"><code>KEALSS_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes. <br/> It's recommended to use the same schedule interval for all plugins responsible for discovering new devices."
}
]
},
{
"function": "RUN_TIMEOUT",
"type": {
"dataType": "integer",
"elements": [
{
"elementType": "input",
"elementOptions": [{ "type": "number" }],
"transformers": []
}
]
},
"default_value": 10,
"options": [],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Run timeout"
}
],
"description": [
{
"language_code": "en_us",
"string": "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted."
}
]
},
{
"function": "SET_ALWAYS",
"type": {
"dataType": "array",
"elements": [
{
"elementType": "select",
"elementOptions": [{ "multiple": "true", "orderable": "true"}],
"transformers": []
}
]
},
"default_value": ["devMac", "devLastIP"],
"options": [
"devMac",
"devLastIP"
],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Set always columns"
}
],
"description": [
{
"language_code": "en_us",
"string": "These columns are treated as authoritative and will overwrite existing values, including those set by other plugins, unless the current value was explicitly set by the user (<code>Source = USER</code> or <code>Source = LOCKED</code>)."
}
]
},
{
"function": "SET_EMPTY",
"type": {
"dataType": "array",
"elements": [
{
"elementType": "select",
"elementOptions": [{ "multiple": "true", "orderable": "true" }],
"transformers": []
}
]
},
"default_value": [],
"options": [
"devMac",
"devLastIP",
"devName",
"devSourcePlugin"
],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Set empty columns"
}
],
"description": [
{
"language_code": "en_us",
"string": "These columns are only overwritten if they are empty (<code>NULL</code> / empty string) or if their Source is set to <code>NEWDEV</code>"
}
]
},
{
"function": "WATCH",
"type": {
"dataType": "array",
"elements": [
{
"elementType": "select",
"elementOptions": [{ "multiple": "true", "orderable": "true"}],
"transformers": []
}
]
},
"default_value": ["watchedValue1", "watchedValue4"],
"options": [
"watchedValue1",
"watchedValue2",
"watchedValue4"
],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Watched"
}
],
"description": [
{
"language_code": "en_us",
"string": "Send a notification if selected values change. Use <code>CTRL + Click</code> to select/deselect. <ul> <li><code>watchedValue1</code> is Active </li><li><code>watchedValue2</code> is Hostname </li><li><code>watchedValue4</code> is State</li></ul>"
}
]
},
{
"function": "REPORT_ON",
"type": {
"dataType": "array",
"elements": [
{
"elementType": "select",
"elementOptions": [{ "multiple": "true", "orderable": "true"}],
"transformers": []
}
]
},
"default_value": ["new", "watched-changed"],
"options": [
"new",
"watched-changed",
"watched-not-changed",
"missing-in-last-scan"
],
"localized": ["name", "description"],
"name": [
{
"language_code": "en_us",
"string": "Report on"
}
],
"description": [
{
"language_code": "en_us",
"string": "Send a notification only on these statuses. <code>new</code> means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. <code>watched-changed</code> means that selected <code>watchedValueN</code> columns changed."
}
]
}
]
}

View File

@@ -0,0 +1,75 @@
#!/usr/bin/env python3
import os
import sys
import requests
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../../server'))
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../plugins'))
from plugin_helper import Plugin_Objects, mylog, handleEmpty, is_mac
from helper import get_setting_value
from const import logPath
pluginName = 'KEALSS'
LOG_PATH = logPath + '/plugins'
LOG_FILE = os.path.join(LOG_PATH, f'script.{pluginName}.log')
RESULT_FILE = os.path.join(LOG_PATH, f'last_result.{pluginName}.log')
plugin_objects = Plugin_Objects(RESULT_FILE)
def main():
try:
url = get_setting_value(f'{pluginName}_URL')
user = get_setting_value(f'{pluginName}_USER')
password = get_setting_value(f'{pluginName}_PASS')
timeout = get_setting_value(f'{pluginName}_RUN_TIMEOUT')
mylog('verbose', [f'[{pluginName}] Querying Kea API at {url}'])
payload = {'command': 'lease4-get-all', 'service': ['dhcp4']}
response = requests.post(url, json=payload, auth=(user, password), timeout=max(1, timeout - 1))
response.raise_for_status()
data = response.json()
count = 0
for entry in data:
text = entry.get('text', '[API provided no text]')
# Result: 0 (success), 1 (error), or 3 (empty).
if entry['result'] == 0:
leases = entry['arguments']['leases']
for lease in leases:
mac = lease['hw-address']
state = lease['state']
if is_mac(mac):
plugin_objects.add_object(
primaryId = mac,
secondaryId = lease['ip-address'],
# Active or not, similar to watched1 of DHCPLSS plugin
watched1 = state == 0,
watched2 = lease['hostname'],
watched3 = None,
# Default (or assigned) (0), declined (1), expired-reclaimed (2), released (3), and registered (4)).
watched4 = state,
extra = None,
foreignKey = mac
)
count += 1
plugin_objects.write_result_file()
mylog('verbose', [f'[{pluginName}] Kea API response: {text}'])
mylog('verbose', [f'[{pluginName}] Successfully imported {count} devices reported by Kea API'])
elif entry['result'] == 1:
mylog('none', [f'[{pluginName}] ⚠ ERROR: Kea API indicated error: {text}'])
elif entry['result'] == 3:
mylog('verbose', [f'[{pluginName}] Kea API indicates no entries found: {text}'])
except Exception as e:
mylog('none', [f'[{pluginName}] ⚠ ERROR: {str(e)}'])
if __name__ == '__main__':
main()