Merge remote-tracking branch 'upstream/main' into add-caddy-and-authentik-sso-documentation

This commit is contained in:
luckylinux
2026-01-15 06:05:49 +01:00
129 changed files with 3843 additions and 2890 deletions

View File

@@ -14,7 +14,7 @@ body:
label: What document or section does this relate to?
description: |
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:
required: true
- type: textarea
@@ -49,7 +49,7 @@ body:
required: false
- type: checkboxes
attributes:
label: Can I help implement this? 👩‍💻👨‍💻
label: Can I help implement this? 👩‍💻👨‍💻
description: The maintainer can provide guidance and review your changes.
options:
- label: "Yes, Id like to help implement the improvement"

View File

@@ -5,7 +5,7 @@ body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an open or closed issue already exists for the feature you are requesting.
description: Please search to see if an open or closed issue already exists for the feature you are requesting.
options:
- label: I have searched the existing open and closed issues
required: true
@@ -32,21 +32,21 @@ body:
label: Anything else?
description: |
Links? References? Mockups? Anything that will give us more context about the feature you are encountering!
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: true
- type: checkboxes
attributes:
label: Am I willing to test this? 🧪
description: I rely on the community to test unreleased features. If you are requesting a feature, please be willing to test it within 48h of test request. Otherwise, the feature might be pulled from the code base.
description: I rely on the community to test unreleased features. If you are requesting a feature, please be willing to test it within 48h of test request. Otherwise, the feature might be pulled from the code base.
options:
- label: I will do my best to test this feature on the `netlertx-dev` image when requested within 48h and report bugs to help deliver a great user experience for everyone and not to break existing installations.
required: true
- type: checkboxes
attributes:
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/
label: Can I help implement this? 👩‍💻👨‍💻
description: The maintainer will provide guidance and help. The implementer will read the PR guidelines https://docs.netalertx.com/DEV_ENV_SETUP/
options:
- label: "Yes"
- label: "No"

View File

@@ -21,7 +21,7 @@ body:
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.
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
- type: checkboxes
attributes:
@@ -87,7 +87,7 @@ body:
PASTE LOG HERE. Using the triple backticks preserves format.
```
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.***
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!

View File

@@ -21,11 +21,11 @@ body:
label: Did I research?
description: Please confirm you checked the usual places before opening a setup support request.
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
- label: I have searched the existing open and closed issues
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
- type: checkboxes
attributes:
@@ -61,7 +61,7 @@ body:
attributes:
label: app.log
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.***
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!

View File

@@ -52,7 +52,7 @@ Backend loop phases (see `server/__main__.py` and `server/plugin.py`): `once`, `
## Conventions & helpers to reuse
- Settings: add/modify via `ccd()` in `server/initialise.py` or perplugin 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.
- 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 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.
- 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
- 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.
- plugin logs: `/tmp/log/plugins/*.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`
- nginx logs: `/tmp/log/nginx-access.log` and `/tmp/log/nginx-error.log`

View File

@@ -3,7 +3,10 @@ name: Deploy MkDocs
on:
push:
branches:
- main # Change if your default branch is different
- main
permissions:
contents: write
jobs:
deploy:
@@ -19,7 +22,15 @@ jobs:
- name: Install MkDocs
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
run: mkdocs gh-deploy --force

View File

@@ -12,7 +12,7 @@ Please use the [GitHub Issue Tracker](https://github.com/jokob-sk/NetAlertX/issu
- Documentation feedback 📖
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)
---
@@ -27,7 +27,7 @@ Please:
- Follow existing **code style and structure**
- Provide a clear title and description for your PR
- 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)
---
@@ -47,7 +47,7 @@ By participating, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md
## 📬 Contact
If you have more in-depth questions or want to discuss contributing in other ways, feel free to reach out at:
If you have more in-depth questions or want to discuss contributing in other ways, feel free to reach out at:
📧 [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX%20Contribution)
We appreciate every contribution, big or small! 💙

View File

