mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-08 11:11:38 -07:00
Merge remote-tracking branch 'upstream/main' into add-caddy-and-authentik-sso-documentation
This commit is contained in:
@@ -14,7 +14,7 @@ body:
|
|||||||
label: What document or section does this relate to?
|
label: What document or section does this relate to?
|
||||||
description: |
|
description: |
|
||||||
Please include a link to the file and section, if applicable. Be specific about what part of the documentation you are referencing.
|
Please include a link to the file and section, if applicable. Be specific about what part of the documentation you are referencing.
|
||||||
placeholder: e.g. https://github.com/jokob-sk/NetAlertX/blob/main/docs/FRONTEND_DEVELOPMENT.md
|
placeholder: e.g. https://docs.netalertx.com/FRONTEND_DEVELOPMENT
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -46,7 +46,7 @@ body:
|
|||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
label: Can I help implement this? 👩💻👨💻
|
label: Can I help implement this? 👩💻👨💻
|
||||||
description: The maintainer will provide guidance and help. The implementer will read the PR guidelines https://jokob-sk.github.io/NetAlertX/DEV_ENV_SETUP/
|
description: The maintainer will provide guidance and help. The implementer will read the PR guidelines https://docs.netalertx.com/DEV_ENV_SETUP/
|
||||||
options:
|
options:
|
||||||
- label: "Yes"
|
- label: "Yes"
|
||||||
- label: "No"
|
- label: "No"
|
||||||
|
|||||||
4
.github/ISSUE_TEMPLATE/i-have-an-issue.yml
vendored
4
.github/ISSUE_TEMPLATE/i-have-an-issue.yml
vendored
@@ -21,7 +21,7 @@ body:
|
|||||||
label: Is there an existing issue for this?
|
label: Is there an existing issue for this?
|
||||||
description: Please search to see if an open or closed issue already exists for the bug you encountered.
|
description: Please search to see if an open or closed issue already exists for the bug you encountered.
|
||||||
options:
|
options:
|
||||||
- label: I have searched the existing open and closed issues and I checked the docs https://jokob-sk.github.io/NetAlertX/
|
- label: I have searched the existing open and closed issues and I checked the docs https://docs.netalertx.com/
|
||||||
required: true
|
required: true
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
@@ -87,7 +87,7 @@ body:
|
|||||||
PASTE LOG HERE. Using the triple backticks preserves format.
|
PASTE LOG HERE. Using the triple backticks preserves format.
|
||||||
```
|
```
|
||||||
description: |
|
description: |
|
||||||
Logs with debug enabled (https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md) ⚠
|
Logs with debug enabled (https://docs.netalertx.com/DEBUG_TIPS) ⚠
|
||||||
***Generally speaking, all bug reports should have logs provided.***
|
***Generally speaking, all bug reports should have logs provided.***
|
||||||
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
||||||
Additionally, any additional info? Screenshots? References? Anything that will give us more context about the issue you are encountering!
|
Additionally, any additional info? Screenshots? References? Anything that will give us more context about the issue you are encountering!
|
||||||
|
|||||||
6
.github/ISSUE_TEMPLATE/setup-help.yml
vendored
6
.github/ISSUE_TEMPLATE/setup-help.yml
vendored
@@ -21,11 +21,11 @@ body:
|
|||||||
label: Did I research?
|
label: Did I research?
|
||||||
description: Please confirm you checked the usual places before opening a setup support request.
|
description: Please confirm you checked the usual places before opening a setup support request.
|
||||||
options:
|
options:
|
||||||
- label: I have searched the docs https://jokob-sk.github.io/NetAlertX/
|
- label: I have searched the docs https://docs.netalertx.com/
|
||||||
required: true
|
required: true
|
||||||
- label: I have searched the existing open and closed issues
|
- label: I have searched the existing open and closed issues
|
||||||
required: true
|
required: true
|
||||||
- label: I confirm my SCAN_SUBNETS is configured and tested as per https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md
|
- label: I confirm my SCAN_SUBNETS is configured and tested as per https://docs.netalertx.com/SUBNETS
|
||||||
required: true
|
required: true
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
@@ -61,7 +61,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: app.log
|
label: app.log
|
||||||
description: |
|
description: |
|
||||||
Logs with debug enabled (https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md) ⚠
|
Logs with debug enabled (https://docs.netalertx.com/DEBUG_TIPS) ⚠
|
||||||
***Generally speaking, all bug reports should have logs provided.***
|
***Generally speaking, all bug reports should have logs provided.***
|
||||||
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
||||||
Additionally, any additional info? Screenshots? References? Anything that will give us more context about the issue you are encountering!
|
Additionally, any additional info? Screenshots? References? Anything that will give us more context about the issue you are encountering!
|
||||||
|
|||||||
6
.github/copilot-instructions.md
vendored
6
.github/copilot-instructions.md
vendored
@@ -52,7 +52,7 @@ Backend loop phases (see `server/__main__.py` and `server/plugin.py`): `once`, `
|
|||||||
|
|
||||||
## Conventions & helpers to reuse
|
## Conventions & helpers to reuse
|
||||||
- Settings: add/modify via `ccd()` in `server/initialise.py` or per‑plugin manifest. Never hardcode ports or secrets; use `get_setting_value()`.
|
- Settings: add/modify via `ccd()` in `server/initialise.py` or per‑plugin manifest. Never hardcode ports or secrets; use `get_setting_value()`.
|
||||||
- Logging: use `mylog(level, [message])`; levels: none/minimal/verbose/debug/trace. `none` is used for most important messages that should always appear, such as exceptions.
|
- Logging: use `mylog(level, [message])`; levels: none/minimal/verbose/debug/trace. `none` is used for most important messages that should always appear, such as exceptions. Do NOT use `error` as level.
|
||||||
- Time/MAC/strings: `server/utils/datetime_utils.py` (`timeNowDB`), `front/plugins/plugin_helper.py` (`normalize_mac`), `server/helper.py` (sanitizers). Validate MACs before DB writes.
|
- Time/MAC/strings: `server/utils/datetime_utils.py` (`timeNowDB`), `front/plugins/plugin_helper.py` (`normalize_mac`), `server/helper.py` (sanitizers). Validate MACs before DB writes.
|
||||||
- DB helpers: prefer `server/db/db_helper.py` functions (e.g., `get_table_json`, device condition helpers) over raw SQL in new paths.
|
- DB helpers: prefer `server/db/db_helper.py` functions (e.g., `get_table_json`, device condition helpers) over raw SQL in new paths.
|
||||||
|
|
||||||
@@ -71,13 +71,15 @@ Backend loop phases (see `server/__main__.py` and `server/plugin.py`): `once`, `
|
|||||||
- When adding a plugin, start from `front/plugins/__template`, implement with `plugin_helper`, define manifest settings, and wire phase via `<PREF>_RUN`. Verify logs in `/tmp/log/plugins/` and data in `api/*.json`.
|
- When adding a plugin, start from `front/plugins/__template`, implement with `plugin_helper`, define manifest settings, and wire phase via `<PREF>_RUN`. Verify logs in `/tmp/log/plugins/` and data in `api/*.json`.
|
||||||
- When introducing new config, define it once (core `ccd()` or plugin manifest) and read it via helpers everywhere.
|
- When introducing new config, define it once (core `ccd()` or plugin manifest) and read it via helpers everywhere.
|
||||||
- When exposing new server functionality, add endpoints in `server/api_server/*` and keep authorization consistent; update UI by reading/writing JSON cache rather than bypassing the pipeline.
|
- When exposing new server functionality, add endpoints in `server/api_server/*` and keep authorization consistent; update UI by reading/writing JSON cache rather than bypassing the pipeline.
|
||||||
|
- Always try following the DRY principle, do not re-implement functionality, but re-use existing methods where possible, or refactor to use a common method that is called multiple times
|
||||||
|
- If new functionality needs to be added, look at impenting it into existing handlers (e.g. `DeviceInstance` in `server/models/device_instance.py`) or create a new one if it makes sense. Do not access the DB from otehr application layers.
|
||||||
|
- Code files shoudln't be longer than 500 lines of code
|
||||||
|
|
||||||
## Useful references
|
## Useful references
|
||||||
- Docs: `docs/PLUGINS_DEV.md`, `docs/SETTINGS_SYSTEM.md`, `docs/API_*.md`, `docs/DEBUG_*.md`
|
- Docs: `docs/PLUGINS_DEV.md`, `docs/SETTINGS_SYSTEM.md`, `docs/API_*.md`, `docs/DEBUG_*.md`
|
||||||
- Logs: All logs are under `/tmp/log/`. Plugin logs are very shortly under `/tmp/log/plugins/` until picked up by the server.
|
- Logs: All logs are under `/tmp/log/`. Plugin logs are very shortly under `/tmp/log/plugins/` until picked up by the server.
|
||||||
- plugin logs: `/tmp/log/plugins/*.log`
|
- plugin logs: `/tmp/log/plugins/*.log`
|
||||||
- backend logs: `/tmp/log/stdout.log` and `/tmp/log/stderr.log`
|
- backend logs: `/tmp/log/stdout.log` and `/tmp/log/stderr.log`
|
||||||
- frontend commands logs: `/tmp/log/app_front.log`
|
|
||||||
- php errors: `/tmp/log/app.php_errors.log`
|
- php errors: `/tmp/log/app.php_errors.log`
|
||||||
- nginx logs: `/tmp/log/nginx-access.log` and `/tmp/log/nginx-error.log`
|
- nginx logs: `/tmp/log/nginx-access.log` and `/tmp/log/nginx-error.log`
|
||||||
|
|
||||||
|
|||||||
15
.github/workflows/mkdocs.yml
vendored
15
.github/workflows/mkdocs.yml
vendored
@@ -3,7 +3,10 @@ name: Deploy MkDocs
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main # Change if your default branch is different
|
- main
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
@@ -19,7 +22,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Install MkDocs
|
- name: Install MkDocs
|
||||||
run: |
|
run: |
|
||||||
pip install mkdocs mkdocs-material && pip install mkdocs-github-admonitions-plugin
|
pip install mkdocs mkdocs-material
|
||||||
|
pip install mkdocs-github-admonitions-plugin
|
||||||
|
|
||||||
|
- name: Build MkDocs
|
||||||
|
run: mkdocs build
|
||||||
|
|
||||||
|
- name: Add CNAME
|
||||||
|
run: |
|
||||||
|
echo "docs.netalertx.com" > site/CNAME
|
||||||
|
|
||||||
- name: Deploy MkDocs
|
- name: Deploy MkDocs
|
||||||
run: mkdocs gh-deploy --force
|
run: mkdocs gh-deploy --force
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Please use the [GitHub Issue Tracker](https://github.com/jokob-sk/NetAlertX/issu
|
|||||||
- Documentation feedback 📖
|
- Documentation feedback 📖
|
||||||
|
|
||||||
Before opening a new issue:
|
Before opening a new issue:
|
||||||
- 🛑 [Check Common Issues & Debug Tips](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#common-issues)
|
- 🛑 [Check Common Issues & Debug Tips](https://docs.netalertx.com/DEBUG_TIPS#common-issues)
|
||||||
- 🔍 [Search Closed Issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)
|
- 🔍 [Search Closed Issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -27,7 +27,7 @@ Please:
|
|||||||
- Follow existing **code style and structure**
|
- Follow existing **code style and structure**
|
||||||
- Provide a clear title and description for your PR
|
- Provide a clear title and description for your PR
|
||||||
- If relevant, add or update tests and documentation
|
- If relevant, add or update tests and documentation
|
||||||
- For plugins, refer to the [Plugin Dev Guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
- For plugins, refer to the [Plugin Dev Guide](https://docs.netalertx.com/PLUGINS_DEV)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
34
README.md
34
README.md
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
# NetAlertX - Network, presence scanner and alert framework
|
# NetAlertX - Network, presence scanner and alert framework
|
||||||
|
|
||||||
Get visibility of what's going on on your WIFI/LAN network and enable presence detection of important devices. Schedule scans for devices, port changes and get alerts if unknown devices or changes are found. Write your own [Plugin](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) with auto-generated UI and in-build notification system. Build out and easily maintain your network source of truth (NSoT) and device inventory.
|
Get visibility of what's going on on your WIFI/LAN network and enable presence detection of important devices. Schedule scans for devices, port changes and get alerts if unknown devices or changes are found. Write your own [Plugin](https://docs.netalertx.com/PLUGINS#readme) with auto-generated UI and in-build notification system. Build out and easily maintain your network source of truth (NSoT) and device inventory.
|
||||||
|
|
||||||
## 📋 Table of Contents
|
## 📋 Table of Contents
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ Get visibility of what's going on on your WIFI/LAN network and enable presence d
|
|||||||
## 🚀 Quick Start
|
## 🚀 Quick Start
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> ⚠️ **Important:** The docker-compose has recently changed. Carefully read the [Migration guide](https://jokob-sk.github.io/NetAlertX/MIGRATION/?h=migrat#12-migration-from-netalertx-v25524) for detailed instructions.
|
> ⚠️ **Important:** The docker-compose has recently changed. Carefully read the [Migration guide](https://docs.netalertx.com/MIGRATION/?h=migrat#12-migration-from-netalertx-v25524) for detailed instructions.
|
||||||
|
|
||||||
Start NetAlertX in seconds with Docker:
|
Start NetAlertX in seconds with Docker:
|
||||||
|
|
||||||
@@ -60,14 +60,14 @@ docker compose up --force-recreate --build
|
|||||||
# To customize: edit docker-compose.yaml and run that last command again
|
# To customize: edit docker-compose.yaml and run that last command again
|
||||||
```
|
```
|
||||||
|
|
||||||
Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/).
|
Need help configuring it? Check the [usage guide](https://docs.netalertx.com/README) or [full documentation](https://docs.netalertx.com/).
|
||||||
|
|
||||||
For Home Assistant users: [Click here to add NetAlertX](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
|
For Home Assistant users: [Click here to add NetAlertX](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
|
||||||
|
|
||||||
For other install methods, check the [installation docs](#-documentation)
|
For other install methods, check the [installation docs](#-documentation)
|
||||||
|
|
||||||
|
|
||||||
| [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_INSTALLATION.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
| [📑 Docker guide](https://docs.netalertx.com/DOCKER_INSTALLATION) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://docs.netalertx.com/) | [🔌 Plugins](https://docs.netalertx.com/PLUGINS) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
||||||
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
||||||
|
|
||||||
![showcase][showcase]
|
![showcase][showcase]
|
||||||
@@ -88,7 +88,7 @@ For other install methods, check the [installation docs](#-documentation)
|
|||||||
|
|
||||||
### Scanners
|
### Scanners
|
||||||
|
|
||||||
The app scans your network for **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Discovery & scan methods include: **arp-scan**, **Pi-hole - DB import**, **Pi-hole - DHCP leases import**, **Generic DHCP leases import**, **UNIFI controller import**, **SNMP-enabled router import**. Check the [Plugins](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) docs for a full list of avaliable plugins.
|
The app scans your network for **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Discovery & scan methods include: **arp-scan**, **Pi-hole - DB import**, **Pi-hole - DHCP leases import**, **Generic DHCP leases import**, **UNIFI controller import**, **SNMP-enabled router import**. Check the [Plugins](https://docs.netalertx.com/PLUGINS#readme) docs for a full list of avaliable plugins.
|
||||||
|
|
||||||
### Notification gateways
|
### Notification gateways
|
||||||
|
|
||||||
@@ -96,12 +96,12 @@ Send notifications to more than 80+ services, including Telegram via [Apprise](h
|
|||||||
|
|
||||||
### Integrations and Plugins
|
### Integrations and Plugins
|
||||||
|
|
||||||
Feed your data and device changes into [Home Assistant](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HOME_ASSISTANT.md), read [API endpoints](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md), or use [Webhooks](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md) to setup custom automation flows. You can also
|
Feed your data and device changes into [Home Assistant](https://docs.netalertx.com/HOME_ASSISTANT), read [API endpoints](https://docs.netalertx.com/API), or use [Webhooks](https://docs.netalertx.com/WEBHOOK_N8N) to setup custom automation flows. You can also
|
||||||
build your own scanners with the [Plugin system](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) in as little as [15 minutes](https://www.youtube.com/watch?v=cdbxlwiWhv8).
|
build your own scanners with the [Plugin system](https://docs.netalertx.com/PLUGINS#readme) in as little as [15 minutes](https://www.youtube.com/watch?v=cdbxlwiWhv8).
|
||||||
|
|
||||||
### Workflows
|
### Workflows
|
||||||
|
|
||||||
The [workflows module](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WORKFLOWS.md) allows to automate repetitive tasks, making network management more efficient. Whether you need to assign newly discovered devices to a specific Network Node, auto-group devices from a given vendor, unarchive a device if detected online, or automatically delete devices, this module provides the flexibility to tailor the automations to your needs.
|
The [workflows module](https://docs.netalertx.com/WORKFLOWS) allows to automate repetitive tasks, making network management more efficient. Whether you need to assign newly discovered devices to a specific Network Node, auto-group devices from a given vendor, unarchive a device if detected online, or automatically delete devices, this module provides the flexibility to tailor the automations to your needs.
|
||||||
|
|
||||||
|
|
||||||
## 📚 Documentation
|
## 📚 Documentation
|
||||||
@@ -109,15 +109,15 @@ The [workflows module](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WORK
|
|||||||
|
|
||||||
Supported browsers: Chrome, Firefox
|
Supported browsers: Chrome, Firefox
|
||||||
|
|
||||||
- [[Installation] Docker](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_INSTALLATION.md)
|
- [[Installation] Docker](https://docs.netalertx.com/DOCKER_INSTALLATION)
|
||||||
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
|
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
|
||||||
- [[Installation] Bare metal](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md)
|
- [[Installation] Bare metal](https://docs.netalertx.com/HW_INSTALL)
|
||||||
- [[Installation] Unraid App](https://unraid.net/community/apps)
|
- [[Installation] Unraid App](https://unraid.net/community/apps)
|
||||||
- [[Setup] Usage and Configuration](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md)
|
- [[Setup] Usage and Configuration](https://docs.netalertx.com/README)
|
||||||
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
|
- [[Development] API docs](https://docs.netalertx.com/API)
|
||||||
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
- [[Development] Custom Plugins](https://docs.netalertx.com/PLUGINS_DEV)
|
||||||
|
|
||||||
...or explore all the [documentation here](https://jokob-sk.github.io/NetAlertX/).
|
...or explore all the [documentation here](https://docs.netalertx.com/).
|
||||||
|
|
||||||
## 🔐 Security & Privacy
|
## 🔐 Security & Privacy
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ A: Yes, but some scanners (e.g. ARP) work best on Ethernet. For Wi-Fi, try SNMP,
|
|||||||
A: No. All scans and data remain local, unless you set up cloud-based notifications.
|
A: No. All scans and data remain local, unless you set up cloud-based notifications.
|
||||||
|
|
||||||
**Q: Can I use this without Docker?**
|
**Q: Can I use this without Docker?**
|
||||||
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md).
|
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://docs.netalertx.com/HW_INSTALL).
|
||||||
|
|
||||||
**Q: Where is the data stored?**
|
**Q: Where is the data stored?**
|
||||||
A: In the `/data/config` and `/data/db` folders. Back up these folders regularly.
|
A: In the `/data/config` and `/data/db` folders. Back up these folders regularly.
|
||||||
@@ -151,12 +151,12 @@ A: In the `/data/config` and `/data/db` folders. Back up these folders regularly
|
|||||||
|
|
||||||
## 🐞 Known Issues
|
## 🐞 Known Issues
|
||||||
|
|
||||||
- Some scanners (e.g. ARP) may not detect devices on different subnets. See the [Remote networks guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md) for workarounds.
|
- Some scanners (e.g. ARP) may not detect devices on different subnets. See the [Remote networks guide](https://docs.netalertx.com/REMOTE_NETWORKS) for workarounds.
|
||||||
- Wi-Fi-only networks may require alternate scanners for accurate detection.
|
- Wi-Fi-only networks may require alternate scanners for accurate detection.
|
||||||
- Notification throttling may be needed for large networks to prevent spam.
|
- Notification throttling may be needed for large networks to prevent spam.
|
||||||
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
|
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
|
||||||
|
|
||||||
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions and consult [the official documentation](https://jokob-sk.github.io/NetAlertX/).
|
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions and consult [the official documentation](https://docs.netalertx.com/).
|
||||||
|
|
||||||
## 📃 Everything else
|
## 📃 Everything else
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ SMTP_SKIP_TLS=False
|
|||||||
WEBHOOK_RUN='disabled' # use 'on_notification' to enable
|
WEBHOOK_RUN='disabled' # use 'on_notification' to enable
|
||||||
WEBHOOK_URL='http://n8n.local:5555/webhook-test/aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa'
|
WEBHOOK_URL='http://n8n.local:5555/webhook-test/aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa'
|
||||||
WEBHOOK_PAYLOAD='json' # webhook payload data format for the "body > attachements > text" attribute
|
WEBHOOK_PAYLOAD='json' # webhook payload data format for the "body > attachements > text" attribute
|
||||||
# in https://github.com/jokob-sk/NetAlertX/blob/main/docs/webhook_json_sample.json
|
|
||||||
# supported values: 'json', 'html' or 'text'
|
# supported values: 'json', 'html' or 'text'
|
||||||
# e.g.: for discord use 'html'
|
# e.g.: for discord use 'html'
|
||||||
WEBHOOK_REQUEST_METHOD='GET'
|
WEBHOOK_REQUEST_METHOD='GET'
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ Only specific, pre-approved log files can be purged for security and stability r
|
|||||||
|
|
||||||
```
|
```
|
||||||
app.log
|
app.log
|
||||||
app_front.log
|
|
||||||
IP_changes.log
|
IP_changes.log
|
||||||
stdout.log
|
stdout.log
|
||||||
stderr.log
|
stderr.log
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ You can access the following files:
|
|||||||
| `table_devices.json` | All of the available Devices detected by the app. |
|
| `table_devices.json` | All of the available Devices detected by the app. |
|
||||||
| `table_plugins_events.json` | The list of the unprocessed (pending) notification events (plugins_events DB table). |
|
| `table_plugins_events.json` | The list of the unprocessed (pending) notification events (plugins_events DB table). |
|
||||||
| `table_plugins_history.json` | The list of notification events history. |
|
| `table_plugins_history.json` | The list of notification events history. |
|
||||||
| `table_plugins_objects.json` | The content of the plugins_objects table. Find more info on the [Plugin system here](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md)|
|
| `table_plugins_objects.json` | The content of the plugins_objects table. Find more info on the [Plugin system here](https://docs.netalertx.com/PLUGINS)|
|
||||||
| `language_strings.json` | The content of the language_strings table, which in turn is loaded from the plugins `config.json` definitions. |
|
| `language_strings.json` | The content of the language_strings table, which in turn is loaded from the plugins `config.json` definitions. |
|
||||||
| `table_custom_endpoint.json` | A custom endpoint generated by the SQL query specified by the `API_CUSTOM_SQL` setting. |
|
| `table_custom_endpoint.json` | A custom endpoint generated by the SQL query specified by the `API_CUSTOM_SQL` setting. |
|
||||||
| `table_settings.json` | The content of the settings table. |
|
| `table_settings.json` | The content of the settings table. |
|
||||||
|
|||||||
@@ -118,11 +118,14 @@ curl -X DELETE "http://<server_ip>:<GRAPHQL_PORT>/sessions/delete" \
|
|||||||
```
|
```
|
||||||
#### `curl` Example
|
#### `curl` Example
|
||||||
|
|
||||||
|
**get sessions for mac**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/sessions/list?mac=AA:BB:CC:DD:EE:FF&start_date=2025-08-01&end_date=2025-08-21" \
|
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/sessions/list?mac=AA:BB:CC:DD:EE:FF&start_date=2025-08-01&end_date=2025-08-21" \
|
||||||
-H "Authorization: Bearer <API_TOKEN>" \
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
-H "Accept: application/json"
|
-H "Accept: application/json"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Calendar View of Sessions
|
### Calendar View of Sessions
|
||||||
|
|||||||
78
docs/API_SSE.md
Normal file
78
docs/API_SSE.md
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# SSE (Server-Sent Events)
|
||||||
|
|
||||||
|
Real-time app state updates via Server-Sent Events. Reduces server load ~95% vs polling.
|
||||||
|
|
||||||
|
## Endpoints
|
||||||
|
|
||||||
|
| Endpoint | Method | Purpose |
|
||||||
|
|----------|--------|---------|
|
||||||
|
| `/sse/state` | GET | Stream state updates (requires Bearer token) |
|
||||||
|
| `/sse/stats` | GET | Debug: connected clients, queued events |
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Connect to SSE Stream
|
||||||
|
```bash
|
||||||
|
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
|
||||||
|
http://localhost:5000/sse/state
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check Connection Stats
|
||||||
|
```bash
|
||||||
|
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
|
||||||
|
http://localhost:5000/sse/stats
|
||||||
|
```
|
||||||
|
|
||||||
|
## Event Types
|
||||||
|
|
||||||
|
- `state_update` - App state changed (e.g., "Scanning", "Processing")
|
||||||
|
- `unread_notifications_count_update` - Number of unread notifications changed (count: int)
|
||||||
|
|
||||||
|
## Backend Integration
|
||||||
|
|
||||||
|
Broadcasts automatically triggered in `app_state.py` via `broadcast_state_update()`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from api_server.sse_broadcast import broadcast_state_update
|
||||||
|
|
||||||
|
# Called on every state change - no additional code needed
|
||||||
|
broadcast_state_update(current_state="Scanning", settings_imported=time.time())
|
||||||
|
```
|
||||||
|
|
||||||
|
## Frontend Integration
|
||||||
|
|
||||||
|
Auto-enabled via `sse_manager.js`:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// In browser console:
|
||||||
|
netAlertXStateManager.getStats().then(stats => {
|
||||||
|
console.log("Connected clients:", stats.connected_clients);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fallback Behavior
|
||||||
|
|
||||||
|
- If SSE fails after 3 attempts, automatically switches to polling
|
||||||
|
- Polling starts at 1s, backs off to 30s max
|
||||||
|
- No user-visible difference in functionality
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `server/api_server/sse_endpoint.py` | SSE endpoints & event queue |
|
||||||
|
| `server/api_server/sse_broadcast.py` | Broadcast helper functions |
|
||||||
|
| `front/js/sse_manager.js` | Client-side SSE connection manager |
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
| Issue | Solution |
|
||||||
|
|-------|----------|
|
||||||
|
| Connection refused | Check backend running, API token correct |
|
||||||
|
| No events received | Verify `broadcast_state_update()` is called on state changes |
|
||||||
|
| High memory | Events not processed fast enough, check client logs |
|
||||||
|
| Using polling instead of SSE | Normal fallback - check browser console for errors |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
## Authelia support
|
## Authelia support
|
||||||
|
|
||||||
> [!WARNING]
|
> [!NOTE]
|
||||||
>
|
> This is community-contributed. Due to environment, setup, or networking differences, results may vary. Please open a PR to improve it instead of creating an issue, as the maintainer is not actively maintaining it.
|
||||||
> This is community contributed content and work in progress. Contributions are welcome.
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
theme: dark
|
theme: dark
|
||||||
|
|||||||
1
docs/CNAME
Normal file
1
docs/CNAME
Normal file
@@ -0,0 +1 @@
|
|||||||
|
docs.netalertx.com
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
# Community Guides
|
# Community Guides
|
||||||
|
|
||||||
Use the official installation guides at first and use community content as supplementary material. Open an issue or PR if you'd like to add your link to the list 🙏 (Ordered by last update time)
|
> [!NOTE]
|
||||||
|
> This is community-contributed. Due to environment, setup, or networking differences, results may vary. Please open a PR to improve it instead of creating an issue, as the maintainer is not actively maintaining it.
|
||||||
|
|
||||||
|
|
||||||
|
Use the official installation guides at first and use community content as supplementary material. (Ordered by last update time)
|
||||||
|
|
||||||
- ▶ [Discover & Monitor Your Network with This Self-Hosted Open Source Tool - Lawrence Systems](https://www.youtube.com/watch?v=R3b5cxLZMpo) (June 2025)
|
- ▶ [Discover & Monitor Your Network with This Self-Hosted Open Source Tool - Lawrence Systems](https://www.youtube.com/watch?v=R3b5cxLZMpo) (June 2025)
|
||||||
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
|
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
|
||||||
@@ -13,3 +17,5 @@ Use the official installation guides at first and use community content as suppl
|
|||||||
- ▶ [Pi.Alert auf Synology & Docker by - Jürgen Barth](https://www.youtube.com/watch?v=-ouvA2UNu-A) (March 2023)
|
- ▶ [Pi.Alert auf Synology & Docker by - Jürgen Barth](https://www.youtube.com/watch?v=-ouvA2UNu-A) (March 2023)
|
||||||
- ▶ [Top Docker Container for Home Server Security - VirtualizationHowto](https://www.youtube.com/watch?v=tY-w-enLF6Q) (March 2023)
|
- ▶ [Top Docker Container for Home Server Security - VirtualizationHowto](https://www.youtube.com/watch?v=tY-w-enLF6Q) (March 2023)
|
||||||
- ▶ [Pi.Alert or WatchYourLAN can alert you to unknown devices appearing on your WiFi or LAN network - Danie van der Merwe](https://www.youtube.com/watch?v=v6an9QG2xF0) (November 2022)
|
- ▶ [Pi.Alert or WatchYourLAN can alert you to unknown devices appearing on your WiFi or LAN network - Danie van der Merwe](https://www.youtube.com/watch?v=v6an9QG2xF0) (November 2022)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,31 +13,6 @@ This functionality allows you to define **custom properties** for devices, which
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Defining Custom Properties
|
|
||||||
|
|
||||||
Custom properties are structured as a list of objects, where each property includes the following fields:
|
|
||||||
|
|
||||||
| Field | Description |
|
|
||||||
|--------------------|-----------------------------------------------------------------------------|
|
|
||||||
| `CUSTPROP_icon` | The icon (Base64-encoded HTML) displayed for the property. |
|
|
||||||
| `CUSTPROP_type` | The action type (e.g., `show_notes`, `link`, `delete_dev`). |
|
|
||||||
| `CUSTPROP_name` | A short name or title for the property. |
|
|
||||||
| `CUSTPROP_args` | Arguments for the action (e.g., URL or modal text). |
|
|
||||||
| `CUSTPROP_notes` | Additional notes or details displayed when applicable. |
|
|
||||||
| `CUSTPROP_show` | A boolean to control visibility (`true` to show on the listing page). |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Available Action Types
|
|
||||||
|
|
||||||
- **Show Notes**: Displays a modal with a title and additional notes.
|
|
||||||
- **Example**: Show firmware details or custom messages.
|
|
||||||
- **Link**: Redirects to a specified URL in the current browser tab. (**Arguments** Needs to contain the full URL.)
|
|
||||||
- **Link (New Tab)**: Opens a specified URL in a new browser tab. (**Arguments** Needs to contain the full URL.)
|
|
||||||
- **Delete Device**: Deletes the device using its MAC address.
|
|
||||||
- **Run Plugin**: Placeholder for executing custom plugins (not implemented yet).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Usage on the Device Listing Page
|
## Usage on the Device Listing Page
|
||||||
|
|
||||||
@@ -74,6 +49,33 @@ Visible properties (`CUSTPROP_show: true`) are displayed as interactive icons in
|
|||||||
3. **Device Removal**:
|
3. **Device Removal**:
|
||||||
- Enable device removal functionality using `CUSTPROP_type: delete_dev`.
|
- Enable device removal functionality using `CUSTPROP_type: delete_dev`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Defining Custom Properties
|
||||||
|
|
||||||
|
Custom properties are structured as a list of objects, where each property includes the following fields:
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
|--------------------|-----------------------------------------------------------------------------|
|
||||||
|
| `CUSTPROP_icon` | The icon (Base64-encoded HTML) displayed for the property. |
|
||||||
|
| `CUSTPROP_type` | The action type (e.g., `show_notes`, `link`, `delete_dev`). |
|
||||||
|
| `CUSTPROP_name` | A short name or title for the property. |
|
||||||
|
| `CUSTPROP_args` | Arguments for the action (e.g., URL or modal text). |
|
||||||
|
| `CUSTPROP_notes` | Additional notes or details displayed when applicable. |
|
||||||
|
| `CUSTPROP_show` | A boolean to control visibility (`true` to show on the listing page). |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Available Action Types
|
||||||
|
|
||||||
|
- **Show Notes**: Displays a modal with a title and additional notes.
|
||||||
|
- **Example**: Show firmware details or custom messages.
|
||||||
|
- **Link**: Redirects to a specified URL in the current browser tab. (**Arguments** Needs to contain the full URL.)
|
||||||
|
- **Link (New Tab)**: Opens a specified URL in a new browser tab. (**Arguments** Needs to contain the full URL.)
|
||||||
|
- **Delete Device**: Deletes the device using its MAC address.
|
||||||
|
- **Run Plugin**: Placeholder for executing custom plugins (not implemented yet).
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ The database and device structure may change with new releases. When using the C
|
|||||||

|

|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The file containing a list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by acessing this URL: `<server>:20211/php/server/devices.php?action=ExportCSV` or via the `CSV Backup` plugin. (💡 You can schedule this)
|
> The file containing a list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this with the `CSV Backup` plugin. (💡 You can schedule this)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ The Main Info section is where most of the device identifiable information is st
|
|||||||
|
|
||||||
- **MAC**: MAC addres of the device. Not editable, unless creating a new dummy device.
|
- **MAC**: MAC addres of the device. Not editable, unless creating a new dummy device.
|
||||||
- **Last IP**: IP addres of the device. Not editable, unless creating a new dummy device.
|
- **Last IP**: IP addres of the device. Not editable, unless creating a new dummy device.
|
||||||
- **Name**: Friendly device name. Autodetected via various 🆎 Name discovery [plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md). The app attaches `(IP match)` if the name is discovered via an IP match and not MAC match which could mean the name could be incorrect as IPs might change.
|
- **Name**: Friendly device name. Autodetected via various 🆎 Name discovery [plugins](https://docs.netalertx.com/PLUGINS). The app attaches `(IP match)` if the name is discovered via an IP match and not MAC match which could mean the name could be incorrect as IPs might change.
|
||||||
- **Icon**: Partially autodetected. Select an existing or [add a custom icon](./ICONS.md). You can also auto-apply the same icon on all devices of the same type.
|
- **Icon**: Partially autodetected. Select an existing or [add a custom icon](./ICONS.md). You can also auto-apply the same icon on all devices of the same type.
|
||||||
- **Owner**: Device owner (The list is self-populated with existing owners and you can add custom values).
|
- **Owner**: Device owner (The list is self-populated with existing owners and you can add custom values).
|
||||||
- **Type**: Select a device type from the dropdown list (`Smartphone`, `Tablet`,
|
- **Type**: Select a device type from the dropdown list (`Smartphone`, `Tablet`,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# NetAlertX and Docker Compose
|
# NetAlertX and Docker Compose
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> ⚠️ **Important:** The docker-compose has recently changed. Carefully read the [Migration guide](https://jokob-sk.github.io/NetAlertX/MIGRATION/?h=migrat#12-migration-from-netalertx-v25524) for detailed instructions.
|
> ⚠️ **Important:** The docker-compose has recently changed. Carefully read the [Migration guide](https://docs.netalertx.com/MIGRATION/?h=migrat#12-migration-from-netalertx-v25524) for detailed instructions.
|
||||||
|
|
||||||
Great care is taken to ensure NetAlertX meets the needs of everyone while being flexible enough for anyone. This document outlines how you can configure your docker-compose. There are many settings, so we recommend using the Baseline Docker Compose as-is, or modifying it for your system.Good care is taken to ensure NetAlertX meets the needs of everyone while being flexible enough for anyone. This document outlines how you can configure your docker-compose. There are many settings, so we recommend using the Baseline Docker Compose as-is, or modifying it for your system.
|
Great care is taken to ensure NetAlertX meets the needs of everyone while being flexible enough for anyone. This document outlines how you can configure your docker-compose. There are many settings, so we recommend using the Baseline Docker Compose as-is, or modifying it for your system.Good care is taken to ensure NetAlertX meets the needs of everyone while being flexible enough for anyone. This document outlines how you can configure your docker-compose. There are many settings, so we recommend using the Baseline Docker Compose as-is, or modifying it for your system.
|
||||||
|
|
||||||
@@ -69,6 +69,8 @@ services:
|
|||||||
PORT: ${PORT:-20211} # Application port
|
PORT: ${PORT:-20211} # Application port
|
||||||
GRAPHQL_PORT: ${GRAPHQL_PORT:-20212} # GraphQL API port (passed into APP_CONF_OVERRIDE at runtime)
|
GRAPHQL_PORT: ${GRAPHQL_PORT:-20212} # GraphQL API port (passed into APP_CONF_OVERRIDE at runtime)
|
||||||
# NETALERTX_DEBUG: ${NETALERTX_DEBUG:-0} # 0=kill all services and restart if any dies. 1 keeps running dead services.
|
# NETALERTX_DEBUG: ${NETALERTX_DEBUG:-0} # 0=kill all services and restart if any dies. 1 keeps running dead services.
|
||||||
|
# PUID: 20211 # Runtime PUID override, set to 0 to run as root
|
||||||
|
# PGID: 20211 # Runtime PGID override
|
||||||
|
|
||||||
# Resource limits to prevent resource exhaustion
|
# Resource limits to prevent resource exhaustion
|
||||||
mem_limit: 2048m # Maximum memory usage
|
mem_limit: 2048m # Maximum memory usage
|
||||||
@@ -171,10 +173,6 @@ Now, any files created by NetAlertX in `/data/config` will appear in your `/loca
|
|||||||
|
|
||||||
This same method works for mounting other things, like custom plugins or enterprise NGINX files, as shown in the commented-out examples in the baseline file.
|
This same method works for mounting other things, like custom plugins or enterprise NGINX files, as shown in the commented-out examples in the baseline file.
|
||||||
|
|
||||||
## Example Configuration Summaries
|
|
||||||
|
|
||||||
Here are the essential modifications for common alternative setups.
|
|
||||||
|
|
||||||
### Example 2: External `.env` File for Paths
|
### Example 2: External `.env` File for Paths
|
||||||
|
|
||||||
This method is useful for keeping your paths and other settings separate from your main compose file, making it more portable.
|
This method is useful for keeping your paths and other settings separate from your main compose file, making it more portable.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
# NetAlertX - Network scanner & notification framework
|
# NetAlertX - Network scanner & notification framework
|
||||||
|
|
||||||
| [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_INSTALLATION.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
| [📑 Docker guide](https://docs.netalertx.com/DOCKER_INSTALLATION) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://docs.netalertx.com/) | [🔌 Plugins](https://docs.netalertx.com/PLUGINS) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
||||||
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
||||||
|
|
||||||
<a href="https://raw.githubusercontent.com/jokob-sk/NetAlertX/main/docs/img/GENERAL/github_social_image.jpg" target="_blank">
|
<a href="https://raw.githubusercontent.com/jokob-sk/NetAlertX/main/docs/img/GENERAL/github_social_image.jpg" target="_blank">
|
||||||
@@ -16,12 +16,12 @@
|
|||||||
Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and screenshots 📷.
|
Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and screenshots 📷.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> There is also an experimental 🧪 [bare-metal install](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md) method available.
|
> There is also an experimental 🧪 [bare-metal install](https://docs.netalertx.com/HW_INSTALL) method available.
|
||||||
|
|
||||||
## 📕 Basic Usage
|
## 📕 Basic Usage
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> You will have to run the container on the `host` network and specify `SCAN_SUBNETS` unless you use other [plugin scanners](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md). The initial scan can take a few minutes, so please wait 5-10 minutes for the initial discovery to finish.
|
> You will have to run the container on the `host` network and specify `SCAN_SUBNETS` unless you use other [plugin scanners](https://docs.netalertx.com/PLUGINS). The initial scan can take a few minutes, so please wait 5-10 minutes for the initial discovery to finish.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -d --rm --network=host \
|
docker run -d --rm --network=host \
|
||||||
@@ -35,7 +35,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://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md).
|
See alternative [docked-compose examples](https://docs.netalertx.com/DOCKER_COMPOSE).
|
||||||
|
|
||||||
### Default ports
|
### Default ports
|
||||||
|
|
||||||
@@ -48,11 +48,11 @@ See alternative [docked-compose examples](https://github.com/jokob-sk/NetAlertX/
|
|||||||
|
|
||||||
| Variable | Description | Example/Default Value |
|
| Variable | Description | Example/Default Value |
|
||||||
| :------------- |:------------------------| -----:|
|
| :------------- |:------------------------| -----:|
|
||||||
| `PUID` |Runtime UID override | `20211` |
|
| `PUID` |Runtime UID override, set to `0` to run as root. | `20211` |
|
||||||
| `PGID` |Runtime GID override | `20211` |
|
| `PGID` |Runtime GID override | `20211` |
|
||||||
| `PORT` |Port of the web interface | `20211` |
|
| `PORT` |Port of the web interface | `20211` |
|
||||||
| `LISTEN_ADDR` |Set the specific IP Address for the listener address for the nginx webserver (web interface). This could be useful when using multiple subnets to hide the web interface from all untrusted networks. | `0.0.0.0` |
|
| `LISTEN_ADDR` |Set the specific IP Address for the listener address for the nginx webserver (web interface). This could be useful when using multiple subnets to hide the web interface from all untrusted networks. | `0.0.0.0` |
|
||||||
|`LOADED_PLUGINS` | Default [plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) to load. Plugins cannot be loaded with `APP_CONF_OVERRIDE`, you need to use this variable instead and then specify the plugins settings with `APP_CONF_OVERRIDE`. | `["PIHOLE","ASUSWRT"]` |
|
|`LOADED_PLUGINS` | Default [plugins](https://docs.netalertx.com/PLUGINS) to load. Plugins cannot be loaded with `APP_CONF_OVERRIDE`, you need to use this variable instead and then specify the plugins settings with `APP_CONF_OVERRIDE`. | `["PIHOLE","ASUSWRT"]` |
|
||||||
|`APP_CONF_OVERRIDE` | JSON override for settings (except `LOADED_PLUGINS`). | `{"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","GRAPHQL_PORT":"20212"}` |
|
|`APP_CONF_OVERRIDE` | JSON override for settings (except `LOADED_PLUGINS`). | `{"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","GRAPHQL_PORT":"20212"}` |
|
||||||
|`ALWAYS_FRESH_INSTALL` | ⚠ If `true` will delete the content of the `/db` & `/config` folders. For testing purposes. Can be coupled with [watchtower](https://github.com/containrrr/watchtower) to have an always freshly installed `netalertx`/`netalertx-dev` image. | `true` |
|
|`ALWAYS_FRESH_INSTALL` | ⚠ If `true` will delete the content of the `/db` & `/config` folders. For testing purposes. Can be coupled with [watchtower](https://github.com/containrrr/watchtower) to have an always freshly installed `netalertx`/`netalertx-dev` image. | `true` |
|
||||||
|
|
||||||
@@ -61,16 +61,16 @@ See alternative [docked-compose examples](https://github.com/jokob-sk/NetAlertX/
|
|||||||
### Docker paths
|
### Docker paths
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> See also [Backup strategies](https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md).
|
> See also [Backup strategies](https://docs.netalertx.com/BACKUPS).
|
||||||
|
|
||||||
| Required | Path | Description |
|
| Required | Path | Description |
|
||||||
| :------------- | :------------- | :-------------|
|
| :------------- | :------------- | :-------------|
|
||||||
| ✅ | `:/data` | Folder which needs to contain a `/db` and `/config` sub-folders. |
|
| ✅ | `:/data` | Folder which needs to contain a `/db` and `/config` sub-folders. |
|
||||||
| ✅ | `/etc/localtime:/etc/localtime:ro` | Ensuring the timezone is the same as on the server. |
|
| ✅ | `/etc/localtime:/etc/localtime:ro` | Ensuring the timezone is the same as on the server. |
|
||||||
| | `:/tmp/log` | Logs folder useful for debugging if you have issues setting up the container |
|
| | `:/tmp/log` | Logs folder useful for debugging if you have issues setting up the container |
|
||||||
| | `:/tmp/api` | The [API endpoint](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) containing static (but regularly updated) json and other files. Path configurable via `NETALERTX_API` environment variable. |
|
| | `:/tmp/api` | The [API endpoint](https://docs.netalertx.com/API) containing static (but regularly updated) json and other files. Path configurable via `NETALERTX_API` environment variable. |
|
||||||
| | `:/app/front/plugins/<plugin>/ignore_plugin` | Map a file `ignore_plugin` to ignore a plugin. Plugins can be soft-disabled via settings. More in the [Plugin docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md). |
|
| | `:/app/front/plugins/<plugin>/ignore_plugin` | Map a file `ignore_plugin` to ignore a plugin. Plugins can be soft-disabled via settings. More in the [Plugin docs](https://docs.netalertx.com/PLUGINS). |
|
||||||
| | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REVERSE_DNS.md). |
|
| | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://docs.netalertx.com/REVERSE_DNS). |
|
||||||
|
|
||||||
### Folder structure
|
### Folder structure
|
||||||
|
|
||||||
@@ -100,23 +100,23 @@ sudo chmod -R a+rwx /local_data_dir
|
|||||||
|
|
||||||
#### Setting up scanners
|
#### Setting up scanners
|
||||||
|
|
||||||
You have to specify which network(s) should be scanned. This is done by entering subnets that are accessible from the host. If you use the default `ARPSCAN` plugin, you have to specify at least one valid subnet and interface in the `SCAN_SUBNETS` setting. See the documentation on [How to set up multiple SUBNETS, VLANs and what are limitations](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md) for troubleshooting and more advanced scenarios.
|
You have to specify which network(s) should be scanned. This is done by entering subnets that are accessible from the host. If you use the default `ARPSCAN` plugin, you have to specify at least one valid subnet and interface in the `SCAN_SUBNETS` setting. See the documentation on [How to set up multiple SUBNETS, VLANs and what are limitations](https://docs.netalertx.com/SUBNETS) for troubleshooting and more advanced scenarios.
|
||||||
|
|
||||||
If you are running PiHole you can synchronize devices directly. Check the [PiHole configuration guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PIHOLE_GUIDE.md) for details.
|
If you are running PiHole you can synchronize devices directly. Check the [PiHole configuration guide](https://docs.netalertx.com/PIHOLE_GUIDE) for details.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> You can bulk-import devices via the [CSV import method](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICES_BULK_EDITING.md).
|
> You can bulk-import devices via the [CSV import method](https://docs.netalertx.com/DEVICES_BULK_EDITING).
|
||||||
|
|
||||||
#### Community guides
|
#### Community guides
|
||||||
|
|
||||||
You can read or watch several [community configuration guides](https://github.com/jokob-sk/NetAlertX/blob/main/docs/COMMUNITY_GUIDES.md) in Chinese, Korean, German, or French.
|
You can read or watch several [community configuration guides](https://docs.netalertx.com/COMMUNITY_GUIDES) in Chinese, Korean, German, or French.
|
||||||
|
|
||||||
> Please note these might be outdated. Rely on official documentation first.
|
> Please note these might be outdated. Rely on official documentation first.
|
||||||
|
|
||||||
#### Common issues
|
#### Common issues
|
||||||
|
|
||||||
- Before creating a new issue, please check if a similar issue was [already resolved](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed).
|
- Before creating a new issue, please check if a similar issue was [already resolved](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed).
|
||||||
- Check also common issues and [debugging tips](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md).
|
- Check also common issues and [debugging tips](https://docs.netalertx.com/DEBUG_TIPS).
|
||||||
|
|
||||||
## 💙 Support me
|
## 💙 Support me
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# The NetAlertX Container Operator's Guide
|
# The NetAlertX Container Operator's Guide
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> ⚠️ **Important:** The docker-compose has recently changed. Carefully read the [Migration guide](https://jokob-sk.github.io/NetAlertX/MIGRATION/?h=migrat#12-migration-from-netalertx-v25524) for detailed instructions.
|
> ⚠️ **Important:** The docker-compose has recently changed. Carefully read the [Migration guide](https://docs.netalertx.com/MIGRATION/?h=migrat#12-migration-from-netalertx-v25524) for detailed instructions.
|
||||||
|
|
||||||
This guide assumes you are starting with the official `docker-compose.yml` file provided with the project. We strongly recommend you start with or migrate to this file as your baseline and modify it to suit your specific needs (e.g., changing file paths). While there are many ways to configure NetAlertX, the default file is designed to meet the mandatory security baseline with layer-2 networking capabilities while operating securely and without startup warnings.
|
This guide assumes you are starting with the official `docker-compose.yml` file provided with the project. We strongly recommend you start with or migrate to this file as your baseline and modify it to suit your specific needs (e.g., changing file paths). While there are many ways to configure NetAlertX, the default file is designed to meet the mandatory security baseline with layer-2 networking capabilities while operating securely and without startup warnings.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
# Docker Swarm Deployment Guide (IPvlan)
|
# Docker Swarm Deployment Guide (IPvlan)
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> This is community-contributed. Due to environment, setup, or networking differences, results may vary. Please open a PR to improve it instead of creating an issue, as the maintainer is not actively maintaining it.
|
||||||
|
|
||||||
|
|
||||||
This guide describes how to deploy **NetAlertX** in a **Docker Swarm** environment using an `ipvlan` network. This enables the container to receive a LAN IP address directly, which is ideal for network monitoring.
|
This guide describes how to deploy **NetAlertX** in a **Docker Swarm** environment using an `ipvlan` network. This enables the container to receive a LAN IP address directly, which is ideal for network monitoring.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -68,4 +72,3 @@ networks:
|
|||||||
* Make sure the assigned IP (`192.168.1.240` above) is not in use or managed by DHCP.
|
* Make sure the assigned IP (`192.168.1.240` above) is not in use or managed by DHCP.
|
||||||
* You may also use a node label constraint instead of `node.role == manager` for more control.
|
* You may also use a node label constraint instead of `node.role == manager` for more control.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -38,16 +38,28 @@ NetAlertX requires certain paths to be writable at runtime. These paths should b
|
|||||||
|
|
||||||
> All these paths will have **UID 20211 / GID 20211** inside the container. Files on the host will appear owned by `20211:20211`.
|
> All these paths will have **UID 20211 / GID 20211** inside the container. Files on the host will appear owned by `20211:20211`.
|
||||||
|
|
||||||
You can cahnge the default PUID and GUID with env variables:
|
## Running as `root`
|
||||||
|
|
||||||
|
You can override the default PUID and PGID using environment variables:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
...
|
...
|
||||||
environment:
|
environment:
|
||||||
PUID: 20211 # Runtime PUID override
|
PUID: 20211 # Runtime PUID override, set to 0 to run as root
|
||||||
PGID: 20211 # Runtime PGID override
|
PGID: 20211 # Runtime PGID override
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To run as the root user, it usually looks like this (verify the IDs on your server first by executing `id root`):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
...
|
||||||
|
environment:
|
||||||
|
PUID: 0 # Runtime PUID override, set to 0 to run as root
|
||||||
|
PGID: 100 # Runtime PGID override
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
### Solution
|
### Solution
|
||||||
|
|
||||||
1. **Run the container once as root** (`--user "0"`) to allow it to correct permissions automatically:
|
1. **Run the container once as root** (`--user "0"`) to allow it to correct permissions automatically:
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
|
|
||||||
NetAlertX can be installed several ways. The best supported option is Docker, followed by a supervised Home Assistant instance, as an Unraid app, and lastly, on bare metal.
|
NetAlertX can be installed several ways. The best supported option is Docker, followed by a supervised Home Assistant instance, as an Unraid app, and lastly, on bare metal.
|
||||||
|
|
||||||
- [[Installation] Docker (recommended)](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_INSTALLATION.md)
|
- [[Installation] Docker (recommended)](https://docs.netalertx.com/DOCKER_INSTALLATION)
|
||||||
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
|
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
|
||||||
- [[Installation] Unraid App](https://unraid.net/community/apps)
|
- [[Installation] Unraid App](https://unraid.net/community/apps)
|
||||||
- [[Installation] Bare metal (experimental - looking for maintainers)](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md)
|
- [[Installation] Bare metal (experimental - looking for maintainers)](https://docs.netalertx.com/HW_INSTALL)
|
||||||
|
|
||||||
|
|
||||||
## Help
|
## Help
|
||||||
|
|||||||
@@ -297,5 +297,5 @@ sudo chmod -R a+rwx /local_data_dir
|
|||||||
```
|
```
|
||||||
|
|
||||||
8. Start the container and verify everything works as expeexpected.
|
8. Start the container and verify everything works as expeexpected.
|
||||||
9. Check the [Permissions -> Writable-paths](https://jokob-sk.github.io/NetAlertX/FILE_PERMISSIONS/#writable-paths) what directories to mount if you'd like to access the API or log files.
|
9. Check the [Permissions -> Writable-paths](https://docs.netalertx.com/FILE_PERMISSIONS/#writable-paths) what directories to mount if you'd like to access the API or log files.
|
||||||
|
|
||||||
|
|||||||
1041
docs/PLUGINS_DEV.md
1041
docs/PLUGINS_DEV.md
File diff suppressed because it is too large
Load Diff
378
docs/PLUGINS_DEV_DATASOURCES.md
Normal file
378
docs/PLUGINS_DEV_DATASOURCES.md
Normal file
@@ -0,0 +1,378 @@
|
|||||||
|
# Plugin Data Sources
|
||||||
|
|
||||||
|
Learn how to configure different data sources for your plugin.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Data sources determine **where the plugin gets its data** and **what format it returns**. NetAlertX supports multiple data source types, each suited for different use cases.
|
||||||
|
|
||||||
|
| Data Source | Type | Purpose | Returns | Example |
|
||||||
|
|-------------|------|---------|---------|---------|
|
||||||
|
| `script` | Code Execution | Execute Linux commands or Python scripts | Pipeline | Scan network, collect metrics, call APIs |
|
||||||
|
| `app-db-query` | Database Query | Query the NetAlertX database | Result set | Show devices, open ports, recent events |
|
||||||
|
| `sqlite-db-query` | External DB | Query external SQLite databases | Result set | PiHole database, external logs |
|
||||||
|
| `template` | Template | Generate values from templates | Values | Initialize default settings |
|
||||||
|
|
||||||
|
## Data Source: `script`
|
||||||
|
|
||||||
|
Execute any Linux command or Python script and capture its output.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_source": "script",
|
||||||
|
"show_ui": true,
|
||||||
|
"mapped_to_table": "CurrentScan"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### How It Works
|
||||||
|
|
||||||
|
1. Command specified in `CMD` setting is executed
|
||||||
|
2. Script writes results to `/tmp/log/plugins/last_result.<PREFIX>.log`
|
||||||
|
3. Core reads file and parses pipe-delimited results
|
||||||
|
4. Results inserted into database
|
||||||
|
|
||||||
|
### Example: Simple Python Script
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "python3 /app/front/plugins/my_plugin/script.py",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Command"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Bash Script
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"default_value": "bash /app/front/plugins/my_plugin/script.sh",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Command"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Best Practices
|
||||||
|
|
||||||
|
- **Always use absolute paths** (e.g., `/app/front/plugins/...`)
|
||||||
|
- **Use `plugin_helper.py`** for output formatting
|
||||||
|
- **Add timeouts** via `RUN_TIMEOUT` setting (default: 60s)
|
||||||
|
- **Log errors** to `/tmp/log/plugins/<PREFIX>.log`
|
||||||
|
- **Handle missing dependencies gracefully**
|
||||||
|
|
||||||
|
### Output Format
|
||||||
|
|
||||||
|
Must write to: `/tmp/log/plugins/last_result.<PREFIX>.log`
|
||||||
|
|
||||||
|
Format: Pipe-delimited, 9 or 13 columns
|
||||||
|
|
||||||
|
See [Plugin Data Contract](PLUGINS_DEV_DATA_CONTRACT.md) for exact format
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Source: `app-db-query`
|
||||||
|
|
||||||
|
Query the NetAlertX SQLite database and display results.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_source": "app-db-query",
|
||||||
|
"show_ui": true,
|
||||||
|
"mapped_to_table": "CurrentScan"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### How It Works
|
||||||
|
|
||||||
|
1. SQL query specified in `CMD` setting is executed against `app.db`
|
||||||
|
2. Results parsed according to column definitions
|
||||||
|
3. Inserted into plugin display/database
|
||||||
|
|
||||||
|
### SQL Query Requirements
|
||||||
|
|
||||||
|
- Must return exactly **9 or 13 columns** matching the [data contract](PLUGINS_DEV_DATA_CONTRACT.md)
|
||||||
|
- Column names must match (order matters!)
|
||||||
|
- Must be **readable SQLite SQL** (not vendor-specific)
|
||||||
|
|
||||||
|
### Example: Open Ports from Nmap
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "SELECT dv.devName as Object_PrimaryID, cast(dv.devLastIP as VARCHAR(100)) || ':' || cast(SUBSTR(ns.Port, 0, INSTR(ns.Port, '/')) as VARCHAR(100)) as Object_SecondaryID, datetime() as DateTime, ns.Service as Watched_Value1, ns.State as Watched_Value2, null as Watched_Value3, null as Watched_Value4, ns.Extra as Extra, dv.devMac as ForeignKey FROM (SELECT * FROM Nmap_Scan) ns LEFT JOIN (SELECT devName, devMac, devLastIP FROM Devices) dv ON ns.MAC = dv.devMac",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "SQL to run"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "This SQL query populates the plugin table"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Recent Device Events
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
e.EventValue as Object_PrimaryID,
|
||||||
|
d.devName as Object_SecondaryID,
|
||||||
|
e.EventDateTime as DateTime,
|
||||||
|
e.EventType as Watched_Value1,
|
||||||
|
d.devLastIP as Watched_Value2,
|
||||||
|
null as Watched_Value3,
|
||||||
|
null as Watched_Value4,
|
||||||
|
e.EventDetails as Extra,
|
||||||
|
d.devMac as ForeignKey
|
||||||
|
FROM
|
||||||
|
Events e
|
||||||
|
LEFT JOIN
|
||||||
|
Devices d ON e.DeviceMac = d.devMac
|
||||||
|
WHERE
|
||||||
|
e.EventDateTime > datetime('now', '-24 hours')
|
||||||
|
ORDER BY
|
||||||
|
e.EventDateTime DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [Database documentation](./DATABASE.md) for a list of common columns.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Source: `sqlite-db-query`
|
||||||
|
|
||||||
|
Query an **external SQLite database** mounted in the container.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
First, define the database path in a setting:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "DB_PATH",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "/etc/pihole/pihole-FTL.db",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Database path"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Path to external SQLite database"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then set data source and query:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_source": "sqlite-db-query",
|
||||||
|
"show_ui": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### How It Works
|
||||||
|
|
||||||
|
1. External database file path specified in `DB_PATH` setting
|
||||||
|
2. Database mounted at that path (e.g., via Docker volume)
|
||||||
|
3. SQL query executed against external database using `EXTERNAL_<PREFIX>.` prefix
|
||||||
|
4. Results returned in standard format
|
||||||
|
|
||||||
|
### SQL Query Example: PiHole Data
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"default_value": "SELECT hwaddr as Object_PrimaryID, cast('http://' || (SELECT ip FROM EXTERNAL_PIHOLE.network_addresses WHERE network_id = id ORDER BY lastseen DESC LIMIT 1) as VARCHAR(100)) || ':' || cast(SUBSTR((SELECT name FROM EXTERNAL_PIHOLE.network_addresses WHERE network_id = id ORDER BY lastseen DESC LIMIT 1), 0, INSTR((SELECT name FROM EXTERNAL_PIHOLE.network_addresses WHERE network_id = id ORDER BY lastseen DESC LIMIT 1), '/')) as VARCHAR(100)) as Object_SecondaryID, datetime() as DateTime, macVendor as Watched_Value1, lastQuery as Watched_Value2, (SELECT name FROM EXTERNAL_PIHOLE.network_addresses WHERE network_id = id ORDER BY lastseen DESC LIMIT 1) as Watched_Value3, null as Watched_Value4, '' as Extra, hwaddr as ForeignKey FROM EXTERNAL_PIHOLE.network WHERE hwaddr NOT LIKE 'ip-%' AND hwaddr <> '00:00:00:00:00:00'",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "SQL to run"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Points
|
||||||
|
|
||||||
|
- **Prefix all external tables** with `EXTERNAL_<PREFIX>.`
|
||||||
|
- For PiHole (`PIHOLE` prefix): `EXTERNAL_PIHOLE.network`
|
||||||
|
- For custom database (`CUSTOM` prefix): `EXTERNAL_CUSTOM.my_table`
|
||||||
|
- **Database must be valid SQLite**
|
||||||
|
- **Path must be accessible** inside the container
|
||||||
|
- **No columns beyond the data contract** required
|
||||||
|
|
||||||
|
### Docker Volume Setup
|
||||||
|
|
||||||
|
To mount external database in docker-compose:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
netalertx:
|
||||||
|
volumes:
|
||||||
|
- /path/on/host/pihole-FTL.db:/etc/pihole/pihole-FTL.db:ro
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Source: `template`
|
||||||
|
|
||||||
|
Generate values from a template. Usually used for initialization and default settings.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_source": "template"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### How It Works
|
||||||
|
|
||||||
|
- **Not widely used** in standard plugins
|
||||||
|
- Used internally for generating default values
|
||||||
|
- Check `newdev_template` plugin for implementation example
|
||||||
|
|
||||||
|
### Example: Default Device Template
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "DEFAULT_DEVICE_PROPERTIES",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "textarea", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "type=Unknown|vendor=Unknown",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Default properties"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Source: `plugin_type`
|
||||||
|
|
||||||
|
Declare the plugin category. Controls where settings appear in the UI.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_source": "plugin_type",
|
||||||
|
"value": "scanner"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Supported Values
|
||||||
|
|
||||||
|
| Value | Section | Purpose |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| `scanner` | Device Scanners | Discovers devices on network |
|
||||||
|
| `system` | System Plugins | Core system functionality |
|
||||||
|
| `publisher` | Notification/Alert Plugins | Sends notifications/alerts |
|
||||||
|
| `importer` | Data Importers | Imports devices from external sources |
|
||||||
|
| `other` | Other Plugins | Miscellaneous functionality |
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"function": "plugin_type",
|
||||||
|
"type": {"dataType": "string", "elements": []},
|
||||||
|
"default_value": "scanner",
|
||||||
|
"options": ["scanner"],
|
||||||
|
"data_source": "plugin_type",
|
||||||
|
"value": "scanner",
|
||||||
|
"localized": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Execution Order
|
||||||
|
|
||||||
|
Control plugin execution priority. Higher priority plugins run first.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"execution_order": "Layer_0"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Levels (highest to lowest priority)
|
||||||
|
|
||||||
|
- `Layer_0` - Highest priority (run first)
|
||||||
|
- `Layer_1`
|
||||||
|
- `Layer_2`
|
||||||
|
- ...
|
||||||
|
|
||||||
|
### Example: Device Discovery
|
||||||
|
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code_name": "device_scanner",
|
||||||
|
"unique_prefix": "DEVSCAN",
|
||||||
|
"execution_order": "Layer_0",
|
||||||
|
"data_source": "script",
|
||||||
|
"mapped_to_table": "CurrentScan"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Performance Considerations
|
||||||
|
|
||||||
|
### Script Source
|
||||||
|
- **Pros:** Flexible, can call external tools
|
||||||
|
- **Cons:** Slower than database queries
|
||||||
|
- **Optimization:** Add caching, use timeouts
|
||||||
|
- **Default timeout:** 60 seconds (set `RUN_TIMEOUT`)
|
||||||
|
|
||||||
|
### Database Query Source
|
||||||
|
- **Pros:** Fast, native query optimization
|
||||||
|
- **Cons:** Limited to SQL capabilities
|
||||||
|
- **Optimization:** Use indexes, avoid complex joins
|
||||||
|
- **Timeout:** Usually instant
|
||||||
|
|
||||||
|
### External DB Query Source
|
||||||
|
- **Pros:** Direct access to external data
|
||||||
|
- **Cons:** Network latency, external availability
|
||||||
|
- **Optimization:** Use indexes in external DB, selective queries
|
||||||
|
- **Timeout:** Depends on DB response time
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Debugging Data Sources
|
||||||
|
|
||||||
|
### Check Script Output
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run script manually
|
||||||
|
python3 /app/front/plugins/my_plugin/script.py
|
||||||
|
|
||||||
|
# Check result file
|
||||||
|
cat /tmp/log/plugins/last_result.MYPREFIX.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test SQL Query
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Connect to app database
|
||||||
|
sqlite3 /data/db/app.db
|
||||||
|
|
||||||
|
# Run query
|
||||||
|
sqlite> SELECT ... ;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Monitor Execution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Watch backend logs
|
||||||
|
tail -f /tmp/log/stdout.log | grep -i "data_source\|MYPREFIX"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## See Also
|
||||||
|
|
||||||
|
- [Plugin Data Contract](PLUGINS_DEV_DATA_CONTRACT.md) - Output format specification
|
||||||
|
- [Plugin Settings System](PLUGINS_DEV_SETTINGS.md) - How to define settings
|
||||||
|
- [Quick Start Guide](PLUGINS_DEV_QUICK_START.md) - Create your first plugin
|
||||||
|
- [Database Schema](DATABASE.md) - Available tables and columns
|
||||||
|
- [Debugging Plugins](DEBUG_PLUGINS.md) - Troubleshooting data issues
|
||||||
253
docs/PLUGINS_DEV_DATA_CONTRACT.md
Normal file
253
docs/PLUGINS_DEV_DATA_CONTRACT.md
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
# Plugin Data Contract
|
||||||
|
|
||||||
|
This document specifies the exact interface between plugins and the NetAlertX core.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Every plugin must output data in this exact format to be recognized and processed correctly.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Plugins communicate with NetAlertX by writing results to a **pipe-delimited log file**. The core reads this file, parses the data, and processes it for notifications, device discovery, and data integration.
|
||||||
|
|
||||||
|
**File Location:** `/tmp/log/plugins/last_result.<PREFIX>.log`
|
||||||
|
|
||||||
|
**Format:** Pipe-delimited (`|`), one record per line
|
||||||
|
|
||||||
|
**Required Columns:** 9 (mandatory) + up to 4 optional helper columns = 13 total
|
||||||
|
|
||||||
|
## Column Specification
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> The order of columns is **FIXED** and cannot be changed. All 9 mandatory columns must be provided. If you use any optional column (`HelpVal1`), you must supply all optional columns (`HelpVal1` through `HelpVal4`).
|
||||||
|
|
||||||
|
### Mandatory Columns (0–8)
|
||||||
|
|
||||||
|
| Order | Column Name | Type | Required | Description |
|
||||||
|
|-------|-------------|------|----------|-------------|
|
||||||
|
| 0 | `Object_PrimaryID` | string | **YES** | The primary identifier for grouping. Examples: device MAC, hostname, service name, or any unique ID |
|
||||||
|
| 1 | `Object_SecondaryID` | string | no | Secondary identifier for relationships (e.g., IP address, port, sub-ID). Use `null` if not needed |
|
||||||
|
| 2 | `DateTime` | string | **YES** | Timestamp when the event/data was collected. Format: `YYYY-MM-DD HH:MM:SS` |
|
||||||
|
| 3 | `Watched_Value1` | string | **YES** | Primary watched value. Changes trigger notifications. Examples: IP address, status, version |
|
||||||
|
| 4 | `Watched_Value2` | string | no | Secondary watched value. Use `null` if not needed |
|
||||||
|
| 5 | `Watched_Value3` | string | no | Tertiary watched value. Use `null` if not needed |
|
||||||
|
| 6 | `Watched_Value4` | string | no | Quaternary watched value. Use `null` if not needed |
|
||||||
|
| 7 | `Extra` | string | no | Any additional metadata to display in UI and notifications. Use `null` if not needed |
|
||||||
|
| 8 | `ForeignKey` | string | no | Foreign key linking to parent object (usually MAC address for device relationship). Use `null` if not needed |
|
||||||
|
|
||||||
|
### Optional Columns (9–12)
|
||||||
|
|
||||||
|
| Order | Column Name | Type | Required | Description |
|
||||||
|
|-------|-------------|------|----------|-------------|
|
||||||
|
| 9 | `HelpVal1` | string | *conditional* | Helper value 1. If used, all help values must be supplied |
|
||||||
|
| 10 | `HelpVal2` | string | *conditional* | Helper value 2. If used, all help values must be supplied |
|
||||||
|
| 11 | `HelpVal3` | string | *conditional* | Helper value 3. If used, all help values must be supplied |
|
||||||
|
| 12 | `HelpVal4` | string | *conditional* | Helper value 4. If used, all help values must be supplied |
|
||||||
|
|
||||||
|
## Usage Guide
|
||||||
|
|
||||||
|
### Empty/Null Values
|
||||||
|
|
||||||
|
- Represent empty values as the literal string `null` (not Python `None`, SQL `NULL`, or empty string)
|
||||||
|
- Example: `device_id|null|2023-01-02 15:56:30|status|null|null|null|null|null`
|
||||||
|
|
||||||
|
### Watched Values
|
||||||
|
|
||||||
|
**What are Watched Values?**
|
||||||
|
|
||||||
|
Watched values are fields that the NetAlertX core monitors for **changes between scans**. When a watched value differs from the previous scan, it can trigger notifications.
|
||||||
|
|
||||||
|
**How to use them:**
|
||||||
|
|
||||||
|
- `Watched_Value1`: Always required; primary indicator of status/state
|
||||||
|
- `Watched_Value2–4`: Optional; use for secondary/tertiary state information
|
||||||
|
- Leave unused ones as `null`
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
- Device scanner: `Watched_Value1 = "online"` or `"offline"`
|
||||||
|
- Port scanner: `Watched_Value1 = "80"` (port number), `Watched_Value2 = "open"` (state)
|
||||||
|
- Service monitor: `Watched_Value1 = "200"` (HTTP status), `Watched_Value2 = "0.45"` (response time)
|
||||||
|
|
||||||
|
### Foreign Key
|
||||||
|
|
||||||
|
Use the `ForeignKey` column to link objects to a parent device by MAC address:
|
||||||
|
|
||||||
|
```
|
||||||
|
device_name|192.168.1.100|2023-01-02 15:56:30|online|null|null|null|Found on network|aa:bb:cc:dd:ee:ff
|
||||||
|
↑
|
||||||
|
ForeignKey (MAC)
|
||||||
|
```
|
||||||
|
|
||||||
|
This allows NetAlertX to:
|
||||||
|
|
||||||
|
- Display the object on the device details page
|
||||||
|
- Send notifications when the parent device is involved
|
||||||
|
- Link events across plugins
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Valid Data (9 columns, minimal)
|
||||||
|
|
||||||
|
```csv
|
||||||
|
https://example.com|null|2023-01-02 15:56:30|200|null|null|null|null|null
|
||||||
|
printer-hp-1|192.168.1.50|2023-01-02 15:56:30|online|50%|null|null|Last seen in office|aa:11:22:33:44:55
|
||||||
|
gateway.local|null|2023-01-02 15:56:30|active|v2.1.5|null|null|Firmware version|null
|
||||||
|
```
|
||||||
|
|
||||||
|
### Valid Data (13 columns, with helpers)
|
||||||
|
|
||||||
|
```csv
|
||||||
|
service-api|192.168.1.100:8080|2023-01-02 15:56:30|200|45ms|true|null|Responding normally|aa:bb:cc:dd:ee:ff|extra1|extra2|extra3|extra4
|
||||||
|
host-web-1|10.0.0.20|2023-01-02 15:56:30|active|256GB|online|ok|Production server|null|cpu:80|mem:92|disk:45|alerts:0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Invalid Data (Common Errors)
|
||||||
|
|
||||||
|
❌ **Missing required column** (only 8 separators instead of 8):
|
||||||
|
```csv
|
||||||
|
https://google.com|null|2023-01-02 15:56:30|200|0.7898||null|null
|
||||||
|
↑
|
||||||
|
Missing pipe
|
||||||
|
```
|
||||||
|
|
||||||
|
❌ **Missing mandatory Watched_Value1** (column 3):
|
||||||
|
```csv
|
||||||
|
https://duckduckgo.com|192.168.1.1|2023-01-02 15:56:30|null|0.9898|null|null|Best|null
|
||||||
|
↑
|
||||||
|
Must not be null
|
||||||
|
```
|
||||||
|
|
||||||
|
❌ **Incomplete optional columns** (has HelpVal1 but missing HelpVal2–4):
|
||||||
|
```csv
|
||||||
|
device|null|2023-01-02 15:56:30|status|null|null|null|null|null|helper1
|
||||||
|
↑
|
||||||
|
Has helper but incomplete
|
||||||
|
```
|
||||||
|
|
||||||
|
✅ **Complete with helpers** (all 4 helpers provided):
|
||||||
|
```csv
|
||||||
|
device|null|2023-01-02 15:56:30|status|null|null|null|null|null|h1|h2|h3|h4
|
||||||
|
```
|
||||||
|
|
||||||
|
✅ **Complete without helpers** (9 columns exactly):
|
||||||
|
```csv
|
||||||
|
device|null|2023-01-02 15:56:30|status|null|null|null|null|null
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using `plugin_helper.py`
|
||||||
|
|
||||||
|
The easiest way to ensure correct output is to use the [`plugin_helper.py`](../front/plugins/plugin_helper.py) library:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from plugin_helper import Plugin_Objects
|
||||||
|
|
||||||
|
# Initialize with your plugin's prefix
|
||||||
|
plugin_objects = Plugin_Objects("YOURPREFIX")
|
||||||
|
|
||||||
|
# Add objects
|
||||||
|
plugin_objects.add_object(
|
||||||
|
Object_PrimaryID="device_id",
|
||||||
|
Object_SecondaryID="192.168.1.1",
|
||||||
|
DateTime="2023-01-02 15:56:30",
|
||||||
|
Watched_Value1="online",
|
||||||
|
Watched_Value2=None,
|
||||||
|
Watched_Value3=None,
|
||||||
|
Watched_Value4=None,
|
||||||
|
Extra="Additional data",
|
||||||
|
ForeignKey="aa:bb:cc:dd:ee:ff",
|
||||||
|
HelpVal1=None,
|
||||||
|
HelpVal2=None,
|
||||||
|
HelpVal3=None,
|
||||||
|
HelpVal4=None
|
||||||
|
)
|
||||||
|
|
||||||
|
# Write results (handles formatting, sanitization, and file creation)
|
||||||
|
plugin_objects.write_result_file()
|
||||||
|
```
|
||||||
|
|
||||||
|
The library automatically:
|
||||||
|
|
||||||
|
- Validates data types
|
||||||
|
- Sanitizes string values
|
||||||
|
- Normalizes MAC addresses
|
||||||
|
- Writes to the correct file location
|
||||||
|
- Creates the file in `/tmp/log/plugins/last_result.<PREFIX>.log`
|
||||||
|
|
||||||
|
## De-duplication
|
||||||
|
|
||||||
|
The core runs **de-duplication once per hour** on the `Plugins_Objects` table:
|
||||||
|
|
||||||
|
- **Duplicate Detection Key:** Combination of `Object_PrimaryID`, `Object_SecondaryID`, `Plugin` (auto-filled from `unique_prefix`), and `UserData`
|
||||||
|
- **Resolution:** Oldest duplicate entries are removed, newest are kept
|
||||||
|
- **Use Case:** Prevents duplicate notifications when the same object is detected multiple times
|
||||||
|
|
||||||
|
## DateTime Format
|
||||||
|
|
||||||
|
**Required Format:** `YYYY-MM-DD HH:MM:SS`
|
||||||
|
|
||||||
|
**Examples:**
|
||||||
|
- `2023-01-02 15:56:30` ✅
|
||||||
|
- `2023-1-2 15:56:30` ❌ (missing leading zeros)
|
||||||
|
- `2023-01-02T15:56:30` ❌ (wrong separator)
|
||||||
|
- `15:56:30 2023-01-02` ❌ (wrong order)
|
||||||
|
|
||||||
|
**Python Helper:**
|
||||||
|
```python
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
# Current time in correct format
|
||||||
|
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# Output: "2023-01-02 15:56:30"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Bash Helper:**
|
||||||
|
```bash
|
||||||
|
# Current time in correct format
|
||||||
|
date '+%Y-%m-%d %H:%M:%S'
|
||||||
|
# Output: 2023-01-02 15:56:30
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation Checklist
|
||||||
|
|
||||||
|
Before writing your plugin's `script.py`, ensure:
|
||||||
|
|
||||||
|
- [ ] **9 or 13 columns** in each output line (8 or 12 pipe separators)
|
||||||
|
- [ ] **Mandatory columns filled:**
|
||||||
|
- Column 0: `Object_PrimaryID` (not null)
|
||||||
|
- Column 2: `DateTime` in `YYYY-MM-DD HH:MM:SS` format
|
||||||
|
- Column 3: `Watched_Value1` (not null)
|
||||||
|
- [ ] **Null values as literal string** `null` (not empty string or special chars)
|
||||||
|
- [ ] **No extra pipes or misaligned columns**
|
||||||
|
- [ ] **If using optional helpers** (columns 9–12), all 4 must be present
|
||||||
|
- [ ] **File written to** `/tmp/log/plugins/last_result.<PREFIX>.log`
|
||||||
|
- [ ] **One record per line** (newline-delimited)
|
||||||
|
- [ ] **No header row** (data only)
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
**View raw plugin output:**
|
||||||
|
```bash
|
||||||
|
cat /tmp/log/plugins/last_result.YOURPREFIX.log
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check line count:**
|
||||||
|
```bash
|
||||||
|
wc -l /tmp/log/plugins/last_result.YOURPREFIX.log
|
||||||
|
```
|
||||||
|
|
||||||
|
**Validate column count (should be 8 or 12 pipes per line):**
|
||||||
|
```bash
|
||||||
|
cat /tmp/log/plugins/last_result.YOURPREFIX.log | awk -F'|' '{print NF}' | sort | uniq
|
||||||
|
# Output: 9 (for minimal) or 13 (for with helpers)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check core processing in logs:**
|
||||||
|
```bash
|
||||||
|
tail -f /tmp/log/stdout.log | grep -i "YOURPREFIX\|Plugins_Objects"
|
||||||
|
```
|
||||||
|
|
||||||
|
## See Also
|
||||||
|
|
||||||
|
- [Plugin Settings System](PLUGINS_DEV_SETTINGS.md) - How to accept user input
|
||||||
|
- [Data Sources](PLUGINS_DEV_DATASOURCES.md) - Different data source types
|
||||||
|
- [Debugging Plugins](DEBUG_PLUGINS.md) - Troubleshooting plugin issues
|
||||||
175
docs/PLUGINS_DEV_QUICK_START.md
Normal file
175
docs/PLUGINS_DEV_QUICK_START.md
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
# Plugin Development Quick Start
|
||||||
|
|
||||||
|
Get a working plugin up and running in 5 minutes.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Read [Development Environment Setup Guide](./DEV_ENV_SETUP.md) to set up your local environment
|
||||||
|
- Understand [Plugin Architecture Overview](PLUGINS_DEV.md)
|
||||||
|
|
||||||
|
## Quick Start Steps
|
||||||
|
|
||||||
|
### 1. Create Your Plugin Folder
|
||||||
|
|
||||||
|
Start from the template to get the basic structure:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /workspaces/NetAlertX/front/plugins
|
||||||
|
cp -r __template my_plugin
|
||||||
|
cd my_plugin
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Update `config.json` Identifiers
|
||||||
|
|
||||||
|
Edit `my_plugin/config.json` and update these critical fields:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code_name": "my_plugin",
|
||||||
|
"unique_prefix": "MYPLN",
|
||||||
|
"display_name": [{"language_code": "en_us", "string": "My Plugin"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "My custom plugin"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Important:**
|
||||||
|
- `code_name` must match the folder name
|
||||||
|
- `unique_prefix` must be unique and uppercase (check existing plugins to avoid conflicts)
|
||||||
|
- `unique_prefix` is used as a prefix for all generated settings (e.g., `MYPLN_RUN`, `MYPLN_CMD`)
|
||||||
|
|
||||||
|
### 3. Implement Your Script
|
||||||
|
|
||||||
|
Edit `my_plugin/script.py` and implement your data collection logic:
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
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
|
||||||
|
from helper import get_setting_value
|
||||||
|
from const import logPath
|
||||||
|
|
||||||
|
pluginName = "MYPLN"
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
# Initialize
|
||||||
|
plugin_objects = Plugin_Objects(RESULT_FILE)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Your data collection logic here
|
||||||
|
# For example, scan something and collect results
|
||||||
|
|
||||||
|
# Add an object to results
|
||||||
|
plugin_objects.add_object(
|
||||||
|
Object_PrimaryID="example_id",
|
||||||
|
Object_SecondaryID=None,
|
||||||
|
DateTime="2023-01-02 15:56:30",
|
||||||
|
Watched_Value1="value1",
|
||||||
|
Watched_Value2=None,
|
||||||
|
Watched_Value3=None,
|
||||||
|
Watched_Value4=None,
|
||||||
|
Extra="additional_data",
|
||||||
|
ForeignKey=None
|
||||||
|
)
|
||||||
|
|
||||||
|
# Write results to the log file
|
||||||
|
plugin_objects.write_result_file()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
mylog("none", f"Error: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Configure Execution
|
||||||
|
|
||||||
|
Edit the `RUN` and `CMD` settings in `config.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "RUN",
|
||||||
|
"type": {"dataType":"string", "elements": [{"elementType": "select", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "disabled",
|
||||||
|
"options": ["disabled", "once", "schedule"],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code":"en_us", "string": "When to run"}],
|
||||||
|
"description": [{"language_code":"en_us", "string": "Enable plugin execution"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"type": {"dataType":"string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "python3 /app/front/plugins/my_plugin/script.py",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code":"en_us", "string": "Command"}],
|
||||||
|
"description": [{"language_code":"en_us", "string": "Command to execute"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Test Your Plugin
|
||||||
|
|
||||||
|
#### In Dev Container
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test the script directly
|
||||||
|
python3 /workspaces/NetAlertX/front/plugins/my_plugin/script.py
|
||||||
|
|
||||||
|
# Check the results
|
||||||
|
cat /tmp/log/plugins/last_result.MYPLN.log
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Via UI
|
||||||
|
|
||||||
|
1. Restart backend: Run task `[Dev Container] Start Backend (Python)`
|
||||||
|
2. Open Settings → Plugin Settings → My Plugin
|
||||||
|
3. Set `My Plugin - When to run` to `once`
|
||||||
|
4. Click Save
|
||||||
|
5. Check `/tmp/log/plugins/last_result.MYPLN.log` for output
|
||||||
|
|
||||||
|
### 6. Check Results
|
||||||
|
|
||||||
|
Verify your plugin is working:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check if result file was generated
|
||||||
|
ls -la /tmp/log/plugins/last_result.MYPLN.log
|
||||||
|
|
||||||
|
# View contents
|
||||||
|
cat /tmp/log/plugins/last_result.MYPLN.log
|
||||||
|
|
||||||
|
# Check backend logs for errors
|
||||||
|
tail -f /tmp/log/stdout.log | grep "my_plugin\|MYPLN"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
Now that you have a working basic plugin:
|
||||||
|
|
||||||
|
1. **Add Settings**: Customize behavior via user-configurable settings (see [PLUGINS_DEV_SETTINGS.md](PLUGINS_DEV_SETTINGS.md))
|
||||||
|
2. **Implement Data Contract**: Structure your output correctly (see [PLUGINS_DEV_DATA_CONTRACT.md](PLUGINS_DEV_DATA_CONTRACT.md))
|
||||||
|
3. **Configure UI**: Display plugin results in the web interface (see [PLUGINS_DEV_UI_COMPONENTS.md](PLUGINS_DEV_UI_COMPONENTS.md))
|
||||||
|
4. **Map to Database**: Import data into NetAlertX tables like `CurrentScan` or `Devices`
|
||||||
|
5. **Set Schedules**: Run your plugin on a schedule (see [PLUGINS_DEV_CONFIG.md](PLUGINS_DEV_CONFIG.md))
|
||||||
|
|
||||||
|
## Common Issues
|
||||||
|
|
||||||
|
| Issue | Solution |
|
||||||
|
|-------|----------|
|
||||||
|
| "Module not found" errors | Ensure `sys.path` includes `/app/server` and `/app/front/plugins` |
|
||||||
|
| Settings not appearing | Restart backend and clear browser cache |
|
||||||
|
| Results not showing up | Check `/tmp/log/plugins/*.log` and `/tmp/log/stdout.log` for errors |
|
||||||
|
| Permission denied | Plugin runs in container, use absolute paths like `/app/front/plugins/...` |
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Full Plugin Development Guide](PLUGINS_DEV.md)
|
||||||
|
- [Plugin Data Contract](PLUGINS_DEV_DATA_CONTRACT.md)
|
||||||
|
- [Plugin Settings System](PLUGINS_DEV_SETTINGS.md)
|
||||||
|
- [Data Sources](PLUGINS_DEV_DATASOURCES.md)
|
||||||
|
- [UI Components](PLUGINS_DEV_UI_COMPONENTS.md)
|
||||||
|
- [Debugging Plugins](DEBUG_PLUGINS.md)
|
||||||
518
docs/PLUGINS_DEV_SETTINGS.md
Normal file
518
docs/PLUGINS_DEV_SETTINGS.md
Normal file
@@ -0,0 +1,518 @@
|
|||||||
|
# Plugin Settings System
|
||||||
|
|
||||||
|
Learn how to let users configure your plugin via the NetAlertX UI Settings page.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> For the higher-level settings flow and lifecycle, see [Settings System Documentation](./SETTINGS_SYSTEM.md).
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Plugin settings allow users to configure:
|
||||||
|
|
||||||
|
- **Execution schedule** (when the plugin runs)
|
||||||
|
- **Runtime parameters** (API keys, URLs, thresholds)
|
||||||
|
- **Behavior options** (which features to enable/disable)
|
||||||
|
- **Command overrides** (customize the executed script)
|
||||||
|
|
||||||
|
All settings are defined in your plugin's `config.json` file under the `"settings"` array.
|
||||||
|
|
||||||
|
## Setting Definition Structure
|
||||||
|
|
||||||
|
Each setting is a JSON object with required and optional properties:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "UNIQUE_CODE",
|
||||||
|
"type": {
|
||||||
|
"dataType": "string",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "input",
|
||||||
|
"elementOptions": [],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": "default_value_here",
|
||||||
|
"options": [],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "Display Name"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "Help text describing the setting"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Required Properties
|
||||||
|
|
||||||
|
| Property | Type | Description | Example |
|
||||||
|
|----------|------|-------------|---------|
|
||||||
|
| `function` | string | Unique identifier for the setting. Used in manifest and when reading values. See [Reserved Function Names](#reserved-function-names) for special values | `"MY_CUSTOM_SETTING"` |
|
||||||
|
| `type` | object | Defines the UI component and data type | See [Component Types](#component-types) |
|
||||||
|
| `default_value` | varies | Initial value shown in UI | `"https://example.com"` |
|
||||||
|
| `localized` | array | Which properties have translations | `["name", "description"]` |
|
||||||
|
| `name` | array | Display name in Settings UI (localized) | See [Localized Strings](#localized-strings) |
|
||||||
|
| `description` | array | Help text in Settings UI (localized) | See [Localized Strings](#localized-strings) |
|
||||||
|
|
||||||
|
## Optional Properties
|
||||||
|
|
||||||
|
| Property | Type | Description | Example |
|
||||||
|
|----------|------|-------------|---------|
|
||||||
|
| `options` | array | Valid values for select/checkbox controls | `["option1", "option2"]` |
|
||||||
|
| `events` | string | Trigger action button: `"test"` or `"run"` | `"test"` for notifications |
|
||||||
|
| `maxLength` | number | Character limit for input fields | `100` |
|
||||||
|
| `readonly` | boolean | Make field read-only | `true` |
|
||||||
|
| `override_value` | object | Template-based value override (WIP) | Work in Progress |
|
||||||
|
|
||||||
|
## Reserved Function Names
|
||||||
|
|
||||||
|
These function names have special meaning and control core plugin behavior:
|
||||||
|
|
||||||
|
### Core Execution Settings
|
||||||
|
|
||||||
|
| Function | Purpose | Type | Required | Options |
|
||||||
|
|----------|---------|------|----------|---------|
|
||||||
|
| `RUN` | **When to execute the plugin** | select | **YES** | `"disabled"`, `"once"`, `"schedule"`, `"always_after_scan"`, `"before_name_updates"`, `"on_new_device"`, `"before_config_save"` |
|
||||||
|
| `RUN_SCHD` | **Cron schedule** | input | If `RUN="schedule"` | Cron format: `"0 * * * *"` (hourly) |
|
||||||
|
| `CMD` | **Command/script to execute** | input | **YES** | Linux command or path to script |
|
||||||
|
| `RUN_TIMEOUT` | **Maximum execution time in seconds** | input | optional | Numeric: `"60"`, `"120"`, etc. |
|
||||||
|
|
||||||
|
### Data & Filtering Settings
|
||||||
|
|
||||||
|
| Function | Purpose | Type | Required | Options |
|
||||||
|
|----------|---------|------|----------|---------|
|
||||||
|
| `WATCH` | **Which columns to monitor for changes** | multi-select | optional | Column names from data contract |
|
||||||
|
| `REPORT_ON` | **When to send notifications** | select | optional | `"new"`, `"watched-changed"`, `"watched-not-changed"`, `"missing-in-last-scan"` |
|
||||||
|
| `DB_PATH` | **External database path** | input | If using SQLite plugin | File path: `"/etc/pihole/pihole-FTL.db"` |
|
||||||
|
|
||||||
|
### API & Data Settings
|
||||||
|
|
||||||
|
| Function | Purpose | Type | Required | Options |
|
||||||
|
|----------|---------|------|----------|---------|
|
||||||
|
| `API_SQL` | **Generate API JSON file** | (reserved) | Not implemented | — |
|
||||||
|
|
||||||
|
## Component Types
|
||||||
|
|
||||||
|
### Text Input
|
||||||
|
|
||||||
|
Simple text field for API keys, URLs, thresholds, etc.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "URL",
|
||||||
|
"type": {
|
||||||
|
"dataType": "string",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "input",
|
||||||
|
"elementOptions": [],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": "https://api.example.com",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "API URL"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "The API endpoint to query"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Password Input
|
||||||
|
|
||||||
|
Secure field with SHA256 hashing transformer.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "API_KEY",
|
||||||
|
"type": {
|
||||||
|
"dataType": "string",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "input",
|
||||||
|
"elementOptions": [{"type": "password"}],
|
||||||
|
"transformers": ["sha256"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "API Key"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Stored securely with SHA256 hashing"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dropdown/Select
|
||||||
|
|
||||||
|
Choose from predefined options.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "RUN",
|
||||||
|
"type": {
|
||||||
|
"dataType": "string",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "select",
|
||||||
|
"elementOptions": [],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": "disabled",
|
||||||
|
"options": ["disabled", "once", "schedule", "always_after_scan"],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "When to run"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Select execution trigger"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Multi-Select
|
||||||
|
|
||||||
|
Select multiple values (returns array).
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "WATCH",
|
||||||
|
"type": {
|
||||||
|
"dataType": "array",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "select",
|
||||||
|
"elementOptions": [{"isMultiSelect": true}],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": [],
|
||||||
|
"options": ["Status", "IP_Address", "Response_Time"],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Watch columns"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Which columns trigger notifications on change"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checkbox
|
||||||
|
|
||||||
|
Boolean toggle.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "ENABLED",
|
||||||
|
"type": {
|
||||||
|
"dataType": "boolean",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "input",
|
||||||
|
"elementOptions": [{"type": "checkbox"}],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": false,
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Enable feature"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Toggle this feature on/off"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Textarea
|
||||||
|
|
||||||
|
Multi-line text input.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "CUSTOM_CONFIG",
|
||||||
|
"type": {
|
||||||
|
"dataType": "string",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "textarea",
|
||||||
|
"elementOptions": [],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Custom Configuration"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Enter configuration (one per line)"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Read-Only Label
|
||||||
|
|
||||||
|
Display information without user input.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "STATUS_DISPLAY",
|
||||||
|
"type": {
|
||||||
|
"dataType": "string",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "input",
|
||||||
|
"elementOptions": [{"readonly": true}],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": "Ready",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Status"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using Settings in Your Script
|
||||||
|
|
||||||
|
### Method 1: Via `get_setting_value()` Helper
|
||||||
|
|
||||||
|
**Recommended approach** — clean and simple:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from helper import get_setting_value
|
||||||
|
|
||||||
|
# Read the setting by function name with plugin prefix
|
||||||
|
api_url = get_setting_value('MYPLN_API_URL')
|
||||||
|
api_key = get_setting_value('MYPLN_API_KEY')
|
||||||
|
watch_columns = get_setting_value('MYPLN_WATCH') # Returns list if multi-select
|
||||||
|
|
||||||
|
# Use in your script
|
||||||
|
mylog("none", f"Connecting to {api_url} with key {api_key}")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Method 2: Via Command Parameters
|
||||||
|
|
||||||
|
For more complex scenarios where you need to **pass settings as command-line arguments**:
|
||||||
|
|
||||||
|
Define `params` in your `config.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"name": "api_url",
|
||||||
|
"type": "setting",
|
||||||
|
"value": "MYPLN_API_URL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timeout",
|
||||||
|
"type": "setting",
|
||||||
|
"value": "MYPLN_RUN_TIMEOUT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Update your `CMD` setting:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"default_value": "python3 /app/front/plugins/my_plugin/script.py --url={api_url} --timeout={timeout}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The framework will replace `{api_url}` and `{timeout}` with actual values before execution.
|
||||||
|
|
||||||
|
### Method 3: Via Environment Variables (check with maintainer)
|
||||||
|
|
||||||
|
Settings are also available as environment variables:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Environment variable format: <PREFIX>_<FUNCTION>
|
||||||
|
MY_PLUGIN_API_URL
|
||||||
|
MY_PLUGIN_API_KEY
|
||||||
|
MY_PLUGIN_RUN
|
||||||
|
```
|
||||||
|
|
||||||
|
In Python:
|
||||||
|
```python
|
||||||
|
import os
|
||||||
|
|
||||||
|
api_url = os.environ.get('MYPLN_API_URL', 'default_value')
|
||||||
|
```
|
||||||
|
|
||||||
|
## Localized Strings
|
||||||
|
|
||||||
|
Settings and UI text support multiple languages. Define translations in the `name` and `description` arrays:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "API URL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language_code": "es_es",
|
||||||
|
"string": "URL de API"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language_code": "de_de",
|
||||||
|
"string": "API-URL"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "Enter the API endpoint URL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language_code": "es_es",
|
||||||
|
"string": "Ingrese la URL del endpoint de API"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language_code": "de_de",
|
||||||
|
"string": "Geben Sie die API-Endpunkt-URL ein"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `en_us` - English (required)
|
||||||
|
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Example 1: Website Monitor Plugin
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"function": "RUN",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "select", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "disabled",
|
||||||
|
"options": ["disabled", "once", "schedule"],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "When to run"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Enable website monitoring"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "RUN_SCHD",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "*/5 * * * *",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Schedule"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Cron format (default: every 5 minutes)"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "CMD",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "python3 /app/front/plugins/website_monitor/script.py urls={urls}",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Command"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Command to execute"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "RUN_TIMEOUT",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "60",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Timeout"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Maximum execution time in seconds"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "URLS",
|
||||||
|
"type": {"dataType": "array", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": ["https://example.com"],
|
||||||
|
"maxLength": 200,
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "URLs to monitor"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "One URL per line"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "WATCH",
|
||||||
|
"type": {"dataType": "array", "elements": [{"elementType": "select", "elementOptions": [{"isMultiSelect": true}], "transformers": []}]},
|
||||||
|
"default_value": ["Status_Code"],
|
||||||
|
"options": ["Status_Code", "Response_Time", "Certificate_Expiry"],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Watch columns"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Which changes trigger notifications"}]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: PiHole Integration Plugin
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"function": "RUN",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "select", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "disabled",
|
||||||
|
"options": ["disabled", "schedule"],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "When to run"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Enable PiHole integration"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "DB_PATH",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [], "transformers": []}]},
|
||||||
|
"default_value": "/etc/pihole/pihole-FTL.db",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Database path"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "Path to pihole-FTL.db inside container"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "API_KEY",
|
||||||
|
"type": {"dataType": "string", "elements": [{"elementType": "input", "elementOptions": [{"type": "password"}], "transformers": ["sha256"]}]},
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "API Key"}],
|
||||||
|
"description": [{"language_code": "en_us", "string": "PiHole API key (optional, stored securely)"}]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation & Testing
|
||||||
|
|
||||||
|
### Check Settings Are Recognized
|
||||||
|
|
||||||
|
After saving your `config.json`:
|
||||||
|
|
||||||
|
1. Restart the backend: Run task `[Dev Container] Start Backend (Python)`
|
||||||
|
2. Open Settings page in UI
|
||||||
|
3. Navigate to Plugin Settings
|
||||||
|
4. Look for your plugin's settings
|
||||||
|
|
||||||
|
### Read Setting Values in Script
|
||||||
|
|
||||||
|
Test that values are accessible:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from helper import get_setting_value
|
||||||
|
|
||||||
|
# Try to read a setting
|
||||||
|
value = get_setting_value('MYPLN_API_URL')
|
||||||
|
mylog('none', f"Setting value: {value}")
|
||||||
|
|
||||||
|
# Should print the user-configured value or default
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debug Settings
|
||||||
|
|
||||||
|
Check backend logs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f /tmp/log/stdout.log | grep -i "setting\|MYPLN"
|
||||||
|
```
|
||||||
|
|
||||||
|
## See Also
|
||||||
|
|
||||||
|
- [Settings System Documentation](./SETTINGS_SYSTEM.md) - Full settings flow and lifecycle
|
||||||
|
- [Quick Start Guide](PLUGINS_DEV_QUICK_START.md) - Get a working plugin quickly
|
||||||
|
- [Plugin Data Contract](PLUGINS_DEV_DATA_CONTRACT.md) - Output data format
|
||||||
|
- [UI Components](PLUGINS_DEV_UI_COMPONENTS.md) - Display plugin results
|
||||||
642
docs/PLUGINS_DEV_UI_COMPONENTS.md
Normal file
642
docs/PLUGINS_DEV_UI_COMPONENTS.md
Normal file
@@ -0,0 +1,642 @@
|
|||||||
|
# Plugin UI Components
|
||||||
|
|
||||||
|
Configure how your plugin's data is displayed in the NetAlertX web interface.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Plugin results are displayed in the UI via the **Plugins page** and **Device details tabs**. You control the appearance and functionality of these displays by defining `database_column_definitions` in your plugin's `config.json`.
|
||||||
|
|
||||||
|
Each column definition specifies:
|
||||||
|
- Which data field to display
|
||||||
|
- How to render it (label, link, color-coded badge, etc.)
|
||||||
|
- What CSS classes to apply
|
||||||
|
- What transformations to apply (regex, string replacement, etc.)
|
||||||
|
|
||||||
|
## Column Definition Structure
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Object_PrimaryID",
|
||||||
|
"mapped_to_column": "devMac",
|
||||||
|
"mapped_to_column_data": null,
|
||||||
|
"css_classes": "col-sm-2",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_mac",
|
||||||
|
"default_value": "",
|
||||||
|
"options": [],
|
||||||
|
"options_params": [],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "MAC Address"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
| Property | Type | Required | Description |
|
||||||
|
|----------|------|----------|-------------|
|
||||||
|
| `column` | string | **YES** | Source column name from data contract (e.g., `Object_PrimaryID`, `Watched_Value1`) |
|
||||||
|
| `mapped_to_column` | string | no | Target database column if mapping to a table like `CurrentScan` |
|
||||||
|
| `mapped_to_column_data` | object | no | Static value to map instead of using column data |
|
||||||
|
| `css_classes` | string | no | Bootstrap CSS classes for width/spacing (e.g., `"col-sm-2"`, `"col-sm-6"`) |
|
||||||
|
| `show` | boolean | **YES** | Whether to display in UI (must be `true` to appear) |
|
||||||
|
| `type` | string | **YES** | How to render the value (see [Render Types](#render-types)) |
|
||||||
|
| `default_value` | varies | **YES** | Default if column is empty |
|
||||||
|
| `options` | array | no | Options for `select`/`threshold`/`replace`/`regex` types |
|
||||||
|
| `options_params` | array | no | Dynamic options from SQL or settings |
|
||||||
|
| `localized` | array | **YES** | Which properties need translations (e.g., `["name", "description"]`) |
|
||||||
|
| `name` | array | **YES** | Display name in UI (localized strings) |
|
||||||
|
| `description` | array | no | Help text in UI (localized strings) |
|
||||||
|
| `maxLength` | number | no | Character limit for input fields |
|
||||||
|
|
||||||
|
## Render Types
|
||||||
|
|
||||||
|
### Display-Only Types
|
||||||
|
|
||||||
|
These render as read-only display elements:
|
||||||
|
|
||||||
|
#### `label`
|
||||||
|
Plain text display (read-only).
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "label",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Status"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output:** `online`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `device_mac`
|
||||||
|
Renders as a clickable link to the device with the given MAC address.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "ForeignKey",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_mac",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Device"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `aa:bb:cc:dd:ee:ff`
|
||||||
|
**Output:** Clickable link to device details page
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `device_ip`
|
||||||
|
Resolves an IP address to a MAC address and creates a device link.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Object_SecondaryID",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_ip",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Host"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `192.168.1.100`
|
||||||
|
**Output:** Link to device with that IP (if known)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `device_name_mac`
|
||||||
|
Creates a device link with the target device's name as the link label.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Object_PrimaryID",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_name_mac",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Device Name"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `aa:bb:cc:dd:ee:ff`
|
||||||
|
**Output:** Device name (clickable link to device)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `url`
|
||||||
|
Renders as a clickable HTTP/HTTPS link.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "url",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Endpoint"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `https://example.com/api`
|
||||||
|
**Output:** Clickable link
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `url_http_https`
|
||||||
|
Creates two links (HTTP and HTTPS) as lock icons for the given IP/hostname.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Object_SecondaryID",
|
||||||
|
"show": true,
|
||||||
|
"type": "url_http_https",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Web Links"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `192.168.1.50`
|
||||||
|
**Output:** 🔓 HTTP link | 🔒 HTTPS link
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `textarea_readonly`
|
||||||
|
Multi-line read-only display with newlines preserved.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Extra",
|
||||||
|
"show": true,
|
||||||
|
"type": "textarea_readonly",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Details"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Interactive Types
|
||||||
|
|
||||||
|
#### `textbox_save`
|
||||||
|
User-editable text box that persists changes to the database (typically `UserData` column).
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "UserData",
|
||||||
|
"show": true,
|
||||||
|
"type": "textbox_save",
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Notes"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Styled/Transformed Types
|
||||||
|
|
||||||
|
#### `label` with `threshold`
|
||||||
|
Color-codes values based on ranges. Useful for status codes, latency, capacity percentages.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "threshold",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"maximum": 199,
|
||||||
|
"hexColor": "#792D86" // Purple for <199
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"maximum": 299,
|
||||||
|
"hexColor": "#5B862D" // Green for 200-299
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"maximum": 399,
|
||||||
|
"hexColor": "#7D862D" // Orange for 300-399
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"maximum": 499,
|
||||||
|
"hexColor": "#BF6440" // Red-orange for 400-499
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"maximum": 999,
|
||||||
|
"hexColor": "#D33115" // Dark red for 500+
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "HTTP Status"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**How it works:**
|
||||||
|
- Value `150` → Purple (≤199)
|
||||||
|
- Value `250` → Green (≤299)
|
||||||
|
- Value `350` → Orange (≤399)
|
||||||
|
- Value `450` → Red-orange (≤499)
|
||||||
|
- Value `550` → Dark red (>500)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `replace`
|
||||||
|
Replaces specific values with display strings or HTML.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value2",
|
||||||
|
"show": true,
|
||||||
|
"type": "replace",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"equals": "online",
|
||||||
|
"replacement": "<i class='fa-solid fa-circle' style='color: green;'></i> Online"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"equals": "offline",
|
||||||
|
"replacement": "<i class='fa-solid fa-circle' style='color: red;'></i> Offline"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"equals": "idle",
|
||||||
|
"replacement": "<i class='fa-solid fa-circle' style='color: yellow;'></i> Idle"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Status"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output Examples:**
|
||||||
|
- `"online"` → 🟢 Online
|
||||||
|
- `"offline"` → 🔴 Offline
|
||||||
|
- `"idle"` → 🟡 Idle
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `regex`
|
||||||
|
Applies a regular expression to extract/transform values.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "regex",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"param": "([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "IP Address"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `Host: 192.168.1.100 Port: 8080`
|
||||||
|
**Output:** `192.168.1.100`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `eval`
|
||||||
|
Evaluates JavaScript code with access to the column value (use `${value}` or `{value}`).
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "eval",
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Formatted Value"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example with custom formatting:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "eval",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"type": "eval",
|
||||||
|
"param": "`<b>${value}</b> units`"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Value with Units"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Input:** `42`
|
||||||
|
**Output:** **42** units
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Chaining Types
|
||||||
|
|
||||||
|
You can chain multiple transformations with dot notation:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value3",
|
||||||
|
"show": true,
|
||||||
|
"type": "regex.url_http_https",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"param": "([\\d.:]+)" // Extract IP/host
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "HTTP/S Links"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Flow:**
|
||||||
|
1. Apply regex to extract `192.168.1.50` from input
|
||||||
|
2. Create HTTP/HTTPS links for that host
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dynamic Options
|
||||||
|
|
||||||
|
### SQL-Driven Select
|
||||||
|
|
||||||
|
Use SQL query results to populate dropdown options:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value2",
|
||||||
|
"show": true,
|
||||||
|
"type": "select",
|
||||||
|
"options": ["{value}"],
|
||||||
|
"options_params": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"type": "sql",
|
||||||
|
"value": "SELECT devType as id, devType as name FROM Devices UNION SELECT 'Unknown' as id, 'Unknown' as name ORDER BY id"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Device Type"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The SQL query must return exactly **2 columns:**
|
||||||
|
- **First column (id):** Option value
|
||||||
|
- **Second column (name):** Display label
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Setting-Driven Select
|
||||||
|
|
||||||
|
Use plugin settings to populate options:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"show": true,
|
||||||
|
"type": "select",
|
||||||
|
"options": ["{value}"],
|
||||||
|
"options_params": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"type": "setting",
|
||||||
|
"value": "MYPLN_AVAILABLE_STATUSES"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Status"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mapping to Database Tables
|
||||||
|
|
||||||
|
### Mapping to `CurrentScan`
|
||||||
|
|
||||||
|
To import plugin data into the device scan pipeline (for notifications, heuristics, etc.):
|
||||||
|
|
||||||
|
1. Add `"mapped_to_table": "CurrentScan"` at the root level of `config.json`
|
||||||
|
2. Add `"mapped_to_column"` property to each column definition
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code_name": "my_device_scanner",
|
||||||
|
"unique_prefix": "MYSCAN",
|
||||||
|
"mapped_to_table": "CurrentScan",
|
||||||
|
"database_column_definitions": [
|
||||||
|
{
|
||||||
|
"column": "Object_PrimaryID",
|
||||||
|
"mapped_to_column": "cur_MAC",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_mac",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "MAC Address"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "Object_SecondaryID",
|
||||||
|
"mapped_to_column": "cur_IP",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_ip",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "IP Address"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "NameDoesntMatter",
|
||||||
|
"mapped_to_column": "cur_ScanMethod",
|
||||||
|
"mapped_to_column_data": {
|
||||||
|
"value": "MYSCAN"
|
||||||
|
},
|
||||||
|
"show": true,
|
||||||
|
"type": "label",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Scan Method"}]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Using Static Values
|
||||||
|
|
||||||
|
Use `mapped_to_column_data` to map a static value instead of reading from a column:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"column": "NameDoesntMatter",
|
||||||
|
"mapped_to_column": "cur_ScanMethod",
|
||||||
|
"mapped_to_column_data": {
|
||||||
|
"value": "MYSCAN"
|
||||||
|
},
|
||||||
|
"show": true,
|
||||||
|
"type": "label",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Discovery Method"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This always sets `cur_ScanMethod` to `"MYSCAN"` regardless of column data.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Filters
|
||||||
|
|
||||||
|
Control which rows are displayed based on filter conditions. Filters are applied on the client-side in JavaScript.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_filters": [
|
||||||
|
{
|
||||||
|
"compare_column": "Object_PrimaryID",
|
||||||
|
"compare_operator": "==",
|
||||||
|
"compare_field_id": "txtMacFilter",
|
||||||
|
"compare_js_template": "'{value}'.toString()",
|
||||||
|
"compare_use_quotes": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
| Property | Description |
|
||||||
|
|----------|-------------|
|
||||||
|
| `compare_column` | The column from plugin results to compare (left side) |
|
||||||
|
| `compare_operator` | JavaScript operator: `==`, `!=`, `<`, `>`, `<=`, `>=`, `includes`, `startsWith` |
|
||||||
|
| `compare_field_id` | HTML input field ID containing the filter value (right side) |
|
||||||
|
| `compare_js_template` | JavaScript template to transform values. Use `{value}` placeholder |
|
||||||
|
| `compare_use_quotes` | If `true`, wrap result in quotes for string comparison |
|
||||||
|
|
||||||
|
**Example: Filter by MAC address**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_filters": [
|
||||||
|
{
|
||||||
|
"compare_column": "ForeignKey",
|
||||||
|
"compare_operator": "==",
|
||||||
|
"compare_field_id": "txtMacFilter",
|
||||||
|
"compare_js_template": "'{value}'.toString()",
|
||||||
|
"compare_use_quotes": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When viewing a device detail page, the `txtMacFilter` field is populated with that device's MAC, and only rows where `ForeignKey == MAC` are shown.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example: Complete Column Definitions
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"database_column_definitions": [
|
||||||
|
{
|
||||||
|
"column": "Object_PrimaryID",
|
||||||
|
"mapped_to_column": "cur_MAC",
|
||||||
|
"css_classes": "col-sm-2",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_mac",
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "MAC Address"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "Object_SecondaryID",
|
||||||
|
"mapped_to_column": "cur_IP",
|
||||||
|
"css_classes": "col-sm-2",
|
||||||
|
"show": true,
|
||||||
|
"type": "device_ip",
|
||||||
|
"default_value": "unknown",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "IP Address"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "DateTime",
|
||||||
|
"css_classes": "col-sm-2",
|
||||||
|
"show": true,
|
||||||
|
"type": "label",
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Last Seen"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "Watched_Value1",
|
||||||
|
"css_classes": "col-sm-2",
|
||||||
|
"show": true,
|
||||||
|
"type": "threshold",
|
||||||
|
"options": [
|
||||||
|
{"maximum": 199, "hexColor": "#792D86"},
|
||||||
|
{"maximum": 299, "hexColor": "#5B862D"},
|
||||||
|
{"maximum": 399, "hexColor": "#7D862D"},
|
||||||
|
{"maximum": 499, "hexColor": "#BF6440"},
|
||||||
|
{"maximum": 999, "hexColor": "#D33115"}
|
||||||
|
],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "HTTP Status"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "Watched_Value2",
|
||||||
|
"css_classes": "col-sm-1",
|
||||||
|
"show": true,
|
||||||
|
"type": "label",
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Response Time"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"column": "Extra",
|
||||||
|
"css_classes": "col-sm-3",
|
||||||
|
"show": true,
|
||||||
|
"type": "textarea_readonly",
|
||||||
|
"default_value": "",
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [{"language_code": "en_us", "string": "Additional Info"}]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CSS Classes
|
||||||
|
|
||||||
|
Use Bootstrap grid classes to control column widths in tables:
|
||||||
|
|
||||||
|
| Class | Width | Usage |
|
||||||
|
|-------|-------|-------|
|
||||||
|
| `col-sm-1` | ~8% | Very narrow (icons, status) |
|
||||||
|
| `col-sm-2` | ~16% | Narrow (MACs, IPs) |
|
||||||
|
| `col-sm-3` | ~25% | Medium (names, URLs) |
|
||||||
|
| `col-sm-4` | ~33% | Medium-wide (descriptions) |
|
||||||
|
| `col-sm-6` | ~50% | Wide (large content) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Validation Checklist
|
||||||
|
|
||||||
|
- [ ] All columns have `"show": true` or `false`
|
||||||
|
- [ ] Display columns with `"type"` specified from supported types
|
||||||
|
- [ ] Localized strings include at least `en_us`
|
||||||
|
- [ ] `mapped_to_column` matches target table schema (if using mapping)
|
||||||
|
- [ ] Options/thresholds have correct structure
|
||||||
|
- [ ] CSS classes are valid Bootstrap grid classes
|
||||||
|
- [ ] Chaining types (e.g., `regex.url_http_https`) are supported combinations
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## See Also
|
||||||
|
|
||||||
|
- [Plugin Data Contract](PLUGINS_DEV_DATA_CONTRACT.md) - What data fields are available
|
||||||
|
- [Plugin Settings System](PLUGINS_DEV_SETTINGS.md) - Configure user input
|
||||||
|
- [Database Mapping](PLUGINS_DEV.md#-mapping-the-plugin-results-into-a-database-table) - Map data to core tables
|
||||||
|
- [Debugging Plugins](DEBUG_PLUGINS.md) - Troubleshoot display issues
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
# Reverse Proxy Configuration
|
# Reverse Proxy Configuration
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> This is community-contributed. Due to environment, setup, or networking differences, results may vary. Please open a PR to improve it instead of creating an issue, as the maintainer is not actively maintaining it.
|
||||||
|
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> You will need to specify the `BACKEND_API_URL` setting if you are running reverse proxies. This is the URL that points to the backend server url (including your `GRAPHQL_PORT`)
|
> You will need to specify the `BACKEND_API_URL` setting if you are running reverse proxies. This is the URL that points to the backend server url (including your `GRAPHQL_PORT`)
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ The App generates two `app.conf` entries for every setting (Since version 23.8+)
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This is the preferred way adding settings going forward. I'll be likely migrating all app settings into plugin-based settings.
|
> This is the preferred way adding settings going forward. I'll be likely migrating all app settings into plugin-based settings.
|
||||||
|
|
||||||
Plugin settings are loaded dynamically from the `config.json` of individual plugins. If a setting isn't defined in the `app.conf` file, it is initialized via the `default_value` property of a setting from the `config.json` file. Check the [Plugins documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md#-setting-object-structure), section `⚙ Setting object structure` for details on the structure of the setting.
|
Plugin settings are loaded dynamically from the `config.json` of individual plugins. If a setting isn't defined in the `app.conf` file, it is initialized via the `default_value` property of a setting from the `config.json` file. Check the [Plugins documentation](https://docs.netalertx.com/PLUGINS#-setting-object-structure), section `⚙ Setting object structure` for details on the structure of the setting.
|
||||||
|
|
||||||
![Screen 1][screen1]
|
![Screen 1][screen1]
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
# Webhook Secrets
|
# Webhook Secrets
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> This is community-contributed. Due to environment, setup, or networking differences, results may vary. Please open a PR to improve it instead of creating an issue, as the maintainer is not actively maintaining it.
|
||||||
|
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
|
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
|
||||||
|
|
||||||
@@ -39,3 +43,5 @@ If your implementation is correct, the signature you generated should match the
|
|||||||
If you want to learn more about webhook security, take a look at [GitHub's webhook documentation](https://docs.github.com/en/webhooks/about-webhooks).
|
If you want to learn more about webhook security, take a look at [GitHub's webhook documentation](https://docs.github.com/en/webhooks/about-webhooks).
|
||||||
|
|
||||||
You can find examples for validating a webhook delivery [here](https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries#examples).
|
You can find examples for validating a webhook delivery [here](https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries#examples).
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -162,6 +162,6 @@ docker run --rm -e NETALERTX_PROC_MOUNTS_B64="bm9uZSAvIGF1ZnMgcncs..." netalertx
|
|||||||
|
|
||||||
* **Docker Storage Drivers:** [Use the OverlayFS storage driver](https://docs.docker.com/storage/storagedriver/overlayfs-driver/)
|
* **Docker Storage Drivers:** [Use the OverlayFS storage driver](https://docs.docker.com/storage/storagedriver/overlayfs-driver/)
|
||||||
* **Synology Docker Guide:** [Synology Docker Storage Drivers](https://www.google.com/search?q=https://kb.synology.com/en-global/DSM/tutorial/How_to_use_Docker_on_Synology_NAS)
|
* **Synology Docker Guide:** [Synology Docker Storage Drivers](https://www.google.com/search?q=https://kb.synology.com/en-global/DSM/tutorial/How_to_use_Docker_on_Synology_NAS)
|
||||||
* **Configuration Guidance:** [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
* **Configuration Guidance:** [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,4 +29,4 @@ Limit capabilities to only those required:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -24,4 +24,4 @@ Fix permissions on the host system for the mounted directories:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -27,5 +27,5 @@ Option B: Run with a custom UID/GID
|
|||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
- Default compose and tmpfs guidance: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
- Default compose and tmpfs guidance: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
- General Docker install and runtime notes: [DOCKER_INSTALLATION.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_INSTALLATION.md)
|
- General Docker install and runtime notes: [DOCKER_INSTALLATION.md](https://docs.netalertx.com/DOCKER_INSTALLATION)
|
||||||
@@ -29,7 +29,7 @@ Add the required capabilities to your container:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
|
|
||||||
## CAP_CHOWN required when cap_drop: [ALL]
|
## CAP_CHOWN required when cap_drop: [ALL]
|
||||||
|
|
||||||
|
|||||||
@@ -33,4 +33,4 @@ volumes:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -24,4 +24,4 @@ Enable host networking mode:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -33,4 +33,4 @@ If you don't need a custom port, simply omit the PORT environment variable and t
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -83,4 +83,4 @@ services:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -24,4 +24,4 @@ Enable read-only mode:
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -26,4 +26,4 @@ After making these changes, restart the container. The application will automati
|
|||||||
|
|
||||||
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
Docker Compose setup can be complex. We recommend starting with the default docker-compose.yml as a base and modifying it incrementally.
|
||||||
|
|
||||||
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
|
For detailed Docker Compose configuration guidance, see: [DOCKER_COMPOSE.md](https://docs.netalertx.com/DOCKER_COMPOSE)
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
hide:
|
||||||
|
- navigation
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
# NetAlertX Documentation
|
# NetAlertX Documentation
|
||||||
|
|
||||||
Welcome to the official NetAlertX documentation! NetAlertX is a powerful tool designed to simplify the management and monitoring of your network. Below, you will find guides and resources to help you set up, configure, and troubleshoot your NetAlertX instance.
|
Welcome to the official NetAlertX documentation! NetAlertX is a powerful tool designed to simplify the management and monitoring of your network. Below, you will find guides and resources to help you set up, configure, and troubleshoot your NetAlertX instance.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<span class="helpIcon">
|
<span class="helpIcon">
|
||||||
<a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/WORKFLOWS_DEBUGGING.md">
|
<a target="_blank" href="https://docs.netalertx.com/WORKFLOWS_DEBUGGING">
|
||||||
<i class="fa fa-circle-question"></i>
|
<i class="fa fa-circle-question"></i>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ function getDeviceData() {
|
|||||||
// Group for device main information
|
// Group for device main information
|
||||||
DevDetail_MainInfo_Title: {
|
DevDetail_MainInfo_Title: {
|
||||||
data: ["devMac", "devLastIP", "devName", "devOwner", "devType", "devVendor", "devGroup", "devIcon", "devLocation", "devComments"],
|
data: ["devMac", "devLastIP", "devName", "devOwner", "devType", "devVendor", "devGroup", "devIcon", "devLocation", "devComments"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_MANAGEMENT.md",
|
docs: "https://docs.netalertx.com/DEVICE_MANAGEMENT",
|
||||||
iconClass: "fa fa-pencil",
|
iconClass: "fa fa-pencil",
|
||||||
inputGroupClasses: "field-group main-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group main-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
@@ -120,7 +120,7 @@ function getDeviceData() {
|
|||||||
// Group for event and alert settings
|
// Group for event and alert settings
|
||||||
DevDetail_EveandAl_Title: {
|
DevDetail_EveandAl_Title: {
|
||||||
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated", "devReqNicsOnline", "devChildrenNicsDynamic"],
|
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated", "devReqNicsOnline", "devChildrenNicsDynamic"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md",
|
docs: "https://docs.netalertx.com/NOTIFICATIONS",
|
||||||
iconClass: "fa fa-bell",
|
iconClass: "fa fa-bell",
|
||||||
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
@@ -129,7 +129,7 @@ function getDeviceData() {
|
|||||||
// Group for network details
|
// Group for network details
|
||||||
DevDetail_MainInfo_Network_Title: {
|
DevDetail_MainInfo_Network_Title: {
|
||||||
data: ["devParentMAC", "devParentRelType", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
data: ["devParentMAC", "devParentRelType", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
docs: "https://docs.netalertx.com/NETWORK_TREE",
|
||||||
iconClass: "fa fa-sitemap fa-rotate-270",
|
iconClass: "fa fa-sitemap fa-rotate-270",
|
||||||
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
@@ -138,7 +138,7 @@ function getDeviceData() {
|
|||||||
// Group for other fields like static IP, archived status, etc.
|
// Group for other fields like static IP, archived status, etc.
|
||||||
DevDetail_DisplayFields_Title: {
|
DevDetail_DisplayFields_Title: {
|
||||||
data: ["devStaticIP", "devIsNew", "devFavorite", "devIsArchived"],
|
data: ["devStaticIP", "devIsNew", "devFavorite", "devIsArchived"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_DISPLAY_SETTINGS.md",
|
docs: "https://docs.netalertx.com/DEVICE_DISPLAY_SETTINGS",
|
||||||
iconClass: "fa fa-list-check",
|
iconClass: "fa fa-list-check",
|
||||||
inputGroupClasses: "field-group display-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group display-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
@@ -147,7 +147,7 @@ function getDeviceData() {
|
|||||||
// Group for session information
|
// Group for session information
|
||||||
DevDetail_SessionInfo_Title: {
|
DevDetail_SessionInfo_Title: {
|
||||||
data: ["devStatus", "devLastConnection", "devFirstConnection", "devFQDN"],
|
data: ["devStatus", "devLastConnection", "devFirstConnection", "devFQDN"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/SESSION_INFO.md",
|
docs: "https://docs.netalertx.com/SESSION_INFO",
|
||||||
iconClass: "fa fa-calendar",
|
iconClass: "fa fa-calendar",
|
||||||
inputGroupClasses: "field-group session-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group session-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
@@ -156,7 +156,7 @@ function getDeviceData() {
|
|||||||
// Group for Children.
|
// Group for Children.
|
||||||
DevDetail_Children_Title: {
|
DevDetail_Children_Title: {
|
||||||
data: ["devChildrenDynamic"],
|
data: ["devChildrenDynamic"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
docs: "https://docs.netalertx.com/NETWORK_TREE",
|
||||||
iconClass: "fa fa-list",
|
iconClass: "fa fa-list",
|
||||||
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
|
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
|
||||||
labelClasses: "col-sm-12 col-xs-12 control-label",
|
labelClasses: "col-sm-12 col-xs-12 control-label",
|
||||||
@@ -165,7 +165,7 @@ function getDeviceData() {
|
|||||||
// Group for Custom properties.
|
// Group for Custom properties.
|
||||||
DevDetail_CustomProperties_Title: {
|
DevDetail_CustomProperties_Title: {
|
||||||
data: ["devCustomProps"],
|
data: ["devCustomProps"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md",
|
docs: "https://docs.netalertx.com/CUSTOM_PROPERTIES",
|
||||||
iconClass: "fa fa-list",
|
iconClass: "fa fa-list",
|
||||||
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
|
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
|
||||||
labelClasses: "col-sm-12 col-xs-12 control-label",
|
labelClasses: "col-sm-12 col-xs-12 control-label",
|
||||||
@@ -223,7 +223,7 @@ function getDeviceData() {
|
|||||||
if (setting.setKey == "NEWDEV_devMac" && deviceData["devIsRandomMAC"] == true) {
|
if (setting.setKey == "NEWDEV_devMac" && deviceData["devIsRandomMAC"] == true) {
|
||||||
inlineControl += `<span class="input-group-addon pointer"
|
inlineControl += `<span class="input-group-addon pointer"
|
||||||
title="${getString("RandomMAC_hover")}">
|
title="${getString("RandomMAC_hover")}">
|
||||||
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/RANDOM_MAC.md" target="_blank">
|
<a href="https://docs.netalertx.com/RANDOM_MAC" target="_blank">
|
||||||
<i class="fa-solid fa-shuffle"></i>
|
<i class="fa-solid fa-shuffle"></i>
|
||||||
</a>
|
</a>
|
||||||
</span>`;
|
</span>`;
|
||||||
|
|||||||
@@ -31,8 +31,6 @@
|
|||||||
if (!file_exists($confPath) && file_exists('../config/app.conf')) {
|
if (!file_exists($confPath) && file_exists('../config/app.conf')) {
|
||||||
$confPath = '../config/app.conf';
|
$confPath = '../config/app.conf';
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPermissions([$dbPath, $confPath]);
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
|||||||
@@ -11,5 +11,6 @@ function getApiBase()
|
|||||||
apiBase = `${protocol}://${host}:${port}`;
|
apiBase = `${protocol}://${host}:${port}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return apiBase;
|
// Remove trailing slash for consistency
|
||||||
|
return apiBase.replace(/\/$/, '');
|
||||||
}
|
}
|
||||||
@@ -1339,11 +1339,19 @@ function updateApi(apiEndpoints)
|
|||||||
// value has to be in format event|param. e.g. run|ARPSCAN
|
// value has to be in format event|param. e.g. run|ARPSCAN
|
||||||
action = `${getGuid()}|update_api|${apiEndpoints}`
|
action = `${getGuid()}|update_api|${apiEndpoints}`
|
||||||
|
|
||||||
|
// Get data from the server
|
||||||
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
const apiBaseUrl = getApiBase();
|
||||||
|
const url = `${apiBaseUrl}/logs/add-to-execution-queue`;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "php/server/util.php",
|
url: url,
|
||||||
data: { function: "addToExecutionQueue", action: action },
|
headers: {
|
||||||
|
"Authorization": "Bearer " + apiToken,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
data: JSON.stringify({ action: action }),
|
||||||
success: function(data, textStatus) {
|
success: function(data, textStatus) {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
}
|
}
|
||||||
@@ -1578,11 +1586,19 @@ function restartBackend() {
|
|||||||
|
|
||||||
modalEventStatusId = 'modal-message-front-event'
|
modalEventStatusId = 'modal-message-front-event'
|
||||||
|
|
||||||
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
const apiBaseUrl = getApiBase();
|
||||||
|
const url = `${apiBaseUrl}/logs/add-to-execution-queue`;
|
||||||
|
|
||||||
// Execute
|
// Execute
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "php/server/util.php",
|
url: url,
|
||||||
data: { function: "addToExecutionQueue", action: `${getGuid()}|cron_restart_backend` },
|
headers: {
|
||||||
|
"Authorization": "Bearer " + apiToken,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
data: JSON.stringify({ action: `${getGuid()}|cron_restart_backend` }),
|
||||||
success: function(data, textStatus) {
|
success: function(data, textStatus) {
|
||||||
// showModalOk ('Result', data );
|
// showModalOk ('Result', data );
|
||||||
|
|
||||||
@@ -1620,9 +1636,18 @@ function clearCache() {
|
|||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// ===================================================================
|
||||||
// Function to check if cache needs to be refreshed because of setting changes
|
// DEPRECATED: checkSettingChanges() - Replaced by SSE-based manager
|
||||||
|
// Settings changes are now handled via SSE events
|
||||||
|
// Kept for backward compatibility, will be removed in future version
|
||||||
|
// ===================================================================
|
||||||
function checkSettingChanges() {
|
function checkSettingChanges() {
|
||||||
|
// SSE manager handles settings_changed events now
|
||||||
|
if (typeof netAlertXStateManager !== 'undefined' && netAlertXStateManager.initialized) {
|
||||||
|
return; // SSE handles this now
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback for backward compatibility
|
||||||
$.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
$.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
||||||
const importedMilliseconds = parseInt(appState["settingsImported"] * 1000);
|
const importedMilliseconds = parseInt(appState["settingsImported"] * 1000);
|
||||||
const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time'));
|
const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time'));
|
||||||
@@ -1636,7 +1661,7 @@ function checkSettingChanges() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// ===================================================================
|
||||||
// Display spinner and reload page if not yet initialized
|
// Display spinner and reload page if not yet initialized
|
||||||
async function handleFirstLoad(callback) {
|
async function handleFirstLoad(callback) {
|
||||||
if (!isAppInitialized()) {
|
if (!isAppInitialized()) {
|
||||||
@@ -1645,7 +1670,7 @@ async function handleFirstLoad(callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// ===================================================================
|
||||||
// Execute callback once the app is initialized and GraphQL server is running
|
// Execute callback once the app is initialized and GraphQL server is running
|
||||||
async function callAfterAppInitialized(callback) {
|
async function callAfterAppInitialized(callback) {
|
||||||
if (!isAppInitialized() || !(await isGraphQLServerRunning())) {
|
if (!isAppInitialized() || !(await isGraphQLServerRunning())) {
|
||||||
@@ -1657,7 +1682,7 @@ async function callAfterAppInitialized(callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// ===================================================================
|
||||||
// Polling function to repeatedly check if the server is running
|
// Polling function to repeatedly check if the server is running
|
||||||
async function waitForGraphQLServer() {
|
async function waitForGraphQLServer() {
|
||||||
const pollInterval = 2000; // 2 seconds between each check
|
const pollInterval = 2000; // 2 seconds between each check
|
||||||
|
|||||||
@@ -441,11 +441,14 @@ function safeDecodeURIComponent(content) {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Backend notification Polling
|
// Backend notification Polling
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Function to check for notifications
|
/**
|
||||||
|
* Check for new notifications and display them
|
||||||
|
* Now powered by SSE (Server-Sent Events) instead of polling
|
||||||
|
* The unread count is updated in real-time by sse_manager.js
|
||||||
|
*/
|
||||||
function checkNotification() {
|
function checkNotification() {
|
||||||
const apiBase = getApiBase();
|
|
||||||
const apiToken = getSetting("API_TOKEN");
|
const apiToken = getSetting("API_TOKEN");
|
||||||
const notificationEndpoint = `${apiBase}/messaging/in-app/unread`;
|
const notificationEndpoint = `${getApiBase()}/messaging/in-app/unread`;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: notificationEndpoint,
|
url: notificationEndpoint,
|
||||||
@@ -458,7 +461,6 @@ function checkNotification() {
|
|||||||
{
|
{
|
||||||
// Find the oldest unread notification with level "interrupt"
|
// Find the oldest unread notification with level "interrupt"
|
||||||
const oldestInterruptNotification = response.find(notification => notification.read === 0 && notification.level === "interrupt");
|
const oldestInterruptNotification = response.find(notification => notification.read === 0 && notification.level === "interrupt");
|
||||||
const allUnreadNotification = response.filter(notification => notification.read === 0 && notification.level === "alert");
|
|
||||||
|
|
||||||
if (oldestInterruptNotification) {
|
if (oldestInterruptNotification) {
|
||||||
// Show modal dialog with the oldest unread notification
|
// Show modal dialog with the oldest unread notification
|
||||||
@@ -471,11 +473,10 @@ function checkNotification() {
|
|||||||
if($("#modal-ok").is(":visible") == false)
|
if($("#modal-ok").is(":visible") == false)
|
||||||
{
|
{
|
||||||
showModalOK("Notification", decodedContent, function() {
|
showModalOK("Notification", decodedContent, function() {
|
||||||
const apiBase = getApiBase();
|
const apiToken = getSetting("API_TOKEN");
|
||||||
const apiToken = getSetting("API_TOKEN");
|
// Mark the notification as read
|
||||||
// Mark the notification as read
|
$.ajax({
|
||||||
$.ajax({
|
url: `${getApiBase()}/messaging/in-app/read/${oldestInterruptNotification.guid}`,
|
||||||
url: `${apiBase}/messaging/in-app/read/${oldestInterruptNotification.guid}`,
|
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
headers: { "Authorization": `Bearer ${apiToken}` },
|
headers: { "Authorization": `Bearer ${apiToken}` },
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
@@ -494,8 +495,6 @@ function checkNotification() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleUnreadNotifications(allUnreadNotification.length)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function() {
|
||||||
@@ -579,8 +578,9 @@ function addOrUpdateNumberBrackets(input, count) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Start checking for notifications periodically
|
// Check for interrupt-level notifications (modal display) less frequently now that count is via SSE
|
||||||
setInterval(checkNotification, 3000);
|
// This still polls for interrupt notifications to display them in modals
|
||||||
|
setInterval(checkNotification, 10000); // Every 10 seconds instead of 3 seconds (SSE handles count updates)
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// User notification handling methods
|
// User notification handling methods
|
||||||
|
|||||||
223
front/js/sse_manager.js
Normal file
223
front/js/sse_manager.js
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
/**
|
||||||
|
* NetAlertX SSE (Server-Sent Events) Manager
|
||||||
|
* Replaces polling with real-time updates from backend
|
||||||
|
* Falls back to polling if SSE unavailable
|
||||||
|
*/
|
||||||
|
|
||||||
|
class NetAlertXStateManager {
|
||||||
|
constructor() {
|
||||||
|
this.eventSource = null;
|
||||||
|
this.clientId = `client-${Math.random().toString(36).substr(2, 9)}`;
|
||||||
|
this.pollInterval = null;
|
||||||
|
this.pollBackoffInterval = 1000; // Start at 1s
|
||||||
|
this.maxPollInterval = 30000; // Max 30s
|
||||||
|
this.useSSE = true;
|
||||||
|
this.sseConnectAttempts = 0;
|
||||||
|
this.maxSSEAttempts = 3;
|
||||||
|
this.initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the state manager
|
||||||
|
* Tries SSE first, falls back to polling if unavailable
|
||||||
|
*/
|
||||||
|
init() {
|
||||||
|
if (this.initialized) return;
|
||||||
|
|
||||||
|
console.log("[NetAlertX State] Initializing state manager...");
|
||||||
|
this.trySSE();
|
||||||
|
this.initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt SSE connection with fetch streaming
|
||||||
|
* Uses Authorization header like all other endpoints
|
||||||
|
*/
|
||||||
|
async trySSE() {
|
||||||
|
if (this.sseConnectAttempts >= this.maxSSEAttempts) {
|
||||||
|
console.warn("[NetAlertX State] SSE failed after max attempts, switching to polling");
|
||||||
|
this.useSSE = false;
|
||||||
|
this.startPolling();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
const apiBase = getApiBase().replace(/\/$/, '');
|
||||||
|
const sseUrl = `${apiBase}/sse/state?client=${encodeURIComponent(this.clientId)}`;
|
||||||
|
|
||||||
|
const response = await fetch(sseUrl, {
|
||||||
|
headers: { 'Authorization': `Bearer ${apiToken}` }
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
||||||
|
|
||||||
|
console.log("[NetAlertX State] Connected to SSE");
|
||||||
|
this.sseConnectAttempts = 0;
|
||||||
|
|
||||||
|
// Stream and parse SSE events
|
||||||
|
const reader = response.body.getReader();
|
||||||
|
const decoder = new TextDecoder();
|
||||||
|
let buffer = '';
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
const { done, value } = await reader.read();
|
||||||
|
if (done) {
|
||||||
|
this.handleSSEError();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer += decoder.decode(value, { stream: true });
|
||||||
|
const events = buffer.split('\n\n');
|
||||||
|
buffer = events[events.length - 1];
|
||||||
|
|
||||||
|
events.slice(0, -1).forEach(e => this.processSSEEvent(e));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("[NetAlertX State] SSE error:", e);
|
||||||
|
this.handleSSEError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse and dispatch a single SSE event
|
||||||
|
*/
|
||||||
|
processSSEEvent(eventText) {
|
||||||
|
if (!eventText || !eventText.trim()) return;
|
||||||
|
|
||||||
|
const lines = eventText.split('\n');
|
||||||
|
let eventType = null, eventData = null;
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
if (line.startsWith('event:')) eventType = line.substring(6).trim();
|
||||||
|
else if (line.startsWith('data:')) eventData = line.substring(5).trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!eventType || !eventData) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
switch (eventType) {
|
||||||
|
case 'state_update':
|
||||||
|
this.handleStateUpdate(JSON.parse(eventData));
|
||||||
|
break;
|
||||||
|
case 'unread_notifications_count_update':
|
||||||
|
this.handleUnreadNotificationsCountUpdate(JSON.parse(eventData));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`[NetAlertX State] Parse error for ${eventType}:`, e, "eventData:", eventData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle SSE connection error with exponential backoff
|
||||||
|
*/
|
||||||
|
handleSSEError() {
|
||||||
|
this.sseConnectAttempts++;
|
||||||
|
if (this.eventSource) {
|
||||||
|
this.eventSource.close();
|
||||||
|
this.eventSource = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.sseConnectAttempts < this.maxSSEAttempts) {
|
||||||
|
console.log(`[NetAlertX State] Retry ${this.sseConnectAttempts}/${this.maxSSEAttempts}...`);
|
||||||
|
setTimeout(() => this.trySSE(), 5000);
|
||||||
|
} else {
|
||||||
|
this.trySSE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle state update from SSE
|
||||||
|
*/
|
||||||
|
handleStateUpdate(appState) {
|
||||||
|
try {
|
||||||
|
if (document.getElementById("state")) {
|
||||||
|
const cleanState = appState["currentState"].replaceAll('"', "");
|
||||||
|
document.getElementById("state").innerHTML = cleanState;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("[NetAlertX State] Failed to update state display:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle unread notifications count update
|
||||||
|
*/
|
||||||
|
handleUnreadNotificationsCountUpdate(data) {
|
||||||
|
try {
|
||||||
|
const count = data.count || 0;
|
||||||
|
console.log("[NetAlertX State] Unread notifications count:", count);
|
||||||
|
handleUnreadNotifications(count);
|
||||||
|
} catch (e) {
|
||||||
|
console.error("[NetAlertX State] Failed to handle unread count update:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start polling fallback (if SSE fails)
|
||||||
|
*/
|
||||||
|
startPolling() {
|
||||||
|
console.log("[NetAlertX State] Starting polling fallback...");
|
||||||
|
this.poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Poll the server for state updates
|
||||||
|
*/
|
||||||
|
poll() {
|
||||||
|
$.get(
|
||||||
|
"php/server/query_json.php",
|
||||||
|
{ file: "app_state.json", nocache: Date.now() },
|
||||||
|
(appState) => {
|
||||||
|
this.handleStateUpdate(appState);
|
||||||
|
this.pollBackoffInterval = 1000; // Reset on success
|
||||||
|
this.pollInterval = setTimeout(() => this.poll(), this.pollBackoffInterval);
|
||||||
|
}
|
||||||
|
).fail(() => {
|
||||||
|
// Exponential backoff on failure
|
||||||
|
this.pollBackoffInterval = Math.min(
|
||||||
|
this.pollBackoffInterval * 1.5,
|
||||||
|
this.maxPollInterval
|
||||||
|
);
|
||||||
|
this.pollInterval = setTimeout(() => this.poll(), this.pollBackoffInterval);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop all updates
|
||||||
|
*/
|
||||||
|
stop() {
|
||||||
|
if (this.eventSource) {
|
||||||
|
this.eventSource.close();
|
||||||
|
this.eventSource = null;
|
||||||
|
}
|
||||||
|
if (this.pollInterval) {
|
||||||
|
clearTimeout(this.pollInterval);
|
||||||
|
this.pollInterval = null;
|
||||||
|
}
|
||||||
|
this.initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get stats for debugging
|
||||||
|
*/
|
||||||
|
async getStats() {
|
||||||
|
try {
|
||||||
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
const apiBase = getApiBase();
|
||||||
|
const response = await fetch(`${apiBase}/sse/stats`, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${apiToken}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return await response.json();
|
||||||
|
} catch (e) {
|
||||||
|
console.error("[NetAlertX State] Failed to get stats:", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Global instance
|
||||||
|
let netAlertXStateManager = new NetAlertXStateManager();
|
||||||
@@ -1,31 +1,3 @@
|
|||||||
// --------------------------------------------------
|
|
||||||
// Check if database is locked
|
|
||||||
function lockDatabase(delay=20) {
|
|
||||||
$.ajax({
|
|
||||||
url: 'php/server/dbHelper.php', // Replace with the actual path to your PHP file
|
|
||||||
type: 'GET',
|
|
||||||
data: { action: 'lockDatabase', delay: delay },
|
|
||||||
success: function(response) {
|
|
||||||
console.log('Executed');
|
|
||||||
},
|
|
||||||
error: function() {
|
|
||||||
console.log('Error ocurred');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let times = delay;
|
|
||||||
let countdownInterval = setInterval(() => {
|
|
||||||
times--;
|
|
||||||
console.log(`Remaining time: ${times} seconds`);
|
|
||||||
|
|
||||||
if (times <= 0) {
|
|
||||||
clearInterval(countdownInterval);
|
|
||||||
console.log('Countdown finished');
|
|
||||||
}
|
|
||||||
}, 5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const requiredFiles = [
|
const requiredFiles = [
|
||||||
'app_state.json',
|
'app_state.json',
|
||||||
'plugins.json',
|
'plugins.json',
|
||||||
|
|||||||
@@ -291,10 +291,19 @@ function execute_settingEvent(element) {
|
|||||||
// value has to be in format event|param. e.g. run|ARPSCAN
|
// value has to be in format event|param. e.g. run|ARPSCAN
|
||||||
action = `${getGuid()}|${feEvent}|${fePlugin}`
|
action = `${getGuid()}|${feEvent}|${fePlugin}`
|
||||||
|
|
||||||
|
// Get data from the server
|
||||||
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
const apiBaseUrl = getApiBase();
|
||||||
|
const url = `${apiBaseUrl}/logs/add-to-execution-queue`;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "php/server/util.php",
|
url: url,
|
||||||
data: { function: "addToExecutionQueue", action: action },
|
headers: {
|
||||||
|
"Authorization": "Bearer " + apiToken,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
data: JSON.stringify({ action: action }),
|
||||||
success: function(data, textStatus) {
|
success: function(data, textStatus) {
|
||||||
// showModalOk ('Result', data );
|
// showModalOk ('Result', data );
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ $db->close();
|
|||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_version');?>
|
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_version');?>
|
||||||
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/VERSIONS.md" target="_blank"> <span><i class="fa fa-circle-question"></i></a></span>
|
<a href="https://docs.netalertx.com/VERSIONS" target="_blank"> <span><i class="fa fa-circle-question"></i></a></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table_cell">
|
<div class="db_info_table_cell">
|
||||||
<div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
|
<div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
|
||||||
@@ -673,13 +673,25 @@ function performLogManage() {
|
|||||||
console.log("targetLogFile:" + targetLogFile)
|
console.log("targetLogFile:" + targetLogFile)
|
||||||
console.log("logFileAction:" + logFileAction)
|
console.log("logFileAction:" + logFileAction)
|
||||||
|
|
||||||
|
// Get API token and base URL
|
||||||
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
const apiBaseUrl = getApiBase();
|
||||||
|
const url = `${apiBaseUrl}/logs?file=${encodeURIComponent(targetLogFile)}`;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: "POST",
|
method: "DELETE",
|
||||||
url: "php/server/util.php",
|
url: url,
|
||||||
data: { function: logFileAction, settings: targetLogFile },
|
headers: {
|
||||||
|
"Authorization": "Bearer " + apiToken,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
success: function(data, textStatus) {
|
success: function(data, textStatus) {
|
||||||
showModalOk ('Result', data );
|
showModalOk('Result', data.message || 'Log file purged successfully');
|
||||||
write_notification(`[Maintenance] Log file "${targetLogFile}" manually purged`, 'info')
|
write_notification(`[Maintenance] Log file "${targetLogFile}" manually purged`, 'info')
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error("Error purging log file:", status, error);
|
||||||
|
showModalOk('Error', xhr.responseJSON?.error || error);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} else if (elementType === 'input'){
|
} else if (elementType === 'input' || elementType === 'textarea'){
|
||||||
|
|
||||||
// Add classes specifically for checkboxes
|
// Add classes specifically for checkboxes
|
||||||
inputType === 'checkbox' ? inputClass = 'checkbox' : inputClass = 'form-control';
|
inputType === 'checkbox' ? inputClass = 'checkbox' : inputClass = 'form-control';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<!-- Page ------------------------------------------------------------------ -->
|
<!-- Page ------------------------------------------------------------------ -->
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
<span class="helpIcon">
|
<span class="helpIcon">
|
||||||
<a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md">
|
<a target="_blank" href="https://docs.netalertx.com/NETWORK_TREE">
|
||||||
<i class="fa fa-circle-question"></i>
|
<i class="fa fa-circle-question"></i>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ function SQLite3_connect($trytoreconnect = true, $retryCount = 0) {
|
|||||||
} else {
|
} else {
|
||||||
// Maximum retries reached, hide loading spinner and show failure alert
|
// Maximum retries reached, hide loading spinner and show failure alert
|
||||||
$message = 'Failed to connect to database after ' . $retryCount . ' retries.';
|
$message = 'Failed to connect to database after ' . $retryCount . ' retries.';
|
||||||
write_notification($message);
|
displayInAppNoti($message);
|
||||||
return false; // Or handle the failure appropriately
|
return false; // Or handle the failure appropriately
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -218,7 +218,7 @@ function OpenDB($DBPath = null) {
|
|||||||
if (strlen($DBFILE) == 0) {
|
if (strlen($DBFILE) == 0) {
|
||||||
$message = 'Database not available';
|
$message = 'Database not available';
|
||||||
echo '<script>alert("'.$message.'")</script>';
|
echo '<script>alert("'.$message.'")</script>';
|
||||||
write_notification($message);
|
displayInAppNoti($message);
|
||||||
|
|
||||||
die('<div style="padding-left:150px">'.$message.'</div>');
|
die('<div style="padding-left:150px">'.$message.'</div>');
|
||||||
}
|
}
|
||||||
@@ -228,7 +228,7 @@ function OpenDB($DBPath = null) {
|
|||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$message = "Error connecting to the database";
|
$message = "Error connecting to the database";
|
||||||
echo '<script>alert("'.$message.': '.$e->getMessage().'")</script>';
|
echo '<script>alert("'.$message.': '.$e->getMessage().'")</script>';
|
||||||
write_notification($message);
|
displayInAppNoti($message);
|
||||||
die('<div style="padding-left:150px">'.$message.'</div>');
|
die('<div style="padding-left:150px">'.$message.'</div>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,310 +0,0 @@
|
|||||||
<?php
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// NetAlertX
|
|
||||||
// Open Source Network Guard / WIFI & LAN intrusion detector
|
|
||||||
//
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
# Puche 2022+ jokob jokob@duck.com GNU GPLv3
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// equivalent: /dbquery
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// External files
|
|
||||||
require dirname(__FILE__).'/init.php';
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// check if authenticated
|
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Action selector
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Set maximum execution time to 15 seconds
|
|
||||||
ini_set ('max_execution_time','15');
|
|
||||||
|
|
||||||
$skipCache = FALSE;
|
|
||||||
$expireMinutes = 5;
|
|
||||||
$defaultValue = '';
|
|
||||||
$dbtable = '';
|
|
||||||
$columns = '';
|
|
||||||
$values = '';
|
|
||||||
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['skipcache'])) {
|
|
||||||
$skipCache = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['defaultValue'])) {
|
|
||||||
$defaultValue = $_REQUEST['defaultValue'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['expireMinutes'])) {
|
|
||||||
$expireMinutes = $_REQUEST['expireMinutes'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['columnName'])) {
|
|
||||||
$columnName = $_REQUEST['columnName'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['id'])) {
|
|
||||||
$id = $_REQUEST['id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['delay'])) {
|
|
||||||
$delay = $_REQUEST['delay'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['values'])) {
|
|
||||||
$values = $_REQUEST['values'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['columns'])) {
|
|
||||||
$columns = $_REQUEST['columns'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['rawSql'])) {
|
|
||||||
$rawSql = urldecode(base64_decode($_REQUEST['rawSql'])); // base64 encoded SQL
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['dbtable'])) {
|
|
||||||
$dbtable = $_REQUEST['dbtable'];
|
|
||||||
}
|
|
||||||
// TODO: Security, read, delete, edge cases
|
|
||||||
// Action functions
|
|
||||||
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
|
||||||
$action = $_REQUEST['action'];
|
|
||||||
switch ($action) {
|
|
||||||
case 'create': create($defaultValue, $expireMinutes, $dbtable, $columns, $values ); break;
|
|
||||||
case 'read' : read($rawSql); break;
|
|
||||||
case 'write' : write($rawSql); break;
|
|
||||||
case 'update': update($columnName, $id, $defaultValue, $expireMinutes, $dbtable, $columns, $values); break;
|
|
||||||
case 'delete': delete($columnName, $id, $dbtable); break;
|
|
||||||
case 'lockDatabase': lockDatabase($delay); break;
|
|
||||||
default: logServerConsole ('Action: '. $action); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// read
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function read($rawSql) {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Construct the SQL query to select values
|
|
||||||
$sql = $rawSql;
|
|
||||||
|
|
||||||
// Execute the SQL query
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// Check if the query executed successfully
|
|
||||||
if (! $result == TRUE) {
|
|
||||||
// Output an error message if the query failed
|
|
||||||
echo "Error reading data\n\n " .$sql." \n\n". $db->lastErrorMsg();
|
|
||||||
return;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Output $result
|
|
||||||
// Fetching rows from the result object and storing them in an array
|
|
||||||
$rows = array();
|
|
||||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
|
||||||
$rows[] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Converting the array to JSON
|
|
||||||
$json = json_encode($rows);
|
|
||||||
|
|
||||||
// Outputting the JSON
|
|
||||||
echo $json;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// write
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function write($rawSql) {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Construct the SQL query to select values
|
|
||||||
$sql = $rawSql;
|
|
||||||
|
|
||||||
// Execute the SQL query
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// Check if the query executed successfully
|
|
||||||
if (! $result == TRUE) {
|
|
||||||
// Output an error message if the query failed
|
|
||||||
echo "Error writing data\n\n " .$sql." \n\n". $db->lastErrorMsg();
|
|
||||||
return;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Output
|
|
||||||
echo "OK";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// update
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function update($columnName, $id, $defaultValue, $expireMinutes, $dbtable, $columns, $values) {
|
|
||||||
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Handle one or multiple columns
|
|
||||||
if(strpos($columns, ',') !== false) {
|
|
||||||
$columnsArr = explode(",", $columns);
|
|
||||||
} else {
|
|
||||||
$columnsArr = array($columns);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle one or multiple values
|
|
||||||
if(strpos($values, ',') !== false) {
|
|
||||||
$valuesArr = explode(",", $values);
|
|
||||||
} else {
|
|
||||||
$valuesArr = array($values);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle one or multiple IDs
|
|
||||||
if(strpos($id, ',') !== false) {
|
|
||||||
$idsArr = explode(",", $id);
|
|
||||||
$idsPlaceholder = rtrim(str_repeat('?,', count($idsArr)), ',');
|
|
||||||
} else {
|
|
||||||
$idsArr = array($id);
|
|
||||||
$idsPlaceholder = '?';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build column-value pairs string
|
|
||||||
$columnValues = '';
|
|
||||||
foreach($columnsArr as $column) {
|
|
||||||
$columnValues .= '"' . $column . '" = ?,';
|
|
||||||
}
|
|
||||||
// Remove trailing comma
|
|
||||||
$columnValues = rtrim($columnValues, ',');
|
|
||||||
|
|
||||||
// Construct the SQL query
|
|
||||||
$sql = 'UPDATE ' . $dbtable . ' SET ' . $columnValues . ' WHERE ' . $columnName . ' IN (' . $idsPlaceholder . ')';
|
|
||||||
|
|
||||||
// Prepare the statement
|
|
||||||
$stmt = $db->prepare($sql);
|
|
||||||
|
|
||||||
// Check for errors
|
|
||||||
if(!$stmt) {
|
|
||||||
echo "Error preparing statement: " . $db->lastErrorMsg();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bind the parameters
|
|
||||||
$paramTypes = str_repeat('s', count($columnsArr));
|
|
||||||
foreach($valuesArr as $i => $value) {
|
|
||||||
$stmt->bindValue($i + 1, $value);
|
|
||||||
}
|
|
||||||
foreach($idsArr as $i => $idValue) {
|
|
||||||
$stmt->bindValue(count($valuesArr) + $i + 1, $idValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute the statement
|
|
||||||
$result = $stmt->execute();
|
|
||||||
|
|
||||||
$changes = $db->changes();
|
|
||||||
if ($changes == 0) {
|
|
||||||
// Insert new value
|
|
||||||
create( $defaultValue, $expireMinutes, $dbtable, $columns, $values);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update cache
|
|
||||||
$uniqueHash = hash('ripemd160', $dbtable . $columns);
|
|
||||||
setCache($uniqueHash, $values, $expireMinutes);
|
|
||||||
|
|
||||||
echo 'OK' ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// create
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function create( $defaultValue, $expireMinutes, $dbtable, $columns, $values)
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
echo "NOT IMPLEMENTED!\n\n";
|
|
||||||
return;
|
|
||||||
|
|
||||||
// // Insert new value
|
|
||||||
// $sql = 'INSERT INTO '.$dbtable.' ('.$columns.')
|
|
||||||
// VALUES ("'. quotes($parameter) .'",
|
|
||||||
// "'. $values .'")';
|
|
||||||
// $result = $db->query($sql);
|
|
||||||
|
|
||||||
// if (! $result == TRUE) {
|
|
||||||
// echo "Error creating entry\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// delete
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function delete($columnName, $id, $dbtable)
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Handle one or multiple ids
|
|
||||||
if(strpos($id, ',') !== false)
|
|
||||||
{
|
|
||||||
$idsArr = explode(",", $id);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
$idsArr = array($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize an empty string to store the comma-separated list of IDs
|
|
||||||
$idsStr = "";
|
|
||||||
|
|
||||||
// Iterate over each ID
|
|
||||||
foreach ($idsArr as $index => $item)
|
|
||||||
{
|
|
||||||
// Append the current ID to the string
|
|
||||||
$idsStr .= '"' . $item . '"';
|
|
||||||
|
|
||||||
// Add a comma if the current ID is not the last one
|
|
||||||
if ($index < count($idsArr) - 1) {
|
|
||||||
$idsStr .= ', ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Construct the SQL query to delete entries based on the given IDs
|
|
||||||
$sql = 'DELETE FROM '.$dbtable.' WHERE "'.$columnName.'" IN ('. $idsStr .')';
|
|
||||||
|
|
||||||
// Execute the SQL query
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// Check if the query executed successfully
|
|
||||||
if (! $result == TRUE) {
|
|
||||||
// Output an error message if the query failed
|
|
||||||
echo "Error deleting entry\n\n".$sql." \n\n". $db->lastErrorMsg();
|
|
||||||
return;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Output 'OK' if the deletion was successful
|
|
||||||
echo 'OK' ;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Simulate database locking by starting a transaction
|
|
||||||
function lockDatabase($delay) {
|
|
||||||
$db = new SQLite3($GLOBALS['DBFILE']);
|
|
||||||
$db->exec('BEGIN EXCLUSIVE;');
|
|
||||||
sleep($delay); // Sleep for N seconds to simulate long-running transaction
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@@ -1,442 +0,0 @@
|
|||||||
<?php
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// NetAlertX
|
|
||||||
// Open Source Network Guard / WIFI & LAN intrusion detector
|
|
||||||
//
|
|
||||||
// devices.php - Front module. Server side. Manage Devices
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
|
|
||||||
// External files
|
|
||||||
require dirname(__FILE__).'/init.php';
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// check if authenticated
|
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Action selector
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Set maximum execution time to 15 seconds
|
|
||||||
|
|
||||||
ini_set ('max_execution_time','30');
|
|
||||||
|
|
||||||
// Action functions
|
|
||||||
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
|
||||||
$action = $_REQUEST['action'];
|
|
||||||
switch ($action) {
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
case 'deleteDevice': deleteDevice(); break; // equivalent: delete_device(mac)
|
|
||||||
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break; // equivalent: delete_all_with_empty_macs
|
|
||||||
|
|
||||||
case 'deleteAllDevices': deleteAllDevices(); break; // equivalent: delete_devices(macs)
|
|
||||||
case 'deleteUnknownDevices': deleteUnknownDevices(); break; // equivalent: delete_unknown_devices
|
|
||||||
case 'deleteEvents': deleteEvents(); break; // equivalent: delete_events
|
|
||||||
case 'deleteEvents30': deleteEvents30(); break; // equivalent: delete_events_30
|
|
||||||
case 'deleteActHistory': deleteActHistory(); break; // equivalent: delete_online_history
|
|
||||||
case 'deleteDeviceEvents': deleteDeviceEvents(); break; // equivalent: delete_device_events(mac)
|
|
||||||
|
|
||||||
case 'ExportCSV': ExportCSV(); break; // equivalent: export_devices
|
|
||||||
case 'ImportCSV': ImportCSV(); break; // equivalent: import_csv
|
|
||||||
|
|
||||||
case 'getDevicesListCalendar': getDevicesListCalendar(); break; // equivalent: devices_by_status
|
|
||||||
|
|
||||||
case 'updateNetworkLeaf': updateNetworkLeaf(); break; // equivalent: update_device_column(mac, column_name, column_value)
|
|
||||||
|
|
||||||
default: logServerConsole ('Action: '. $action); break; // equivalent:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete Device
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteDevice() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Devices WHERE devMac="' . $_REQUEST['mac'] .'"';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelDev_a');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelDevError_a')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete all devices with empty MAC addresses
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteAllWithEmptyMACs() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Devices WHERE devMac=""';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelDev_b');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelDevError_b')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete all devices with empty MAC addresses
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteUnknownDevices() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Devices WHERE devName="(unknown)" OR devName="(name not found)"';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelDev_b');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelDevError_b')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete Device Events
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteDeviceEvents() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Events WHERE eve_MAC="' . $_REQUEST['mac'] .'"';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelEvents');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelEventsError')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete all devices
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteAllDevices() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Devices';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelDev_b');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelDevError_b')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete all Events
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteEvents() {
|
|
||||||
global $db;
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Events';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelEvents');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelEventsError')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete all Events older than 30 days
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteEvents30() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = "DELETE FROM Events WHERE eve_DateTime <= date('now', '-30 day')";
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelEvents');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelEventsError')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Delete History
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function deleteActHistory() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// sql
|
|
||||||
$sql = 'DELETE FROM Online_History';
|
|
||||||
// execute sql
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo lang('BackDevices_DBTools_DelActHistory');
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_DelActHistoryError')."\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Export CSV of devices
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function ExportCSV() {
|
|
||||||
|
|
||||||
header("Content-Type: application/octet-stream");
|
|
||||||
header("Content-Transfer-Encoding: Binary");
|
|
||||||
header("Content-disposition: attachment; filename=\"devices.csv\"");
|
|
||||||
|
|
||||||
global $db;
|
|
||||||
$func_result = $db->query("SELECT * FROM Devices");
|
|
||||||
|
|
||||||
// prepare CSV header row
|
|
||||||
$columns = getDevicesColumns();
|
|
||||||
|
|
||||||
// wrap the headers with " (quotes)
|
|
||||||
$resultCSV = '"'.implode('","', $columns).'"'."\n";
|
|
||||||
|
|
||||||
// retrieve the devices from the DB
|
|
||||||
while ($row = $func_result->fetchArray(SQLITE3_ASSOC)) {
|
|
||||||
|
|
||||||
// loop through columns and add values to the string
|
|
||||||
$index = 0;
|
|
||||||
foreach ($columns as $columnName) {
|
|
||||||
// Escape special chars (e.g.quotes) inside fields by replacing them with html definitions
|
|
||||||
$fieldValue = encodeSpecialChars($row[$columnName]);
|
|
||||||
|
|
||||||
// add quotes around the value to prevent issues with commas in fields
|
|
||||||
$resultCSV .= '"'.$fieldValue.'"';
|
|
||||||
|
|
||||||
// detect last loop - skip as no comma needed
|
|
||||||
if ($index != count($columns) - 1) {
|
|
||||||
$resultCSV .= ',';
|
|
||||||
}
|
|
||||||
$index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// add a new line for the next row
|
|
||||||
$resultCSV .= "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
//write the built CSV string
|
|
||||||
echo $resultCSV;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Import CSV of devices
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function ImportCSV() {
|
|
||||||
|
|
||||||
global $db;
|
|
||||||
$file = '../../../config/devices.csv';
|
|
||||||
$data = "";
|
|
||||||
$skipped = "";
|
|
||||||
$error = "";
|
|
||||||
|
|
||||||
// check if content passed in query string
|
|
||||||
if(isset ($_POST['content']) && !empty ($_POST['content']))
|
|
||||||
{
|
|
||||||
// Decode the Base64 string
|
|
||||||
// $data = base64_decode($_POST['content']);
|
|
||||||
$data = base64_decode($_POST['content'], true); // The second parameter ensures safe decoding
|
|
||||||
|
|
||||||
// // Ensure the decoded data is treated as UTF-8 text
|
|
||||||
// $data = mb_convert_encoding($data, 'UTF-8', 'UTF-8');
|
|
||||||
|
|
||||||
} else if (file_exists($file)) { // try to get the data form the file
|
|
||||||
|
|
||||||
// Read the CSV file
|
|
||||||
$data = file_get_contents($file);
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_DBTools_ImportCSVMissing');
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data != "")
|
|
||||||
{
|
|
||||||
// data cleanup - new lines breaking the CSV
|
|
||||||
$data = preg_replace_callback('/"([^"]*)"/', function($matches) {
|
|
||||||
// Replace all \n within the quotes with a space
|
|
||||||
return str_replace("\n", " ", $matches[0]); // Replace with a space
|
|
||||||
}, $data);
|
|
||||||
|
|
||||||
$lines = explode("\n", $data);
|
|
||||||
|
|
||||||
// Get the column headers from the first line of the CSV
|
|
||||||
$header = str_getcsv(array_shift($lines));
|
|
||||||
$header = array_map('trim', $header);
|
|
||||||
|
|
||||||
// Delete everything form the DB table
|
|
||||||
$sql = 'DELETE FROM Devices';
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// Build the SQL statement
|
|
||||||
$sql = "INSERT INTO Devices (" . implode(', ', $header) . ") VALUES ";
|
|
||||||
|
|
||||||
// Parse data from CSV file line by line (max 10000 lines)
|
|
||||||
$index = 0;
|
|
||||||
foreach($lines as $row) {
|
|
||||||
$rowArray = str_getcsv($row);
|
|
||||||
|
|
||||||
if (count($rowArray) === count($header)) {
|
|
||||||
// Make sure the number of columns matches the header
|
|
||||||
$rowArray = array_map(function ($value) {
|
|
||||||
return "'" . SQLite3::escapeString(trim($value)) . "'";
|
|
||||||
}, $rowArray);
|
|
||||||
|
|
||||||
$sql .= "(" . implode(', ', $rowArray) . "), ";
|
|
||||||
} else {
|
|
||||||
$skipped .= ($index + 1) . ",";
|
|
||||||
}
|
|
||||||
|
|
||||||
$index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the trailing comma and space from SQL
|
|
||||||
$sql = rtrim($sql, ', ');
|
|
||||||
|
|
||||||
// Execute the SQL query
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
if($error === "") {
|
|
||||||
// Import successful
|
|
||||||
echo lang('BackDevices_DBTools_ImportCSV') . " (Skipped lines: " . $skipped . ") ";
|
|
||||||
} else {
|
|
||||||
// An error occurred while writing to the DB, display the last error message
|
|
||||||
echo lang('BackDevices_DBTools_ImportCSVError') . "\n" . $error . "\n" . $sql . "\n\n" . $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Determine if Random MAC
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function isRandomMAC($mac) {
|
|
||||||
$isRandom = false;
|
|
||||||
|
|
||||||
// if detected as random, make sure it doesn't start with a prefix which teh suer doesn't want to mark as random
|
|
||||||
$setting = getSettingValue("UI_NOT_RANDOM_MAC");
|
|
||||||
$prefixes = createArray($setting);
|
|
||||||
|
|
||||||
$isRandom = in_array($mac[1], array("2", "6", "A", "E", "a", "e"));
|
|
||||||
|
|
||||||
// If detected as random, make sure it doesn't start with a prefix which the user doesn't want to mark as random
|
|
||||||
if ($isRandom) {
|
|
||||||
foreach ($prefixes as $prefix) {
|
|
||||||
if (strpos($mac, $prefix) === 0) {
|
|
||||||
$isRandom = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $isRandom;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Query the List of devices for calendar
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getDevicesListCalendar() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// SQL
|
|
||||||
$condition = getDeviceCondition ($_REQUEST['status']);
|
|
||||||
$result = $db->query('SELECT * FROM Devices ' . $condition);
|
|
||||||
|
|
||||||
// arrays of rows
|
|
||||||
$tableData = array();
|
|
||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
|
||||||
if ($row['devFavorite'] == 1) {
|
|
||||||
$row['devName'] = '<span class="text-yellow">★</span> '. $row['devName'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$tableData[] = array ('id' => $row['devMac'],
|
|
||||||
'title' => $row['devName'],
|
|
||||||
'favorite' => $row['devFavorite']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return json
|
|
||||||
echo (json_encode ($tableData));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Query Device Data
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
function updateNetworkLeaf()
|
|
||||||
{
|
|
||||||
$nodeMac = $_REQUEST['value']; // parent
|
|
||||||
$leafMac = $_REQUEST['id']; // child
|
|
||||||
|
|
||||||
if ((false === filter_var($nodeMac , FILTER_VALIDATE_MAC) && $nodeMac != "Internet" && $nodeMac != "") || false === filter_var($leafMac , FILTER_VALIDATE_MAC) ) {
|
|
||||||
throw new Exception('Invalid mac address');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
// sql
|
|
||||||
$sql = 'UPDATE Devices SET "devParentMAC" = "'. $nodeMac .'" WHERE "devMac"="' . $leafMac.'"' ;
|
|
||||||
// update Data
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo 'OK';
|
|
||||||
} else {
|
|
||||||
echo 'KO';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Status Where conditions
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getDeviceCondition ($deviceStatus) {
|
|
||||||
switch ($deviceStatus) {
|
|
||||||
case 'all': return 'WHERE devIsArchived=0'; break;
|
|
||||||
case 'my': return 'WHERE devIsArchived=0'; break;
|
|
||||||
case 'connected': return 'WHERE devIsArchived=0 AND devPresentLastScan=1'; break;
|
|
||||||
case 'favorites': return 'WHERE devIsArchived=0 AND devFavorite=1'; break;
|
|
||||||
case 'new': return 'WHERE devIsArchived=0 AND devIsNew=1'; break;
|
|
||||||
case 'down': return 'WHERE devIsArchived=0 AND devAlertDown !=0 AND devPresentLastScan=0'; break;
|
|
||||||
case 'archived': return 'WHERE devIsArchived=1'; break;
|
|
||||||
default: return 'WHERE 1=0'; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
||||||
@@ -5,5 +5,4 @@ require dirname(__FILE__).'/../templates/globals.php';
|
|||||||
require dirname(__FILE__).'/db.php';
|
require dirname(__FILE__).'/db.php';
|
||||||
require dirname(__FILE__).'/util.php';
|
require dirname(__FILE__).'/util.php';
|
||||||
require dirname(__FILE__).'/../templates/language/lang.php';
|
require dirname(__FILE__).'/../templates/language/lang.php';
|
||||||
require dirname(__FILE__).'/utilNotification.php';
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// NetAlertX
|
// NetAlertX
|
||||||
// Open Source Network Guard / WIFI & LAN intrusion detector
|
// Open Source Network Guard / WIFI & LAN intrusion detector
|
||||||
//
|
//
|
||||||
// util.php - Front module. Server side. Common generic functions
|
// util.php - Front module. Server side. Settings and utility functions
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@@ -18,7 +18,6 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|||||||
|
|
||||||
$FUNCTION = [];
|
$FUNCTION = [];
|
||||||
$SETTINGS = [];
|
$SETTINGS = [];
|
||||||
$ACTION = "";
|
|
||||||
|
|
||||||
// init request params
|
// init request params
|
||||||
if(array_key_exists('function', $_REQUEST) != FALSE)
|
if(array_key_exists('function', $_REQUEST) != FALSE)
|
||||||
@@ -39,264 +38,16 @@ switch ($FUNCTION) {
|
|||||||
saveSettings();
|
saveSettings();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'cleanLog':
|
|
||||||
|
|
||||||
cleanLog($SETTINGS);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'addToExecutionQueue':
|
|
||||||
|
|
||||||
if(array_key_exists('action', $_REQUEST) != FALSE)
|
|
||||||
{
|
|
||||||
$ACTION = $_REQUEST['action'];
|
|
||||||
}
|
|
||||||
|
|
||||||
addToExecutionQueue($ACTION);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Handle any other cases or errors if needed
|
// Handle any other cases or errors if needed
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Formatting data functions
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Creates a PHP array from a string representing a python array (input format ['...','...'])
|
|
||||||
// Only supports:
|
|
||||||
// - one level arrays, not nested ones
|
|
||||||
// - single quotes
|
|
||||||
function createArray($input){
|
|
||||||
|
|
||||||
// empty array
|
|
||||||
if($input == '[]')
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
// regex patterns
|
|
||||||
$patternBrackets = '/(^\s*\[)|(\]\s*$)/';
|
|
||||||
$patternQuotes = '/(^\s*\')|(\'\s*$)/';
|
|
||||||
$replacement = '';
|
|
||||||
|
|
||||||
// remove brackets
|
|
||||||
$noBrackets = preg_replace($patternBrackets, $replacement, $input);
|
|
||||||
|
|
||||||
$options = array();
|
|
||||||
|
|
||||||
// create array
|
|
||||||
$optionsTmp = explode(",", $noBrackets);
|
|
||||||
|
|
||||||
// handle only one item in array
|
|
||||||
if(count($optionsTmp) == 0)
|
|
||||||
{
|
|
||||||
return [preg_replace($patternQuotes, $replacement, $noBrackets)];
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove quotes
|
|
||||||
foreach ($optionsTmp as $item)
|
|
||||||
{
|
|
||||||
array_push($options, preg_replace($patternQuotes, $replacement, $item) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return $options;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------
|
||||||
// For debugging - Print arrays
|
|
||||||
function printArray ($array) {
|
|
||||||
echo '[';
|
|
||||||
foreach ($array as $val)
|
|
||||||
{
|
|
||||||
if(is_array($val))
|
|
||||||
{
|
|
||||||
echo '<br/>';
|
|
||||||
printArray($val);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
echo $val.', ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo ']<br/>';
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function formatDate ($date1) {
|
|
||||||
return date_format (new DateTime ($date1) , 'Y-m-d H:i');
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function formatDateDiff ($date1, $date2) {
|
|
||||||
return date_diff (new DateTime ($date1), new DateTime ($date2 ) )-> format ('%ad %H:%I');
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function formatDateISO ($date1) {
|
|
||||||
return date_format (new DateTime ($date1),'c');
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function formatEventDate ($date1, $eventType) {
|
|
||||||
if (!empty ($date1) ) {
|
|
||||||
$ret = formatDate ($date1);
|
|
||||||
} elseif ($eventType == '<missing event>') {
|
|
||||||
$ret = '<missing event>';
|
|
||||||
} else {
|
|
||||||
$ret = '<Still Connected>';
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function formatIPlong ($IP) {
|
|
||||||
return sprintf('%u', ip2long($IP) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Other functions
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function checkPermissions($files)
|
|
||||||
{
|
|
||||||
foreach ($files as $file)
|
|
||||||
{
|
|
||||||
|
|
||||||
// // make sure the file ownership is correct
|
|
||||||
// chown($file, 'nginx');
|
|
||||||
// chgrp($file, 'www-data');
|
|
||||||
|
|
||||||
// check access to database
|
|
||||||
if(file_exists($file) != 1)
|
|
||||||
{
|
|
||||||
$message = "File '".$file."' not found or inaccessible. Correct file permissions, create one yourself or generate a new one in 'Settings' by clicking the 'Save' button.";
|
|
||||||
displayMessage($message, TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// equivalent: /messaging/in-app/write
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
function displayMessage($message, $logAlert = FALSE, $logConsole = TRUE, $logFile = TRUE, $logEcho = FALSE)
|
|
||||||
{
|
|
||||||
global $logFolderPath, $log_file, $timestamp;
|
|
||||||
|
|
||||||
// sanitize
|
|
||||||
$message = str_replace(array("\n", "\r", PHP_EOL), '', $message);
|
|
||||||
|
|
||||||
echo "<script>function escape(html, encode) {
|
|
||||||
return html.replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&')
|
|
||||||
.replace(/\t/g, '')
|
|
||||||
}</script>";
|
|
||||||
|
|
||||||
// Javascript Alert pop-up
|
|
||||||
if($logAlert)
|
|
||||||
{
|
|
||||||
echo '<script>alert(escape("'.$message.'"));</script>';
|
|
||||||
}
|
|
||||||
|
|
||||||
// F12 Browser dev console
|
|
||||||
if($logConsole)
|
|
||||||
{
|
|
||||||
echo '<script>console.log(escape("'.str_replace('"',"'",$message).'"));</script>';
|
|
||||||
}
|
|
||||||
|
|
||||||
//File
|
|
||||||
if($logFile)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (is_writable($logFolderPath.$log_file)) {
|
|
||||||
|
|
||||||
|
|
||||||
if(file_exists($logFolderPath.$log_file) != 1) // file doesn't exist, create one
|
|
||||||
{
|
|
||||||
$log = fopen($logFolderPath.$log_file, "w") or die("Unable to open file!");
|
|
||||||
}else // file exists, append
|
|
||||||
{
|
|
||||||
$log = fopen($logFolderPath.$log_file, "a") or die("Unable to open file - Permissions issue!");
|
|
||||||
}
|
|
||||||
|
|
||||||
fwrite($log, "[".$timestamp. "] " . str_replace('<br>',"\n ",str_replace('<br/>',"\n ",$message)).PHP_EOL."" );
|
|
||||||
fclose($log);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
echo 'The file is not writable: '.$logFolderPath.$log_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//echo
|
|
||||||
if($logEcho)
|
|
||||||
{
|
|
||||||
echo $message;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// equivalent: /logs/add-to-execution-queue
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Adds an action to perform into the execution_queue.log file
|
|
||||||
function addToExecutionQueue($action)
|
|
||||||
{
|
|
||||||
global $logFolderPath, $timestamp;
|
|
||||||
|
|
||||||
$logFile = 'execution_queue.log';
|
|
||||||
$fullPath = $logFolderPath . $logFile;
|
|
||||||
|
|
||||||
// Open the file or skip if it can't be opened
|
|
||||||
if ($file = fopen($fullPath, 'a')) {
|
|
||||||
fwrite($file, "[" . $timestamp . "]|" . $action . PHP_EOL);
|
|
||||||
fclose($file);
|
|
||||||
displayMessage('Action "'.$action.'" added to the execution queue.', false, true, true, true);
|
|
||||||
} else {
|
|
||||||
displayMessage('Log file not found or couldn\'t be created.', false, true, true, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// equivalent: /logs DELETE
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
function cleanLog($logFile)
|
|
||||||
{
|
|
||||||
global $logFolderPath, $timestamp;
|
|
||||||
|
|
||||||
$path = "";
|
|
||||||
|
|
||||||
$allowedFiles = ['app.log', 'app_front.log', 'IP_changes.log', 'stdout.log', 'stderr.log', 'app.php_errors.log', 'execution_queue.log', 'db_is_locked.log', 'nginx-error.log', 'cron.log'];
|
|
||||||
|
|
||||||
if(in_array($logFile, $allowedFiles))
|
|
||||||
{
|
|
||||||
$path = $logFolderPath.$logFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($path != "")
|
|
||||||
{
|
|
||||||
// purge content
|
|
||||||
$file = fopen($path, "w") or die("Unable to open file!");
|
|
||||||
fwrite($file, "");
|
|
||||||
fclose($file);
|
|
||||||
displayMessage('File <code>'.$logFile.'</code> purged.', FALSE, TRUE, TRUE, TRUE);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
displayMessage('File <code>'.$logFile.'</code> is not allowed to be purged.', FALSE, TRUE, TRUE, TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
function saveSettings()
|
function saveSettings()
|
||||||
{
|
{
|
||||||
global $SETTINGS, $FUNCTION, $config_file, $fullConfPath, $configFolderPath, $timestamp;
|
global $SETTINGS, $FUNCTION, $config_file, $fullConfPath, $configFolderPath, $timestamp;
|
||||||
@@ -307,12 +58,12 @@ function saveSettings()
|
|||||||
|
|
||||||
if(file_exists( $fullConfPath) != 1)
|
if(file_exists( $fullConfPath) != 1)
|
||||||
{
|
{
|
||||||
displayMessage('File "'.$fullConfPath.'" not found or missing read permissions. Creating a new <code>'.$config_file.'</code> file.', FALSE, TRUE, TRUE, TRUE);
|
displayInAppNoti('File "'.$fullConfPath.'" not found or missing read permissions. Creating a new config file.', 'warning');
|
||||||
}
|
}
|
||||||
// create a backup copy
|
// create a backup copy
|
||||||
elseif (!copy($fullConfPath, $new_location))
|
elseif (!copy($fullConfPath, $new_location))
|
||||||
{
|
{
|
||||||
displayMessage("Failed to copy file ".$fullConfPath." to ".$new_location." <br/> Check your permissions to allow read/write access to the /config folder.", FALSE, TRUE, TRUE, TRUE);
|
displayInAppNoti("Failed to copy file ".$fullConfPath." to ".$new_location." Check your permissions to allow read/write access to the /config folder.", 'error');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -356,9 +107,6 @@ function saveSettings()
|
|||||||
$dataType = $setting[2];
|
$dataType = $setting[2];
|
||||||
$settingValue = $setting[3];
|
$settingValue = $setting[3];
|
||||||
|
|
||||||
// // Parse the settingType JSON
|
|
||||||
// $settingType = json_decode($settingTypeJson, true);
|
|
||||||
|
|
||||||
// Sanity check
|
// Sanity check
|
||||||
if($setKey == "UI_LANG" && $settingValue == "") {
|
if($setKey == "UI_LANG" && $settingValue == "") {
|
||||||
echo "🔴 Error: important settings missing. Refresh the page with 🔃 on the top and try again.";
|
echo "🔴 Error: important settings missing. Refresh the page with 🔃 on the top and try again.";
|
||||||
@@ -413,9 +161,6 @@ function saveSettings()
|
|||||||
$txt = $txt."#-------------------IMPORTANT INFO-------------------#\n";
|
$txt = $txt."#-------------------IMPORTANT INFO-------------------#\n";
|
||||||
|
|
||||||
// open new file and write the new configuration
|
// open new file and write the new configuration
|
||||||
// Create a temporary file
|
|
||||||
$tempConfPath = $fullConfPath . ".tmp";
|
|
||||||
|
|
||||||
// Backup the original file
|
// Backup the original file
|
||||||
if (file_exists($fullConfPath)) {
|
if (file_exists($fullConfPath)) {
|
||||||
copy($fullConfPath, $fullConfPath . ".bak");
|
copy($fullConfPath, $fullConfPath . ".bak");
|
||||||
@@ -426,29 +171,10 @@ function saveSettings()
|
|||||||
fwrite($file, $txt);
|
fwrite($file, $txt);
|
||||||
fclose($file);
|
fclose($file);
|
||||||
|
|
||||||
// displayMessage(lang('settings_saved'),
|
|
||||||
// FALSE, TRUE, TRUE, TRUE);
|
|
||||||
|
|
||||||
echo "OK";
|
echo "OK";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// equivalent: /graphql LangStrings endpoint
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
function getString ($setKey, $default) {
|
|
||||||
|
|
||||||
$result = lang($setKey);
|
|
||||||
|
|
||||||
if ($result )
|
|
||||||
{
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $default;
|
|
||||||
}
|
|
||||||
// -------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
// check server/api_server/api_server_start.py for equivalents
|
||||||
@@ -479,7 +205,6 @@ function getSettingValue($setKey) {
|
|||||||
foreach ($data['data'] as $setting) {
|
foreach ($data['data'] as $setting) {
|
||||||
if ($setting['setKey'] === $setKey) {
|
if ($setting['setKey'] === $setKey) {
|
||||||
return $setting['setValue'];
|
return $setting['setValue'];
|
||||||
// echo $setting['setValue'];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,166 +213,44 @@ function getSettingValue($setKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
function encode_single_quotes ($val) {
|
function encode_single_quotes ($val) {
|
||||||
|
|
||||||
$result = str_replace ('\'','{s-quote}',$val);
|
$result = str_replace ('\'','{s-quote}',$val);
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------
|
||||||
|
// Helper function to send notifications via the backend API endpoint
|
||||||
function getDateFromPeriod () {
|
|
||||||
|
|
||||||
$periodDate = $_REQUEST['period'];
|
|
||||||
|
|
||||||
$periodDateSQL = "";
|
|
||||||
$days = "";
|
|
||||||
|
|
||||||
switch ($periodDate) {
|
|
||||||
case '7 days':
|
|
||||||
$days = "7";
|
|
||||||
break;
|
|
||||||
case '1 month':
|
|
||||||
$days = "30";
|
|
||||||
break;
|
|
||||||
case '1 year':
|
|
||||||
$days = "365";
|
|
||||||
break;
|
|
||||||
case '100 years':
|
|
||||||
$days = "3650"; //10 years
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$days = "1";
|
|
||||||
}
|
|
||||||
|
|
||||||
$periodDateSQL = "-".$days." day";
|
|
||||||
|
|
||||||
return " date('now', '".$periodDateSQL."') ";
|
|
||||||
|
|
||||||
// $period = $_REQUEST['period'];
|
|
||||||
// return '"'. date ('Y-m-d', strtotime ('+2 day -'. $period) ) .'"';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------
|
||||||
function quotes ($text) {
|
function displayInAppNoti($message, $level = 'error') {
|
||||||
return str_replace ('"','""',$text);
|
try {
|
||||||
|
$apiBase = getSettingValue('BACKEND_API_URL') ?: 'http://localhost:20212';
|
||||||
|
$apiToken = getSettingValue('API_TOKEN') ?: '';
|
||||||
|
|
||||||
|
if (empty($apiToken)) {
|
||||||
|
// If no token available, silently fail (don't break the application)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = rtrim($apiBase, '/') . '/messaging/in-app/write';
|
||||||
|
$payload = json_encode([
|
||||||
|
'message' => $message,
|
||||||
|
'level' => $level
|
||||||
|
]);
|
||||||
|
|
||||||
|
$ch = curl_init($url);
|
||||||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||||
|
'Content-Type: application/json',
|
||||||
|
'Authorization: Bearer ' . $apiToken,
|
||||||
|
'Content-Length: ' . strlen($payload)
|
||||||
|
]);
|
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
||||||
|
|
||||||
|
curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Silently fail if notification sending fails
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function logServerConsole ($text) {
|
|
||||||
$x = array();
|
|
||||||
$y = $x['__________'. $text .'__________'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function handleNull ($text, $default = "") {
|
|
||||||
if($text == NULL || $text == 'NULL')
|
|
||||||
{
|
|
||||||
return $default;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
// Encode special chars
|
|
||||||
function encodeSpecialChars($str) {
|
|
||||||
return str_replace(
|
|
||||||
['&', '<', '>', '"', "'"],
|
|
||||||
['&', '<', '>', '"', '''],
|
|
||||||
$str
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
// Decode special chars
|
|
||||||
function decodeSpecialChars($str) {
|
|
||||||
return str_replace(
|
|
||||||
['&', '<', '>', '"', '''],
|
|
||||||
['&', '<', '>', '"', "'"],
|
|
||||||
$str
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
// used in Export CSV
|
|
||||||
function getDevicesColumns(){
|
|
||||||
|
|
||||||
$columns = ["devMac",
|
|
||||||
"devName",
|
|
||||||
"devOwner",
|
|
||||||
"devType",
|
|
||||||
"devVendor",
|
|
||||||
"devFavorite",
|
|
||||||
"devGroup",
|
|
||||||
"devComments",
|
|
||||||
"devFirstConnection",
|
|
||||||
"devLastConnection",
|
|
||||||
"devLastIP",
|
|
||||||
"devStaticIP",
|
|
||||||
"devScan",
|
|
||||||
"devLogEvents",
|
|
||||||
"devAlertEvents",
|
|
||||||
"devAlertDown",
|
|
||||||
"devSkipRepeated",
|
|
||||||
"devLastNotification",
|
|
||||||
"devPresentLastScan",
|
|
||||||
"devIsNew",
|
|
||||||
"devLocation",
|
|
||||||
"devIsArchived",
|
|
||||||
"devParentPort",
|
|
||||||
"devParentMAC",
|
|
||||||
"devIcon",
|
|
||||||
"devGUID",
|
|
||||||
"devSyncHubNode",
|
|
||||||
"devSite",
|
|
||||||
"devSSID",
|
|
||||||
"devSourcePlugin",
|
|
||||||
"devCustomProps",
|
|
||||||
"devFQDN",
|
|
||||||
"devParentRelType",
|
|
||||||
"devReqNicsOnline"
|
|
||||||
];
|
|
||||||
|
|
||||||
return $columns;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function generateGUID() {
|
|
||||||
return sprintf(
|
|
||||||
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
|
||||||
random_int(0, 0xffff), random_int(0, 0xffff),
|
|
||||||
random_int(0, 0xffff),
|
|
||||||
random_int(0, 0x0fff) | 0x4000, // Version 4 UUID
|
|
||||||
random_int(0, 0x3fff) | 0x8000, // Variant 1
|
|
||||||
random_int(0, 0xffff), random_int(0, 0xffff), random_int(0, 0xffff)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Simple cookie cache
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getCache($key) {
|
|
||||||
if( isset($_COOKIE[$key]))
|
|
||||||
{
|
|
||||||
return $_COOKIE[$key];
|
|
||||||
}else
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// -------------------------------------------------------------------------------------------
|
|
||||||
function setCache($key, $value, $expireMinutes = 5) {
|
|
||||||
setcookie($key, $value, time()+$expireMinutes*60, "/","", 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -1,209 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
|
||||||
// equivalent: /messaging/in-app
|
|
||||||
// 🔺----- API ENDPOINTS SUPERSEDED -----🔺
|
|
||||||
|
|
||||||
require dirname(__FILE__).'/../templates/globals.php';
|
|
||||||
|
|
||||||
function get_notification_store_path(): string {
|
|
||||||
$apiRoot = getenv('NETALERTX_API') ?: '/tmp/api';
|
|
||||||
return rtrim($apiRoot, '/') . '/user_notifications.json';
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// check if authenticated
|
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Check if the action parameter is set in the GET request
|
|
||||||
if (isset($_GET['action'])) {
|
|
||||||
// Collect GUID if provided
|
|
||||||
$guid = isset($_GET['guid']) ? $_GET['guid'] : null;
|
|
||||||
|
|
||||||
// Perform the appropriate action based on the action parameter
|
|
||||||
switch ($_GET['action']) {
|
|
||||||
case 'write_notification':
|
|
||||||
// Call the write_notification function with content and level parameters
|
|
||||||
if (isset($_GET['content'])) {
|
|
||||||
$content = $_GET['content'];
|
|
||||||
$level = isset($_GET['level']) ? $_GET['level'] : "interrupt";
|
|
||||||
write_notification($content, $level);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'remove_notification':
|
|
||||||
// Call the remove_notification function with guid parameter
|
|
||||||
if ($guid) {
|
|
||||||
remove_notification($guid);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'mark_notification_as_read':
|
|
||||||
// Call the mark_notification_as_read function with guid parameter
|
|
||||||
if ($guid) {
|
|
||||||
mark_notification_as_read($guid);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'notifications_clear':
|
|
||||||
// Call the notifications_clear function
|
|
||||||
notifications_clear();
|
|
||||||
break;
|
|
||||||
case 'notifications_mark_all_read':
|
|
||||||
// Call the notifications_mark_all_read function
|
|
||||||
notifications_mark_all_read();
|
|
||||||
break;
|
|
||||||
case 'get_unread_notifications':
|
|
||||||
// Call the get_unread_notifications function
|
|
||||||
get_unread_notifications();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Generates a random GUID
|
|
||||||
function generate_guid() {
|
|
||||||
if (function_exists('com_create_guid') === true) {
|
|
||||||
return trim(com_create_guid(), '{}');
|
|
||||||
}
|
|
||||||
return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X',
|
|
||||||
mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535),
|
|
||||||
mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535),
|
|
||||||
mt_rand(0, 65535), mt_rand(0, 65535));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Logs a notification in in-app notification system
|
|
||||||
function write_notification($content, $level = "interrupt") {
|
|
||||||
$NOTIFICATION_API_FILE = get_notification_store_path();
|
|
||||||
|
|
||||||
// Generate GUID
|
|
||||||
$guid = generate_guid();
|
|
||||||
|
|
||||||
// Generate timestamp
|
|
||||||
$timestamp = (new DateTime('now'))->format('Y-m-d H:i:s');
|
|
||||||
|
|
||||||
// Escape content to prevent breaking JSON
|
|
||||||
$escaped_content = json_encode($content);
|
|
||||||
|
|
||||||
// Prepare notification array
|
|
||||||
$notification = array(
|
|
||||||
'timestamp' => $timestamp,
|
|
||||||
'guid' => $guid,
|
|
||||||
'read' => 0,
|
|
||||||
'level'=> $level,
|
|
||||||
'content' => $escaped_content,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Read existing notifications
|
|
||||||
$notifications = json_decode(file_get_contents($NOTIFICATION_API_FILE), true);
|
|
||||||
|
|
||||||
// Add new notification
|
|
||||||
$notifications[] = $notification;
|
|
||||||
|
|
||||||
// Write notifications to file
|
|
||||||
file_put_contents($NOTIFICATION_API_FILE, json_encode($notifications));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Removes a notification based on GUID
|
|
||||||
function remove_notification($guid) {
|
|
||||||
$NOTIFICATION_API_FILE = get_notification_store_path();
|
|
||||||
|
|
||||||
// Read existing notifications
|
|
||||||
$notifications = json_decode(file_get_contents($NOTIFICATION_API_FILE), true);
|
|
||||||
|
|
||||||
// Filter out the notification with the specified GUID
|
|
||||||
$filtered_notifications = array_filter($notifications, function($notification) use ($guid) {
|
|
||||||
return $notification['guid'] !== $guid;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Write filtered notifications back to file
|
|
||||||
file_put_contents($NOTIFICATION_API_FILE, json_encode(array_values($filtered_notifications)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Deletes all notifications
|
|
||||||
function notifications_clear() {
|
|
||||||
$NOTIFICATION_API_FILE = get_notification_store_path();
|
|
||||||
|
|
||||||
// Clear notifications by writing an empty array to the file
|
|
||||||
file_put_contents($NOTIFICATION_API_FILE, json_encode(array()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
// Mark a notification read based on GUID
|
|
||||||
function mark_notification_as_read($guid) {
|
|
||||||
$NOTIFICATION_API_FILE = get_notification_store_path();
|
|
||||||
$max_attempts = 3;
|
|
||||||
$attempts = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
// Check if the file exists and is readable
|
|
||||||
if (file_exists($NOTIFICATION_API_FILE) && is_readable($NOTIFICATION_API_FILE)) {
|
|
||||||
// Attempt to read existing notifications
|
|
||||||
$notifications = json_decode(file_get_contents($NOTIFICATION_API_FILE), true);
|
|
||||||
|
|
||||||
// Check if reading was successful
|
|
||||||
if ($notifications !== null) {
|
|
||||||
// Iterate over notifications to find the one with the specified GUID
|
|
||||||
foreach ($notifications as &$notification) {
|
|
||||||
if ($notification['guid'] === $guid) {
|
|
||||||
// Mark the notification as read
|
|
||||||
$notification['read'] = 1;
|
|
||||||
break;
|
|
||||||
} elseif ($guid == null) // no guid given, mark all read
|
|
||||||
{
|
|
||||||
$notification['read'] = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write updated notifications back to file
|
|
||||||
file_put_contents($NOTIFICATION_API_FILE, json_encode($notifications));
|
|
||||||
return; // Exit the function after successful operation
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increment the attempt count
|
|
||||||
$attempts++;
|
|
||||||
|
|
||||||
// Sleep for a short duration before retrying
|
|
||||||
usleep(500000); // Sleep for 0.5 seconds (500,000 microseconds) before retrying
|
|
||||||
|
|
||||||
} while ($attempts < $max_attempts);
|
|
||||||
|
|
||||||
// If maximum attempts reached or file reading failed, handle the error
|
|
||||||
echo "Failed to read notification file after $max_attempts attempts.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
function notifications_mark_all_read() {
|
|
||||||
mark_notification_as_read(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
function get_unread_notifications() {
|
|
||||||
$NOTIFICATION_API_FILE = get_notification_store_path();
|
|
||||||
|
|
||||||
// Read existing notifications
|
|
||||||
if (file_exists($NOTIFICATION_API_FILE) && is_readable($NOTIFICATION_API_FILE)) {
|
|
||||||
$notifications = json_decode(file_get_contents($NOTIFICATION_API_FILE), true);
|
|
||||||
|
|
||||||
if ($notifications !== null) {
|
|
||||||
// Filter unread notifications
|
|
||||||
$unread_notifications = array_filter($notifications, function($notification) {
|
|
||||||
return $notification['read'] === 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Return unread notifications as JSON
|
|
||||||
header('Content-Type: application/json');
|
|
||||||
echo json_encode(array_values($unread_notifications));
|
|
||||||
} else {
|
|
||||||
echo json_encode([]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo json_encode([]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
<!-- To the right -->
|
<!-- To the right -->
|
||||||
<div class="pull-right no-hidden-xs">
|
<div class="pull-right no-hidden-xs">
|
||||||
| <a href="https://gurubase.io/g/netalertx" class="pointer" target="_blank" title="Ask AI"><i class="fa fa-comment-dots fa-flip-horizontal"></i></a>
|
| <a href="https://gurubase.io/g/netalertx" class="pointer" target="_blank" title="Ask AI"><i class="fa fa-comment-dots fa-flip-horizontal"></i></a>
|
||||||
| <a href="https://jokob-sk.github.io/NetAlertX/" class="pointer" target="_blank" title="Documentation"><i class="fa fa-book"></i></a>
|
| <a href="https://docs.netalertx.com/" class="pointer" target="_blank" title="Documentation"><i class="fa fa-book"></i></a>
|
||||||
| <a href="https://github.com/jokob-sk/NetAlertX/issues" class="pointer" target="_blank"><i class="fa fa-bug" title="Report a bug"></i></a>
|
| <a href="https://github.com/jokob-sk/NetAlertX/issues" class="pointer" target="_blank"><i class="fa fa-bug" title="Report a bug"></i></a>
|
||||||
| <a href="https://discord.com/invite/NczTUTWyRr" class="pointer" target="_blank"><i class="fa-brands fa-discord" title="Join Discord"></i></a>
|
| <a href="https://discord.com/invite/NczTUTWyRr" class="pointer" target="_blank"><i class="fa-brands fa-discord" title="Join Discord"></i></a>
|
||||||
| <?= lang('Maintenance_built_on');?>: <?php include 'php/templates/build.php'; ?>
|
| <?= lang('Maintenance_built_on');?>: <?php include 'php/templates/build.php'; ?>
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
<script src="lib/datatables.net/js/dataTables.select.min.js"></script>
|
<script src="lib/datatables.net/js/dataTables.select.min.js"></script>
|
||||||
|
|
||||||
<script src="js/common.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/common.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
|
<script src="js/sse_manager.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
<script src="js/api.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/api.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
<script src="js/modal.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/modal.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
<script src="js/tests.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/tests.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
@@ -100,19 +101,23 @@
|
|||||||
<!-- Servertime to the right of the hostname -->
|
<!-- Servertime to the right of the hostname -->
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// ===================================================================
|
||||||
// Updates the backend application state/status in the header
|
// DEPRECATED: updateState() - Replaced by SSE-based state manager
|
||||||
function updateState(){
|
// Kept for backward compatibility, will be removed in future version
|
||||||
|
// ===================================================================
|
||||||
|
function updateState() {
|
||||||
|
// Delegate to SSE manager if available
|
||||||
|
if (typeof netAlertXStateManager !== 'undefined' && netAlertXStateManager.initialized) {
|
||||||
|
return; // SSE handles this now
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback for backward compatibility
|
||||||
$.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
$.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
||||||
|
|
||||||
document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', '');
|
document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', '');
|
||||||
|
|
||||||
setTimeout("updateState()", 1000);
|
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// ===================================================================
|
||||||
// updates the date and time in the header
|
// updates the date and time in the header
|
||||||
function update_servertime() {
|
function update_servertime() {
|
||||||
// Get the current date and time in the specified time zone
|
// Get the current date and time in the specified time zone
|
||||||
@@ -481,7 +486,9 @@
|
|||||||
// Update server time in the header
|
// Update server time in the header
|
||||||
update_servertime()
|
update_servertime()
|
||||||
|
|
||||||
// Update server state in the header
|
// Initialize SSE-based state manager (replaces updateState polling)
|
||||||
updateState()
|
if (typeof netAlertXStateManager !== 'undefined') {
|
||||||
|
netAlertXStateManager.init();
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "يمكنك تحديد استعلام SQL مخصص يقوم بإنشاء ملف JSON، ثم يتم عرضه عبر <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>نقطة نهاية ملف table_custom_endpoint.json</code></a>.",
|
"API_CUSTOM_SQL_description": "يمكنك تحديد استعلام SQL مخصص يقوم بإنشاء ملف JSON، ثم يتم عرضه عبر <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>نقطة نهاية ملف table_custom_endpoint.json</code></a>.",
|
||||||
"API_CUSTOM_SQL_name": "نقطة نهاية مخصصة",
|
"API_CUSTOM_SQL_name": "نقطة نهاية مخصصة",
|
||||||
"API_TOKEN_description": "رمز API للتواصل الآمن. قم بإنشاء واحد أو أدخل أي قيمة. يتم إرساله في رأس الطلب ويُستخدم في إضافة <code>SYNC</code>، خادم GraphQL ونقاط نهاية API الأخرى. يمكنك استخدام نقاط نهاية API لإنشاء تكاملات مخصصة كما هو موضح في <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">توثيق API</a>.",
|
"API_TOKEN_description": "رمز API للتواصل الآمن. قم بإنشاء واحد أو أدخل أي قيمة. يتم إرساله في رأس الطلب ويُستخدم في إضافة <code>SYNC</code>، خادم GraphQL ونقاط نهاية API الأخرى. يمكنك استخدام نقاط نهاية API لإنشاء تكاملات مخصصة كما هو موضح في <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">توثيق API</a>.",
|
||||||
"API_TOKEN_name": "رمز API",
|
"API_TOKEN_name": "رمز API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Pots especificar una consulta SQL personalitzada que generarà un fitxer JSON i el mostrarà mitjançant <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
"API_CUSTOM_SQL_description": "Pots especificar una consulta SQL personalitzada que generarà un fitxer JSON i el mostrarà mitjançant <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Punt final personalitzat",
|
"API_CUSTOM_SQL_name": "Punt final personalitzat",
|
||||||
"API_TOKEN_description": "Token API per assegurar les comunicacions, pots generar-ne un o introduir un valor clau. S'enviarà a la capçalera de la petició <code>SYNC</code> plugin, servidor GraphQL i altres endpoints API. Pots fer servir els endpoints API per crear integracions personalitzades tal com es descriu a <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">la documentació API</a>.",
|
"API_TOKEN_description": "Token API per assegurar les comunicacions, pots generar-ne un o introduir un valor clau. S'enviarà a la capçalera de la petició <code>SYNC</code> plugin, servidor GraphQL i altres endpoints API. Pots fer servir els endpoints API per crear integracions personalitzades tal com es descriu a <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">la documentació API</a>.",
|
||||||
"API_TOKEN_name": "Token API",
|
"API_TOKEN_name": "Token API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "El venedor ha de ser autodetectat. Pots sobreescriure o afegir el teu valor personalitzat.",
|
"DevDetail_Vendor_hover": "El venedor ha de ser autodetectat. Pots sobreescriure o afegir el teu valor personalitzat.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Afegir nova icona",
|
"DevDetail_button_AddIcon": "Afegir nova icona",
|
||||||
"DevDetail_button_AddIcon_Help": "Enganxeu en una etiqueta html SVG o en una icona etiqueta html Font Awesome. Llegir el <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons docs</a> per a més detalls.",
|
"DevDetail_button_AddIcon_Help": "Enganxeu en una etiqueta html SVG o en una icona etiqueta html Font Awesome. Llegir el <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Icons docs</a> per a més detalls.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Afegir una nova Icona a aquest dispositiu que encara no està disponible al desplegable.",
|
"DevDetail_button_AddIcon_Tooltip": "Afegir una nova Icona a aquest dispositiu que encara no està disponible al desplegable.",
|
||||||
"DevDetail_button_Delete": "Eliminar dispositiu",
|
"DevDetail_button_Delete": "Eliminar dispositiu",
|
||||||
"DevDetail_button_DeleteEvents": "Esborrar Esdeveniments",
|
"DevDetail_button_DeleteEvents": "Esborrar Esdeveniments",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Guardar",
|
"DevDetail_button_Save": "Guardar",
|
||||||
"DeviceEdit_ValidMacIp": "Entra una adreça <b>IP</b> i <b>Mac</b> vàlides.",
|
"DeviceEdit_ValidMacIp": "Entra una adreça <b>IP</b> i <b>Mac</b> vàlides.",
|
||||||
"Device_MultiEdit": "Multi-edició",
|
"Device_MultiEdit": "Multi-edició",
|
||||||
"Device_MultiEdit_Backup": "Atenció, entrar valors incorrectes a continuació trencarà la configuració. Si us plau, abans feu còpia de seguretat la vostra base de dades o configuració de Dispositius (<a href=\"php/server/devices.php?action=ExportCSV\">clic per descarregar <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Llegiu com per recuperar Dispositius des d'aquest fitxer al <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">documentació de Còpies de seguretat</a>. Per aplicar els canvis, feu click a la <b>Save<i class=\"fa-solid fa-save\"></i></b> icona de cada camp que volgueu actualitzar.",
|
"Device_MultiEdit_Backup": "Atenció, entrar valors incorrectes a continuació trencarà la configuració. Si us plau, abans feu còpia de seguretat la vostra base de dades o configuració de Dispositius (<a href=\"php/server/devices.php?action=ExportCSV\">clic per descarregar <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Llegiu com per recuperar Dispositius des d'aquest fitxer al <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">documentació de Còpies de seguretat</a>. Per aplicar els canvis, feu click a la <b>Save<i class=\"fa-solid fa-save\"></i></b> icona de cada camp que volgueu actualitzar.",
|
||||||
"Device_MultiEdit_Fields": "Editar camps:",
|
"Device_MultiEdit_Fields": "Editar camps:",
|
||||||
"Device_MultiEdit_MassActions": "Accions massives:",
|
"Device_MultiEdit_MassActions": "Accions massives:",
|
||||||
"Device_MultiEdit_No_Devices": "Cap dispositiu seleccionat.",
|
"Device_MultiEdit_No_Devices": "Cap dispositiu seleccionat.",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Tot",
|
"Device_Tablelenght_all": "Tot",
|
||||||
"Device_Title": "Dispositius",
|
"Device_Title": "Dispositius",
|
||||||
"Devices_Filters": "Filtres",
|
"Devices_Filters": "Filtres",
|
||||||
"ENABLE_PLUGINS_description": "Habilita la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">connectors</a> funcionalitat. Carregar els connectors requereix més recursos de maquinari així podries voler desactivar-los en un sistema de baixos recursos.",
|
"ENABLE_PLUGINS_description": "Habilita la <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">connectors</a> funcionalitat. Carregar els connectors requereix més recursos de maquinari així podries voler desactivar-los en un sistema de baixos recursos.",
|
||||||
"ENABLE_PLUGINS_name": "Activa els connectors(Plugins)",
|
"ENABLE_PLUGINS_name": "Activa els connectors(Plugins)",
|
||||||
"ENCRYPTION_KEY_description": "Clau de xifrat de dades.",
|
"ENCRYPTION_KEY_description": "Clau de xifrat de dades.",
|
||||||
"ENCRYPTION_KEY_name": "Clau d'encriptació",
|
"ENCRYPTION_KEY_name": "Clau d'encriptació",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Advertència",
|
"Gen_Warning": "Advertència",
|
||||||
"Gen_Work_In_Progress": "Work in progress, un bon moment per retroalimentació a https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Work in progress, un bon moment per retroalimentació a https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Nou dispositiu",
|
"Gen_create_new_device": "Nou dispositiu",
|
||||||
"Gen_create_new_device_info": "Els dispositius són típicament descobert utilitzant <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Tanmateix, en certs casos, pots necessitar afegir dispositius a mà. Per explorar els temes concrets comproveu la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentació de Xarxes Remotes</a>.",
|
"Gen_create_new_device_info": "Els dispositius són típicament descobert utilitzant <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. Tanmateix, en certs casos, pots necessitar afegir dispositius a mà. Per explorar els temes concrets comproveu la <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">documentació de Xarxes Remotes</a>.",
|
||||||
"General_display_name": "General",
|
"General_display_name": "General",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Això és un paràmetre de manteniment <b>ELIMINANT dispositius</b>. Si s'activa (<code>0</code> està desactivat), els dispositius marcats com <b>Dispositiu Nou</b> seran eliminats si el temps de <b>Primera Sessió</b> es més vell que les hores especificades en aquest paràmetre. Faci servir aquest paràmetre si vol auto-eliminar <b>Nous Dispositius</b> després de <code>X</code> hores.",
|
"HRS_TO_KEEP_NEWDEV_description": "Això és un paràmetre de manteniment <b>ELIMINANT dispositius</b>. Si s'activa (<code>0</code> està desactivat), els dispositius marcats com <b>Dispositiu Nou</b> seran eliminats si el temps de <b>Primera Sessió</b> es més vell que les hores especificades en aquest paràmetre. Faci servir aquest paràmetre si vol auto-eliminar <b>Nous Dispositius</b> després de <code>X</code> hores.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nous dispositius després de",
|
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nous dispositius després de",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Això és un paràmetre de manteniment <b>ELIMINANT dispositius</b>. Si s'activa (<code>0</code> està desactivat), els dispositius que estan <b>Offline</b> i el seu temps <b>Last Offline</b> es més vell que les hores especificades en aquest paràmetre, s'esborraran. Faci servir aquest paràmetre si vol auto-eliminar <b>Dispositius Offline</b> després de <code>X</code> hores sense connexió.",
|
"HRS_TO_KEEP_OFFDEV_description": "Això és un paràmetre de manteniment <b>ELIMINANT dispositius</b>. Si s'activa (<code>0</code> està desactivat), els dispositius que estan <b>Offline</b> i el seu temps <b>Last Offline</b> es més vell que les hores especificades en aquest paràmetre, s'esborraran. Faci servir aquest paràmetre si vol auto-eliminar <b>Dispositius Offline</b> després de <code>X</code> hores sense connexió.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Eliminar dispositius fora de línia després",
|
"HRS_TO_KEEP_OFFDEV_name": "Eliminar dispositius fora de línia després",
|
||||||
"LOADED_PLUGINS_description": "Quins Plugins carregar. Afegir plugins podria alentir l'aplicació. Llegir més sobre quins connectors necessiten estar habilitats, els tipus, o les opcions d'escaneig dins del <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documents de connectors</a>. Els connectors descarregats perdran els vostres paràmetres. Només <code>desactivats</code> es poden eliminar els connectors.",
|
"LOADED_PLUGINS_description": "Quins Plugins carregar. Afegir plugins podria alentir l'aplicació. Llegir més sobre quins connectors necessiten estar habilitats, els tipus, o les opcions d'escaneig dins del <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">documents de connectors</a>. Els connectors descarregats perdran els vostres paràmetres. Només <code>desactivats</code> es poden eliminar els connectors.",
|
||||||
"LOADED_PLUGINS_name": "Connectors carregats",
|
"LOADED_PLUGINS_name": "Connectors carregats",
|
||||||
"LOG_LEVEL_description": "Aquest paràmetre permetrà un registre més detallat. Útil per a la depuració d'esdeveniments d'escriptura a la base de dades.",
|
"LOG_LEVEL_description": "Aquest paràmetre permetrà un registre més detallat. Útil per a la depuració d'esdeveniments d'escriptura a la base de dades.",
|
||||||
"LOG_LEVEL_name": "Imprimeix el registre addicional",
|
"LOG_LEVEL_name": "Imprimeix el registre addicional",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.",
|
"Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.",
|
||||||
"Maintenance_InitCheck": "Init Check",
|
"Maintenance_InitCheck": "Init Check",
|
||||||
"Maintenance_InitCheck_Checking": "Comprovant…",
|
"Maintenance_InitCheck_Checking": "Comprovant…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Assegureu-vos de seguir la guia <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"> de configuració ràpida</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Assegureu-vos de seguir la guia <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\"> de configuració ràpida</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Aplicació inicialitzada amb èxit!",
|
"Maintenance_InitCheck_Success": "Aplicació inicialitzada amb èxit!",
|
||||||
"Maintenance_ReCheck": "Tornar a comprovar",
|
"Maintenance_ReCheck": "Tornar a comprovar",
|
||||||
"Maintenance_Running_Version": "Versió instal·lada",
|
"Maintenance_Running_Version": "Versió instal·lada",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Nom del node",
|
"Network_Node_Name": "Nom del node",
|
||||||
"Network_Parent": "Dispositiu de xarxa pare",
|
"Network_Parent": "Dispositiu de xarxa pare",
|
||||||
"Network_Root": "Node arrel",
|
"Network_Root": "Node arrel",
|
||||||
"Network_Root_Not_Configured": "Seleccioneu un tipus de dispositiu de xarxa, per exemple un tipus <b>Gateway</b>, al camp <b>Tipus</b>del <a href=\"deviceDetails.php?mac=Internet\">dispositiu arrel d'Internet</a> per començar a configurar aquesta pantalla. <br/><br/>. Podeu trobar més documentació a la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Guia de com configurar la vostra pàgina de xarxa</a>",
|
"Network_Root_Not_Configured": "Seleccioneu un tipus de dispositiu de xarxa, per exemple un tipus <b>Gateway</b>, al camp <b>Tipus</b>del <a href=\"deviceDetails.php?mac=Internet\">dispositiu arrel d'Internet</a> per començar a configurar aquesta pantalla. <br/><br/>. Podeu trobar més documentació a la <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">Guia de com configurar la vostra pàgina de xarxa</a>",
|
||||||
"Network_Root_Unconfigurable": "Arrel no configurable",
|
"Network_Root_Unconfigurable": "Arrel no configurable",
|
||||||
"Network_ShowArchived": "Mostra els arxivats",
|
"Network_ShowArchived": "Mostra els arxivats",
|
||||||
"Network_ShowOffline": "Mostra fora de línia",
|
"Network_ShowOffline": "Mostra fora de línia",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Informe",
|
"REPORT_TITLE": "Informe",
|
||||||
"RandomMAC_hover": "Auto detectat - indica que el dispositiu aleatoritza l'adreça MAC. Pots excloure MACs específiques amb la configuració UI_NOT_RANDOM_MAC. Fes click per saber més.",
|
"RandomMAC_hover": "Auto detectat - indica que el dispositiu aleatoritza l'adreça MAC. Pots excloure MACs específiques amb la configuració UI_NOT_RANDOM_MAC. Fes click per saber més.",
|
||||||
"Reports_Sent_Log": "Registre d'informes enviats",
|
"Reports_Sent_Log": "Registre d'informes enviats",
|
||||||
"SCAN_SUBNETS_description": "La majoria dels escàners en xarxa (ARP-SCAN, NMAP, NSLOOKUP, DIG) es basen en l'exploració d'interfícies de xarxa específiques i subxarxes. Comproveu la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">documentació de subxarxes</a> per ajudar en aquesta configuració, especialment VLANs, i quines VLANs són compatibles, o com esbrinar la màscara de xarxa i la seva interfície. <br/> <br/> Una alternativa als escàners en xarxa és activar alguns altres escàners / importadors de dispositius que no requereixin NetAlert<sup>X</sup> per tenir accés a la xarxa (UNIFI, dhcp. leases, PiHole, etc.). <br/> <br/> Nota: El temps d'exploració en si mateix depèn del nombre d'adreces IP per verificar, així que s'ha establir amb cura amb la màscara i la interfície de xarxa adequats.",
|
"SCAN_SUBNETS_description": "La majoria dels escàners en xarxa (ARP-SCAN, NMAP, NSLOOKUP, DIG) es basen en l'exploració d'interfícies de xarxa específiques i subxarxes. Comproveu la <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">documentació de subxarxes</a> per ajudar en aquesta configuració, especialment VLANs, i quines VLANs són compatibles, o com esbrinar la màscara de xarxa i la seva interfície. <br/> <br/> Una alternativa als escàners en xarxa és activar alguns altres escàners / importadors de dispositius que no requereixin NetAlert<sup>X</sup> per tenir accés a la xarxa (UNIFI, dhcp. leases, PiHole, etc.). <br/> <br/> Nota: El temps d'exploració en si mateix depèn del nombre d'adreces IP per verificar, així que s'ha establir amb cura amb la màscara i la interfície de xarxa adequats.",
|
||||||
"SCAN_SUBNETS_name": "Xarxes per escanejar",
|
"SCAN_SUBNETS_name": "Xarxes per escanejar",
|
||||||
"SYSTEM_TITLE": "Informació de sistema",
|
"SYSTEM_TITLE": "Informació de sistema",
|
||||||
"Setting_Override": "Valor de sobreescriptura",
|
"Setting_Override": "Valor de sobreescriptura",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Uptime:",
|
"Systeminfo_System_Uptime": "Uptime:",
|
||||||
"Systeminfo_This_Client": "Aquest Client",
|
"Systeminfo_This_Client": "Aquest Client",
|
||||||
"Systeminfo_USB_Devices": "Dispositius USB",
|
"Systeminfo_USB_Devices": "Dispositius USB",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ S'han detectat punts muntatge antics. Ves a <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">aquesta guia</a> per migrar les noves <code>/data/config</code> i <code>/data/db</code> carpetes i al <code>netalertx</code> contenidor.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ S'han detectat punts muntatge antics. Ves a <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">aquesta guia</a> per migrar les noves <code>/data/config</code> i <code>/data/db</code> carpetes i al <code>netalertx</code> contenidor.",
|
||||||
"TIMEZONE_description": "Fus horari per mostrar les estadístiques correctament. <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">aquí</a>.",
|
"TIMEZONE_description": "Fus horari per mostrar les estadístiques correctament. <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">aquí</a>.",
|
||||||
"TIMEZONE_name": "Fus horari",
|
"TIMEZONE_name": "Fus horari",
|
||||||
"UI_DEV_SECTIONS_description": "Seleccioneu quins elements de la interfície d'usuari per ocultar a les pàgines de dispositius.",
|
"UI_DEV_SECTIONS_description": "Seleccioneu quins elements de la interfície d'usuari per ocultar a les pàgines de dispositius.",
|
||||||
"UI_DEV_SECTIONS_name": "Ocultar seccions de dispositius",
|
"UI_DEV_SECTIONS_name": "Ocultar seccions de dispositius",
|
||||||
"UI_ICONS_description": "Una llista d'icones predefinides. Aneu amb precaució, la forma preferida d'afegir icones es descriu a la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\"> documentació d'Icones</a>. Podeu afegir una etiqueta HTML codificada amb base64 o etiqueta Font-awesome.",
|
"UI_ICONS_description": "Una llista d'icones predefinides. Aneu amb precaució, la forma preferida d'afegir icones es descriu a la <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\"> documentació d'Icones</a>. Podeu afegir una etiqueta HTML codificada amb base64 o etiqueta Font-awesome.",
|
||||||
"UI_ICONS_name": "Icones predefinides",
|
"UI_ICONS_name": "Icones predefinides",
|
||||||
"UI_LANG_description": "Seleccioneu l'idioma d'usuari preferit. Ajudeu a traduir o suggerir idiomes al portal en línia de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Seleccioneu l'idioma d'usuari preferit. Ajudeu a traduir o suggerir idiomes al portal en línia de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Llenguatge UI",
|
"UI_LANG_name": "Llenguatge UI",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Carregar més Editors amb la configuració <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Carregar més Editors amb la configuració <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Editors",
|
"settings_publishers_label": "Editors",
|
||||||
"settings_readonly": "No es pot LLEGIR o ESCRIURE <code>app.conf</code>. Prova de reiniciar el contenidor i llegir la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\"> documentació de permisos d'arxiu</a>",
|
"settings_readonly": "No es pot LLEGIR o ESCRIURE <code>app.conf</code>. Prova de reiniciar el contenidor i llegir la <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\"> documentació de permisos d'arxiu</a>",
|
||||||
"settings_saved": "<br/>Configuració guardada. <br/> Recàrregant ... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Configuració guardada. <br/> Recàrregant ... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Benutzerdefinierte SQL-Abfrage, welche eine JSON-Datei generiert und diese mit dem <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\">Dateiendpunkt <code>table_custom_endpoint.json</code></a> zur Verfügung stellt.",
|
"API_CUSTOM_SQL_description": "Benutzerdefinierte SQL-Abfrage, welche eine JSON-Datei generiert und diese mit dem <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\">Dateiendpunkt <code>table_custom_endpoint.json</code></a> zur Verfügung stellt.",
|
||||||
"API_CUSTOM_SQL_name": "Benutzerdefinierte SQL-Abfrage",
|
"API_CUSTOM_SQL_name": "Benutzerdefinierte SQL-Abfrage",
|
||||||
"API_TOKEN_description": "API-Token zur Absicherung der Kommunikation – Sie können einen neuen generieren oder einen beliebigen Wert eingeben. Er wird im Anfrage-Header übermittelt und zum Beispiel im <code>SYNC</code>-Plugin, im GraphQL-Server und in anderen API Endpunkten verwendet (siehe auch <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API Dokumentation)</a>..",
|
"API_TOKEN_description": "API-Token zur Absicherung der Kommunikation – Sie können einen neuen generieren oder einen beliebigen Wert eingeben. Er wird im Anfrage-Header übermittelt und zum Beispiel im <code>SYNC</code>-Plugin, im GraphQL-Server und in anderen API Endpunkten verwendet (siehe auch <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">API Dokumentation)</a>..",
|
||||||
"API_TOKEN_name": "API-Schlüssel",
|
"API_TOKEN_name": "API-Schlüssel",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Der Anbieter sollte automatisch erkannt werden. Du kannst den Wert überschreiben oder deinen eigenen Wert hinzufügen.",
|
"DevDetail_Vendor_hover": "Der Anbieter sollte automatisch erkannt werden. Du kannst den Wert überschreiben oder deinen eigenen Wert hinzufügen.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Neues Symbol Hinzufügen",
|
"DevDetail_button_AddIcon": "Neues Symbol Hinzufügen",
|
||||||
"DevDetail_button_AddIcon_Help": "Füge ein HTML SVG Tag oder Font Awesome HTML Tag ein. Siehe <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icon Dokumentation</a> für details.",
|
"DevDetail_button_AddIcon_Help": "Füge ein HTML SVG Tag oder Font Awesome HTML Tag ein. Siehe <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Icon Dokumentation</a> für details.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Neues Icon zu diesem Gerät hinzufügen, welches es noch nicht im dropdown gibt.",
|
"DevDetail_button_AddIcon_Tooltip": "Neues Icon zu diesem Gerät hinzufügen, welches es noch nicht im dropdown gibt.",
|
||||||
"DevDetail_button_Delete": "Gerät löschen",
|
"DevDetail_button_Delete": "Gerät löschen",
|
||||||
"DevDetail_button_DeleteEvents": "Ereignisse löschen",
|
"DevDetail_button_DeleteEvents": "Ereignisse löschen",
|
||||||
@@ -202,7 +202,7 @@
|
|||||||
"DevDetail_button_Save": "Speichern",
|
"DevDetail_button_Save": "Speichern",
|
||||||
"DeviceEdit_ValidMacIp": "Gib eine gültige <b>MAC</b>- und <b>IP</b>-Adresse ein.",
|
"DeviceEdit_ValidMacIp": "Gib eine gültige <b>MAC</b>- und <b>IP</b>-Adresse ein.",
|
||||||
"Device_MultiEdit": "Mehrfach-bearbeiten",
|
"Device_MultiEdit": "Mehrfach-bearbeiten",
|
||||||
"Device_MultiEdit_Backup": "Achtung! Falsche Eingaben können die Installation beschädigen. Bitte sichere deine Datenbank oder Gerätekonfiguration zuerst: (<a href=\"php/server/devices.php?action=ExportCSV\">Konfiguration herunterladen <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Wie du dein Gerät wiederherstellen kannst findest du in der <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Dokumentation über Backups</a>.",
|
"Device_MultiEdit_Backup": "Achtung! Falsche Eingaben können die Installation beschädigen. Bitte sichere deine Datenbank oder Gerätekonfiguration zuerst: (<a href=\"php/server/devices.php?action=ExportCSV\">Konfiguration herunterladen <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Wie du dein Gerät wiederherstellen kannst findest du in der <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">Dokumentation über Backups</a>.",
|
||||||
"Device_MultiEdit_Fields": "Felder bearbeiten:",
|
"Device_MultiEdit_Fields": "Felder bearbeiten:",
|
||||||
"Device_MultiEdit_MassActions": "Massen aktionen:",
|
"Device_MultiEdit_MassActions": "Massen aktionen:",
|
||||||
"Device_MultiEdit_No_Devices": "Keine Geräte ausgewählt.",
|
"Device_MultiEdit_No_Devices": "Keine Geräte ausgewählt.",
|
||||||
@@ -257,7 +257,7 @@
|
|||||||
"Device_Tablelenght_all": "Alle",
|
"Device_Tablelenght_all": "Alle",
|
||||||
"Device_Title": "Geräte",
|
"Device_Title": "Geräte",
|
||||||
"Devices_Filters": "Filter",
|
"Devices_Filters": "Filter",
|
||||||
"ENABLE_PLUGINS_description": "NOTUSED Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
|
"ENABLE_PLUGINS_description": "NOTUSED Enables the <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
|
||||||
"ENABLE_PLUGINS_name": "NOTUSED Enable Plugins",
|
"ENABLE_PLUGINS_name": "NOTUSED Enable Plugins",
|
||||||
"ENCRYPTION_KEY_description": "Schlüssel zur Datenverschlüsselung.",
|
"ENCRYPTION_KEY_description": "Schlüssel zur Datenverschlüsselung.",
|
||||||
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
|
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
|
||||||
@@ -348,7 +348,7 @@
|
|||||||
"Gen_Warning": "Warnung",
|
"Gen_Warning": "Warnung",
|
||||||
"Gen_Work_In_Progress": "Keine Finalversion, feedback bitte unter: https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Keine Finalversion, feedback bitte unter: https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Neues Gerät",
|
"Gen_create_new_device": "Neues Gerät",
|
||||||
"Gen_create_new_device_info": "Geräte werden normalerweise über <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">Plugins</a> gefunden. In Ausnahmefällen kann es nötig sein, sie manuell hinzuzufügen. Konkrete Szenarien sind in der <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Dokumentation über entfernte Netzwerke</a> zu finden.",
|
"Gen_create_new_device_info": "Geräte werden normalerweise über <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">Plugins</a> gefunden. In Ausnahmefällen kann es nötig sein, sie manuell hinzuzufügen. Konkrete Szenarien sind in der <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">Dokumentation über entfernte Netzwerke</a> zu finden.",
|
||||||
"General_display_name": "Allgemein",
|
"General_display_name": "Allgemein",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Dies ist eine Wartungseinstellung <b>DELETING devices</b>. Wenn aktiviert (<code>0</code> bedeutet deaktiviert), werden als <b>\"Neues Gerät\"</b> markierte Geräte gelöscht, wenn ihre <b>erste Sitzung</b> länger her ist als in dieser Einstellung angegeben. Verwenden Sie diese Einstellung, wenn Sie <b>Neue Geräte</b> nach <code>X</code> Stunden automatisch löschen wollen.",
|
"HRS_TO_KEEP_NEWDEV_description": "Dies ist eine Wartungseinstellung <b>DELETING devices</b>. Wenn aktiviert (<code>0</code> bedeutet deaktiviert), werden als <b>\"Neues Gerät\"</b> markierte Geräte gelöscht, wenn ihre <b>erste Sitzung</b> länger her ist als in dieser Einstellung angegeben. Verwenden Sie diese Einstellung, wenn Sie <b>Neue Geräte</b> nach <code>X</code> Stunden automatisch löschen wollen.",
|
||||||
@@ -636,7 +636,7 @@
|
|||||||
"REPORT_TITLE": "Bericht",
|
"REPORT_TITLE": "Bericht",
|
||||||
"REPORT_TO_description": "Email address to which the notification will be send to.",
|
"REPORT_TO_description": "Email address to which the notification will be send to.",
|
||||||
"REPORT_TO_name": "Send email to",
|
"REPORT_TO_name": "Send email to",
|
||||||
"REPORT_WEBHOOK_description": "Enable webhooks for notifications. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a> to name a few. Check out this simple <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md\" target=\"_blank\">n8n guide here</a> to get started. If enabled, configure related settings below.",
|
"REPORT_WEBHOOK_description": "Enable webhooks for notifications. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a> to name a few. Check out this simple <a href=\"https://docs.netalertx.com/WEBHOOK_N8N\" target=\"_blank\">n8n guide here</a> to get started. If enabled, configure related settings below.",
|
||||||
"REPORT_WEBHOOK_name": "Enable Webhooks",
|
"REPORT_WEBHOOK_name": "Enable Webhooks",
|
||||||
"RandomMAC_hover": "Automatisch erkannt - gibt an, ob das Gerät seine MAC-Adresse zufällig ermittelt.",
|
"RandomMAC_hover": "Automatisch erkannt - gibt an, ob das Gerät seine MAC-Adresse zufällig ermittelt.",
|
||||||
"Reports_Sent_Log": "Protokoll gesendeter Berichte",
|
"Reports_Sent_Log": "Protokoll gesendeter Berichte",
|
||||||
@@ -648,7 +648,7 @@
|
|||||||
"SMTP_PASS_name": "SMTP password",
|
"SMTP_PASS_name": "SMTP password",
|
||||||
"SMTP_PORT_description": "Port number used for the SMTP connection. Set to <code>0</code> if you do not want to use a port when connecting to the SMTP server.",
|
"SMTP_PORT_description": "Port number used for the SMTP connection. Set to <code>0</code> if you do not want to use a port when connecting to the SMTP server.",
|
||||||
"SMTP_PORT_name": "SMTP server PORT",
|
"SMTP_PORT_name": "SMTP server PORT",
|
||||||
"SMTP_SERVER_description": "The SMTP server host URL. For example <code>smtp-relay.sendinblue.com</code>. To use Gmail as an SMTP server <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SMTP.md\">follow this guide</a>",
|
"SMTP_SERVER_description": "The SMTP server host URL. For example <code>smtp-relay.sendinblue.com</code>. To use Gmail as an SMTP server <a target=\"_blank\" href=\"https://docs.netalertx.com/SMTP\">follow this guide</a>",
|
||||||
"SMTP_SERVER_name": "SMTP server URL",
|
"SMTP_SERVER_name": "SMTP server URL",
|
||||||
"SMTP_SKIP_LOGIN_description": "Do not use authentication when connecting to the SMTP server.",
|
"SMTP_SKIP_LOGIN_description": "Do not use authentication when connecting to the SMTP server.",
|
||||||
"SMTP_SKIP_LOGIN_name": "Skip authentication",
|
"SMTP_SKIP_LOGIN_name": "Skip authentication",
|
||||||
@@ -762,7 +762,7 @@
|
|||||||
"WEBHOOK_PAYLOAD_name": "Payload type",
|
"WEBHOOK_PAYLOAD_name": "Payload type",
|
||||||
"WEBHOOK_REQUEST_METHOD_description": "The HTTP request method to be used for the webhook call.",
|
"WEBHOOK_REQUEST_METHOD_description": "The HTTP request method to be used for the webhook call.",
|
||||||
"WEBHOOK_REQUEST_METHOD_name": "Request method",
|
"WEBHOOK_REQUEST_METHOD_name": "Request method",
|
||||||
"WEBHOOK_SECRET_description": "When set, use this secret to generate the SHA256-HMAC hex digest value of the request body, which will be passed as the <code>X-Webhook-Signature</code> header to the request. You can find more informations <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_SECRET.md\">here</a>.",
|
"WEBHOOK_SECRET_description": "When set, use this secret to generate the SHA256-HMAC hex digest value of the request body, which will be passed as the <code>X-Webhook-Signature</code> header to the request. You can find more informations <a target=\"_blank\" href=\"https://docs.netalertx.com/WEBHOOK_SECRET\">here</a>.",
|
||||||
"WEBHOOK_SECRET_name": "HMAC Secret",
|
"WEBHOOK_SECRET_name": "HMAC Secret",
|
||||||
"WEBHOOK_SIZE_description": "The maximum size of the webhook payload as number of characters in the passed string. If above limit, it will be truncated and a <code>(text was truncated)</code> message is appended.",
|
"WEBHOOK_SIZE_description": "The maximum size of the webhook payload as number of characters in the passed string. If above limit, it will be truncated and a <code>(text was truncated)</code> message is appended.",
|
||||||
"WEBHOOK_SIZE_name": "Max payload size",
|
"WEBHOOK_SIZE_name": "Max payload size",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "You can specify a custom SQL query which will generate a JSON file and then expose it via the <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
"API_CUSTOM_SQL_description": "You can specify a custom SQL query which will generate a JSON file and then expose it via the <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Custom endpoint",
|
"API_CUSTOM_SQL_name": "Custom endpoint",
|
||||||
"API_TOKEN_description": "API token for secure communication. Generate one or enter any value. It's sent in the request header and used in the <code>SYNC</code> plugin, GraphQL server and other API endpoints. You can use the API endpoints to create custom integrations as descibed in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API documentation</a>.",
|
"API_TOKEN_description": "API token for secure communication. Generate one or enter any value. It's sent in the request header and used in the <code>SYNC</code> plugin, GraphQL server and other API endpoints. You can use the API endpoints to create custom integrations as descibed in the <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">API documentation</a>.",
|
||||||
"API_TOKEN_name": "API token",
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Add new Icon",
|
"DevDetail_button_AddIcon": "Add new Icon",
|
||||||
"DevDetail_button_AddIcon_Help": "Paste in an SVG html tag or Font Awesome html tag icon. Read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons docs</a> for details.",
|
"DevDetail_button_AddIcon_Help": "Paste in an SVG html tag or Font Awesome html tag icon. Read the <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Icons docs</a> for details.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Add a new Icon to this device that is not yet available in the dropdown.",
|
"DevDetail_button_AddIcon_Tooltip": "Add a new Icon to this device that is not yet available in the dropdown.",
|
||||||
"DevDetail_button_Delete": "Delete Device",
|
"DevDetail_button_Delete": "Delete Device",
|
||||||
"DevDetail_button_DeleteEvents": "Delete Events",
|
"DevDetail_button_DeleteEvents": "Delete Events",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Save",
|
"DevDetail_button_Save": "Save",
|
||||||
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
||||||
"Device_MultiEdit": "Multi-edit",
|
"Device_MultiEdit": "Multi-edit",
|
||||||
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
|
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
|
||||||
"Device_MultiEdit_Fields": "Edit fields:",
|
"Device_MultiEdit_Fields": "Edit fields:",
|
||||||
"Device_MultiEdit_MassActions": "Mass actions:",
|
"Device_MultiEdit_MassActions": "Mass actions:",
|
||||||
"Device_MultiEdit_No_Devices": "No devices selected.",
|
"Device_MultiEdit_No_Devices": "No devices selected.",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "All",
|
"Device_Tablelenght_all": "All",
|
||||||
"Device_Title": "Devices",
|
"Device_Title": "Devices",
|
||||||
"Devices_Filters": "Filters",
|
"Devices_Filters": "Filters",
|
||||||
"ENABLE_PLUGINS_description": "Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
|
"ENABLE_PLUGINS_description": "Enables the <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
|
||||||
"ENABLE_PLUGINS_name": "Enable Plugins",
|
"ENABLE_PLUGINS_name": "Enable Plugins",
|
||||||
"ENCRYPTION_KEY_description": "Data encryption key.",
|
"ENCRYPTION_KEY_description": "Data encryption key.",
|
||||||
"ENCRYPTION_KEY_name": "Encryption key",
|
"ENCRYPTION_KEY_name": "Encryption key",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Warning",
|
"Gen_Warning": "Warning",
|
||||||
"Gen_Work_In_Progress": "Work in progress, good time to feedback on https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Work in progress, good time to feedback on https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "New device",
|
"Gen_create_new_device": "New device",
|
||||||
"Gen_create_new_device_info": "Devices are typically discovered using <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. However, in certain cases, you may need to add devices manually. To explore specific scenarios check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks documentation</a>.",
|
"Gen_create_new_device_info": "Devices are typically discovered using <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. However, in certain cases, you may need to add devices manually. To explore specific scenarios check the <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">Remote Networks documentation</a>.",
|
||||||
"General_display_name": "General",
|
"General_display_name": "General",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New devices</b> after <code>X</code> hours.",
|
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New devices</b> after <code>X</code> hours.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Delete new devices after",
|
"HRS_TO_KEEP_NEWDEV_name": "Delete new devices after",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices that are <b>Offline</b> and their <b>Last Connection</b> date time is older than the specified hours in this setting, will be deleted. Use this setting if you want to auto-delete <b>Offline devices</b> after <code>X</code> hours being offline.",
|
"HRS_TO_KEEP_OFFDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices that are <b>Offline</b> and their <b>Last Connection</b> date time is older than the specified hours in this setting, will be deleted. Use this setting if you want to auto-delete <b>Offline devices</b> after <code>X</code> hours being offline.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Delete offline devices after",
|
"HRS_TO_KEEP_OFFDEV_name": "Delete offline devices after",
|
||||||
"LOADED_PLUGINS_description": "Which Plugins to load. Adding plugins might slow the application. Read more about which plugins need to be enabled, types, or scanning options in the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins docs</a>. Unloaded plugins will lose your settings. Only <code>disabled</code> plugins can be unloaded.",
|
"LOADED_PLUGINS_description": "Which Plugins to load. Adding plugins might slow the application. Read more about which plugins need to be enabled, types, or scanning options in the <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins docs</a>. Unloaded plugins will lose your settings. Only <code>disabled</code> plugins can be unloaded.",
|
||||||
"LOADED_PLUGINS_name": "Loaded plugins",
|
"LOADED_PLUGINS_name": "Loaded plugins",
|
||||||
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
|
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
|
||||||
"LOG_LEVEL_name": "Print additional logging",
|
"LOG_LEVEL_name": "Print additional logging",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
||||||
"Maintenance_InitCheck": "Init check",
|
"Maintenance_InitCheck": "Init check",
|
||||||
"Maintenance_InitCheck_Checking": "Checking…",
|
"Maintenance_InitCheck_Checking": "Checking…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
||||||
"Maintenance_ReCheck": "Retry check",
|
"Maintenance_ReCheck": "Retry check",
|
||||||
"Maintenance_Running_Version": "Installed version",
|
"Maintenance_Running_Version": "Installed version",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Node name",
|
"Network_Node_Name": "Node name",
|
||||||
"Network_Parent": "Parent network device",
|
"Network_Parent": "Parent network device",
|
||||||
"Network_Root": "Root node",
|
"Network_Root": "Root node",
|
||||||
"Network_Root_Not_Configured": "Select a network device type, for example a <b>Gateway</b>, in the <b>Type</b> field of the <a href=\"deviceDetails.php?mac=Internet\">the Internet root device</a> to start configuring this screen. <br/><br/> More documentation can be found in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">How to setup your Network page</a> guide",
|
"Network_Root_Not_Configured": "Select a network device type, for example a <b>Gateway</b>, in the <b>Type</b> field of the <a href=\"deviceDetails.php?mac=Internet\">the Internet root device</a> to start configuring this screen. <br/><br/> More documentation can be found in the <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">How to setup your Network page</a> guide",
|
||||||
"Network_Root_Unconfigurable": "Unconfigurable root",
|
"Network_Root_Unconfigurable": "Unconfigurable root",
|
||||||
"Network_ShowArchived": "Show archived",
|
"Network_ShowArchived": "Show archived",
|
||||||
"Network_ShowOffline": "Show offline",
|
"Network_ShowOffline": "Show offline",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Report",
|
"REPORT_TITLE": "Report",
|
||||||
"RandomMAC_hover": "Autodetected - indicates if the device randomizes it's MAC address. You can exclude specific MACs with the UI_NOT_RANDOM_MAC setting. Click to find out more.",
|
"RandomMAC_hover": "Autodetected - indicates if the device randomizes it's MAC address. You can exclude specific MACs with the UI_NOT_RANDOM_MAC setting. Click to find out more.",
|
||||||
"Reports_Sent_Log": "Sent reports log",
|
"Reports_Sent_Log": "Sent reports log",
|
||||||
"SCAN_SUBNETS_description": "Most on-network scanners (ARP-SCAN, NMAP, NSLOOKUP, DIG) rely on scanning specific network interfaces and subnets. Check the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">subnets documentation</a> for help on this setting, especially VLANs, what VLANs are supported, or how to figure out the network mask and your interface. <br/> <br/> An alternative to on-network scanners is to enable some other device scanners/importers that don't rely on NetAlert<sup>X</sup> having access to the network (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Note: The scan time itself depends on the number of IP addresses to check, so set this up carefully with the appropriate network mask and interface.",
|
"SCAN_SUBNETS_description": "Most on-network scanners (ARP-SCAN, NMAP, NSLOOKUP, DIG) rely on scanning specific network interfaces and subnets. Check the <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">subnets documentation</a> for help on this setting, especially VLANs, what VLANs are supported, or how to figure out the network mask and your interface. <br/> <br/> An alternative to on-network scanners is to enable some other device scanners/importers that don't rely on NetAlert<sup>X</sup> having access to the network (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Note: The scan time itself depends on the number of IP addresses to check, so set this up carefully with the appropriate network mask and interface.",
|
||||||
"SCAN_SUBNETS_name": "Networks to scan",
|
"SCAN_SUBNETS_name": "Networks to scan",
|
||||||
"SYSTEM_TITLE": "System Information",
|
"SYSTEM_TITLE": "System Information",
|
||||||
"Setting_Override": "Override value",
|
"Setting_Override": "Override value",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Uptime:",
|
"Systeminfo_System_Uptime": "Uptime:",
|
||||||
"Systeminfo_This_Client": "This Client",
|
"Systeminfo_This_Client": "This Client",
|
||||||
"Systeminfo_USB_Devices": "USB devices",
|
"Systeminfo_USB_Devices": "USB devices",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Old mount locations detected. Follow <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">this guide</a> to migrate to the new <code>/data/config</code> and <code>/data/db</code> folders and the <code>netalertx</code> container.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Old mount locations detected. Follow <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">this guide</a> to migrate to the new <code>/data/config</code> and <code>/data/db</code> folders and the <code>netalertx</code> container.",
|
||||||
"TIMEZONE_description": "Time zone to display stats correctly. Find your time zone <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">here</a>.",
|
"TIMEZONE_description": "Time zone to display stats correctly. Find your time zone <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">here</a>.",
|
||||||
"TIMEZONE_name": "Time zone",
|
"TIMEZONE_name": "Time zone",
|
||||||
"UI_DEV_SECTIONS_description": "Select which UI elements to hide in the devices pages.",
|
"UI_DEV_SECTIONS_description": "Select which UI elements to hide in the devices pages.",
|
||||||
"UI_DEV_SECTIONS_name": "Hide devices sections",
|
"UI_DEV_SECTIONS_name": "Hide devices sections",
|
||||||
"UI_ICONS_description": "A list of pre-defined icons. Proceed with caution, the preferred way to add icons is described in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons documentation</a>. You can add a base64-encoded SVG HTML or Font-awesome HTML tag.",
|
"UI_ICONS_description": "A list of pre-defined icons. Proceed with caution, the preferred way to add icons is described in the <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Icons documentation</a>. You can add a base64-encoded SVG HTML or Font-awesome HTML tag.",
|
||||||
"UI_ICONS_name": "Pre-defined icons",
|
"UI_ICONS_name": "Pre-defined icons",
|
||||||
"UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "UI Language",
|
"UI_LANG_name": "UI Language",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
||||||
"settings_publishers_label": "Publishers",
|
"settings_publishers_label": "Publishers",
|
||||||
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">file permissions documentation</a>",
|
||||||
"settings_saved": "<br/>Settings saved. <br/> Reloading… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Settings saved. <br/> Reloading… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
|
|||||||
28
front/php/templates/language/es_es.json
Executable file → Normal file
28
front/php/templates/language/es_es.json
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Puede especificar una consulta SQL personalizada que generará un archivo JSON y luego lo expondrá a través del <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\">archivo <code>table_custom_endpoint.json</code ></a>.",
|
"API_CUSTOM_SQL_description": "Puede especificar una consulta SQL personalizada que generará un archivo JSON y luego lo expondrá a través del <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\">archivo <code>table_custom_endpoint.json</code ></a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint personalizado",
|
"API_CUSTOM_SQL_name": "Endpoint personalizado",
|
||||||
"API_TOKEN_description": "Token de API para comunicación segura. Genere uno o introduzca cualquier valor. Se envía en el encabezado de la solicitud y se usa en el complemento <code>SYNC</code>, el servidor GraphQL y otros puntos de conexión de la API. Puede usar los puntos de conexión de la API para crear integraciones personalizadas, como se describe en la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentación de la API</a>.",
|
"API_TOKEN_description": "Token de API para comunicación segura. Genere uno o introduzca cualquier valor. Se envía en el encabezado de la solicitud y se usa en el complemento <code>SYNC</code>, el servidor GraphQL y otros puntos de conexión de la API. Puede usar los puntos de conexión de la API para crear integraciones personalizadas, como se describe en la <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">documentación de la API</a>.",
|
||||||
"API_TOKEN_name": "Token de la API",
|
"API_TOKEN_name": "Token de la API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -187,7 +187,7 @@
|
|||||||
"DevDetail_Vendor_hover": "El proveedor debe ser detectado automáticamente. Puede sobrescribir o agregar su valor personalizado.",
|
"DevDetail_Vendor_hover": "El proveedor debe ser detectado automáticamente. Puede sobrescribir o agregar su valor personalizado.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Añadir un nuevo icono",
|
"DevDetail_button_AddIcon": "Añadir un nuevo icono",
|
||||||
"DevDetail_button_AddIcon_Help": "Pegue una etiqueta html SVG o un icono de etiqueta html Font Awesome. Lea los documentos <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Iconos</a> para obtener más información.",
|
"DevDetail_button_AddIcon_Help": "Pegue una etiqueta html SVG o un icono de etiqueta html Font Awesome. Lea los documentos <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Iconos</a> para obtener más información.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Añade un nuevo icono a este dispositivo que aún no está disponible en el menú desplegable.",
|
"DevDetail_button_AddIcon_Tooltip": "Añade un nuevo icono a este dispositivo que aún no está disponible en el menú desplegable.",
|
||||||
"DevDetail_button_Delete": "Eliminar dispositivo",
|
"DevDetail_button_Delete": "Eliminar dispositivo",
|
||||||
"DevDetail_button_DeleteEvents": "Eliminar eventos",
|
"DevDetail_button_DeleteEvents": "Eliminar eventos",
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
"DevDetail_button_Save": "Guardar",
|
"DevDetail_button_Save": "Guardar",
|
||||||
"DeviceEdit_ValidMacIp": "Introduzca una dirección <b>Mac</b> y una dirección <b>IP</b> válidas .",
|
"DeviceEdit_ValidMacIp": "Introduzca una dirección <b>Mac</b> y una dirección <b>IP</b> válidas .",
|
||||||
"Device_MultiEdit": "Edición múltiple",
|
"Device_MultiEdit": "Edición múltiple",
|
||||||
"Device_MultiEdit_Backup": "Tenga cuidado, ingresar valores incorrectos o romperá su configuración. Por favor, haga una copia de seguridad de su base de datos o de la configuración de los dispositivos primero (<a href=\"php/server/devices.php?action=ExportCSV\">haga clic para descargar <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Lea cómo recuperar dispositivos de este archivo en la documentación de <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Copia de seguridad</a>. Para aplicar sus cambios haga click en el ícono de <b>Guardar<i class=\"fa-solid fa-save\"></i></b> en cada campo que quiera actualizar.",
|
"Device_MultiEdit_Backup": "Tenga cuidado, ingresar valores incorrectos o romperá su configuración. Por favor, haga una copia de seguridad de su base de datos o de la configuración de los dispositivos primero (<a href=\"php/server/devices.php?action=ExportCSV\">haga clic para descargar <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Lea cómo recuperar dispositivos de este archivo en la documentación de <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">Copia de seguridad</a>. Para aplicar sus cambios haga click en el ícono de <b>Guardar<i class=\"fa-solid fa-save\"></i></b> en cada campo que quiera actualizar.",
|
||||||
"Device_MultiEdit_Fields": "Editar campos:",
|
"Device_MultiEdit_Fields": "Editar campos:",
|
||||||
"Device_MultiEdit_MassActions": "Acciones masivas:",
|
"Device_MultiEdit_MassActions": "Acciones masivas:",
|
||||||
"Device_MultiEdit_No_Devices": "",
|
"Device_MultiEdit_No_Devices": "",
|
||||||
@@ -255,7 +255,7 @@
|
|||||||
"Device_Tablelenght_all": "Todos",
|
"Device_Tablelenght_all": "Todos",
|
||||||
"Device_Title": "Dispositivos",
|
"Device_Title": "Dispositivos",
|
||||||
"Devices_Filters": "Filtros",
|
"Devices_Filters": "Filtros",
|
||||||
"ENABLE_PLUGINS_description": "Habilita la funcionalidad de los <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">complementos</a>. Cargar los complementos requiere más recursos de hardware, así que quizás quieras desactivarlo en hardware poco potente.",
|
"ENABLE_PLUGINS_description": "Habilita la funcionalidad de los <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">complementos</a>. Cargar los complementos requiere más recursos de hardware, así que quizás quieras desactivarlo en hardware poco potente.",
|
||||||
"ENABLE_PLUGINS_name": "Habilitar complementos",
|
"ENABLE_PLUGINS_name": "Habilitar complementos",
|
||||||
"ENCRYPTION_KEY_description": "Llave de cifrado de datos.",
|
"ENCRYPTION_KEY_description": "Llave de cifrado de datos.",
|
||||||
"ENCRYPTION_KEY_name": "Llave de cifrado",
|
"ENCRYPTION_KEY_name": "Llave de cifrado",
|
||||||
@@ -346,14 +346,14 @@
|
|||||||
"Gen_Warning": "Advertencia",
|
"Gen_Warning": "Advertencia",
|
||||||
"Gen_Work_In_Progress": "Trabajo en curso, un buen momento para hacer comentarios en https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Trabajo en curso, un buen momento para hacer comentarios en https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Nuevo dispositivo",
|
"Gen_create_new_device": "Nuevo dispositivo",
|
||||||
"Gen_create_new_device_info": "Los dispositivos se suelen descubrir utilizando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Sin embargo, en algunos casos, es posible que necesite agregar dispositivos manualmente. Para explorar escenarios específicos, consulte la documentación <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Redes remotas</a>.",
|
"Gen_create_new_device_info": "Los dispositivos se suelen descubrir utilizando <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. Sin embargo, en algunos casos, es posible que necesite agregar dispositivos manualmente. Para explorar escenarios específicos, consulte la documentación <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">Redes remotas</a>.",
|
||||||
"General_display_name": "General",
|
"General_display_name": "General",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Esta es una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>Primera Sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
|
"HRS_TO_KEEP_NEWDEV_description": "Esta es una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>Primera Sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nuevos dispositivos después",
|
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nuevos dispositivos después",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Esta es una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos que están <b>Sin Conexión</b> y su fecha de <b>Última Conexión</b> es anterior a las horas especificadas en este ajuste se eliminarán. Use este ajuste si desea eliminar automáticamente <b>los dispositivos sin conexión</b> después de que el <code>X</code> horas esté sin conexión.",
|
"HRS_TO_KEEP_OFFDEV_description": "Esta es una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos que están <b>Sin Conexión</b> y su fecha de <b>Última Conexión</b> es anterior a las horas especificadas en este ajuste se eliminarán. Use este ajuste si desea eliminar automáticamente <b>los dispositivos sin conexión</b> después de que el <code>X</code> horas esté sin conexión.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Borrar dispositivos sin conexión después de",
|
"HRS_TO_KEEP_OFFDEV_name": "Borrar dispositivos sin conexión después de",
|
||||||
"LOADED_PLUGINS_description": "¿Qué plugins cargar?. Agregar plugins puede ralentizar la aplicación. Obtén más información sobre los complementos que deben habilitarse, los tipos o las opciones de escaneo en los documentos de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Los plugins descargados perderán tu configuración. Solo se pueden descargar los complementos <code>deshabilitados</code>.",
|
"LOADED_PLUGINS_description": "¿Qué plugins cargar?. Agregar plugins puede ralentizar la aplicación. Obtén más información sobre los complementos que deben habilitarse, los tipos o las opciones de escaneo en los documentos de <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. Los plugins descargados perderán tu configuración. Solo se pueden descargar los complementos <code>deshabilitados</code>.",
|
||||||
"LOADED_PLUGINS_name": "Plugins cargados",
|
"LOADED_PLUGINS_name": "Plugins cargados",
|
||||||
"LOG_LEVEL_description": "Esto hará que el registro tenga más información. Util para depurar que eventos se van guardando en la base de datos.",
|
"LOG_LEVEL_description": "Esto hará que el registro tenga más información. Util para depurar que eventos se van guardando en la base de datos.",
|
||||||
"LOG_LEVEL_name": "Imprimir registros adicionales",
|
"LOG_LEVEL_name": "Imprimir registros adicionales",
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "¿Estás seguro de que desea reiniciar el servidor backend? Esto puede causar inconsistencia en la aplicación. Primero haga una copia de seguridad de su configuración.<br/> <br/> Nota: Esto puede tardar unos minutos.",
|
"Maint_Restart_Server_noti_text": "¿Estás seguro de que desea reiniciar el servidor backend? Esto puede causar inconsistencia en la aplicación. Primero haga una copia de seguridad de su configuración.<br/> <br/> Nota: Esto puede tardar unos minutos.",
|
||||||
"Maintenance_InitCheck": "Validación inicial",
|
"Maintenance_InitCheck": "Validación inicial",
|
||||||
"Maintenance_InitCheck_Checking": "Validando . . .",
|
"Maintenance_InitCheck_Checking": "Validando . . .",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Asegúrece de seguir la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guía de configuración rápida</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Asegúrece de seguir la <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">guía de configuración rápida</a>.",
|
||||||
"Maintenance_InitCheck_Success": "¡Aplicación inicializada con éxito!",
|
"Maintenance_InitCheck_Success": "¡Aplicación inicializada con éxito!",
|
||||||
"Maintenance_ReCheck": "Reintentar validación",
|
"Maintenance_ReCheck": "Reintentar validación",
|
||||||
"Maintenance_Running_Version": "Versión instalada",
|
"Maintenance_Running_Version": "Versión instalada",
|
||||||
@@ -563,7 +563,7 @@
|
|||||||
"Network_Node_Name": "Nombre de nodo",
|
"Network_Node_Name": "Nombre de nodo",
|
||||||
"Network_Parent": "Dispositivo primario de la red",
|
"Network_Parent": "Dispositivo primario de la red",
|
||||||
"Network_Root": "Nodo principal",
|
"Network_Root": "Nodo principal",
|
||||||
"Network_Root_Not_Configured": "Seleccione un tipo de dispositivo de red, por ejemplo un <b>Gateway</b>, en el campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo principal de Internet</a> para empezar a configurar esta pantalla. <br/><br/>Puede encontrar más documentación en la guía <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">¿Cómo configurar su página de Red?</a>",
|
"Network_Root_Not_Configured": "Seleccione un tipo de dispositivo de red, por ejemplo un <b>Gateway</b>, en el campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo principal de Internet</a> para empezar a configurar esta pantalla. <br/><br/>Puede encontrar más documentación en la guía <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">¿Cómo configurar su página de Red?</a>",
|
||||||
"Network_Root_Unconfigurable": "Root no configurable",
|
"Network_Root_Unconfigurable": "Root no configurable",
|
||||||
"Network_ShowArchived": "Mostrar archivado",
|
"Network_ShowArchived": "Mostrar archivado",
|
||||||
"Network_ShowOffline": "Mostrar fuera de línea",
|
"Network_ShowOffline": "Mostrar fuera de línea",
|
||||||
@@ -634,11 +634,11 @@
|
|||||||
"REPORT_TITLE": "Reporte",
|
"REPORT_TITLE": "Reporte",
|
||||||
"REPORT_TO_description": "Dirección de correo electrónico a la que se enviará la notificación.",
|
"REPORT_TO_description": "Dirección de correo electrónico a la que se enviará la notificación.",
|
||||||
"REPORT_TO_name": "Enviar el email a",
|
"REPORT_TO_name": "Enviar el email a",
|
||||||
"REPORT_WEBHOOK_description": "Habilite webhooks para notificaciones. Los webhooks lo ayudan a conectarse a muchas herramientas de terceros, como IFTTT, Zapier o <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a>, por nombrar algunas. Consulte esta sencilla <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md\" target=\"_blank\">guía de n8n aquí</a> para obtener comenzó. Si está habilitado, configure los ajustes relacionados a continuación.",
|
"REPORT_WEBHOOK_description": "Habilite webhooks para notificaciones. Los webhooks lo ayudan a conectarse a muchas herramientas de terceros, como IFTTT, Zapier o <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a>, por nombrar algunas. Consulte esta sencilla <a href=\"https://docs.netalertx.com/WEBHOOK_N8N\" target=\"_blank\">guía de n8n aquí</a> para obtener comenzó. Si está habilitado, configure los ajustes relacionados a continuación.",
|
||||||
"REPORT_WEBHOOK_name": "Habilitar webhooks",
|
"REPORT_WEBHOOK_name": "Habilitar webhooks",
|
||||||
"RandomMAC_hover": "Autodetectado: indica si el dispositivo aleatoriza su dirección MAC. Puede excluir direcciones MAC específicas con la configuración UI_NOT_RANDOM_MAC. Haga clic para obtener más información.",
|
"RandomMAC_hover": "Autodetectado: indica si el dispositivo aleatoriza su dirección MAC. Puede excluir direcciones MAC específicas con la configuración UI_NOT_RANDOM_MAC. Haga clic para obtener más información.",
|
||||||
"Reports_Sent_Log": "Registro de informes enviados",
|
"Reports_Sent_Log": "Registro de informes enviados",
|
||||||
"SCAN_SUBNETS_description": "La mayoría de los escáneres en red (ARP-SCAN, NMAP, NSLOOKUP, DIG) se basan en el escaneo de interfaces de red y subredes específicas. Consulte la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">documentación sobre subredes</a> para obtener ayuda sobre esta configuración, especialmente VLANs, qué VLANs son compatibles, o cómo averiguar la máscara de red y su interfaz. <br/> <br/>Una alternativa a los escáneres en red es habilitar algunos otros escáneres/importadores de dispositivos que no dependen de que NetAlert<sup>X</sup> tenga acceso a la red (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Nota: El tiempo de escaneo en sí depende del número de direcciones IP a comprobar, así que configure esto cuidadosamente con la máscara de red y la interfaz adecuadas.",
|
"SCAN_SUBNETS_description": "La mayoría de los escáneres en red (ARP-SCAN, NMAP, NSLOOKUP, DIG) se basan en el escaneo de interfaces de red y subredes específicas. Consulte la <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">documentación sobre subredes</a> para obtener ayuda sobre esta configuración, especialmente VLANs, qué VLANs son compatibles, o cómo averiguar la máscara de red y su interfaz. <br/> <br/>Una alternativa a los escáneres en red es habilitar algunos otros escáneres/importadores de dispositivos que no dependen de que NetAlert<sup>X</sup> tenga acceso a la red (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Nota: El tiempo de escaneo en sí depende del número de direcciones IP a comprobar, así que configure esto cuidadosamente con la máscara de red y la interfaz adecuadas.",
|
||||||
"SCAN_SUBNETS_name": "Subredes para escanear",
|
"SCAN_SUBNETS_name": "Subredes para escanear",
|
||||||
"SMTP_FORCE_SSL_description": "Forzar SSL al conectarse a su servidor SMTP",
|
"SMTP_FORCE_SSL_description": "Forzar SSL al conectarse a su servidor SMTP",
|
||||||
"SMTP_FORCE_SSL_name": "Forzar SSL",
|
"SMTP_FORCE_SSL_name": "Forzar SSL",
|
||||||
@@ -646,7 +646,7 @@
|
|||||||
"SMTP_PASS_name": "Contraseña de SMTP",
|
"SMTP_PASS_name": "Contraseña de SMTP",
|
||||||
"SMTP_PORT_description": "Número de puerto utilizado para la conexión SMTP. Establézcalo en <code>0</code> si no desea utilizar un puerto al conectarse al servidor SMTP.",
|
"SMTP_PORT_description": "Número de puerto utilizado para la conexión SMTP. Establézcalo en <code>0</code> si no desea utilizar un puerto al conectarse al servidor SMTP.",
|
||||||
"SMTP_PORT_name": "Puerto del servidor SMTP",
|
"SMTP_PORT_name": "Puerto del servidor SMTP",
|
||||||
"SMTP_SERVER_description": "La URL del host del servidor SMTP. Por ejemplo, <code>smtp-relay.sendinblue.com</code>. Para utilizar Gmail como servidor SMTP <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SMTP.md\">siga esta guía</a >",
|
"SMTP_SERVER_description": "La URL del host del servidor SMTP. Por ejemplo, <code>smtp-relay.sendinblue.com</code>. Para utilizar Gmail como servidor SMTP <a target=\"_blank\" href=\"https://docs.netalertx.com/SMTP\">siga esta guía</a >",
|
||||||
"SMTP_SERVER_name": "URL del servidor SMTP",
|
"SMTP_SERVER_name": "URL del servidor SMTP",
|
||||||
"SMTP_SKIP_LOGIN_description": "No utilice la autenticación cuando se conecte al servidor SMTP.",
|
"SMTP_SKIP_LOGIN_description": "No utilice la autenticación cuando se conecte al servidor SMTP.",
|
||||||
"SMTP_SKIP_LOGIN_name": "Omitir autenticación",
|
"SMTP_SKIP_LOGIN_name": "Omitir autenticación",
|
||||||
@@ -738,12 +738,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Tiempo de actividad:",
|
"Systeminfo_System_Uptime": "Tiempo de actividad:",
|
||||||
"Systeminfo_This_Client": "Este cliente",
|
"Systeminfo_This_Client": "Este cliente",
|
||||||
"Systeminfo_USB_Devices": "Dispositivos USB",
|
"Systeminfo_USB_Devices": "Dispositivos USB",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Ubicaciones de montaje antiguas detectadas. Siga <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">esta guía</a> para migrar a las nuevas carpetas <code>/data/config</code> y <code>/data/db</code> y el contenedor <code>netalertx</code>.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Ubicaciones de montaje antiguas detectadas. Siga <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">esta guía</a> para migrar a las nuevas carpetas <code>/data/config</code> y <code>/data/db</code> y el contenedor <code>netalertx</code>.",
|
||||||
"TIMEZONE_description": "La zona horaria para mostrar las estadísticas correctamente. Encuentra tu zona horaria <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">aquí</a>.",
|
"TIMEZONE_description": "La zona horaria para mostrar las estadísticas correctamente. Encuentra tu zona horaria <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">aquí</a>.",
|
||||||
"TIMEZONE_name": "Zona horaria",
|
"TIMEZONE_name": "Zona horaria",
|
||||||
"UI_DEV_SECTIONS_description": "Seleccione los elementos de la interfaz de usuario que desea ocultar en las páginas de dispositivos.",
|
"UI_DEV_SECTIONS_description": "Seleccione los elementos de la interfaz de usuario que desea ocultar en las páginas de dispositivos.",
|
||||||
"UI_DEV_SECTIONS_name": "Ocultar secciones de los dispositivos",
|
"UI_DEV_SECTIONS_name": "Ocultar secciones de los dispositivos",
|
||||||
"UI_ICONS_description": "Una lista de iconos predefinidos. Proceda con cautela, la forma preferida de añadir iconos se describe en la sección <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\" >Iconos documentación</a>. Puede añadir una etiqueta SVG HTML o Font-awesome HTML codificada con base64.",
|
"UI_ICONS_description": "Una lista de iconos predefinidos. Proceda con cautela, la forma preferida de añadir iconos se describe en la sección <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\" >Iconos documentación</a>. Puede añadir una etiqueta SVG HTML o Font-awesome HTML codificada con base64.",
|
||||||
"UI_ICONS_name": "Iconos predefinidos",
|
"UI_ICONS_name": "Iconos predefinidos",
|
||||||
"UI_LANG_description": "Seleccione el idioma preferido para la interfaz de usuario. Ayude a traducir o sugiera idiomas en el portal en línea de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Seleccione el idioma preferido para la interfaz de usuario. Ayude a traducir o sugiera idiomas en el portal en línea de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Idioma de interfaz",
|
"UI_LANG_name": "Idioma de interfaz",
|
||||||
@@ -830,7 +830,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Cargue más editor@s con el ajuste <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Cargue más editor@s con el ajuste <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Editores",
|
"settings_publishers_label": "Editores",
|
||||||
"settings_readonly": "No se puede LEER ni ESCRIBIR <code>app.conf</code>. Intente reiniciar el contenedor y lea la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentación de permisos de archivo</a>",
|
"settings_readonly": "No se puede LEER ni ESCRIBIR <code>app.conf</code>. Intente reiniciar el contenedor y lea la <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">documentación de permisos de archivo</a>",
|
||||||
"settings_saved": "<br/>Ajustes guardados. <br/> Recargando. . . <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Ajustes guardados. <br/> Recargando. . . <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Vous pouvez spécifier votre propre requête SQL qui retournera un fichier JSON et l'exposer via <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> le point de terminaison de fichier</a>.",
|
"API_CUSTOM_SQL_description": "Vous pouvez spécifier votre propre requête SQL qui retournera un fichier JSON et l'exposer via <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> le point de terminaison de fichier</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Point de terminaison personnalisé",
|
"API_CUSTOM_SQL_name": "Point de terminaison personnalisé",
|
||||||
"API_TOKEN_description": "Vous pouvez renseigner ou générer un jeton API pour sécuriser les échanges. Il est transmis dans le header de la requête, et utilisé dans le plugin <code>SYNC</code>, le serveur GraphQL et d'autres usages API. Vous pouvez utiliser les points de terminaison API pour créer des intégrations spécifiques, comme décrit dans la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentation de l'API</a>.",
|
"API_TOKEN_description": "Vous pouvez renseigner ou générer un jeton API pour sécuriser les échanges. Il est transmis dans le header de la requête, et utilisé dans le plugin <code>SYNC</code>, le serveur GraphQL et d'autres usages API. Vous pouvez utiliser les points de terminaison API pour créer des intégrations spécifiques, comme décrit dans la <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">documentation de l'API</a>.",
|
||||||
"API_TOKEN_name": "Jeton d'API",
|
"API_TOKEN_name": "Jeton d'API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -27,8 +27,8 @@
|
|||||||
"AppEvents_ObjectType": "Type d'objet",
|
"AppEvents_ObjectType": "Type d'objet",
|
||||||
"AppEvents_Plugin": "Plugin",
|
"AppEvents_Plugin": "Plugin",
|
||||||
"AppEvents_Type": "Type",
|
"AppEvents_Type": "Type",
|
||||||
"BACKEND_API_URL_description": "",
|
"BACKEND_API_URL_description": "Utilisé pour générer les URL de l'API back-end. Spécifiez si vous utiliser un reverse proxy pour mapper votre <code>GRAPHQL_PORT</code>. Renseigner l'URL complète, en commençant par <code>http://</code>, et en incluant le numéro de port (sans slash de fin <code>/</code>).",
|
||||||
"BACKEND_API_URL_name": "",
|
"BACKEND_API_URL_name": "URL de l'API backend",
|
||||||
"BackDevDetail_Actions_Ask_Run": "Voulez-vous exécuter cette action ?",
|
"BackDevDetail_Actions_Ask_Run": "Voulez-vous exécuter cette action ?",
|
||||||
"BackDevDetail_Actions_Not_Registered": "Action non enregistrée : ",
|
"BackDevDetail_Actions_Not_Registered": "Action non enregistrée : ",
|
||||||
"BackDevDetail_Actions_Title_Run": "Lancer l'action",
|
"BackDevDetail_Actions_Title_Run": "Lancer l'action",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Le fabricant est détecté automatiquement. Vous pouvez changer la valeur ou ajouter une valeur libre.",
|
"DevDetail_Vendor_hover": "Le fabricant est détecté automatiquement. Vous pouvez changer la valeur ou ajouter une valeur libre.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Ajouter une nouvelle icône",
|
"DevDetail_button_AddIcon": "Ajouter une nouvelle icône",
|
||||||
"DevDetail_button_AddIcon_Help": "Coller l'emplacement HTML d'un SVG, ou d'une icône Font Awesome. Plus d'informations dans la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Documentation des icônes</a>.",
|
"DevDetail_button_AddIcon_Help": "Coller l'emplacement HTML d'un SVG, ou d'une icône Font Awesome. Plus d'informations dans la <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Documentation des icônes</a>.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Ajouter une nouvelle icône, non encore disponible dans la liste déroulante, pour cet appareil.",
|
"DevDetail_button_AddIcon_Tooltip": "Ajouter une nouvelle icône, non encore disponible dans la liste déroulante, pour cet appareil.",
|
||||||
"DevDetail_button_Delete": "Supprimer l'appareil",
|
"DevDetail_button_Delete": "Supprimer l'appareil",
|
||||||
"DevDetail_button_DeleteEvents": "Supprimer les événements",
|
"DevDetail_button_DeleteEvents": "Supprimer les événements",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Enregistrer",
|
"DevDetail_button_Save": "Enregistrer",
|
||||||
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
|
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
|
||||||
"Device_MultiEdit": "Édition multiple",
|
"Device_MultiEdit": "Édition multiple",
|
||||||
"Device_MultiEdit_Backup": "Attention, renseigner des valeurs non cohérentes ci-dessous peut bloquer votre paramétrage. Veillez à faire une sauvegarde de votre base de données ou de la configuration de vos appareils en premier lieu (<a href=\"php/server/devices.php?action=ExportCSV\">clisuer ici pour la télécharger <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Renseignez-vous sur comment remettre les appareils depuis ce fichier via la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">documentation des sauvegardes</a>. Afin d'enregistrer les changements, cliquer sur l'icône <b>Sauvegarder<i class=\"fa-solid fa-save\"></i></b> sur chaque champ que vous voulez mettre à jour.",
|
"Device_MultiEdit_Backup": "Attention, renseigner des valeurs non cohérentes ci-dessous peut bloquer votre paramétrage. Veillez à faire une sauvegarde de votre base de données ou de la configuration de vos appareils en premier lieu (<a href=\"php/server/devices.php?action=ExportCSV\">clisuer ici pour la télécharger <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Renseignez-vous sur comment remettre les appareils depuis ce fichier via la <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">documentation des sauvegardes</a>. Afin d'enregistrer les changements, cliquer sur l'icône <b>Sauvegarder<i class=\"fa-solid fa-save\"></i></b> sur chaque champ que vous voulez mettre à jour.",
|
||||||
"Device_MultiEdit_Fields": "Champs modifiables :",
|
"Device_MultiEdit_Fields": "Champs modifiables :",
|
||||||
"Device_MultiEdit_MassActions": "Actions en masse :",
|
"Device_MultiEdit_MassActions": "Actions en masse :",
|
||||||
"Device_MultiEdit_No_Devices": "Aucun appareil sélectionné.",
|
"Device_MultiEdit_No_Devices": "Aucun appareil sélectionné.",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Tous",
|
"Device_Tablelenght_all": "Tous",
|
||||||
"Device_Title": "Appareils",
|
"Device_Title": "Appareils",
|
||||||
"Devices_Filters": "Filtres",
|
"Devices_Filters": "Filtres",
|
||||||
"ENABLE_PLUGINS_description": "Active les fonctionnalités des <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">Plugins</a>. Charger des plugins nécessite plus de ressources, il est recommandé de les désactiver sur des systèmes de faible puissance.",
|
"ENABLE_PLUGINS_description": "Active les fonctionnalités des <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">Plugins</a>. Charger des plugins nécessite plus de ressources, il est recommandé de les désactiver sur des systèmes de faible puissance.",
|
||||||
"ENABLE_PLUGINS_name": "Activer les Plugins",
|
"ENABLE_PLUGINS_name": "Activer les Plugins",
|
||||||
"ENCRYPTION_KEY_description": "Clé de chiffrement des données.",
|
"ENCRYPTION_KEY_description": "Clé de chiffrement des données.",
|
||||||
"ENCRYPTION_KEY_name": "Clé de chiffrement",
|
"ENCRYPTION_KEY_name": "Clé de chiffrement",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Avertissement",
|
"Gen_Warning": "Avertissement",
|
||||||
"Gen_Work_In_Progress": "Travaux en cours, c'est le bon moment pour faire un retour via la liste d'anomalies sur Github https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Travaux en cours, c'est le bon moment pour faire un retour via la liste d'anomalies sur Github https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Nouvel appareil",
|
"Gen_create_new_device": "Nouvel appareil",
|
||||||
"Gen_create_new_device_info": "Les appareils sont souvent découverts à l'aide d'un <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Cependant, dans certains cas, vous pouvez ajouter manuellement les appareils. Pour explorer des scénarios spécifiques, consulter la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentation des réseaux distants</a>.",
|
"Gen_create_new_device_info": "Les appareils sont souvent découverts à l'aide d'un <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugin</a>. Cependant, dans certains cas, vous pouvez ajouter manuellement les appareils. Pour explorer des scénarios spécifiques, consulter la <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">documentation des réseaux distants</a>.",
|
||||||
"General_display_name": "Général",
|
"General_display_name": "Général",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Paramètre de maintenance. S'il est activé (<code>0</code> s'il est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront supprimés si leur durée depuis la <b>première session</b> est plus ancienne que le nombre d'heures paramétré. Utilisez ce paramétrage si vous voulez supprimer automatiquement les <b>Nouveaux appareils</b> après <code>X</code> heures.",
|
"HRS_TO_KEEP_NEWDEV_description": "Paramètre de maintenance. S'il est activé (<code>0</code> s'il est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront supprimés si leur durée depuis la <b>première session</b> est plus ancienne que le nombre d'heures paramétré. Utilisez ce paramétrage si vous voulez supprimer automatiquement les <b>Nouveaux appareils</b> après <code>X</code> heures.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Supprimer les nouveaux appareils après",
|
"HRS_TO_KEEP_NEWDEV_name": "Supprimer les nouveaux appareils après",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Il s'agit d'un paramètre de maintenance <b>SUPPRIMER des appareils</b>. Si cette option est activée (<code>0</code> est désactivé), les appareils qui sont <b>Hors ligne</b> et dont la <b>dernière connexion</b> est plus ancienne que les heures spécifiées dans ce paramètre. Utilisez ce paramètre si vous souhaitez supprimer automatiquement <b>Appareils hors ligne</b> après <code>X</code> heures de déconnexion.",
|
"HRS_TO_KEEP_OFFDEV_description": "Il s'agit d'un paramètre de maintenance <b>SUPPRIMER des appareils</b>. Si cette option est activée (<code>0</code> est désactivé), les appareils qui sont <b>Hors ligne</b> et dont la <b>dernière connexion</b> est plus ancienne que les heures spécifiées dans ce paramètre. Utilisez ce paramètre si vous souhaitez supprimer automatiquement <b>Appareils hors ligne</b> après <code>X</code> heures de déconnexion.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Supprimez les appareils hors ligne après",
|
"HRS_TO_KEEP_OFFDEV_name": "Supprimez les appareils hors ligne après",
|
||||||
"LOADED_PLUGINS_description": "Affiche les plugins chargés. Ajouter des plugins peut ralentir l'application. Obtenez plus d'informations dur quels plugins dont à activer, ou les options de scan dans la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentation des plugins</a>. Décharger des plugins leur fait perdre leurs paramètres. Seuls les plugins <code>désactivés</code> peuvent être déchargés.",
|
"LOADED_PLUGINS_description": "Affiche les plugins chargés. Ajouter des plugins peut ralentir l'application. Obtenez plus d'informations dur quels plugins dont à activer, ou les options de scan dans la <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">documentation des plugins</a>. Décharger des plugins leur fait perdre leurs paramètres. Seuls les plugins <code>désactivés</code> peuvent être déchargés.",
|
||||||
"LOADED_PLUGINS_name": "Plugins chargés",
|
"LOADED_PLUGINS_name": "Plugins chargés",
|
||||||
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
|
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
|
||||||
"LOG_LEVEL_name": "Afficher des journaux de log additionnels",
|
"LOG_LEVEL_name": "Afficher des journaux de log additionnels",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end ? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque : cela peut prendre quelques minutes.",
|
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end ? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque : cela peut prendre quelques minutes.",
|
||||||
"Maintenance_InitCheck": "Vérification initiale",
|
"Maintenance_InitCheck": "Vérification initiale",
|
||||||
"Maintenance_InitCheck_Checking": "Vérification…",
|
"Maintenance_InitCheck_Checking": "Vérification…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Application initialisée avec succès !",
|
"Maintenance_InitCheck_Success": "Application initialisée avec succès !",
|
||||||
"Maintenance_ReCheck": "Relancer la vérification",
|
"Maintenance_ReCheck": "Relancer la vérification",
|
||||||
"Maintenance_Running_Version": "Version installée",
|
"Maintenance_Running_Version": "Version installée",
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
"Maintenance_Tool_ExportCSV": "Export des appareils (csv)",
|
"Maintenance_Tool_ExportCSV": "Export des appareils (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "Export des appareils (csv)",
|
"Maintenance_Tool_ExportCSV_noti": "Export des appareils (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Êtes-vous sûr de vouloir générer un fichier CSV ?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Êtes-vous sûr de vouloir générer un fichier CSV ?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Génère un fichier CSV (valeurs séparées par des virgules), contenant la liste des appareils, dont les liens entre nœuds Réseaux et les appareils connectés. Vous pouvez aussi lancer cet export depuis l'URL <code>votre_URL_de_NetAlertX/php/server/devices.php?action=ExportCSV</code> ou en activant le plugin <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a>.",
|
"Maintenance_Tool_ExportCSV_text": "Génère un fichier CSV (valeurs séparées par des virgules), contenant la liste des appareils, dont les liens entre nœuds Réseaux et les appareils connectés. Vous pouvez aussi lancer cet export en activant le plugin <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a>.",
|
||||||
"Maintenance_Tool_ImportCSV": "Import des appareils (csv)",
|
"Maintenance_Tool_ImportCSV": "Import des appareils (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "Import des appareils (csv)",
|
"Maintenance_Tool_ImportCSV_noti": "Import des appareils (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "Êtes-vous sûr de vouloir importer le fichier CSV ? Cela <b>écrasera</b> complètement les appareils de votre base de données.",
|
"Maintenance_Tool_ImportCSV_noti_text": "Êtes-vous sûr de vouloir importer le fichier CSV ? Cela <b>écrasera</b> complètement les appareils de votre base de données.",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Nom du nœud",
|
"Network_Node_Name": "Nom du nœud",
|
||||||
"Network_Parent": "Appareil du réseau principal",
|
"Network_Parent": "Appareil du réseau principal",
|
||||||
"Network_Root": "Noeud racine",
|
"Network_Root": "Noeud racine",
|
||||||
"Network_Root_Not_Configured": "Pour commencer la configuration de cet écran, sélectionner un type d'appareil réseau, par exemple une <b>Gateway</b>, dans le champ <b>Type</b> de <a href=\"deviceDetails.php?mac=Internet\">l'appareil racine pour Internet</a> <br/><br/> Plus d'informations dans le guide <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Comment configurer votre page Réseau</a>",
|
"Network_Root_Not_Configured": "Pour commencer la configuration de cet écran, sélectionner un type d'appareil réseau, par exemple une <b>Gateway</b>, dans le champ <b>Type</b> de <a href=\"deviceDetails.php?mac=Internet\">l'appareil racine pour Internet</a> <br/><br/> Plus d'informations dans le guide <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">Comment configurer votre page Réseau</a>",
|
||||||
"Network_Root_Unconfigurable": "Racine non configurable",
|
"Network_Root_Unconfigurable": "Racine non configurable",
|
||||||
"Network_ShowArchived": "Montrer les archivés",
|
"Network_ShowArchived": "Montrer les archivés",
|
||||||
"Network_ShowOffline": "Montrer les hors ligne",
|
"Network_ShowOffline": "Montrer les hors ligne",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Rapport",
|
"REPORT_TITLE": "Rapport",
|
||||||
"RandomMAC_hover": "Détecté automatiquement - indique si l'appareil dispose d'une adresse MAC générée aléatoirement. Vous pouvez exclure des adresses MAC spécifiques via le paramètre UI_NOT_RANDOM_MAC. Cliquez pour plus d'informations.",
|
"RandomMAC_hover": "Détecté automatiquement - indique si l'appareil dispose d'une adresse MAC générée aléatoirement. Vous pouvez exclure des adresses MAC spécifiques via le paramètre UI_NOT_RANDOM_MAC. Cliquez pour plus d'informations.",
|
||||||
"Reports_Sent_Log": "Rapports de log transmis",
|
"Reports_Sent_Log": "Rapports de log transmis",
|
||||||
"SCAN_SUBNETS_description": "La plupart des scanners sur le réseau (scan ARP, NMAP, Nslookup, DIG) se base sur le scan d'une partie spécifique des interfaces réseau ou de sous-réseau. Consulter la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">documentation des sous-réseaux</a> pour plus d'aide sur ce paramètre, notamment pour des VLAN, lesquels sont supportés ou sur comment identifier le masque réseau et votre interface réseau. <br/> <br/> Une alternative à ces scanner sur le réseau et d'activer d'autres scanners d'appareils ou des importe, qui ne dépendent pas du fait de laisser NetAlert<sup>X</sup> accéder au réseau (Unifié, baux DHCP, Pi-hole, etc.).<br/><br/> Remarque : la durée du scan en lui-même dépend du nombre d'adresses IP à scanner, renseignez donc soigneusement avec le bon masque réseau et la bonne interface réseau.",
|
"SCAN_SUBNETS_description": "La plupart des scanners sur le réseau (scan ARP, NMAP, Nslookup, DIG) se base sur le scan d'une partie spécifique des interfaces réseau ou de sous-réseau. Consulter la <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">documentation des sous-réseaux</a> pour plus d'aide sur ce paramètre, notamment pour des VLAN, lesquels sont supportés ou sur comment identifier le masque réseau et votre interface réseau. <br/> <br/> Une alternative à ces scanner sur le réseau et d'activer d'autres scanners d'appareils ou des importe, qui ne dépendent pas du fait de laisser NetAlert<sup>X</sup> accéder au réseau (Unifié, baux DHCP, Pi-hole, etc.).<br/><br/> Remarque : la durée du scan en lui-même dépend du nombre d'adresses IP à scanner, renseignez donc soigneusement avec le bon masque réseau et la bonne interface réseau.",
|
||||||
"SCAN_SUBNETS_name": "Réseaux à scanner",
|
"SCAN_SUBNETS_name": "Réseaux à scanner",
|
||||||
"SYSTEM_TITLE": "Informations système",
|
"SYSTEM_TITLE": "Informations système",
|
||||||
"Setting_Override": "Remplacer la valeur",
|
"Setting_Override": "Remplacer la valeur",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Durée d'activité :",
|
"Systeminfo_System_Uptime": "Durée d'activité :",
|
||||||
"Systeminfo_This_Client": "Ce client",
|
"Systeminfo_This_Client": "Ce client",
|
||||||
"Systeminfo_USB_Devices": "Appareils USB",
|
"Systeminfo_USB_Devices": "Appareils USB",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Emplacement de point de montage obsolète détecté. Suivez <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">ce guide</a> pour migrer vers les nouveaux dossiers <code>/data/config</code> and <code>/data/db</code> et le container <code>netalertx</code>.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Emplacement de point de montage obsolète détecté. Suivez <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">ce guide</a> pour migrer vers les nouveaux dossiers <code>/data/config</code> and <code>/data/db</code> et le container <code>netalertx</code>.",
|
||||||
"TIMEZONE_description": "Fuseau horaire pour afficher correctement les statistiques. Trouvez votre fuseau horaire <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">ici</a>.",
|
"TIMEZONE_description": "Fuseau horaire pour afficher correctement les statistiques. Trouvez votre fuseau horaire <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">ici</a>.",
|
||||||
"TIMEZONE_name": "Fuseau horaire",
|
"TIMEZONE_name": "Fuseau horaire",
|
||||||
"UI_DEV_SECTIONS_description": "Slecetionnez quels éléments de l'interface graphique masquer dans les pages des appareils.",
|
"UI_DEV_SECTIONS_description": "Slecetionnez quels éléments de l'interface graphique masquer dans les pages des appareils.",
|
||||||
"UI_DEV_SECTIONS_name": "Masquer des sections pour les appareils",
|
"UI_DEV_SECTIONS_name": "Masquer des sections pour les appareils",
|
||||||
"UI_ICONS_description": "Une liste d'icônes prédéfinies. Attention, la manière recommandée d'ajouter des icônes est décrite dans la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">documentation des icônes</a>. Vous pouvez ajouter un lien HTML encodé en base 64 vers un SVG ou une étiquette d'icône Font Awesome.",
|
"UI_ICONS_description": "Une liste d'icônes prédéfinies. Attention, la manière recommandée d'ajouter des icônes est décrite dans la <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">documentation des icônes</a>. Vous pouvez ajouter un lien HTML encodé en base 64 vers un SVG ou une étiquette d'icône Font Awesome.",
|
||||||
"UI_ICONS_name": "Icones prédéfinies",
|
"UI_ICONS_name": "Icones prédéfinies",
|
||||||
"UI_LANG_description": "Sélectionnez votre langue préféré de l’interface. Aidez à traduire ou suggérez des langues dans le portail en ligne de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Sélectionnez votre langue préféré de l’interface. Aidez à traduire ou suggérez des langues dans le portail en ligne de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Langue de l'interface graphique",
|
"UI_LANG_name": "Langue de l'interface graphique",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Charger plus de passerelles de publication avec le paramètre <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Charger plus de passerelles de publication avec le paramètre <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Passerelles de publication",
|
"settings_publishers_label": "Passerelles de publication",
|
||||||
"settings_readonly": "Impossible de LIRE ou ÉCRIRE <code>app.conf</code>. Essayer de relancer le container et lire la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentation sur les droits des fichiers</a>",
|
"settings_readonly": "Impossible de LIRE ou ÉCRIRE <code>app.conf</code>. Essayer de relancer le container et lire la <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">documentation sur les droits des fichiers</a>",
|
||||||
"settings_saved": "<br/>Paramètres enregistrés. <br/> Rechargement... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Paramètres enregistrés. <br/> Rechargement... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Système",
|
"settings_system_label": "Système",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Puoi specificare una query SQL personalizzata che genererà un file JSON e quindi lo esporrà tramite l'<a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>endpoint del file</a>.",
|
"API_CUSTOM_SQL_description": "Puoi specificare una query SQL personalizzata che genererà un file JSON e quindi lo esporrà tramite l'<a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>endpoint del file</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint personalizzato",
|
"API_CUSTOM_SQL_name": "Endpoint personalizzato",
|
||||||
"API_TOKEN_description": "Token API per comunicazioni sicure. Generane uno o inserisci un valore qualsiasi. Viene inviato nell'intestazione della richiesta e utilizzato nel plugin <code>SYNC</code>, nel server GraphQL e in altri endpoint API. Puoi utilizzare gli endpoint API per creare integrazioni personalizzate come descritto nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentazione API</a>.",
|
"API_TOKEN_description": "Token API per comunicazioni sicure. Generane uno o inserisci un valore qualsiasi. Viene inviato nell'intestazione della richiesta e utilizzato nel plugin <code>SYNC</code>, nel server GraphQL e in altri endpoint API. Puoi utilizzare gli endpoint API per creare integrazioni personalizzate come descritto nella <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">documentazione API</a>.",
|
||||||
"API_TOKEN_name": "Token API",
|
"API_TOKEN_name": "Token API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -27,8 +27,8 @@
|
|||||||
"AppEvents_ObjectType": "Tipo oggetto",
|
"AppEvents_ObjectType": "Tipo oggetto",
|
||||||
"AppEvents_Plugin": "Plugin",
|
"AppEvents_Plugin": "Plugin",
|
||||||
"AppEvents_Type": "Tipo",
|
"AppEvents_Type": "Tipo",
|
||||||
"BACKEND_API_URL_description": "",
|
"BACKEND_API_URL_description": "Utilizzato per generare URL API backend. Specifica se utilizzi un proxy inverso per il mapping al tuo <code>GRAPHQL_PORT</code>. Inserisci l'URL completo che inizia con <code>http://</code> incluso il numero di porta (senza barra finale <code>/</code>).",
|
||||||
"BACKEND_API_URL_name": "",
|
"BACKEND_API_URL_name": "URL API backend",
|
||||||
"BackDevDetail_Actions_Ask_Run": "Vuoi eseguire questa azione?",
|
"BackDevDetail_Actions_Ask_Run": "Vuoi eseguire questa azione?",
|
||||||
"BackDevDetail_Actions_Not_Registered": "Azione non registrata: ",
|
"BackDevDetail_Actions_Not_Registered": "Azione non registrata: ",
|
||||||
"BackDevDetail_Actions_Title_Run": "Esegui azione",
|
"BackDevDetail_Actions_Title_Run": "Esegui azione",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
|
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Aggiungi nuova icona",
|
"DevDetail_button_AddIcon": "Aggiungi nuova icona",
|
||||||
"DevDetail_button_AddIcon_Help": "Incolla un tag html SVG o l'icona del tag html Font Awesome. Leggi i <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Documenti sulle icone</a> per i dettagli.",
|
"DevDetail_button_AddIcon_Help": "Incolla un tag html SVG o l'icona del tag html Font Awesome. Leggi i <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Documenti sulle icone</a> per i dettagli.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Aggiungi una nuova icona a questo dispositivo che non è ancora disponibile nel menu a discesa.",
|
"DevDetail_button_AddIcon_Tooltip": "Aggiungi una nuova icona a questo dispositivo che non è ancora disponibile nel menu a discesa.",
|
||||||
"DevDetail_button_Delete": "Elimina dispositivo",
|
"DevDetail_button_Delete": "Elimina dispositivo",
|
||||||
"DevDetail_button_DeleteEvents": "Elimina eventi",
|
"DevDetail_button_DeleteEvents": "Elimina eventi",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Salva",
|
"DevDetail_button_Save": "Salva",
|
||||||
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
|
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
|
||||||
"Device_MultiEdit": "Modifica multipla",
|
"Device_MultiEdit": "Modifica multipla",
|
||||||
"Device_MultiEdit_Backup": "Attento, l'inserimento di valori errati di seguito interromperà la configurazione. Effettua prima il backup del database o della configurazione dei dispositivi (<a href=\"php/server/devices.php?action=ExportCSV\">fai clic per scaricare <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leggi come ripristinare i dispositivi da questo file nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Documentazione di backup</a>. Per applicare le modifiche, fai clic sull'icona <b>Salva<i class=\"fa-solid fa-save\"></i></b> su ogni campo che desideri aggiornare.",
|
"Device_MultiEdit_Backup": "Attento, l'inserimento di valori errati di seguito interromperà la configurazione. Effettua prima il backup del database o della configurazione dei dispositivi (<a href=\"php/server/devices.php?action=ExportCSV\">fai clic per scaricare <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leggi come ripristinare i dispositivi da questo file nella <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\" _blank\">Documentazione di backup</a>. Per applicare le modifiche, fai clic sull'icona <b>Salva<i class=\"fa-solid fa-save\"></i></b> su ogni campo che desideri aggiornare.",
|
||||||
"Device_MultiEdit_Fields": "Modifica campi:",
|
"Device_MultiEdit_Fields": "Modifica campi:",
|
||||||
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
||||||
"Device_MultiEdit_No_Devices": "Nessun dispositivo selezionato.",
|
"Device_MultiEdit_No_Devices": "Nessun dispositivo selezionato.",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Tutti",
|
"Device_Tablelenght_all": "Tutti",
|
||||||
"Device_Title": "Dispositivi",
|
"Device_Title": "Dispositivi",
|
||||||
"Devices_Filters": "Filtri",
|
"Devices_Filters": "Filtri",
|
||||||
"ENABLE_PLUGINS_description": "Abilita la funzionalità <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Utilizzare i plugin richiede più risorse hardware, potresti voler disabilitare questa opzione sui dispositivi meno performanti.",
|
"ENABLE_PLUGINS_description": "Abilita la funzionalità <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugin</a>. Utilizzare i plugin richiede più risorse hardware, potresti voler disabilitare questa opzione sui dispositivi meno performanti.",
|
||||||
"ENABLE_PLUGINS_name": "Abilita plugin",
|
"ENABLE_PLUGINS_name": "Abilita plugin",
|
||||||
"ENCRYPTION_KEY_description": "Chiave di crittografia dei dati.",
|
"ENCRYPTION_KEY_description": "Chiave di crittografia dei dati.",
|
||||||
"ENCRYPTION_KEY_name": "Chiave di crittografia",
|
"ENCRYPTION_KEY_name": "Chiave di crittografia",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Avviso",
|
"Gen_Warning": "Avviso",
|
||||||
"Gen_Work_In_Progress": "Lavori in corso, è quindi un buon momento per un feedback su https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Lavori in corso, è quindi un buon momento per un feedback su https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Nuovo dispositivo",
|
"Gen_create_new_device": "Nuovo dispositivo",
|
||||||
"Gen_create_new_device_info": "I dispositivi vengono generalmente rilevati utilizzando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Tuttavia, in alcuni casi, potrebbe essere necessario aggiungere manualmente i dispositivi. Per esplorare scenari specifici, consulta la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentazione sulle reti remote</a>.",
|
"Gen_create_new_device_info": "I dispositivi vengono generalmente rilevati utilizzando <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugin</a>. Tuttavia, in alcuni casi, potrebbe essere necessario aggiungere manualmente i dispositivi. Per esplorare scenari specifici, consulta la <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">documentazione sulle reti remote</a>.",
|
||||||
"General_display_name": "Generale",
|
"General_display_name": "Generale",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione che <b>ELIMINA dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi contrassegnati come <b>Nuovo dispositivo</b> verranno eliminati se la loro <b>Prima sessione</b> è antecedente alle ore specificate in questa impostazione. Utilizza questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
|
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione che <b>ELIMINA dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi contrassegnati come <b>Nuovo dispositivo</b> verranno eliminati se la loro <b>Prima sessione</b> è antecedente alle ore specificate in questa impostazione. Utilizza questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Elimina nuovi dispositivi dopo",
|
"HRS_TO_KEEP_NEWDEV_name": "Elimina nuovi dispositivi dopo",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Questa è un'impostazione di manutenzione che <b>ELIMINA dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi <b>Offline</b> la cui data e ora di <b>Ultima connessione</b> sono antecedenti alle ore specificate in questa impostazione, verranno eliminati. Utilizza questa impostazione se vuoi eliminare automaticamente i <b>Dispositivi offline</b> dopo <code>X</code> ore trascorse offline.",
|
"HRS_TO_KEEP_OFFDEV_description": "Questa è un'impostazione di manutenzione che <b>ELIMINA dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi <b>Offline</b> la cui data e ora di <b>Ultima connessione</b> sono antecedenti alle ore specificate in questa impostazione, verranno eliminati. Utilizza questa impostazione se vuoi eliminare automaticamente i <b>Dispositivi offline</b> dopo <code>X</code> ore trascorse offline.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Elimina dispositivi offline dopo",
|
"HRS_TO_KEEP_OFFDEV_name": "Elimina dispositivi offline dopo",
|
||||||
"LOADED_PLUGINS_description": "Quali Plugin caricare. L'aggiunta di plugin potrebbe rallentare l'applicazione. Leggi di più su quali plugin necessitano di essere abilitati, tipi e opzioni di scansione nella <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentazione plugin</a>. I plugin disinstallati perdono la loro configurazione. Solo i plugin <code>disabilitati</code> possono essere disinstallati.",
|
"LOADED_PLUGINS_description": "Quali Plugin caricare. L'aggiunta di plugin potrebbe rallentare l'applicazione. Leggi di più su quali plugin necessitano di essere abilitati, tipi e opzioni di scansione nella <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">documentazione plugin</a>. I plugin disinstallati perdono la loro configurazione. Solo i plugin <code>disabilitati</code> possono essere disinstallati.",
|
||||||
"LOADED_PLUGINS_name": "Plugin caricati",
|
"LOADED_PLUGINS_name": "Plugin caricati",
|
||||||
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
|
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
|
||||||
"LOG_LEVEL_name": "Stampa log aggiuntivo",
|
"LOG_LEVEL_name": "Stampa log aggiuntivo",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
|
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
|
||||||
"Maintenance_InitCheck": "Controllo iniziale",
|
"Maintenance_InitCheck": "Controllo iniziale",
|
||||||
"Maintenance_InitCheck_Checking": "Controllo in corso…",
|
"Maintenance_InitCheck_Checking": "Controllo in corso…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!",
|
"Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!",
|
||||||
"Maintenance_ReCheck": "Riprova controllo",
|
"Maintenance_ReCheck": "Riprova controllo",
|
||||||
"Maintenance_Running_Version": "Versione installata",
|
"Maintenance_Running_Version": "Versione installata",
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
"Maintenance_Tool_ExportCSV": "Esportazione dispositivi (csv)",
|
"Maintenance_Tool_ExportCSV": "Esportazione dispositivi (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "Esportazione dispositivi (csv)",
|
"Maintenance_Tool_ExportCSV_noti": "Esportazione dispositivi (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Sei sicuro di voler generare un file CSV?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Sei sicuro di voler generare un file CSV?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione accedendo all'URL <code>il_tuo_NetAlertX/php/server/devices.php?action=ExportCSV</code> o abilitando il plugin <a href=\"settings.php#CSVBCKP_header\">Backup CSV</a>.",
|
"Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione abilitando il plugin <a href=\"settings.php#CSVBCKP_header\">Backup CSV</a>.",
|
||||||
"Maintenance_Tool_ImportCSV": "Importa dispositivi (csv)",
|
"Maintenance_Tool_ImportCSV": "Importa dispositivi (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "Importa dispositivi (csv)",
|
"Maintenance_Tool_ImportCSV_noti": "Importa dispositivi (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "Sei sicuro di voler importare il file CSV? Questa operazione <b>sovrascriverà</b> tutti i dispositivi presenti nel database.",
|
"Maintenance_Tool_ImportCSV_noti_text": "Sei sicuro di voler importare il file CSV? Questa operazione <b>sovrascriverà</b> tutti i dispositivi presenti nel database.",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Nome nodo",
|
"Network_Node_Name": "Nome nodo",
|
||||||
"Network_Parent": "Dispositivo di rete principale",
|
"Network_Parent": "Dispositivo di rete principale",
|
||||||
"Network_Root": "Nodo radice",
|
"Network_Root": "Nodo radice",
|
||||||
"Network_Root_Not_Configured": "Seleziona un tipo di dispositivo di rete, ad esempio un <b>Gateway</b>, nel campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo root Internet</a> per iniziare a configurare questa schermata. <br/><br/> Ulteriore documentazione è disponibile nella guida <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\"> Come impostare la tua pagina di rete</a>",
|
"Network_Root_Not_Configured": "Seleziona un tipo di dispositivo di rete, ad esempio un <b>Gateway</b>, nel campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo root Internet</a> per iniziare a configurare questa schermata. <br/><br/> Ulteriore documentazione è disponibile nella guida <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\"> Come impostare la tua pagina di rete</a>",
|
||||||
"Network_Root_Unconfigurable": "Radice non configurabile",
|
"Network_Root_Unconfigurable": "Radice non configurabile",
|
||||||
"Network_ShowArchived": "Mostra archiviati",
|
"Network_ShowArchived": "Mostra archiviati",
|
||||||
"Network_ShowOffline": "Mostra offline",
|
"Network_ShowOffline": "Mostra offline",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Rapporto",
|
"REPORT_TITLE": "Rapporto",
|
||||||
"RandomMAC_hover": "Rilevato automaticamente: indica se il dispositivo genera casualmente il suo indirizzo MAC. Puoi escludere MAC specifici con l'impostazione UI_NOT_RANDOM_MAC. Fai clic per saperne di più.",
|
"RandomMAC_hover": "Rilevato automaticamente: indica se il dispositivo genera casualmente il suo indirizzo MAC. Puoi escludere MAC specifici con l'impostazione UI_NOT_RANDOM_MAC. Fai clic per saperne di più.",
|
||||||
"Reports_Sent_Log": "Log rapporti inviati",
|
"Reports_Sent_Log": "Log rapporti inviati",
|
||||||
"SCAN_SUBNETS_description": "La maggior parte degli scanner di rete (ARP-SCAN, NMAP, NSLOOKUP, DIG) si basano sulla scansione di interfacce di rete e sottoreti specifiche. Consulta la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">documentazione sulle sottoreti</a> per assistenza su questa impostazione, in particolare VLAN, quali VLAN sono supportate o come individuare la maschera di rete e l'interfaccia. <br/> <br/> Un'alternativa agli scanner in rete è abilitare altri scanner/importatori di dispositivi che non si affidano a NetAlert<sup>X</sup> che hanno accesso alla rete (UNIFI, dhcp.leases , PiHole, ecc.). <br/> <br/> Nota: il tempo di scansione stesso dipende dal numero di indirizzi IP da controllare, quindi impostalo attentamente con la maschera di rete e l'interfaccia appropriate.",
|
"SCAN_SUBNETS_description": "La maggior parte degli scanner di rete (ARP-SCAN, NMAP, NSLOOKUP, DIG) si basano sulla scansione di interfacce di rete e sottoreti specifiche. Consulta la <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">documentazione sulle sottoreti</a> per assistenza su questa impostazione, in particolare VLAN, quali VLAN sono supportate o come individuare la maschera di rete e l'interfaccia. <br/> <br/> Un'alternativa agli scanner in rete è abilitare altri scanner/importatori di dispositivi che non si affidano a NetAlert<sup>X</sup> che hanno accesso alla rete (UNIFI, dhcp.leases , PiHole, ecc.). <br/> <br/> Nota: il tempo di scansione stesso dipende dal numero di indirizzi IP da controllare, quindi impostalo attentamente con la maschera di rete e l'interfaccia appropriate.",
|
||||||
"SCAN_SUBNETS_name": "Reti da scansionare",
|
"SCAN_SUBNETS_name": "Reti da scansionare",
|
||||||
"SYSTEM_TITLE": "Informazioni sistema",
|
"SYSTEM_TITLE": "Informazioni sistema",
|
||||||
"Setting_Override": "Sovrascrivi valore",
|
"Setting_Override": "Sovrascrivi valore",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Tempo di attività:",
|
"Systeminfo_System_Uptime": "Tempo di attività:",
|
||||||
"Systeminfo_This_Client": "Questo client",
|
"Systeminfo_This_Client": "Questo client",
|
||||||
"Systeminfo_USB_Devices": "Dispositivi USB",
|
"Systeminfo_USB_Devices": "Dispositivi USB",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Rilevate vecchie posizioni di montaggio. Segui <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">questa guida</a> per migrare alle nuove cartelle <code> /data/config</code> e <code>/data/db</code> e al contenitore <code>netalertx</code>.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Rilevate vecchie posizioni di montaggio. Segui <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">questa guida</a> per migrare alle nuove cartelle <code> /data/config</code> e <code>/data/db</code> e al contenitore <code>netalertx</code>.",
|
||||||
"TIMEZONE_description": "Fuso orario per visualizzare correttamente le statistiche. Trova il tuo fuso orario <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">qui</a>.",
|
"TIMEZONE_description": "Fuso orario per visualizzare correttamente le statistiche. Trova il tuo fuso orario <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">qui</a>.",
|
||||||
"TIMEZONE_name": "Fuso orario",
|
"TIMEZONE_name": "Fuso orario",
|
||||||
"UI_DEV_SECTIONS_description": "Seleziona quali elementi della UI nascondere nella pagina dei dispositivi.",
|
"UI_DEV_SECTIONS_description": "Seleziona quali elementi della UI nascondere nella pagina dei dispositivi.",
|
||||||
"UI_DEV_SECTIONS_name": "Nascondi sezioni dispositivi",
|
"UI_DEV_SECTIONS_name": "Nascondi sezioni dispositivi",
|
||||||
"UI_ICONS_description": "Un elenco di icone predefinite. Procedi con cautela, il modo migliore per aggiungere icone è descritto nella sezione <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">documentazione icone</a>. Puoi aggiungere un tag HTML SVG con codifica base64 o un tag HTML fFont-Awesome.",
|
"UI_ICONS_description": "Un elenco di icone predefinite. Procedi con cautela, il modo migliore per aggiungere icone è descritto nella sezione <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">documentazione icone</a>. Puoi aggiungere un tag HTML SVG con codifica base64 o un tag HTML fFont-Awesome.",
|
||||||
"UI_ICONS_name": "Icone predefinite",
|
"UI_ICONS_name": "Icone predefinite",
|
||||||
"UI_LANG_description": "Seleziona la lingua preferita dell'interfaccia utente. Aiuta nella traduzione o suggerisci una nuova lingua sul portale online di <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Seleziona la lingua preferita dell'interfaccia utente. Aiuta nella traduzione o suggerisci una nuova lingua sul portale online di <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Lingua UI",
|
"UI_LANG_name": "Lingua UI",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Editori",
|
"settings_publishers_label": "Editori",
|
||||||
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
|
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
|
||||||
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso… <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso… <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "カスタムSQLクエリを指定するとJSONファイルが生成され、<a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>ファイルエンドポイント</a>経由で公開できます。",
|
"API_CUSTOM_SQL_description": "カスタムSQLクエリを指定するとJSONファイルが生成され、<a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>ファイルエンドポイント</a>経由で公開できます。",
|
||||||
"API_CUSTOM_SQL_name": "カスタムエンドポイント",
|
"API_CUSTOM_SQL_name": "カスタムエンドポイント",
|
||||||
"API_TOKEN_description": "安全な通信のための API トークン。生成するか、任意の値を入力してください。リクエストヘッダーで送信され、<code>SYNC</code>プラグイン、GraphQLサーバー、その他のAPIエンドポイントで使用されます。<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">APIドキュメント</a>に記載の通り、API エンドポイントを使用して独自の連携機能を作成できます。",
|
"API_TOKEN_description": "安全な通信のための API トークン。生成するか、任意の値を入力してください。リクエストヘッダーで送信され、<code>SYNC</code>プラグイン、GraphQLサーバー、その他のAPIエンドポイントで使用されます。<a href=\"https://docs.netalertx.com/API\" target=\"_blank\">APIドキュメント</a>に記載の通り、API エンドポイントを使用して独自の連携機能を作成できます。",
|
||||||
"API_TOKEN_name": "APIトークン",
|
"API_TOKEN_name": "APIトークン",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -27,8 +27,8 @@
|
|||||||
"AppEvents_ObjectType": "オブジェクトタイプ",
|
"AppEvents_ObjectType": "オブジェクトタイプ",
|
||||||
"AppEvents_Plugin": "プラグイン",
|
"AppEvents_Plugin": "プラグイン",
|
||||||
"AppEvents_Type": "種別",
|
"AppEvents_Type": "種別",
|
||||||
"BACKEND_API_URL_description": "",
|
"BACKEND_API_URL_description": "バックエンドAPIのURLを生成するために使用します。リバースプロキシを使用して<code>GRAPHQL_PORT</code>にマッピングする場合は指定してください。ポート番号を含む<code>http://</code>で始まる完全なURLを入力してください(末尾のスラッシュ<code>/</code>は不要です)。",
|
||||||
"BACKEND_API_URL_name": "",
|
"BACKEND_API_URL_name": "バックエンド API URL",
|
||||||
"BackDevDetail_Actions_Ask_Run": "このアクションを実行してよろしいですか?",
|
"BackDevDetail_Actions_Ask_Run": "このアクションを実行してよろしいですか?",
|
||||||
"BackDevDetail_Actions_Not_Registered": "登録されていないアクション: ",
|
"BackDevDetail_Actions_Not_Registered": "登録されていないアクション: ",
|
||||||
"BackDevDetail_Actions_Title_Run": "アクションを実行",
|
"BackDevDetail_Actions_Title_Run": "アクションを実行",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "ベンダーは自動検出されるべきです。カスタム値を上書きまたは追加できます。",
|
"DevDetail_Vendor_hover": "ベンダーは自動検出されるべきです。カスタム値を上書きまたは追加できます。",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "アイコンの追加",
|
"DevDetail_button_AddIcon": "アイコンの追加",
|
||||||
"DevDetail_button_AddIcon_Help": "SVG HTMLタグまたはFont Awesome HTMLタグのアイコンを貼り付けてください。詳細は<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">アイコンのドキュメント</a>を参照してください。",
|
"DevDetail_button_AddIcon_Help": "SVG HTMLタグまたはFont Awesome HTMLタグのアイコンを貼り付けてください。詳細は<a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">アイコンのドキュメント</a>を参照してください。",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "このデバイスに、ドロップダウンにない新しいアイコンを追加します。",
|
"DevDetail_button_AddIcon_Tooltip": "このデバイスに、ドロップダウンにない新しいアイコンを追加します。",
|
||||||
"DevDetail_button_Delete": "デバイスの削除",
|
"DevDetail_button_Delete": "デバイスの削除",
|
||||||
"DevDetail_button_DeleteEvents": "イベントの削除",
|
"DevDetail_button_DeleteEvents": "イベントの削除",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "保存",
|
"DevDetail_button_Save": "保存",
|
||||||
"DeviceEdit_ValidMacIp": "有効な<b>Mac</b>と<b>IP</b>アドレスを入力します.",
|
"DeviceEdit_ValidMacIp": "有効な<b>Mac</b>と<b>IP</b>アドレスを入力します.",
|
||||||
"Device_MultiEdit": "マルチエディタ",
|
"Device_MultiEdit": "マルチエディタ",
|
||||||
"Device_MultiEdit_Backup": "注意:以下の項目に誤った値を入力すると設定が破損します。まずデータベースまたはデバイスの設定をバックアップしてください(<a href=\"php/server/devices.php?action=ExportCSV\">クリックしてダウンロード<i class=\"fa-solid fa-download fa-bounce\"></i></a>)。このファイルからデバイスを復元する方法については、<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">バックアップのドキュメント</a>を参照してください。変更を適用するには、更新したい各フィールドの<b>保存<i class=\"fa-solid fa-save\"></i></b>アイコンをクリックしてください。",
|
"Device_MultiEdit_Backup": "注意:以下の項目に誤った値を入力すると設定が破損します。まずデータベースまたはデバイスの設定をバックアップしてください(<a href=\"php/server/devices.php?action=ExportCSV\">クリックしてダウンロード<i class=\"fa-solid fa-download fa-bounce\"></i></a>)。このファイルからデバイスを復元する方法については、<a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">バックアップのドキュメント</a>を参照してください。変更を適用するには、更新したい各フィールドの<b>保存<i class=\"fa-solid fa-save\"></i></b>アイコンをクリックしてください。",
|
||||||
"Device_MultiEdit_Fields": "フィールドの編集:",
|
"Device_MultiEdit_Fields": "フィールドの編集:",
|
||||||
"Device_MultiEdit_MassActions": "大量のアクション:",
|
"Device_MultiEdit_MassActions": "大量のアクション:",
|
||||||
"Device_MultiEdit_No_Devices": "デバイスが選択されていません。",
|
"Device_MultiEdit_No_Devices": "デバイスが選択されていません。",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "全て",
|
"Device_Tablelenght_all": "全て",
|
||||||
"Device_Title": "デバイス",
|
"Device_Title": "デバイス",
|
||||||
"Devices_Filters": "フィルター",
|
"Devices_Filters": "フィルター",
|
||||||
"ENABLE_PLUGINS_description": "<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">プラグイン</a>機能を有効にします。プラグインの読み込みにはより多くのハードウェアリソースを必要とするため、リソースが限られているシステムでは無効にすることをお勧めします。",
|
"ENABLE_PLUGINS_description": "<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">プラグイン</a>機能を有効にします。プラグインの読み込みにはより多くのハードウェアリソースを必要とするため、リソースが限られているシステムでは無効にすることをお勧めします。",
|
||||||
"ENABLE_PLUGINS_name": "有効プラグイン",
|
"ENABLE_PLUGINS_name": "有効プラグイン",
|
||||||
"ENCRYPTION_KEY_description": "データ暗号化キー。",
|
"ENCRYPTION_KEY_description": "データ暗号化キー。",
|
||||||
"ENCRYPTION_KEY_name": "暗号化キー",
|
"ENCRYPTION_KEY_name": "暗号化キー",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "警告",
|
"Gen_Warning": "警告",
|
||||||
"Gen_Work_In_Progress": "作業中、https://github.com/jokob-sk/NetAlertX/issues へのフィードバックの好機です",
|
"Gen_Work_In_Progress": "作業中、https://github.com/jokob-sk/NetAlertX/issues へのフィードバックの好機です",
|
||||||
"Gen_create_new_device": "新規デバイス",
|
"Gen_create_new_device": "新規デバイス",
|
||||||
"Gen_create_new_device_info": "デバイスは通常、<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">プラグイン</a>を使用して検出されます。ただし、特定のケースでは手動でデバイスを追加する必要がある場合があります。具体的なシナリオについては、<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">リモートネットワークドキュメント</a>を参照してください。",
|
"Gen_create_new_device_info": "デバイスは通常、<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">プラグイン</a>を使用して検出されます。ただし、特定のケースでは手動でデバイスを追加する必要がある場合があります。具体的なシナリオについては、<a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">リモートネットワークドキュメント</a>を参照してください。",
|
||||||
"General_display_name": "一般",
|
"General_display_name": "一般",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "これは<b>デバイスを削除</b>するメンテナンス設定です。有効にした場合(<code>0</code>は無効)、<b>新規デバイス</b>としてマークされたデバイスの内、<b>初回検知時刻</b>が指定された時間より古いものは削除されます。<b>新規デバイス</b>を<code>X</code>時間後に自動削除したい場合に使用してください。",
|
"HRS_TO_KEEP_NEWDEV_description": "これは<b>デバイスを削除</b>するメンテナンス設定です。有効にした場合(<code>0</code>は無効)、<b>新規デバイス</b>としてマークされたデバイスの内、<b>初回検知時刻</b>が指定された時間より古いものは削除されます。<b>新規デバイス</b>を<code>X</code>時間後に自動削除したい場合に使用してください。",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "新規デバイスの削除",
|
"HRS_TO_KEEP_NEWDEV_name": "新規デバイスの削除",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "これは<b>デバイスを削除</b>するメンテナンス設定です。有効にした場合(<code>0</code>は無効)、<b>オフライン</b>状態のデバイスの内、<b>最終接続日時</b>が指定された時間より古いものは削除されます。<b>オフラインデバイス</b>を<code>X</code>時間経過後に自動削除したい場合に使用してください。",
|
"HRS_TO_KEEP_OFFDEV_description": "これは<b>デバイスを削除</b>するメンテナンス設定です。有効にした場合(<code>0</code>は無効)、<b>オフライン</b>状態のデバイスの内、<b>最終接続日時</b>が指定された時間より古いものは削除されます。<b>オフラインデバイス</b>を<code>X</code>時間経過後に自動削除したい場合に使用してください。",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "オフラインデバイスを削除する",
|
"HRS_TO_KEEP_OFFDEV_name": "オフラインデバイスを削除する",
|
||||||
"LOADED_PLUGINS_description": "読み込まれたプラグイン。プラグインの追加はアプリケーションの速度を低下させる可能性があります。有効化が必要なプラグインの種類やスキャンオプションについては、<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">プラグインのドキュメント</a>を参照してください。読み込まれなかったプラグインの設定は失われます。読み込まない設定にできるのは<code>無効化</code>されたプラグインのみです。",
|
"LOADED_PLUGINS_description": "読み込まれたプラグイン。プラグインの追加はアプリケーションの速度を低下させる可能性があります。有効化が必要なプラグインの種類やスキャンオプションについては、<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">プラグインのドキュメント</a>を参照してください。読み込まれなかったプラグインの設定は失われます。読み込まない設定にできるのは<code>無効化</code>されたプラグインのみです。",
|
||||||
"LOADED_PLUGINS_name": "読み込まれたプラグイン",
|
"LOADED_PLUGINS_name": "読み込まれたプラグイン",
|
||||||
"LOG_LEVEL_description": "この設定により、より詳細なログ出力が有効になります。データベースへのイベント書き込みのデバッグに有用です。",
|
"LOG_LEVEL_description": "この設定により、より詳細なログ出力が有効になります。データベースへのイベント書き込みのデバッグに有用です。",
|
||||||
"LOG_LEVEL_name": "追加のログ出力",
|
"LOG_LEVEL_name": "追加のログ出力",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "バックエンドサーバーを再起動してもよろしいですか?アプリの不整合が発生する可能性があります。まず設定のバックアップを行ってください。<br/> <br/> 注:この操作には数分かかる場合があります。",
|
"Maint_Restart_Server_noti_text": "バックエンドサーバーを再起動してもよろしいですか?アプリの不整合が発生する可能性があります。まず設定のバックアップを行ってください。<br/> <br/> 注:この操作には数分かかる場合があります。",
|
||||||
"Maintenance_InitCheck": "初期化チェック",
|
"Maintenance_InitCheck": "初期化チェック",
|
||||||
"Maintenance_InitCheck_Checking": "確認中…",
|
"Maintenance_InitCheck_Checking": "確認中…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "<a href=\"https://jokob-sk.github.io/NetAlertX/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": "インストールバージョン",
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
"Maintenance_Tool_ExportCSV": "デバイスエクスポート(csv)",
|
"Maintenance_Tool_ExportCSV": "デバイスエクスポート(csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "デバイスエクスポート(csv)",
|
"Maintenance_Tool_ExportCSV_noti": "デバイスエクスポート(csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "CSVファイルを生成してよろしいですか?",
|
"Maintenance_Tool_ExportCSV_noti_text": "CSVファイルを生成してよろしいですか?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "ネットワークノードとデバイス間の接続関係を含むデバイス一覧を記載したCSV(カンマ区切り値)ファイルを生成します。この操作は、URL<code>your_NetAlertX_url/php/server/devices.php?action=ExportCSV</code>にアクセスするか、<a href=\"settings.php#CSVBCKP_header\">CSVバックアップ</a>プラグインを有効化することで実行できます。",
|
"Maintenance_Tool_ExportCSV_text": "ネットワークノードとデバイス間の接続関係を含むデバイス一覧を記載したCSV(カンマ区切り値)ファイルを生成します。この操作は、<a href=\"settings.php#CSVBCKP_header\">CSVバックアップ</a>プラグインを有効化することで実行できます。",
|
||||||
"Maintenance_Tool_ImportCSV": "デバイスインポート(csv)",
|
"Maintenance_Tool_ImportCSV": "デバイスインポート(csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "デバイスインポート(csv)",
|
"Maintenance_Tool_ImportCSV_noti": "デバイスインポート(csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "CSVファイルを本当にインポートしますか?これによりデータベース内のデバイスが完全に<b>上書き</b>されます。",
|
"Maintenance_Tool_ImportCSV_noti_text": "CSVファイルを本当にインポートしますか?これによりデータベース内のデバイスが完全に<b>上書き</b>されます。",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "ノード名",
|
"Network_Node_Name": "ノード名",
|
||||||
"Network_Parent": "親ネットワークデバイス",
|
"Network_Parent": "親ネットワークデバイス",
|
||||||
"Network_Root": "ルートノード",
|
"Network_Root": "ルートノード",
|
||||||
"Network_Root_Not_Configured": "<a href=\"deviceDetails.php?mac=Internet\">インターネットルートデバイス</a>の<b>種別</b>フィールドで、<b>ゲートウェイ</b>などのネットワークデバイス種別を選択し、この画面の設定を開始してください。<br/><br/>詳細なドキュメントは<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">ネットワークの設定方法ページ</a>ガイドでご覧いただけます",
|
"Network_Root_Not_Configured": "<a href=\"deviceDetails.php?mac=Internet\">インターネットルートデバイス</a>の<b>種別</b>フィールドで、<b>ゲートウェイ</b>などのネットワークデバイス種別を選択し、この画面の設定を開始してください。<br/><br/>詳細なドキュメントは<a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">ネットワークの設定方法ページ</a>ガイドでご覧いただけます",
|
||||||
"Network_Root_Unconfigurable": "設定不可のルート",
|
"Network_Root_Unconfigurable": "設定不可のルート",
|
||||||
"Network_ShowArchived": "アーカイブを表示",
|
"Network_ShowArchived": "アーカイブを表示",
|
||||||
"Network_ShowOffline": "オフラインを表示",
|
"Network_ShowOffline": "オフラインを表示",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "レポート",
|
"REPORT_TITLE": "レポート",
|
||||||
"RandomMAC_hover": "自動検出 - デバイスがMACアドレスをランダム化しているかどうかを示します。UI_NOT_RANDOM_MAC設定で特定のMACアドレスを除外できます。詳細はこちらをクリックしてください。",
|
"RandomMAC_hover": "自動検出 - デバイスがMACアドレスをランダム化しているかどうかを示します。UI_NOT_RANDOM_MAC設定で特定のMACアドレスを除外できます。詳細はこちらをクリックしてください。",
|
||||||
"Reports_Sent_Log": "送信レポートログ",
|
"Reports_Sent_Log": "送信レポートログ",
|
||||||
"SCAN_SUBNETS_description": "ほとんどのネットワーク内スキャナ(ARP-SCAN、NMAP、NSLOOKUP、DIG)は、特定のネットワークインターフェースとサブネットをスキャンすることに依存しています。この設定に関するヘルプについては、<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">サブネットのドキュメント</a>を確認してください。特にVLAN、サポートされているVLANの種類、ネットワークマスクとインターフェースの確認方法についてです。<br/><br/>ネットワーク内スキャナーの代替手段として、NetAlert<sup>X</sup>がネットワークにアクセスする必要のない他のデバイススキャナー/インポーター(UNIFI、dhcp.leases、PiHoleなど)を有効化できます。<br/><br/>注:スキャン時間自体は確認するIPアドレス数に依存するため、適切なネットワークマスクとインターフェースで慎重に設定してください。",
|
"SCAN_SUBNETS_description": "ほとんどのネットワーク内スキャナ(ARP-SCAN、NMAP、NSLOOKUP、DIG)は、特定のネットワークインターフェースとサブネットをスキャンすることに依存しています。この設定に関するヘルプについては、<a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">サブネットのドキュメント</a>を確認してください。特にVLAN、サポートされているVLANの種類、ネットワークマスクとインターフェースの確認方法についてです。<br/><br/>ネットワーク内スキャナーの代替手段として、NetAlert<sup>X</sup>がネットワークにアクセスする必要のない他のデバイススキャナー/インポーター(UNIFI、dhcp.leases、PiHoleなど)を有効化できます。<br/><br/>注:スキャン時間自体は確認するIPアドレス数に依存するため、適切なネットワークマスクとインターフェースで慎重に設定してください。",
|
||||||
"SCAN_SUBNETS_name": "スキャン対象ネットワーク",
|
"SCAN_SUBNETS_name": "スキャン対象ネットワーク",
|
||||||
"SYSTEM_TITLE": "システム情報",
|
"SYSTEM_TITLE": "システム情報",
|
||||||
"Setting_Override": "上書き値",
|
"Setting_Override": "上書き値",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "稼働時間:",
|
"Systeminfo_System_Uptime": "稼働時間:",
|
||||||
"Systeminfo_This_Client": "使用中のクライアント",
|
"Systeminfo_This_Client": "使用中のクライアント",
|
||||||
"Systeminfo_USB_Devices": "USBデバイス",
|
"Systeminfo_USB_Devices": "USBデバイス",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠古いマウント位置が検出されました。新しい<code>/data/config</code>および<code>/data/db</code>フォルダと<code>netalertx</code>コンテナへの移行については、<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">このガイド</a>に従ってください。",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠古いマウント位置が検出されました。新しい<code>/data/config</code>および<code>/data/db</code>フォルダと<code>netalertx</code>コンテナへの移行については、<a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">このガイド</a>に従ってください。",
|
||||||
"TIMEZONE_description": "統計情報を正しく表示するためのタイムゾーン。タイムゾーンは<a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">こちら</a>で確認してください。",
|
"TIMEZONE_description": "統計情報を正しく表示するためのタイムゾーン。タイムゾーンは<a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">こちら</a>で確認してください。",
|
||||||
"TIMEZONE_name": "タイムゾーン",
|
"TIMEZONE_name": "タイムゾーン",
|
||||||
"UI_DEV_SECTIONS_description": "デバイスページで非表示にするUI要素を選択してください。",
|
"UI_DEV_SECTIONS_description": "デバイスページで非表示にするUI要素を選択してください。",
|
||||||
"UI_DEV_SECTIONS_name": "デバイスセクションを非表示",
|
"UI_DEV_SECTIONS_name": "デバイスセクションを非表示",
|
||||||
"UI_ICONS_description": "事前定義済みアイコンの一覧。注意して操作してください。アイコン追加の推奨方法は、<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">アイコンのドキュメント</a>に記載されています。base64エンコードされたSVG HTMLまたはFont Awesome HTMLタグを追加できます。",
|
"UI_ICONS_description": "事前定義済みアイコンの一覧。注意して操作してください。アイコン追加の推奨方法は、<a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">アイコンのドキュメント</a>に記載されています。base64エンコードされたSVG HTMLまたはFont Awesome HTMLタグを追加できます。",
|
||||||
"UI_ICONS_name": "事前定義済みアイコン",
|
"UI_ICONS_name": "事前定義済みアイコン",
|
||||||
"UI_LANG_description": "お好みのUI言語を選択してください。翻訳のお手伝いや言語の提案は、<a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>のオンラインポータルで行えます。",
|
"UI_LANG_description": "お好みのUI言語を選択してください。翻訳のお手伝いや言語の提案は、<a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>のオンラインポータルで行えます。",
|
||||||
"UI_LANG_name": "UI言語",
|
"UI_LANG_name": "UI言語",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "<a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>設定でさらに多くのパブリッシャーを読み込みます",
|
"settings_publishers_info": "<a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>設定でさらに多くのパブリッシャーを読み込みます",
|
||||||
"settings_publishers_label": "パブリッシャー",
|
"settings_publishers_label": "パブリッシャー",
|
||||||
"settings_readonly": "<code>app.conf</code>の読み取りまたは書き込みができません。コンテナを再起動し、<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">ファイルの権限に関するドキュメント</a>を参照してください",
|
"settings_readonly": "<code>app.conf</code>の読み取りまたは書き込みができません。コンテナを再起動し、<a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">ファイルの権限に関するドキュメント</a>を参照してください",
|
||||||
"settings_saved": "<br/>設定が保存されました。<br/>再読込中…<br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i><br/>",
|
"settings_saved": "<br/>設定が保存されました。<br/>再読込中…<br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i><br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "システム",
|
"settings_system_label": "システム",
|
||||||
|
|||||||
16
front/php/templates/language/nb_no.json
Executable file → Normal file
16
front/php/templates/language/nb_no.json
Executable file → Normal file
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Leverandøren burde oppdages automatisk. Du kan overskrive eller legge til din egendefinerte verdi.",
|
"DevDetail_Vendor_hover": "Leverandøren burde oppdages automatisk. Du kan overskrive eller legge til din egendefinerte verdi.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Legg til nytt ikon",
|
"DevDetail_button_AddIcon": "Legg til nytt ikon",
|
||||||
"DevDetail_button_AddIcon_Help": "Lim inn en SVG html-tag eller Font Awesome html-tag ikon. Les <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Ikon dokumentasjonen</a> for detaljer.",
|
"DevDetail_button_AddIcon_Help": "Lim inn en SVG html-tag eller Font Awesome html-tag ikon. Les <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Ikon dokumentasjonen</a> for detaljer.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Legg til et nytt ikon på denne enheten som ennå ikke er tilgjengelig i nedtrekks menyen.",
|
"DevDetail_button_AddIcon_Tooltip": "Legg til et nytt ikon på denne enheten som ennå ikke er tilgjengelig i nedtrekks menyen.",
|
||||||
"DevDetail_button_Delete": "Slett Enhet",
|
"DevDetail_button_Delete": "Slett Enhet",
|
||||||
"DevDetail_button_DeleteEvents": "Slett Hendelser",
|
"DevDetail_button_DeleteEvents": "Slett Hendelser",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Lagre",
|
"DevDetail_button_Save": "Lagre",
|
||||||
"DeviceEdit_ValidMacIp": "",
|
"DeviceEdit_ValidMacIp": "",
|
||||||
"Device_MultiEdit": "Multiredigering",
|
"Device_MultiEdit": "Multiredigering",
|
||||||
"Device_MultiEdit_Backup": "Forsiktig, hvis du legger inn feil verdier nedenfor, vil oppsettet ditt ødelegges. Ta sikkerhetskopi av databasen eller enhetskonfigurasjonen først (<a href=\"php/server/devices.php?action=ExportCSV\">klikk for å laste ned <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Les hvordan du gjenoppretter enheter fra denne filen i <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Sikkerhetskopierings dokumentasjon</a>.",
|
"Device_MultiEdit_Backup": "Forsiktig, hvis du legger inn feil verdier nedenfor, vil oppsettet ditt ødelegges. Ta sikkerhetskopi av databasen eller enhetskonfigurasjonen først (<a href=\"php/server/devices.php?action=ExportCSV\">klikk for å laste ned <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Les hvordan du gjenoppretter enheter fra denne filen i <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">Sikkerhetskopierings dokumentasjon</a>.",
|
||||||
"Device_MultiEdit_Fields": "Rediger felt:",
|
"Device_MultiEdit_Fields": "Rediger felt:",
|
||||||
"Device_MultiEdit_MassActions": "Flerhandlinger:",
|
"Device_MultiEdit_MassActions": "Flerhandlinger:",
|
||||||
"Device_MultiEdit_No_Devices": "",
|
"Device_MultiEdit_No_Devices": "",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Alle",
|
"Device_Tablelenght_all": "Alle",
|
||||||
"Device_Title": "Enheter",
|
"Device_Title": "Enheter",
|
||||||
"Devices_Filters": "",
|
"Devices_Filters": "",
|
||||||
"ENABLE_PLUGINS_description": "Aktiverer <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a> funksjonaliten. Å laste inn plugins krever mer maskinvareressurser, så det kan være lurt å deaktivere dem på et system med lav strøm.",
|
"ENABLE_PLUGINS_description": "Aktiverer <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a> funksjonaliten. Å laste inn plugins krever mer maskinvareressurser, så det kan være lurt å deaktivere dem på et system med lav strøm.",
|
||||||
"ENABLE_PLUGINS_name": "Aktiver Plugins",
|
"ENABLE_PLUGINS_name": "Aktiver Plugins",
|
||||||
"ENCRYPTION_KEY_description": "",
|
"ENCRYPTION_KEY_description": "",
|
||||||
"ENCRYPTION_KEY_name": "",
|
"ENCRYPTION_KEY_name": "",
|
||||||
@@ -351,7 +351,7 @@
|
|||||||
"HRS_TO_KEEP_NEWDEV_name": "Behold nye enheter for",
|
"HRS_TO_KEEP_NEWDEV_name": "Behold nye enheter for",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "",
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "",
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"LOADED_PLUGINS_description": "Hvilke plugins som skal lastes. Å legge til plugins kan gjøre programmet tregere. Les mer om hvilke plugins som må aktiveres, typer eller skannealternativer i <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin dokumentasjonen</a>. Ulastede plugins vil miste innstillingene sine. Bare <code>deaktiverte</code> plugins kan lastes ut.",
|
"LOADED_PLUGINS_description": "Hvilke plugins som skal lastes. Å legge til plugins kan gjøre programmet tregere. Les mer om hvilke plugins som må aktiveres, typer eller skannealternativer i <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugin dokumentasjonen</a>. Ulastede plugins vil miste innstillingene sine. Bare <code>deaktiverte</code> plugins kan lastes ut.",
|
||||||
"LOADED_PLUGINS_name": "Lastede plugins",
|
"LOADED_PLUGINS_name": "Lastede plugins",
|
||||||
"LOG_LEVEL_description": "Denne innstillingen vil aktivere mer detaljert logging. Nyttig for feilsøking av hendelser som skrives inn i databasen.",
|
"LOG_LEVEL_description": "Denne innstillingen vil aktivere mer detaljert logging. Nyttig for feilsøking av hendelser som skrives inn i databasen.",
|
||||||
"LOG_LEVEL_name": "Skriv ut tilleggslogging",
|
"LOG_LEVEL_name": "Skriv ut tilleggslogging",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Node navn",
|
"Network_Node_Name": "Node navn",
|
||||||
"Network_Parent": "Foreldre nettverksenhet",
|
"Network_Parent": "Foreldre nettverksenhet",
|
||||||
"Network_Root": "Rotnode",
|
"Network_Root": "Rotnode",
|
||||||
"Network_Root_Not_Configured": "Velg en nettverksenhetstype, for eksempel <b>Gateway</b>, i <b>Type</b> -feltet til <a href=\"deviceDetails.php?mac=Internet\">Internet Root -enheten</a> for å begynne å konfigurere på denne siden. <br/><br/> Mer dokumentasjon finner du i <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Hvordan konfigurere nettverkssiden din</a> guide",
|
"Network_Root_Not_Configured": "Velg en nettverksenhetstype, for eksempel <b>Gateway</b>, i <b>Type</b> -feltet til <a href=\"deviceDetails.php?mac=Internet\">Internet Root -enheten</a> for å begynne å konfigurere på denne siden. <br/><br/> Mer dokumentasjon finner du i <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">Hvordan konfigurere nettverkssiden din</a> guide",
|
||||||
"Network_Root_Unconfigurable": "Ukonfigurerbar rot",
|
"Network_Root_Unconfigurable": "Ukonfigurerbar rot",
|
||||||
"Network_ShowArchived": "",
|
"Network_ShowArchived": "",
|
||||||
"Network_ShowOffline": "",
|
"Network_ShowOffline": "",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Rapport",
|
"REPORT_TITLE": "Rapport",
|
||||||
"RandomMAC_hover": "Autodetektert - indikerer om enheten randomiserer MAC-adressen sin.",
|
"RandomMAC_hover": "Autodetektert - indikerer om enheten randomiserer MAC-adressen sin.",
|
||||||
"Reports_Sent_Log": "Sendte rapport logger",
|
"Reports_Sent_Log": "Sendte rapport logger",
|
||||||
"SCAN_SUBNETS_description": "De fleste skannere på nettet (ARP-Scan, NMAP, NSlookup, Dig) er avhengige av å skanne spesifikke nettverksgrensesnitt og undernett. Sjekk <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">subnett dokumentasjonen</a> for hjelp på denne innstillingen, spesielt VLAN-er, hvilke VLAN-er som støttes, eller hvordan du kan finne ut nettverksmasken og grensesnittet ditt. <br/> <br/> Et alternativ til skannere på nettet er å aktivere noen andre enhetsskannere/importører som ikke er avhengige av Netalert<sup>X</sup> med tilgang til nettverket (UniFi, DHCP-Leaser, Pihole, osv.). <br/> <br/> Merk: Selve skanningstiden avhenger av antall IP -adresser som skal sjekkes, så sett dette opp nøye med riktig nettverksmaske og grensesnitt.",
|
"SCAN_SUBNETS_description": "De fleste skannere på nettet (ARP-Scan, NMAP, NSlookup, Dig) er avhengige av å skanne spesifikke nettverksgrensesnitt og undernett. Sjekk <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">subnett dokumentasjonen</a> for hjelp på denne innstillingen, spesielt VLAN-er, hvilke VLAN-er som støttes, eller hvordan du kan finne ut nettverksmasken og grensesnittet ditt. <br/> <br/> Et alternativ til skannere på nettet er å aktivere noen andre enhetsskannere/importører som ikke er avhengige av Netalert<sup>X</sup> med tilgang til nettverket (UniFi, DHCP-Leaser, Pihole, osv.). <br/> <br/> Merk: Selve skanningstiden avhenger av antall IP -adresser som skal sjekkes, så sett dette opp nøye med riktig nettverksmaske og grensesnitt.",
|
||||||
"SCAN_SUBNETS_name": "",
|
"SCAN_SUBNETS_name": "",
|
||||||
"SYSTEM_TITLE": "Systeminformasjon",
|
"SYSTEM_TITLE": "Systeminformasjon",
|
||||||
"Setting_Override": "Overstyr verdi",
|
"Setting_Override": "Overstyr verdi",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Oppetid:",
|
"Systeminfo_System_Uptime": "Oppetid:",
|
||||||
"Systeminfo_This_Client": "Denne klienten",
|
"Systeminfo_This_Client": "Denne klienten",
|
||||||
"Systeminfo_USB_Devices": "USB-enheter",
|
"Systeminfo_USB_Devices": "USB-enheter",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Eldre Mount-lokasjoner oppdaget. Følg <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">denne guiden</a> for å migrere til den nye <code>/data/config</code> og <code>/data/db </code> mappene og <code>netalertx</code> containeren.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Eldre Mount-lokasjoner oppdaget. Følg <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">denne guiden</a> for å migrere til den nye <code>/data/config</code> og <code>/data/db </code> mappene og <code>netalertx</code> containeren.",
|
||||||
"TIMEZONE_description": "Tidssone for å vise statistikk riktig. Finn din tidssone <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">her</a>.",
|
"TIMEZONE_description": "Tidssone for å vise statistikk riktig. Finn din tidssone <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">her</a>.",
|
||||||
"TIMEZONE_name": "Tidssone",
|
"TIMEZONE_name": "Tidssone",
|
||||||
"UI_DEV_SECTIONS_description": "Velg hvilke UI -elementer du vil skjule på enhetssiden.",
|
"UI_DEV_SECTIONS_description": "Velg hvilke UI -elementer du vil skjule på enhetssiden.",
|
||||||
"UI_DEV_SECTIONS_name": "Skjul enhetes-seksjoner",
|
"UI_DEV_SECTIONS_name": "Skjul enhetes-seksjoner",
|
||||||
"UI_ICONS_description": "En liste med forhåndsdefinerte ikoner. Vær forsiktig, den foretrukne måten å legge til ikoner på er beskrevet i <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">ikon-dokumentasjonen </a>. Du kan legge til en base64-kodet SVG HTML eller en Font-awesome HTML-tag.",
|
"UI_ICONS_description": "En liste med forhåndsdefinerte ikoner. Vær forsiktig, den foretrukne måten å legge til ikoner på er beskrevet i <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">ikon-dokumentasjonen </a>. Du kan legge til en base64-kodet SVG HTML eller en Font-awesome HTML-tag.",
|
||||||
"UI_ICONS_name": "Forhåndsdefinerte ikoner",
|
"UI_ICONS_name": "Forhåndsdefinerte ikoner",
|
||||||
"UI_LANG_description": "Velg det foretrukne UI-språket. Hjelp med å oversette eller foreslå språk i online portalen til <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Velg det foretrukne UI-språket. Hjelp med å oversette eller foreslå språk i online portalen til <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "UI Språk",
|
"UI_LANG_name": "UI Språk",
|
||||||
|
|||||||
24
front/php/templates/language/pl_pl.json
Executable file → Normal file
24
front/php/templates/language/pl_pl.json
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Możesz określić własne zapytanie SQL, które wygeneruje plik JSON, a następnie udostępni go przez <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\">punkt końcowy pliku <code>table_custom_endpoint.json</code></a>.",
|
"API_CUSTOM_SQL_description": "Możesz określić własne zapytanie SQL, które wygeneruje plik JSON, a następnie udostępni go przez <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\">punkt końcowy pliku <code>table_custom_endpoint.json</code></a>.",
|
||||||
"API_CUSTOM_SQL_name": "Własny endpoint",
|
"API_CUSTOM_SQL_name": "Własny endpoint",
|
||||||
"API_TOKEN_description": "Token API do bezpiecznej komunikacji. Wygeneruj nowy lub wprowadź dowolną wartość. Token jest wysyłany w nagłówku żądania i używany w wtyczce <code>SYNC</code>, serwerze GraphQL oraz innych punktach końcowych API. Możesz korzystać z tych punktów końcowych API, aby tworzyć własne integracje – zgodnie z opisem w <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">dokumentacji API</a>.",
|
"API_TOKEN_description": "Token API do bezpiecznej komunikacji. Wygeneruj nowy lub wprowadź dowolną wartość. Token jest wysyłany w nagłówku żądania i używany w wtyczce <code>SYNC</code>, serwerze GraphQL oraz innych punktach końcowych API. Możesz korzystać z tych punktów końcowych API, aby tworzyć własne integracje – zgodnie z opisem w <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">dokumentacji API</a>.",
|
||||||
"API_TOKEN_name": "Token API",
|
"API_TOKEN_name": "Token API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Producent powinien zostać wykryty automatycznie. Możesz go nadpisać lub dodać własną wartość.",
|
"DevDetail_Vendor_hover": "Producent powinien zostać wykryty automatycznie. Możesz go nadpisać lub dodać własną wartość.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Dodaj nową ikonę",
|
"DevDetail_button_AddIcon": "Dodaj nową ikonę",
|
||||||
"DevDetail_button_AddIcon_Help": "Wklej tag SVG lub tag ikony Font Awesome w formacie HTML. Szczegóły znajdziesz w <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">dokumentacji ikon</a>.",
|
"DevDetail_button_AddIcon_Help": "Wklej tag SVG lub tag ikony Font Awesome w formacie HTML. Szczegóły znajdziesz w <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">dokumentacji ikon</a>.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Dodaj nową ikonę do tego urządzenia, której jeszcze nie ma na liście rozwijanej.",
|
"DevDetail_button_AddIcon_Tooltip": "Dodaj nową ikonę do tego urządzenia, której jeszcze nie ma na liście rozwijanej.",
|
||||||
"DevDetail_button_Delete": "Usuń urządzenie",
|
"DevDetail_button_Delete": "Usuń urządzenie",
|
||||||
"DevDetail_button_DeleteEvents": "Usuń zdarzenia",
|
"DevDetail_button_DeleteEvents": "Usuń zdarzenia",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Zapisz",
|
"DevDetail_button_Save": "Zapisz",
|
||||||
"DeviceEdit_ValidMacIp": "Wprowadź poprawny <b>adres MAC</b> oraz <b>adres IP</b>.",
|
"DeviceEdit_ValidMacIp": "Wprowadź poprawny <b>adres MAC</b> oraz <b>adres IP</b>.",
|
||||||
"Device_MultiEdit": "Edycja zbiorcza",
|
"Device_MultiEdit": "Edycja zbiorcza",
|
||||||
"Device_MultiEdit_Backup": "Uwaga, wprowadzenie niepoprawnych wartości poniżej może uszkodzić Twoją konfigurację. Najpierw wykonaj kopię zapasową bazy danych lub konfiguracji urządzeń (<a href=\"php/server/devices.php?action=ExportCSV\">kliknij, aby pobrać <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Instrukcje odzyskiwania urządzeń z tego pliku znajdziesz w <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">dokumentacji kopii zapasowych</a>. Aby zastosować zmiany, kliknij ikonę <b>Zapisz<i class=\"fa-solid fa-save\"></i></b> przy każdym polu, które chcesz zaktualizować.",
|
"Device_MultiEdit_Backup": "Uwaga, wprowadzenie niepoprawnych wartości poniżej może uszkodzić Twoją konfigurację. Najpierw wykonaj kopię zapasową bazy danych lub konfiguracji urządzeń (<a href=\"php/server/devices.php?action=ExportCSV\">kliknij, aby pobrać <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Instrukcje odzyskiwania urządzeń z tego pliku znajdziesz w <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">dokumentacji kopii zapasowych</a>. Aby zastosować zmiany, kliknij ikonę <b>Zapisz<i class=\"fa-solid fa-save\"></i></b> przy każdym polu, które chcesz zaktualizować.",
|
||||||
"Device_MultiEdit_Fields": "Edytuj pola:",
|
"Device_MultiEdit_Fields": "Edytuj pola:",
|
||||||
"Device_MultiEdit_MassActions": "Operacje zbiorcze:",
|
"Device_MultiEdit_MassActions": "Operacje zbiorcze:",
|
||||||
"Device_MultiEdit_No_Devices": "",
|
"Device_MultiEdit_No_Devices": "",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Wszystkie",
|
"Device_Tablelenght_all": "Wszystkie",
|
||||||
"Device_Title": "Urządzenia",
|
"Device_Title": "Urządzenia",
|
||||||
"Devices_Filters": "Filtry",
|
"Devices_Filters": "Filtry",
|
||||||
"ENABLE_PLUGINS_description": "Umożliwia korzystanie z funkcji <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">wtyczek</a>. Wczytywanie wtyczek wymaga większych zasobów sprzętowych, dlatego na słabszych systemach warto je wyłączyć.",
|
"ENABLE_PLUGINS_description": "Umożliwia korzystanie z funkcji <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">wtyczek</a>. Wczytywanie wtyczek wymaga większych zasobów sprzętowych, dlatego na słabszych systemach warto je wyłączyć.",
|
||||||
"ENABLE_PLUGINS_name": "Włącz wtyczki",
|
"ENABLE_PLUGINS_name": "Włącz wtyczki",
|
||||||
"ENCRYPTION_KEY_description": "Klucz szyfrowania danych.",
|
"ENCRYPTION_KEY_description": "Klucz szyfrowania danych.",
|
||||||
"ENCRYPTION_KEY_name": "Klucz szyfrujący",
|
"ENCRYPTION_KEY_name": "Klucz szyfrujący",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Ostrzeżenie",
|
"Gen_Warning": "Ostrzeżenie",
|
||||||
"Gen_Work_In_Progress": "Prace w toku, to dobry moment na przesłanie opinii na https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Prace w toku, to dobry moment na przesłanie opinii na https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Nowe urządzenie",
|
"Gen_create_new_device": "Nowe urządzenie",
|
||||||
"Gen_create_new_device_info": "Urządzenia są zazwyczaj wykrywane za pomocą <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">wtyczek</a>. Jednak w niektórych przypadkach może być konieczne dodanie urządzeń ręcznie. Aby zapoznać się z konkretnymi scenariuszami, sprawdź <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">dokumentację dotyczącą sieci zdalnych</a>.",
|
"Gen_create_new_device_info": "Urządzenia są zazwyczaj wykrywane za pomocą <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">wtyczek</a>. Jednak w niektórych przypadkach może być konieczne dodanie urządzeń ręcznie. Aby zapoznać się z konkretnymi scenariuszami, sprawdź <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">dokumentację dotyczącą sieci zdalnych</a>.",
|
||||||
"General_display_name": "Ogólne",
|
"General_display_name": "Ogólne",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "To ustawienie konserwacyjne dotyczące <b>USUWANIA urządzeń</b>. Jeśli jest włączone (<code>0</code> oznacza wyłączone), urządzenia oznaczone jako <b>Nowe urządzenie</b> zostaną usunięte, jeśli czas ich <b>pierwszej sesji</b> będzie starszy niż liczba godzin określona w tym ustawieniu. Skorzystaj z tej opcji, jeśli chcesz automatycznie usuwać <b>Nowe urządzenia</b> po upływie <code>X</code> godzin.",
|
"HRS_TO_KEEP_NEWDEV_description": "To ustawienie konserwacyjne dotyczące <b>USUWANIA urządzeń</b>. Jeśli jest włączone (<code>0</code> oznacza wyłączone), urządzenia oznaczone jako <b>Nowe urządzenie</b> zostaną usunięte, jeśli czas ich <b>pierwszej sesji</b> będzie starszy niż liczba godzin określona w tym ustawieniu. Skorzystaj z tej opcji, jeśli chcesz automatycznie usuwać <b>Nowe urządzenia</b> po upływie <code>X</code> godzin.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Usuń nowe urządzenia po",
|
"HRS_TO_KEEP_NEWDEV_name": "Usuń nowe urządzenia po",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "To ustawienie konserwacyjne dotyczące <b>USUWANIA urządzeń</b>. Jeśli jest włączone (<code>0</code> oznacza wyłączone), urządzenia, które są <b>Offline</b> i których <b>ostatnie połączenie</b> miało miejsce wcześniej niż określona liczba godzin w tym ustawieniu, zostaną usunięte. Skorzystaj z tej opcji, jeśli chcesz automatycznie usuwać <b>urządzenia offline</b> po <code>X</code> godzinach braku aktywności.",
|
"HRS_TO_KEEP_OFFDEV_description": "To ustawienie konserwacyjne dotyczące <b>USUWANIA urządzeń</b>. Jeśli jest włączone (<code>0</code> oznacza wyłączone), urządzenia, które są <b>Offline</b> i których <b>ostatnie połączenie</b> miało miejsce wcześniej niż określona liczba godzin w tym ustawieniu, zostaną usunięte. Skorzystaj z tej opcji, jeśli chcesz automatycznie usuwać <b>urządzenia offline</b> po <code>X</code> godzinach braku aktywności.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Usuń urządzenia niedostępne po",
|
"HRS_TO_KEEP_OFFDEV_name": "Usuń urządzenia niedostępne po",
|
||||||
"LOADED_PLUGINS_description": "Które wtyczki mają zostać załadowane. Dodanie wtyczek może spowolnić działanie aplikacji. Więcej informacji o tym, które wtyczki należy włączyć, jakie są ich typy oraz dostępne opcje skanowania znajdziesz w <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">dokumentacji wtyczek</a>. Wtyczki, które nie zostaną załadowane, utracą swoje ustawienia. Tylko wtyczki oznaczone jako <code>disabled</code> mogą zostać pominięte przy ładowaniu.",
|
"LOADED_PLUGINS_description": "Które wtyczki mają zostać załadowane. Dodanie wtyczek może spowolnić działanie aplikacji. Więcej informacji o tym, które wtyczki należy włączyć, jakie są ich typy oraz dostępne opcje skanowania znajdziesz w <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">dokumentacji wtyczek</a>. Wtyczki, które nie zostaną załadowane, utracą swoje ustawienia. Tylko wtyczki oznaczone jako <code>disabled</code> mogą zostać pominięte przy ładowaniu.",
|
||||||
"LOADED_PLUGINS_name": "Załadowane wtyczki",
|
"LOADED_PLUGINS_name": "Załadowane wtyczki",
|
||||||
"LOG_LEVEL_description": "To ustawienie włącza bardziej szczegółowe logowanie. Przydatne do debugowania zdarzeń zapisywanych w bazie danych.",
|
"LOG_LEVEL_description": "To ustawienie włącza bardziej szczegółowe logowanie. Przydatne do debugowania zdarzeń zapisywanych w bazie danych.",
|
||||||
"LOG_LEVEL_name": "Pokaż dodatkowe logowanie",
|
"LOG_LEVEL_name": "Pokaż dodatkowe logowanie",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Czy na pewno chcesz zrestartować serwer zaplecza (backend)? Może to spowodować niespójność działania aplikacji. Najpierw wykonaj kopię zapasową swojej konfiguracji. <br/><br/> Uwaga: To może potrwać kilka minut.",
|
"Maint_Restart_Server_noti_text": "Czy na pewno chcesz zrestartować serwer zaplecza (backend)? Może to spowodować niespójność działania aplikacji. Najpierw wykonaj kopię zapasową swojej konfiguracji. <br/><br/> Uwaga: To może potrwać kilka minut.",
|
||||||
"Maintenance_InitCheck": "Wstępna kontrola",
|
"Maintenance_InitCheck": "Wstępna kontrola",
|
||||||
"Maintenance_InitCheck_Checking": "Sprawdzanie…",
|
"Maintenance_InitCheck_Checking": "Sprawdzanie…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Upewnij się, że postępowałeś zgodnie z <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">krótką instrukcją konfiguracji</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Upewnij się, że postępowałeś zgodnie z <a href=\"https://docs.netalertx.com/INITIAL_SETUP/\" target=\"_blank\">krótką instrukcją konfiguracji</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Aplikacja została pomyślnie zainicjowana!",
|
"Maintenance_InitCheck_Success": "Aplikacja została pomyślnie zainicjowana!",
|
||||||
"Maintenance_ReCheck": "Ponów sprawdzenie",
|
"Maintenance_ReCheck": "Ponów sprawdzenie",
|
||||||
"Maintenance_Running_Version": "Zainstalowana wersja",
|
"Maintenance_Running_Version": "Zainstalowana wersja",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Nazwa węzła",
|
"Network_Node_Name": "Nazwa węzła",
|
||||||
"Network_Parent": "Nadrzędne urządzenie sieciowe",
|
"Network_Parent": "Nadrzędne urządzenie sieciowe",
|
||||||
"Network_Root": "Węzeł główny",
|
"Network_Root": "Węzeł główny",
|
||||||
"Network_Root_Not_Configured": "Wybierz typ urządzenia sieciowego, na przykład <b>Brama</b>, w polu <b>Typ</b> pole formularza <a href=\"deviceDetails.php?mac=Internet\">urządzenia głównego Internetu</a> aby rozpocząć konfigurację tego widoku. <br/><br/> Więcej informacji znajdziesz w przewodniku <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Jak skonfigurować stronę Sieć </a>",
|
"Network_Root_Not_Configured": "Wybierz typ urządzenia sieciowego, na przykład <b>Brama</b>, w polu <b>Typ</b> pole formularza <a href=\"deviceDetails.php?mac=Internet\">urządzenia głównego Internetu</a> aby rozpocząć konfigurację tego widoku. <br/><br/> Więcej informacji znajdziesz w przewodniku <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">Jak skonfigurować stronę Sieć </a>",
|
||||||
"Network_Root_Unconfigurable": "Niekonfigurowalny węzeł główny",
|
"Network_Root_Unconfigurable": "Niekonfigurowalny węzeł główny",
|
||||||
"Network_ShowArchived": "",
|
"Network_ShowArchived": "",
|
||||||
"Network_ShowOffline": "",
|
"Network_ShowOffline": "",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Zgłoszenie",
|
"REPORT_TITLE": "Zgłoszenie",
|
||||||
"RandomMAC_hover": "Autodetekcja – wskazuje, czy urządzenie losowo zmienia swój adres MAC. Możesz wykluczyć konkretne adresy MAC za pomocą ustawienia UI_NOT_RANDOM_MAC. Kliknij, aby dowiedzieć się więcej.",
|
"RandomMAC_hover": "Autodetekcja – wskazuje, czy urządzenie losowo zmienia swój adres MAC. Możesz wykluczyć konkretne adresy MAC za pomocą ustawienia UI_NOT_RANDOM_MAC. Kliknij, aby dowiedzieć się więcej.",
|
||||||
"Reports_Sent_Log": "Dziennik wysłanych raportów",
|
"Reports_Sent_Log": "Dziennik wysłanych raportów",
|
||||||
"SCAN_SUBNETS_description": "Większość skanerów sieciowych (ARP-SCAN, NMAP, NSLOOKUP, DIG) polega na skanowaniu określonych interfejsów sieciowych i podsieci. Zapoznaj się z <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">dokumentacją podsieci</a>, aby uzyskać pomoc w konfiguracji tego ustawienia, szczególnie w kontekście VLAN-ów, jakie VLAN-y są obsługiwane, lub jak ustalić maskę sieciową i interfejs. <br/> <br/> Alternatywą dla skanerów sieciowych jest włączenie innych skanerów/importerów urządzeń, które nie wymagają, aby NetAlert<sup>X</sup> miał dostęp do sieci (np. UNIFI, dhcp.leases, PiHole itp.). <br/> <br/> Uwaga: Czas skanowania zależy od liczby adresów IP do sprawdzenia, dlatego skonfiguruj to ostrożnie, ustawiając odpowiednią maskę sieciową i interfejs.",
|
"SCAN_SUBNETS_description": "Większość skanerów sieciowych (ARP-SCAN, NMAP, NSLOOKUP, DIG) polega na skanowaniu określonych interfejsów sieciowych i podsieci. Zapoznaj się z <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">dokumentacją podsieci</a>, aby uzyskać pomoc w konfiguracji tego ustawienia, szczególnie w kontekście VLAN-ów, jakie VLAN-y są obsługiwane, lub jak ustalić maskę sieciową i interfejs. <br/> <br/> Alternatywą dla skanerów sieciowych jest włączenie innych skanerów/importerów urządzeń, które nie wymagają, aby NetAlert<sup>X</sup> miał dostęp do sieci (np. UNIFI, dhcp.leases, PiHole itp.). <br/> <br/> Uwaga: Czas skanowania zależy od liczby adresów IP do sprawdzenia, dlatego skonfiguruj to ostrożnie, ustawiając odpowiednią maskę sieciową i interfejs.",
|
||||||
"SCAN_SUBNETS_name": "Sieci do zeskanowania",
|
"SCAN_SUBNETS_name": "Sieci do zeskanowania",
|
||||||
"SYSTEM_TITLE": "Informacje o systemie",
|
"SYSTEM_TITLE": "Informacje o systemie",
|
||||||
"Setting_Override": "Nadpisz wartość",
|
"Setting_Override": "Nadpisz wartość",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Czas pracy:",
|
"Systeminfo_System_Uptime": "Czas pracy:",
|
||||||
"Systeminfo_This_Client": "Ten klient",
|
"Systeminfo_This_Client": "Ten klient",
|
||||||
"Systeminfo_USB_Devices": "Urządzenia USB",
|
"Systeminfo_USB_Devices": "Urządzenia USB",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Wykryto stare lokalizacje montowania. Skorzystaj z <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">tego przewodnika</a>, aby przeprowadzić migrację do nowych folderów <code>/data/config</code> i <code>/data/db</code> oraz kontenera <code>netalertx</code>.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Wykryto stare lokalizacje montowania. Skorzystaj z <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">tego przewodnika</a>, aby przeprowadzić migrację do nowych folderów <code>/data/config</code> i <code>/data/db</code> oraz kontenera <code>netalertx</code>.",
|
||||||
"TIMEZONE_description": "Ustaw strefę czasową, aby statystyki były wyświetlane poprawnie. Znajdź swoją strefę czasową <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">tutaj</a>.",
|
"TIMEZONE_description": "Ustaw strefę czasową, aby statystyki były wyświetlane poprawnie. Znajdź swoją strefę czasową <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">tutaj</a>.",
|
||||||
"TIMEZONE_name": "Strefa czasowa",
|
"TIMEZONE_name": "Strefa czasowa",
|
||||||
"UI_DEV_SECTIONS_description": "Wybierz elementy interfejsu użytkownika (UI), które chcesz ukryć na stronach Urządzeń.",
|
"UI_DEV_SECTIONS_description": "Wybierz elementy interfejsu użytkownika (UI), które chcesz ukryć na stronach Urządzeń.",
|
||||||
"UI_DEV_SECTIONS_name": "Ukryj sekcje urządzeń",
|
"UI_DEV_SECTIONS_name": "Ukryj sekcje urządzeń",
|
||||||
"UI_ICONS_description": "Lista predefiniowanych ikon. Zachowaj ostrożność — preferowany sposób dodawania ikon opisano w <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">dokumentacji ikon</a>. Możesz dodać ikonę jako zakodowany w base64 znacznik SVG HTML lub znacznik HTML Font Awesome.",
|
"UI_ICONS_description": "Lista predefiniowanych ikon. Zachowaj ostrożność — preferowany sposób dodawania ikon opisano w <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">dokumentacji ikon</a>. Możesz dodać ikonę jako zakodowany w base64 znacznik SVG HTML lub znacznik HTML Font Awesome.",
|
||||||
"UI_ICONS_name": "Predefiniowane ikony",
|
"UI_ICONS_name": "Predefiniowane ikony",
|
||||||
"UI_LANG_description": "Wybierz preferowany język interfejsu użytkownika. Pomóż w tłumaczeniu lub zasugeruj nowe języki w internetowym portalu <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Wybierz preferowany język interfejsu użytkownika. Pomóż w tłumaczeniu lub zasugeruj nowe języki w internetowym portalu <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Język UI",
|
"UI_LANG_name": "Język UI",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Załaduj więcej publikatorów za pomocą ustawienia <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Załaduj więcej publikatorów za pomocą ustawienia <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Wydawcy",
|
"settings_publishers_label": "Wydawcy",
|
||||||
"settings_readonly": "Nie można ODCZYTAĆ ani ZAPISAĆ pliku <code>app.conf</code>. Spróbuj ponownie uruchomić kontener i zapoznaj się z <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">dokumentacją dotyczącą uprawnień do plików</a>",
|
"settings_readonly": "Nie można ODCZYTAĆ ani ZAPISAĆ pliku <code>app.conf</code>. Spróbuj ponownie uruchomić kontener i zapoznaj się z <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">dokumentacją dotyczącą uprawnień do plików</a>",
|
||||||
"settings_saved": "<br/>Ustawienia zapisane. <br/>Trwa ponowne ładowanie… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Ustawienia zapisane. <br/>Trwa ponowne ładowanie… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Você pode especificar uma consulta SQL personalizada que irá gerar um arquivo JSON e, em seguida, expô-lo por meio do <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> endpoint do arquivo</a>.",
|
"API_CUSTOM_SQL_description": "Você pode especificar uma consulta SQL personalizada que irá gerar um arquivo JSON e, em seguida, expô-lo por meio do <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> endpoint do arquivo</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint customizado",
|
"API_CUSTOM_SQL_name": "Endpoint customizado",
|
||||||
"API_TOKEN_description": "Token de API para comunicação segura. Gere um ou insira qualquer valor. Ele é enviado no cabeçalho da solicitação e usado no plugin <code>SYNC</code>, no servidor GraphQL e em outros endpoints de API. Você pode usar os endpoints de API para criar integrações personalizadas, conforme descrito na <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentação da API</a>.",
|
"API_TOKEN_description": "Token de API para comunicação segura. Gere um ou insira qualquer valor. Ele é enviado no cabeçalho da solicitação e usado no plugin <code>SYNC</code>, no servidor GraphQL e em outros endpoints de API. Você pode usar os endpoints de API para criar integrações personalizadas, conforme descrito na <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">documentação da API</a>.",
|
||||||
"API_TOKEN_name": "API token",
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "O fornecedor deve ser auto-detectado. Você pode substituir ou adicionar seu valor personalizado.",
|
"DevDetail_Vendor_hover": "O fornecedor deve ser auto-detectado. Você pode substituir ou adicionar seu valor personalizado.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i>",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i>",
|
||||||
"DevDetail_button_AddIcon": "Adicionar novo ícone",
|
"DevDetail_button_AddIcon": "Adicionar novo ícone",
|
||||||
"DevDetail_button_AddIcon_Help": "Cole uma tag HTML SVG ou um ícone de tag HTML Font Awesome. Leia a <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">documentação sobre ícones</a> para obter detalhes.",
|
"DevDetail_button_AddIcon_Help": "Cole uma tag HTML SVG ou um ícone de tag HTML Font Awesome. Leia a <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">documentação sobre ícones</a> para obter detalhes.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Adicione um novo ícone a este dispositivo que ainda não esteja disponível no menu suspenso.",
|
"DevDetail_button_AddIcon_Tooltip": "Adicione um novo ícone a este dispositivo que ainda não esteja disponível no menu suspenso.",
|
||||||
"DevDetail_button_Delete": "Excluir dispositivo",
|
"DevDetail_button_Delete": "Excluir dispositivo",
|
||||||
"DevDetail_button_DeleteEvents": "Excluir eventos",
|
"DevDetail_button_DeleteEvents": "Excluir eventos",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Salvar",
|
"DevDetail_button_Save": "Salvar",
|
||||||
"DeviceEdit_ValidMacIp": "Insira um endereço <b>Mac</b> e <b>IP</b> válidos.",
|
"DeviceEdit_ValidMacIp": "Insira um endereço <b>Mac</b> e <b>IP</b> válidos.",
|
||||||
"Device_MultiEdit": "Edição múltipla",
|
"Device_MultiEdit": "Edição múltipla",
|
||||||
"Device_MultiEdit_Backup": "Cuidado, inserir valores errados abaixo interromperá sua configuração. Faça backup do seu banco de dados ou da configuração dos dispositivos primeiro (<a href=\"php/server/devices.php?action=ExportCSV\">clique para baixar <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leia como recuperar dispositivos deste arquivo no <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Documentação de backups</a>.",
|
"Device_MultiEdit_Backup": "Cuidado, inserir valores errados abaixo interromperá sua configuração. Faça backup do seu banco de dados ou da configuração dos dispositivos primeiro (<a href=\"php/server/devices.php?action=ExportCSV\">clique para baixar <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leia como recuperar dispositivos deste arquivo no <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\" _blank\">Documentação de backups</a>.",
|
||||||
"Device_MultiEdit_Fields": "Editar campos:",
|
"Device_MultiEdit_Fields": "Editar campos:",
|
||||||
"Device_MultiEdit_MassActions": "Ações em massa:",
|
"Device_MultiEdit_MassActions": "Ações em massa:",
|
||||||
"Device_MultiEdit_No_Devices": "",
|
"Device_MultiEdit_No_Devices": "",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Todos",
|
"Device_Tablelenght_all": "Todos",
|
||||||
"Device_Title": "Dispositivos",
|
"Device_Title": "Dispositivos",
|
||||||
"Devices_Filters": "Filtros",
|
"Devices_Filters": "Filtros",
|
||||||
"ENABLE_PLUGINS_description": "Ativa a funcionalidade de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Carregar plug-ins requer mais recursos de hardware, então você pode querer desativá-los em sistemas de baixa potência.",
|
"ENABLE_PLUGINS_description": "Ativa a funcionalidade de <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. Carregar plug-ins requer mais recursos de hardware, então você pode querer desativá-los em sistemas de baixa potência.",
|
||||||
"ENABLE_PLUGINS_name": "Habilitar plug-ins",
|
"ENABLE_PLUGINS_name": "Habilitar plug-ins",
|
||||||
"ENCRYPTION_KEY_description": "Chave de encriptação de dados.",
|
"ENCRYPTION_KEY_description": "Chave de encriptação de dados.",
|
||||||
"ENCRYPTION_KEY_name": "Chave de encriptação",
|
"ENCRYPTION_KEY_name": "Chave de encriptação",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Aviso",
|
"Gen_Warning": "Aviso",
|
||||||
"Gen_Work_In_Progress": "Trabalho em andamento, um bom momento para enviar feedback em https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Trabalho em andamento, um bom momento para enviar feedback em https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Novo dispositivo",
|
"Gen_create_new_device": "Novo dispositivo",
|
||||||
"Gen_create_new_device_info": "Os dispositivos são normalmente descobertos usando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. No entanto, em certos casos, pode ser necessário adicionar dispositivos manualmente. Para explorar cenários específicos, verifique a <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentação de Redes Remotas</a>.",
|
"Gen_create_new_device_info": "Os dispositivos são normalmente descobertos usando <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. No entanto, em certos casos, pode ser necessário adicionar dispositivos manualmente. Para explorar cenários específicos, verifique a <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">documentação de Redes Remotas</a>.",
|
||||||
"General_display_name": "Geral",
|
"General_display_name": "Geral",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Esta é uma configuração de manutenção. Se habilitada (<code>0</code> is disabled), dispositivos marcados como <b>Novo Dispositivo</b> serão excluídos se o tempo de <b>Primeira Sessão</b> for mais antigo que as horas especificadas nesta configuração. Use esta configuração se quiser excluir automaticamente <b>Novos Dispositivos</b> após <code>X</code> horas.",
|
"HRS_TO_KEEP_NEWDEV_description": "Esta é uma configuração de manutenção. Se habilitada (<code>0</code> is disabled), dispositivos marcados como <b>Novo Dispositivo</b> serão excluídos se o tempo de <b>Primeira Sessão</b> for mais antigo que as horas especificadas nesta configuração. Use esta configuração se quiser excluir automaticamente <b>Novos Dispositivos</b> após <code>X</code> horas.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Manter novos dispositivos por",
|
"HRS_TO_KEEP_NEWDEV_name": "Manter novos dispositivos por",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Esta é uma configuração de manutenção <b>EXCLUINDO dispositivos</b>. Se habilitado (<code>0</code> está desabilitado), dispositivos que estão <b>Offline</b> e sua data e hora <b>Last Offline</b> são mais antigas que as horas especificadas nesta configuração, serão deletados. Use esta configuração se você quiser remover automaticamente <b>Dispositivos Offline</b> após <code>X</code> horas offline.",
|
"HRS_TO_KEEP_OFFDEV_description": "Esta é uma configuração de manutenção <b>EXCLUINDO dispositivos</b>. Se habilitado (<code>0</code> está desabilitado), dispositivos que estão <b>Offline</b> e sua data e hora <b>Last Offline</b> são mais antigas que as horas especificadas nesta configuração, serão deletados. Use esta configuração se você quiser remover automaticamente <b>Dispositivos Offline</b> após <code>X</code> horas offline.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Eliminar dispositivos offline após",
|
"HRS_TO_KEEP_OFFDEV_name": "Eliminar dispositivos offline após",
|
||||||
"LOADED_PLUGINS_description": "Quais plugins carregar. Adicionar plugins pode deixar o aplicativo lento. Leia mais sobre quais plugins precisam ser habilitados, tipos ou opções de escaneamento na <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentação de plugins</a>. Plugins descarregados perderão as suas configurações. Somente plugins <code>desabilitados</code> podem ser descarregados.",
|
"LOADED_PLUGINS_description": "Quais plugins carregar. Adicionar plugins pode deixar o aplicativo lento. Leia mais sobre quais plugins precisam ser habilitados, tipos ou opções de escaneamento na <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">documentação de plugins</a>. Plugins descarregados perderão as suas configurações. Somente plugins <code>desabilitados</code> podem ser descarregados.",
|
||||||
"LOADED_PLUGINS_name": "Plugins carregados",
|
"LOADED_PLUGINS_name": "Plugins carregados",
|
||||||
"LOG_LEVEL_description": "Esta definição permite um registo mais detalhado. Útil para depurar eventos gravados na base de dados.",
|
"LOG_LEVEL_description": "Esta definição permite um registo mais detalhado. Útil para depurar eventos gravados na base de dados.",
|
||||||
"LOG_LEVEL_name": "Imprimir registo adicional",
|
"LOG_LEVEL_name": "Imprimir registo adicional",
|
||||||
|
|||||||
12
front/php/templates/language/pt_pt.json
Executable file → Normal file
12
front/php/templates/language/pt_pt.json
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Pode especificar uma consulta SQL personalizada que irá gerar um ficheiro JSON e, em seguida, expô-lo por meio do <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> endpoint do ficheiro</a>.",
|
"API_CUSTOM_SQL_description": "Pode especificar uma consulta SQL personalizada que irá gerar um ficheiro JSON e, em seguida, expô-lo por meio do <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> endpoint do ficheiro</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint customizado",
|
"API_CUSTOM_SQL_name": "Endpoint customizado",
|
||||||
"API_TOKEN_description": "Token de API para comunicação segura. Gere um ou insira qualquer valor. Ele é enviado no cabeçalho da solicitação e usado no plugin <code>SYNC</code>, no servidor GraphQL e em outros endpoints de API. Pode usar os endpoints de API para criar integrações personalizadas, conforme descrito na <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentação da API</a>.",
|
"API_TOKEN_description": "Token de API para comunicação segura. Gere um ou insira qualquer valor. Ele é enviado no cabeçalho da solicitação e usado no plugin <code>SYNC</code>, no servidor GraphQL e em outros endpoints de API. Pode usar os endpoints de API para criar integrações personalizadas, conforme descrito na <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">documentação da API</a>.",
|
||||||
"API_TOKEN_name": "API token",
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "O fabricante deve ser detetado automaticamente. Pode substituir ou adicionar um valor personalizado.",
|
"DevDetail_Vendor_hover": "O fabricante deve ser detetado automaticamente. Pode substituir ou adicionar um valor personalizado.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Adicionar novo ícone",
|
"DevDetail_button_AddIcon": "Adicionar novo ícone",
|
||||||
"DevDetail_button_AddIcon_Help": "Cole uma tag HTML SVG ou um ícone de tag HTML Font Awesome. Leia a <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">documentação sobre ícones</a> para obter pormenores.",
|
"DevDetail_button_AddIcon_Help": "Cole uma tag HTML SVG ou um ícone de tag HTML Font Awesome. Leia a <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">documentação sobre ícones</a> para obter pormenores.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Adicione um novo ícone a este dispositivo que ainda não esteja disponível no menu suspenso.",
|
"DevDetail_button_AddIcon_Tooltip": "Adicione um novo ícone a este dispositivo que ainda não esteja disponível no menu suspenso.",
|
||||||
"DevDetail_button_Delete": "Apagar dispositivo",
|
"DevDetail_button_Delete": "Apagar dispositivo",
|
||||||
"DevDetail_button_DeleteEvents": "Apagar eventos",
|
"DevDetail_button_DeleteEvents": "Apagar eventos",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Todos",
|
"Device_Tablelenght_all": "Todos",
|
||||||
"Device_Title": "Dispositivos",
|
"Device_Title": "Dispositivos",
|
||||||
"Devices_Filters": "Filtros",
|
"Devices_Filters": "Filtros",
|
||||||
"ENABLE_PLUGINS_description": "Ativa a funcionalidade de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Carregar plug-ins requer mais recursos de hardware, então podedesativá-los em sistemas de baixa potência.",
|
"ENABLE_PLUGINS_description": "Ativa a funcionalidade de <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. Carregar plug-ins requer mais recursos de hardware, então podedesativá-los em sistemas de baixa potência.",
|
||||||
"ENABLE_PLUGINS_name": "Ativar plug-ins",
|
"ENABLE_PLUGINS_name": "Ativar plug-ins",
|
||||||
"ENCRYPTION_KEY_description": "Chave de encriptação de dados.",
|
"ENCRYPTION_KEY_description": "Chave de encriptação de dados.",
|
||||||
"ENCRYPTION_KEY_name": "Chave de encriptação",
|
"ENCRYPTION_KEY_name": "Chave de encriptação",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Aviso",
|
"Gen_Warning": "Aviso",
|
||||||
"Gen_Work_In_Progress": "Trabalho em andamento, um bom momento para enviar feedback em https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Trabalho em andamento, um bom momento para enviar feedback em https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Novo dispositivo",
|
"Gen_create_new_device": "Novo dispositivo",
|
||||||
"Gen_create_new_device_info": "Os dispositivos são normalmente descobertos usando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. No entanto, em certos casos, pode ser necessário adicionar dispositivos manualmente. Para explorar cenários específicos, verifique a <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentação de Redes Remotas</a>.",
|
"Gen_create_new_device_info": "Os dispositivos são normalmente descobertos usando <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>. No entanto, em certos casos, pode ser necessário adicionar dispositivos manualmente. Para explorar cenários específicos, verifique a <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">documentação de Redes Remotas</a>.",
|
||||||
"General_display_name": "Geral",
|
"General_display_name": "Geral",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "",
|
"HRS_TO_KEEP_NEWDEV_description": "",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Remover novos dispostivos depois",
|
"HRS_TO_KEEP_NEWDEV_name": "Remover novos dispostivos depois",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "",
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Apagar dispositivos offline após",
|
"HRS_TO_KEEP_OFFDEV_name": "Apagar dispositivos offline após",
|
||||||
"LOADED_PLUGINS_description": "Quais plugins carregar. Adicionar plugins pode deixar a aplicação lenta. Leia mais sobre quais plugins precisam ser ativados, tipos ou opções de escaneamento na <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentação de plugins</a>. Plugins descarregados perderão as suas configurações. Somente plugins <code>desativados</code> podem ser descarregados.",
|
"LOADED_PLUGINS_description": "Quais plugins carregar. Adicionar plugins pode deixar a aplicação lenta. Leia mais sobre quais plugins precisam ser ativados, tipos ou opções de escaneamento na <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">documentação de plugins</a>. Plugins descarregados perderão as suas configurações. Somente plugins <code>desativados</code> podem ser descarregados.",
|
||||||
"LOADED_PLUGINS_name": "Plugins carregados",
|
"LOADED_PLUGINS_name": "Plugins carregados",
|
||||||
"LOG_LEVEL_description": "Esta definição permite um registo mais detalhado. Útil para depurar eventos gravados na base de dados.",
|
"LOG_LEVEL_description": "Esta definição permite um registo mais detalhado. Útil para depurar eventos gravados na base de dados.",
|
||||||
"LOG_LEVEL_name": "Imprimir registo adicional",
|
"LOG_LEVEL_name": "Imprimir registo adicional",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"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 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.",
|
||||||
"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://jokob-sk.github.io/NetAlertX/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>.",
|
||||||
"Maintenance_InitCheck_Success": "Aplicação inicializada com sucesso!",
|
"Maintenance_InitCheck_Success": "Aplicação inicializada com sucesso!",
|
||||||
"Maintenance_ReCheck": "Verificar novamente",
|
"Maintenance_ReCheck": "Verificar novamente",
|
||||||
"Maintenance_Running_Version": "Versão instalada",
|
"Maintenance_Running_Version": "Versão instalada",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Вы можете указать собственный SQL-запрос, который будет генерировать файл JSON, а затем предоставлять его через конечную точку файла <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
|
"API_CUSTOM_SQL_description": "Вы можете указать собственный SQL-запрос, который будет генерировать файл JSON, а затем предоставлять его через конечную точку файла <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
|
||||||
"API_CUSTOM_SQL_name": "Пользовательская конечная точка",
|
"API_CUSTOM_SQL_name": "Пользовательская конечная точка",
|
||||||
"API_TOKEN_description": "API-токен для безопасной связи. Сгенерируйте его или введите любое значение. Он передаётся в заголовке запроса и используется в плагине <code>SYNC</code>, сервере GraphQL и других конечных точках API. Вы можете использовать конечные точки API для создания пользовательских интеграций, как описано в <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">документации по API</a>.",
|
"API_TOKEN_description": "API-токен для безопасной связи. Сгенерируйте его или введите любое значение. Он передаётся в заголовке запроса и используется в плагине <code>SYNC</code>, сервере GraphQL и других конечных точках API. Вы можете использовать конечные точки API для создания пользовательских интеграций, как описано в <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">документации по API</a>.",
|
||||||
"API_TOKEN_name": "API-токен",
|
"API_TOKEN_name": "API-токен",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Поставщик должен определяться автоматически. Вы можете перезаписать или добавить свое собственное значение.",
|
"DevDetail_Vendor_hover": "Поставщик должен определяться автоматически. Вы можете перезаписать или добавить свое собственное значение.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Добавить новый значок",
|
"DevDetail_button_AddIcon": "Добавить новый значок",
|
||||||
"DevDetail_button_AddIcon_Help": "Вставьте HTML-тег SVG или Font Awesome. Подробная информация по значкам по ссылке <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\"></a>.",
|
"DevDetail_button_AddIcon_Help": "Вставьте HTML-тег SVG или Font Awesome. Подробная информация по значкам по ссылке <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\"></a>.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Добавьте к этому устройству новый значок, которого еще нет в раскрывающемся списке.",
|
"DevDetail_button_AddIcon_Tooltip": "Добавьте к этому устройству новый значок, которого еще нет в раскрывающемся списке.",
|
||||||
"DevDetail_button_Delete": "Удалить устройство",
|
"DevDetail_button_Delete": "Удалить устройство",
|
||||||
"DevDetail_button_DeleteEvents": "Удалить события",
|
"DevDetail_button_DeleteEvents": "Удалить события",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Сохранить",
|
"DevDetail_button_Save": "Сохранить",
|
||||||
"DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.",
|
"DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.",
|
||||||
"Device_MultiEdit": "Мультиредакт",
|
"Device_MultiEdit": "Мультиредакт",
|
||||||
"Device_MultiEdit_Backup": "Будьте осторожны: ввод неправильных значений ниже приведет к поломке вашей настройки. Сначала сделайте резервную копию базы данных или конфигурации устройств (<a href=\"php/server/devices.php?action=ExportCSV\">нажмите для загрузки <i class=\"fa-solid fa-download fa-bounce\"></i></a>). О том, как восстановить Устройства из этого файла, читайте в разделе <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Документация о резервном копировании</a>. Чтобы применить свои изменения, нажмите на значок <b> Сохранить <i class = \"fa-solid fa-save\"> </i> </b> в каждом поле, которое вы хотите обновить.",
|
"Device_MultiEdit_Backup": "Будьте осторожны: ввод неправильных значений ниже приведет к поломке вашей настройки. Сначала сделайте резервную копию базы данных или конфигурации устройств (<a href=\"php/server/devices.php?action=ExportCSV\">нажмите для загрузки <i class=\"fa-solid fa-download fa-bounce\"></i></a>). О том, как восстановить Устройства из этого файла, читайте в разделе <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">Документация о резервном копировании</a>. Чтобы применить свои изменения, нажмите на значок <b> Сохранить <i class = \"fa-solid fa-save\"> </i> </b> в каждом поле, которое вы хотите обновить.",
|
||||||
"Device_MultiEdit_Fields": "Редактировать поля:",
|
"Device_MultiEdit_Fields": "Редактировать поля:",
|
||||||
"Device_MultiEdit_MassActions": "Массовые действия:",
|
"Device_MultiEdit_MassActions": "Массовые действия:",
|
||||||
"Device_MultiEdit_No_Devices": "Устройства не выбраны.",
|
"Device_MultiEdit_No_Devices": "Устройства не выбраны.",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Все",
|
"Device_Tablelenght_all": "Все",
|
||||||
"Device_Title": "Устройства",
|
"Device_Title": "Устройства",
|
||||||
"Devices_Filters": "Фильтры",
|
"Devices_Filters": "Фильтры",
|
||||||
"ENABLE_PLUGINS_description": "Включает функциональность <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагинов.</a> Загрузка плагинов требует больше аппаратных ресурсов, поэтому вы можете отключить их в маломощной системе.",
|
"ENABLE_PLUGINS_description": "Включает функциональность <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">плагинов.</a> Загрузка плагинов требует больше аппаратных ресурсов, поэтому вы можете отключить их в маломощной системе.",
|
||||||
"ENABLE_PLUGINS_name": "Разрешить плагины",
|
"ENABLE_PLUGINS_name": "Разрешить плагины",
|
||||||
"ENCRYPTION_KEY_description": "Ключ шифрования данных.",
|
"ENCRYPTION_KEY_description": "Ключ шифрования данных.",
|
||||||
"ENCRYPTION_KEY_name": "Ключ шифрования",
|
"ENCRYPTION_KEY_name": "Ключ шифрования",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Предупреждение",
|
"Gen_Warning": "Предупреждение",
|
||||||
"Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Новое устройство",
|
"Gen_create_new_device": "Новое устройство",
|
||||||
"Gen_create_new_device_info": "Устройства обычно обнаруживаются с помощью <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагинов</a>. Однако в некоторых случаях вам может потребоваться добавить устройства вручную. Для изучения конкретных сценариев ознакомьтесь с документацией <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks</a>.",
|
"Gen_create_new_device_info": "Устройства обычно обнаруживаются с помощью <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">плагинов</a>. Однако в некоторых случаях вам может потребоваться добавить устройства вручную. Для изучения конкретных сценариев ознакомьтесь с документацией <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">Remote Networks</a>.",
|
||||||
"General_display_name": "Главное",
|
"General_display_name": "Главное",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, будут удалены, если время их <b>Первого сеанса</b> было старше указанных в этой настройке часов. Используйте этот параметр, если вы хотите автоматически удалять <b>Новые устройства</b> через <code>X</code> часов.",
|
"HRS_TO_KEEP_NEWDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, будут удалены, если время их <b>Первого сеанса</b> было старше указанных в этой настройке часов. Используйте этот параметр, если вы хотите автоматически удалять <b>Новые устройства</b> через <code>X</code> часов.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Удалить новые устройства после",
|
"HRS_TO_KEEP_NEWDEV_name": "Удалить новые устройства после",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, которые находятся <b>в Offline</b> и их дата и время <b>последнего подключения</b> старше, чем часы, указанные в этом параметре. Используйте этот параметр, если вы хотите автоматически удалять <b>Offline устройства</b> после <code>X</code> часов отсутствия в сети.",
|
"HRS_TO_KEEP_OFFDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, которые находятся <b>в Offline</b> и их дата и время <b>последнего подключения</b> старше, чем часы, указанные в этом параметре. Используйте этот параметр, если вы хотите автоматически удалять <b>Offline устройства</b> после <code>X</code> часов отсутствия в сети.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Удалить устройства Offline после",
|
"HRS_TO_KEEP_OFFDEV_name": "Удалить устройства Offline после",
|
||||||
"LOADED_PLUGINS_description": "Какие плагины загружать. Добавление плагинов может замедлить работу приложения. Подробнее о том, какие плагины необходимо включить, их типах или параметрах сканирования, читайте в <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md \">Документация по плагинам</a>. Выгруженные плагины потеряют ваши настройки. Можно выгрузить только <code>отключенные</code> плагины.",
|
"LOADED_PLUGINS_description": "Какие плагины загружать. Добавление плагинов может замедлить работу приложения. Подробнее о том, какие плагины необходимо включить, их типах или параметрах сканирования, читайте в <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS \">Документация по плагинам</a>. Выгруженные плагины потеряют ваши настройки. Можно выгрузить только <code>отключенные</code> плагины.",
|
||||||
"LOADED_PLUGINS_name": "Загруженные плагины",
|
"LOADED_PLUGINS_name": "Загруженные плагины",
|
||||||
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
|
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
|
||||||
"LOG_LEVEL_name": "Распечатать дополнительный журнал",
|
"LOG_LEVEL_name": "Распечатать дополнительный журнал",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
||||||
"Maintenance_InitCheck": "Инициализация проверки",
|
"Maintenance_InitCheck": "Инициализация проверки",
|
||||||
"Maintenance_InitCheck_Checking": "Проверяется…",
|
"Maintenance_InitCheck_Checking": "Проверяется…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Убедитесь, что вы следовали быстрому руководству по настройке <a href=\"https://jokob-sk.github.io/NetAlertX/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": "Установленная версия",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Имя узла",
|
"Network_Node_Name": "Имя узла",
|
||||||
"Network_Parent": "Родительское сетевое устройство",
|
"Network_Parent": "Родительское сетевое устройство",
|
||||||
"Network_Root": "Корневой узел",
|
"Network_Root": "Корневой узел",
|
||||||
"Network_Root_Not_Configured": "Выберите тип сетевого устройства, например <b>Шлюз</b>, в поле <b>Тип</b> <a href=\"deviceDetails.php?mac=Internet\">корневого Интернет-устройства</a>, чтобы начать настройку этого экрана. <br/><br/> Дополнительную документацию можно найти в руководстве <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank \">Как настроить свою сетевую страницу</a>",
|
"Network_Root_Not_Configured": "Выберите тип сетевого устройства, например <b>Шлюз</b>, в поле <b>Тип</b> <a href=\"deviceDetails.php?mac=Internet\">корневого Интернет-устройства</a>, чтобы начать настройку этого экрана. <br/><br/> Дополнительную документацию можно найти в руководстве <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank \">Как настроить свою сетевую страницу</a>",
|
||||||
"Network_Root_Unconfigurable": "Ненастраиваемый ROOT",
|
"Network_Root_Unconfigurable": "Ненастраиваемый ROOT",
|
||||||
"Network_ShowArchived": "Показать архивные",
|
"Network_ShowArchived": "Показать архивные",
|
||||||
"Network_ShowOffline": "Показать офлайн устройства",
|
"Network_ShowOffline": "Показать офлайн устройства",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Отчет",
|
"REPORT_TITLE": "Отчет",
|
||||||
"RandomMAC_hover": "Автоматически обнаружено — указывает, рандомизирует ли устройство свой MAC-адрес. Вы можете исключить конкретные MAC-адреса с помощью настройки UI_NOT_RANDOM_MAC. Нажмите, чтобы узнать больше.",
|
"RandomMAC_hover": "Автоматически обнаружено — указывает, рандомизирует ли устройство свой MAC-адрес. Вы можете исключить конкретные MAC-адреса с помощью настройки UI_NOT_RANDOM_MAC. Нажмите, чтобы узнать больше.",
|
||||||
"Reports_Sent_Log": "Отправленные уведомления",
|
"Reports_Sent_Log": "Отправленные уведомления",
|
||||||
"SCAN_SUBNETS_description": "Большинство сетевых сканеров (ARP-SCAN, NMAP, NSLOOKUP, DIG) полагаются на сканирование определенных сетевых интерфейсов и подсетей. Дополнительную информацию по этому параметру можно найти в <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">документации по подсетям</a>, особенно VLAN, какие VLAN поддерживаются или как разобраться в маске сети и своем интерфейсе. <br/> <br/> Альтернативой сетевым сканерам является включение некоторых других сканеров/импортеров устройств, которые не полагаются на NetAlert<sup>X</sup>, имеющий доступ к сети (UNIFI, dhcp.leases , PiHole и др.). <br/> <br/> Примечание. Само время сканирования зависит от количества проверяемых IP-адресов, поэтому тщательно настройте его, указав соответствующую маску сети и интерфейс.",
|
"SCAN_SUBNETS_description": "Большинство сетевых сканеров (ARP-SCAN, NMAP, NSLOOKUP, DIG) полагаются на сканирование определенных сетевых интерфейсов и подсетей. Дополнительную информацию по этому параметру можно найти в <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">документации по подсетям</a>, особенно VLAN, какие VLAN поддерживаются или как разобраться в маске сети и своем интерфейсе. <br/> <br/> Альтернативой сетевым сканерам является включение некоторых других сканеров/импортеров устройств, которые не полагаются на NetAlert<sup>X</sup>, имеющий доступ к сети (UNIFI, dhcp.leases , PiHole и др.). <br/> <br/> Примечание. Само время сканирования зависит от количества проверяемых IP-адресов, поэтому тщательно настройте его, указав соответствующую маску сети и интерфейс.",
|
||||||
"SCAN_SUBNETS_name": "Сети для сканирования",
|
"SCAN_SUBNETS_name": "Сети для сканирования",
|
||||||
"SYSTEM_TITLE": "Системная информация",
|
"SYSTEM_TITLE": "Системная информация",
|
||||||
"Setting_Override": "Переопределить значение",
|
"Setting_Override": "Переопределить значение",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Время работы:",
|
"Systeminfo_System_Uptime": "Время работы:",
|
||||||
"Systeminfo_This_Client": "Этот клиент",
|
"Systeminfo_This_Client": "Этот клиент",
|
||||||
"Systeminfo_USB_Devices": "USB-устройства",
|
"Systeminfo_USB_Devices": "USB-устройства",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Обнаружены устаревшие местоположения. Следуйте этому руководству <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\"></a>, чтобы перейти на новые <code>/data/config</code> и <code>/data/db</code> папки и контейнер <code>netalertx</code>.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Обнаружены устаревшие местоположения. Следуйте этому руководству <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\"></a>, чтобы перейти на новые <code>/data/config</code> и <code>/data/db</code> папки и контейнер <code>netalertx</code>.",
|
||||||
"TIMEZONE_description": "Часовой пояс для корректного отображения статистики. Найдите свой часовой пояс <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">здесь</a>.",
|
"TIMEZONE_description": "Часовой пояс для корректного отображения статистики. Найдите свой часовой пояс <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">здесь</a>.",
|
||||||
"TIMEZONE_name": "Часовой пояс",
|
"TIMEZONE_name": "Часовой пояс",
|
||||||
"UI_DEV_SECTIONS_description": "Выберите, какие элементы интерфейса нужно скрыть на страницах «Устройства».",
|
"UI_DEV_SECTIONS_description": "Выберите, какие элементы интерфейса нужно скрыть на страницах «Устройства».",
|
||||||
"UI_DEV_SECTIONS_name": "Скрыть разделы устройств",
|
"UI_DEV_SECTIONS_name": "Скрыть разделы устройств",
|
||||||
"UI_ICONS_description": "Список предопределенных значков. Действуйте осторожно: предпочтительный способ добавления значков описан в разделе <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\"> документации по значкам</a>. Вы можете добавить HTML-тег SVG в кодировке Base64 или HTML-тег Font-awesome.",
|
"UI_ICONS_description": "Список предопределенных значков. Действуйте осторожно: предпочтительный способ добавления значков описан в разделе <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\"> документации по значкам</a>. Вы можете добавить HTML-тег SVG в кодировке Base64 или HTML-тег Font-awesome.",
|
||||||
"UI_ICONS_name": "Предопределенные значки",
|
"UI_ICONS_name": "Предопределенные значки",
|
||||||
"UI_LANG_description": "Выберите предпочтительный язык пользовательского интерфейса. Помогите перевести или предложите языки на онлайн-портале <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Выберите предпочтительный язык пользовательского интерфейса. Помогите перевести или предложите языки на онлайн-портале <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Язык интерфейса",
|
"UI_LANG_name": "Язык интерфейса",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "Загрузите больше нотификаторов с помощью настройки <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Загрузите больше нотификаторов с помощью настройки <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Уведомления",
|
"settings_publishers_label": "Уведомления",
|
||||||
"settings_readonly": "Невозможно ПРОЧИТАТЬ или ЗАПИСАТЬ <code>app.conf</code>. Попробуйте перезапустить контейнер и прочитать <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">документацию по разрешениям файлов</a>",
|
"settings_readonly": "Невозможно ПРОЧИТАТЬ или ЗАПИСАТЬ <code>app.conf</code>. Попробуйте перезапустить контейнер и прочитать <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">документацию по разрешениям файлов</a>",
|
||||||
"settings_saved": "<br/>Настройки сохранены. <br/> Перезагрузка... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Настройки сохранены. <br/> Перезагрузка... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Система",
|
"settings_system_label": "Система",
|
||||||
|
|||||||
14
front/php/templates/language/tr_tr.json
Executable file → Normal file
14
front/php/templates/language/tr_tr.json
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Özel bir SQL sorgusu belirleyebilir ve bu sorgu ile bir JSON dosyası oluşturabilir, ardından bu dosyayı <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> dosya uç noktası</a> üzerinden erişime açabilirsiniz.",
|
"API_CUSTOM_SQL_description": "Özel bir SQL sorgusu belirleyebilir ve bu sorgu ile bir JSON dosyası oluşturabilir, ardından bu dosyayı <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> dosya uç noktası</a> üzerinden erişime açabilirsiniz.",
|
||||||
"API_CUSTOM_SQL_name": "Kişiselleştirilmiş endpoint",
|
"API_CUSTOM_SQL_name": "Kişiselleştirilmiş endpoint",
|
||||||
"API_TOKEN_description": "Güvenli iletişim için API token'ı. Bir tane oluşturun veya herhangi bir değer girin. Bu token, istek başlığında gönderilir ve <code>SYNC</code> eklentisi, GraphQL sunucusu ve diğer API uç noktalarında kullanılır. API uç noktalarını, <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API belgelerinde</a> açıklanan şekilde özel entegrasyonlar oluşturmak için kullanabilirsiniz.",
|
"API_TOKEN_description": "Güvenli iletişim için API token'ı. Bir tane oluşturun veya herhangi bir değer girin. Bu token, istek başlığında gönderilir ve <code>SYNC</code> eklentisi, GraphQL sunucusu ve diğer API uç noktalarında kullanılır. API uç noktalarını, <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">API belgelerinde</a> açıklanan şekilde özel entegrasyonlar oluşturmak için kullanabilirsiniz.",
|
||||||
"API_TOKEN_name": "API token",
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Satıcı otomatik olarak tespit edilmelidir. Kendi özel değerini yazabilir veya üzerine yazabilirsiniz.",
|
"DevDetail_Vendor_hover": "Satıcı otomatik olarak tespit edilmelidir. Kendi özel değerini yazabilir veya üzerine yazabilirsiniz.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Yeni İkon Ekle",
|
"DevDetail_button_AddIcon": "Yeni İkon Ekle",
|
||||||
"DevDetail_button_AddIcon_Help": "Bir SVG HTML etiketi veya Font Awesome HTML etiketi simgesi yapıştırın. Detaylar için <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Simge dökümantasyonunu</a> okuyun.",
|
"DevDetail_button_AddIcon_Help": "Bir SVG HTML etiketi veya Font Awesome HTML etiketi simgesi yapıştırın. Detaylar için <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Simge dökümantasyonunu</a> okuyun.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Bu cihaza, açılır menüde henüz mevcut olmayan yeni bir simge ekleyin.",
|
"DevDetail_button_AddIcon_Tooltip": "Bu cihaza, açılır menüde henüz mevcut olmayan yeni bir simge ekleyin.",
|
||||||
"DevDetail_button_Delete": "Cihazı Sil",
|
"DevDetail_button_Delete": "Cihazı Sil",
|
||||||
"DevDetail_button_DeleteEvents": "Etkinlikleri Sil",
|
"DevDetail_button_DeleteEvents": "Etkinlikleri Sil",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Kaydet",
|
"DevDetail_button_Save": "Kaydet",
|
||||||
"DeviceEdit_ValidMacIp": "Geçerli bir <b>Mac</b> ve <b>IP</b> adresi girin.",
|
"DeviceEdit_ValidMacIp": "Geçerli bir <b>Mac</b> ve <b>IP</b> adresi girin.",
|
||||||
"Device_MultiEdit": "Çoklu Düzenleme",
|
"Device_MultiEdit": "Çoklu Düzenleme",
|
||||||
"Device_MultiEdit_Backup": "Dikkat, aşağıya yanlış değerler girmeniz yapılandırmanızı bozabilir. Lütfen önce veritabanınızı veya Cihazlar yapılandırmanızı yedekleyin (<a href=\"php/server/devices.php?action=ExportCSV\">İndirmeniz için tıklayın <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Bu dosyadan Cihazları nasıl geri yükleyeceğinizi öğrenmek için <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Yedekleme dökümantasyonunu</a> okuyun.",
|
"Device_MultiEdit_Backup": "Dikkat, aşağıya yanlış değerler girmeniz yapılandırmanızı bozabilir. Lütfen önce veritabanınızı veya Cihazlar yapılandırmanızı yedekleyin (<a href=\"php/server/devices.php?action=ExportCSV\">İndirmeniz için tıklayın <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Bu dosyadan Cihazları nasıl geri yükleyeceğinizi öğrenmek için <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">Yedekleme dökümantasyonunu</a> okuyun.",
|
||||||
"Device_MultiEdit_Fields": "Alanları Düzenle:",
|
"Device_MultiEdit_Fields": "Alanları Düzenle:",
|
||||||
"Device_MultiEdit_MassActions": "Toplu komutlar:",
|
"Device_MultiEdit_MassActions": "Toplu komutlar:",
|
||||||
"Device_MultiEdit_No_Devices": "",
|
"Device_MultiEdit_No_Devices": "",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Hepsi",
|
"Device_Tablelenght_all": "Hepsi",
|
||||||
"Device_Title": "Cihazlar",
|
"Device_Title": "Cihazlar",
|
||||||
"Devices_Filters": "Filtreler",
|
"Devices_Filters": "Filtreler",
|
||||||
"ENABLE_PLUGINS_description": "<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">Eklentiler</a> işlevini etkinleştirir. Eklentilerin yüklenmesi daha fazla donanım kaynağı gerektirir, bu nedenle düşük güçteki sistemlerde devre dışı bırakmak isteyebilirsiniz.",
|
"ENABLE_PLUGINS_description": "<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">Eklentiler</a> işlevini etkinleştirir. Eklentilerin yüklenmesi daha fazla donanım kaynağı gerektirir, bu nedenle düşük güçteki sistemlerde devre dışı bırakmak isteyebilirsiniz.",
|
||||||
"ENABLE_PLUGINS_name": "Eklentileri Etkinleştir",
|
"ENABLE_PLUGINS_name": "Eklentileri Etkinleştir",
|
||||||
"ENCRYPTION_KEY_description": "Veri encryption şifresi.",
|
"ENCRYPTION_KEY_description": "Veri encryption şifresi.",
|
||||||
"ENCRYPTION_KEY_name": "Encryption şifresi",
|
"ENCRYPTION_KEY_name": "Encryption şifresi",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Uyarı",
|
"Gen_Warning": "Uyarı",
|
||||||
"Gen_Work_In_Progress": "Çalışma devam ediyor, geri bildirimde bulunmak için iyi bir zaman: https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Çalışma devam ediyor, geri bildirimde bulunmak için iyi bir zaman: https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Yeni cihaz",
|
"Gen_create_new_device": "Yeni cihaz",
|
||||||
"Gen_create_new_device_info": "Cihazlar genellikle <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">eklentiler</a> kullanılarak keşfedilir. Ancak, bazı durumlarda cihazları manuel olarak eklemeniz gerekebilir. Belirli senaryoları incelemek için <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Uzak Ağlar belgelerini</a> kontrol edin.",
|
"Gen_create_new_device_info": "Cihazlar genellikle <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">eklentiler</a> kullanılarak keşfedilir. Ancak, bazı durumlarda cihazları manuel olarak eklemeniz gerekebilir. Belirli senaryoları incelemek için <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">Uzak Ağlar belgelerini</a> kontrol edin.",
|
||||||
"General_display_name": "Genel",
|
"General_display_name": "Genel",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Bu bir bakım ayarıdır <b>Cihazları SİLME</b>. Etkinleştirildiğinde (<code>0</code> devre dışıdır), <b>Yeni Cihaz</b> olarak işaretlenen cihazlar, <b>İlk Oturum</b> zamanı belirtilen saatten daha eskiyse silinecektir. Bu ayarı, <code>X</code> saat sonra <b>Yeni Cihazlar</b>ı otomatik olarak silmek için kullanabilirsiniz.",
|
"HRS_TO_KEEP_NEWDEV_description": "Bu bir bakım ayarıdır <b>Cihazları SİLME</b>. Etkinleştirildiğinde (<code>0</code> devre dışıdır), <b>Yeni Cihaz</b> olarak işaretlenen cihazlar, <b>İlk Oturum</b> zamanı belirtilen saatten daha eskiyse silinecektir. Bu ayarı, <code>X</code> saat sonra <b>Yeni Cihazlar</b>ı otomatik olarak silmek için kullanabilirsiniz.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Yeni Cihazları Silmeden Önce",
|
"HRS_TO_KEEP_NEWDEV_name": "Yeni Cihazları Silmeden Önce",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Bu bir bakım ayarıdır <b>Cihazları SİLME</b>. Etkinleştirildiğinde (<code>0</code> devre dışıdır), <b>Çevrimdışı</b> olan ve <b>Son Çevrimdışı</b> tarihi belirtilen saatten daha eski olan cihazlar silinecektir. Bu ayarı, <code>X</code> saat çevrimdışı olduktan sonra <b>Çevrimdışı Cihazlar</b>ı otomatik olarak silmek için kullanabilirsiniz.",
|
"HRS_TO_KEEP_OFFDEV_description": "Bu bir bakım ayarıdır <b>Cihazları SİLME</b>. Etkinleştirildiğinde (<code>0</code> devre dışıdır), <b>Çevrimdışı</b> olan ve <b>Son Çevrimdışı</b> tarihi belirtilen saatten daha eski olan cihazlar silinecektir. Bu ayarı, <code>X</code> saat çevrimdışı olduktan sonra <b>Çevrimdışı Cihazlar</b>ı otomatik olarak silmek için kullanabilirsiniz.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Çevrimdışı Cihazları Silmeden Önce",
|
"HRS_TO_KEEP_OFFDEV_name": "Çevrimdışı Cihazları Silmeden Önce",
|
||||||
"LOADED_PLUGINS_description": "Hangi Eklentilerin Yükleneceği. Eklenti eklemek, uygulamanın hızını yavaşlatabilir. Hangi eklentilerin etkinleştirilmesi gerektiği, türler veya tarama seçenekleri hakkında daha fazla bilgi için <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">eklentiler belgelerini</a> okuyun. Yüklenmeyen eklentiler, ayarlarınızı kaybedecektir. Sadece <code>devre dışı bırakılmış</code> eklentiler yüklenebilir.",
|
"LOADED_PLUGINS_description": "Hangi Eklentilerin Yükleneceği. Eklenti eklemek, uygulamanın hızını yavaşlatabilir. Hangi eklentilerin etkinleştirilmesi gerektiği, türler veya tarama seçenekleri hakkında daha fazla bilgi için <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">eklentiler belgelerini</a> okuyun. Yüklenmeyen eklentiler, ayarlarınızı kaybedecektir. Sadece <code>devre dışı bırakılmış</code> eklentiler yüklenebilir.",
|
||||||
"LOADED_PLUGINS_name": "Yüklenen Eklentiler",
|
"LOADED_PLUGINS_name": "Yüklenen Eklentiler",
|
||||||
"LOG_LEVEL_description": "Bu ayar, daha ayrıntılı günlüklemeyi etkinleştirecektir. Veritabanına yazılan olayları hata ayıklamak için faydalıdır.",
|
"LOG_LEVEL_description": "Bu ayar, daha ayrıntılı günlüklemeyi etkinleştirecektir. Veritabanına yazılan olayları hata ayıklamak için faydalıdır.",
|
||||||
"LOG_LEVEL_name": "Ekstra günlükleme yazdır",
|
"LOG_LEVEL_name": "Ekstra günlükleme yazdır",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "",
|
"settings_publishers_icon": "",
|
||||||
"settings_publishers_info": "",
|
"settings_publishers_info": "",
|
||||||
"settings_publishers_label": "",
|
"settings_publishers_label": "",
|
||||||
"settings_readonly": "<code>app.conf</code> OKUNAMIYOR veya YAZILAMIYOR. Konteyner'ı yeniden başlatmayı deneyin ve <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a> dosyasını okuyun",
|
"settings_readonly": "<code>app.conf</code> OKUNAMIYOR veya YAZILAMIYOR. Konteyner'ı yeniden başlatmayı deneyin ve <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">file permissions documentation</a> dosyasını okuyun",
|
||||||
"settings_saved": "",
|
"settings_saved": "",
|
||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "Sistem",
|
"settings_system_label": "Sistem",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Ви можете вказати спеціальний SQL-запит, який створить файл JSON, а потім відкриє його через кінцеву точку файлу <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
|
"API_CUSTOM_SQL_description": "Ви можете вказати спеціальний SQL-запит, який створить файл JSON, а потім відкриє його через кінцеву точку файлу <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
|
||||||
"API_CUSTOM_SQL_name": "Спеціальна кінцева точка",
|
"API_CUSTOM_SQL_name": "Спеціальна кінцева точка",
|
||||||
"API_TOKEN_description": "Маркер API для безпечного зв’язку. Згенеруйте один або введіть будь-яке значення. Він надсилається в заголовку запиту та використовується в плагіні <code>SYNC</code>, сервері GraphQL та інших кінцевих точках API. Ви можете використовувати кінцеві точки API для створення спеціальних інтеграцій, як описано в <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API документація</a>.",
|
"API_TOKEN_description": "Маркер API для безпечного зв’язку. Згенеруйте один або введіть будь-яке значення. Він надсилається в заголовку запиту та використовується в плагіні <code>SYNC</code>, сервері GraphQL та інших кінцевих точках API. Ви можете використовувати кінцеві точки API для створення спеціальних інтеграцій, як описано в <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">API документація</a>.",
|
||||||
"API_TOKEN_name": "Маркер API",
|
"API_TOKEN_name": "Маркер API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.",
|
"DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN",
|
||||||
"DevDetail_button_AddIcon": "Додати новий значок",
|
"DevDetail_button_AddIcon": "Додати новий значок",
|
||||||
"DevDetail_button_AddIcon_Help": "Вставте HTML-тег SVG або значок HTML-тегу Font Awesome. Щоб дізнатися більше, прочитайте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">документацію щодо значків</a>.",
|
"DevDetail_button_AddIcon_Help": "Вставте HTML-тег SVG або значок HTML-тегу Font Awesome. Щоб дізнатися більше, прочитайте <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">документацію щодо значків</a>.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Додайте нову піктограму до цього пристрою, яка ще не доступна в спадному меню.",
|
"DevDetail_button_AddIcon_Tooltip": "Додайте нову піктограму до цього пристрою, яка ще не доступна в спадному меню.",
|
||||||
"DevDetail_button_Delete": "Видалити Пристрій",
|
"DevDetail_button_Delete": "Видалити Пристрій",
|
||||||
"DevDetail_button_DeleteEvents": "Видалити події",
|
"DevDetail_button_DeleteEvents": "Видалити події",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "Зберегти",
|
"DevDetail_button_Save": "Зберегти",
|
||||||
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
|
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
|
||||||
"Device_MultiEdit": "Мультиредагування",
|
"Device_MultiEdit": "Мультиредагування",
|
||||||
"Device_MultiEdit_Backup": "Обережно, введення неправильних значень нижче призведе до порушення роботи налаштувань. Спочатку створіть резервну копію бази даних або конфігурації пристроїв (<a href=\"php/server/devices.php?action=ExportCSV\">натисніть, щоб завантажити <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Прочитайте, як відновити пристрої з цього файлу, у <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">документації щодо резервних копій</a>. Щоб застосувати зміни, натисніть значок <b>Зберегти<i class=\"fa-solid fa-save\"></i></b> у кожному полі, яке потрібно оновити.",
|
"Device_MultiEdit_Backup": "Обережно, введення неправильних значень нижче призведе до порушення роботи налаштувань. Спочатку створіть резервну копію бази даних або конфігурації пристроїв (<a href=\"php/server/devices.php?action=ExportCSV\">натисніть, щоб завантажити <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Прочитайте, як відновити пристрої з цього файлу, у <a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">документації щодо резервних копій</a>. Щоб застосувати зміни, натисніть значок <b>Зберегти<i class=\"fa-solid fa-save\"></i></b> у кожному полі, яке потрібно оновити.",
|
||||||
"Device_MultiEdit_Fields": "Редагувати поля:",
|
"Device_MultiEdit_Fields": "Редагувати поля:",
|
||||||
"Device_MultiEdit_MassActions": "Масові акції:",
|
"Device_MultiEdit_MassActions": "Масові акції:",
|
||||||
"Device_MultiEdit_No_Devices": "Не вибрано жодного пристрою.",
|
"Device_MultiEdit_No_Devices": "Не вибрано жодного пристрою.",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "Все",
|
"Device_Tablelenght_all": "Все",
|
||||||
"Device_Title": "Пристрої",
|
"Device_Title": "Пристрої",
|
||||||
"Devices_Filters": "Фільтри",
|
"Devices_Filters": "Фільтри",
|
||||||
"ENABLE_PLUGINS_description": "Вмикає функції <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагінів</a>. Завантаження плагінів вимагає більше апаратних ресурсів, тому ви можете вимкнути їх у системі з низьким енергоспоживанням.",
|
"ENABLE_PLUGINS_description": "Вмикає функції <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">плагінів</a>. Завантаження плагінів вимагає більше апаратних ресурсів, тому ви можете вимкнути їх у системі з низьким енергоспоживанням.",
|
||||||
"ENABLE_PLUGINS_name": "Увімкнути плагіни",
|
"ENABLE_PLUGINS_name": "Увімкнути плагіни",
|
||||||
"ENCRYPTION_KEY_description": "Ключ шифрування даних.",
|
"ENCRYPTION_KEY_description": "Ключ шифрування даних.",
|
||||||
"ENCRYPTION_KEY_name": "Ключ шифрування",
|
"ENCRYPTION_KEY_name": "Ключ шифрування",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "Попередження",
|
"Gen_Warning": "Попередження",
|
||||||
"Gen_Work_In_Progress": "Робота триває, час залишити відгук на https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Робота триває, час залишити відгук на https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"Gen_create_new_device": "Новий пристрій",
|
"Gen_create_new_device": "Новий пристрій",
|
||||||
"Gen_create_new_device_info": "Пристрої зазвичай виявляють за допомогою <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагінів</a>. Однак у деяких випадках може знадобитися додати пристрої вручну. Щоб дослідити конкретні сценарії, перегляньте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">документацію щодо віддалених мереж</a>.",
|
"Gen_create_new_device_info": "Пристрої зазвичай виявляють за допомогою <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">плагінів</a>. Однак у деяких випадках може знадобитися додати пристрої вручну. Щоб дослідити конкретні сценарії, перегляньте <a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">документацію щодо віддалених мереж</a>.",
|
||||||
"General_display_name": "Загальний",
|
"General_display_name": "Загальний",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, позначені як <b>Новий пристрій</b>, буде видалено, якщо час їхнього <b>першого сеансу</b> був старшим за вказані години в цьому налаштування. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>Нові пристрої</b> через <code>X</code> годин.",
|
"HRS_TO_KEEP_NEWDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, позначені як <b>Новий пристрій</b>, буде видалено, якщо час їхнього <b>першого сеансу</b> був старшим за вказані години в цьому налаштування. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>Нові пристрої</b> через <code>X</code> годин.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Видаліть нові пристрої після",
|
"HRS_TO_KEEP_NEWDEV_name": "Видаліть нові пристрої після",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, які <b>офлайн</b>, та їх <b>Останнє підключення</b> дата та час старіші за вказані години в цьому налаштуванні, будуть видалені. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>офлайн-пристрої</b> після <code>X</code> годин перебування в мережі.",
|
"HRS_TO_KEEP_OFFDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, які <b>офлайн</b>, та їх <b>Останнє підключення</b> дата та час старіші за вказані години в цьому налаштуванні, будуть видалені. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>офлайн-пристрої</b> після <code>X</code> годин перебування в мережі.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Видаліть офлайн-пристрої після",
|
"HRS_TO_KEEP_OFFDEV_name": "Видаліть офлайн-пристрої після",
|
||||||
"LOADED_PLUGINS_description": "Які плагіни завантажити. Додавання плагінів може уповільнити роботу програми. Дізнайтеся більше про те, які плагіни потрібно ввімкнути, типи чи параметри сканування в <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md \">документи плагінів</a>. Вивантажені плагіни втратять налаштування. Лише <code>вимкнені</code> плагіни можна вивантажити.",
|
"LOADED_PLUGINS_description": "Які плагіни завантажити. Додавання плагінів може уповільнити роботу програми. Дізнайтеся більше про те, які плагіни потрібно ввімкнути, типи чи параметри сканування в <a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS \">документи плагінів</a>. Вивантажені плагіни втратять налаштування. Лише <code>вимкнені</code> плагіни можна вивантажити.",
|
||||||
"LOADED_PLUGINS_name": "Завантажені плагіни",
|
"LOADED_PLUGINS_name": "Завантажені плагіни",
|
||||||
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
|
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
|
||||||
"LOG_LEVEL_name": "Друк додаткового протоколювання",
|
"LOG_LEVEL_name": "Друк додаткового протоколювання",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.",
|
"Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.",
|
||||||
"Maintenance_InitCheck": "Перевірка ініціалізації",
|
"Maintenance_InitCheck": "Перевірка ініціалізації",
|
||||||
"Maintenance_InitCheck_Checking": "Перевірка…",
|
"Maintenance_InitCheck_Checking": "Перевірка…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Переконайтеся, що ви дотримувалися інструкцій у <a href=\"https://jokob-sk.github.io/NetAlertX/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": "Встановлена версія",
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
"Maintenance_Tool_ExportCSV": "Експорт пристроїв (csv)",
|
"Maintenance_Tool_ExportCSV": "Експорт пристроїв (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "Експорт пристроїв (csv)",
|
"Maintenance_Tool_ExportCSV_noti": "Експорт пристроїв (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Ви впевнені, що хочете створити файл CSV?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Ви впевнені, що хочете створити файл CSV?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Створіть файл CSV (значення, розділене комами), що містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеними пристроями. Ви також можете активувати це, перейшовши за цією URL-адресою <code>your_NetAlertX_url/php/server/devices.php?action=ExportCSV</code> або ввімкнувши <a href=\"settings.php#CSVBCKP_header\">Резервне копіювання CSV</a > плагін.",
|
"Maintenance_Tool_ExportCSV_text": "Створіть файл CSV (значення, розділене комами), який містить список пристроїв, включаючи мережеві зв\"язки між мережевими вузлами та підключеними пристроями. Ви також можете запустити це, увімкнувши плагін <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a>.",
|
||||||
"Maintenance_Tool_ImportCSV": "Імпорт пристроїв (csv)",
|
"Maintenance_Tool_ImportCSV": "Імпорт пристроїв (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "Імпорт пристроїв (csv)",
|
"Maintenance_Tool_ImportCSV_noti": "Імпорт пристроїв (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "Ви впевнені, що бажаєте імпортувати файл CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.",
|
"Maintenance_Tool_ImportCSV_noti_text": "Ви впевнені, що бажаєте імпортувати файл CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "Ім'я вузла",
|
"Network_Node_Name": "Ім'я вузла",
|
||||||
"Network_Parent": "Батьківський мережевий пристрій",
|
"Network_Parent": "Батьківський мережевий пристрій",
|
||||||
"Network_Root": "Кореневий вузол",
|
"Network_Root": "Кореневий вузол",
|
||||||
"Network_Root_Not_Configured": "Виберіть тип мережевого пристрою, наприклад <b>Шлюз</b>, у полі <b>Тип</b> <a href=\"deviceDetails.php?mac=Internet\">кореневого Інтернет-пристрою</a>, щоб розпочати налаштування цього екрана. <br/><br/> Додаткову документацію можна знайти в <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\"> Посібник із налаштування сторінки мережі</a>",
|
"Network_Root_Not_Configured": "Виберіть тип мережевого пристрою, наприклад <b>Шлюз</b>, у полі <b>Тип</b> <a href=\"deviceDetails.php?mac=Internet\">кореневого Інтернет-пристрою</a>, щоб розпочати налаштування цього екрана. <br/><br/> Додаткову документацію можна знайти в <a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\"> Посібник із налаштування сторінки мережі</a>",
|
||||||
"Network_Root_Unconfigurable": "Ненастроюваний root",
|
"Network_Root_Unconfigurable": "Ненастроюваний root",
|
||||||
"Network_ShowArchived": "Показати архівовані",
|
"Network_ShowArchived": "Показати архівовані",
|
||||||
"Network_ShowOffline": "Показати офлайн",
|
"Network_ShowOffline": "Показати офлайн",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "Звіт",
|
"REPORT_TITLE": "Звіт",
|
||||||
"RandomMAC_hover": "Автоматично визначено – вказує, чи пристрій рандомізує свою MAC-адресу. Ви можете виключити певні MAC-адреси за допомогою параметра UI_NOT_RANDOM_MAC. Натисніть, щоб дізнатися більше.",
|
"RandomMAC_hover": "Автоматично визначено – вказує, чи пристрій рандомізує свою MAC-адресу. Ви можете виключити певні MAC-адреси за допомогою параметра UI_NOT_RANDOM_MAC. Натисніть, щоб дізнатися більше.",
|
||||||
"Reports_Sent_Log": "Журнал надісланих звітів",
|
"Reports_Sent_Log": "Журнал надісланих звітів",
|
||||||
"SCAN_SUBNETS_description": "Більшість мережевих сканерів (ARP-SCAN, NMAP, NSLOOKUP, DIG) покладаються на сканування конкретних мережевих інтерфейсів і підмереж. Перегляньте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">документацію підмереж</a>, щоб отримати допомогу щодо цього налаштування, особливо VLAN, які VLAN підтримуються або як визначити маску мережі та ваш інтерфейс. <br/> <br/> Альтернативою мережевим сканерам є ввімкнення деяких інших сканерів/імпортерів пристроїв, які не покладаються на доступ NetAlert<sup>X</sup> до мережі (UNIFI, dhcp.leases , PiHole тощо). <br/> <br/> Примітка. Сам час сканування залежить від кількості IP-адрес, які потрібно перевірити, тому ретельно налаштуйте це за допомогою відповідної маски мережі та інтерфейсу.",
|
"SCAN_SUBNETS_description": "Більшість мережевих сканерів (ARP-SCAN, NMAP, NSLOOKUP, DIG) покладаються на сканування конкретних мережевих інтерфейсів і підмереж. Перегляньте <a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">документацію підмереж</a>, щоб отримати допомогу щодо цього налаштування, особливо VLAN, які VLAN підтримуються або як визначити маску мережі та ваш інтерфейс. <br/> <br/> Альтернативою мережевим сканерам є ввімкнення деяких інших сканерів/імпортерів пристроїв, які не покладаються на доступ NetAlert<sup>X</sup> до мережі (UNIFI, dhcp.leases , PiHole тощо). <br/> <br/> Примітка. Сам час сканування залежить від кількості IP-адрес, які потрібно перевірити, тому ретельно налаштуйте це за допомогою відповідної маски мережі та інтерфейсу.",
|
||||||
"SCAN_SUBNETS_name": "Мережі для сканування",
|
"SCAN_SUBNETS_name": "Мережі для сканування",
|
||||||
"SYSTEM_TITLE": "Інформація Про систему",
|
"SYSTEM_TITLE": "Інформація Про систему",
|
||||||
"Setting_Override": "Перевизначати значення",
|
"Setting_Override": "Перевизначати значення",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "Час роботи:",
|
"Systeminfo_System_Uptime": "Час роботи:",
|
||||||
"Systeminfo_This_Client": "Цей клієнт",
|
"Systeminfo_This_Client": "Цей клієнт",
|
||||||
"Systeminfo_USB_Devices": "USB-пристрої",
|
"Systeminfo_USB_Devices": "USB-пристрої",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Виявлено старі місця монтування. Дотримуйтеся <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">цього посібника</a>, щоб перейти на нові папки <code>/data/config</code> і <code>/data/db</code> та контейнер <code>netalertx</code>.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Виявлено старі місця монтування. Дотримуйтеся <a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">цього посібника</a>, щоб перейти на нові папки <code>/data/config</code> і <code>/data/db</code> та контейнер <code>netalertx</code>.",
|
||||||
"TIMEZONE_description": "Часовий пояс для правильного відображення статистики. Знайдіть свій часовий пояс <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">тут</a>.",
|
"TIMEZONE_description": "Часовий пояс для правильного відображення статистики. Знайдіть свій часовий пояс <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">тут</a>.",
|
||||||
"TIMEZONE_name": "Часовий пояс",
|
"TIMEZONE_name": "Часовий пояс",
|
||||||
"UI_DEV_SECTIONS_description": "Виберіть, які елементи інтерфейсу користувача приховати на сторінках пристроїв.",
|
"UI_DEV_SECTIONS_description": "Виберіть, які елементи інтерфейсу користувача приховати на сторінках пристроїв.",
|
||||||
"UI_DEV_SECTIONS_name": "Приховати розділи пристроїв",
|
"UI_DEV_SECTIONS_name": "Приховати розділи пристроїв",
|
||||||
"UI_ICONS_description": "Список попередньо визначених значків. Будьте обережні, кращий спосіб додавання значків описано в розділі <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Значки документація</a>. Ви можете додати тег HTML SVG або Font-awesome у кодуванні base64.",
|
"UI_ICONS_description": "Список попередньо визначених значків. Будьте обережні, кращий спосіб додавання значків описано в розділі <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Значки документація</a>. Ви можете додати тег HTML SVG або Font-awesome у кодуванні base64.",
|
||||||
"UI_ICONS_name": "Попередньо визначені значки",
|
"UI_ICONS_name": "Попередньо визначені значки",
|
||||||
"UI_LANG_description": "Виберіть потрібну мову інтерфейсу користувача. Допоможіть з перекладом або запропонуйте мови на онлайн-порталі <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Виберіть потрібну мову інтерфейсу користувача. Допоможіть з перекладом або запропонуйте мови на онлайн-порталі <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Мова інтерфейсу користувача",
|
"UI_LANG_name": "Мова інтерфейсу користувача",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-твердий fa-паперовий літак",
|
"settings_publishers_icon": "fa-твердий fa-паперовий літак",
|
||||||
"settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Видавці",
|
"settings_publishers_label": "Видавці",
|
||||||
"settings_readonly": "Неможливо ЧИТАТИ або ЗАПИСАТИ <code>app.conf</code>. Спробуйте перезапустити контейнер і прочитайте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">документацію щодо дозволів на файли</a>",
|
"settings_readonly": "Неможливо ЧИТАТИ або ЗАПИСАТИ <code>app.conf</code>. Спробуйте перезапустити контейнер і прочитайте <a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">документацію щодо дозволів на файли</a>",
|
||||||
"settings_saved": "<br/>Налаштування збережено. <br/> Перезавантаження… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Налаштування збережено. <br/> Перезавантаження… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "фа-твердий фа-передача",
|
"settings_system_icon": "фа-твердий фа-передача",
|
||||||
"settings_system_label": "Система",
|
"settings_system_label": "Система",
|
||||||
|
|||||||
24
front/php/templates/language/zh_cn.json
Executable file → Normal file
24
front/php/templates/language/zh_cn.json
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "您可以指定一个自定义 SQL 查询,它将生成一个 JSON 文件,然后通过 <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> 文件端点</a> 公开它。",
|
"API_CUSTOM_SQL_description": "您可以指定一个自定义 SQL 查询,它将生成一个 JSON 文件,然后通过 <a href=\"/php/server/query_json.php?file=table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> 文件端点</a> 公开它。",
|
||||||
"API_CUSTOM_SQL_name": "自定义终点",
|
"API_CUSTOM_SQL_name": "自定义终点",
|
||||||
"API_TOKEN_description": "用于安全通信的API令牌。生成一个或输入任何值。它在请求标头中发送,并用于 <code>SYNC</code> 插件、GraphQL服务器和其他API端点中。 您可以使用API端点创建自定义集成,详情请参考此 <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API 文档</a>。",
|
"API_TOKEN_description": "用于安全通信的API令牌。生成一个或输入任何值。它在请求标头中发送,并用于 <code>SYNC</code> 插件、GraphQL服务器和其他API端点中。 您可以使用API端点创建自定义集成,详情请参考此 <a href=\"https://docs.netalertx.com/API\" target=\"_blank\">API 文档</a>。",
|
||||||
"API_TOKEN_name": "API 令牌",
|
"API_TOKEN_name": "API 令牌",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"DevDetail_Vendor_hover": "自动检测制造商。但你可以自定义.",
|
"DevDetail_Vendor_hover": "自动检测制造商。但你可以自定义.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> 局域网唤醒",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> 局域网唤醒",
|
||||||
"DevDetail_button_AddIcon": "添加图标",
|
"DevDetail_button_AddIcon": "添加图标",
|
||||||
"DevDetail_button_AddIcon_Help": "粘贴 SVG html 标签或 Font Awesome html 标签图标。阅读 <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons docs</a> 了解详情.",
|
"DevDetail_button_AddIcon_Help": "粘贴 SVG html 标签或 Font Awesome html 标签图标。阅读 <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">Icons docs</a> 了解详情.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Add a new Icon to this device that is not yet available in the dropdown.",
|
"DevDetail_button_AddIcon_Tooltip": "Add a new Icon to this device that is not yet available in the dropdown.",
|
||||||
"DevDetail_button_Delete": "删除设备",
|
"DevDetail_button_Delete": "删除设备",
|
||||||
"DevDetail_button_DeleteEvents": "删除事件",
|
"DevDetail_button_DeleteEvents": "删除事件",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"DevDetail_button_Save": "保存",
|
"DevDetail_button_Save": "保存",
|
||||||
"DeviceEdit_ValidMacIp": "请输入有效的<b>Mac</b>和<b>IP</b>地址。",
|
"DeviceEdit_ValidMacIp": "请输入有效的<b>Mac</b>和<b>IP</b>地址。",
|
||||||
"Device_MultiEdit": "编辑",
|
"Device_MultiEdit": "编辑",
|
||||||
"Device_MultiEdit_Backup": "小心,输入错误的值将破坏您的设置。请先备份您的数据库或设备配置(<a href=\"php/server/devices.php?action=ExportCSV\">点击下载<i class=\"fa-solid fa-download fa-bounce\"></i></a>)。在<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">备份文档</a>中了解如何从此文件恢复设备。要应用更改,请在每个需要更新的字段点击<b>保存<i class='fa-solid fa-save'></i></b>图标。",
|
"Device_MultiEdit_Backup": "小心,输入错误的值将破坏您的设置。请先备份您的数据库或设备配置(<a href=\"php/server/devices.php?action=ExportCSV\">点击下载<i class=\"fa-solid fa-download fa-bounce\"></i></a>)。在<a href=\"https://docs.netalertx.com/BACKUPS#scenario-2-corrupted-database\" target=\"_blank\">备份文档</a>中了解如何从此文件恢复设备。要应用更改,请在每个需要更新的字段点击<b>保存<i class='fa-solid fa-save'></i></b>图标。",
|
||||||
"Device_MultiEdit_Fields": "编辑:",
|
"Device_MultiEdit_Fields": "编辑:",
|
||||||
"Device_MultiEdit_MassActions": "谨慎操作:",
|
"Device_MultiEdit_MassActions": "谨慎操作:",
|
||||||
"Device_MultiEdit_No_Devices": "未选择设备。",
|
"Device_MultiEdit_No_Devices": "未选择设备。",
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
"Device_Tablelenght_all": "所有",
|
"Device_Tablelenght_all": "所有",
|
||||||
"Device_Title": "设备",
|
"Device_Title": "设备",
|
||||||
"Devices_Filters": "过滤器",
|
"Devices_Filters": "过滤器",
|
||||||
"ENABLE_PLUGINS_description": "启用<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">插件</a>功能。加载插件需要更多硬件资源,因此您可能需要在低功耗系统上禁用它们。",
|
"ENABLE_PLUGINS_description": "启用<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">插件</a>功能。加载插件需要更多硬件资源,因此您可能需要在低功耗系统上禁用它们。",
|
||||||
"ENABLE_PLUGINS_name": "启用插件",
|
"ENABLE_PLUGINS_name": "启用插件",
|
||||||
"ENCRYPTION_KEY_description": "数据密钥。",
|
"ENCRYPTION_KEY_description": "数据密钥。",
|
||||||
"ENCRYPTION_KEY_name": "密钥",
|
"ENCRYPTION_KEY_name": "密钥",
|
||||||
@@ -344,14 +344,14 @@
|
|||||||
"Gen_Warning": "警告",
|
"Gen_Warning": "警告",
|
||||||
"Gen_Work_In_Progress": "工作正在进行中,欢迎在 https://github.com/jokob-sk/NetAlertX/issues 上反馈",
|
"Gen_Work_In_Progress": "工作正在进行中,欢迎在 https://github.com/jokob-sk/NetAlertX/issues 上反馈",
|
||||||
"Gen_create_new_device": "新设备",
|
"Gen_create_new_device": "新设备",
|
||||||
"Gen_create_new_device_info": "通常使用<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>来发现设备。但是,在某些情况下,您可能需要手动添加设备。要探索特定场景,请查看<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">远程网络文档</a>。",
|
"Gen_create_new_device_info": "通常使用<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">plugins</a>来发现设备。但是,在某些情况下,您可能需要手动添加设备。要探索特定场景,请查看<a target=\"_blank\" href=\"https://docs.netalertx.com/REMOTE_NETWORKS\">远程网络文档</a>。",
|
||||||
"General_display_name": "通用",
|
"General_display_name": "通用",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "这是一项维护设置<b>删除设备</b>。如果启用该设置(<code>0</code> 为禁用),则标记为<b>新设备</b>的设备(如果其<b>首次会话</b>时间早于此设置中指定的小时数)将被删除。如果您想在 <code>X</code> 小时后自动删除<b>新设备</b>,请使用此设置。",
|
"HRS_TO_KEEP_NEWDEV_description": "这是一项维护设置<b>删除设备</b>。如果启用该设置(<code>0</code> 为禁用),则标记为<b>新设备</b>的设备(如果其<b>首次会话</b>时间早于此设置中指定的小时数)将被删除。如果您想在 <code>X</code> 小时后自动删除<b>新设备</b>,请使用此设置。",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "小时后删除新设备",
|
"HRS_TO_KEEP_NEWDEV_name": "小时后删除新设备",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "这是维护设置<b>删除设备</b>。如果启用了这个设置(<code>0</code>是禁用),任何<b>上次链接</b>时间比设置里存的指定时间长的<b>离线</b>设备都会被删除。要是您想<code>X</code>小时以候自动处理<b>下线设备</b>,请用这个设置。",
|
"HRS_TO_KEEP_OFFDEV_description": "这是维护设置<b>删除设备</b>。如果启用了这个设置(<code>0</code>是禁用),任何<b>上次链接</b>时间比设置里存的指定时间长的<b>离线</b>设备都会被删除。要是您想<code>X</code>小时以候自动处理<b>下线设备</b>,请用这个设置。",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "保留离线设备",
|
"HRS_TO_KEEP_OFFDEV_name": "保留离线设备",
|
||||||
"LOADED_PLUGINS_description": "加载哪些插件。添加插件可能会降低应用程序的速度。在<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">插件文档</a>中详细了解需要启用哪些插件、插件类型或扫描选项。卸载插件将丢失您的设置。只有<code>已禁用</code>的插件才能卸载。",
|
"LOADED_PLUGINS_description": "加载哪些插件。添加插件可能会降低应用程序的速度。在<a target=\"_blank\" href=\"https://docs.netalertx.com/PLUGINS\">插件文档</a>中详细了解需要启用哪些插件、插件类型或扫描选项。卸载插件将丢失您的设置。只有<code>已禁用</code>的插件才能卸载。",
|
||||||
"LOADED_PLUGINS_name": "已加载插件",
|
"LOADED_PLUGINS_name": "已加载插件",
|
||||||
"LOG_LEVEL_description": "此设置将启用更详细的日志记录。对于调试写入数据库的事件很有用。",
|
"LOG_LEVEL_description": "此设置将启用更详细的日志记录。对于调试写入数据库的事件很有用。",
|
||||||
"LOG_LEVEL_name": "打印附加日志",
|
"LOG_LEVEL_name": "打印附加日志",
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
"Maint_Restart_Server_noti_text": "您确定要重新启动后端服务器吗?这可能会导致应用程序不一致。请先备份您的设置。<br/> <br/> 注意:这可能需要几分钟。",
|
"Maint_Restart_Server_noti_text": "您确定要重新启动后端服务器吗?这可能会导致应用程序不一致。请先备份您的设置。<br/> <br/> 注意:这可能需要几分钟。",
|
||||||
"Maintenance_InitCheck": "初步检查",
|
"Maintenance_InitCheck": "初步检查",
|
||||||
"Maintenance_InitCheck_Checking": "查看中…",
|
"Maintenance_InitCheck_Checking": "查看中…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "确保您遵循<a href=\"https://jokob-sk.github.io/NetAlertX/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": "安装版本",
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
"Network_Node_Name": "节点名称",
|
"Network_Node_Name": "节点名称",
|
||||||
"Network_Parent": "父网络设备",
|
"Network_Parent": "父网络设备",
|
||||||
"Network_Root": "根节点",
|
"Network_Root": "根节点",
|
||||||
"Network_Root_Not_Configured": "在<a href=\"deviceDetails.php?mac=Internet\">Internet 根设备</a>的<b>类型</b>字段中选择一个网络设备类型,例如<b>网关</b>,以开始配置此屏幕。<br/><br/>更多文档可在<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">如何设置您的网络页面</a>指南中找到",
|
"Network_Root_Not_Configured": "在<a href=\"deviceDetails.php?mac=Internet\">Internet 根设备</a>的<b>类型</b>字段中选择一个网络设备类型,例如<b>网关</b>,以开始配置此屏幕。<br/><br/>更多文档可在<a href=\"https://docs.netalertx.com/NETWORK_TREE\" target=\"_blank\">如何设置您的网络页面</a>指南中找到",
|
||||||
"Network_Root_Unconfigurable": "无法配置根",
|
"Network_Root_Unconfigurable": "无法配置根",
|
||||||
"Network_ShowArchived": "显示已归档",
|
"Network_ShowArchived": "显示已归档",
|
||||||
"Network_ShowOffline": "显示离线",
|
"Network_ShowOffline": "显示离线",
|
||||||
@@ -593,7 +593,7 @@
|
|||||||
"REPORT_TITLE": "报告",
|
"REPORT_TITLE": "报告",
|
||||||
"RandomMAC_hover": "自动检测 - 表示设备是否随机化其 MAC 地址。您可通过 UI_NOT_RANDOM_MAC 设置排除特定MAC地址。点击了解更多。",
|
"RandomMAC_hover": "自动检测 - 表示设备是否随机化其 MAC 地址。您可通过 UI_NOT_RANDOM_MAC 设置排除特定MAC地址。点击了解更多。",
|
||||||
"Reports_Sent_Log": "已发送报告日志",
|
"Reports_Sent_Log": "已发送报告日志",
|
||||||
"SCAN_SUBNETS_description": "大多数网络扫描器(ARP-SCAN、NMAP、NSLOOKUP、DIG)依赖于扫描特定的网络接口和子网。查看<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">子网文档</a>以获取有关此设置的帮助,尤其是 VLAN、支持哪些 VLAN,或者如何确定网络掩码和接口。<br/> <br/> 网络扫描器的替代方法是启用一些其他不依赖于 NetAlert<sup>X</sup> 访问网络的设备扫描器/导入器(UNIFI、dhcp.leases、PiHole 等)。<br/> <br/> 注意:扫描时间本身取决于要检查的 IP 地址数量,因此请使用适当的网络掩码和接口仔细设置。",
|
"SCAN_SUBNETS_description": "大多数网络扫描器(ARP-SCAN、NMAP、NSLOOKUP、DIG)依赖于扫描特定的网络接口和子网。查看<a href=\"https://docs.netalertx.com/SUBNETS\" target=\"_blank\">子网文档</a>以获取有关此设置的帮助,尤其是 VLAN、支持哪些 VLAN,或者如何确定网络掩码和接口。<br/> <br/> 网络扫描器的替代方法是启用一些其他不依赖于 NetAlert<sup>X</sup> 访问网络的设备扫描器/导入器(UNIFI、dhcp.leases、PiHole 等)。<br/> <br/> 注意:扫描时间本身取决于要检查的 IP 地址数量,因此请使用适当的网络掩码和接口仔细设置。",
|
||||||
"SCAN_SUBNETS_name": "待扫描网络",
|
"SCAN_SUBNETS_name": "待扫描网络",
|
||||||
"SYSTEM_TITLE": "系统信息",
|
"SYSTEM_TITLE": "系统信息",
|
||||||
"Setting_Override": "覆盖值",
|
"Setting_Override": "覆盖值",
|
||||||
@@ -678,12 +678,12 @@
|
|||||||
"Systeminfo_System_Uptime": "正常运行时间:",
|
"Systeminfo_System_Uptime": "正常运行时间:",
|
||||||
"Systeminfo_This_Client": "此客户",
|
"Systeminfo_This_Client": "此客户",
|
||||||
"Systeminfo_USB_Devices": "USB 设备",
|
"Systeminfo_USB_Devices": "USB 设备",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ 检测到旧的挂载位置。请按照<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">本指南</a>迁移到新的 <code>/data/config</code> 和 <code>/data/db</code> 文件夹以及 <code>netalertx</code> 容器。",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ 检测到旧的挂载位置。请按照<a href=\"https://docs.netalertx.com/MIGRATION\" target=\"_blank\">本指南</a>迁移到新的 <code>/data/config</code> 和 <code>/data/db</code> 文件夹以及 <code>netalertx</code> 容器。",
|
||||||
"TIMEZONE_description": "时区可正确显示统计数据。在<a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">此处</a>查找您的时区。",
|
"TIMEZONE_description": "时区可正确显示统计数据。在<a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">此处</a>查找您的时区。",
|
||||||
"TIMEZONE_name": "时区",
|
"TIMEZONE_name": "时区",
|
||||||
"UI_DEV_SECTIONS_description": "选择在设备页面中隐藏哪些 UI 元素。",
|
"UI_DEV_SECTIONS_description": "选择在设备页面中隐藏哪些 UI 元素。",
|
||||||
"UI_DEV_SECTIONS_name": "隐藏设备部分",
|
"UI_DEV_SECTIONS_name": "隐藏设备部分",
|
||||||
"UI_ICONS_description": "预定义图标列表。请谨慎操作,添加图标的首选方法在<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">图标文档</a>中进行了描述。您可以添加 base64 编码的 SVG HTML 或 Font-awesome HTML 标签。",
|
"UI_ICONS_description": "预定义图标列表。请谨慎操作,添加图标的首选方法在<a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">图标文档</a>中进行了描述。您可以添加 base64 编码的 SVG HTML 或 Font-awesome HTML 标签。",
|
||||||
"UI_ICONS_name": "预定义图标",
|
"UI_ICONS_name": "预定义图标",
|
||||||
"UI_LANG_description": "选择首选的 UI 语言。在 <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a> 在线门户中帮助翻译或建议语言。",
|
"UI_LANG_description": "选择首选的 UI 语言。在 <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a> 在线门户中帮助翻译或建议语言。",
|
||||||
"UI_LANG_name": "用户界面语言",
|
"UI_LANG_name": "用户界面语言",
|
||||||
@@ -759,7 +759,7 @@
|
|||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
||||||
"settings_publishers_info": "使用 <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> 设置加载更多发布商",
|
"settings_publishers_info": "使用 <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> 设置加载更多发布商",
|
||||||
"settings_publishers_label": "出版商",
|
"settings_publishers_label": "出版商",
|
||||||
"settings_readonly": "无法读或写<code>app.conf</code>。请尝试重启容器并阅读<a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">文件权限文档</a>",
|
"settings_readonly": "无法读或写<code>app.conf</code>。请尝试重启容器并阅读<a href=\"https://docs.netalertx.com/FILE_PERMISSIONS\" target=\"_blank\">文件权限文档</a>",
|
||||||
"settings_saved": "<br/>设置已保存。<br/> 正在加载…<br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>设置已保存。<br/> 正在加载…<br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "系统",
|
"settings_system_label": "系统",
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ def main():
|
|||||||
# helpVal1 = "Something1", # Optional Helper values to be passed for mapping into the app
|
# helpVal1 = "Something1", # Optional Helper values to be passed for mapping into the app
|
||||||
# helpVal2 = "Something1", # If you need to use even only 1, add the remaining ones too
|
# helpVal2 = "Something1", # If you need to use even only 1, add the remaining ones too
|
||||||
# helpVal3 = "Something1", # and set them to 'null'. Check the the docs for details:
|
# helpVal3 = "Something1", # and set them to 'null'. Check the the docs for details:
|
||||||
# helpVal4 = "Something1", # https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md
|
# helpVal4 = "Something1", # https://docs.netalertx.com/PLUGINS_DEV
|
||||||
)
|
)
|
||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] New entries: "{len(device_data)}"'])
|
mylog('verbose', [f'[{pluginName}] New entries: "{len(device_data)}"'])
|
||||||
|
|||||||
@@ -414,11 +414,11 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The SMTP server host URL. For example <code>smtp-relay.sendinblue.com</code>. To use Gmail as an SMTP server <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SMTP.md\">follow this guide</a>"
|
"string": "The SMTP server host URL. For example <code>smtp-relay.sendinblue.com</code>. To use Gmail as an SMTP server <a target=\"_blank\" href=\"https://docs.netalertx.com/SMTP\">follow this guide</a>"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language_code": "es_es",
|
"language_code": "es_es",
|
||||||
"string": "La URL del host del servidor SMTP. Por ejemplo, <code>smtp-relay.sendinblue.com</code>. Para utilizar Gmail como servidor SMTP <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SMTP.md\">siga esta guía</a >"
|
"string": "La URL del host del servidor SMTP. Por ejemplo, <code>smtp-relay.sendinblue.com</code>. Para utilizar Gmail como servidor SMTP <a target=\"_blank\" href=\"https://docs.netalertx.com/SMTP\">siga esta guía</a >"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Overview
|
# Overview
|
||||||
|
|
||||||
- Feed your data and device changes into [Home Assistant](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HOME_ASSISTANT.md) via the MQTT Mosquito broker (other brokers might work as well).
|
- Feed your data and device changes into [Home Assistant](https://docs.netalertx.com/HOME_ASSISTANT) via the MQTT Mosquito broker (other brokers might work as well).
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
|
|||||||
@@ -312,7 +312,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Enable sending notifications via <a target=\"_blank\" href=\"https://www.home-assistant.io/integrations/mqtt/\">MQTT</a> to your Home Assistance instance. Usually, <code>on_notification</code> is recommended. See the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/HOME_ASSISTANT.md\">NetAlertX Home Assistant guide</a> for details."
|
"string": "Enable sending notifications via <a target=\"_blank\" href=\"https://www.home-assistant.io/integrations/mqtt/\">MQTT</a> to your Home Assistance instance. Usually, <code>on_notification</code> is recommended. See the <a target=\"_blank\" href=\"https://docs.netalertx.com/HOME_ASSISTANT\">NetAlertX Home Assistant guide</a> for details."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language_code": "es_es",
|
"language_code": "es_es",
|
||||||
|
|||||||
@@ -590,11 +590,11 @@ def publish_notifications(db, mqtt_client):
|
|||||||
|
|
||||||
# Publish to a single MQTT topic safely
|
# Publish to a single MQTT topic safely
|
||||||
topic = f"{topic_root}/notifications/all"
|
topic = f"{topic_root}/notifications/all"
|
||||||
mylog('debug', [f"[{pluginName}] Publishing notification GUID {notification["GUID"]} to MQTT topic {topic}"])
|
mylog('debug', [f"[{pluginName}] Publishing notification GUID {notification['GUID']} to MQTT topic {topic}"])
|
||||||
try:
|
try:
|
||||||
publish_mqtt(mqtt_client, topic, payload)
|
publish_mqtt(mqtt_client, topic, payload)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
mylog('minimal', [f"[{pluginName}] ⚠ ERROR publishing MQTT notification GUID {notification["GUID"]}: {e}"])
|
mylog('minimal', [f"[{pluginName}] ⚠ ERROR publishing MQTT notification GUID {notification['GUID']}: {e}"])
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
A plugin to publish a notification via the Webhook gateway. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href="https://n8n.io/" target="_blank">n8n</a> to name a few. Check out this simple <a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md" target="_blank">n8n guide here</a> to get started. If enabled, configure related settings below.
|
A plugin to publish a notification via the Webhook gateway. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href="https://n8n.io/" target="_blank">n8n</a> to name a few. Check out this simple <a href="https://docs.netalertx.com/WEBHOOK_N8N" target="_blank">n8n guide here</a> to get started. If enabled, configure related settings below.
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
|
|||||||
@@ -260,11 +260,11 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Enable webhooks for notifications. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a> to name a few. Check out this simple <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md\" target=\"_blank\">n8n guide here</a> to get started. If enabled, configure related settings below."
|
"string": "Enable webhooks for notifications. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a> to name a few. Check out this simple <a href=\"https://docs.netalertx.com/WEBHOOK_N8N\" target=\"_blank\">n8n guide here</a> to get started. If enabled, configure related settings below."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language_code": "es_es",
|
"language_code": "es_es",
|
||||||
"string": "Habilite webhooks para notificaciones. Los webhooks lo ayudan a conectarse a muchas herramientas de terceros, como IFTTT, Zapier o <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a>, por nombrar algunas. Consulte esta sencilla <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md\" target=\"_blank\">guía de n8n aquí</a> para obtener comenzó. Si está habilitado, configure los ajustes relacionados a continuación."
|
"string": "Habilite webhooks para notificaciones. Los webhooks lo ayudan a conectarse a muchas herramientas de terceros, como IFTTT, Zapier o <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a>, por nombrar algunas. Consulte esta sencilla <a href=\"https://docs.netalertx.com/WEBHOOK_N8N\" target=\"_blank\">guía de n8n aquí</a> para obtener comenzó. Si está habilitado, configure los ajustes relacionados a continuación."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -500,7 +500,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "When set, use this secret to generate the SHA256-HMAC hex digest value of the request body, which will be passed as the <code>X-Webhook-Signature</code> header to the request. You can find more information <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_SECRET.md\">here</a>."
|
"string": "When set, use this secret to generate the SHA256-HMAC hex digest value of the request body, which will be passed as the <code>X-Webhook-Signature</code> header to the request. You can find more information <a target=\"_blank\" href=\"https://docs.netalertx.com/WEBHOOK_SECRET\">here</a>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Most on-network scanners (ARP-SCAN, NMAP, NSLOOKUP, DIG) rely on scanning specific network interfaces and subnets. Check the [subnets documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md) for help on this setting, especially VLANs, what VLANs are supported, or how to figure out the network mask and your interface.
|
Most on-network scanners (ARP-SCAN, NMAP, NSLOOKUP, DIG) rely on scanning specific network interfaces and subnets. Check the [subnets documentation](https://docs.netalertx.com/SUBNETS) for help on this setting, especially VLANs, what VLANs are supported, or how to figure out the network mask and your interface.
|
||||||
|
|
||||||
An alternative to on-network scanners is to enable some other Device scanners/importers that don't rely on NetAlert<sup>X</sup> having access to the network (UNIFI, dhcp.leases, PiHole, etc.).
|
An alternative to on-network scanners is to enable some other Device scanners/importers that don't rely on NetAlert<sup>X</sup> having access to the network (UNIFI, dhcp.leases, PiHole, etc.).
|
||||||
|
|
||||||
> Note: The scan time itself depends on the number of IP addresses to check so set this up carefully with the appropriate network mask and interface.
|
> Note: The scan time itself depends on the number of IP addresses to check so set this up carefully with the appropriate network mask and interface.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> If you have a lot of offline devices, which should be online, look into using, or substituing, ARP scan with other scans, such as `NMAPDEV`. The [ARP scan protocol uses](https://networkencyclopedia.com/arp-command/) a cache so results may not be 100% reliable. You can find all available network scanning options (marked as `🔍 dev scanner`) in the [Plugins overview](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) readme.
|
> If you have a lot of offline devices, which should be online, look into using, or substituing, ARP scan with other scans, such as `NMAPDEV`. The [ARP scan protocol uses](https://networkencyclopedia.com/arp-command/) a cache so results may not be 100% reliable. You can find all available network scanning options (marked as `🔍 dev scanner`) in the [Plugins overview](https://docs.netalertx.com/PLUGINS) readme.
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
- Go to settings and set the `SCAN_SUBNETS` setting as per [subnets documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md).
|
- Go to settings and set the `SCAN_SUBNETS` setting as per [subnets documentation](https://docs.netalertx.com/SUBNETS).
|
||||||
- Enable the plugin by changing the RUN parameter from disabled to your preferred run time (usually: `schedule`).
|
- Enable the plugin by changing the RUN parameter from disabled to your preferred run time (usually: `schedule`).
|
||||||
- Specify the schedule in the `ARPSCAN_RUN_SCHD` setting
|
- Specify the schedule in the `ARPSCAN_RUN_SCHD` setting
|
||||||
- Adjust the timeout if needed in the `ARPSCAN_RUN_TIMEOUT` setting
|
- Adjust the timeout if needed in the `ARPSCAN_RUN_TIMEOUT` setting
|
||||||
|
|||||||
@@ -31,18 +31,6 @@ LOG_PATH = logPath + "/plugins"
|
|||||||
LOG_FILE = os.path.join(LOG_PATH, f"script.{pluginName}.log")
|
LOG_FILE = os.path.join(LOG_PATH, f"script.{pluginName}.log")
|
||||||
RESULT_FILE = os.path.join(LOG_PATH, f"last_result.{pluginName}.log")
|
RESULT_FILE = os.path.join(LOG_PATH, f"last_result.{pluginName}.log")
|
||||||
|
|
||||||
# DEBUG START
|
|
||||||
|
|
||||||
# mylog("debug", "User:", getpass.getuser())
|
|
||||||
mylog("verbose", "UID:", getattr(os, "getuid", lambda: "n/a")())
|
|
||||||
mylog("verbose", "Executable:", sys.executable)
|
|
||||||
mylog("verbose", "Python:", sys.version.split()[0])
|
|
||||||
mylog("verbose", "Virtualenv:", sys.prefix != sys.base_prefix)
|
|
||||||
mylog("verbose", "VIRTUAL_ENV:", os.environ.get("VIRTUAL_ENV"))
|
|
||||||
mylog("verbose", "CWD:", os.getcwd())
|
|
||||||
|
|
||||||
# DEBUG END
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description="Import devices from settings")
|
parser = argparse.ArgumentParser(description="Import devices from settings")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Plugin generating CSV backups of your Devices database table, including the network mappings. Can be used for importing your setup via the Maintenance > Backup / Restore > CSV Import feature (See also: [Devices Bulk Editing](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICES_BULK_EDITING.md)).
|
Plugin generating CSV backups of your Devices database table, including the network mappings. Can be used for importing your setup via the Maintenance > Backup / Restore > CSV Import feature (See also: [Devices Bulk Editing](https://docs.netalertx.com/DEVICES_BULK_EDITING)).
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Plugin for pinging existing devices via the [ping](https://linux.die.net/man/8/ping) network utility. The devices have to be accessible from the container. You can use this plugin with other suplementing plugins as described in the [subnets docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md).
|
Plugin for pinging existing devices via the [ping](https://linux.die.net/man/8/ping) network utility. The devices have to be accessible from the container. You can use this plugin with other suplementing plugins as described in the [subnets docs](https://docs.netalertx.com/SUBNETS).
|
||||||
|
|
||||||
This plugin can be used if you are getting false offline positives on specific devices. See the [Fix offline detection guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/FIX_OFFLINE_DETECTION.md) for details.
|
This plugin can be used if you are getting false offline positives on specific devices. See the [Fix offline detection guide](https://docs.netalertx.com/FIX_OFFLINE_DETECTION) for details.
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Enable a regular scan of your devices with PING to determine their status. If you select <code>schedule</code> the interval from below is applied, for which the recommendation is to <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md\" target=\"_blank\">align all scan schedules</a> otherwise false down reports will be generated."
|
"string": "Enable a regular scan of your devices with PING to determine their status. If you select <code>schedule</code> the interval from below is applied, for which the recommendation is to <a href=\"https://docs.netalertx.com/NOTIFICATIONS\" target=\"_blank\">align all scan schedules</a> otherwise false down reports will be generated."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -84,10 +84,10 @@
|
|||||||
{ "elementType": "select", "elementOptions": [], "transformers": [] }
|
{ "elementType": "select", "elementOptions": [], "transformers": [] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default_value": "ping",
|
"default_value": "fping",
|
||||||
"options": [
|
"options": [
|
||||||
"ping",
|
"fping",
|
||||||
"fping"
|
"ping"
|
||||||
],
|
],
|
||||||
"localized": ["name", "description"],
|
"localized": ["name", "description"],
|
||||||
"name": [
|
"name": [
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ def main():
|
|||||||
# helpVal1 = "Something1", # Optional Helper values to be passed for mapping into the app
|
# helpVal1 = "Something1", # Optional Helper values to be passed for mapping into the app
|
||||||
# helpVal2 = "Something1", # If you need to use even only 1, add the remaining ones too
|
# helpVal2 = "Something1", # If you need to use even only 1, add the remaining ones too
|
||||||
# helpVal3 = "Something1", # and set them to 'null'. Check the the docs for details:
|
# helpVal3 = "Something1", # and set them to 'null'. Check the the docs for details:
|
||||||
# helpVal4 = "Something1", # https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md
|
# helpVal4 = "Something1", # https://docs.netalertx.com/PLUGINS_DEV
|
||||||
)
|
)
|
||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] New entries: "{len(neighbors)}"'])
|
mylog('verbose', [f'[{pluginName}] New entries: "{len(neighbors)}"'])
|
||||||
|
|||||||
@@ -522,7 +522,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The MAC address of the device. Uneditable - Autodetected."
|
"string": "The MAC address of the device. Uneditable - Autodetected. Database column name: <code>devMac</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -554,7 +554,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The last known IP address of the device. Uneditable - Autodetected."
|
"string": "The last known IP address of the device. Uneditable - Autodetected. Database column name: <code>devLastIP</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -590,7 +590,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The name of the device. If the value is set to <code>(unknown)</code> or <code>(name not found)</code> the application will try to discover the name of the device."
|
"string": "The name of the device. If the value is set to <code>(unknown)</code> or <code>(name not found)</code> the application will try to discover the name of the device. Database column name: <code>devName</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -661,7 +661,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The icon associated with the device. Check the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">documentation on icons</a> for more details."
|
"string": "The icon associated with the device. Check the <a href=\"https://docs.netalertx.com/ICONS\" target=\"_blank\">documentation on icons</a> for more details. Database column name: <code>devIcon</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -705,7 +705,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The owner of the device."
|
"string": "The owner of the device. Database column name: <code>devOwner</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -754,7 +754,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The type of the device. Custom Network device types from the <code>NETWORK_DEVICE_TYPES</code> setting are not automatically added, you need to add it via the <code>+</code> button onthe device itself."
|
"string": "The type of the device. Custom Network device types from the <code>NETWORK_DEVICE_TYPES</code> setting are not automatically added, you need to add it via the <code>+</code> button onthe device itself. Database column name: <code>devType</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -786,7 +786,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The vendor of the device. If set to empty or <code>(unknown)</code> the app will try to auto-detect it."
|
"string": "The vendor of the device. If set to empty or <code>(unknown)</code> the app will try to auto-detect it. Database column name: <code>devVendor</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -821,7 +821,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether the device is marked as a favorite."
|
"string": "Indicates whether the device is marked as a favorite. Database column name: <code>devFavorite</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -865,7 +865,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The group to which the device belongs."
|
"string": "The group to which the device belongs. Database column name: <code>devGroup</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -909,7 +909,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The location of the device."
|
"string": "The location of the device. Database column name: <code>devLocation</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -940,7 +940,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Additional comments or notes about the device."
|
"string": "Additional comments or notes about the device. Database column name: <code>devComments</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -976,7 +976,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The date and time of the first connection with the device. Uneditable - Autodetected."
|
"string": "The date and time of the first connection with the device. Uneditable - Autodetected. Database column name: <code>devFirstConnection</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1012,7 +1012,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The date and time of the last seen connection with the device. Uneditable - Autodetected."
|
"string": "The date and time of the last seen connection with the device. Uneditable - Autodetected. Database column name: <code>devLastConnection</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1047,7 +1047,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether the device has a static IP address."
|
"string": "Indicates whether the device has a static IP address. Database column name: <code>devStaticIP</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1082,7 +1082,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Select if the device should be scanned."
|
"string": "Select if the device should be scanned. Database column name: <code>devScan</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1117,7 +1117,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether events related to the device shouldbe logged."
|
"string": "Indicates whether events related to the device shouldbe logged. Database column name: <code>devLogEvents</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1152,7 +1152,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether events related to the device should trigger alerts. The default value of the <code>Alert Events</code> checkbox. Down and New Device notifications are always sent unless unselected in <code>NTFPRCS_INCLUDED_SECTIONS</code>."
|
"string": "Indicates whether events related to the device should trigger alerts. The default value of the <code>Alert Events</code> checkbox. Down and New Device notifications are always sent unless unselected in <code>NTFPRCS_INCLUDED_SECTIONS</code>. Database column name: <code>devAlertEvents</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1187,7 +1187,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether an alert should be triggered when the device goes down. The device has to be down for longer than the time set in the <b>Alert Down After</b> <code>NTFPRCS_alert_down_time</code> setting."
|
"string": "Indicates whether an alert should be triggered when the device goes down. The device has to be down for longer than the time set in the <b>Alert Down After</b> <code>NTFPRCS_alert_down_time</code> setting. Database column name: <code>devAlertDown</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1227,7 +1227,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Enter number of <b>hours</b> for which repeated notifications should be ignored for. If you select <code>0</code> then you get notified on all events."
|
"string": "Enter number of <b>hours</b> for which repeated notifications should be ignored for. If you select <code>0</code> then you get notified on all events. Database column name: <code>devSkipRepeated</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1263,7 +1263,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The date and time of the last notification sent for the device. Uneditable - Autodetected."
|
"string": "The date and time of the last notification sent for the device. Uneditable - Autodetected. Database column name: <code>devLastNotification</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1298,7 +1298,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether the device should be marked as present after detected in a scan."
|
"string": "Indicates whether the device was present in a scan. Database column name: <code>devPresentLastScan</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1333,7 +1333,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether the device is considered a new device. The default value of the <code>New Device</code> checkbox. If checked this will show the New status for the device and include it in lists when the New Devices filter is active. Doesn't affect notifications."
|
"string": "Indicates whether the device is considered a new device. The default value of the <code>New Device</code> checkbox. If checked this will show the New status for the device and include it in lists when the New Devices filter is active. Doesn't affect notifications. Database column name: <code>devIsNew</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1368,7 +1368,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether the device is archived. If you archive a device and the device is offline it will be hidden from My Devices."
|
"string": "Indicates whether the device is archived. If you archive a device and the device is offline it will be hidden from My Devices. Database column name: <code>devIsArchived</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1396,7 +1396,7 @@
|
|||||||
{
|
{
|
||||||
"name": "value",
|
"name": "value",
|
||||||
"type": "sql",
|
"type": "sql",
|
||||||
"value": "SELECT '❌None' as name, '' as id UNION SELECT devName as name, devMac as id FROM Devices WHERE EXISTS (SELECT 1 FROM Settings WHERE setKey = 'NETWORK_DEVICE_TYPES' AND LOWER(setValue) LIKE '%' || LOWER(devType) || '%' AND devType <> '')"
|
"value": "SELECT '❌None' as name, '' as id UNION SELECT devName as name, devMac as id FROM Devices WHERE devIsArchived == 0 AND EXISTS (SELECT 1 FROM Settings WHERE setKey = 'NETWORK_DEVICE_TYPES' AND LOWER(setValue) LIKE '%' || LOWER(devType) || '%' AND devType <> '')"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "target_macs",
|
"name": "target_macs",
|
||||||
@@ -1417,7 +1417,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The MAC address of the Parent network node."
|
"string": "The MAC address of the Parent network node. Database column name: <code>devParentMAC</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1451,7 +1451,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Defines the relationship between this device and its parent. Selecting <code>nic</code> links it as a network interface, allowing the parent’s online status to be evaluated using its <code>devReqNicsOnline</code> (“Require NICs Online”) setting. Some relationship types may hide the device from lists; see the <code>UI_hide_rel_types</code> setting for details."
|
"string": "Defines the relationship between this device and its parent. Selecting <code>nic</code> links it as a network interface, allowing the parent’s online status to be evaluated using its <code>devReqNicsOnline</code> (“Require NICs Online”) setting. Some relationship types may hide the device from lists; see the <code>UI_hide_rel_types</code> setting for details. Database column name: <code>devParentRelType</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1482,7 +1482,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The port number of the network node."
|
"string": "The port number of the network node. Database column name: <code>devParentPort</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1510,7 +1510,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Children nodes assigned to this device. Navigate to the child device directly to edit the relationship and details."
|
"string": "Children nodes assigned to this device. Navigate to the child device directly to edit the relationship and details. Database column name: <code>N/A</code> (evaluated dynamically)."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1541,7 +1541,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The network SSID."
|
"string": "The network SSID. Database column name: <code>devSSID</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1584,7 +1584,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The network site."
|
"string": "The network site. Database column name: <code>devSite</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1620,7 +1620,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "The name of the Sync Node. Uneditable - Auto-populated via the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/sync/README.md\" target=\"_blank\">Sync plugin</a> if enabled."
|
"string": "The name of the Sync Node. Uneditable - Auto-populated via the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/sync/README.md\" target=\"_blank\">Sync plugin</a> if enabled. Database column name: <code>devSyncHubNode</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1726,7 +1726,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Custom device properties to store additional data or to perform an action on the device. Check the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md\" target=\"_blank\">documentation on Custom Properties</a> for additional details."
|
"string": "Custom device properties to store additional data or to perform an action on the device. Check the <a href=\"https://docs.netalertx.com/CUSTOM_PROPERTIES\" target=\"_blank\">documentation on Custom Properties</a> for additional details. Database column name: <code>devCustomProps</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1762,7 +1762,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Fully Qualified Domain Name - Autodetected and Uneditable. Can be auto-refreshed by enabling the <code>REFRESH_FQDN</code> setting."
|
"string": "Fully Qualified Domain Name - Autodetected and Uneditable. Can be auto-refreshed by enabling the <code>REFRESH_FQDN</code> setting. Database column name: <code>devFQDN</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1797,7 +1797,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Indicates whether this device should be considered online only if all associated NICs (devices with the <code>nic</code> relationship type) are online. If disabled, the device is considered online if any NIC is online."
|
"string": "Indicates whether this device should be considered online only if all associated NICs (devices with the <code>nic</code> relationship type) are online. If disabled, the device is considered online if any NIC is online. Database column name: <code>devReqNicsOnline</code>."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1825,7 +1825,7 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Children nodes with the <code>nic</code> Relationship Type. Navigate to the child device directly to edit the relationship and details."
|
"string": "Children nodes with the <code>nic</code> Relationship Type. Navigate to the child device directly to edit the relationship and details. Database column name: <code>N/A</code> (evaluated dynamically)."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
**NMAP-scan** is a command-line tool used to discover and fingerprint IP hosts on your network.
|
**NMAP-scan** is a command-line tool used to discover and fingerprint IP hosts on your network.
|
||||||
The NMAP-scan (and other Network-scan plugins using the `SCAN_SUBNETS` setting) runtime depends on the number of IP addresses to check — so configure it carefully with the appropriate **network mask** and **interface**.
|
The NMAP-scan (and other Network-scan plugins using the `SCAN_SUBNETS` setting) runtime depends on the number of IP addresses to check — so configure it carefully with the appropriate **network mask** and **interface**.
|
||||||
|
|
||||||
Refer to the [subnets documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md) for help with setting up VLANs, understanding which VLANs are supported, and determining your network mask and interface.
|
Refer to the [subnets documentation](https://docs.netalertx.com/SUBNETS) for help with setting up VLANs, understanding which VLANs are supported, and determining your network mask and interface.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The `NMAPDEV` plugin is excellent for detecting device availability, but **ARP-scan** is better for scanning across multiple VLANs and subnets.
|
> The `NMAPDEV` plugin is excellent for detecting device availability, but **ARP-scan** is better for scanning across multiple VLANs and subnets.
|
||||||
> NMAP cannot retrieve MAC addresses from other subnets (an NMAP limitation), which are often required to identify devices.
|
> NMAP cannot retrieve MAC addresses from other subnets (an NMAP limitation), which are often required to identify devices.
|
||||||
> You can safely combine different scan methods.
|
> You can safely combine different scan methods.
|
||||||
> See all available network scanning options (marked with `🔍 dev scanner`) in the [Plugins overview](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md).
|
> See all available network scanning options (marked with `🔍 dev scanner`) in the [Plugins overview](https://docs.netalertx.com/PLUGINS).
|
||||||
|
|
||||||
This plugin is **not optimized for name resolution** (use `NSLOOKUP` or `AVAHISCAN` instead), but if a name is available it will appear in the **Resolved Name** column.
|
This plugin is **not optimized for name resolution** (use `NSLOOKUP` or `AVAHISCAN` instead), but if a name is available it will appear in the **Resolved Name** column.
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ This plugin is **not optimized for name resolution** (use `NSLOOKUP` or `AVAHISC
|
|||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
1. In **Settings**, configure the `SCAN_SUBNETS` value as described in the [subnets documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md).
|
1. In **Settings**, configure the `SCAN_SUBNETS` value as described in the [subnets documentation](https://docs.netalertx.com/SUBNETS).
|
||||||
The plugin automatically **strips unsupported `--vlan` parameters** and replaces `--interface` with `-e`.
|
The plugin automatically **strips unsupported `--vlan` parameters** and replaces `--interface` with `-e`.
|
||||||
2. Enable the plugin by setting the `RUN` parameter from `disabled` to your preferred run mode (usually `schedule`).
|
2. Enable the plugin by setting the `RUN` parameter from `disabled` to your preferred run mode (usually `schedule`).
|
||||||
3. Specify the schedule using the `NMAPDEV_RUN_SCHD` setting.
|
3. Specify the schedule using the `NMAPDEV_RUN_SCHD` setting.
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ function checkAuthorization($method) {
|
|||||||
if ($auth_header !== $expected_token) {
|
if ($auth_header !== $expected_token) {
|
||||||
http_response_code(403);
|
http_response_code(403);
|
||||||
echo 'Forbidden';
|
echo 'Forbidden';
|
||||||
write_notification("[Plugin: SYNC] Incoming data: Incorrect API Token (".$method.")", "alert");
|
displayInAppNoti("[Plugin: SYNC] Incoming data: Incorrect API Token (".$method.")", "error");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ if ($method === 'GET') {
|
|||||||
// Return JSON response
|
// Return JSON response
|
||||||
jsonResponse(200, $response_data, 'OK');
|
jsonResponse(200, $response_data, 'OK');
|
||||||
|
|
||||||
write_notification("[Plugin: SYNC] Data sent", "info");
|
displayInAppNoti("[Plugin: SYNC] Data sent", "info");
|
||||||
|
|
||||||
}
|
}
|
||||||
// receiving data (this is a HUB)
|
// receiving data (this is a HUB)
|
||||||
@@ -93,11 +93,11 @@ else if ($method === 'POST') {
|
|||||||
file_put_contents($file_path_new, $data);
|
file_put_contents($file_path_new, $data);
|
||||||
http_response_code(200);
|
http_response_code(200);
|
||||||
echo 'Data received and stored successfully';
|
echo 'Data received and stored successfully';
|
||||||
write_notification("[Plugin: SYNC] Data received ({$file_path_new})", "info");
|
displayInAppNoti("[Plugin: SYNC] Data received ({$file_path_new})", "info");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
http_response_code(405);
|
http_response_code(405);
|
||||||
echo 'Method Not Allowed';
|
echo 'Method Not Allowed';
|
||||||
write_notification("[Plugin: SYNC] Method Not Allowed", "alert");
|
displayInAppNoti("[Plugin: SYNC] Method Not Allowed", "error");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user