@@ -6,7 +6,7 @@
# 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
@@ -34,7 +34,7 @@ Get visibility of what's going on on your WIFI/LAN network and enable presence d
## 🚀 Quick Start
> [!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:
@@ -60,14 +60,14 @@ docker compose up --force-recreate --build
# 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 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]
@@ -88,7 +88,7 @@ For other install methods, check the [installation docs](#-documentation)
### 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
@@ -96,12 +96,12 @@ Send notifications to more than 80+ services, including Telegram via [Apprise](h
### 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
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).
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://docs.netalertx.com/PLUGINS#readme) in as little as [15 minutes](https://www.youtube.com/watch?v=cdbxlwiWhv8).
### 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
@@ -109,15 +109,15 @@ The [workflows module](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WORK
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] 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)
- [[Setup] Usage and Configuration](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md)
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
- [[Setup] Usage and Configuration](https://docs.netalertx.com/README)
- [[Development] API docs](https://docs.netalertx.com/API)
- [[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
@@ -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.
**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?**
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
- 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.
- 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.
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
<!--- --------------------------------------------------------------------- --->

View File

@@ -33,7 +33,7 @@ NSLOOKUP_RUN='before_name_updates'
AVAHISCAN_RUN='before_name_updates'
NBTSCAN_RUN='before_name_updates'
# Email
# Email
#-------------------------------------
# (add SMTP to LOADED_PLUGINS to load)
#-------------------------------------
@@ -48,20 +48,19 @@ SMTP_PASS='password'
SMTP_SKIP_TLS=False
# Webhook
# Webhook
#-------------------------------------
# (add WEBHOOK to LOADED_PLUGINS to load)
#-------------------------------------
WEBHOOK_RUN='disabled' # use 'on_notification' to enable
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
# in https://github.com/jokob-sk/NetAlertX/blob/main/docs/webhook_json_sample.json
WEBHOOK_PAYLOAD='json' # webhook payload data format for the "body > attachements > text" attribute
# supported values: 'json', 'html' or 'text'
# e.g.: for discord use 'html'
WEBHOOK_REQUEST_METHOD='GET'
# Apprise
# Apprise
#-------------------------------------
# (add APPRISE to LOADED_PLUGINS to load)
#-------------------------------------
@@ -71,7 +70,7 @@ APPRISE_URL='mailto://smtp-relay.sendinblue.com:587?from=user@gmail.com&name=app
# NTFY
#-------------------------------------
#-------------------------------------
# (add NTFY to LOADED_PLUGINS to load)
#-------------------------------------
NTFY_RUN='disabled' # use 'on_notification' to enable
@@ -81,7 +80,7 @@ NTFY_USER='user'
NTFY_PASSWORD='passw0rd'
# PUSHSAFER
# PUSHSAFER
#-------------------------------------
# (add PUSHSAFER to LOADED_PLUGINS to load)
#-------------------------------------
@@ -89,7 +88,7 @@ PUSHSAFER_RUN='disabled' # use 'on_notification' to enable
PUSHSAFER_TOKEN='ApiKey'
# MQTT
# MQTT
#-------------------------------------
# (add MQTT to LOADED_PLUGINS to load)
#-------------------------------------

View File

@@ -18,7 +18,6 @@ Only specific, pre-approved log files can be purged for security and stability r
```
app.log
app_front.log
IP_changes.log
stdout.log
stderr.log

View File

@@ -1,7 +1,7 @@
# [Deprecated] API endpoints
> [!WARNING]
> Some of these endpoints will be deprecated soon. Please refere to the new [API](API.md) endpoints docs for details on the new API layer.
> [!WARNING]
> Some of these endpoints will be deprecated soon. Please refere to the new [API](API.md) endpoints docs for details on the new API layer.
NetAlertX comes with a couple of API endpoints. All requests need to be authorized (executed in a logged in browser session) or you have to pass the value of the `API_TOKEN` settings as authorization bearer, for example:
@@ -56,7 +56,7 @@ See also: [Debugging GraphQL issues](./DEBUG_API_SERVER.md)
### `curl` Command
You can use the following `curl` command to execute the query.
You can use the following `curl` command to execute the query.
```sh
curl 'http://host:GRAPHQL_PORT/graphql' -X POST -H 'Authorization: Bearer API_TOKEN' -H 'Content-Type: application/json' --data '{
@@ -127,9 +127,9 @@ The response will be in JSON format, similar to the following:
}
```
## API Endpoint: JSON files
## API Endpoint: JSON files
This API endpoint retrieves static files, that are periodically updated.
This API endpoint retrieves static files, that are periodically updated.
- Endpoint URL: `php/server/query_json.php?file=<file name>`
- Host: `same as front end (web ui)`
@@ -147,18 +147,18 @@ In the container, these files are located under the API directory (default: `/tm
You can access the following files:
| File name | Description |
|----------------------|----------------------|
| File name | Description |
|----------------------|----------------------|
| `notification_json_final.json` | The json version of the last notification (e.g. used for webhooks - [sample JSON](https://github.com/jokob-sk/NetAlertX/blob/main/front/report_templates/webhook_json_sample.json)). |
| `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_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)|
| `language_strings.json` | The content of the language_strings table, which in turn is loaded from the plugins `config.json` definitions. |
| `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://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. |
| `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. |
| `app_state.json` | Contains the current application state. |
### JSON Data format
@@ -169,11 +169,11 @@ The endpoints starting with the `table_` prefix contain most, if not all, data c
"data": [
{
"db_column_name": "data",
"db_column_name2": "data2"
},
"db_column_name2": "data2"
},
{
"db_column_name": "data3",
"db_column_name2": "data4"
"db_column_name2": "data4"
}
]
}
@@ -201,7 +201,7 @@ Example JSON of the `table_devices.json` endpoint with two Devices (database row
"devParentMAC": "",
"devParentPort": "",
"devIcon": "globe"
},
},
{
"devMac": "a4:8f:ff:aa:ba:1f",
"devName": "Net - USG",
@@ -332,7 +332,7 @@ Grafana template sample: [Download json](./samples/API/Grafana_Dashboard.json)
## API Endpoint: /log files
This API endpoint retrieves files from the `/tmp/log` folder.
This API endpoint retrieves files from the `/tmp/log` folder.
- Endpoint URL: `php/server/query_logs.php?file=<file name>`
- Host: `same as front end (web ui)`
@@ -357,7 +357,7 @@ This API endpoint retrieves files from the `/tmp/log` folder.
## API Endpoint: /config files
To retrieve files from the `/data/config` folder.
To retrieve files from the `/data/config` folder.
- Endpoint URL: `php/server/query_config.php?file=<file name>`
- Host: `same as front end (web ui)`

View File

@@ -118,11 +118,14 @@ curl -X DELETE "http://<server_ip>:<GRAPHQL_PORT>/sessions/delete" \
```
#### `curl` Example
**get sessions for mac**
```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" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Accept: application/json"
```
---
### Calendar View of Sessions

78
docs/API_SSE.md Normal file
View 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 |
---

View File

@@ -1,8 +1,8 @@
## Authelia support
> [!WARNING]
>
> This is community contributed content and work in progress. Contributions are welcome.
> [!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.
```yaml
theme: dark
@@ -274,4 +274,4 @@ notifier:
subject: "[Authelia] {title}"
startup_check_address: postmaster@MYOTHERDOMAIN.LTD
```
```

1
docs/CNAME Normal file
View File

@@ -0,0 +1 @@
docs.netalertx.com

View File

@@ -1,15 +1,21 @@
# 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)
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
- 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently)
- 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/)
- ▶ [How to Setup Pi.Alert on Your Synology NAS - Digital Aloha](https://www.youtube.com/watch?v=M4YhpuRFaUg)
- ▶ [How to Setup Pi.Alert on Your Synology NAS - Digital Aloha](https://www.youtube.com/watch?v=M4YhpuRFaUg)
- 📄 [防蹭网神器,网络安全助手 | 极空间部署网络扫描和通知系统『NetAlertX』](https://blog.csdn.net/qq_63499861/article/details/141105273)
- 📄 [시놀/헤놀에서 네트워크 스캐너 Pi.Alert Docker로 설치 및 사용하기](https://blog.dalso.org/article/%EC%8B%9C%EB%86%80-%ED%97%A4%EB%86%80%EC%97%90%EC%84%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%8A%A4%EC%BA%90%EB%84%88-pi-alert-docker%EB%A1%9C-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9) (July 2023)
- 📄 [网络入侵探测器Pi.Alert (Chinese)](https://codeantenna.com/a/VgUvIAjZ7J) (May 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)
- ▶ [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)

View File

@@ -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
@@ -74,12 +49,39 @@ Visible properties (`CUSTPROP_show: true`) are displayed as interactive icons in
3. **Device Removal**:
- 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
- **Plugin Functionality**: The `run_plugin` action type is currently not implemented and will show an alert if used.
- **Custom Icons (Experimental 🧪)**: Use Base64-encoded HTML to provide custom icons for each property. You can add your icons in Setttings via the `CUSTPROP_icon` settings
- **Custom Icons (Experimental 🧪)**: Use Base64-encoded HTML to provide custom icons for each property. You can add your icons in Setttings via the `CUSTPROP_icon` settings
- **Visibility Control**: Only properties with `CUSTPROP_show: true` will appear on the listing page.
This feature provides a flexible way to enhance device management and display with interactive elements tailored to your needs.

View File

@@ -26,7 +26,7 @@ The database and device structure may change with new releases. When using the C
![Maintenance > CSV Export](./img/DEVICES_BULK_EDITING/MAINTENANCE_CSV_EXPORT.png)
> [!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)
![Settings > CSV Backup](./img/DEVICES_BULK_EDITING/CSV_BACKUP_SETTINGS.png)

View File

@@ -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.
- **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.
- **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`,

View File

@@ -1,7 +1,7 @@
# NetAlertX and Docker Compose
> [!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.
@@ -69,6 +69,8 @@ services:
PORT: ${PORT:-20211} # Application port
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.
# PUID: 20211 # Runtime PUID override, set to 0 to run as root
# PGID: 20211 # Runtime PGID override
# Resource limits to prevent resource exhaustion
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.
## Example Configuration Summaries
Here are the essential modifications for common alternative setups.
### 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.

View File

@@ -6,7 +6,7 @@
# 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">
@@ -16,12 +16,12 @@
Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and screenshots 📷.
> [!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
> [!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
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.
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
@@ -48,11 +48,11 @@ See alternative [docked-compose examples](https://github.com/jokob-sk/NetAlertX/
| 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` |
| `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` |
|`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"}` |
|`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
> [!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 |
| :------------- | :------------- | :-------------|
| ✅ | `:/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. |
| | `:/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. |
| | `:/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). |
| | `:/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). |
| | `:/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://docs.netalertx.com/PLUGINS). |
| | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://docs.netalertx.com/REVERSE_DNS). |
### Folder structure
@@ -100,23 +100,23 @@ sudo chmod -R a+rwx /local_data_dir
#### 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]
> 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
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.
#### 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).
- 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

View File

@@ -1,7 +1,7 @@
# The NetAlertX Container Operator's Guide
> [!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.

View File

@@ -1,5 +1,9 @@
# 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.
---
@@ -68,4 +72,3 @@ networks:
* 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.

View File

@@ -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`.
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
...
environment:
PUID: 20211 # Runtime PUID override
PUID: 20211 # Runtime PUID override, set to 0 to run as root
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
1. **Run the container once as root** (`--user "0"`) to allow it to correct permissions automatically:

View File

@@ -2,24 +2,24 @@
## Installation options
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] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
- [[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] Docker (recommended)](https://docs.netalertx.com/DOCKER_INSTALLATION)
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
- [[Installation] Unraid App](https://unraid.net/community/apps)
- [[Installation] Bare metal (experimental - looking for maintainers)](https://docs.netalertx.com/HW_INSTALL)
## Help
If facing issues, please spend a few minutes seraching.
If facing issues, please spend a few minutes seraching.
- Check [common issues](./COMMON_ISSUES.md)
- Have a look at [Community guides](./COMMUNITY_GUIDES.md)
- [Search closed or open issues or discussions](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue)
- Have a look at [Community guides](./COMMUNITY_GUIDES.md)
- [Search closed or open issues or discussions](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue)
- Check [Discord](https://discord.gg/NczTUTWyRr)
> [!NOTE]
> If you can't find a solution anywhere, ask in Discord if you think it's a quick question, otherwise open a new [issue](https://github.com/jokob-sk/NetAlertX/issues/new?template=setup-help.yml). Please fill in as much as possible to speed up the help process.
> If you can't find a solution anywhere, ask in Discord if you think it's a quick question, otherwise open a new [issue](https://github.com/jokob-sk/NetAlertX/issues/new?template=setup-help.yml). Please fill in as much as possible to speed up the help process.
>

View File

@@ -297,5 +297,5 @@ sudo chmod -R a+rwx /local_data_dir
```
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.

File diff suppressed because it is too large Load Diff

View 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

View 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 (08)
| 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 (912)
| 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_Value24`: 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 HelpVal24):
```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 912), 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

View 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)

View 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

View 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

View File

@@ -1,5 +1,9 @@
# 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]
> 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`)
>

View File

@@ -1,16 +1,16 @@
## ⚙ Setting system
This is an explanation how settings are handled intended for anyone thinking about writing their own plugin or contributing to the project.
This is an explanation how settings are handled intended for anyone thinking about writing their own plugin or contributing to the project.
If you are a user of the app, settings have a detailed description in the _Settings_ section of the app. Open an issue if you'd like to clarify any of the settings.
If you are a user of the app, settings have a detailed description in the _Settings_ section of the app. Open an issue if you'd like to clarify any of the settings.
### 🛢 Data storage
The source of truth for user-defined values is the `app.conf` file. Editing the file makes the App overwrite values in the `Settings` database table and in the `table_settings.json` file.
The source of truth for user-defined values is the `app.conf` file. Editing the file makes the App overwrite values in the `Settings` database table and in the `table_settings.json` file.
#### Settings database table
The `Settings` database table contains settings for App run purposes. The table is recreated every time the App restarts. The settings are loaded from the source-of-truth, that is the `app.conf` file. A high-level overview on the database structure can be found in the [database documentation](./DATABASE.md).
The `Settings` database table contains settings for App run purposes. The table is recreated every time the App restarts. The settings are loaded from the source-of-truth, that is the `app.conf` file. A high-level overview on the database structure can be found in the [database documentation](./DATABASE.md).
#### table_settings.json
@@ -22,23 +22,23 @@ The json file is also cached on the client-side local storage of the browser.
#### app.conf
> [!NOTE]
> [!NOTE]
> This is the source of truth for settings. User-defined values in this files always override default values specified in the Plugin definition.
The App generates two `app.conf` entries for every setting (Since version 23.8+). One entry is the setting value, the second is the `__metadata` associated with the setting. This `__metadata` entry contains the full setting definition in JSON format. Currently unused, but intended to be used in future to extend the Settings system.
#### Plugin settings
> [!NOTE]
> [!NOTE]
> 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]
### Settings Process flow
The process flow is mostly managed by the [initialise.py](/server/initialise.py) file.
The process flow is mostly managed by the [initialise.py](/server/initialise.py) file.
The script is responsible for reading user-defined values from a configuration file (`app.conf`), initializing settings, and importing them into a database. It also handles plugins and their configurations.

View File

@@ -1,7 +1,11 @@
# Webhook Secrets
> [!NOTE]
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
> 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]
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
## How does the signing work?
@@ -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).
You can find examples for validating a webhook delivery [here](https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries#examples).

View File

@@ -3,7 +3,7 @@
## Issue Description
NetAlertX automatically detects the legacy `aufs` storage driver, which is commonly found on older Synology NAS devices (DSM 6.x/7.0.x) or Linux systems where the underlying filesystem lacks `d_type` support. This occurs on older ext4 and other filesystems which did not support capabilites at time of last formatting. While ext4 currently support capabilities and filesystem overlays, older variants of ext4 did not and require a reformat to enable the support. Old variants result in docker choosing `aufs` and newer may use `overlayfs`.
NetAlertX automatically detects the legacy `aufs` storage driver, which is commonly found on older Synology NAS devices (DSM 6.x/7.0.x) or Linux systems where the underlying filesystem lacks `d_type` support. This occurs on older ext4 and other filesystems which did not support capabilites at time of last formatting. While ext4 currently support capabilities and filesystem overlays, older variants of ext4 did not and require a reformat to enable the support. Old variants result in docker choosing `aufs` and newer may use `overlayfs`.
**The Technical Limitation:**
AUFS (Another Union File System) does not support or preserve extended file attributes (`xattrs`) during Docker image extraction. NetAlertX relies on these attributes to grant granular privileges (`CAP_NET_RAW` and `CAP_NET_ADMIN`) to network scanning binaries like `arp-scan`, `nmap`, and `nbtscan`.
@@ -27,7 +27,7 @@ The container is designed to inspect the runtime environment at startup (`/root-
### Warning Log
When AUFS is detected without root privileges, the system emits the following warning during startup:
> ⚠️ WARNING: Reduced functionality (AUFS + non-root user).
>
>
> AUFS strips Linux file capabilities, so tools like arp-scan, nmap, and nbtscan fail when NetAlertX runs as a non-root PUID.
>
> **Action:** Set PUID=0 on AUFS hosts for full functionality.
@@ -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/)
* **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)

View File

@@ -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.
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)

View File

@@ -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.
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)

View File

@@ -27,5 +27,5 @@ Option B: Run with a custom UID/GID
## Additional Resources
- Default compose and tmpfs guidance: [DOCKER_COMPOSE.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md)
- General Docker install and runtime notes: [DOCKER_INSTALLATION.md](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_INSTALLATION.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://docs.netalertx.com/DOCKER_INSTALLATION)

View File

@@ -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.
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]

View File

@@ -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.
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)

View File

@@ -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.
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)

View File

@@ -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.
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)

View File

@@ -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.
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)

View File

@@ -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.
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)

View File

@@ -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.
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)

View File

@@ -1,3 +1,9 @@
---
hide:
- navigation
- toc
---
# 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.
@@ -15,7 +21,7 @@ NetAlertX provides contextual help within the application:
## Installation Guides
The app can be installed different ways, with the best support of the docker-based deployments. This includes the Home Assistant and Unraid installation approaches. See details below.
The app can be installed different ways, with the best support of the docker-based deployments. This includes the Home Assistant and Unraid installation approaches. See details below.
### Docker (Fully Supported)
@@ -29,13 +35,13 @@ This guide will take you through the process of setting up NetAlertX using Docke
You can install NetAlertX also as a Home Assistant addon [![Home Assistant](https://img.shields.io/badge/Repo-blue?logo=home-assistant&style=for-the-badge&color=0aa8d2&logoColor=fff&label=Add)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) via the [alexbelgium/hassio-addons](https://github.com/alexbelgium/hassio-addons/) repository. This is only possible if you run a supervised instance of Home Assistant. If not, you can still run NetAlertX in a separate Docker container and follow this guide to configure MQTT.
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
### Unraid (Partial Support)
The Unraid template was created by the community, so it's only partially supported. Alternatively, here is [another version of the Unraid template](https://github.com/jokob-sk/NetAlertX-unraid).
The Unraid template was created by the community, so it's only partially supported. Alternatively, here is [another version of the Unraid template](https://github.com/jokob-sk/NetAlertX-unraid).
- [[Installation] Unraid App](https://unraid.net/community/apps)
- [[Installation] Unraid App](https://unraid.net/community/apps)
### Bare-Metal Installation (Experimental)
@@ -55,7 +61,7 @@ If you need help or run into issues, here are some resources to guide you:
- [Check common issues](./DEBUG_TIPS.md#common-issues) to see if your problem has already been reported.
- [Look at closed issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed) for possible solutions to past problems.
- **Enable debugging** to gather more information: [Debug Guide](./DEBUG_TIPS.md).
**Need more help?** Join the community discussions or submit a support request:
- Visit the [GitHub Discussions](https://github.com/jokob-sk/NetAlertX/discussions) for community support.

View File

@@ -1,5 +1,5 @@
<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>
</a>
</span>

View File

@@ -111,7 +111,7 @@ function getDeviceData() {
// Group for device main information
DevDetail_MainInfo_Title: {
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",
inputGroupClasses: "field-group main-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label",
@@ -120,7 +120,7 @@ function getDeviceData() {
// Group for event and alert settings
DevDetail_EveandAl_Title: {
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",
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label",
@@ -129,7 +129,7 @@ function getDeviceData() {
// Group for network details
DevDetail_MainInfo_Network_Title: {
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",
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
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.
DevDetail_DisplayFields_Title: {
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",
inputGroupClasses: "field-group display-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label",
@@ -147,7 +147,7 @@ function getDeviceData() {
// Group for session information
DevDetail_SessionInfo_Title: {
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",
inputGroupClasses: "field-group session-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label",
@@ -156,7 +156,7 @@ function getDeviceData() {
// Group for Children.
DevDetail_Children_Title: {
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",
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
labelClasses: "col-sm-12 col-xs-12 control-label",
@@ -165,7 +165,7 @@ function getDeviceData() {
// Group for Custom properties.
DevDetail_CustomProperties_Title: {
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",
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
labelClasses: "col-sm-12 col-xs-12 control-label",
@@ -223,7 +223,7 @@ function getDeviceData() {
if (setting.setKey == "NEWDEV_devMac" && deviceData["devIsRandomMAC"] == true) {
inlineControl += `<span class="input-group-addon pointer"
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>
</a>
</span>`;

View File

@@ -31,8 +31,6 @@
if (!file_exists($confPath) && file_exists('../config/app.conf')) {
$confPath = '../config/app.conf';
}
checkPermissions([$dbPath, $confPath]);
?>
<!-- ----------------------------------------------------------------------- -->

View File

@@ -11,5 +11,6 @@ function getApiBase()
apiBase = `${protocol}://${host}:${port}`;
}
return apiBase;
// Remove trailing slash for consistency
return apiBase.replace(/\/$/, '');
}

View File

@@ -1339,11 +1339,19 @@ function updateApi(apiEndpoints)
// value has to be in format event|param. e.g. run|ARPSCAN
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({
method: "POST",
url: "php/server/util.php",
data: { function: "addToExecutionQueue", action: action },
url: url,
headers: {
"Authorization": "Bearer " + apiToken,
"Content-Type": "application/json"
},
data: JSON.stringify({ action: action }),
success: function(data, textStatus) {
console.log(data)
}
@@ -1578,11 +1586,19 @@ function restartBackend() {
modalEventStatusId = 'modal-message-front-event'
const apiToken = getSetting("API_TOKEN");
const apiBaseUrl = getApiBase();
const url = `${apiBaseUrl}/logs/add-to-execution-queue`;
// Execute
$.ajax({
method: "POST",
url: "php/server/util.php",
data: { function: "addToExecutionQueue", action: `${getGuid()}|cron_restart_backend` },
url: url,
headers: {
"Authorization": "Bearer " + apiToken,
"Content-Type": "application/json"
},
data: JSON.stringify({ action: `${getGuid()}|cron_restart_backend` }),
success: function(data, textStatus) {
// showModalOk ('Result', data );
@@ -1620,9 +1636,18 @@ function clearCache() {
}, 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() {
// 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) {
const importedMilliseconds = parseInt(appState["settingsImported"] * 1000);
const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time'));
@@ -1636,7 +1661,7 @@ function checkSettingChanges() {
});
}
// -----------------------------------------------------------------------------
// ===================================================================
// Display spinner and reload page if not yet initialized
async function handleFirstLoad(callback) {
if (!isAppInitialized()) {
@@ -1645,7 +1670,7 @@ async function handleFirstLoad(callback) {
}
}
// -----------------------------------------------------------------------------
// ===================================================================
// Execute callback once the app is initialized and GraphQL server is running
async function callAfterAppInitialized(callback) {
if (!isAppInitialized() || !(await isGraphQLServerRunning())) {
@@ -1657,7 +1682,7 @@ async function callAfterAppInitialized(callback) {
}
}
// -----------------------------------------------------------------------------
// ===================================================================
// Polling function to repeatedly check if the server is running
async function waitForGraphQLServer() {
const pollInterval = 2000; // 2 seconds between each check

View File

@@ -441,11 +441,14 @@ function safeDecodeURIComponent(content) {
// -----------------------------------------------------------------------------
// 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() {
const apiBase = getApiBase();
const apiToken = getSetting("API_TOKEN");
const notificationEndpoint = `${apiBase}/messaging/in-app/unread`;
const notificationEndpoint = `${getApiBase()}/messaging/in-app/unread`;
$.ajax({
url: notificationEndpoint,
@@ -458,7 +461,6 @@ function checkNotification() {
{
// Find the oldest unread notification with 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) {
// Show modal dialog with the oldest unread notification
@@ -471,11 +473,10 @@ function checkNotification() {
if($("#modal-ok").is(":visible") == false)
{
showModalOK("Notification", decodedContent, function() {
const apiBase = getApiBase();
const apiToken = getSetting("API_TOKEN");
// Mark the notification as read
$.ajax({
url: `${apiBase}/messaging/in-app/read/${oldestInterruptNotification.guid}`,
const apiToken = getSetting("API_TOKEN");
// Mark the notification as read
$.ajax({
url: `${getApiBase()}/messaging/in-app/read/${oldestInterruptNotification.guid}`,
type: 'POST',
headers: { "Authorization": `Bearer ${apiToken}` },
success: function(response) {
@@ -494,8 +495,6 @@ function checkNotification() {
});
}
}
handleUnreadNotifications(allUnreadNotification.length)
}
},
error: function() {
@@ -579,8 +578,9 @@ function addOrUpdateNumberBrackets(input, count) {
}
// Start checking for notifications periodically
setInterval(checkNotification, 3000);
// Check for interrupt-level notifications (modal display) less frequently now that count is via SSE
// 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

223
front/js/sse_manager.js Normal file
View 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();

View File

@@ -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 = [
'app_state.json',
'plugins.json',

View File

@@ -291,10 +291,19 @@ function execute_settingEvent(element) {
// value has to be in format event|param. e.g. run|ARPSCAN
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({
method: "POST",
url: "php/server/util.php",
data: { function: "addToExecutionQueue", action: action },
url: url,
headers: {
"Authorization": "Bearer " + apiToken,
"Content-Type": "application/json"
},
data: JSON.stringify({ action: action }),
success: function(data, textStatus) {
// showModalOk ('Result', data );

View File

@@ -63,7 +63,7 @@ $db->close();
<div class="db_info_table">
<div class="db_info_table_row">
<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 class="db_info_table_cell">
<div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
@@ -543,7 +543,7 @@ function ExportCSV()
const apiBase = getApiBase();
const apiToken = getSetting("API_TOKEN");
const url = `${apiBase}/devices/export/csv`;
fetch(url, {
method: 'GET',
headers: {
@@ -565,16 +565,16 @@ function ExportCSV()
a.href = downloadUrl;
a.download = 'devices.csv';
document.body.appendChild(a);
// Trigger download
a.click();
// Cleanup after a short delay
setTimeout(() => {
window.URL.revokeObjectURL(downloadUrl);
document.body.removeChild(a);
}, 100);
showMessage('Export completed successfully');
})
.catch(error => {
@@ -673,13 +673,25 @@ function performLogManage() {
console.log("targetLogFile:" + targetLogFile)
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({
method: "POST",
url: "php/server/util.php",
data: { function: logFileAction, settings: targetLogFile },
method: "DELETE",
url: url,
headers: {
"Authorization": "Bearer " + apiToken,
"Content-Type": "application/json"
},
success: function(data, textStatus) {
showModalOk ('Result', data );
showModalOk('Result', data.message || 'Log file purged successfully');
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);
}
})
}

View File

@@ -175,7 +175,7 @@
}
} else if (elementType === 'input'){
} else if (elementType === 'input' || elementType === 'textarea'){
// Add classes specifically for checkboxes
inputType === 'checkbox' ? inputClass = 'checkbox' : inputClass = 'form-control';

View File

@@ -11,7 +11,7 @@
<!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper">
<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>
</a>
</span>

View File

@@ -1,7 +1,7 @@
<?php
//------------------------------------------------------------------------------
// NetAlertX
// Open Source Network Guard / WIFI & LAN intrusion detector
// Open Source Network Guard / WIFI & LAN intrusion detector
//
// db.php - Front module. Server side. DB common file
//------------------------------------------------------------------------------
@@ -71,7 +71,7 @@ function SQLite3_connect($trytoreconnect = true, $retryCount = 0) {
if (!is_dir($lockDir) && !@mkdir($lockDir, 0775, true)) {
die("Log directory not found and could not be created: $lockDir");
}
// Write unlock status to the locked file
file_put_contents($DBFILE_LOCKED_FILE, '0');
@@ -97,14 +97,14 @@ function SQLite3_connect($trytoreconnect = true, $retryCount = 0) {
} else {
// Maximum retries reached, hide loading spinner and show failure alert
$message = 'Failed to connect to database after ' . $retryCount . ' retries.';
write_notification($message);
displayInAppNoti($message);
return false; // Or handle the failure appropriately
}
}
}
//------------------------------------------------------------------------------
// ->query override to handle retries
// ->query override to handle retries
//------------------------------------------------------------------------------
class CustomDatabaseWrapper {
private $sqlite;
@@ -123,72 +123,72 @@ class CustomDatabaseWrapper {
// Check if the query is an UPDATE, DELETE, or INSERT
$queryType = strtoupper(substr(trim($query), 0, strpos(trim($query), ' ')));
$isModificationQuery = in_array($queryType, ['UPDATE', 'DELETE', 'INSERT']);
$attempts = 0;
while ($attempts < $this->maxRetries) {
$result = false;
try {
$result = $this->sqlite->query($query);
$result = $this->sqlite->query($query);
} catch (Exception $exception) {
// continue unless maxRetries reached
if($attempts > $this->maxRetries)
{
throw $exception;
}
}
}
}
if ($result !== false and $result !== null) {
$this->query_log_remove($query);
return $result;
}
$this->query_log_add($query);
$this->query_log_add($query);
$attempts++;
usleep($this->retryDelay * 1000 * $attempts); // Retry delay in milliseconds
}
// If all retries failed, throw an exception or handle the error as needed
// Add '0' to indicate that the database is not locked/execution failed
// Add '0' to indicate that the database is not locked/execution failed
file_put_contents($DBFILE_LOCKED_FILE, '0');
$message = 'Error executing query (attempts: ' . $attempts . '), query: ' . $query;
$message = 'Error executing query (attempts: ' . $attempts . '), query: ' . $query;
// write_notification($message);
error_log("Query failed after {$this->maxRetries} attempts: " . $this->sqlite->lastErrorMsg());
error_log("Query failed after {$this->maxRetries} attempts: " . $this->sqlite->lastErrorMsg());
return false;
}
public function query_log_add($query)
{
global $DBFILE_LOCKED_FILE;
// Remove new lines from the query
$query = str_replace(array("\r", "\n"), ' ', $query);
// Generate a hash of the query
$queryHash = md5($query);
// Log the query being attempted along with timestamp and query hash
$executionLog = "1|" . date('Y-m-d H:i:s') . "|$queryHash|$query";
error_log("Attempting to write '$executionLog' to execution log file after failed query: $query");
file_put_contents($DBFILE_LOCKED_FILE, $executionLog . PHP_EOL, FILE_APPEND);
error_log("Execution log file content after failed query attempt: " . file_get_contents($DBFILE_LOCKED_FILE));
}
public function query_log_remove($query)
{
global $DBFILE_LOCKED_FILE;
// Remove new lines from the query
$query = str_replace(array("\r", "\n"), ' ', $query);
// Generate a hash of the query
$queryHash = md5($query);
// Remove the entry corresponding to the finished query from the execution log based on query hash
$executionLogs = file($DBFILE_LOCKED_FILE, FILE_IGNORE_NEW_LINES);
$executionLogs = array_filter($executionLogs, function($log) use ($queryHash) {
@@ -218,8 +218,8 @@ function OpenDB($DBPath = null) {
if (strlen($DBFILE) == 0) {
$message = 'Database not available';
echo '<script>alert("'.$message.'")</script>';
write_notification($message);
displayInAppNoti($message);
die('<div style="padding-left:150px">'.$message.'</div>');
}
@@ -228,7 +228,7 @@ function OpenDB($DBPath = null) {
} catch (Exception $e) {
$message = "Error connecting to the database";
echo '<script>alert("'.$message.': '.$e->getMessage().'")</script>';
write_notification($message);
displayInAppNoti($message);
die('<div style="padding-left:150px">'.$message.'</div>');
}

View File

@@ -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
}
?>

View File

@@ -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">&#9733</span>&nbsp'. $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;
}
}
?>

View File

@@ -5,5 +5,4 @@ require dirname(__FILE__).'/../templates/globals.php';
require dirname(__FILE__).'/db.php';
require dirname(__FILE__).'/util.php';
require dirname(__FILE__).'/../templates/language/lang.php';
require dirname(__FILE__).'/utilNotification.php';
?>

View File

@@ -3,7 +3,7 @@
// NetAlertX
// 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
//------------------------------------------------------------------------------
@@ -18,7 +18,6 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
$FUNCTION = [];
$SETTINGS = [];
$ACTION = "";
// init request params
if(array_key_exists('function', $_REQUEST) != FALSE)
@@ -39,264 +38,16 @@ switch ($FUNCTION) {
saveSettings();
break;
case 'cleanLog':
cleanLog($SETTINGS);
break;
case 'addToExecutionQueue':
if(array_key_exists('action', $_REQUEST) != FALSE)
{
$ACTION = $_REQUEST['action'];
}
addToExecutionQueue($ACTION);
break;
default:
// Handle any other cases or errors if needed
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, '&amp;')
.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()
{
global $SETTINGS, $FUNCTION, $config_file, $fullConfPath, $configFolderPath, $timestamp;
@@ -307,12 +58,12 @@ function saveSettings()
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
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];
$settingValue = $setting[3];
// // Parse the settingType JSON
// $settingType = json_decode($settingTypeJson, true);
// Sanity check
if($setKey == "UI_LANG" && $settingValue == "") {
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";
// open new file and write the new configuration
// Create a temporary file
$tempConfPath = $fullConfPath . ".tmp";
// Backup the original file
if (file_exists($fullConfPath)) {
copy($fullConfPath, $fullConfPath . ".bak");
@@ -426,29 +171,10 @@ function saveSettings()
fwrite($file, $txt);
fclose($file);
// displayMessage(lang('settings_saved'),
// FALSE, TRUE, TRUE, TRUE);
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 -----🔺
// check server/api_server/api_server_start.py for equivalents
@@ -479,7 +205,6 @@ function getSettingValue($setKey) {
foreach ($data['data'] as $setting) {
if ($setting['setKey'] === $setKey) {
return $setting['setValue'];
// echo $setting['setValue'];
}
}
@@ -488,166 +213,44 @@ function getSettingValue($setKey) {
}
// -------------------------------------------------------------------------------------------
function encode_single_quotes ($val) {
$result = str_replace ('\'','{s-quote}',$val);
return $result;
}
// -------------------------------------------------------------------------------------------
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) ) .'"';
}
// Helper function to send notifications via the backend API endpoint
// -------------------------------------------------------------------------------------------
function quotes ($text) {
return str_replace ('"','""',$text);
function displayInAppNoti($message, $level = 'error') {
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(
['&', '<', '>', '"', "'"],
['&amp;', '&lt;', '&gt;', '&quot;', '&#039;'],
$str
);
}
// -------------------------------------------------------------------------------------------
// Decode special chars
function decodeSpecialChars($str) {
return str_replace(
['&amp;', '&lt;', '&gt;', '&quot;', '&#039;'],
['&', '<', '>', '"', "'"],
$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);
}
?>
?>

View File

@@ -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([]);
}
}
?>

View File

@@ -12,7 +12,7 @@
#---------------------------------------------------------------------------------#
-->
<?php
<?php
//------------------------------------------------------------------------------
// check if authenticated
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
@@ -24,17 +24,17 @@
<!-- NetAlertX footer with url -->
<a href="https://github.com/jokob-sk/NetAlertX" target="_blank">Net<b>Alert</b><sup>x</sup></a>
<!-- To the right -->
<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://jokob-sk.github.io/NetAlertX/" 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://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'; ?>
| Version: <?php include 'php/templates/version.php'; ?>
|
| <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://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://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'; ?>
| Version: <?php include 'php/templates/version.php'; ?>
|
</div>
</footer>

View File

@@ -44,6 +44,7 @@
<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/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/modal.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 -->
<script>
// -------------------------------------------------------------
// Updates the backend application state/status in the header
function updateState(){
// ===================================================================
// DEPRECATED: updateState() - Replaced by SSE-based state manager
// 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) {
document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', '');
setTimeout("updateState()", 1000);
})
}
// -------------------------------------------------------------
// ===================================================================
// updates the date and time in the header
function update_servertime() {
// Get the current date and time in the specified time zone
@@ -481,7 +486,9 @@
// Update server time in the header
update_servertime()
// Update server state in the header
updateState()
// Initialize SSE-based state manager (replaces updateState polling)
if (typeof netAlertXStateManager !== 'undefined') {
netAlertXStateManager.init();
}
</script>

View 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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -765,4 +765,4 @@
"settings_system_label": "تسمية النظام",
"settings_update_item_warning": "تحذير تحديث العنصر",
"test_event_tooltip": "تلميح اختبار الحدث"
}
}

View File

@@ -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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Eliminar dispositiu",
"DevDetail_button_DeleteEvents": "Esborrar Esdeveniments",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Guardar",
"DeviceEdit_ValidMacIp": "Entra una adreça <b>IP</b> i <b>Mac</b> vàlides.",
"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_MassActions": "Accions massives:",
"Device_MultiEdit_No_Devices": "Cap dispositiu seleccionat.",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Tot",
"Device_Title": "Dispositius",
"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)",
"ENCRYPTION_KEY_description": "Clau de xifrat de dades.",
"ENCRYPTION_KEY_name": "Clau d'encriptació",
@@ -344,14 +344,14 @@
"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_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_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_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_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",
"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",
@@ -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.",
"Maintenance_InitCheck": "Init Check",
"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_ReCheck": "Tornar a comprovar",
"Maintenance_Running_Version": "Versió instal·lada",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Nom del node",
"Network_Parent": "Dispositiu de xarxa pare",
"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_ShowArchived": "Mostra els arxivats",
"Network_ShowOffline": "Mostra fora de línia",
@@ -593,7 +593,7 @@
"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.",
"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",
"SYSTEM_TITLE": "Informació de sistema",
"Setting_Override": "Valor de sobreescriptura",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Uptime:",
"Systeminfo_This_Client": "Aquest Client",
"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_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_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_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",
@@ -759,10 +759,10 @@
"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_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_system_icon": "fa-solid fa-gear",
"settings_system_label": "Sistema",
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
}
}

View File

@@ -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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Gerät löschen",
"DevDetail_button_DeleteEvents": "Ereignisse löschen",
@@ -202,7 +202,7 @@
"DevDetail_button_Save": "Speichern",
"DeviceEdit_ValidMacIp": "Gib eine gültige <b>MAC</b>- und <b>IP</b>-Adresse ein.",
"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_MassActions": "Massen aktionen:",
"Device_MultiEdit_No_Devices": "Keine Geräte ausgewählt.",
@@ -257,7 +257,7 @@
"Device_Tablelenght_all": "Alle",
"Device_Title": "Geräte",
"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",
"ENCRYPTION_KEY_description": "Schlüssel zur Datenverschlüsselung.",
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
@@ -348,7 +348,7 @@
"Gen_Warning": "Warnung",
"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_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_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.",
@@ -636,7 +636,7 @@
"REPORT_TITLE": "Bericht",
"REPORT_TO_description": "Email address to which the notification will be send 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",
"RandomMAC_hover": "Automatisch erkannt - gibt an, ob das Gerät seine MAC-Adresse zufällig ermittelt.",
"Reports_Sent_Log": "Protokoll gesendeter Berichte",
@@ -648,7 +648,7 @@
"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_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_SKIP_LOGIN_description": "Do not use authentication when connecting to the SMTP server.",
"SMTP_SKIP_LOGIN_name": "Skip authentication",
@@ -762,7 +762,7 @@
"WEBHOOK_PAYLOAD_name": "Payload type",
"WEBHOOK_REQUEST_METHOD_description": "The HTTP request method to be used for the webhook call.",
"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_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",
@@ -838,4 +838,4 @@
"settings_system_label": "System",
"settings_update_item_warning": "",
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
}
}

View File

@@ -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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Delete Device",
"DevDetail_button_DeleteEvents": "Delete Events",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Save",
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
"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_MassActions": "Mass actions:",
"Device_MultiEdit_No_Devices": "No devices selected.",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "All",
"Device_Title": "Devices",
"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",
"ENCRYPTION_KEY_description": "Data encryption key.",
"ENCRYPTION_KEY_name": "Encryption key",
@@ -344,14 +344,14 @@
"Gen_Warning": "Warning",
"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_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_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_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_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",
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
"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.",
"Maintenance_InitCheck": "Init check",
"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_ReCheck": "Retry check",
"Maintenance_Running_Version": "Installed version",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Node name",
"Network_Parent": "Parent network device",
"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_ShowArchived": "Show archived",
"Network_ShowOffline": "Show offline",
@@ -593,7 +593,7 @@
"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.",
"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",
"SYSTEM_TITLE": "System Information",
"Setting_Override": "Override value",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Uptime:",
"Systeminfo_This_Client": "This Client",
"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_name": "Time zone",
"UI_DEV_SECTIONS_description": "Select which UI elements to hide in the devices pages.",
"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_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",
@@ -759,7 +759,7 @@
"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_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_system_icon": "fa-solid fa-gear",
"settings_system_label": "System",

30
front/php/templates/language/es_es.json Executable file → Normal file
View 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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Eliminar dispositivo",
"DevDetail_button_DeleteEvents": "Eliminar eventos",
@@ -200,7 +200,7 @@
"DevDetail_button_Save": "Guardar",
"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_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_MassActions": "Acciones masivas:",
"Device_MultiEdit_No_Devices": "",
@@ -255,7 +255,7 @@
"Device_Tablelenght_all": "Todos",
"Device_Title": "Dispositivos",
"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",
"ENCRYPTION_KEY_description": "Llave de cifrado de datos.",
"ENCRYPTION_KEY_name": "Llave de cifrado",
@@ -346,14 +346,14 @@
"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_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_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_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_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",
"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",
@@ -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.",
"Maintenance_InitCheck": "Validación inicial",
"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_ReCheck": "Reintentar validación",
"Maintenance_Running_Version": "Versión instalada",
@@ -563,7 +563,7 @@
"Network_Node_Name": "Nombre de nodo",
"Network_Parent": "Dispositivo primario de la red",
"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_ShowArchived": "Mostrar archivado",
"Network_ShowOffline": "Mostrar fuera de línea",
@@ -634,11 +634,11 @@
"REPORT_TITLE": "Reporte",
"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_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",
"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",
"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",
"SMTP_FORCE_SSL_description": "Forzar SSL al conectarse a su servidor SMTP",
"SMTP_FORCE_SSL_name": "Forzar SSL",
@@ -646,7 +646,7 @@
"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_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_SKIP_LOGIN_description": "No utilice la autenticación cuando se conecte al servidor SMTP.",
"SMTP_SKIP_LOGIN_name": "Omitir autenticación",
@@ -738,12 +738,12 @@
"Systeminfo_System_Uptime": "Tiempo de actividad:",
"Systeminfo_This_Client": "Este cliente",
"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_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_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_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",
@@ -830,10 +830,10 @@
"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_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_system_icon": "fa-solid fa-gear",
"settings_system_label": "Sistema",
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>",
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
}
}

View File

@@ -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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -27,8 +27,8 @@
"AppEvents_ObjectType": "Type d'objet",
"AppEvents_Plugin": "Plugin",
"AppEvents_Type": "Type",
"BACKEND_API_URL_description": "",
"BACKEND_API_URL_name": "",
"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": "URL de l'API backend",
"BackDevDetail_Actions_Ask_Run": "Voulez-vous exécuter cette action?",
"BackDevDetail_Actions_Not_Registered": "Action non enregistrée: ",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Supprimer l'appareil",
"DevDetail_button_DeleteEvents": "Supprimer les événements",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Enregistrer",
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
"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_MassActions": "Actions en masse:",
"Device_MultiEdit_No_Devices": "Aucun appareil sélectionné.",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Tous",
"Device_Title": "Appareils",
"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",
"ENCRYPTION_KEY_description": "Clé de chiffrement des données.",
"ENCRYPTION_KEY_name": "Clé de chiffrement",
@@ -344,14 +344,14 @@
"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_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_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_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_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",
"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",
@@ -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.",
"Maintenance_InitCheck": "Vérification initiale",
"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_ReCheck": "Relancer la vérification",
"Maintenance_Running_Version": "Version installée",
@@ -388,7 +388,7 @@
"Maintenance_Tool_ExportCSV": "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_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_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.",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Nom du nœud",
"Network_Parent": "Appareil du réseau principal",
"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_ShowArchived": "Montrer les archivés",
"Network_ShowOffline": "Montrer les hors ligne",
@@ -593,7 +593,7 @@
"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.",
"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",
"SYSTEM_TITLE": "Informations système",
"Setting_Override": "Remplacer la valeur",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Durée d'activité:",
"Systeminfo_This_Client": "Ce client",
"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_name": "Fuseau horaire",
"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_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_LANG_description": "Sélectionnez votre langue préféré de linterface. 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",
@@ -759,10 +759,10 @@
"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_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_system_icon": "fa-solid fa-gear",
"settings_system_label": "Système",
"settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. <b>Il n'y a pas de pas de contrôle.</b>",
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
}
}

View File

@@ -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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -27,8 +27,8 @@
"AppEvents_ObjectType": "Tipo oggetto",
"AppEvents_Plugin": "Plugin",
"AppEvents_Type": "Tipo",
"BACKEND_API_URL_description": "",
"BACKEND_API_URL_name": "",
"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": "URL API backend",
"BackDevDetail_Actions_Ask_Run": "Vuoi eseguire questa azione?",
"BackDevDetail_Actions_Not_Registered": "Azione non registrata: ",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Elimina dispositivo",
"DevDetail_button_DeleteEvents": "Elimina eventi",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Salva",
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
"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_MassActions": "Azioni di massa:",
"Device_MultiEdit_No_Devices": "Nessun dispositivo selezionato.",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Tutti",
"Device_Title": "Dispositivi",
"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",
"ENCRYPTION_KEY_description": "Chiave di crittografia dei dati.",
"ENCRYPTION_KEY_name": "Chiave di crittografia",
@@ -344,14 +344,14 @@
"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_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_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_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_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",
"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",
@@ -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.",
"Maintenance_InitCheck": "Controllo iniziale",
"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_ReCheck": "Riprova controllo",
"Maintenance_Running_Version": "Versione installata",
@@ -388,7 +388,7 @@
"Maintenance_Tool_ExportCSV": "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_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_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.",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Nome nodo",
"Network_Parent": "Dispositivo di rete principale",
"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_ShowArchived": "Mostra archiviati",
"Network_ShowOffline": "Mostra offline",
@@ -593,7 +593,7 @@
"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ù.",
"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",
"SYSTEM_TITLE": "Informazioni sistema",
"Setting_Override": "Sovrascrivi valore",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Tempo di attività:",
"Systeminfo_This_Client": "Questo client",
"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_name": "Fuso orario",
"UI_DEV_SECTIONS_description": "Seleziona quali elementi della UI nascondere nella pagina dei 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_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",
@@ -759,10 +759,10 @@
"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_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_system_icon": "fa-solid fa-gear",
"settings_system_label": "Sistema",
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>",
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
}
}

View 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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -27,8 +27,8 @@
"AppEvents_ObjectType": "オブジェクトタイプ",
"AppEvents_Plugin": "プラグイン",
"AppEvents_Type": "種別",
"BACKEND_API_URL_description": "",
"BACKEND_API_URL_name": "",
"BACKEND_API_URL_description": "バックエンドAPIのURLを生成するために使用します。リバースプロキシを使用して<code>GRAPHQL_PORT</code>にマッピングする場合は指定してください。ポート番号を含む<code>http://</code>で始まる完全なURLを入力してください末尾のスラッシュ<code>/</code>は不要です)。",
"BACKEND_API_URL_name": "バックエンド API URL",
"BackDevDetail_Actions_Ask_Run": "このアクションを実行してよろしいですか?",
"BackDevDetail_Actions_Not_Registered": "登録されていないアクション: ",
"BackDevDetail_Actions_Title_Run": "アクションを実行",
@@ -185,7 +185,7 @@
"DevDetail_Vendor_hover": "ベンダーは自動検出されるべきです。カスタム値を上書きまたは追加できます。",
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "デバイスの削除",
"DevDetail_button_DeleteEvents": "イベントの削除",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "保存",
"DeviceEdit_ValidMacIp": "有効な<b>Mac</b>と<b>IP</b>アドレスを入力します.",
"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_MassActions": "大量のアクション:",
"Device_MultiEdit_No_Devices": "デバイスが選択されていません。",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "全て",
"Device_Title": "デバイス",
"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": "有効プラグイン",
"ENCRYPTION_KEY_description": "データ暗号化キー。",
"ENCRYPTION_KEY_name": "暗号化キー",
@@ -344,14 +344,14 @@
"Gen_Warning": "警告",
"Gen_Work_In_Progress": "作業中、https://github.com/jokob-sk/NetAlertX/issues へのフィードバックの好機です",
"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_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_name": "新規デバイスの削除",
"HRS_TO_KEEP_OFFDEV_description": "これは<b>デバイスを削除</b>するメンテナンス設定です。有効にした場合(<code>0</code>は無効)、<b>オフライン</b>状態のデバイスの内、<b>最終接続日時</b>が指定された時間より古いものは削除されます。<b>オフラインデバイス</b>を<code>X</code>時間経過後に自動削除したい場合に使用してください。",
"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": "読み込まれたプラグイン",
"LOG_LEVEL_description": "この設定により、より詳細なログ出力が有効になります。データベースへのイベント書き込みのデバッグに有用です。",
"LOG_LEVEL_name": "追加のログ出力",
@@ -375,7 +375,7 @@
"Maint_Restart_Server_noti_text": "バックエンドサーバーを再起動してもよろしいですか?アプリの不整合が発生する可能性があります。まず設定のバックアップを行ってください。<br/> <br/> 注:この操作には数分かかる場合があります。",
"Maintenance_InitCheck": "初期化チェック",
"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_ReCheck": "再試行チェック",
"Maintenance_Running_Version": "インストールバージョン",
@@ -388,7 +388,7 @@
"Maintenance_Tool_ExportCSV": "デバイスエクスポートcsv",
"Maintenance_Tool_ExportCSV_noti": "デバイスエクスポート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_noti": "デバイスインポートcsv",
"Maintenance_Tool_ImportCSV_noti_text": "CSVファイルを本当にインポートしますかこれによりデータベース内のデバイスが完全に<b>上書き</b>されます。",
@@ -536,7 +536,7 @@
"Network_Node_Name": "ノード名",
"Network_Parent": "親ネットワークデバイス",
"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_ShowArchived": "アーカイブを表示",
"Network_ShowOffline": "オフラインを表示",
@@ -593,7 +593,7 @@
"REPORT_TITLE": "レポート",
"RandomMAC_hover": "自動検出 - デバイスがMACアドレスをランダム化しているかどうかを示します。UI_NOT_RANDOM_MAC設定で特定のMACアドレスを除外できます。詳細はこちらをクリックしてください。",
"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": "スキャン対象ネットワーク",
"SYSTEM_TITLE": "システム情報",
"Setting_Override": "上書き値",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "稼働時間:",
"Systeminfo_This_Client": "使用中のクライアント",
"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_name": "タイムゾーン",
"UI_DEV_SECTIONS_description": "デバイスページで非表示にするUI要素を選択してください。",
"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_LANG_description": "お好みのUI言語を選択してください。翻訳のお手伝いや言語の提案は、<a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>のオンラインポータルで行えます。",
"UI_LANG_name": "UI言語",
@@ -759,7 +759,7 @@
"settings_publishers_icon": "fa-solid fa-paper-plane",
"settings_publishers_info": "<a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>設定でさらに多くのパブリッシャーを読み込みます",
"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_system_icon": "fa-solid fa-gear",
"settings_system_label": "システム",

18
front/php/templates/language/nb_no.json Executable file → Normal file
View File

@@ -185,7 +185,7 @@
"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_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_Delete": "Slett Enhet",
"DevDetail_button_DeleteEvents": "Slett Hendelser",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Lagre",
"DeviceEdit_ValidMacIp": "",
"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_MassActions": "Flerhandlinger:",
"Device_MultiEdit_No_Devices": "",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Alle",
"Device_Title": "Enheter",
"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",
"ENCRYPTION_KEY_description": "",
"ENCRYPTION_KEY_name": "",
@@ -351,7 +351,7 @@
"HRS_TO_KEEP_NEWDEV_name": "Behold nye enheter for",
"HRS_TO_KEEP_OFFDEV_description": "",
"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",
"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",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Node navn",
"Network_Parent": "Foreldre nettverksenhet",
"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_ShowArchived": "",
"Network_ShowOffline": "",
@@ -593,7 +593,7 @@
"REPORT_TITLE": "Rapport",
"RandomMAC_hover": "Autodetektert - indikerer om enheten randomiserer MAC-adressen sin.",
"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": "",
"SYSTEM_TITLE": "Systeminformasjon",
"Setting_Override": "Overstyr verdi",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Oppetid:",
"Systeminfo_This_Client": "Denne klienten",
"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_name": "Tidssone",
"UI_DEV_SECTIONS_description": "Velg hvilke UI -elementer du vil skjule på enhetssiden.",
"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_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",
@@ -765,4 +765,4 @@
"settings_system_label": "System",
"settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>",
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
}
}

26
front/php/templates/language/pl_pl.json Executable file → Normal file
View 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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Usuń urządzenie",
"DevDetail_button_DeleteEvents": "Usuń zdarzenia",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Zapisz",
"DeviceEdit_ValidMacIp": "Wprowadź poprawny <b>adres MAC</b> oraz <b>adres IP</b>.",
"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_MassActions": "Operacje zbiorcze:",
"Device_MultiEdit_No_Devices": "",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Wszystkie",
"Device_Title": "Urządzenia",
"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",
"ENCRYPTION_KEY_description": "Klucz szyfrowania danych.",
"ENCRYPTION_KEY_name": "Klucz szyfrujący",
@@ -344,14 +344,14 @@
"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_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_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_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_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",
"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",
@@ -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.",
"Maintenance_InitCheck": "Wstępna kontrola",
"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_ReCheck": "Ponów sprawdzenie",
"Maintenance_Running_Version": "Zainstalowana wersja",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Nazwa węzła",
"Network_Parent": "Nadrzędne urządzenie sieciowe",
"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_ShowArchived": "",
"Network_ShowOffline": "",
@@ -593,7 +593,7 @@
"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.",
"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",
"SYSTEM_TITLE": "Informacje o systemie",
"Setting_Override": "Nadpisz wartość",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Czas pracy:",
"Systeminfo_This_Client": "Ten klient",
"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_name": "Strefa czasowa",
"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_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_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",
@@ -759,10 +759,10 @@
"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_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_system_icon": "fa-solid fa-gear",
"settings_system_label": "System",
"settings_update_item_warning": "Zaktualizuj wartość poniżej. Uważaj, aby zachować poprzedni format. <b>Walidacja nie jest wykonywana.</b>",
"test_event_tooltip": "Najpierw zapisz swoje zmiany, zanim przetestujesz ustawienia."
}
}

View File

@@ -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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i>",
"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_Delete": "Excluir dispositivo",
"DevDetail_button_DeleteEvents": "Excluir eventos",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Salvar",
"DeviceEdit_ValidMacIp": "Insira um endereço <b>Mac</b> e <b>IP</b> válidos.",
"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_MassActions": "Ações em massa:",
"Device_MultiEdit_No_Devices": "",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Todos",
"Device_Title": "Dispositivos",
"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",
"ENCRYPTION_KEY_description": "Chave de encriptação de dados.",
"ENCRYPTION_KEY_name": "Chave de encriptação",
@@ -344,14 +344,14 @@
"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_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_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_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_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",
"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",
@@ -765,4 +765,4 @@
"settings_system_label": "",
"settings_update_item_warning": "",
"test_event_tooltip": "Guarde as alterações antes de testar as definições."
}
}

14
front/php/templates/language/pt_pt.json Executable file → Normal file
View 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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Apagar dispositivo",
"DevDetail_button_DeleteEvents": "Apagar eventos",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Todos",
"Device_Title": "Dispositivos",
"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",
"ENCRYPTION_KEY_description": "Chave de encriptação de dados.",
"ENCRYPTION_KEY_name": "Chave de encriptação",
@@ -344,14 +344,14 @@
"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_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_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "",
"HRS_TO_KEEP_NEWDEV_name": "Remover novos dispostivos depois",
"HRS_TO_KEEP_OFFDEV_description": "",
"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",
"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",
@@ -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.",
"Maintenance_InitCheck": "Verificação inicial",
"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_ReCheck": "Verificar novamente",
"Maintenance_Running_Version": "Versão instalada",
@@ -765,4 +765,4 @@
"settings_system_label": "",
"settings_update_item_warning": "",
"test_event_tooltip": "Guarde as alterações antes de testar as definições."
}
}

View 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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -185,7 +185,7 @@
"DevDetail_Vendor_hover": "Поставщик должен определяться автоматически. Вы можете перезаписать или добавить свое собственное значение.",
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Удалить устройство",
"DevDetail_button_DeleteEvents": "Удалить события",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Сохранить",
"DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.",
"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_MassActions": "Массовые действия:",
"Device_MultiEdit_No_Devices": "Устройства не выбраны.",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Все",
"Device_Title": "Устройства",
"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": "Разрешить плагины",
"ENCRYPTION_KEY_description": "Ключ шифрования данных.",
"ENCRYPTION_KEY_name": "Ключ шифрования",
@@ -344,14 +344,14 @@
"Gen_Warning": "Предупреждение",
"Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues",
"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_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_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_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": "Загруженные плагины",
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
"LOG_LEVEL_name": "Распечатать дополнительный журнал",
@@ -375,7 +375,7 @@
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
"Maintenance_InitCheck": "Инициализация проверки",
"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_ReCheck": "Повторить проверку",
"Maintenance_Running_Version": "Установленная версия",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Имя узла",
"Network_Parent": "Родительское сетевое устройство",
"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_ShowArchived": "Показать архивные",
"Network_ShowOffline": "Показать офлайн устройства",
@@ -593,7 +593,7 @@
"REPORT_TITLE": "Отчет",
"RandomMAC_hover": "Автоматически обнаружено — указывает, рандомизирует ли устройство свой MAC-адрес. Вы можете исключить конкретные MAC-адреса с помощью настройки UI_NOT_RANDOM_MAC. Нажмите, чтобы узнать больше.",
"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": "Сети для сканирования",
"SYSTEM_TITLE": "Системная информация",
"Setting_Override": "Переопределить значение",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Время работы:",
"Systeminfo_This_Client": "Этот клиент",
"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_name": "Часовой пояс",
"UI_DEV_SECTIONS_description": "Выберите, какие элементы интерфейса нужно скрыть на страницах «Устройства».",
"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_LANG_description": "Выберите предпочтительный язык пользовательского интерфейса. Помогите перевести или предложите языки на онлайн-портале <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
"UI_LANG_name": "Язык интерфейса",
@@ -759,10 +759,10 @@
"settings_publishers_icon": "fa-solid fa-paper-plane",
"settings_publishers_info": "Загрузите больше нотификаторов с помощью настройки <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
"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_system_icon": "fa-solid fa-gear",
"settings_system_label": "Система",
"settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>",
"test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки."
}
}

16
front/php/templates/language/tr_tr.json Executable file → Normal file
View 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_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_display_name": "API",
"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_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
"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_Delete": "Cihazı Sil",
"DevDetail_button_DeleteEvents": "Etkinlikleri Sil",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Kaydet",
"DeviceEdit_ValidMacIp": "Geçerli bir <b>Mac</b> ve <b>IP</b> adresi girin.",
"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_MassActions": "Toplu komutlar:",
"Device_MultiEdit_No_Devices": "",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Hepsi",
"Device_Title": "Cihazlar",
"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",
"ENCRYPTION_KEY_description": "Veri encryption şifresi.",
"ENCRYPTION_KEY_name": "Encryption şifresi",
@@ -344,14 +344,14 @@
"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_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_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_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_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",
"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",
@@ -759,10 +759,10 @@
"settings_publishers_icon": "",
"settings_publishers_info": "",
"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_system_icon": "",
"settings_system_label": "Sistem",
"settings_update_item_warning": "",
"test_event_tooltip": ""
}
}

View 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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -185,7 +185,7 @@
"DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.",
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN",
"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_Delete": "Видалити Пристрій",
"DevDetail_button_DeleteEvents": "Видалити події",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "Зберегти",
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
"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_MassActions": "Масові акції:",
"Device_MultiEdit_No_Devices": "Не вибрано жодного пристрою.",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "Все",
"Device_Title": "Пристрої",
"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": "Увімкнути плагіни",
"ENCRYPTION_KEY_description": "Ключ шифрування даних.",
"ENCRYPTION_KEY_name": "Ключ шифрування",
@@ -344,14 +344,14 @@
"Gen_Warning": "Попередження",
"Gen_Work_In_Progress": "Робота триває, час залишити відгук на https://github.com/jokob-sk/NetAlertX/issues",
"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_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_name": "Видаліть нові пристрої після",
"HRS_TO_KEEP_OFFDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, які <b>офлайн</b>, та їх <b>Останнє підключення</b> дата та час старіші за вказані години в цьому налаштуванні, будуть видалені. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>офлайн-пристрої</b> після <code>X</code> годин перебування в мережі.",
"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": "Завантажені плагіни",
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
"LOG_LEVEL_name": "Друк додаткового протоколювання",
@@ -375,7 +375,7 @@
"Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.",
"Maintenance_InitCheck": "Перевірка ініціалізації",
"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_ReCheck": "Повторна спроба перевірки",
"Maintenance_Running_Version": "Встановлена версія",
@@ -388,7 +388,7 @@
"Maintenance_Tool_ExportCSV": "Експорт пристроїв (csv)",
"Maintenance_Tool_ExportCSV_noti": "Експорт пристроїв (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_noti": "Імпорт пристроїв (csv)",
"Maintenance_Tool_ImportCSV_noti_text": "Ви впевнені, що бажаєте імпортувати файл CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.",
@@ -536,7 +536,7 @@
"Network_Node_Name": "Ім'я вузла",
"Network_Parent": "Батьківський мережевий пристрій",
"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_ShowArchived": "Показати архівовані",
"Network_ShowOffline": "Показати офлайн",
@@ -593,7 +593,7 @@
"REPORT_TITLE": "Звіт",
"RandomMAC_hover": "Автоматично визначено вказує, чи пристрій рандомізує свою MAC-адресу. Ви можете виключити певні MAC-адреси за допомогою параметра UI_NOT_RANDOM_MAC. Натисніть, щоб дізнатися більше.",
"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": "Мережі для сканування",
"SYSTEM_TITLE": "Інформація Про систему",
"Setting_Override": "Перевизначати значення",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "Час роботи:",
"Systeminfo_This_Client": "Цей клієнт",
"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_name": "Часовий пояс",
"UI_DEV_SECTIONS_description": "Виберіть, які елементи інтерфейсу користувача приховати на сторінках пристроїв.",
"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_LANG_description": "Виберіть потрібну мову інтерфейсу користувача. Допоможіть з перекладом або запропонуйте мови на онлайн-порталі <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
"UI_LANG_name": "Мова інтерфейсу користувача",
@@ -759,7 +759,7 @@
"settings_publishers_icon": "fa-твердий fa-паперовий літак",
"settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
"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_system_icon": "фа-твердий фа-передача",
"settings_system_label": "Система",

26
front/php/templates/language/zh_cn.json Executable file → Normal file
View 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_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_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -185,7 +185,7 @@
"DevDetail_Vendor_hover": "自动检测制造商。但你可以自定义.",
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> 局域网唤醒",
"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_Delete": "删除设备",
"DevDetail_button_DeleteEvents": "删除事件",
@@ -198,7 +198,7 @@
"DevDetail_button_Save": "保存",
"DeviceEdit_ValidMacIp": "请输入有效的<b>Mac</b>和<b>IP</b>地址。",
"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_MassActions": "谨慎操作:",
"Device_MultiEdit_No_Devices": "未选择设备。",
@@ -253,7 +253,7 @@
"Device_Tablelenght_all": "所有",
"Device_Title": "设备",
"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": "启用插件",
"ENCRYPTION_KEY_description": "数据密钥。",
"ENCRYPTION_KEY_name": "密钥",
@@ -344,14 +344,14 @@
"Gen_Warning": "警告",
"Gen_Work_In_Progress": "工作正在进行中,欢迎在 https://github.com/jokob-sk/NetAlertX/issues 上反馈",
"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_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_name": "小时后删除新设备",
"HRS_TO_KEEP_OFFDEV_description": "这是维护设置<b>删除设备</b>。如果启用了这个设置(<code>0</code>是禁用),任何<b>上次链接</b>时间比设置里存的指定时间长的<b>离线</b>设备都会被删除。要是您想<code>X</code>小时以候自动处理<b>下线设备</b>,请用这个设置。",
"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": "已加载插件",
"LOG_LEVEL_description": "此设置将启用更详细的日志记录。对于调试写入数据库的事件很有用。",
"LOG_LEVEL_name": "打印附加日志",
@@ -375,7 +375,7 @@
"Maint_Restart_Server_noti_text": "您确定要重新启动后端服务器吗?这可能会导致应用程序不一致。请先备份您的设置。<br/> <br/> 注意:这可能需要几分钟。",
"Maintenance_InitCheck": "初步检查",
"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_ReCheck": "重试检查",
"Maintenance_Running_Version": "安装版本",
@@ -536,7 +536,7 @@
"Network_Node_Name": "节点名称",
"Network_Parent": "父网络设备",
"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_ShowArchived": "显示已归档",
"Network_ShowOffline": "显示离线",
@@ -593,7 +593,7 @@
"REPORT_TITLE": "报告",
"RandomMAC_hover": "自动检测 - 表示设备是否随机化其 MAC 地址。您可通过 UI_NOT_RANDOM_MAC 设置排除特定MAC地址。点击了解更多。",
"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": "待扫描网络",
"SYSTEM_TITLE": "系统信息",
"Setting_Override": "覆盖值",
@@ -678,12 +678,12 @@
"Systeminfo_System_Uptime": "正常运行时间:",
"Systeminfo_This_Client": "此客户",
"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_name": "时区",
"UI_DEV_SECTIONS_description": "选择在设备页面中隐藏哪些 UI 元素。",
"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_LANG_description": "选择首选的 UI 语言。在 <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a> 在线门户中帮助翻译或建议语言。",
"UI_LANG_name": "用户界面语言",
@@ -759,10 +759,10 @@
"settings_publishers_icon": "fa-solid fa-paper-plane",
"settings_publishers_info": "使用 <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> 设置加载更多发布商",
"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_system_icon": "fa-solid fa-gear",
"settings_system_label": "系统",
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
"test_event_tooltip": "在测试设置之前,请先保存更改。"
}
}

View File

@@ -67,7 +67,7 @@ def main():
# 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
# 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)}"'])

View File

@@ -414,11 +414,11 @@
"description": [
{
"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",
"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 >"
}
]
},

View File

@@ -1,10 +1,10 @@
# 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
- Go to settings and fill in relevant details. There are 2 types of "devices" generated and sent to the broker. A generic overview device that contains online/down/archived device stats and then the actual devices detected by the application.
- Go to settings and fill in relevant details. There are 2 types of "devices" generated and sent to the broker. A generic overview device that contains online/down/archived device stats and then the actual devices detected by the application.
## Forcing an update
@@ -23,29 +23,29 @@ Filters will be ignored, and this will delete all objects associated with the pl
![image](./Deleting_MQTT_Plugin_Objects.png)
Please note the online/offline state of the device is always updated based on the scan result and if it changed from the previous value.
Please note the online/offline state of the device is always updated based on the scan result and if it changed from the previous value.
# Sample Payloads
>[!WARNING]
> Please check your Home Assistant MQTT broker debug info for the most up-to-date data and format as the below might be outdated.
> Please check your Home Assistant MQTT broker debug info for the most up-to-date data and format as the below might be outdated.
## Overview device
The below payloads apply to the device showing overall online/down/archived stats. You can toggle them on/off with the `SEND_STATS` setting.
The below payloads apply to the device showing overall online/down/archived stats. You can toggle them on/off with the `SEND_STATS` setting.
### MQTT discovery data:
>[!NOTE]
> You can replace the `netalertx` string of the below topic via the `DEVICE_ID` setting.
> You can replace the `netalertx` string of the below topic via the `DEVICE_ID` setting.
Topic: `homeassistant/sensor/netalertx/online/config`
>[!NOTE]
> You can replace the `"name": "NetAlertX"` string of the below payload via the `DEVICE_NAME` setting.
> You can replace the `"name": "NetAlertX"` string of the below payload via the `DEVICE_NAME` setting.
Payload:
@@ -70,7 +70,7 @@ Payload:
### MQTT config data sample:
>[!NOTE]
> You can replace the `netalertx` string of the below topic via the `DEVICE_ID` setting.
> You can replace the `netalertx` string of the below topic via the `DEVICE_ID` setting.
Topic: `homeassistant/sensor/netalertx/all/config`
@@ -98,7 +98,7 @@ Payload:
### MQTT state data:
>[!NOTE]
> You can replace the `netalertx` string of the below topic via the `DEVICE_ID` setting.
> You can replace the `netalertx` string of the below topic via the `DEVICE_ID` setting.
Topic: `system-sensors/sensor/netalertx/state`
@@ -118,7 +118,7 @@ Payload:
## Individual devices
The below payloads apply to individual devices. Every device discovered by the application will generate the below messages. You can toggle them on/off with the `SEND_DEVICES` setting.
The below payloads apply to individual devices. Every device discovered by the application will generate the below messages. You can toggle them on/off with the `SEND_DEVICES` setting.
### MQTT discovery data:
@@ -217,4 +217,4 @@ The first run will take a while, subsequent should be much faster because new se
3. If the hash is not found, a new device/device state is assumed and the device is sent to the broker
The state is managed differently, the state of the sensor is not included in the hash. This might be improved upon in later releases.
The state is managed differently, the state of the sensor is not included in the hash. This might be improved upon in later releases.

View File

@@ -312,7 +312,7 @@
"description": [
{
"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",

View File

@@ -590,11 +590,11 @@ def publish_notifications(db, mqtt_client):
# Publish to a single MQTT topic safely
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:
publish_mqtt(mqtt_client, topic, payload)
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

View File

@@ -1,6 +1,6 @@
## 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

View File

@@ -260,11 +260,11 @@
"description": [
{
"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",
"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": [
{
"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>."
}
]
}

View File

@@ -1,17 +1,17 @@
## 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.).
> 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]
> 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
- 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`).
- Specify the schedule in the `ARPSCAN_RUN_SCHD` setting
- Adjust the timeout if needed in the `ARPSCAN_RUN_TIMEOUT` setting

View File

@@ -31,18 +31,6 @@ 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")
# 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():
parser = argparse.ArgumentParser(description="Import devices from settings")

View File

@@ -1,6 +1,6 @@
## 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

View File

@@ -1,8 +1,8 @@
## 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
@@ -12,4 +12,4 @@ This plugin can be used if you are getting false offline positives on specific d
- Version: 1.0.0
- Author: [jokob-sk](https://github.com/jokob-sk)
- Release Date: 19.1.2025
- Release Date: 19.1.2025

View File

@@ -71,7 +71,7 @@
"description": [
{
"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": [] }
]
},
"default_value": "ping",
"default_value": "fping",
"options": [
"ping",
"fping"
"fping",
"ping"
],
"localized": ["name", "description"],
"name": [

View File

@@ -72,7 +72,7 @@ def main():
# 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
# 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)}"'])

View File

@@ -522,7 +522,7 @@
"description": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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",
"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",
@@ -1417,7 +1417,7 @@
"description": [
{
"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": [
{
"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 parents 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 parents 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": [
{
"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": [
{
"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": [
{
"language_code": "en_us",
"string": "The network SSID."
"string": "The network SSID. Database column name: <code>devSSID</code>."
}
]
},
@@ -1584,7 +1584,7 @@
"description": [
{
"language_code": "en_us",
"string": "The network site."
"string": "The network site. Database column name: <code>devSite</code>."
}
]
},
@@ -1620,7 +1620,7 @@
"description": [
{
"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": [
{
"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": [
{
"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": [
{
"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": [
{
"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)."
}
]
}

View File

@@ -3,13 +3,13 @@
**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**.
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]
> 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.
> 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.
@@ -17,7 +17,7 @@ This plugin is **not optimized for name resolution** (use `NSLOOKUP` or `AVAHISC
### 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`.
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.

View File

@@ -17,7 +17,7 @@ function checkAuthorization($method) {
if ($auth_header !== $expected_token) {
http_response_code(403);
echo 'Forbidden';
write_notification("[Plugin: SYNC] Incoming data: Incorrect API Token (".$method.")", "alert");
displayInAppNoti("[Plugin: SYNC] Incoming data: Incorrect API Token (".$method.")", "error");
exit;
}
}
@@ -48,7 +48,7 @@ if ($method === 'GET') {
$apiRoot = getenv('NETALERTX_API') ?: '/tmp/api';
$file_path = rtrim($apiRoot, '/') . '/table_devices.json';
$data = file_get_contents($file_path);
$data = file_get_contents($file_path);
// Prepare the data to return as a JSON response
$response_data = base64_encode($data);
@@ -56,7 +56,7 @@ if ($method === 'GET') {
// Return JSON response
jsonResponse(200, $response_data, 'OK');
write_notification("[Plugin: SYNC] Data sent", "info");
displayInAppNoti("[Plugin: SYNC] Data sent", "info");
}
// receiving data (this is a HUB)
@@ -75,7 +75,7 @@ else if ($method === 'POST') {
// // check location
// if (!is_dir($storage_path)) {
// echo "Could not open folder: {$storage_path}";
// write_notification("[Plugin: SYNC] Could not open folder: {$storage_path}", "alert");
// write_notification("[Plugin: SYNC] Could not open folder: {$storage_path}", "alert");
// http_response_code(500);
// exit;
// }
@@ -93,11 +93,11 @@ else if ($method === 'POST') {
file_put_contents($file_path_new, $data);
http_response_code(200);
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 {
http_response_code(405);
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