Compare commits
267 Commits
v24.9.26
...
39473593c2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39473593c2 | ||
|
|
bc8e845385 | ||
|
|
1eee710040 | ||
|
|
948635433a | ||
|
|
302ab4b1d8 | ||
|
|
7538b17695 | ||
|
|
55881249e2 | ||
|
|
1b404e579a | ||
|
|
ff9be75871 | ||
|
|
b3d256339f | ||
|
|
0c4c8ca5c3 | ||
|
|
69d41f2ed4 | ||
|
|
76d1ec46a6 | ||
|
|
5aae841b82 | ||
|
|
87ee8efe36 | ||
|
|
404c5cc34b | ||
|
|
6d8dcc7a22 | ||
|
|
e6b82c14ff | ||
|
|
410becfe21 | ||
|
|
202baab409 | ||
|
|
31121eab2a | ||
|
|
78fc9214bb | ||
|
|
52632bc8ef | ||
|
|
6407ee5c13 | ||
|
|
ab8b07e614 | ||
|
|
81d3ee4af7 | ||
|
|
4e90a82ea4 | ||
|
|
70e0542488 | ||
|
|
8b1830569b | ||
|
|
60492157d1 | ||
|
|
44b18e131c | ||
|
|
7512d31e1b | ||
|
|
815480513c | ||
|
|
d1f3998fbf | ||
|
|
7fae6a8cce | ||
|
|
c1c6813b6e | ||
|
|
66786d1d42 | ||
|
|
072821181a | ||
|
|
359360a5ea | ||
|
|
f007eac656 | ||
|
|
5bed1172b6 | ||
|
|
76d1805439 | ||
|
|
34db6fec6c | ||
|
|
4f082b223d | ||
|
|
cc8cddb039 | ||
|
|
79fe759470 | ||
|
|
39bf09c24c | ||
|
|
60777b2f82 | ||
|
|
f4928e3895 | ||
|
|
bf9f55355e | ||
|
|
0bc8b39cec | ||
|
|
cf6c6a3510 | ||
|
|
ad359a5a4d | ||
|
|
2663fbce0f | ||
|
|
70a771e687 | ||
|
|
3cf3305b8f | ||
|
|
775e46529d | ||
|
|
adf2ac3341 | ||
|
|
f426d7b960 | ||
|
|
dd3229284c | ||
|
|
106ec07f3b | ||
|
|
4fb1a55ac0 | ||
|
|
03239cd2b0 | ||
|
|
6523932a87 | ||
|
|
73e27a3883 | ||
|
|
827fdd1504 | ||
|
|
1f01bae1fd | ||
|
|
37a39e23df | ||
|
|
7ce0215a56 | ||
|
|
70be053bd2 | ||
|
|
ab0e99d870 | ||
|
|
2b9f009e8b | ||
|
|
580c5ae36a | ||
|
|
08644feac3 | ||
|
|
d4b5672081 | ||
|
|
1378c8707d | ||
|
|
c6b5f0d18a | ||
|
|
a6322f6cfa | ||
|
|
c0bfb0d4e4 | ||
|
|
9c42cb0013 | ||
|
|
e42c3d8b76 | ||
|
|
f13d3c38aa | ||
|
|
38b8eaffe1 | ||
|
|
4be345af45 | ||
|
|
36dd3f9f06 | ||
|
|
a4b2fb0abf | ||
|
|
de35cdafda | ||
|
|
96bce2666f | ||
|
|
95d3fc55ab | ||
|
|
868210598f | ||
|
|
fa14e657c9 | ||
|
|
84c1aad700 | ||
|
|
3c6a48617a | ||
|
|
20c9b8c5ca | ||
|
|
10ed589cd5 | ||
|
|
bb33ab16fd | ||
|
|
12c848d3cd | ||
|
|
87a0dbba46 | ||
|
|
ea62b1116f | ||
|
|
b52c7ae0ed | ||
|
|
f46bfde782 | ||
|
|
463d7d7524 | ||
|
|
8e4e7bd76d | ||
|
|
cac35e2f20 | ||
|
|
425381a63e | ||
|
|
9f6e61581e | ||
|
|
9c255c77d1 | ||
|
|
c47ac62e9a | ||
|
|
7e2999b28a | ||
|
|
840413843b | ||
|
|
4c46b27643 | ||
|
|
907a3e1df8 | ||
|
|
27131af434 | ||
|
|
4d35013d3e | ||
|
|
4e481f9307 | ||
|
|
05e4de0dc8 | ||
|
|
14aa07c69b | ||
|
|
f0c90cef12 | ||
|
|
26503eaf52 | ||
|
|
c0f14e46ce | ||
|
|
439066510f | ||
|
|
500822327c | ||
|
|
ed933f91f1 | ||
|
|
bbb617ebda | ||
|
|
8b1e4635e6 | ||
|
|
44e217a924 | ||
|
|
400edd35d1 | ||
|
|
9d1fccfe29 | ||
|
|
6bad4764f6 | ||
|
|
d09bbbe73e | ||
|
|
7d0b583571 | ||
|
|
13a2e5ba26 | ||
|
|
4af9efa8f7 | ||
|
|
aa1a18015d | ||
|
|
abd2f66814 | ||
|
|
7dd77e06d4 | ||
|
|
4f859b5671 | ||
|
|
e24903a123 | ||
|
|
367a024860 | ||
|
|
987127302c | ||
|
|
8b1e732fa3 | ||
|
|
73b8ea9bfa | ||
|
|
77846df299 | ||
|
|
c91c31cfee | ||
|
|
ef2a102218 | ||
|
|
a8cc4de4d0 | ||
|
|
5f45308465 | ||
|
|
e62131b832 | ||
|
|
68fe5fffee | ||
|
|
8d198b34c4 | ||
|
|
166f700425 | ||
|
|
775f53d1d7 | ||
|
|
3c8dae5868 | ||
|
|
56f1e6adf8 | ||
|
|
12226cb899 | ||
|
|
2eb173b567 | ||
|
|
4ab8d67d76 | ||
|
|
a3aa81f369 | ||
|
|
53f798e50e | ||
|
|
eeb740f60d | ||
|
|
f3fd06725f | ||
|
|
eb16562e85 | ||
|
|
c77ae32736 | ||
|
|
7549a98877 | ||
|
|
02bf561c69 | ||
|
|
5fba247aaa | ||
|
|
cd4b556ee2 | ||
|
|
2471dfaf02 | ||
|
|
69d9584426 | ||
|
|
930f1a333e | ||
|
|
3d9bf32ec7 | ||
|
|
ff60ea82ea | ||
|
|
cb297aab8d | ||
|
|
7794380411 | ||
|
|
0c99c42b0a | ||
|
|
bb4f7616e4 | ||
|
|
1379923f30 | ||
|
|
60e9684084 | ||
|
|
2235a8cf8e | ||
|
|
15eb19fda1 | ||
|
|
3d51b1cd15 | ||
|
|
158ed324c2 | ||
|
|
d36486ef6d | ||
|
|
1767776dd9 | ||
|
|
507e0469d6 | ||
|
|
ae14229ca7 | ||
|
|
dcfeb51aa1 | ||
|
|
ab6e7d910b | ||
|
|
d6164a005b | ||
|
|
ca1d55b3c2 | ||
|
|
c4e0abf913 | ||
|
|
f9e6871ab2 | ||
|
|
30b8ecb743 | ||
|
|
506b8a17fc | ||
|
|
43c60586f4 | ||
|
|
a11d7d9c97 | ||
|
|
222a439212 | ||
|
|
48effdbbad | ||
|
|
62a0149435 | ||
|
|
8702ae032e | ||
|
|
82d2fa4125 | ||
|
|
189a4ece84 | ||
|
|
29de6654a8 | ||
|
|
06008058ab | ||
|
|
efc9a974b1 | ||
|
|
d91141f9ac | ||
|
|
e8d2e52ee2 | ||
|
|
d64b92c273 | ||
|
|
32bebe3ad4 | ||
|
|
2d119f39c0 | ||
|
|
f9b28b647b | ||
|
|
41a72f0292 | ||
|
|
129cd39ef8 | ||
|
|
68febd1350 | ||
|
|
669ce20a84 | ||
|
|
9427ff6453 | ||
|
|
7b2186073f | ||
|
|
30de0f9f93 | ||
|
|
d146b485c4 | ||
|
|
37290528fc | ||
|
|
b4d1505e42 | ||
|
|
afe5a2ae48 | ||
|
|
ef5dc885d9 | ||
|
|
a758548fea | ||
|
|
c6cfa398ef | ||
|
|
677e293138 | ||
|
|
ac259b1fab | ||
|
|
14996d6582 | ||
|
|
d44744657e | ||
|
|
615e5e4084 | ||
|
|
dd948b5e63 | ||
|
|
97a5cb6737 | ||
|
|
c6fe09d366 | ||
|
|
040f2792e4 | ||
|
|
d1d6d7f1ec | ||
|
|
33c16c4d00 | ||
|
|
cc8b57e790 | ||
|
|
57d8e97b60 | ||
|
|
91ad39e991 | ||
|
|
15ed621748 | ||
|
|
50304fd63b | ||
|
|
90689e5c69 | ||
|
|
5f4b2f114c | ||
|
|
e72a87ab43 | ||
|
|
044de61ab5 | ||
|
|
e5d835cfa9 | ||
|
|
e2d84a1885 | ||
|
|
e648acde5c | ||
|
|
a17e066f34 | ||
|
|
0bdc4c4ed1 | ||
|
|
9144fd0c3a | ||
|
|
02077d4654 | ||
|
|
e3b2039257 | ||
|
|
1fa38472e1 | ||
|
|
1e197ae749 | ||
|
|
7731a01f3c | ||
|
|
3ce08ba97d | ||
|
|
c58bbf21b1 | ||
|
|
3780e47117 | ||
|
|
e8f353024f | ||
|
|
7308797314 | ||
|
|
6e36f7d7aa | ||
|
|
8d3a4500e2 | ||
|
|
40d6bdc2b2 | ||
|
|
b7b2e0bc65 | ||
|
|
081d0f3400 | ||
|
|
a7f4565954 |
10
.github/ISSUE_TEMPLATE/i-have-an-issue.yml
vendored
@@ -9,6 +9,16 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: I have searched the existing open and closed issues and I checked the docs https://github.com/jokob-sk/NetAlertX/tree/main/docs
|
- label: I have searched the existing open and closed issues and I checked the docs https://github.com/jokob-sk/NetAlertX/tree/main/docs
|
||||||
required: true
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: The issue occurs in the following browsers. Select at least 2.
|
||||||
|
description: This step helps me understand if this is a cache or browser-specific issue.
|
||||||
|
options:
|
||||||
|
- label: "Firefox"
|
||||||
|
- label: "Chrome"
|
||||||
|
- label: "Edge"
|
||||||
|
- label: "Safari (unsupported) - PRs welcome"
|
||||||
|
- label: "N/A - This is an issue with the backend"
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Current Behavior
|
label: Current Behavior
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ ENV PATH="/opt/venv/bin:$PATH"
|
|||||||
COPY . ${INSTALL_DIR}/
|
COPY . ${INSTALL_DIR}/
|
||||||
|
|
||||||
|
|
||||||
RUN pip install netifaces tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros \
|
RUN pip install graphene flask netifaces tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros \
|
||||||
&& bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \
|
&& bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \
|
||||||
&& bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \
|
&& bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \
|
||||||
&& bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;"
|
&& bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;"
|
||||||
@@ -40,7 +40,7 @@ ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
|
|||||||
|
|
||||||
RUN apk update --no-cache \
|
RUN apk update --no-cache \
|
||||||
&& apk add --no-cache bash zip lsblk gettext-envsubst sudo mtr tzdata s6-overlay \
|
&& apk add --no-cache bash zip lsblk gettext-envsubst sudo mtr tzdata s6-overlay \
|
||||||
&& apk add --no-cache curl arp-scan iproute2 iproute2-ss nmap nmap-scripts traceroute nbtscan net-tools net-snmp-tools bind-tools awake ca-certificates \
|
&& apk add --no-cache curl arp-scan iproute2 iproute2-ss nmap nmap-scripts traceroute nbtscan avahi avahi-tools openrc dbus net-tools net-snmp-tools bind-tools awake ca-certificates \
|
||||||
&& apk add --no-cache sqlite php83 php83-fpm php83-cgi php83-curl php83-sqlite3 php83-session \
|
&& apk add --no-cache sqlite php83 php83-fpm php83-cgi php83-curl php83-sqlite3 php83-session \
|
||||||
&& apk add --no-cache python3 nginx \
|
&& apk add --no-cache python3 nginx \
|
||||||
&& apk add --no-cache dcron \
|
&& apk add --no-cache dcron \
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ COPY --chmod=775 --chown=${USER_ID}:${USER_GID} . ${INSTALL_DIR}/
|
|||||||
RUN apt-get install -y \
|
RUN apt-get install -y \
|
||||||
tini snmp ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo \
|
tini snmp ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo \
|
||||||
nginx-light php php-cgi php-fpm php-sqlite3 php-curl sqlite3 dnsutils net-tools php-openssl \
|
nginx-light php php-cgi php-fpm php-sqlite3 php-curl sqlite3 dnsutils net-tools php-openssl \
|
||||||
python3 python3-dev iproute2 nmap python3-pip zip systemctl usbutils traceroute nbtscan
|
python3 python3-dev iproute2 nmap python3-pip zip systemctl usbutils traceroute nbtscan avahi avahi-tools openrc dbus
|
||||||
|
|
||||||
# Alternate dependencies
|
# Alternate dependencies
|
||||||
RUN apt-get install nginx nginx-core mtr php-fpm php8.2-fpm php-cli php8.2 php8.2-sqlite3 -y
|
RUN apt-get install nginx nginx-core mtr php-fpm php8.2-fpm php-cli php8.2 php8.2-sqlite3 -y
|
||||||
@@ -43,7 +43,7 @@ RUN phpenmod -v 8.2 sqlite3
|
|||||||
RUN apt-get install -y python3-venv
|
RUN apt-get install -y python3-venv
|
||||||
RUN python3 -m venv myenv
|
RUN python3 -m venv myenv
|
||||||
|
|
||||||
RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython cryptography librouteros "
|
RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros "
|
||||||
|
|
||||||
# Create a buildtimestamp.txt to later check if a new version was released
|
# Create a buildtimestamp.txt to later check if a new version was released
|
||||||
RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt
|
RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
[](https://github.com/jokob-sk/NetAlertX)
|
[](https://github.com/jokob-sk/NetAlertX)
|
||||||
[](https://hub.docker.com/r/jokobsk/netalertx)
|
[](https://hub.docker.com/r/jokobsk/netalertx)
|
||||||
[](https://hub.docker.com/r/jokobsk/netalertx)
|
[](https://hub.docker.com/r/jokobsk/netalertx)
|
||||||
[](https://github.com/jokob-sk/NetAlertX/releases)
|
[](https://github.com/jokob-sk/NetAlertX/releases)
|
||||||
[](https://discord.gg/UQnnHNYV)
|
[](https://discord.gg/NczTUTWyRr)
|
||||||
|
|
||||||
# 🖧🔍 Network scanner & notification framework
|
# 🖧🔍 Network scanner & notification framework
|
||||||
|
|
||||||
@@ -62,6 +62,8 @@ Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and scree
|
|||||||
## Installation & Documentation
|
## Installation & Documentation
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
|
|
||||||
|
Supported browsers: Chrome, Firefox
|
||||||
|
|
||||||
| Docs | Link |
|
| Docs | Link |
|
||||||
|-------------|-------------|
|
|-------------|-------------|
|
||||||
| 📥🐳 | [Docker instructions](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md)
|
| 📥🐳 | [Docker instructions](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
SCAN_SUBNETS=['192.168.1.0/24 --interface=eth0']
|
SCAN_SUBNETS=['192.168.1.0/24 --interface=eth0']
|
||||||
TIMEZONE='Europe/Berlin'
|
TIMEZONE='Europe/Berlin'
|
||||||
LOADED_PLUGINS = ['ARPSCAN','CSVBCKP','DBCLNP', 'INTRNT','MAINT','NEWDEV','NSLOOKUP','NTFPRCS', 'PHOLUS','SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS']
|
LOADED_PLUGINS = ['ARPSCAN','CSVBCKP','DBCLNP', 'INTRNT','MAINT','NEWDEV','NSLOOKUP','NTFPRCS', 'AVAHISCAN', 'SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS']
|
||||||
|
|
||||||
DAYS_TO_KEEP_EVENTS=90
|
DAYS_TO_KEEP_EVENTS=90
|
||||||
# Used for generating links in emails. Make sure not to add a trailing slash!
|
# Used for generating links in emails. Make sure not to add a trailing slash!
|
||||||
@@ -28,7 +28,6 @@ REPORT_DASHBOARD_URL='http://netalertx'
|
|||||||
# Make sure at least these scanners are enabled for new installs, other defaults are taken from the config.json
|
# Make sure at least these scanners are enabled for new installs, other defaults are taken from the config.json
|
||||||
INTRNT_RUN='schedule'
|
INTRNT_RUN='schedule'
|
||||||
ARPSCAN_RUN='schedule'
|
ARPSCAN_RUN='schedule'
|
||||||
PHOLUS_RUN='on_new_device'
|
|
||||||
NSLOOKUP_RUN='before_name_updates'
|
NSLOOKUP_RUN='before_name_updates'
|
||||||
|
|
||||||
# Email
|
# Email
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ services:
|
|||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_2.leases:/etc/pihole/dhcp2.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_2.leases:/etc/pihole/dhcp2.leases
|
||||||
- ${APP_DATA_LOCATION}/pihole/etc-pihole/pihole-FTL.db:/etc/pihole/pihole-FTL.db
|
- ${APP_DATA_LOCATION}/pihole/etc-pihole/pihole-FTL.db:/etc/pihole/pihole-FTL.db
|
||||||
- ${DEV_LOCATION}/server:/app/server
|
- ${DEV_LOCATION}/server:/app/server
|
||||||
|
- ${DEV_LOCATION}/test:/app/test
|
||||||
- ${DEV_LOCATION}/dockerfiles:/app/dockerfiles
|
- ${DEV_LOCATION}/dockerfiles:/app/dockerfiles
|
||||||
# - ${APP_DATA_LOCATION}/netalertx/php.ini:/etc/php/8.2/fpm/php.ini
|
# - ${APP_DATA_LOCATION}/netalertx/php.ini:/etc/php/8.2/fpm/php.ini
|
||||||
- ${DEV_LOCATION}/install:/app/install
|
- ${DEV_LOCATION}/install:/app/install
|
||||||
@@ -64,7 +65,7 @@ services:
|
|||||||
# DELETE END anyone trying to use this file: comment out / delete ABOVE lines, they are only for development purposes
|
# DELETE END anyone trying to use this file: comment out / delete ABOVE lines, they are only for development purposes
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
environment:
|
environment:
|
||||||
# - APP_CONF_OVERRIDE={"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","UI_dark_mode":"True"}
|
# - APP_CONF_OVERRIDE={"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","UI_theme":"Dark"}
|
||||||
- TZ=${TZ}
|
- TZ=${TZ}
|
||||||
- PORT=${PORT}
|
- PORT=${PORT}
|
||||||
# ❗ DANGER ZONE BELOW - Setting ALWAYS_FRESH_INSTALL=true will delete the content of the /db & /config folders
|
# ❗ DANGER ZONE BELOW - Setting ALWAYS_FRESH_INSTALL=true will delete the content of the /db & /config folders
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
[](https://hub.docker.com/r/jokobsk/netalertx)
|
[](https://hub.docker.com/r/jokobsk/netalertx)
|
||||||
[](https://hub.docker.com/r/jokobsk/netalertx)
|
[](https://hub.docker.com/r/jokobsk/netalertx)
|
||||||
[](https://github.com/jokob-sk/NetAlertX/releases)
|
[](https://github.com/jokob-sk/NetAlertX/releases)
|
||||||
[](https://discord.gg/UQnnHNYV)
|
[](https://discord.gg/NczTUTWyRr)
|
||||||
|
|
||||||
|
|
||||||
# NetAlertX 🖧🔍 Network scanner & notification framework
|
# NetAlertX 🖧🔍 Network scanner & notification framework
|
||||||
@@ -41,9 +41,11 @@ docker run -d --rm --network=host \
|
|||||||
| `PORT` |Port of the web interface | `20211` |
|
| `PORT` |Port of the web interface | `20211` |
|
||||||
| `LISTEN_ADDR` |Set the specific IP Address for the listener address for the nginx webserver (web interface). This could be useful when using multiple subnets to hide the web interface from all untrusted networks. | `0.0.0.0` |
|
| `LISTEN_ADDR` |Set the specific IP Address for the listener address for the nginx webserver (web interface). This could be useful when using multiple subnets to hide the web interface from all untrusted networks. | `0.0.0.0` |
|
||||||
|`TZ` |Time zone to display stats correctly. Find your time zone [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) | `Europe/Berlin` |
|
|`TZ` |Time zone to display stats correctly. Find your time zone [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) | `Europe/Berlin` |
|
||||||
|`APP_CONF_OVERRIDE` | JSON override for settings, e.g. `{"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","UI_dark_mode":"True"}` (Experimental 🧪) | `N/A` |
|
|`APP_CONF_OVERRIDE` | JSON override for settings, e.g. `{"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","UI_theme":"Dark"}` (Experimental 🧪) | `N/A` |
|
||||||
|`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. | `N/A` |
|
|`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. | `N/A` |
|
||||||
|
|
||||||
|
> You can override the default GraphQL port setting `GRAPHQL_PORT` (set to `20212`) by using the `APP_CONF_OVERRIDE` env variable.
|
||||||
|
|
||||||
### Docker paths
|
### Docker paths
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
@@ -237,4 +239,4 @@ Big thanks to <a href="https://github.com/Macleykun">@Macleykun</a> & for help a
|
|||||||
- Bitcoin: `1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM`
|
- Bitcoin: `1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM`
|
||||||
- Ethereum: `0x6e2749Cb42F4411bc98501406BdcD82244e3f9C7`
|
- Ethereum: `0x6e2749Cb42F4411bc98501406BdcD82244e3f9C7`
|
||||||
|
|
||||||
> 📧 Email me at [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX) if you want to get in touch or if I should add other sponsorship platforms.
|
> 📧 Email me at [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX) if you want to get in touch or if I should add other sponsorship platforms.
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ fi
|
|||||||
|
|
||||||
# OVERRIDE settings: Handling APP_CONF_OVERRIDE
|
# OVERRIDE settings: Handling APP_CONF_OVERRIDE
|
||||||
# Check if APP_CONF_OVERRIDE is set
|
# Check if APP_CONF_OVERRIDE is set
|
||||||
|
|
||||||
|
# remove old
|
||||||
|
rm "${INSTALL_DIR}/config/app_conf_override.json"
|
||||||
|
|
||||||
if [ -z "$APP_CONF_OVERRIDE" ]; then
|
if [ -z "$APP_CONF_OVERRIDE" ]; then
|
||||||
echo "APP_CONF_OVERRIDE is not set. Skipping config file creation."
|
echo "APP_CONF_OVERRIDE is not set. Skipping config file creation."
|
||||||
else
|
else
|
||||||
|
|||||||
60
docs/API.md
@@ -58,38 +58,38 @@ Example JSON of the `table_devices.json` endpoint with two Devices (database row
|
|||||||
{
|
{
|
||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
"dev_MAC": "Internet",
|
"devMac": "Internet",
|
||||||
"dev_Name": "Net - Huawei",
|
"devName": "Net - Huawei",
|
||||||
"dev_DeviceType": "Router",
|
"devType": "Router",
|
||||||
"dev_Vendor": null,
|
"devVendor": null,
|
||||||
"dev_Group": "Always on",
|
"devGroup": "Always on",
|
||||||
"dev_FirstConnection": "2021-01-01 00:00:00",
|
"devFirstConnection": "2021-01-01 00:00:00",
|
||||||
"dev_LastConnection": "2021-01-28 22:22:11",
|
"devLastConnection": "2021-01-28 22:22:11",
|
||||||
"dev_LastIP": "192.168.1.24",
|
"devLastIP": "192.168.1.24",
|
||||||
"dev_StaticIP": 0,
|
"devStaticIP": 0,
|
||||||
"dev_PresentLastScan": 1,
|
"devPresentLastScan": 1,
|
||||||
"dev_LastNotification": "2023-01-28 22:22:28.998715",
|
"devLastNotification": "2023-01-28 22:22:28.998715",
|
||||||
"dev_NewDevice": 0,
|
"devIsNew": 0,
|
||||||
"dev_Network_Node_MAC_ADDR": "",
|
"devParentMAC": "",
|
||||||
"dev_Network_Node_port": "",
|
"devParentPort": "",
|
||||||
"dev_Icon": "globe"
|
"devIcon": "globe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"dev_MAC": "a4:8f:ff:aa:ba:1f",
|
"devMac": "a4:8f:ff:aa:ba:1f",
|
||||||
"dev_Name": "Net - USG",
|
"devName": "Net - USG",
|
||||||
"dev_DeviceType": "Firewall",
|
"devType": "Firewall",
|
||||||
"dev_Vendor": "Ubiquiti Inc",
|
"devVendor": "Ubiquiti Inc",
|
||||||
"dev_Group": "",
|
"devGroup": "",
|
||||||
"dev_FirstConnection": "2021-02-12 22:05:00",
|
"devFirstConnection": "2021-02-12 22:05:00",
|
||||||
"dev_LastConnection": "2021-07-17 15:40:00",
|
"devLastConnection": "2021-07-17 15:40:00",
|
||||||
"dev_LastIP": "192.168.1.1",
|
"devLastIP": "192.168.1.1",
|
||||||
"dev_StaticIP": 1,
|
"devStaticIP": 1,
|
||||||
"dev_PresentLastScan": 1,
|
"devPresentLastScan": 1,
|
||||||
"dev_LastNotification": "2021-07-17 15:40:10.667717",
|
"devLastNotification": "2021-07-17 15:40:10.667717",
|
||||||
"dev_NewDevice": 0,
|
"devIsNew": 0,
|
||||||
"dev_Network_Node_MAC_ADDR": "Internet",
|
"devParentMAC": "Internet",
|
||||||
"dev_Network_Node_port": 1,
|
"devParentPort": 1,
|
||||||
"dev_Icon": "shield-halved"
|
"devIcon": "shield-halved"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ End-result: Partial restore (historical data & configurations from the Maintenan
|
|||||||
|
|
||||||
#### Recovery:
|
#### Recovery:
|
||||||
|
|
||||||
Even with a corrupted database you can recover what I would argue is 99% of the configuration (except of a couple of settings under Maintenance).
|
Even with a corrupted database you can recover what I would argue is 99% of the configuration.
|
||||||
|
|
||||||
- map the `/config/app.conf` file as described in the [Setup documentation](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md#docker-paths).
|
- map the `/config/app.conf` file as described in the [Setup documentation](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md#docker-paths).
|
||||||
- rename the `devices_<timestamp>.csv` to `devices.csv` and place it in the `/config` folder
|
- rename the `devices_<timestamp>.csv` to `devices.csv` and place it in the `/config` folder
|
||||||
|
|||||||
@@ -76,3 +76,16 @@ In the above output notice the section logging how many events are produced by t
|
|||||||
These values, if formatted correctly, will also show up in the UI:
|
These values, if formatted correctly, will also show up in the UI:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
### Sharing application state
|
||||||
|
|
||||||
|
Sometimes specific log sections are needed to debug issues. The Devices and CurrentScan table data is sometimes needed to figure out what's wrong.
|
||||||
|
|
||||||
|
1. Please set `LOG_LEVEL` to `trace` (Disable it once you have the info as this produces big log files).
|
||||||
|
2. Wait for the issue to occur.
|
||||||
|
3. Search for `================ DEVICES table content ================` in your logs.
|
||||||
|
4. Search for `================ CurrentScan table content ================` in your logs.
|
||||||
|
5. Open a new issue and post (redacted) output into the issue description (or send to the netalertx@gmail.com email if sensitive data present).
|
||||||
|
6. Please set `LOG_LEVEL` to `debug` or lower.
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,17 @@ services:
|
|||||||
# Other service configurations...
|
# Other service configurations...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 5. Sharing application state
|
||||||
|
|
||||||
|
Sometimes specific log sections are needed to debug issues. The Devices and CurrentScan table data is sometimes needed to figure out what's wrong.
|
||||||
|
|
||||||
|
1. Please set `LOG_LEVEL` to `trace` (Disable it once you have the info as this produces big log files).
|
||||||
|
2. Wait for the issue to occur.
|
||||||
|
3. Search for `================ DEVICES table content ================` in your logs.
|
||||||
|
4. Search for `================ CurrentScan table content ================` in your logs.
|
||||||
|
5. Open a new issue and post (redacted) output into the issue description (or send to the netalertx@gmail.com email if sensitive data present).
|
||||||
|
6. Please set `LOG_LEVEL` to `debug` or lower.
|
||||||
|
|
||||||
## 📃Common issues
|
## 📃Common issues
|
||||||
|
|
||||||
### Permissions
|
### Permissions
|
||||||
@@ -81,3 +92,7 @@ sudo dpkg -i libseccomp2_2.5.3-2_armhf.deb
|
|||||||
```
|
```
|
||||||
|
|
||||||
The link above will probably break in time too. Go to https://packages.debian.org/sid/armhf/libseccomp2/download to find the new version number and put that in the url.
|
The link above will probably break in time too. Go to https://packages.debian.org/sid/armhf/libseccomp2/download to find the new version number and put that in the url.
|
||||||
|
|
||||||
|
### Only Router and own device show up
|
||||||
|
|
||||||
|
Make sure that the subnet and interface in SCAN_SUBNETS are the correct ones. If your device/NAS has multiple ethernet ports, you probably need to change eth0 to something else!
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
## Development environemnt set up
|
## Development environment set up
|
||||||
|
|
||||||
>[!NOTE]
|
>[!NOTE]
|
||||||
> Replace `/development` with the path where your code files will be stored. The default container name is `netalertx` so there might be a conflict with your running containers.
|
> Replace `/development` with the path where your code files will be stored. The default container name is `netalertx` so there might be a conflict with your running containers.
|
||||||
@@ -52,13 +52,19 @@ A command to stop, remove the container and the image (replace `netalertx` and `
|
|||||||
|
|
||||||
- `sudo docker container stop netalertx ; sudo docker container rm netalertx ; sudo docker image rm netalertx-netalertx`
|
- `sudo docker container stop netalertx ; sudo docker container rm netalertx ; sudo docker image rm netalertx-netalertx`
|
||||||
|
|
||||||
### Restart hanging python script
|
### Restart the server backend
|
||||||
|
|
||||||
SSH into the container and kill & restart the main script loop
|
Most code changes can be tetsed without rebuilding the container. When working on the python server backend, you only need to restart the server.
|
||||||
|
|
||||||
|
1. You can usually restart the backend via Maintenance > Logs > Restart server
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2. If above doesn't work, SSH into the container and kill & restart the main script loop
|
||||||
|
|
||||||
- `sudo docker exec -it netalertx /bin/bash`
|
- `sudo docker exec -it netalertx /bin/bash`
|
||||||
- `pkill -f "python /app/server" && python /app/server & `
|
- `pkill -f "python /app/server" && python /app/server & `
|
||||||
|
|
||||||
|
3. If none of the above work, restart the docker image. This is usually the last resort as sometimes the Docker engine becomes unresponsive and the whole engine needs to be restarted.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ NetAlertX comes with MQTT support, allowing you to show all detected devices as
|
|||||||
|
|
||||||
- Please note that discovery takes about ~10s per device.
|
- Please note that discovery takes about ~10s per device.
|
||||||
- Deleting of devices is not handled automatically. Please use [MQTT Explorer](https://mqtt-explorer.com/) to delete devices in the broker (Home Assistant), if needed.
|
- Deleting of devices is not handled automatically. Please use [MQTT Explorer](https://mqtt-explorer.com/) to delete devices in the broker (Home Assistant), if needed.
|
||||||
|
- For optimization reasons, the devices are not always fully synchronized. You can delete Plugin objects as described in the [MQTT plugin](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_mqtt#forcing-an-update) docs to force a full synchronization.
|
||||||
|
|
||||||
|
|
||||||
## 🧭 Guide
|
## 🧭 Guide
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ To download and install NetAlertX on the hardware/server directly use the `curl`
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This is an Experimental feature 🧪 and it relies on community support.
|
> This is an Experimental feature 🧪 and it relies on community support.
|
||||||
>
|
>
|
||||||
|
> Looking for maintainers for this installation method 🙂
|
||||||
|
>
|
||||||
> There is no guarantee that the install script or any other script will gracefully handle other installed software.
|
> There is no guarantee that the install script or any other script will gracefully handle other installed software.
|
||||||
> Data loss is a possibility, **it is recommended to install NetAlertX using the supplied Docker image**.
|
> Data loss is a possibility, **it is recommended to install NetAlertX using the supplied Docker image**.
|
||||||
|
|
||||||
|
|||||||
@@ -11,16 +11,15 @@ There are 4 ways how to influence notifications:
|
|||||||
> It's recommended to use the same schedule interval for all plugins responsible for scanning devices, otherwise false positives might be reported if different devices are discovered by different plugins. Check the **Settings** > **Enabled settings** section for a warning:
|
> It's recommended to use the same schedule interval for all plugins responsible for scanning devices, otherwise false positives might be reported if different devices are discovered by different plugins. Check the **Settings** > **Enabled settings** section for a warning:
|
||||||
> 
|
> 
|
||||||
|
|
||||||
|
|
||||||
## Device settings 💻
|
## Device settings 💻
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
There are 4 settings on the device for influencing notifications. You can:
|
There are 4 settings on the device for influencing notifications. You can:
|
||||||
|
|
||||||
1. Completely disable the scanning of the device
|
1. **Scan Device** - Completely disable the scanning of the device.
|
||||||
2. **Alert all events**, connections, disconnections, IP changes (noisy, usually not recommended)
|
2. **Alert Events** - Enables alerts of connections, disconnections, IP changes.
|
||||||
3. **Alert down** - alerts when a device goes down. This setting overrides disabled Alert All Events, so you will get a notification of a device going down even if you don't have Alert All Events ticked.
|
3. **Alert Down** - Alerts when a device goes down. This setting overrides a disabled **Alert Events** setting, so you will get a notification of a device going down even if you don't have **Alert Events** ticked.
|
||||||
4. **Skip repeated notifications**, if for example you know there is a temporary issue and want to pause the same notification for this device for a given time.
|
4. **Skip repeated notifications**, if for example you know there is a temporary issue and want to pause the same notification for this device for a given time.
|
||||||
|
|
||||||
## Plugin settings 🔌
|
## Plugin settings 🔌
|
||||||
@@ -40,7 +39,7 @@ Click the **Read more in the docs.** Link at the top of each plugin to get more
|
|||||||
|
|
||||||
In Notification Processing settings, you can specify blanket rules. These allow you to specify exceptions to the Plugin and Device settings and will override those.
|
In Notification Processing settings, you can specify blanket rules. These allow you to specify exceptions to the Plugin and Device settings and will override those.
|
||||||
|
|
||||||
1. Notify on (`NTFPRCS_INCLUDED_SECTIONS`) allows you to specify which events trigger notifications. Usual setups will have `new_devices`, `down_devices`, and possibly `events` set. Setting `plugin` might be too noisy for most setups. More info in the [NTFPRCS plugin](/front/plugins/notification_processing/README.md)
|
1. Notify on (`NTFPRCS_INCLUDED_SECTIONS`) allows you to specify which events trigger notifications. Usual setups will have `new_devices`, `down_devices`, and possibly `down_reconnected` set. Including `plugin` (dependenton the Plugin `<plugin>_WATCH` and `<plugin>_REPORT_ON` settings) and `events` (dependent on the on-device **Alert Events** setting) might be too noisy for most setups. More info in the [NTFPRCS plugin](/front/plugins/notification_processing/README.md)
|
||||||
2. Alert down after (`NTFPRCS_alert_down_time`) is useful if you want to wait for some time before the system sends out a down notification for a device. This is related to the on-device **Alert down** setting and only devices with this checked will trigger a down notification.
|
2. Alert down after (`NTFPRCS_alert_down_time`) is useful if you want to wait for some time before the system sends out a down notification for a device. This is related to the on-device **Alert down** setting and only devices with this checked will trigger a down notification.
|
||||||
3. A filter to allow you to set device-specific exceptions to New devices being added to the app.
|
3. A filter to allow you to set device-specific exceptions to New devices being added to the app.
|
||||||
4. A filter to allow you to set device-specific exceptions to generated Events.
|
4. A filter to allow you to set device-specific exceptions to generated Events.
|
||||||
|
|||||||
31
docs/PERFORMANCE.md
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
# Performance tips
|
||||||
|
|
||||||
|
The application runs regular maintenance and DB cleanup tasks. If these tasks fail, you might encounter performance issues.
|
||||||
|
|
||||||
|
Most performance issues are caused by a big database or large log files. Enabling unnecessary plugins will also lead to performance degradation.
|
||||||
|
|
||||||
|
You can always check the size of your database and database tables under the Maintenance page.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> For around 100 devices the database should be approximately `50MB` and none of the entries (rows) should exceed the value of `10 000` on a healthy system. These numbers will depend on your network activity and settings.
|
||||||
|
|
||||||
|
## Maintenance plugins
|
||||||
|
|
||||||
|
There are 2 plugins responsible for maintaining the overal health of the application. One is responsible for the database cleanup and one for other tasks, such as log cleanup.
|
||||||
|
|
||||||
|
### DB Cleanup (DBCLNP)
|
||||||
|
|
||||||
|
The database cleanup plugin. Check details and related setting in the [DB Cleanup plugin docs](/front/plugins/db_cleanup/README.md). Make sure the plugin is not failing by checking the logs. Try changing the schedule `DBCLNP_RUN_SCHD` and the timeout `DBCLNP_RUN_TIMEOUT` (increase) if the plugin is failing to execute.
|
||||||
|
|
||||||
|
### Maintenance (MAINT)
|
||||||
|
|
||||||
|
The maintenance plugin. Check details and related setting in the [Maintenance plugin docs](/front/plugins/maintenance/README.md). Make sure the plugin is not failing by checking the logs. Try changing the schedule `MAINT_RUN_SCHD` and the timeout `MAINT_RUN_TIMEOUT` (increase) if the plugin is failing to execute.
|
||||||
|
|
||||||
|
## Scan frequency and coverage
|
||||||
|
|
||||||
|
The more often you scan the networks the more resources, traffic and DB read/write cycles are executed. Especially on busy networks and lower end hardware, consider increasing scan intervals (`<PLUGIN>_RUN_SCHD`) and timeouts (`<PLUGIN>_RUN_TIMEOUT`).
|
||||||
|
|
||||||
|
Also consider decreasing the scanned subnet, e.g. from `/16` to `/24` if need be.
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ The `config.json` file is the manifest of the plugin. It contains mainly setting
|
|||||||
|
|
||||||
## Execution order
|
## Execution order
|
||||||
|
|
||||||
The execution order is used to specify wwhen a plugin is executed. This is useful if a plugin has access and surfaces more information than others. If a device is detected by 2 plugins and inserted into the `CurrentScan` table, the plugin with the higher priority (e.g.: `Level_0` is a higher priority than `Level_1`) will insert it's values first. These values (devices) will be then prioritized over any values inserted later.
|
The execution order is used to specify when a plugin is executed. This is useful if a plugin has access and surfaces more information than others. If a device is detected by 2 plugins and inserted into the `CurrentScan` table, the plugin with the higher priority (e.g.: `Level_0` is a higher priority than `Level_1`) will insert it's values first. These values (devices) will be then prioritized over any values inserted later.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -170,20 +170,20 @@ This SQL query is executed on the `app.db` SQLite database file.
|
|||||||
> SQL query example:
|
> SQL query example:
|
||||||
>
|
>
|
||||||
> ```SQL
|
> ```SQL
|
||||||
> SELECT dv.dev_Name as Object_PrimaryID,
|
> SELECT dv.devName as Object_PrimaryID,
|
||||||
> cast(dv.dev_LastIP as VARCHAR(100)) || ':' || cast( SUBSTR(ns.Port ,0, INSTR(ns.Port , '/')) as VARCHAR(100)) as Object_SecondaryID,
|
> cast(dv.devLastIP as VARCHAR(100)) || ':' || cast( SUBSTR(ns.Port ,0, INSTR(ns.Port , '/')) as VARCHAR(100)) as Object_SecondaryID,
|
||||||
> datetime() as DateTime,
|
> datetime() as DateTime,
|
||||||
> ns.Service as Watched_Value1,
|
> ns.Service as Watched_Value1,
|
||||||
> ns.State as Watched_Value2,
|
> ns.State as Watched_Value2,
|
||||||
> 'null' as Watched_Value3,
|
> 'null' as Watched_Value3,
|
||||||
> 'null' as Watched_Value4,
|
> 'null' as Watched_Value4,
|
||||||
> ns.Extra as Extra,
|
> ns.Extra as Extra,
|
||||||
> dv.dev_MAC as ForeignKey
|
> dv.devMac as ForeignKey
|
||||||
> FROM
|
> FROM
|
||||||
> (SELECT * FROM Nmap_Scan) ns
|
> (SELECT * FROM Nmap_Scan) ns
|
||||||
> LEFT JOIN
|
> LEFT JOIN
|
||||||
> (SELECT dev_Name, dev_MAC, dev_LastIP FROM Devices) dv
|
> (SELECT devName, devMac, devLastIP FROM Devices) dv
|
||||||
> ON ns.MAC = dv.dev_MAC
|
> ON ns.MAC = dv.devMac
|
||||||
> ```
|
> ```
|
||||||
>
|
>
|
||||||
> Required `CMD` setting example with above query (you can set `"type": "label"` if you want it to make uneditable in the UI):
|
> Required `CMD` setting example with above query (you can set `"type": "label"` if you want it to make uneditable in the UI):
|
||||||
@@ -192,7 +192,7 @@ This SQL query is executed on the `app.db` SQLite database file.
|
|||||||
> {
|
> {
|
||||||
> "function": "CMD",
|
> "function": "CMD",
|
||||||
> "type": {"dataType":"string", "elements": [{"elementType" : "input", "elementOptions" : [] ,"transformers": []}]},
|
> "type": {"dataType":"string", "elements": [{"elementType" : "input", "elementOptions" : [] ,"transformers": []}]},
|
||||||
> "default_value":"SELECT dv.dev_Name as Object_PrimaryID, cast(dv.dev_LastIP 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 FROM (SELECT * FROM Nmap_Scan) ns LEFT JOIN (SELECT dev_Name, dev_MAC, dev_LastIP FROM Devices) dv ON ns.MAC = dv.dev_MAC",
|
> "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 FROM (SELECT * FROM Nmap_Scan) ns LEFT JOIN (SELECT devName, devMac, devLastIP FROM Devices) dv ON ns.MAC = dv.devMac",
|
||||||
> "options": [],
|
> "options": [],
|
||||||
> "localized": ["name", "description"],
|
> "localized": ["name", "description"],
|
||||||
> "name" : [{
|
> "name" : [{
|
||||||
@@ -361,7 +361,7 @@ Plugin results are always inserted into the standard `Plugin_Objects` database t
|
|||||||
>3. That's it. The app takes care of the rest. It loops thru the objects discovered by the plugin, takes the results line-by-line, and inserts them into the database table specified in `"mapped_to_table"`. The columns are translated from the generic plugin columns to the target table columns via the `"mapped_to_column"` property in the column definitions.
|
>3. That's it. The app takes care of the rest. It loops thru the objects discovered by the plugin, takes the results line-by-line, and inserts them into the database table specified in `"mapped_to_table"`. The columns are translated from the generic plugin columns to the target table columns via the `"mapped_to_column"` property in the column definitions.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> You can create a column mapping with a default value via the `mapped_to_column_data` property. This means that the value of the given column will always be this value. That also menas that the `"column": "NameDoesntMatter"` is not important as there is no database source column.
|
> You can create a column mapping with a default value via the `mapped_to_column_data` property. This means that the value of the given column will always be this value. That also means that the `"column": "NameDoesntMatter"` is not important as there is no database source column.
|
||||||
|
|
||||||
|
|
||||||
>🔍 Example:
|
>🔍 Example:
|
||||||
@@ -460,7 +460,7 @@ Below are some general additional notes, when defining `params`:
|
|||||||
|
|
||||||
- `"name":"name_value"` - is used as a wildcard replacement in the `CMD` setting value by using curly brackets `{name_value}`. The wildcard is replaced by the result of the `"value" : "param_value"` and `"type":"type_value"` combo configuration below.
|
- `"name":"name_value"` - is used as a wildcard replacement in the `CMD` setting value by using curly brackets `{name_value}`. The wildcard is replaced by the result of the `"value" : "param_value"` and `"type":"type_value"` combo configuration below.
|
||||||
- `"type":"<sql|setting>"` - is used to specify the type of the params, currently only 2 supported (`sql`,`setting`).
|
- `"type":"<sql|setting>"` - is used to specify the type of the params, currently only 2 supported (`sql`,`setting`).
|
||||||
- `"type":"sql"` - will execute the SQL query specified in the `value` property. The sql query needs to return only one column. The column is flattened and separated by commas (`,`), e.g: `SELECT dev_MAC from DEVICES` -> `Internet,74:ac:74:ac:74:ac,44:44:74:ac:74:ac`. This is then used to replace the wildcards in the `CMD` setting.
|
- `"type":"sql"` - will execute the SQL query specified in the `value` property. The sql query needs to return only one column. The column is flattened and separated by commas (`,`), e.g: `SELECT devMac from DEVICES` -> `Internet,74:ac:74:ac:74:ac,44:44:74:ac:74:ac`. This is then used to replace the wildcards in the `CMD` setting.
|
||||||
- `"type":"setting"` - The setting code name. A combination of the value from `unique_prefix` + `_` + `function` value, or otherwise the code name you can find in the Settings page under the Setting display name, e.g. `PIHOLE_RUN`.
|
- `"type":"setting"` - The setting code name. A combination of the value from `unique_prefix` + `_` + `function` value, or otherwise the code name you can find in the Settings page under the Setting display name, e.g. `PIHOLE_RUN`.
|
||||||
- `"value": "param_value"` - Needs to contain a setting code name or SQL query without wildcards.
|
- `"value": "param_value"` - Needs to contain a setting code name or SQL query without wildcards.
|
||||||
- `"timeoutMultiplier" : true` - used to indicate if the value should multiply the max timeout for the whole script run by the number of values in the given parameter.
|
- `"timeoutMultiplier" : true` - used to indicate if the value should multiply the max timeout for the whole script run by the number of values in the given parameter.
|
||||||
@@ -474,13 +474,13 @@ Below are some general additional notes, when defining `params`:
|
|||||||
> "params" : [{
|
> "params" : [{
|
||||||
> "name" : "ips",
|
> "name" : "ips",
|
||||||
> "type" : "sql",
|
> "type" : "sql",
|
||||||
> "value" : "SELECT dev_LastIP from DEVICES",
|
> "value" : "SELECT devLastIP from DEVICES",
|
||||||
> "timeoutMultiplier" : true
|
> "timeoutMultiplier" : true
|
||||||
> },
|
> },
|
||||||
> {
|
> {
|
||||||
> "name" : "macs",
|
> "name" : "macs",
|
||||||
> "type" : "sql",
|
> "type" : "sql",
|
||||||
> "value" : "SELECT dev_MAC from DEVICES"
|
> "value" : "SELECT devMac from DEVICES"
|
||||||
> },
|
> },
|
||||||
> {
|
> {
|
||||||
> "name" : "timeout",
|
> "name" : "timeout",
|
||||||
@@ -527,7 +527,7 @@ The UI component is defined as a JSON object containing a list of `elements`. Ea
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"function": "dev_Icon",
|
"function": "devIcon",
|
||||||
"type": {
|
"type": {
|
||||||
"dataType": "string",
|
"dataType": "string",
|
||||||
"elements": [
|
"elements": [
|
||||||
@@ -536,7 +536,7 @@ The UI component is defined as a JSON object containing a list of `elements`. Ea
|
|||||||
"elementOptions": [
|
"elementOptions": [
|
||||||
{ "cssClasses": "input-group-addon iconPreview" },
|
{ "cssClasses": "input-group-addon iconPreview" },
|
||||||
{ "getStringKey": "Gen_SelectToPreview" },
|
{ "getStringKey": "Gen_SelectToPreview" },
|
||||||
{ "customId": "NEWDEV_dev_Icon_preview" }
|
{ "customId": "NEWDEV_devIcon_preview" }
|
||||||
],
|
],
|
||||||
"transformers": []
|
"transformers": []
|
||||||
},
|
},
|
||||||
@@ -548,7 +548,7 @@ The UI component is defined as a JSON object containing a list of `elements`. Ea
|
|||||||
{
|
{
|
||||||
"onChange": "updateIconPreview(this)"
|
"onChange": "updateIconPreview(this)"
|
||||||
},
|
},
|
||||||
{ "customParams": "NEWDEV_dev_Icon,NEWDEV_dev_Icon_preview" }
|
{ "customParams": "NEWDEV_devIcon,NEWDEV_devIcon_preview" }
|
||||||
],
|
],
|
||||||
"transformers": []
|
"transformers": []
|
||||||
}
|
}
|
||||||
@@ -649,7 +649,7 @@ The UI will adjust how columns are displayed in the UI based on the resolvers de
|
|||||||
| See below for information on `threshold`, `replace`. | |
|
| See below for information on `threshold`, `replace`. | |
|
||||||
| | |
|
| | |
|
||||||
| `options` Property | Used in conjunction with types like `threshold`, `replace`, `regex`. |
|
| `options` Property | Used in conjunction with types like `threshold`, `replace`, `regex`. |
|
||||||
| `options_params` Property | Used in conjunction with a `"options": "[{value}]"` template and `text.select`/`list.select`. Can specify SQL query (needs to return 2 columns `SELECT dev_Name as name, dev_Mac as id`) or Setting (not tested) to populate the dropdown. Check example below or have a look at the `NEWDEV` plugin `config.json` file. |
|
| `options_params` Property | Used in conjunction with a `"options": "[{value}]"` template and `text.select`/`list.select`. Can specify SQL query (needs to return 2 columns `SELECT devName as name, devMac as id`) or Setting (not tested) to populate the dropdown. Check example below or have a look at the `NEWDEV` plugin `config.json` file. |
|
||||||
| `threshold` | The `options` array contains objects ordered from the lowest `maximum` to the highest. The corresponding `hexColor` is used for the value background color if it's less than the specified `maximum` but more than the previous one in the `options` array. |
|
| `threshold` | The `options` array contains objects ordered from the lowest `maximum` to the highest. The corresponding `hexColor` is used for the value background color if it's less than the specified `maximum` but more than the previous one in the `options` array. |
|
||||||
| `replace` | The `options` array contains objects with an `equals` property, which is compared to the "value." If the values are the same, the string in `replacement` is displayed in the UI instead of the actual "value". |
|
| `replace` | The `options` array contains objects with an `equals` property, which is compared to the "value." If the values are the same, the string in `replacement` is displayed in the UI instead of the actual "value". |
|
||||||
| `regex` | Applies a regex to the value. The `options` array contains objects with an `type` (must be set to `regex`) and `param` (must contain the regex itself) property. |
|
| `regex` | Applies a regex to the value. The `options` array contains objects with an `type` (must be set to `regex`) and `param` (must contain the regex itself) property. |
|
||||||
@@ -669,7 +669,7 @@ The UI will adjust how columns are displayed in the UI based on the resolvers de
|
|||||||
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"function": "dev_DeviceType",
|
"function": "devType",
|
||||||
"type": {"dataType":"string", "elements": [{"elementType" : "select", "elementOptions" : [] ,"transformers": []}]},
|
"type": {"dataType":"string", "elements": [{"elementType" : "select", "elementOptions" : [] ,"transformers": []}]},
|
||||||
"maxLength": 30,
|
"maxLength": 30,
|
||||||
"default_value": "",
|
"default_value": "",
|
||||||
@@ -678,7 +678,7 @@ The UI will adjust how columns are displayed in the UI based on the resolvers de
|
|||||||
{
|
{
|
||||||
"name" : "value",
|
"name" : "value",
|
||||||
"type" : "sql",
|
"type" : "sql",
|
||||||
"value" : "SELECT '' as id, '' as name UNION SELECT dev_DeviceType as id, dev_DeviceType as name FROM (SELECT dev_DeviceType FROM Devices UNION SELECT 'Smartphone' UNION SELECT 'Tablet' UNION SELECT 'Laptop' UNION SELECT 'PC' UNION SELECT 'Printer' UNION SELECT 'Server' UNION SELECT 'NAS' UNION SELECT 'Domotic' UNION SELECT 'Game Console' UNION SELECT 'SmartTV' UNION SELECT 'Clock' UNION SELECT 'House Appliance' UNION SELECT 'Phone' UNION SELECT 'AP' UNION SELECT 'Gateway' UNION SELECT 'Firewall' UNION SELECT 'Switch' UNION SELECT 'WLAN' UNION SELECT 'Router' UNION SELECT 'Other') AS all_devices ORDER BY id;"
|
"value" : "SELECT '' as id, '' as name UNION SELECT devType as id, devType as name FROM (SELECT devType FROM Devices UNION SELECT 'Smartphone' UNION SELECT 'Tablet' UNION SELECT 'Laptop' UNION SELECT 'PC' UNION SELECT 'Printer' UNION SELECT 'Server' UNION SELECT 'NAS' UNION SELECT 'Domotic' UNION SELECT 'Game Console' UNION SELECT 'SmartTV' UNION SELECT 'Clock' UNION SELECT 'House Appliance' UNION SELECT 'Phone' UNION SELECT 'AP' UNION SELECT 'Gateway' UNION SELECT 'Firewall' UNION SELECT 'Switch' UNION SELECT 'WLAN' UNION SELECT 'Router' UNION SELECT 'Other') AS all_devices ORDER BY id;"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "uilang",
|
"name" : "uilang",
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ There is also an in-app Help / FAQ section that should be answering frequently a
|
|||||||
|
|
||||||
#### 📥 Initial Setup
|
#### 📥 Initial Setup
|
||||||
|
|
||||||
|
- [Synology Guide](/docs/SYNOLOGY_GUIDE.md)
|
||||||
- [Subnets and VLANs configuration for arp-scan](/docs/SUBNETS.md)
|
- [Subnets and VLANs configuration for arp-scan](/docs/SUBNETS.md)
|
||||||
- [SMTP server config](/docs/SMTP.md)
|
- [SMTP server config](/docs/SMTP.md)
|
||||||
- [Custom Icon configuration and support](/docs/ICONS.md)
|
- [Custom Icon configuration and support](/docs/ICONS.md)
|
||||||
@@ -43,6 +44,7 @@ There is also an in-app Help / FAQ section that should be answering frequently a
|
|||||||
- [Invalid JSON errors debug help](/docs/DEBUG_INVALID_JSON.md)
|
- [Invalid JSON errors debug help](/docs/DEBUG_INVALID_JSON.md)
|
||||||
- [Troubleshooting Plugins](/docs/DEBUG_PLUGINS.md)
|
- [Troubleshooting Plugins](/docs/DEBUG_PLUGINS.md)
|
||||||
- [File Permissions](/docs/FILE_PERMISSIONS.md)
|
- [File Permissions](/docs/FILE_PERMISSIONS.md)
|
||||||
|
- [Performance tips](/docs/PERFORMANCE.md)
|
||||||
|
|
||||||
#### 🔝 Popular/Suggested
|
#### 🔝 Popular/Suggested
|
||||||
|
|
||||||
@@ -63,6 +65,7 @@ There is also an in-app Help / FAQ section that should be answering frequently a
|
|||||||
|
|
||||||
- [Version history (legacy)](/docs/VERSIONS_HISTORY.md)
|
- [Version history (legacy)](/docs/VERSIONS_HISTORY.md)
|
||||||
- [Reverse proxy (Nginx, Apache, SWAG)](/docs/REVERSE_PROXY.md)
|
- [Reverse proxy (Nginx, Apache, SWAG)](/docs/REVERSE_PROXY.md)
|
||||||
|
- [Installing Updates](/docs/UPDATES.md)
|
||||||
- [Setting up Authelia](/docs/AUTHELIA.md) (DRAFT)
|
- [Setting up Authelia](/docs/AUTHELIA.md) (DRAFT)
|
||||||
|
|
||||||
#### 👩💻For Developers👨💻
|
#### 👩💻For Developers👨💻
|
||||||
|
|||||||
@@ -27,6 +27,29 @@ If you are running a DNS server, such as **AdGuard**, set up **Private reverse D
|
|||||||
5. Click **Apply** to save your settings.
|
5. Click **Apply** to save your settings.
|
||||||
|
|
||||||
|
|
||||||
|
### Specifying the DNS in the container
|
||||||
|
|
||||||
|
You can specify the DNS server in the docker-compose to improve name resolution on your network.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
netalertx:
|
||||||
|
container_name: netalertx
|
||||||
|
image: "jokobsk/netalertx:latest"
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- /home/netalertx/config:/app/config
|
||||||
|
- /home/netalertx/db:/app/db
|
||||||
|
- /home/netalertx/log:/app/front/log
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
- PORT=20211
|
||||||
|
network_mode: host
|
||||||
|
dns: # specifying the DNS servers used for the container
|
||||||
|
- 10.8.0.1
|
||||||
|
- 10.8.0.17
|
||||||
|
```
|
||||||
|
|
||||||
### Using a custom resolv.conf file
|
### Using a custom resolv.conf file
|
||||||
|
|
||||||
You can configure a custom **/etc/resolv.conf** file in **docker-compose.yml** and set the nameserver to your LAN DNS server (e.g.: Pi-Hole). See the relevant [resolv.conf man](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html) entry for details.
|
You can configure a custom **/etc/resolv.conf** file in **docker-compose.yml** and set the nameserver to your LAN DNS server (e.g.: Pi-Hole). See the relevant [resolv.conf man](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html) entry for details.
|
||||||
|
|||||||
166
docs/SUBNETS.md
@@ -1,108 +1,130 @@
|
|||||||
# Subnets configuration
|
# Subnets Configuration
|
||||||
|
|
||||||
You need to specify the network interface and the network mask. You can also configure multiple subnets and specify VLANS (see exceptions below).
|
You need to specify the network interface and the network mask. You can also configure multiple subnets and specify VLANs (see VLAN exceptions below).
|
||||||
|
|
||||||
> [!TIP]
|
`ARPSCAN` can scan multiple networks if the network allows it. To scan networks directly, the subnets must be accessible from the network where NetAlertX is running. This means NetAlertX needs to have access to the interface attached to that subnet. You can verify this by running the following command in the container:
|
||||||
> You may need to increase the time between scans `ARPSCAN_RUN_SCHD` and the timeout `ARPSCAN_RUN_TIMEOUT` (and similar setting on related plugins) when adding more subnets. If the timeout setting is exceeded, the scan is cancelled to prevent application hanging from rogue plugins. Check [debugging plugins](/docs/DEBUG_PLUGINS.md) for more tips.
|
|
||||||
|
|
||||||
## Examples
|
`sudo arp-scan --interface=eth0 192.168.1.0/24`
|
||||||
|
|
||||||
|
In this example, `--interface=eth0 192.168.1.0/24` represents a neighboring subnet. If this command returns no results, the network is not accessible due to your network or firewall restrictions.
|
||||||
|
|
||||||
|
If direct scans are not possible, you can use [supplementing plugins](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md) that use alternate methods. Protocols used by the `SNMPDSC` or `DHCPLSS` plugins have good support and usually can be used as a workaround.
|
||||||
|
|
||||||
|
Alternatively, you can set up separate NetAlertX instances running on the subnets and synchronize the results into one instance with the [`SYNC` plugin](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/sync).
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> You may need to increase the time between scans `ARPSCAN_RUN_SCHD` and the timeout `ARPSCAN_RUN_TIMEOUT` (and similar settings for related plugins) when adding more subnets. If the timeout setting is exceeded, the scan is canceled to prevent the application from hanging due to rogue plugins.
|
||||||
|
> Check [debugging plugins](/docs/DEBUG_PLUGINS.md) for more tips.
|
||||||
|
|
||||||
|
## Example Values
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Please use the UI to configure settings as that ensures that the config file is in the correct format. Edit `app.conf` directly only when really necessary.
|
> Please use the UI to configure settings as it ensures the config file is in the correct format. Edit `app.conf` directly only when really necessary.
|
||||||
> 
|
> 
|
||||||
|
|
||||||
* Examples for one and two subnets (❗ Note the `['...','...']` format):
|
* **Examples for one and two subnets:**
|
||||||
* One subnet: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']`
|
* One subnet: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']`
|
||||||
* Two subnets: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0','192.168.1.0/24 --interface=eth1 -vlan=107']`
|
* Two subnets: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0','192.168.1.0/24 --interface=eth1 -vlan=107']`
|
||||||
|
|
||||||
If you get timeout messages, decrease the network mask (e.g.: from a `/16` to `/24`) or increase the `TIMEOUT` setting (e.g.: `ARPSCAN_RUN_TIMEOUT` to `300` (a timeout of 5min)) for the plugin and the interval between scans (e.g.: `ARPSCAN_RUN_SCHD` to `*/10 * * * *` (scans every 10 min)).
|
If you get timeout messages, decrease the network mask (e.g.: from `/16` to `/24`) or increase the `TIMEOUT` setting (e.g.: `ARPSCAN_RUN_TIMEOUT` to `300` (5-minute timeout)) for the plugin and the interval between scans (e.g.: `ARPSCAN_RUN_SCHD` to `*/10 * * * *` (scans every 10 minutes)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Explanation
|
## Explanation
|
||||||
|
|
||||||
### Network mask
|
### Network Mask
|
||||||
|
|
||||||
**Example value: `192.168.1.0/24`**
|
**Example value:** `192.168.1.0/24`
|
||||||
|
|
||||||
The arp-scan time itself depends on the number of IP addresses to check.
|
The `arp-scan` time itself depends on the number of IP addresses to check.
|
||||||
|
|
||||||
> The number of IPs to check depends on the [network mask](https://www.calculator.net/ip-subnet-calculator.html) you set on the `SCAN_SUBNETS` setting.
|
> The number of IPs to check depends on the [network mask](https://www.calculator.net/ip-subnet-calculator.html) you set in the `SCAN_SUBNETS` setting.
|
||||||
> For example, a `/24` mask results in 256 IPs to check, whereas a `/16` mask checks around 65,536. Every IP takes a couple of seconds. This means that with an incorrect configuration, the arp-scan will take hours to complete instead of seconds.
|
> For example, a `/24` mask results in 256 IPs to check, whereas a `/16` mask checks around 65,536 IPs. Each IP takes a couple of seconds, so an incorrect configuration could make `arp-scan` take hours instead of seconds.
|
||||||
|
|
||||||
Specify the network filter (which **significantly** speeds up the scan process). For example, the filter `192.168.1.0/24` covers IP ranges `192.168.1.0` to `192.168.1.255`.
|
Specify the network filter, which **significantly** speeds up the scan process. For example, the filter `192.168.1.0/24` covers IP ranges from `192.168.1.0` to `192.168.1.255`.
|
||||||
|
|
||||||
### Network interface (adapter)
|
### Network Interface (Adapter)
|
||||||
|
|
||||||
**Example value: `--interface=eth0`**
|
**Example value:** `--interface=eth0`
|
||||||
|
|
||||||
The adapter will probably be `eth0` or `eth1`. (Check `System info` > `Network Hardware` or run `iwconfig` in the container to find your interface name(s))
|
The adapter will probably be `eth0` or `eth1`. (Check `System Info` > `Network Hardware` or run `iwconfig` in the container to find your interface name(s)).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Alterantive to `iwconfig` run `ip -o link show | awk -F': ' '!/lo|vir|docker/ {print $2}'` in your container to find your interface name(s) (e.g.: `eth0`, `eth1`).
|
> As an alternative to `iwconfig`, run `ip -o link show | awk -F': ' '!/lo|vir|docker/ {print $2}'` in your container to find your interface name(s) (e.g.: `eth0`, `eth1`).
|
||||||
|
|
||||||
### VLANs
|
### VLANs
|
||||||
|
|
||||||
**Example value: `-vlan=107`**
|
**Example value:** `-vlan=107`
|
||||||
|
|
||||||
- Append e.g.: ` -vlan=107` to the interface field (e.g.: `eth0 -vlan=107`) for multiple vlans. More details in this [comment in this issue](https://github.com/jokob-sk/NetAlertX/issues/170#issuecomment-1419902988)
|
- Append `-vlan=107` to the interface field (e.g.: `eth0 -vlan=107`) for multiple VLANs. More details are available in this [comment](https://github.com/jokob-sk/NetAlertX/issues/170#issuecomment-1419902988).
|
||||||
|
|
||||||
|
#### VLANs on a Hyper-V Setup
|
||||||
|
|
||||||
|
> Community-sourced content by [mscreations](https://github.com/mscreations) from this [discussion](https://github.com/jokob-sk/NetAlertX/discussions/404).
|
||||||
|
|
||||||
|
**Tested Setup:** Bare Metal → Hyper-V on Win Server 2019 → Ubuntu 22.04 VM → Docker → NetAlertX.
|
||||||
|
|
||||||
|
**Approach 1 (may cause issues):**
|
||||||
|
Configure multiple network adapters in Hyper-V with distinct VLANs connected to each one using Hyper-V's network setup. However, this action can potentially lead to the Docker host's inability to handle network traffic correctly. This might interfere with other applications such as Authentik.
|
||||||
|
|
||||||
|
**Approach 2 (working example):**
|
||||||
|
|
||||||
|
Network connections to switches are configured as trunk and allow all VLANs access to the server.
|
||||||
|
|
||||||
|
By default, Hyper-V only allows untagged packets through to the VM interface, blocking VLAN-tagged packets. To fix this, follow these steps:
|
||||||
|
|
||||||
|
1. Run the following command in PowerShell on the Hyper-V machine:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Set-VMNetworkAdapterVlan -VMName <Docker VM Name> -Trunk -NativeVlanId 0 -AllowedVlanIdList "<comma separated list of vlans>"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
#### VLANs on a Hyper-V setup
|
2. Within the VM, set up sub-interfaces for each VLAN to enable scanning. On Ubuntu 22.04, Netplan can be used. In /etc/netplan/00-installer-config.yaml, add VLAN definitions:
|
||||||
|
|
||||||
> Community sourced content by [mscreations](https://github.com/mscreations) from this [discussion](https://github.com/jokob-sk/NetAlertX/discussions/404).
|
```yaml
|
||||||
|
|
||||||
> [!NOTE]
|
network:
|
||||||
> The setup this was tested on: Bare Metal -> Hyper-V on Win Server 2019 -> Ubuntu 22.04 VM -> Docker -> NetAlertX.
|
ethernets:
|
||||||
|
eth0:
|
||||||
|
dhcp4: yes
|
||||||
|
vlans:
|
||||||
|
eth0.2:
|
||||||
|
id: 2
|
||||||
|
link: eth0
|
||||||
|
addresses: [ "192.168.2.2/24" ]
|
||||||
|
routes:
|
||||||
|
- to: 192.168.2.0/24
|
||||||
|
via: 192.168.1.1
|
||||||
|
```
|
||||||
|
|
||||||
**Approach 1 (may cause issues):**
|
3. Run `sudo netplan apply` to activate the interfaces for scanning in NetAlertX.
|
||||||
|
|
||||||
Configure multiple network adapters in Hyper-V with distinct VLANs connected to each one using Hyper-V's network setup. However, this action can potentially lead to the Docker host's inability to handle network traffic correctly. The issue may stem from the creation of routes for network time servers or domain controllers on every interface, thereby preventing proper synchronization of the underlying Ubuntu VM. This interference can affect the performance of other applications such as Authentik.
|
In this case, use `192.168.2.0/24 --interface=eth0.2` in NetAlertX.
|
||||||
|
|
||||||
**Approach 2 (working example)**
|
#### VLAN Support & Exceptions
|
||||||
|
|
||||||
Network connections to switches are configured as trunk and allow all VLANs access to the server.
|
Please note the accessibility of macvlans when configured on the same computer. This is a general networking behavior, but feel free to clarify via a PR/issue.
|
||||||
|
|
||||||
By default Hyper-V only allows untagged packets through to the VM interface and no VLAN tagged packets get through. In order to fix this follow these steps:
|
|
||||||
|
|
||||||
1) Run the following command in Powershell on the Hyper-V machine:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
Set-VMNetworkAdapterVlan -VMName <Docker VM Name> -Trunk -NativeVlanId 0 -AllowedVlanIdList "<comma separated list of vlans>"
|
|
||||||
```
|
|
||||||
|
|
||||||
(There might be other ways how adjust this.)
|
|
||||||
|
|
||||||
2) Within the VM, set up sub-interfaces for each of the VLANs so they can be scanned. On Ubuntu 22.04 Netplan can be used.
|
|
||||||
|
|
||||||
In /etc/netplan/00-installer-config.yaml, add vlan definitions:
|
|
||||||
|
|
||||||
```
|
|
||||||
network:
|
|
||||||
ethernets:
|
|
||||||
eth0:
|
|
||||||
dhcp4: yes
|
|
||||||
vlans:
|
|
||||||
eth0.2:
|
|
||||||
id: 2
|
|
||||||
link: eth0
|
|
||||||
addresses: [ "192.168.2.2/24" ]
|
|
||||||
routes:
|
|
||||||
- to: 192.168.2.0/24
|
|
||||||
via: 192.168.1.1
|
|
||||||
```
|
|
||||||
|
|
||||||
3) Run `sudo netplan apply` and the interfaces are then available to scan in NetAlertX.
|
|
||||||
4) In this case, use `192.168.2.0/24 --interface=eth0.2` in NetAlertX
|
|
||||||
|
|
||||||
#### VLAN 🔍Example:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### Support for VLANS (& exceptions)
|
|
||||||
|
|
||||||
Please note the accessibility of the macvlans when they are configured on the same computer. My understanding this is a general networking behavior, but feel free to clarify via a PR/issue.
|
|
||||||
|
|
||||||
- NetAlertX does not detect the macvlan container when it is running on the same computer.
|
- NetAlertX does not detect the macvlan container when it is running on the same computer.
|
||||||
- NetAlertX recognizes the macvlan container when it is running on a different computer.
|
- NetAlertX recognizes the macvlan container when it is running on a different computer.
|
||||||
|
|
||||||
|
|
||||||
|
### Wi-Fi Extenders
|
||||||
|
|
||||||
|
A Wi-Fi extender typically works by creating a separate network or subnet, which can cause certain network scanning tools, like `arp-scan`, to be unable to detect devices behind the extender.
|
||||||
|
|
||||||
|
This happens because `arp-scan` uses ARP (Address Resolution Protocol) to map IP addresses to MAC addresses on the local network. Since ARP is a Layer 2 (data link layer) protocol, it usually only works within a single broadcast domain, which is typically limited to a single router or network segment.
|
||||||
|
|
||||||
|
When you introduce a Wi-Fi extender, it may isolate devices on different segments of the network, meaning ARP packets cannot easily traverse from one segment (your main network) to another (the network behind the extender).
|
||||||
|
|
||||||
|
To scan devices behind the extender, you can try:
|
||||||
|
|
||||||
|
- Scanning the specific subnet that the extender uses, if it is separate from the main network.
|
||||||
|
- Using [supplementing plugins](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md) that use alternate methods. Protocols used by the `SNMPDSC` or `DHCPLSS` plugins have good support and usually can be used as a workaround.
|
||||||
|
|
||||||
|
Check the [plugins list](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md) to find a plugin supported by your router and your network setup.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
74
docs/SYNOLOGY_GUIDE.md
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
# Installation on a Synology NAS
|
||||||
|
|
||||||
|
There are different ways to install NetAlertX on a Synology, including SSH-ing into the machine and using the command line. For this guide, we will use the Project option in Container manager.
|
||||||
|
|
||||||
|
## Create the folder structure
|
||||||
|
|
||||||
|
The folders you are creating below will contain the configuration and the database. Back them up regularly.
|
||||||
|
|
||||||
|
1. Create a parent folder named `netalertx`
|
||||||
|
2. Create a `db` sub-folder
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
3. Create a `config` sub-folder
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
4. Note down the folders Locations:
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
5. Open **Container manager** -> **Project** and click **Create**.
|
||||||
|
6. Fill in the details:
|
||||||
|
|
||||||
|
- Project name: `netalertx`
|
||||||
|
- Path: `/app_storage/netalertx` (will differ from yours)
|
||||||
|
- Paste in the following template:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
netalertx:
|
||||||
|
container_name: netalertx
|
||||||
|
# use the below line if you want to test the latest dev image
|
||||||
|
# image: "jokobsk/netalertx-dev:latest"
|
||||||
|
image: "jokobsk/netalertx:latest"
|
||||||
|
network_mode: "host"
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- local/path/config:/app/config
|
||||||
|
- local/path/db:/app/db
|
||||||
|
# (optional) useful for debugging if you have issues setting up the container
|
||||||
|
- local/path/logs:/app/front/log
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
- PORT=20211
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
7. Replace the paths to your volume and/or comment out unnecessary line(s):
|
||||||
|
|
||||||
|
- This is only an example, your paths will differ.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- /volume1/app_storage/netalertx/config:/app/config
|
||||||
|
- /volume1/app_storage/netalertx/db:/app/db
|
||||||
|
# (optional) useful for debugging if you have issues setting up the container
|
||||||
|
# - local/path/logs:/app/front/log <- commented out with # ⚠
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
8. (optional) Change the port number from `20211` to an unused port if this port is already used.
|
||||||
|
9. Build the project:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
10. Navigate to `<Synology URL>:20211` (or your custom port).
|
||||||
|
11. Read the [Subnets](/docs/SUBNETS.md) and [Plugins](/front/plugins/README.md) docs to complete your setup.
|
||||||
110
docs/UPDATES.md
Executable file
@@ -0,0 +1,110 @@
|
|||||||
|
# Docker Update Strategies for NetAlertX
|
||||||
|
|
||||||
|
This guide outlines several approaches for updating Docker containers, specifically using NetAlertX. Each method offers different benefits depending on the situation. Here are the methods:
|
||||||
|
|
||||||
|
- Manual: Direct commands to stop, remove, and rebuild containers.
|
||||||
|
- Dockcheck: Semi-automated with more control, suited for bulk updates.
|
||||||
|
- Watchtower: Fully automated, runs continuously to check and update containers.
|
||||||
|
|
||||||
|
You can choose any approach that fits your workflow.
|
||||||
|
|
||||||
|
> In the examples I assume that the container name is `netalertx` and the image name is `netalertx` as well.
|
||||||
|
|
||||||
|
## 1. Manual Updates
|
||||||
|
|
||||||
|
Use this method when you need precise control over a single container or when dealing with a broken container that needs immediate attention.
|
||||||
|
Example Commands
|
||||||
|
|
||||||
|
To manually update the `netalertx` container, stop it, delete it, remove the old image, and start a fresh one with `docker-compose`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Stop the container
|
||||||
|
sudo docker container stop netalertx
|
||||||
|
|
||||||
|
# Remove the container
|
||||||
|
sudo docker container rm netalertx
|
||||||
|
|
||||||
|
# Remove the old image
|
||||||
|
sudo docker image rm netalertx
|
||||||
|
|
||||||
|
# Pull and start a new container
|
||||||
|
sudo docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Alternative: Force Pull with Docker Compose
|
||||||
|
|
||||||
|
You can also use `--pull always` to ensure Docker pulls the latest image before starting the container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo docker-compose up --pull always -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Dockcheck for Bulk Container Updates
|
||||||
|
|
||||||
|
Always check the [Dockcheck](https://github.com/mag37/dockcheck) docs if encountering issues with the guide below.
|
||||||
|
|
||||||
|
Dockcheck is a useful tool if you have multiple containers to update and some flexibility for handling potential issues that might arise during mass updates. Dockcheck allows you to inspect each container and decide when to update.
|
||||||
|
|
||||||
|
### Example Workflow with Dockcheck
|
||||||
|
|
||||||
|
You might use Dockcheck to:
|
||||||
|
|
||||||
|
- Inspect container versions.
|
||||||
|
- Pull the latest images in bulk.
|
||||||
|
- Apply updates selectively.
|
||||||
|
|
||||||
|
Dockcheck can help streamline bulk updates, especially if you’re managing multiple containers.
|
||||||
|
|
||||||
|
Below is a script I use to run an update of the Dockcheck script and start a check for new containers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /path/to/Docker &&
|
||||||
|
rm dockcheck.sh &&
|
||||||
|
wget https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh &&
|
||||||
|
sudo chmod +x dockcheck.sh &&
|
||||||
|
sudo ./dockcheck.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Automated Updates with Watchtower
|
||||||
|
|
||||||
|
Always check the [watchtower](https://github.com/containrrr/watchtower) docs if encountering issues with the guide below.
|
||||||
|
|
||||||
|
Watchtower monitors your Docker containers and automatically updates them when new images are available. This is ideal for ongoing updates without manual intervention.
|
||||||
|
|
||||||
|
### Setting Up Watchtower
|
||||||
|
|
||||||
|
#### 1. Pull the Watchtower Image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker pull containrrr/watchtower
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Run Watchtower to update all images:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name watchtower \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
containrrr/watchtower \
|
||||||
|
--interval 300 # Check for updates every 5 minutes
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Run Watchtower to update only NetAlertX:
|
||||||
|
|
||||||
|
You can specify which containers to monitor by listing them. For example, to monitor netalertx only:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name watchtower \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
containrrr/watchtower netalertx
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
- Manual: Ideal for individual or critical updates.
|
||||||
|
- Dockcheck: Suitable for controlled, mass updates.
|
||||||
|
- Watchtower: Fully automated, best for continuous deployment setups.
|
||||||
|
|
||||||
|
These approaches allow you to maintain flexibility in how you update Docker containers, depending on the urgency and scale of the update.
|
||||||
BIN
docs/img/DEV_ENV_SETUP/Maintenance_Logs_Restart_server.png
Executable file
|
After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 82 KiB |
BIN
docs/img/PERFORMANCE/db_size_check.png
Executable file
|
After Width: | Height: | Size: 61 KiB |
BIN
docs/img/SYNOLOGY/01_Create_folder_structure.png
Executable file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/img/SYNOLOGY/02_Create_folder_structure_db.png
Executable file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/img/SYNOLOGY/03_Create_folder_structure_db.png
Executable file
|
After Width: | Height: | Size: 28 KiB |
BIN
docs/img/SYNOLOGY/04_Create_folder_structure_config.png
Executable file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/img/SYNOLOGY/05_Access_folder_properties.png
Executable file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/img/SYNOLOGY/06_Note_location.png
Executable file
|
After Width: | Height: | Size: 48 KiB |
BIN
docs/img/SYNOLOGY/07_Create_project.png
Executable file
|
After Width: | Height: | Size: 26 KiB |
BIN
docs/img/SYNOLOGY/08_Adjust_docker_compose_volumes.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/img/SYNOLOGY/09_Run_and_build.png
Executable file
|
After Width: | Height: | Size: 15 KiB |
@@ -12,11 +12,26 @@
|
|||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
:root {
|
:root {
|
||||||
--color-aqua: #00c0ef;
|
--color-aqua: #00c0ef;
|
||||||
|
--color-blue: #0060df;
|
||||||
--color-green: #00a65a;
|
--color-green: #00a65a;
|
||||||
--color-yellow: #f39c12;
|
--color-yellow: #f39c12;
|
||||||
--color-red: #dd4b39;
|
--color-red: #dd4b39;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
Helper Classes
|
||||||
|
----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
.pointer
|
||||||
|
{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question
|
||||||
|
{
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Text Classes
|
Text Classes
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
@@ -124,6 +139,21 @@
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
|
||||||
|
.hideOnBigScreen{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) { /* on mobile */
|
||||||
|
|
||||||
|
.hideOnMobile{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Main Sections
|
Main Sections
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
@@ -197,6 +227,12 @@
|
|||||||
{
|
{
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
{
|
||||||
|
background-image: url('../img/background.png');
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Customized Main Menu
|
Customized Main Menu
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
@@ -261,7 +297,7 @@
|
|||||||
.main-sidebar {
|
.main-sidebar {
|
||||||
padding-top: 50px;
|
padding-top: 50px;
|
||||||
}
|
}
|
||||||
.content-header {
|
.content-header #pageTitle{
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -757,6 +793,35 @@ height: 50px;
|
|||||||
display: inline-grid;
|
display: inline-grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------- */
|
||||||
|
/* Presence */
|
||||||
|
/* --------------------------------------------------------- */
|
||||||
|
.presencenceKey
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.presenceOnlineNow{
|
||||||
|
background-color: var(--color-green);
|
||||||
|
}
|
||||||
|
|
||||||
|
.presenceOnlinePast{
|
||||||
|
background-color: var(--color-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
.presenceOnlinePastMiss{
|
||||||
|
background-color: var(--color-yellow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.presenceKeyBoxes
|
||||||
|
{
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
display: inline-block;
|
||||||
|
/* background: #fff; */
|
||||||
|
opacity: .75;
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
/* --------------------------------------------------------- */
|
||||||
/* report */
|
/* report */
|
||||||
/* --------------------------------------------------------- */
|
/* --------------------------------------------------------- */
|
||||||
@@ -781,20 +846,20 @@ height: 50px;
|
|||||||
/* settings */
|
/* settings */
|
||||||
/* --------------------------------------------------------- */
|
/* --------------------------------------------------------- */
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) { /* on mobile */
|
||||||
/* hide on mobile */
|
/* hide on mobile */
|
||||||
.setting_description {
|
.setting_description {
|
||||||
/* color: red; */
|
/* color: red; */
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.setting_input{
|
/* .setting_input{
|
||||||
width:70%;
|
width:70%;
|
||||||
/* background-color: red; */
|
|
||||||
}
|
}
|
||||||
.setting_name
|
.setting_name
|
||||||
{
|
{
|
||||||
width:30%;
|
width:30%;
|
||||||
}
|
} */
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
@@ -802,14 +867,14 @@ height: 50px;
|
|||||||
/* color: green; */
|
/* color: green; */
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.setting_input{
|
/* .setting_input{
|
||||||
width:40%;
|
width:40%;
|
||||||
/* background-color: green; */
|
|
||||||
}
|
}
|
||||||
.setting_name
|
.setting_name
|
||||||
{
|
{
|
||||||
width:19%;
|
width:19%;
|
||||||
}
|
} */
|
||||||
}
|
}
|
||||||
|
|
||||||
.settingswrap
|
.settingswrap
|
||||||
@@ -874,10 +939,10 @@ height: 50px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.table_row {
|
#settingsPage .table_row {
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
width:100%;
|
/* width:100%; */
|
||||||
display: flex;
|
/* display: flex; */
|
||||||
border-bottom-width: 1px;
|
border-bottom-width: 1px;
|
||||||
border-bottom-style: solid;
|
border-bottom-style: solid;
|
||||||
border-color: #606060;
|
border-color: #606060;
|
||||||
@@ -897,10 +962,6 @@ height: 50px;
|
|||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.setting_description
|
|
||||||
{
|
|
||||||
width:40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.myhidden
|
.myhidden
|
||||||
{
|
{
|
||||||
@@ -1041,7 +1102,11 @@ input[readonly] {
|
|||||||
|
|
||||||
.settingsSearchWrap
|
.settingsSearchWrap
|
||||||
{
|
{
|
||||||
padding:10px;
|
/* padding:10px; */
|
||||||
|
/* display: flex; */
|
||||||
|
justify-content: center; /* Centers horizontally */
|
||||||
|
align-items: center; /* Centers vertically */
|
||||||
|
/* height: 60px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-sticky-bottom-section {
|
.settings-sticky-bottom-section {
|
||||||
@@ -1051,11 +1116,12 @@ input[readonly] {
|
|||||||
/* opacity: 0.8; */
|
/* opacity: 0.8; */
|
||||||
bottom: 30px;
|
bottom: 30px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
margin:1px;
|
/* margin:1px; */
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: inherit;
|
border-color: inherit;
|
||||||
/* width: 87%; */
|
/* width: 87%; */
|
||||||
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-sticky-bottom-section:hover {
|
.settings-sticky-bottom-section:hover {
|
||||||
@@ -1074,7 +1140,7 @@ input[readonly] {
|
|||||||
width: 14px;
|
width: 14px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -6px;
|
right: -6px;
|
||||||
top: 6px;
|
top: 13px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1086,9 +1152,9 @@ input[readonly] {
|
|||||||
.saveSettingsWrapper button
|
.saveSettingsWrapper button
|
||||||
{
|
{
|
||||||
width:70%;
|
width:70%;
|
||||||
margin-top:20px;
|
/* margin-top:20px; */
|
||||||
margin-left:15%;
|
margin-left:15%;
|
||||||
margin-bottom:20px;
|
/* margin-bottom:20px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
#settingsPage .select2-selection
|
#settingsPage .select2-selection
|
||||||
@@ -1125,7 +1191,6 @@ input[readonly] {
|
|||||||
height: 200px; */
|
height: 200px; */
|
||||||
background-color: #f3f3f3;
|
background-color: #f3f3f3;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
margin: 20px;
|
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1165,11 +1230,6 @@ input[readonly] {
|
|||||||
font-size: large;
|
font-size: large;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pointer
|
|
||||||
{
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drag
|
.drag
|
||||||
{
|
{
|
||||||
cursor: move; /* fallback if grab cursor is unsupported */
|
cursor: move; /* fallback if grab cursor is unsupported */
|
||||||
@@ -1192,7 +1252,7 @@ input[readonly] {
|
|||||||
background-color:#606060 !important;
|
background-color:#606060 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.networkPageHelp{
|
.helpIconSmallTopRight{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
font-size: x-small;
|
font-size: x-small;
|
||||||
margin-bottom: 6px;
|
margin-bottom: 6px;
|
||||||
@@ -1309,7 +1369,8 @@ input[readonly] {
|
|||||||
border: solid;
|
border: solid;
|
||||||
border-color:cyan;
|
border-color:cyan;
|
||||||
}
|
}
|
||||||
#networkTree .netStatus-Off-line i
|
#networkTree .netStatus-Off-line i,
|
||||||
|
#networkTree .netStatus-Off-line svg
|
||||||
{
|
{
|
||||||
color: #dd4b39;
|
color: #dd4b39;
|
||||||
}
|
}
|
||||||
@@ -1390,7 +1451,17 @@ input[readonly] {
|
|||||||
.plugin-content #tabs-content-location
|
.plugin-content #tabs-content-location
|
||||||
{
|
{
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
|
/* padding-top: 0; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.integrations-plugins .content
|
||||||
|
{
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plugin-content .tab-content
|
||||||
|
{
|
||||||
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.plugins-description
|
.plugins-description
|
||||||
@@ -1445,6 +1516,33 @@ input[readonly] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.textOverflow
|
||||||
|
{
|
||||||
|
white-space: nowrap; /* Prevent text from wrapping to a new line */
|
||||||
|
overflow: hidden; /* Hide the overflowed text */
|
||||||
|
text-overflow: ellipsis; /* Show ellipsis (...) */
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-stretched
|
||||||
|
{
|
||||||
|
min-width: -moz-available;
|
||||||
|
min-width: -webkit-fill-available;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pluginBadge
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pluginBadgeWrap
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
display: ruby;
|
||||||
|
z-index: 1;
|
||||||
|
position: sticky;
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Spin
|
Spin
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ html {
|
|||||||
background-color: #353c42;
|
background-color: #353c42;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-image: url('../img/boxed-bg-dark.png') !important;
|
||||||
|
}
|
||||||
|
|
||||||
body, .bg-yellow, .callout.callout-warning, .alert-warning, .label-warning, .modal-warning .modal-body {
|
body, .bg-yellow, .callout.callout-warning, .alert-warning, .label-warning, .modal-warning .modal-body {
|
||||||
|
|
||||||
background-color: #353c42 !important;
|
background-color: #353c42 !important;
|
||||||
|
|||||||
21
front/css/system-dark-patch-cal.css
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
.fc-sat {
|
||||||
|
background-color: #444D56; }
|
||||||
|
.fc-sun {
|
||||||
|
background-color: #444D56; }
|
||||||
|
.fc-today {
|
||||||
|
background-color: #8D9AAC !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.fc-cell-content {
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.fc-widget-header {
|
||||||
|
background-color: #353c42;
|
||||||
|
}
|
||||||
|
.fc-unthemed .fc-content, .fc-unthemed .fc-divider, .fc-unthemed .fc-list-heading td, .fc-unthemed .fc-list-view, .fc-unthemed .fc-popover, .fc-unthemed .fc-row, .fc-unthemed tbody, .fc-unthemed td, .fc-unthemed th, .fc-unthemed thead{
|
||||||
|
border-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
737
front/css/system-dark-patch.css
Executable file
@@ -0,0 +1,737 @@
|
|||||||
|
/* Pi-hole: A black hole for Internet advertisements
|
||||||
|
* (c) 2020 Pi-hole, LLC (https://pi-hole.net)
|
||||||
|
* Network-wide ad blocking via your own hardware.
|
||||||
|
*
|
||||||
|
* This file is copyright under the latest version of the EUPL.
|
||||||
|
* Please see LICENSE file for your rights under this license.
|
||||||
|
*
|
||||||
|
* The colors used in this theme has been inspired by
|
||||||
|
* https://github.com/anvyst/adminlte-skin-midnight
|
||||||
|
*
|
||||||
|
* Additional fixes For Pi.Alert UI by leiweibau */
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
background-color: #353c42;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-image: url('../img/boxed-bg-dark.png') !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
body, .bg-yellow, .callout.callout-warning, .alert-warning, .label-warning, .modal-warning .modal-body {
|
||||||
|
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
color: #bec5cb !important;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
color: #44def1;
|
||||||
|
}
|
||||||
|
.content-header > .breadcrumb > li > a {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.table > thead > tr > th,
|
||||||
|
.table > tbody > tr > th,
|
||||||
|
.table > tfoot > tr > th,
|
||||||
|
.table > thead > tr > td,
|
||||||
|
.table > tbody > tr > td,
|
||||||
|
.table > tfoot > tr > td {
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
.table > thead > tr.odd,
|
||||||
|
.table > tbody > tr.odd,
|
||||||
|
.table > tfoot > tr.odd {
|
||||||
|
background-color: #2a2f34;
|
||||||
|
}
|
||||||
|
.table > thead > tr.odd:hover,
|
||||||
|
.table > tbody > tr.odd:hover,
|
||||||
|
.table > tfoot > tr.odd:hover,
|
||||||
|
.table > thead > tr.even:hover,
|
||||||
|
.table > tbody > tr.even:hover,
|
||||||
|
.table > tfoot > tr.even:hover {
|
||||||
|
background-color: #1e2226;
|
||||||
|
}
|
||||||
|
.table-bordered,
|
||||||
|
.table-bordered > thead > tr > th,
|
||||||
|
.table-bordered > tbody > tr > th,
|
||||||
|
.table-bordered > tfoot > tr > th,
|
||||||
|
.table-bordered > thead > tr > td,
|
||||||
|
.table-bordered > tbody > tr > td,
|
||||||
|
.table-bordered > tfoot > tr > td {
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.dataTables_wrapper input[type="search"] {
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #353c42;
|
||||||
|
border: 0;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.dataTables_paginate .pagination li > a {
|
||||||
|
background-color: #353c42;
|
||||||
|
border-color: #353c42;
|
||||||
|
}
|
||||||
|
.pagination > .disabled > a,
|
||||||
|
.pagination > .disabled > a:focus,
|
||||||
|
.pagination > .disabled > a:hover,
|
||||||
|
.pagination > .disabled > span,
|
||||||
|
.pagination > .disabled > span:focus,
|
||||||
|
.pagination > .disabled > span:hover {
|
||||||
|
cursor: not-allowed;
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #353c42;
|
||||||
|
border-color: #353c42;
|
||||||
|
}
|
||||||
|
.pagination > li > a:focus,
|
||||||
|
.pagination > li > a:hover,
|
||||||
|
.pagination > li > span:focus,
|
||||||
|
.pagination > li > span:hover {
|
||||||
|
z-index: 2;
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #54606b;
|
||||||
|
border-color: #54606b;
|
||||||
|
}
|
||||||
|
.wrapper,
|
||||||
|
.main-sidebar,
|
||||||
|
.left-side {
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.user-panel > .info,
|
||||||
|
.user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.sidebar-menu > li.header {
|
||||||
|
color: #556068;
|
||||||
|
background-color: #1e2225;
|
||||||
|
}
|
||||||
|
.sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.sidebar-menu > li:hover > a,
|
||||||
|
.sidebar-menu > li > a:focus,
|
||||||
|
.sidebar-menu > li.active > a {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #22272a;
|
||||||
|
border-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background-color: #32393e;
|
||||||
|
}
|
||||||
|
.sidebar a {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.treeview-menu > li > a {
|
||||||
|
color: #949fa8;
|
||||||
|
}
|
||||||
|
.treeview-menu > li.active > a,
|
||||||
|
.treeview-menu > li > a:hover,
|
||||||
|
.treeview-menu > li > a:focus {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #3e464c;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
.sidebar-form input[type="text"],
|
||||||
|
.sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #3e464c;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.sidebar-form input[type="text"]:focus,
|
||||||
|
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
.box,
|
||||||
|
.box-footer,
|
||||||
|
.info-box,
|
||||||
|
.box-comment,
|
||||||
|
.comment-text,
|
||||||
|
.comment-text .username {
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.box-comments .box-comment {
|
||||||
|
border-bottom-color: #353c42;
|
||||||
|
}
|
||||||
|
.box-footer {
|
||||||
|
border-top: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.box-header.with-border {
|
||||||
|
border-bottom: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.box-solid,
|
||||||
|
.box {
|
||||||
|
border: 1px solid #272c30;
|
||||||
|
}
|
||||||
|
.box-solid > .box-header,
|
||||||
|
.box > .box-header {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.box-solid > .box-header .btn,
|
||||||
|
.box > .box-header .btn {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.box.box-info,
|
||||||
|
.box.box-primary,
|
||||||
|
.box.box-success,
|
||||||
|
.box.box-warning,
|
||||||
|
.box.box-danger {
|
||||||
|
border-top-width: 3px;
|
||||||
|
}
|
||||||
|
.main-header .navbar {
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.main-header .navbar .nav > li > a,
|
||||||
|
.main-header .navbar .nav > li > .navbar-text {
|
||||||
|
color: #bec5cb;
|
||||||
|
max-height: 50px;
|
||||||
|
}
|
||||||
|
.main-header .navbar .nav > li > a:hover,
|
||||||
|
.main-header .navbar .nav > li > a:active,
|
||||||
|
.main-header .navbar .nav > li > a:focus,
|
||||||
|
.main-header .navbar .nav .open > a,
|
||||||
|
.main-header .navbar .nav .open > a:hover,
|
||||||
|
.main-header .navbar .nav .open > a:focus,
|
||||||
|
.main-header .navbar .nav > .active > a {
|
||||||
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.main-header .navbar .sidebar-toggle {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.timeline li .timeline-item {
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #272c30;
|
||||||
|
border-color: #353c42;
|
||||||
|
}
|
||||||
|
.timeline li .timeline-header {
|
||||||
|
border-bottom-color: #353c42;
|
||||||
|
}
|
||||||
|
.nav-stacked > li > a {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.nav-stacked > li > a:hover {
|
||||||
|
color: white;
|
||||||
|
background-color: #1e2226;
|
||||||
|
}
|
||||||
|
.content-wrapper,
|
||||||
|
.right-side {
|
||||||
|
background-color: #353c42;
|
||||||
|
}
|
||||||
|
.main-footer,
|
||||||
|
.nav-tabs-custom {
|
||||||
|
background-color: #272c30;
|
||||||
|
border-top-color: #353c42;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.main-footer .nav-tabs,
|
||||||
|
.nav-tabs-custom .nav-tabs {
|
||||||
|
background-color: #30383f;
|
||||||
|
border-bottom-color: #2f363b;
|
||||||
|
}
|
||||||
|
.main-footer .tab-content,
|
||||||
|
.nav-tabs-custom .tab-content {
|
||||||
|
background-color: #30383f;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs {
|
||||||
|
background: rgba(64, 72, 80, 0.666);
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs > li {
|
||||||
|
margin-right: 1px;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs > li.active > a,
|
||||||
|
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||||
|
border-left-color: #30383f;
|
||||||
|
border-right-color: #30383f;
|
||||||
|
background-color: #30383f;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs > li:not(.active):hover {
|
||||||
|
border-top-color: #d2d6de;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs > li > a {
|
||||||
|
color: #8e959b;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs > li > a:focus {
|
||||||
|
color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs > li:hover > a,
|
||||||
|
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||||
|
background-color: #353c42;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-group {
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.list-group .list-group-item {
|
||||||
|
border-color: #353c42;
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.input-group .input-group-addon {
|
||||||
|
border-right: 1px solid #272c30;
|
||||||
|
}
|
||||||
|
.select2 .select2-selection {
|
||||||
|
background-color: #353c42;
|
||||||
|
color: #bec5cb;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.select2 .select2-selection .select2-container--default,
|
||||||
|
.select2 .select2-selection .select2-selection--single,
|
||||||
|
.select2 .select2-selection .select2-selection--multiple,
|
||||||
|
.select2 .select2-selection .select2-selection__rendered {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.select2-dropdown {
|
||||||
|
background-color: #353c42;
|
||||||
|
color: #bec5cb;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.select2-dropdown .select2-search__field {
|
||||||
|
background-color: #272c30;
|
||||||
|
color: #bec5cb;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.select2-container--default.select2-container--open {
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-boxed {
|
||||||
|
background: url("../../img/boxed-bg-dark.png") repeat fixed;
|
||||||
|
}
|
||||||
|
.not-used {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
.not-used:hover {
|
||||||
|
background-color: #c5c5c5;
|
||||||
|
}
|
||||||
|
.used {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.used:hover {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graphs-grid {
|
||||||
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
.graphs-ticks {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.queries-permitted {
|
||||||
|
background-color: #00a65a;
|
||||||
|
}
|
||||||
|
.queries-blocked {
|
||||||
|
background-color: #999;
|
||||||
|
}
|
||||||
|
.progress {
|
||||||
|
background-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-green {
|
||||||
|
background-color: #005c32 !important;
|
||||||
|
}
|
||||||
|
.bg-aqua {
|
||||||
|
background-color: #007997 !important;
|
||||||
|
}
|
||||||
|
.bg-yellow {
|
||||||
|
background-color: #b1720c !important;
|
||||||
|
}
|
||||||
|
.bg-red {
|
||||||
|
background-color: #913225 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
code,
|
||||||
|
pre {
|
||||||
|
padding: 2px 4px;
|
||||||
|
font-size: 90%;
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #353c42;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Used in the Query Log table */
|
||||||
|
.text-green-light {
|
||||||
|
color: #5ca314 !important;
|
||||||
|
}
|
||||||
|
.text-green {
|
||||||
|
color: #00aa60 !important;
|
||||||
|
}
|
||||||
|
.text-orange {
|
||||||
|
color: #b1720c !important;
|
||||||
|
}
|
||||||
|
.text-red {
|
||||||
|
color: #bd2c19 !important;
|
||||||
|
}
|
||||||
|
.text-vivid-blue {
|
||||||
|
color: #007997 !important;
|
||||||
|
}
|
||||||
|
td.highlight {
|
||||||
|
background-color: rgba(255, 204, 0, 0.333);
|
||||||
|
}
|
||||||
|
.btn-default {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #3e464c;
|
||||||
|
color: #bec5cb;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Used in debug log page */
|
||||||
|
.log-red {
|
||||||
|
color: #ff4038;
|
||||||
|
}
|
||||||
|
.log-green {
|
||||||
|
color: #4c4;
|
||||||
|
}
|
||||||
|
.log-yellow {
|
||||||
|
color: #fb0;
|
||||||
|
}
|
||||||
|
.log-blue {
|
||||||
|
color: #48f;
|
||||||
|
}
|
||||||
|
.log-purple {
|
||||||
|
color: #b8e;
|
||||||
|
}
|
||||||
|
.log-cyan {
|
||||||
|
color: #0df;
|
||||||
|
}
|
||||||
|
.log-gray {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
#output {
|
||||||
|
border-color: #505458;
|
||||||
|
background: #272c30;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Used by the long-term pages */
|
||||||
|
.daterangepicker {
|
||||||
|
background-color: #3e464c;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.daterangepicker .ranges li:hover {
|
||||||
|
background-color: #353c42;
|
||||||
|
}
|
||||||
|
.daterangepicker .ranges li.active {
|
||||||
|
background-color: #1e2226; /* Color also used in table pagination */
|
||||||
|
}
|
||||||
|
.daterangepicker .calendar-table {
|
||||||
|
background-color: #3e464c;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
}
|
||||||
|
.daterangepicker td.off,
|
||||||
|
.daterangepicker td.off.in-range,
|
||||||
|
.daterangepicker td.off.start-date,
|
||||||
|
.daterangepicker td.off.end-date {
|
||||||
|
background-color: #485158;
|
||||||
|
}
|
||||||
|
.daterangepicker td.available:hover,
|
||||||
|
.daterangepicker th.available:hover {
|
||||||
|
background-color: #1e2226;
|
||||||
|
}
|
||||||
|
.daterangepicker td.active,
|
||||||
|
.daterangepicker td.active:hover,
|
||||||
|
.daterangepicker td.in-range:hover {
|
||||||
|
background-color: #225e92;
|
||||||
|
}
|
||||||
|
.daterangepicker td.in-range {
|
||||||
|
background-color: #1e2226;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
select.form-control,
|
||||||
|
.form-group .input-group-addon,
|
||||||
|
.input-group .input-group-addon,
|
||||||
|
.form-group input,
|
||||||
|
.input-group input,
|
||||||
|
.form-group textarea,
|
||||||
|
.input-group textarea,
|
||||||
|
.daterangepicker select.hourselect,
|
||||||
|
.daterangepicker select.minuteselect,
|
||||||
|
.daterangepicker select.secondselect,
|
||||||
|
.daterangepicker select.ampmselect,
|
||||||
|
.form-control,
|
||||||
|
div.dataTables_wrapper div.dataTables_length select {
|
||||||
|
background-color: #353c42;
|
||||||
|
color: #bec5cb;
|
||||||
|
border: 1px solid #3d444b;
|
||||||
|
}
|
||||||
|
.form-control[disabled],
|
||||||
|
.form-control[readonly],
|
||||||
|
fieldset[disabled] .form-control {
|
||||||
|
background-color: #353c42;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {
|
||||||
|
background-color: #4c5761;
|
||||||
|
color: #bec5cb;
|
||||||
|
border: 1px solid #171c20;
|
||||||
|
}
|
||||||
|
.table-striped > tbody > tr:nth-of-type(2n + 1) {
|
||||||
|
background-color: #2d343a;
|
||||||
|
}
|
||||||
|
.panel,
|
||||||
|
.panel-body,
|
||||||
|
.panel-default > .panel-heading {
|
||||||
|
background-color: #3e464c;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #353c42;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.box.box-solid.box-info,
|
||||||
|
.box.box-solid.box-info > .box-header {
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #367fa9 !important;
|
||||||
|
border: 1px solid #367fa9;
|
||||||
|
}
|
||||||
|
input[type="password"]::-webkit-credentials-auto-fill-button {
|
||||||
|
background: #bfc5ca;
|
||||||
|
}
|
||||||
|
input[type="password"]::-webkit-caps-lock-indicator {
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.network-never {
|
||||||
|
background-color: #661b02;
|
||||||
|
}
|
||||||
|
.network-recent {
|
||||||
|
background-color: #114100;
|
||||||
|
}
|
||||||
|
.network-old {
|
||||||
|
background-color: #525200;
|
||||||
|
}
|
||||||
|
.network-older {
|
||||||
|
background-color: #502b00;
|
||||||
|
}
|
||||||
|
.network-gradient {
|
||||||
|
background-image: linear-gradient(to right, #114100 0%, #525200 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icheckbox_polaris,
|
||||||
|
.icheckbox_futurico,
|
||||||
|
.icheckbox_minimal-blue {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.iradio_polaris,
|
||||||
|
.iradio_futurico,
|
||||||
|
.iradio_minimal-blue {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Overlay box with spinners as shown during data collection for graphs */
|
||||||
|
.box .overlay,
|
||||||
|
.overlay-wrapper .overlay {
|
||||||
|
z-index: 50;
|
||||||
|
background-color: rgba(53, 60, 66, 0.733);
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
.box .overlay > .fa,
|
||||||
|
.overlay-wrapper .overlay > .fa,
|
||||||
|
.navbar-nav > .user-menu > .dropdown-menu > .user-body a {
|
||||||
|
color: #bec5cb !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav > .user-menu > .dropdown-menu > .user-footer {
|
||||||
|
background-color: #353c42bb;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
background: #272c30;
|
||||||
|
}
|
||||||
|
.modal-header {
|
||||||
|
border-bottom-color: #353c42;
|
||||||
|
}
|
||||||
|
.modal-footer {
|
||||||
|
border-top-color: #353c42;
|
||||||
|
}
|
||||||
|
.close {
|
||||||
|
color: #383838;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Fix login input visual misalignment ***/
|
||||||
|
#loginform,
|
||||||
|
#loginform input {
|
||||||
|
color: rgb(120, 127, 133);
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-options input,
|
||||||
|
.login-options [class*="icheck-"] > input:first-child + input[type="hidden"] + label::before,
|
||||||
|
.login-options [class*="icheck-"] > input:first-child + label::before {
|
||||||
|
background: none;
|
||||||
|
border-color: rgb(120, 127, 133);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Additional fixes For Pi.Alert UI ***/
|
||||||
|
.small-box {
|
||||||
|
border-radius: 10px;
|
||||||
|
border-top: 0px;
|
||||||
|
}
|
||||||
|
.pa-small-box-aqua .inner {
|
||||||
|
background-color: rgb(45,108,133);
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
}
|
||||||
|
.pa-small-box-green .inner {
|
||||||
|
background-color: rgb(31,76,46);
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
}
|
||||||
|
.pa-small-box-yellow .inner {
|
||||||
|
background-color: rgb(151,104,37);
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
}
|
||||||
|
.pa-small-box-red .inner {
|
||||||
|
background-color: rgb(120,50,38);
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
}
|
||||||
|
.pa-small-box-gray .inner {
|
||||||
|
background-color: #777;
|
||||||
|
/* color: rgba(20,20,20,30%); */
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
}
|
||||||
|
.pa-small-box-gray .inner h3 {
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
.text-gray-20 {
|
||||||
|
color: rgba(220,220,220,30%);
|
||||||
|
}
|
||||||
|
.bg-gray {
|
||||||
|
background-color: #888888 !important;
|
||||||
|
}
|
||||||
|
.badge.bg-green {
|
||||||
|
background-color: #00A000 !important;
|
||||||
|
}
|
||||||
|
.badge.bg-gray {
|
||||||
|
background-color: #888 !important;
|
||||||
|
}
|
||||||
|
#txtRecord {
|
||||||
|
background-color: #353c42;
|
||||||
|
border-color: #888888;
|
||||||
|
}
|
||||||
|
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
||||||
|
background-color: rgb(189,192,198);
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.db_info_table_cell:nth-child(1) {background: #272c30}
|
||||||
|
.db_info_table_cell:nth-child(2) {background: #272c30}
|
||||||
|
.db_tools_table_cell_a:nth-child(1) {background: #272c30}
|
||||||
|
.db_tools_table_cell_a:nth-child(2) {background: #272c30}
|
||||||
|
.db_tools_table_cell_b:nth-child(1) {background: #272c30}
|
||||||
|
.db_tools_table_cell_b:nth-child(2) {background: #272c30}
|
||||||
|
|
||||||
|
.db_info_table {
|
||||||
|
display: table;
|
||||||
|
border-spacing: 0em;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 15px;
|
||||||
|
width: 100%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-custom > .nav-tabs > li:hover > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||||
|
background-color: #272c30;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-custom > .nav-tabs > li.active > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||||
|
border-left-color: #30383f;
|
||||||
|
border-right-color: #30383f;
|
||||||
|
background-color: #272c30;
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom > .nav-tabs {
|
||||||
|
background-color: #353c42;
|
||||||
|
}
|
||||||
|
.nav-tabs-custom .tab-content {
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
.top_small_box_gray_text {
|
||||||
|
color: white !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove white border that appears on mobile screen sizes */
|
||||||
|
.box-body {
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
/* remove white border that appears on mobile screen sizes */
|
||||||
|
.table-responsive {
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-page {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-logo a {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-box-body {
|
||||||
|
color: #bec5cb;
|
||||||
|
background-color: #272c30;
|
||||||
|
}
|
||||||
|
/* Add border radius to bottom of the status boxes*/
|
||||||
|
.pa-small-box-footer {
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-box > .inner h3, .small-box > .inner p {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
.small-box:hover .icon {
|
||||||
|
font-size: 3.74em;
|
||||||
|
}
|
||||||
|
.small-box .icon {
|
||||||
|
top: 0.01em;
|
||||||
|
font-size: 3.25em;
|
||||||
|
}
|
||||||
|
.pa_semitransparent-panel{
|
||||||
|
background-color: #000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -325,7 +325,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Network -->
|
<!-- Network -->
|
||||||
<h4 class="bottom-border-aqua"><?= lang('DevDetail_MainInfo_Network_Title');?><span class="networkPageHelp"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md"><i class="fa fa-circle-question"></i></a><span></h4>
|
<h4 class="bottom-border-aqua"><?= lang('DevDetail_MainInfo_Network_Title');?><span class="helpIconSmallTopRight"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md"><i class="fa fa-circle-question"></i></a><span></h4>
|
||||||
<div class="form-group" title="<?= lang('DevDetail_Network_Node_hover');?>">
|
<div class="form-group" title="<?= lang('DevDetail_Network_Node_hover');?>">
|
||||||
<label class="col-sm-3 control-label"><?= lang('DevDetail_MainInfo_Network');?></label>
|
<label class="col-sm-3 control-label"><?= lang('DevDetail_MainInfo_Network');?></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
@@ -370,7 +370,8 @@
|
|||||||
|
|
||||||
<!-- column 3 -->
|
<!-- column 3 -->
|
||||||
<div class="col-lg-4 col-sm-6 col-xs-12">
|
<div class="col-lg-4 col-sm-6 col-xs-12">
|
||||||
<h4 class="bottom-border-aqua"><?= lang('DevDetail_EveandAl_Title');?></h4>
|
<h4 class="bottom-border-aqua"><?= lang('DevDetail_EveandAl_Title');?>
|
||||||
|
<span class="helpIconSmallTopRight"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md"><i class="fa fa-circle-question"></i></a><span></h4>
|
||||||
<div class="box-body form-horizontal">
|
<div class="box-body form-horizontal">
|
||||||
|
|
||||||
<!-- Scan Cycle -->
|
<!-- Scan Cycle -->
|
||||||
@@ -455,7 +456,8 @@
|
|||||||
<i style="font-size: 24px;" class="text-yellow glyphicon glyphicon-random"></i>     </span>
|
<i style="font-size: 24px;" class="text-yellow glyphicon glyphicon-random"></i>     </span>
|
||||||
|
|
||||||
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/RANDOM_MAC.md" target="_blank" style="color: #777;">
|
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/RANDOM_MAC.md" target="_blank" style="color: #777;">
|
||||||
<i class="fa fa-info-circle"></i> </a>
|
<i class="fa fa-info-circle"></i>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -641,8 +643,14 @@
|
|||||||
|
|
||||||
<!-- Dark-Mode Patch -->
|
<!-- Dark-Mode Patch -->
|
||||||
<?php
|
<?php
|
||||||
if ($ENABLED_DARKMODE === True) {
|
switch ($UI_THEME) {
|
||||||
echo '<link rel="stylesheet" href="css/dark-patch-cal.css">';
|
case "Dark":
|
||||||
|
echo '<link rel="stylesheet" href="css/dark-patch-cal.css">';
|
||||||
|
break;
|
||||||
|
case "System":
|
||||||
|
echo '<link rel="stylesheet" href="css/system-dark-patch-cal.css">';
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@@ -673,7 +681,7 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
// Iterate through the data and filter only visible devices
|
// Iterate through the data and filter only visible devices
|
||||||
$.each(devicesList, function(index, item) {
|
$.each(devicesList, function(index, item) {
|
||||||
// Check if the current item's MAC exists in visibleDevicesMACs
|
// Check if the current item's MAC exists in visibleDevicesMACs
|
||||||
if (visibleDevicesMACs.includes(item.dev_MAC)) {
|
if (visibleDevicesMACs.includes(item.devMac)) {
|
||||||
devicesList_tmp.push(item);
|
devicesList_tmp.push(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -790,7 +798,6 @@ function initializeiCheck () {
|
|||||||
// Hide / Show Events
|
// Hide / Show Events
|
||||||
if (event.currentTarget.id == 'chkHideConnectionEvents') {
|
if (event.currentTarget.id == 'chkHideConnectionEvents') {
|
||||||
getDeviceEvents();
|
getDeviceEvents();
|
||||||
setParameter (parEventsHide, event.currentTarget.checked);
|
|
||||||
} else {
|
} else {
|
||||||
// Activate save & restore
|
// Activate save & restore
|
||||||
// activateSaveRestoreData();
|
// activateSaveRestoreData();
|
||||||
@@ -820,12 +827,12 @@ function initializeCombos () {
|
|||||||
// nameTransformer) // callback to transform name
|
// nameTransformer) // callback to transform name
|
||||||
|
|
||||||
|
|
||||||
generateOptionsOrSetOptions("NEWDEV_dev_Icon", [], "dropdownIcon_tmp", genListWithInputSet, 'txtIcon', ["base64"])
|
generateOptionsOrSetOptions("NEWDEV_devIcon", [], "dropdownIcon_tmp", genListWithInputSet, 'txtIcon', ["base64"])
|
||||||
generateOptionsOrSetOptions("NEWDEV_dev_DeviceType", [], "dropdownDeviceType_tmp", genListWithInputSet, 'txtDeviceType' )
|
generateOptionsOrSetOptions("NEWDEV_devType", [], "dropdownDeviceType_tmp", genListWithInputSet, 'txtDeviceType' )
|
||||||
generateOptionsOrSetOptions("NEWDEV_dev_Owner", [], "dropdownOwner_tmp", genListWithInputSet, 'txtOwner' )
|
generateOptionsOrSetOptions("NEWDEV_devOwner", [], "dropdownOwner_tmp", genListWithInputSet, 'txtOwner' )
|
||||||
generateOptionsOrSetOptions("NEWDEV_dev_Group", [], "dropdownGroup_tmp", genListWithInputSet, 'txtGroup' )
|
generateOptionsOrSetOptions("NEWDEV_devGroup", [], "dropdownGroup_tmp", genListWithInputSet, 'txtGroup' )
|
||||||
generateOptionsOrSetOptions("NEWDEV_dev_Location", [], "dropdownLocation_tmp", genListWithInputSet, 'txtLocation' )
|
generateOptionsOrSetOptions("NEWDEV_devLocation", [], "dropdownLocation_tmp", genListWithInputSet, 'txtLocation' )
|
||||||
generateOptionsOrSetOptions("NEWDEV_dev_Network_Node_MAC_ADDR", [], "dropdownNetworkNodeMac_tmp", genListWithInputSet, 'txtNetworkNodeMac' )
|
generateOptionsOrSetOptions("NEWDEV_devParentMAC", [], "dropdownNetworkNodeMac_tmp", genListWithInputSet, 'txtNetworkNodeMac' )
|
||||||
|
|
||||||
// Initialize static combos
|
// Initialize static combos
|
||||||
initializeComboSkipRepeated ();
|
initializeComboSkipRepeated ();
|
||||||
@@ -1014,25 +1021,6 @@ function initializeDatatables () {
|
|||||||
"info": "<?= lang('Events_Table_info');?>",
|
"info": "<?= lang('Events_Table_info');?>",
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Save Parameters rows & order when changed
|
|
||||||
$('#tableSessions').on( 'length.dt', function ( e, settings, len ) {
|
|
||||||
setParameter (parSessionsRows, len);
|
|
||||||
|
|
||||||
// Sync Rows in both datatables
|
|
||||||
// if ( $('#tableEvents').DataTable().page.len() != len) {
|
|
||||||
// $('#tableEvents').DataTable().page.len( len ).draw();
|
|
||||||
// }
|
|
||||||
} );
|
|
||||||
|
|
||||||
$('#tableEvents').on( 'length.dt', function ( e, settings, len ) {
|
|
||||||
setParameter (parEventsRows, len);
|
|
||||||
|
|
||||||
// Sync Rows in both datatables
|
|
||||||
// if ( $('#tableSessions').DataTable().page.len() != len) {
|
|
||||||
// $('#tableSessions').DataTable().page.len( len ).draw();
|
|
||||||
// }
|
|
||||||
} );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1149,10 +1137,6 @@ function initializeCalendar () {
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function periodChanged () {
|
function periodChanged () {
|
||||||
// Save Parameter Period
|
|
||||||
period = $('#period').val();
|
|
||||||
setParameter (parPeriod, period);
|
|
||||||
|
|
||||||
// Requery Device data
|
// Requery Device data
|
||||||
getDeviceData(true);
|
getDeviceData(true);
|
||||||
getSessionsPresenceEvents();
|
getSessionsPresenceEvents();
|
||||||
@@ -1187,7 +1171,7 @@ function getDeviceData (readAllData=false) {
|
|||||||
var deviceData = JSON.parse(data);
|
var deviceData = JSON.parse(data);
|
||||||
|
|
||||||
// check device exists
|
// check device exists
|
||||||
if (deviceData['dev_MAC'] == null) {
|
if (deviceData['devMac'] == null) {
|
||||||
// Status
|
// Status
|
||||||
$('#deviceStatus').html ('--');
|
$('#deviceStatus').html ('--');
|
||||||
$('#deviceStatus')[0].className = 'text-gray';
|
$('#deviceStatus')[0].className = 'text-gray';
|
||||||
@@ -1243,16 +1227,16 @@ function getDeviceData (readAllData=false) {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Name
|
// Name
|
||||||
if (deviceData['dev_Owner'] == null || deviceData['dev_Owner'] == '' ||
|
if (deviceData['devOwner'] == null || deviceData['devOwner'] == '' ||
|
||||||
(deviceData['dev_Name'].toString()).indexOf (deviceData['dev_Owner']) != -1 ) {
|
(deviceData['devName'].toString()).indexOf (deviceData['devOwner']) != -1 ) {
|
||||||
$('#pageTitle').html (deviceData['dev_Name']);
|
$('#pageTitle').html (deviceData['devName']);
|
||||||
} else {
|
} else {
|
||||||
$('#pageTitle').html (deviceData['dev_Name'] + ' ('+ deviceData['dev_Owner'] +')');
|
$('#pageTitle').html (deviceData['devName'] + ' ('+ deviceData['devOwner'] +')');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
$('#deviceStatus').html (deviceData['dev_Status'].replace('-', ''));
|
$('#deviceStatus').html (deviceData['devStatus'].replace('-', ''));
|
||||||
switch (deviceData['dev_Status']) {
|
switch (deviceData['devStatus']) {
|
||||||
case 'On-line': icon='fa fa-check'; color='text-green'; break;
|
case 'On-line': icon='fa fa-check'; color='text-green'; break;
|
||||||
case 'Off-line': icon='fa fa-close'; color='text-gray'; break;
|
case 'Off-line': icon='fa fa-close'; color='text-gray'; break;
|
||||||
case 'Down': icon='fa fa-warning'; color='text-red'; break;
|
case 'Down': icon='fa fa-warning'; color='text-red'; break;
|
||||||
@@ -1263,16 +1247,16 @@ function getDeviceData (readAllData=false) {
|
|||||||
$('#deviceStatusIcon')[0].className = icon +' '+ color;
|
$('#deviceStatusIcon')[0].className = icon +' '+ color;
|
||||||
|
|
||||||
// Totals
|
// Totals
|
||||||
$('#deviceSessions').html (deviceData['dev_Sessions'].toLocaleString());
|
$('#deviceSessions').html (deviceData['devSessions'].toLocaleString());
|
||||||
$('#deviceDownAlerts').html (deviceData['dev_DownAlerts'].toLocaleString());
|
$('#deviceDownAlerts').html (deviceData['devDownAlerts'].toLocaleString());
|
||||||
|
|
||||||
// Presence
|
// Presence
|
||||||
$('#deviceEventsTitle').html ('Presence');
|
$('#deviceEventsTitle').html ('Presence');
|
||||||
$('#deviceEventsIcon').html ('<i class="fa fa-calendar">');
|
$('#deviceEventsIcon').html ('<i class="fa fa-calendar">');
|
||||||
if (deviceData['dev_PresenceHours'] == null || deviceData['dev_PresenceHours'] < 0) {
|
if (deviceData['devPresenceHours'] == null || deviceData['devPresenceHours'] < 0) {
|
||||||
$('#deviceEvents').html ('0 h.');
|
$('#deviceEvents').html ('0 h.');
|
||||||
} else {
|
} else {
|
||||||
$('#deviceEvents').html (deviceData['dev_PresenceHours'].toLocaleString() +' h.');
|
$('#deviceEvents').html (deviceData['devPresenceHours'].toLocaleString() +' h.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Device info
|
// Device info
|
||||||
@@ -1280,7 +1264,7 @@ function getDeviceData (readAllData=false) {
|
|||||||
// Activate controls
|
// Activate controls
|
||||||
$('#panDetails :input').attr('disabled', false);
|
$('#panDetails :input').attr('disabled', false);
|
||||||
|
|
||||||
mac = deviceData['dev_MAC'];
|
mac = deviceData['devMac'];
|
||||||
|
|
||||||
// update the mac parameter in the URL, this makes the selected device persistent when the page is reloaded
|
// update the mac parameter in the URL, this makes the selected device persistent when the page is reloaded
|
||||||
var searchParams = new URLSearchParams(window.location.search);
|
var searchParams = new URLSearchParams(window.location.search);
|
||||||
@@ -1291,51 +1275,51 @@ function getDeviceData (readAllData=false) {
|
|||||||
|
|
||||||
devicesList = getDevicesList();
|
devicesList = getDevicesList();
|
||||||
|
|
||||||
// handle empty dev_Network_Node_MAC_ADDR
|
// handle empty devParentMAC
|
||||||
networkParentMac = deviceData['dev_Network_Node_MAC_ADDR']
|
networkParentMac = deviceData['devParentMAC']
|
||||||
if(networkParentMac)
|
if(networkParentMac)
|
||||||
{
|
{
|
||||||
networkParentMacName = getDeviceDataByMac(deviceData['dev_Network_Node_MAC_ADDR'], "dev_Name")
|
networkParentMacName = getDeviceDataByMac(deviceData['devParentMAC'], "devName")
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
networkParentMacName = '--'
|
networkParentMacName = '--'
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#txtMAC').val (deviceData['dev_MAC']);
|
$('#txtMAC').val (deviceData['devMac']);
|
||||||
$('#txtName').val (deviceData['dev_Name']);
|
$('#txtName').val (deviceData['devName']);
|
||||||
$('#txtOwner').val (deviceData['dev_Owner']);
|
$('#txtOwner').val (deviceData['devOwner']);
|
||||||
$('#txtDeviceType').val (deviceData['dev_DeviceType']);
|
$('#txtDeviceType').val (deviceData['devType']);
|
||||||
$('#txtVendor').val (deviceData['dev_Vendor']);
|
$('#txtVendor').val (deviceData['devVendor']);
|
||||||
$('#txtIcon').val (initDefault(deviceData['dev_Icon'], 'PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI+PC9pPg==')); // base64 laptop icon
|
$('#txtIcon').val (initDefault(deviceData['devIcon'], 'PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI+PC9pPg==')); // base64 laptop icon
|
||||||
$('#txtIcon').trigger('change')
|
$('#txtIcon').trigger('change')
|
||||||
|
|
||||||
if (deviceData['dev_Favorite'] == 1) {$('#chkFavorite').iCheck('check');} else {$('#chkFavorite').iCheck('uncheck');}
|
if (deviceData['devFavorite'] == 1) {$('#chkFavorite').iCheck('check');} else {$('#chkFavorite').iCheck('uncheck');}
|
||||||
$('#txtGroup').val (deviceData['dev_Group']);
|
$('#txtGroup').val (deviceData['devGroup']);
|
||||||
$('#txtLocation').val (deviceData['dev_Location']);
|
$('#txtLocation').val (deviceData['devLocation']);
|
||||||
$('#txtComments').val (deviceData['dev_Comments']);
|
$('#txtComments').val (decodeSpecialChars(deviceData['devComments']));
|
||||||
$('#txtNetworkNodeMac').val ( networkParentMacName) ;
|
$('#txtNetworkNodeMac').val ( networkParentMacName) ;
|
||||||
$('#txtNetworkNodeMac').attr ('data-mynodemac', deviceData['dev_Network_Node_MAC_ADDR']);
|
$('#txtNetworkNodeMac').attr ('data-mynodemac', deviceData['devParentMAC']);
|
||||||
$('#txtNetworkPort').val (deviceData['dev_Network_Node_port']);
|
$('#txtNetworkPort').val (deviceData['devParentPort']);
|
||||||
$('#txtNetworkSite').val (deviceData['dev_NetworkSite']);
|
$('#txtNetworkSite').val (deviceData['devSite']);
|
||||||
$('#txtSSID').val (deviceData['dev_SSID']);
|
$('#txtSSID').val (deviceData['devSSID']);
|
||||||
// disabling network node configuration if root Internet node
|
// disabling network node configuration if root Internet node
|
||||||
toggleNetworkConfiguration(mac == 'Internet')
|
toggleNetworkConfiguration(mac == 'Internet')
|
||||||
|
|
||||||
|
|
||||||
$('#txtFirstConnection').val (deviceData['dev_FirstConnection']);
|
$('#txtFirstConnection').val (deviceData['devFirstConnection']);
|
||||||
$('#txtLastConnection').val (deviceData['dev_LastConnection']);
|
$('#txtLastConnection').val (deviceData['devLastConnection']);
|
||||||
$('#txtLastIP').val (deviceData['dev_LastIP']);
|
$('#txtLastIP').val (deviceData['devLastIP']);
|
||||||
$('#txtStatus').val (deviceData['dev_Status'].replace('-', ''));
|
$('#txtStatus').val (deviceData['devStatus'].replace('-', ''));
|
||||||
if (deviceData['dev_StaticIP'] == 1) {$('#chkStaticIP').iCheck('check');} else {$('#chkStaticIP').iCheck('uncheck');}
|
if (deviceData['devStaticIP'] == 1) {$('#chkStaticIP').iCheck('check');} else {$('#chkStaticIP').iCheck('uncheck');}
|
||||||
|
|
||||||
$('#txtScanCycle').val (deviceData['dev_ScanCycle'] == "1" ? "yes" : "no");
|
$('#txtScanCycle').val (deviceData['devScan'] == "1" ? "yes" : "no");
|
||||||
if (deviceData['dev_AlertEvents'] == 1) {$('#chkAlertEvents').iCheck('check');} else {$('#chkAlertEvents').iCheck('uncheck');}
|
if (deviceData['devAlertEvents'] == 1) {$('#chkAlertEvents').iCheck('check');} else {$('#chkAlertEvents').iCheck('uncheck');}
|
||||||
if (deviceData['dev_AlertDeviceDown'] == 1) {$('#chkAlertDown').iCheck('check');} else {$('#chkAlertDown').iCheck('uncheck');}
|
if (deviceData['devAlertDown'] == 1) {$('#chkAlertDown').iCheck('check');} else {$('#chkAlertDown').iCheck('uncheck');}
|
||||||
$('#txtSkipRepeated').val (findSkipRepeated (deviceData['dev_SkipRepeated']));
|
$('#txtSkipRepeated').val (findSkipRepeated (deviceData['devSkipRepeated']));
|
||||||
if (deviceData['dev_NewDevice'] == 1) {$('#chkNewDevice').iCheck('check');} else {$('#chkNewDevice').iCheck('uncheck');}
|
if (deviceData['devIsNew'] == 1) {$('#chkNewDevice').iCheck('check');} else {$('#chkNewDevice').iCheck('uncheck');}
|
||||||
if (deviceData['dev_Archived'] == 1) {$('#chkArchived').iCheck('check');} else {$('#chkArchived').iCheck('uncheck');}
|
if (deviceData['devIsArchived'] == 1) {$('#chkArchived').iCheck('check');} else {$('#chkArchived').iCheck('uncheck');}
|
||||||
|
|
||||||
if (deviceData['dev_RandomMAC'] == 1) {$('#iconRandomMACactive').removeClass ('hidden');
|
if (deviceData['devRandomMAC'] == 1) {$('#iconRandomMACactive').removeClass ('hidden');
|
||||||
$('#iconRandomMACinactive').addClass ('hidden'); }
|
$('#iconRandomMACinactive').addClass ('hidden'); }
|
||||||
else {$('#iconRandomMACactive').addClass ('hidden');
|
else {$('#iconRandomMACactive').addClass ('hidden');
|
||||||
$('#iconRandomMACinactive').removeClass ('hidden'); };
|
$('#iconRandomMACinactive').removeClass ('hidden'); };
|
||||||
@@ -1345,7 +1329,7 @@ function getDeviceData (readAllData=false) {
|
|||||||
pos = devicesList.findIndex(item => item.rowid == deviceData['rowid']);
|
pos = devicesList.findIndex(item => item.rowid == deviceData['rowid']);
|
||||||
|
|
||||||
if (pos == -1) {
|
if (pos == -1) {
|
||||||
devicesList.push({"rowid" : deviceData['rowid'], "mac" : deviceData['dev_MAC'], "name": deviceData['dev_Name'], "type": deviceData['dev_DeviceType']});
|
devicesList.push({"rowid" : deviceData['rowid'], "mac" : deviceData['devMac'], "name": deviceData['devName'], "type": deviceData['devType']});
|
||||||
pos=0;
|
pos=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1417,7 +1401,7 @@ function performSwitch(direction)
|
|||||||
// get new mac from the devicesList. Don't change to the commented out line below, the mac query string in the URL isn't updated yet!
|
// get new mac from the devicesList. Don't change to the commented out line below, the mac query string in the URL isn't updated yet!
|
||||||
// mac = params.mac;
|
// mac = params.mac;
|
||||||
|
|
||||||
mac = devicesList[pos].dev_MAC.toString();
|
mac = devicesList[pos].devMac.toString();
|
||||||
|
|
||||||
setCache("piaDeviceDetailsMac", mac);
|
setCache("piaDeviceDetailsMac", mac);
|
||||||
|
|
||||||
@@ -1453,7 +1437,7 @@ function setDeviceData (direction='', refreshCallback='') {
|
|||||||
+ '&favorite=' + ($('#chkFavorite')[0].checked * 1)
|
+ '&favorite=' + ($('#chkFavorite')[0].checked * 1)
|
||||||
+ '&group=' + encodeURIComponent($('#txtGroup').val())
|
+ '&group=' + encodeURIComponent($('#txtGroup').val())
|
||||||
+ '&location=' + encodeURIComponent($('#txtLocation').val())
|
+ '&location=' + encodeURIComponent($('#txtLocation').val())
|
||||||
+ '&comments=' + encodeURIComponent($('#txtComments').val())
|
+ '&comments=' + encodeURIComponent(encodeSpecialChars($('#txtComments').val()))
|
||||||
+ '&networknode=' + $('#txtNetworkNodeMac').attr('data-mynodemac')
|
+ '&networknode=' + $('#txtNetworkNodeMac').attr('data-mynodemac')
|
||||||
+ '&networknodeport=' + $('#txtNetworkPort').val()
|
+ '&networknodeport=' + $('#txtNetworkPort').val()
|
||||||
+ '&ssid=' + $('#txtSSID').val()
|
+ '&ssid=' + $('#txtSSID').val()
|
||||||
@@ -1482,7 +1466,7 @@ function setDeviceData (direction='', refreshCallback='') {
|
|||||||
somethingChanged = false;
|
somethingChanged = false;
|
||||||
|
|
||||||
// refresh API
|
// refresh API
|
||||||
updateApi()
|
updateApi("devices,appevents")
|
||||||
|
|
||||||
hideSpinner()
|
hideSpinner()
|
||||||
|
|
||||||
@@ -1702,7 +1686,7 @@ function deleteDevice () {
|
|||||||
$('#panDetails :input').attr('disabled', true);
|
$('#panDetails :input').attr('disabled', true);
|
||||||
|
|
||||||
// refresh API
|
// refresh API
|
||||||
updateApi()
|
updateApi("devices,appevents")
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -1744,7 +1728,7 @@ function setTextValue (textElement, textValue) {
|
|||||||
if(textElement == "txtNetworkNodeMac")
|
if(textElement == "txtNetworkNodeMac")
|
||||||
{
|
{
|
||||||
$('#'+textElement).attr ('data-mynodemac', textValue);
|
$('#'+textElement).attr ('data-mynodemac', textValue);
|
||||||
$('#'+textElement).val (getDeviceDataByMac(textValue, "dev_Name"));
|
$('#'+textElement).val (getDeviceDataByMac(textValue, "devName"));
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
$('#'+textElement).attr ('data-myvalue', textValue);
|
$('#'+textElement).attr ('data-myvalue', textValue);
|
||||||
@@ -1831,12 +1815,6 @@ function initTable(tableId, mac){
|
|||||||
|
|
||||||
$("#"+tableId).attr("data-mac", mac)
|
$("#"+tableId).attr("data-mac", mac)
|
||||||
|
|
||||||
// Save Parameters rows & order when changed
|
|
||||||
$('#'+tableId).on( 'length.dt', function ( e, settings, len ) {
|
|
||||||
setParameter (parSessionsRows, len);
|
|
||||||
|
|
||||||
} );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -77,16 +77,16 @@
|
|||||||
<?= lang("DevDetail_Nmap_Scans_desc") ?>
|
<?= lang("DevDetail_Nmap_Scans_desc") ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="button" id="piamanualnmap_fast" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'dev_LastIP'), 'fast')">
|
<button type="button" id="piamanualnmap_fast" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'devLastIP'), 'fast')">
|
||||||
<?= lang("DevDetail_Loading") ?>
|
<?= lang("DevDetail_Loading") ?>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" id="piamanualnmap_normal" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'dev_LastIP'), 'normal')">
|
<button type="button" id="piamanualnmap_normal" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'devLastIP'), 'normal')">
|
||||||
<?= lang("DevDetail_Loading") ?>
|
<?= lang("DevDetail_Loading") ?>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" id="piamanualnmap_detail" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'dev_LastIP'), 'detail')">
|
<button type="button" id="piamanualnmap_detail" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'devLastIP'), 'detail')">
|
||||||
<?= lang("DevDetail_Loading") ?>
|
<?= lang("DevDetail_Loading") ?>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" id="piamanualnmap_skipdiscovery" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'dev_LastIP'), 'skipdiscovery')">
|
<button type="button" id="piamanualnmap_skipdiscovery" class="btn btn-primary pa-btn" style="margin-bottom: 20px; margin-left: 10px; margin-right: 10px;" onclick="manualnmapscan(getDeviceDataByMac(getMac(), 'devLastIP'), 'skipdiscovery')">
|
||||||
<?= lang("DevDetail_Loading") ?>
|
<?= lang("DevDetail_Loading") ?>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
$( "#tracerouteoutput" ).empty();
|
$( "#tracerouteoutput" ).empty();
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "./php/server/traceroute.php?action=get&ip=" + getDeviceDataByMac(getMac(), 'dev_LastIP') + "",
|
url: "./php/server/traceroute.php?action=get&ip=" + getDeviceDataByMac(getMac(), 'devLastIP') + "",
|
||||||
beforeSend: function() { $('#tracerouteoutput').addClass("ajax_scripts_loading"); },
|
beforeSend: function() { $('#tracerouteoutput').addClass("ajax_scripts_loading"); },
|
||||||
complete: function() { $('#tracerouteoutput').removeClass("ajax_scripts_loading"); },
|
complete: function() { $('#tracerouteoutput').removeClass("ajax_scripts_loading"); },
|
||||||
success: function(data, textStatus) {
|
success: function(data, textStatus) {
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
$( "#nslookupoutput" ).empty();
|
$( "#nslookupoutput" ).empty();
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "./php/server/nslookup.php?action=get&ip=" + getDeviceDataByMac(getMac(), 'dev_LastIP') + "",
|
url: "./php/server/nslookup.php?action=get&ip=" + getDeviceDataByMac(getMac(), 'devLastIP') + "",
|
||||||
beforeSend: function() { $('#nslookupoutput').addClass("ajax_scripts_loading"); },
|
beforeSend: function() { $('#nslookupoutput').addClass("ajax_scripts_loading"); },
|
||||||
complete: function() { $('#nslookupoutput').removeClass("ajax_scripts_loading"); },
|
complete: function() { $('#nslookupoutput').removeClass("ajax_scripts_loading"); },
|
||||||
success: function(data, textStatus) {
|
success: function(data, textStatus) {
|
||||||
|
|||||||
@@ -15,8 +15,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require 'php/templates/header.php';
|
require 'php/templates/header.php';
|
||||||
require 'php/templates/graph.php';
|
|
||||||
|
|
||||||
|
|
||||||
// check permissions
|
// check permissions
|
||||||
$dbPath = "../db/app.db";
|
$dbPath = "../db/app.db";
|
||||||
@@ -66,19 +64,37 @@
|
|||||||
</div>
|
</div>
|
||||||
<script src="js/graph_online_history.js"></script>
|
<script src="js/graph_online_history.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var pia_js_online_history_time = [<?php pia_graph_devices_data($Pia_Graph_Device_Time); ?>];
|
$.get('api/table_online_history.json?nocache=' + Date.now(), function(res) {
|
||||||
var pia_js_online_history_ondev = [<?php pia_graph_devices_data($Pia_Graph_Device_Online); ?>];
|
// Extracting data from the JSON response
|
||||||
var pia_js_online_history_dodev = [<?php pia_graph_devices_data($Pia_Graph_Device_Down); ?>];
|
var timeStamps = [];
|
||||||
var pia_js_online_history_ardev = [<?php pia_graph_devices_data($Pia_Graph_Device_Arch); ?>];
|
var onlineCounts = [];
|
||||||
|
var downCounts = [];
|
||||||
setTimeout(() => {
|
var offlineCounts = [];
|
||||||
pia_draw_graph_online_history(
|
var archivedCounts = [];
|
||||||
pia_js_online_history_time,
|
|
||||||
pia_js_online_history_ondev,
|
|
||||||
pia_js_online_history_dodev,
|
|
||||||
pia_js_online_history_ardev);
|
|
||||||
}, 500);
|
|
||||||
|
|
||||||
|
res.data.forEach(function(entry) {
|
||||||
|
var dateObj = new Date(entry.Scan_Date);
|
||||||
|
var formattedTime = dateObj.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit', hour12: false});
|
||||||
|
|
||||||
|
timeStamps.push(formattedTime);
|
||||||
|
onlineCounts.push(entry.Online_Devices);
|
||||||
|
downCounts.push(entry.Down_Devices);
|
||||||
|
offlineCounts.push(entry.Offline_Devices);
|
||||||
|
archivedCounts.push(entry.Archived_Devices);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Call your presenceOverTime function after data is ready
|
||||||
|
presenceOverTime(
|
||||||
|
timeStamps,
|
||||||
|
onlineCounts,
|
||||||
|
offlineCounts,
|
||||||
|
archivedCounts,
|
||||||
|
downCounts
|
||||||
|
);
|
||||||
|
}).fail(function() {
|
||||||
|
// Handle any errors in fetching the data
|
||||||
|
console.error('Error fetching online history data.');
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- datatable ------------------------------------------------------------- -->
|
<!-- datatable ------------------------------------------------------------- -->
|
||||||
@@ -143,6 +159,8 @@
|
|||||||
var tableColumnHide = [];
|
var tableColumnHide = [];
|
||||||
var tableColumnOrder = [];
|
var tableColumnOrder = [];
|
||||||
var tableColumnVisible = [];
|
var tableColumnVisible = [];
|
||||||
|
headersDefaultOrder = [];
|
||||||
|
missingNumbers = [];
|
||||||
|
|
||||||
// Read parameters & Initialize components
|
// Read parameters & Initialize components
|
||||||
callAfterAppInitialized(main)
|
callAfterAppInitialized(main)
|
||||||
@@ -151,9 +169,14 @@
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function main () {
|
function main () {
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
|
// render tiles
|
||||||
|
getDevicesTotals();
|
||||||
|
|
||||||
//initialize the table headers in the correct order
|
//initialize the table headers in the correct order
|
||||||
var availableColumns = getSettingOptions("UI_device_columns").split(",");
|
var availableColumns = getSettingOptions("UI_device_columns").split(",");
|
||||||
var headersDefaultOrder = availableColumns.map(val => getString(val));
|
headersDefaultOrder = availableColumns.map(val => getString(val));
|
||||||
var selectedColumns = JSON.parse(getSetting("UI_device_columns").replace(/'/g, '"'));
|
var selectedColumns = JSON.parse(getSetting("UI_device_columns").replace(/'/g, '"'));
|
||||||
|
|
||||||
// generate default order lists of given length
|
// generate default order lists of given length
|
||||||
@@ -174,27 +197,11 @@ function main () {
|
|||||||
const fullArray = Array.from({ length: tableColumnOrder.length }, (_, i) => i);
|
const fullArray = Array.from({ length: tableColumnOrder.length }, (_, i) => i);
|
||||||
|
|
||||||
// Filter out the elements already present in inputArray
|
// Filter out the elements already present in inputArray
|
||||||
const missingNumbers = fullArray.filter(num => !tableColumnVisible.includes(num));
|
missingNumbers = fullArray.filter(num => !tableColumnVisible.includes(num));
|
||||||
|
|
||||||
// Concatenate the inputArray with the missingNumbers
|
// Concatenate the inputArray with the missingNumbers
|
||||||
tableColumnOrder = [...tableColumnVisible, ...missingNumbers];
|
tableColumnOrder = [...tableColumnVisible, ...missingNumbers];
|
||||||
|
|
||||||
// render table headers
|
|
||||||
html = '';
|
|
||||||
|
|
||||||
for(index = 0; index < tableColumnOrder.length; index++)
|
|
||||||
{
|
|
||||||
html += '<th>' + headersDefaultOrder[tableColumnOrder[index]] + '</th>';
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#tableDevices tr').html(html);
|
|
||||||
|
|
||||||
// Hide UI elements as per settings
|
|
||||||
// setTimeout(() => {
|
|
||||||
hideUIelements("UI_DEV_SECTIONS")
|
|
||||||
|
|
||||||
// }, 10);
|
|
||||||
|
|
||||||
// Initialize components with parameters
|
// Initialize components with parameters
|
||||||
initializeDatatable(getUrlAnchor('my_devices'));
|
initializeDatatable(getUrlAnchor('my_devices'));
|
||||||
|
|
||||||
@@ -219,60 +226,77 @@ function mapIndx(oldIndex)
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Query total numbers of Devices by status
|
// Query total numbers of Devices by status
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
function getDevicesTotals(devicesData) {
|
function getDevicesTotals() {
|
||||||
|
// Check cache first
|
||||||
|
let resultJSON = getCache("getDevicesTotals");
|
||||||
|
|
||||||
let resultJSON = "";
|
if (resultJSON !== "") {
|
||||||
|
resultJSON = JSON.parse(resultJSON);
|
||||||
if (getCache("getDevicesTotals") !== "") {
|
processDeviceTotals(resultJSON);
|
||||||
resultJSON = getCache("getDevicesTotals");
|
|
||||||
} else {
|
} else {
|
||||||
|
// Fetch data via AJAX
|
||||||
|
$.ajax({
|
||||||
|
url: "/api/table_devices_tiles.json",
|
||||||
|
type: "GET",
|
||||||
|
dataType: "json",
|
||||||
|
success: function(response) {
|
||||||
|
if (response && response.data) {
|
||||||
|
resultJSON = response.data[0]; // Assuming the structure {"data": [ ... ]}
|
||||||
|
|
||||||
|
// Save the result to cache
|
||||||
|
setCache("getDevicesTotals", JSON.stringify(resultJSON));
|
||||||
|
|
||||||
// Define filter conditions and corresponding objects
|
// Process the fetched data
|
||||||
const filters = [
|
processDeviceTotals(resultJSON);
|
||||||
{ status: 'my_devices', color: 'bg-aqua', label: getString('Device_Shortcut_AllDevices'), icon: 'fa-laptop' },
|
} else {
|
||||||
{ status: 'all', color: 'bg-aqua', label: getString('Gen_All_Devices'), icon: 'fa-laptop' },
|
console.error("Invalid response format from API");
|
||||||
{ status: 'connected', color: 'bg-green', label: getString('Device_Shortcut_Connected'), icon: 'fa-plug' },
|
}
|
||||||
{ status: 'favorites', color: 'bg-yellow', label: getString('Device_Shortcut_Favorites'), icon: 'fa-star' },
|
},
|
||||||
{ status: 'new', color: 'bg-yellow', label: getString('Device_Shortcut_NewDevices'), icon: 'fa-plus' },
|
error: function(xhr, status, error) {
|
||||||
{ status: 'down', color: 'bg-red', label: getString('Device_Shortcut_DownOnly'), icon: 'fa-warning' },
|
console.error("Failed to fetch devices data:", error);
|
||||||
{ status: 'archived', color: 'bg-gray', label: getString('Device_Shortcut_Archived'), icon: 'fa-eye-slash' },
|
|
||||||
{ status: 'offline', color: 'bg-gray', label: getString('Gen_Offline'), icon: 'fa-xmark' }
|
|
||||||
];
|
|
||||||
|
|
||||||
// Initialize an empty array to store the final objects
|
|
||||||
let dataArray = [];
|
|
||||||
|
|
||||||
// Loop through each filter condition
|
|
||||||
filters.forEach(filter => {
|
|
||||||
// Calculate count dynamically based on filter condition
|
|
||||||
let count = filterDataByStatus(devicesData, filter.status).length;
|
|
||||||
|
|
||||||
// Check any condition to skip adding the object to dataArray
|
|
||||||
if (
|
|
||||||
(['', 'False'].includes(getSetting('UI_hide_empty')) || (getSetting('UI_hide_empty') == "True" && count > 0)) &&
|
|
||||||
(getSetting('UI_shown_cards') == "" || getSetting('UI_shown_cards').includes(filter.status))
|
|
||||||
) {
|
|
||||||
dataArray.push({
|
|
||||||
onclickEvent: `initializeDatatable('${filter.status}')`,
|
|
||||||
color: filter.color,
|
|
||||||
title: count,
|
|
||||||
label: filter.label,
|
|
||||||
icon: filter.icon
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// render info boxes/tile cards
|
function processDeviceTotals(devicesData) {
|
||||||
renderInfoboxes(
|
// Define filter conditions and corresponding objects
|
||||||
dataArray
|
const filters = [
|
||||||
)
|
{ status: 'my_devices', color: 'bg-aqua', label: getString('Device_Shortcut_AllDevices'), icon: 'fa-laptop' },
|
||||||
|
{ status: 'all', color: 'bg-aqua', label: getString('Gen_All_Devices'), icon: 'fa-laptop' },
|
||||||
|
{ status: 'connected', color: 'bg-green', label: getString('Device_Shortcut_Connected'), icon: 'fa-plug' },
|
||||||
|
{ status: 'favorites', color: 'bg-yellow', label: getString('Device_Shortcut_Favorites'), icon: 'fa-star' },
|
||||||
|
{ status: 'new', color: 'bg-yellow', label: getString('Device_Shortcut_NewDevices'), icon: 'fa-plus' },
|
||||||
|
{ status: 'down', color: 'bg-red', label: getString('Device_Shortcut_DownOnly'), icon: 'fa-warning' },
|
||||||
|
{ status: 'archived', color: 'bg-gray', label: getString('Device_Shortcut_Archived'), icon: 'fa-eye-slash' },
|
||||||
|
{ status: 'offline', color: 'bg-gray', label: getString('Gen_Offline'), icon: 'fa-xmark' }
|
||||||
|
];
|
||||||
|
|
||||||
// save to cache
|
// Initialize an empty array to store the final objects
|
||||||
setCache("getDevicesTotals", resultJSON);
|
let dataArray = [];
|
||||||
}
|
|
||||||
|
|
||||||
// console.log(resultJSON);
|
// Loop through each filter condition
|
||||||
|
filters.forEach(filter => {
|
||||||
|
// Get count directly from API response data
|
||||||
|
let count = devicesData[filter.status] || 0;
|
||||||
|
|
||||||
|
// Check any condition to skip adding the object to dataArray
|
||||||
|
if (
|
||||||
|
(['', 'False'].includes(getSetting('UI_hide_empty')) || (getSetting('UI_hide_empty') == "True" && count > 0)) &&
|
||||||
|
(getSetting('UI_shown_cards') == "" || getSetting('UI_shown_cards').includes(filter.status))
|
||||||
|
) {
|
||||||
|
dataArray.push({
|
||||||
|
onclickEvent: `forceLoadUrl('devices.php#${filter.status}')`,
|
||||||
|
color: filter.color,
|
||||||
|
title: count,
|
||||||
|
label: filter.label,
|
||||||
|
icon: filter.icon
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Render info boxes/tile cards
|
||||||
|
renderInfoboxes(dataArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@@ -302,68 +326,79 @@ function filterDataByStatus(data, status) {
|
|||||||
|
|
||||||
let result = true;
|
let result = true;
|
||||||
|
|
||||||
if (!to_display.includes('down') && item.dev_PresentLastScan === 0 && item.dev_AlertDeviceDown !== 0) {
|
if (!to_display.includes('down') && item.devPresentLastScan === 0 && item.devAlertDown !== 0) {
|
||||||
result = false;
|
result = false;
|
||||||
} else if (!to_display.includes('new') && item.dev_NewDevice === 1) {
|
} else if (!to_display.includes('new') && item.devIsNew === 1) {
|
||||||
result = false;
|
result = false;
|
||||||
} else if (!to_display.includes('archived') && item.dev_Archived === 1) {
|
} else if (!to_display.includes('archived') && item.devIsArchived === 1) {
|
||||||
result = false;
|
result = false;
|
||||||
} else if (!to_display.includes('offline') && item.dev_PresentLastScan === 0) {
|
} else if (!to_display.includes('offline') && item.devPresentLastScan === 0) {
|
||||||
result = false;
|
result = false;
|
||||||
} else if (!to_display.includes('online') && item.dev_PresentLastScan === 1) {
|
} else if (!to_display.includes('online') && item.devPresentLastScan === 1) {
|
||||||
result = false;
|
result = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result; // Include all items for 'my_devices' status
|
return result; // Include all items for 'my_devices' status
|
||||||
case 'connected':
|
case 'connected':
|
||||||
return item.dev_PresentLastScan === 1;
|
return item.devPresentLastScan === 1;
|
||||||
case 'favorites':
|
case 'favorites':
|
||||||
return item.dev_Favorite === 1;
|
return item.devFavorite === 1;
|
||||||
case 'new':
|
case 'new':
|
||||||
return item.dev_NewDevice === 1;
|
return item.devIsNew === 1;
|
||||||
case 'offline':
|
case 'offline':
|
||||||
return item.dev_PresentLastScan === 0;
|
return item.devPresentLastScan === 0;
|
||||||
case 'down':
|
case 'down':
|
||||||
return (item.dev_PresentLastScan === 0 && item.dev_AlertDeviceDown !== 0);
|
return (item.devPresentLastScan === 0 && item.devAlertDown !== 0);
|
||||||
case 'archived':
|
case 'archived':
|
||||||
return item.dev_Archived === 1;
|
return item.devIsArchived === 1;
|
||||||
default:
|
default:
|
||||||
return true; // Include all items for unknown statuses
|
return true; // Include all items for unknown statuses
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
function getDeviceStatus(item)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(item.dev_NewDevice === 1)
|
|
||||||
{
|
|
||||||
return 'New';
|
|
||||||
}
|
|
||||||
else if(item.dev_PresentLastScan === 1)
|
|
||||||
{
|
|
||||||
return 'On-line';
|
|
||||||
}
|
|
||||||
else if(item.dev_PresentLastScan === 0 && item.dev_AlertDeviceDown !== 0)
|
|
||||||
{
|
|
||||||
return 'Down';
|
|
||||||
}
|
|
||||||
else if(item.dev_Archived === 1)
|
|
||||||
{
|
|
||||||
return 'Archived';
|
|
||||||
}
|
|
||||||
else if(item.dev_PresentLastScan === 0)
|
|
||||||
{
|
|
||||||
return 'Off-line';
|
|
||||||
}
|
|
||||||
|
|
||||||
return "Unknown status"
|
// Map column index to column name for GraphQL query
|
||||||
|
function mapColumnIndexToFieldName(index, tableColumnVisible) {
|
||||||
|
// the order is important, don't change it!
|
||||||
|
const columnNames = [
|
||||||
|
"devName",
|
||||||
|
"devOwner",
|
||||||
|
"devType",
|
||||||
|
"devIcon",
|
||||||
|
"devFavorite",
|
||||||
|
"devGroup",
|
||||||
|
"devFirstConnection",
|
||||||
|
"devLastConnection",
|
||||||
|
"devLastIP",
|
||||||
|
"devIsRandomMac", // resolved on the fly
|
||||||
|
"devStatus", // resolved on the fly
|
||||||
|
"devMac",
|
||||||
|
"devIpLong", //formatIPlong(device.devLastIP) || "", // IP orderable
|
||||||
|
"rowid",
|
||||||
|
"devParentMAC",
|
||||||
|
"devParentChildrenCount", // resolved on the fly
|
||||||
|
"devLocation",
|
||||||
|
"devVendor",
|
||||||
|
"devParentPort",
|
||||||
|
"devGUID",
|
||||||
|
"devSyncHubNode",
|
||||||
|
"devSite",
|
||||||
|
"devSSID",
|
||||||
|
"devSourcePlugin",
|
||||||
|
"devPresentLastScan",
|
||||||
|
"devAlertDown"
|
||||||
|
];
|
||||||
|
|
||||||
|
// console.log("OrderBy: " + columnNames[tableColumnOrder[index]]);
|
||||||
|
|
||||||
|
return columnNames[tableColumnOrder[index]] || null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
function initializeDatatable (status) {
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
function initializeDatatable (status) {
|
||||||
|
|
||||||
if(!status)
|
if(!status)
|
||||||
{
|
{
|
||||||
status = 'my_devices'
|
status = 'my_devices'
|
||||||
@@ -390,6 +425,17 @@ function initializeDatatable (status) {
|
|||||||
$('#tableDevicesBox')[0].className = 'box box-'+ color;
|
$('#tableDevicesBox')[0].className = 'box box-'+ color;
|
||||||
$('#tableDevicesTitle').html (tableTitle);
|
$('#tableDevicesTitle').html (tableTitle);
|
||||||
|
|
||||||
|
// render table headers
|
||||||
|
html = '';
|
||||||
|
|
||||||
|
for(index = 0; index < tableColumnOrder.length; index++)
|
||||||
|
{
|
||||||
|
html += '<th>' + headersDefaultOrder[tableColumnOrder[index]] + '</th>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#tableDevices tr').html(html);
|
||||||
|
|
||||||
|
hideUIelements("UI_DEV_SECTIONS")
|
||||||
|
|
||||||
for(i = 0; i < tableColumnOrder.length; i++)
|
for(i = 0; i < tableColumnOrder.length; i++)
|
||||||
{
|
{
|
||||||
@@ -400,304 +446,344 @@ function initializeDatatable (status) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$.get('api/table_devices.json?nocache=' + Date.now(), function(result) {
|
// todo: dynamically filter based on status
|
||||||
|
|
||||||
// refresh devices cache
|
|
||||||
devicesListAll_JSON = result["data"]
|
|
||||||
devicesListAll_JSON_str = JSON.stringify(devicesListAll_JSON)
|
|
||||||
setCache('devicesListAll_JSON', devicesListAll_JSON_str)
|
|
||||||
|
|
||||||
// query data
|
|
||||||
getDevicesTotals(result.data);
|
|
||||||
|
|
||||||
// Filter the data based on deviceStatus
|
|
||||||
var filteredData = filterDataByStatus(result.data, deviceStatus);
|
|
||||||
|
|
||||||
// Convert JSON data into the desired format
|
var table = $('#tableDevices').DataTable({
|
||||||
var dataArray = {
|
"serverSide": true,
|
||||||
data: filteredData.map(function(item) {
|
"processing": true,
|
||||||
var originalRow = [
|
"ajax": {
|
||||||
item.dev_Name || "",
|
"url": 'php/server/query_graphql.php', // PHP endpoint that proxies to the GraphQL server
|
||||||
item.dev_Owner || "",
|
"type": "POST",
|
||||||
item.dev_DeviceType || "",
|
"contentType": "application/json",
|
||||||
item.dev_Icon || "",
|
"data": function (d) {
|
||||||
item.dev_Favorite || "",
|
// Construct GraphQL query with pagination and sorting options
|
||||||
item.dev_Group || "",
|
let graphqlQuery = `
|
||||||
// ---
|
query devices($options: PageQueryOptionsInput) {
|
||||||
item.dev_FirstConnection || "",
|
devices(options: $options) {
|
||||||
item.dev_LastConnection || "",
|
devices {
|
||||||
item.dev_LastIP || "",
|
rowid
|
||||||
(isRandomMAC(item.dev_MAC)) || "", // Check if randomized MAC
|
devMac
|
||||||
getDeviceStatus(item) || "",
|
devName
|
||||||
item.dev_MAC || "", // hidden
|
devOwner
|
||||||
formatIPlong(item.dev_LastIP) || "", // IP orderable
|
devType
|
||||||
item.rowid || "",
|
devVendor
|
||||||
item.dev_Network_Node_MAC_ADDR || "",
|
devFavorite
|
||||||
getNumberOfChildren(item.dev_MAC, result.data) || 0,
|
devGroup
|
||||||
item.dev_Location || "",
|
devComments
|
||||||
item.dev_Vendor || "",
|
devFirstConnection
|
||||||
item.dev_Network_Node_port || 0,
|
devLastConnection
|
||||||
item.dev_GUID || "",
|
devLastIP
|
||||||
item.dev_SyncHubNodeName || "",
|
devStaticIP
|
||||||
item.dev_NetworkSite || "",
|
devScan
|
||||||
item.dev_SSID || ""
|
devLogEvents
|
||||||
|
devAlertEvents
|
||||||
|
devAlertDown
|
||||||
|
devSkipRepeated
|
||||||
|
devLastNotification
|
||||||
|
devPresentLastScan
|
||||||
|
devIsNew
|
||||||
|
devIsRandomMac
|
||||||
|
devLocation
|
||||||
|
devIsArchived
|
||||||
|
devParentMAC
|
||||||
|
devParentPort
|
||||||
|
devIcon
|
||||||
|
devGUID
|
||||||
|
devSite
|
||||||
|
devSSID
|
||||||
|
devSyncHubNode
|
||||||
|
devSourcePlugin
|
||||||
|
devStatus
|
||||||
|
devParentChildrenCount
|
||||||
|
devIpLong
|
||||||
|
}
|
||||||
|
count
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
console.log(d);
|
||||||
|
|
||||||
|
|
||||||
|
// Prepare query variables for pagination, sorting, and search
|
||||||
|
let query = {
|
||||||
|
"operationName": null,
|
||||||
|
"query": graphqlQuery,
|
||||||
|
"variables": {
|
||||||
|
"options": {
|
||||||
|
"page": Math.floor(d.start / d.length) + 1, // Page number (1-based)
|
||||||
|
"limit": parseInt(d.length, 10), // Page size (ensure it's an integer)
|
||||||
|
"sort": d.order && d.order[0] ? [{
|
||||||
|
"field": mapColumnIndexToFieldName(d.order[0].column, tableColumnVisible), // Sort field from DataTable column
|
||||||
|
"order": d.order[0].dir.toUpperCase() // Sort direction (ASC/DESC)
|
||||||
|
}] : [], // Default to an empty array if no sorting is defined
|
||||||
|
"search": d.search.value, // Search query
|
||||||
|
"status": deviceStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify(query); // Send the JSON request
|
||||||
|
},
|
||||||
|
"dataSrc": function (json) {
|
||||||
|
console.log(json);
|
||||||
|
|
||||||
|
// Set the total number of records for pagination
|
||||||
|
json.recordsTotal = json.devices.count || 0;
|
||||||
|
json.recordsFiltered = json.devices.count || 0;
|
||||||
|
|
||||||
|
return json.devices.devices.map(device => {
|
||||||
|
// Convert each device record into the required DataTable row format
|
||||||
|
// Order has to be the same as in the UI_device_columns setting options
|
||||||
|
const originalRow = [
|
||||||
|
device.devName || "",
|
||||||
|
device.devOwner || "",
|
||||||
|
device.devType || "",
|
||||||
|
device.devIcon || "",
|
||||||
|
device.devFavorite || "",
|
||||||
|
device.devGroup || "",
|
||||||
|
device.devFirstConnection || "",
|
||||||
|
device.devLastConnection || "",
|
||||||
|
device.devLastIP || "",
|
||||||
|
device.devIsRandomMac || "", // Custom logic for randomized MAC
|
||||||
|
device.devStatus || "",
|
||||||
|
device.devMac || "", // hidden
|
||||||
|
device.devIpLong || "", // IP orderable
|
||||||
|
device.rowid || "",
|
||||||
|
device.devParentMAC || "",
|
||||||
|
device.devParentChildrenCount || 0,
|
||||||
|
device.devLocation || "",
|
||||||
|
device.devVendor || "",
|
||||||
|
device.devParentPort || "",
|
||||||
|
device.devGUID || "",
|
||||||
|
device.devSyncHubNode || "",
|
||||||
|
device.devSite || "",
|
||||||
|
device.devSSID || "",
|
||||||
|
device.devSourcePlugin || "",
|
||||||
|
device.devPresentLastScan || "",
|
||||||
|
device.devAlertDown || ""
|
||||||
];
|
];
|
||||||
|
|
||||||
var newRow = [];
|
const newRow = [];
|
||||||
|
// Reorder data based on user-defined columns order
|
||||||
// reorder data based on user-defined columns order
|
for (let index = 0; index < tableColumnOrder.length; index++) {
|
||||||
for (index = 0; index < tableColumnOrder.length; index++) {
|
|
||||||
newRow.push(originalRow[tableColumnOrder[index]]);
|
newRow.push(originalRow[tableColumnOrder[index]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return newRow;
|
return newRow;
|
||||||
})
|
});
|
||||||
};
|
|
||||||
|
|
||||||
// Check if the DataTable already exists
|
|
||||||
if ($.fn.dataTable.isDataTable('#tableDevices')) {
|
|
||||||
// The DataTable exists, so destroy it
|
|
||||||
var table = $('#tableDevices').DataTable();
|
|
||||||
table.clear().destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
var table =
|
|
||||||
$('#tableDevices').DataTable({
|
|
||||||
'data' : dataArray["data"],
|
|
||||||
'paging' : true,
|
|
||||||
'lengthChange' : true,
|
|
||||||
'lengthMenu' : [[10, 25, 50, 100, 500, 100000], [10, 25, 50, 100, 500, getString('Device_Tablelenght_all')]],
|
|
||||||
'searching' : true,
|
|
||||||
|
|
||||||
'ordering' : true,
|
|
||||||
'info' : true,
|
|
||||||
'autoWidth' : false,
|
|
||||||
|
|
||||||
// Parameters
|
|
||||||
'pageLength' : tableRows,
|
|
||||||
'order' : tableOrder,
|
|
||||||
'select' : true, // Enable selection
|
|
||||||
|
|
||||||
'columnDefs' : [
|
|
||||||
{visible: false, targets: tableColumnHide },
|
|
||||||
{className: 'text-center', targets: [mapIndx(3), mapIndx(4), mapIndx(9), mapIndx(10), mapIndx(15), mapIndx(18)] },
|
|
||||||
{width: '80px', targets: [mapIndx(6), mapIndx(7), mapIndx(15)] },
|
|
||||||
{width: '30px', targets: [mapIndx(10), mapIndx(13), mapIndx(18)] },
|
|
||||||
{orderData: [mapIndx(12)], targets: mapIndx(8) },
|
|
||||||
|
|
||||||
// Device Name
|
|
||||||
{targets: [mapIndx(0)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
|
|
||||||
// console.log(cellData)
|
|
||||||
$(td).html ('<b class="anonymizeDev"><a href="deviceDetails.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Connected Devices
|
|
||||||
{targets: [mapIndx(15)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
// check if this is a network device
|
|
||||||
if(getSetting("NETWORK_DEVICE_TYPES").includes(`'${rowData[mapIndx(2)]}'`) )
|
|
||||||
{
|
|
||||||
$(td).html ('<b><a href="./network.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$(td).html (`<i class="fa-solid fa-xmark" title="${getString("Device_Table_Not_Network_Device")}"></i>`)
|
|
||||||
}
|
|
||||||
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Icon
|
|
||||||
{targets: [mapIndx(3)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
if (!emptyArr.includes(cellData)){
|
|
||||||
$(td).html (atob(cellData));
|
|
||||||
} else {
|
|
||||||
$(td).html ('');
|
|
||||||
}
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Full MAC
|
|
||||||
{targets: [mapIndx(11)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
if (!emptyArr.includes(cellData)){
|
|
||||||
$(td).html ('<span class="anonymizeMac">'+cellData+'</span>');
|
|
||||||
} else {
|
|
||||||
$(td).html ('');
|
|
||||||
}
|
|
||||||
} },
|
|
||||||
|
|
||||||
// IP address
|
|
||||||
{targets: [mapIndx(12)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
if (!emptyArr.includes(cellData)){
|
|
||||||
$(td).html ('<span class="anonymizeIp">'+cellData+'</span>');
|
|
||||||
} else {
|
|
||||||
$(td).html ('');
|
|
||||||
}
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Favorite
|
|
||||||
{targets: [mapIndx(4)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
if (cellData == 1){
|
|
||||||
$(td).html ('<i class="fa fa-star text-yellow" style="font-size:16px"></i>');
|
|
||||||
} else {
|
|
||||||
$(td).html ('');
|
|
||||||
}
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Dates
|
|
||||||
{targets: [mapIndx(6), mapIndx(7)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
var result = cellData.toString(); // Convert to string
|
|
||||||
if (result.includes("+")) { // Check if timezone offset is present
|
|
||||||
result = result.split('+')[0]; // Remove timezone offset
|
|
||||||
}
|
|
||||||
$(td).html (translateHTMLcodes (result));
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Random MAC
|
|
||||||
{targets: [mapIndx(9)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
// console.log(cellData)
|
|
||||||
if (cellData == 1){
|
|
||||||
$(td).html ('<i data-toggle="tooltip" data-placement="right" title="Random MAC" style="font-size: 16px;" class="text-yellow glyphicon glyphicon-random"></i>');
|
|
||||||
} else {
|
|
||||||
$(td).html ('');
|
|
||||||
}
|
|
||||||
} },
|
|
||||||
|
|
||||||
// Status color
|
|
||||||
{targets: [mapIndx(10)],
|
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
|
|
||||||
devData = getDeviceDataByMac(rowData[mapIndx(11)])
|
|
||||||
|
|
||||||
if (devData.dev_PresentLastScan == 1)
|
|
||||||
{
|
|
||||||
css = "green text-white statusOnline"
|
|
||||||
icon = '<i class="fa-solid fa-plug"></i>'
|
|
||||||
} else if (devData.dev_PresentLastScan != 1 && devData.dev_AlertDeviceDown == 1)
|
|
||||||
{
|
|
||||||
css = "red text-white statusDown"
|
|
||||||
icon = '<i class="fa-solid fa-triangle-exclamation"></i>'
|
|
||||||
} else if(devData.dev_PresentLastScan != 1)
|
|
||||||
{
|
|
||||||
css = "gray text-white statusOffline"
|
|
||||||
icon = '<i class="fa-solid fa-xmark"></i>'
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
css = "gray text-white statusUnknown"
|
|
||||||
icon = '<i class="fa-solid fa-question"></i>'
|
|
||||||
}
|
|
||||||
|
|
||||||
$(td).html (`<a href="deviceDetails.php?mac=${rowData[mapIndx(11)]}" class="badge bg-${css}">${icon} ${cellData.replace('-', '')}</a>`);
|
|
||||||
} },
|
|
||||||
],
|
|
||||||
|
|
||||||
// Processing
|
|
||||||
'processing' : true,
|
|
||||||
'language' : {
|
|
||||||
processing: '<table> <td width="130px" align="middle">Loading...</td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td> </table>',
|
|
||||||
emptyTable: 'No data',
|
|
||||||
"lengthMenu": "<?= lang('Device_Tablelenght');?>",
|
|
||||||
"search": "<?= lang('Device_Searchbox');?>: ",
|
|
||||||
"paginate": {
|
|
||||||
"next": "<?= lang('Device_Table_nav_next');?>",
|
|
||||||
"previous": "<?= lang('Device_Table_nav_prev');?>"
|
|
||||||
},
|
|
||||||
"info": "<?= lang('Device_Table_info');?>",
|
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
'paging' : true,
|
||||||
|
'lengthChange' : true,
|
||||||
|
'lengthMenu' : [[10, 25, 50, 100, 500, 100000], [10, 25, 50, 100, 500, getString('Device_Tablelenght_all')]],
|
||||||
|
'searching' : true,
|
||||||
|
|
||||||
// Save cookie Rows displayed, and Parameters rows & order
|
'ordering' : true,
|
||||||
$('#tableDevices').on( 'length.dt', function ( e, settings, len ) {
|
'info' : true,
|
||||||
setCookie ("nax_parTableRows", len);
|
'autoWidth' : false,
|
||||||
} );
|
|
||||||
|
// Parameters
|
||||||
|
'pageLength' : tableRows,
|
||||||
|
'order' : tableOrder,
|
||||||
|
'select' : true, // Enable selection
|
||||||
|
|
||||||
|
'columnDefs' : [
|
||||||
|
{visible: false, targets: tableColumnHide },
|
||||||
|
{className: 'text-center', targets: [mapIndx(3), mapIndx(4), mapIndx(9), mapIndx(10), mapIndx(15), mapIndx(18)] },
|
||||||
|
{width: '80px', targets: [mapIndx(6), mapIndx(7), mapIndx(15)] },
|
||||||
|
{width: '30px', targets: [mapIndx(10), mapIndx(13), mapIndx(18)] },
|
||||||
|
{orderData: [mapIndx(12)], targets: mapIndx(8) },
|
||||||
|
|
||||||
|
// Device Name
|
||||||
|
{targets: [mapIndx(0)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
|
// console.log(cellData)
|
||||||
|
$(td).html ('<b class="anonymizeDev"><a href="deviceDetails.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Connected Devices
|
||||||
|
{targets: [mapIndx(15)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
|
|
||||||
|
// check if this is a network device
|
||||||
|
if(getSetting("NETWORK_DEVICE_TYPES").includes(`'${rowData[mapIndx(2)]}'`) )
|
||||||
|
{
|
||||||
|
$(td).html ('<b><a href="./network.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$(td).html (`<i class="fa-solid fa-xmark" title="${getString("Device_Table_Not_Network_Device")}"></i>`)
|
||||||
|
}
|
||||||
|
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Icon
|
||||||
|
{targets: [mapIndx(3)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
|
if (!emptyArr.includes(cellData)){
|
||||||
|
$(td).html (atob(cellData));
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Full MAC
|
||||||
|
{targets: [mapIndx(11)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (!emptyArr.includes(cellData)){
|
||||||
|
$(td).html ('<span class="anonymizeMac">'+cellData+'</span>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
$('#tableDevices').on( 'order.dt', function () {
|
// IP address
|
||||||
setCookie ("nax_parTableOrder", JSON.stringify (table.order()) );
|
{targets: [mapIndx(8)],
|
||||||
setCache ('devicesList', getDevicesFromTable(table) );
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
} );
|
if (!emptyArr.includes(cellData)){
|
||||||
|
$(td).html (`<span class="anonymizeIp">
|
||||||
$('#tableDevices').on( 'search.dt', function () {
|
<a href="http://${cellData}" class="pointer" target="_blank">
|
||||||
setCache ('devicesList', getDevicesFromTable(table) );
|
${cellData}
|
||||||
} );
|
</a>
|
||||||
|
<a href="https://${cellData}" class="pointer" target="_blank">
|
||||||
// add multi-edit button
|
<i class="fa fa-lock "></i>
|
||||||
$('#multiEditPlc').append(
|
</a>
|
||||||
`<button type="submit" id="multiEdit" class="btn btn-primary" style="display:none" onclick="multiEditDevices();">
|
<span>`);
|
||||||
<i class="fa fa-pencil pointer" ></i> ${getString("Device_MultiEdit")}
|
} else {
|
||||||
</button>`)
|
$(td).html ('');
|
||||||
|
}
|
||||||
// Event listener for row selection in DataTable
|
}
|
||||||
$('#tableDevices').on('click', 'tr', function (e) {
|
},
|
||||||
setTimeout(function(){
|
// IP address (ordeable)
|
||||||
// Check if any row is selected
|
{targets: [mapIndx(12)],
|
||||||
var anyRowSelected = $('#tableDevices tr.selected').length > 0;
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (!emptyArr.includes(cellData)){
|
||||||
// Toggle visibility of element with ID 'multiEdit'
|
$(td).html (`<span class="anonymizeIp">${cellData}<span>`);
|
||||||
$('#multiEdit').toggle(anyRowSelected);
|
} else {
|
||||||
}, 200);
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
});
|
// Favorite
|
||||||
|
{targets: [mapIndx(4)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (cellData == 1){
|
||||||
|
$(td).html ('<i class="fa fa-star text-yellow" style="font-size:16px"></i>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Dates
|
||||||
|
{targets: [mapIndx(6), mapIndx(7)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
var result = cellData.toString(); // Convert to string
|
||||||
|
if (result.includes("+")) { // Check if timezone offset is present
|
||||||
|
result = result.split('+')[0]; // Remove timezone offset
|
||||||
|
}
|
||||||
|
$(td).html (translateHTMLcodes (result));
|
||||||
|
} },
|
||||||
|
|
||||||
hideSpinner();
|
// Random MAC
|
||||||
|
{targets: [mapIndx(9)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
// console.log(cellData)
|
||||||
|
if (cellData == 1){
|
||||||
|
$(td).html ('<i data-toggle="tooltip" data-placement="right" title="Random MAC" style="font-size: 16px;" class="text-yellow glyphicon glyphicon-random"></i>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
});
|
// Status color
|
||||||
};
|
{targets: [mapIndx(10)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
|
tmp_devPresentLastScan = rowData[mapIndx(24)]
|
||||||
|
tmp_devAlertDown = rowData[mapIndx(25)]
|
||||||
|
|
||||||
|
if (tmp_devPresentLastScan == 1)
|
||||||
|
{
|
||||||
|
css = "green text-white statusOnline"
|
||||||
|
icon = '<i class="fa-solid fa-plug"></i>'
|
||||||
|
} else if (tmp_devPresentLastScan != 1 && tmp_devAlertDown == 1)
|
||||||
|
{
|
||||||
|
css = "red text-white statusDown"
|
||||||
|
icon = '<i class="fa-solid fa-triangle-exclamation"></i>'
|
||||||
|
} else if(tmp_devPresentLastScan != 1)
|
||||||
|
{
|
||||||
|
css = "gray text-white statusOffline"
|
||||||
|
icon = '<i class="fa-solid fa-xmark"></i>'
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
css = "gray text-white statusUnknown"
|
||||||
|
icon = '<i class="fa-solid fa-question"></i>'
|
||||||
|
}
|
||||||
|
|
||||||
|
$(td).html (`<a href="deviceDetails.php?mac=${rowData[mapIndx(11)]}" class="badge bg-${css}">${icon} ${cellData.replace('-', '')}</a>`);
|
||||||
|
} },
|
||||||
|
],
|
||||||
|
|
||||||
|
// Processing
|
||||||
|
'processing' : true,
|
||||||
|
'language' : {
|
||||||
|
emptyTable: 'No data',
|
||||||
|
"lengthMenu": "<?= lang('Device_Tablelenght');?>",
|
||||||
|
"search": "<?= lang('Device_Searchbox');?>: ",
|
||||||
|
"paginate": {
|
||||||
|
"next": "<?= lang('Device_Table_nav_next');?>",
|
||||||
|
"previous": "<?= lang('Device_Table_nav_prev');?>"
|
||||||
|
},
|
||||||
|
"info": "<?= lang('Device_Table_info');?>",
|
||||||
|
},
|
||||||
|
initComplete: function (settings, devices) {
|
||||||
|
// Handle any additional interactions or event listeners as required
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// Save cookie Rows displayed, and Parameters rows & order
|
||||||
// Gets a JSON list of rowID and mac from the displayed table in the UI
|
$('#tableDevices').on( 'length.dt', function ( e, settings, len ) {
|
||||||
function getDevicesFromTable(table)
|
setCookie ("nax_parTableRows", len, 129600); // save for 90 days
|
||||||
{
|
} );
|
||||||
rowIDs = table.column(mapIndx(13), { 'search': 'applied' }).data().toArray() //
|
|
||||||
rowMACs = table.column(mapIndx(11), { 'search': 'applied' }).data().toArray() //
|
$('#tableDevices').on( 'order.dt', function () {
|
||||||
rowNames = table.column(mapIndx(0), { 'search': 'applied' }).data().toArray() //
|
setCookie ("nax_parTableOrder", JSON.stringify (table.order()), 129600); // save for 90 days
|
||||||
rowTypes = table.column(mapIndx(2), { 'search': 'applied' }).data().toArray() //
|
} );
|
||||||
rowIcons = table.column(mapIndx(3), { 'search': 'applied' }).data().toArray() //
|
|
||||||
rowParentMAC = table.column(mapIndx(14), { 'search': 'applied' }).data().toArray() //
|
|
||||||
rowStatus = table.column(mapIndx(10), { 'search': 'applied' }).data().toArray() //
|
|
||||||
|
|
||||||
result = []
|
// add multi-edit button
|
||||||
|
$('#multiEditPlc').append(
|
||||||
|
`<button type="submit" id="multiEdit" class="btn btn-primary" style="display:none" onclick="multiEditDevices();">
|
||||||
|
<i class="fa fa-pencil pointer" ></i> ${getString("Device_MultiEdit")}
|
||||||
|
</button>`)
|
||||||
|
|
||||||
rowIDs.map(function(rowID, index){
|
// Event listener for row selection in DataTable
|
||||||
result.push({
|
$('#tableDevices').on('click', 'tr', function (e) {
|
||||||
"rowid": rowID,
|
setTimeout(function(){
|
||||||
"mac" : rowMACs[index],
|
// Check if any row is selected
|
||||||
"name" : rowNames[index],
|
var anyRowSelected = $('#tableDevices tr.selected').length > 0;
|
||||||
"type" : rowTypes[index],
|
|
||||||
"icon" : rowIcons[index],
|
|
||||||
"parentMac" : rowParentMAC[index],
|
|
||||||
"status" : rowStatus[index] })
|
|
||||||
})
|
|
||||||
|
|
||||||
return JSON.stringify (result)
|
// Toggle visibility of element with ID 'multiEdit'
|
||||||
}
|
$('#multiEdit').toggle(anyRowSelected);
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
hideSpinner();
|
||||||
function getNumberOfChildren(mac, devices)
|
|
||||||
{
|
}
|
||||||
childrenCount = 0;
|
|
||||||
|
|
||||||
$.each(devices, function(index, dev) {
|
|
||||||
|
|
||||||
if(dev.dev_Network_Node_MAC_ADDR != null && dev.dev_Network_Node_MAC_ADDR.trim() == mac.trim())
|
|
||||||
{
|
|
||||||
childrenCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return childrenCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function handleLoadingDialog(needsReload = false)
|
function handleLoadingDialog(needsReload = false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -183,43 +183,31 @@
|
|||||||
|
|
||||||
<!-- page script ----------------------------------------------------------- -->
|
<!-- page script ----------------------------------------------------------- -->
|
||||||
<script>
|
<script>
|
||||||
var parPeriod = 'Front_Events_Period';
|
var parPeriod = 'nax_parPeriod';
|
||||||
var parTableRows = 'Front_Events_Rows';
|
var parTableRows = 'nax_parTableRows';
|
||||||
|
|
||||||
var eventsType = 'all';
|
var eventsType = 'all';
|
||||||
var period = '';
|
var period = '1 day';
|
||||||
var tableRows = 10;
|
var tableRows = 25;
|
||||||
|
|
||||||
// Read parameters & Initialize components
|
// Read parameters & Initialize components
|
||||||
main();
|
main();
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function main () {
|
function main() {
|
||||||
// get parameter value
|
// Get parameter value from cookies instead of server
|
||||||
$.get('php/server/parameters.php?action=get&defaultValue=1 day¶meter='+ parPeriod, function(data) {
|
period = getCookie(parPeriod) === "" ? "1 day" : getCookie(parPeriod);
|
||||||
var result = JSON.parse(data);
|
$('#period').val(period);
|
||||||
if (result) {
|
|
||||||
period = result;
|
|
||||||
$('#period').val(period);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get parameter value
|
tableRows = getCookie(parTableRows) === "" ? 50 : parseInt(getCookie(parTableRows), 10);
|
||||||
$.get('php/server/parameters.php?action=get&defaultValue=50¶meter='+ parTableRows, function(data) {
|
|
||||||
var result = JSON.parse(data);
|
|
||||||
result = parseInt(result, 10)
|
|
||||||
if (Number.isInteger (result) ) {
|
|
||||||
tableRows = result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize components
|
// Initialize components
|
||||||
initializeDatatable();
|
initializeDatatable();
|
||||||
|
|
||||||
// query data
|
// Query data
|
||||||
getEventsTotals();
|
getEventsTotals();
|
||||||
getEvents (eventsType);
|
getEvents(eventsType);
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -281,7 +269,7 @@ function initializeDatatable () {
|
|||||||
|
|
||||||
// Save Parameter rows when changed
|
// Save Parameter rows when changed
|
||||||
$('#tableEvents').on( 'length.dt', function ( e, settings, len ) {
|
$('#tableEvents').on( 'length.dt', function ( e, settings, len ) {
|
||||||
setParameter (parTableRows, len);
|
setCookie(parTableRows, len)
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -290,7 +278,8 @@ function initializeDatatable () {
|
|||||||
function periodChanged () {
|
function periodChanged () {
|
||||||
// Save Parameter Period
|
// Save Parameter Period
|
||||||
period = $('#period').val();
|
period = $('#period').val();
|
||||||
setParameter (parPeriod, period);
|
|
||||||
|
setCookie(parTableRows, period)
|
||||||
|
|
||||||
// Requery totals and events
|
// Requery totals and events
|
||||||
getEventsTotals();
|
getEventsTotals();
|
||||||
|
|||||||
@@ -3,11 +3,13 @@
|
|||||||
|
|
||||||
<?php
|
<?php
|
||||||
require dirname(__FILE__).'/php/server/init.php';
|
require dirname(__FILE__).'/php/server/init.php';
|
||||||
require 'php/templates/security.php';
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
$CookieSaveLoginName = 'NetAlertX_SaveLogin';
|
$CookieSaveLoginName = 'NetAlertX_SaveLogin';
|
||||||
|
|
||||||
if ($Pia_WebProtection != 'true')
|
if ($nax_WebProtection != 'true')
|
||||||
{
|
{
|
||||||
header('Location: devices.php');
|
header('Location: devices.php');
|
||||||
$_SESSION["login"] = 1;
|
$_SESSION["login"] = 1;
|
||||||
@@ -24,7 +26,7 @@ if (isset ($_GET["action"]) && $_GET["action"] == 'logout')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Password without Cookie check -> pass and set initial cookie
|
// Password without Cookie check -> pass and set initial cookie
|
||||||
if (isset ($_POST["loginpassword"]) && $Pia_Password == hash('sha256',$_POST["loginpassword"]))
|
if (isset ($_POST["loginpassword"]) && $nax_Password == hash('sha256',$_POST["loginpassword"]))
|
||||||
{
|
{
|
||||||
header('Location: devices.php');
|
header('Location: devices.php');
|
||||||
$_SESSION["login"] = 1;
|
$_SESSION["login"] = 1;
|
||||||
@@ -32,7 +34,7 @@ if (isset ($_POST["loginpassword"]) && $Pia_Password == hash('sha256',$_POST["lo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// active Session or valid cookie (cookie not extends)
|
// active Session or valid cookie (cookie not extends)
|
||||||
if (( isset ($_SESSION["login"]) && ($_SESSION["login"] == 1)) || (isset ($_COOKIE[$CookieSaveLoginName]) && $Pia_Password == $_COOKIE[$CookieSaveLoginName]))
|
if (( isset ($_SESSION["login"]) && ($_SESSION["login"] == 1)) || (isset ($_COOKIE[$CookieSaveLoginName]) && $nax_Password == $_COOKIE[$CookieSaveLoginName]))
|
||||||
{
|
{
|
||||||
header('Location: devices.php');
|
header('Location: devices.php');
|
||||||
$_SESSION["login"] = 1;
|
$_SESSION["login"] = 1;
|
||||||
@@ -40,7 +42,7 @@ if (( isset ($_SESSION["login"]) && ($_SESSION["login"] == 1)) || (isset ($_COOK
|
|||||||
}
|
}
|
||||||
|
|
||||||
$login_headline = lang('Login_Toggle_Info_headline');
|
$login_headline = lang('Login_Toggle_Info_headline');
|
||||||
$login_info = "";
|
$login_info = lang('Login_Info');
|
||||||
$login_mode = 'danger';
|
$login_mode = 'danger';
|
||||||
$login_display_mode = 'display: block;';
|
$login_display_mode = 'display: block;';
|
||||||
$login_icon = 'fa-info';
|
$login_icon = 'fa-info';
|
||||||
@@ -48,7 +50,7 @@ $login_icon = 'fa-info';
|
|||||||
// no active session, cookie not checked
|
// no active session, cookie not checked
|
||||||
if (isset ($_SESSION["login"]) == FALSE || $_SESSION["login"] != 1)
|
if (isset ($_SESSION["login"]) == FALSE || $_SESSION["login"] != 1)
|
||||||
{
|
{
|
||||||
if ($Pia_Password == '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92')
|
if ($nax_Password == '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92')
|
||||||
{
|
{
|
||||||
$login_info = lang('Login_Default_PWD');
|
$login_info = lang('Login_Default_PWD');
|
||||||
$login_mode = 'danger';
|
$login_mode = 'danger';
|
||||||
@@ -91,13 +93,24 @@ if (isset ($_SESSION["login"]) == FALSE || $_SESSION["login"] != 1)
|
|||||||
<link rel="stylesheet" href="lib/AdminLTE/dist/css/AdminLTE.min.css">
|
<link rel="stylesheet" href="lib/AdminLTE/dist/css/AdminLTE.min.css">
|
||||||
<!-- iCheck -->
|
<!-- iCheck -->
|
||||||
<link rel="stylesheet" href="lib/AdminLTE/plugins/iCheck/square/blue.css">
|
<link rel="stylesheet" href="lib/AdminLTE/plugins/iCheck/square/blue.css">
|
||||||
|
<!-- Font Awesome -->
|
||||||
|
<link rel="stylesheet" href="lib/AdminLTE/bower_components/font-awesome/css/fontawesome.min.css">
|
||||||
|
<link rel="stylesheet" href="lib/AdminLTE/bower_components/font-awesome/css/solid.css">
|
||||||
|
<link rel="stylesheet" href="lib/AdminLTE/bower_components/font-awesome/css/brands.css">
|
||||||
|
<link rel="stylesheet" href="lib/AdminLTE/bower_components/font-awesome/css/v5-font-face.css">
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link id="favicon" rel="icon" type="image/x-icon" href="img/NetAlertX_logo.png">
|
||||||
|
|
||||||
<!-- Dark-Mode Patch -->
|
<!-- Dark-Mode Patch -->
|
||||||
<?php
|
<?php
|
||||||
if ($ENABLED_DARKMODE === True) {
|
switch ($UI_THEME) {
|
||||||
echo '<link rel="stylesheet" href="css/dark-patch.css">';
|
case "Dark":
|
||||||
$BACKGROUND_IMAGE_PATCH='style="background-image: url(\'img/boxed-bg-dark.png\');"';
|
echo '<link rel="stylesheet" href="css/dark-patch.css">';
|
||||||
} else { $BACKGROUND_IMAGE_PATCH='style="background-image: url(\'img/background.png\');"';}
|
break;
|
||||||
|
case "System":
|
||||||
|
echo '<link rel="stylesheet" href="css/system-dark-patch.css">';
|
||||||
|
break;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<link rel="stylesheet" href="/css/offline-font.css">
|
<link rel="stylesheet" href="/css/offline-font.css">
|
||||||
</head>
|
</head>
|
||||||
@@ -140,11 +153,9 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
</div>
|
</div>
|
||||||
<!-- /.login-box-body -->
|
<!-- /.login-box-body -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="myDIV" class="box-body" style="margin-top: 50px; <?php echo $login_display_mode;?>">
|
<div id="myDIV" class="box-body" style="margin-top: 50px; <?php echo $login_display_mode;?>">
|
||||||
<div class="alert alert-<?php echo $login_mode;?> alert-dismissible">
|
<div class="alert alert-<?php echo $login_mode;?> alert-dismissible">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true"><EFBFBD></button>
|
<button type="button" class="close" onclick="Passwordhinfo()" aria-hidden="true">X</button>
|
||||||
<h4><i class="icon fa <?php echo $login_icon;?>"></i><?php echo $login_headline;?></h4>
|
<h4><i class="icon fa <?php echo $login_icon;?>"></i><?php echo $login_headline;?></h4>
|
||||||
<p><?php echo $login_info;?></p>
|
<p><?php echo $login_info;?></p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ var timerRefreshData = ''
|
|||||||
|
|
||||||
var emptyArr = ['undefined', "", undefined, null, 'null'];
|
var emptyArr = ['undefined', "", undefined, null, 'null'];
|
||||||
var UI_LANG = "English";
|
var UI_LANG = "English";
|
||||||
const allLanguages = ["en_us", "es_es", "de_de", "fr_fr", "it_it", "ru_ru", "nb_no", "pl_pl", "pt_br", "tr_tr", "zh_cn", "cs_cz"]; // needs to be same as in lang.php
|
const allLanguages = ["en_us", "es_es", "de_de", "fr_fr", "it_it", "ru_ru", "nb_no", "pl_pl", "pt_br", "tr_tr", "zh_cn", "cs_cz", "ar_ar", "ca_ca"]; // needs to be same as in lang.php
|
||||||
var settingsJSON = {}
|
var settingsJSON = {}
|
||||||
|
|
||||||
|
|
||||||
@@ -289,6 +289,7 @@ function getString(key) {
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Get current language ISO code
|
// Get current language ISO code
|
||||||
|
// below has to match exactly teh values in /front/php/templates/language/lang.php & /front/js/common.js
|
||||||
function getLangCode() {
|
function getLangCode() {
|
||||||
|
|
||||||
UI_LANG = getSetting("UI_LANG");
|
UI_LANG = getSetting("UI_LANG");
|
||||||
@@ -332,6 +333,12 @@ function getLangCode() {
|
|||||||
case 'Czech (cs_cz)':
|
case 'Czech (cs_cz)':
|
||||||
lang_code = 'cs_cz';
|
lang_code = 'cs_cz';
|
||||||
break;
|
break;
|
||||||
|
case 'Arabic (ar_ar)':
|
||||||
|
lang_code = 'ar_ar';
|
||||||
|
break;
|
||||||
|
case 'Catalan (ca_ca)':
|
||||||
|
lang_code = 'ca_ca';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return lang_code;
|
return lang_code;
|
||||||
@@ -342,6 +349,8 @@ function getLangCode() {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// String utilities
|
// String utilities
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
function jsonSyntaxHighlight(json) {
|
function jsonSyntaxHighlight(json) {
|
||||||
if (typeof json != 'string') {
|
if (typeof json != 'string') {
|
||||||
json = JSON.stringify(json, undefined, 2);
|
json = JSON.stringify(json, undefined, 2);
|
||||||
@@ -364,6 +373,7 @@ function jsonSyntaxHighlight(json) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
function isValidBase64(str) {
|
function isValidBase64(str) {
|
||||||
// Base64 characters set
|
// Base64 characters set
|
||||||
var base64CharacterSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
var base64CharacterSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||||||
@@ -373,7 +383,7 @@ function isValidBase64(str) {
|
|||||||
return invalidCharacters === '';
|
return invalidCharacters === '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
function isValidJSON(jsonString) {
|
function isValidJSON(jsonString) {
|
||||||
try {
|
try {
|
||||||
JSON.parse(jsonString);
|
JSON.parse(jsonString);
|
||||||
@@ -383,6 +393,37 @@ function isValidJSON(jsonString) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// method to sanitize input so that HTML and other things don't break
|
||||||
|
function encodeSpecialChars(str) {
|
||||||
|
return str
|
||||||
|
.replace(/&/g, '&')
|
||||||
|
.replace(/</g, '<')
|
||||||
|
.replace(/>/g, '>')
|
||||||
|
.replace(/"/g, '"')
|
||||||
|
.replace(/'/g, ''');
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------
|
||||||
|
function decodeSpecialChars(str) {
|
||||||
|
return str
|
||||||
|
.replace(/&/g, '&')
|
||||||
|
.replace(/</g, '<')
|
||||||
|
.replace(/>/g, '>')
|
||||||
|
.replace(/"/g, '"')
|
||||||
|
.replace(/'/g, '\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// base64 conversion of UTF8 chars
|
||||||
|
function utf8ToBase64(str) {
|
||||||
|
// Convert the string to a Uint8Array using TextEncoder
|
||||||
|
const utf8Bytes = new TextEncoder().encode(str);
|
||||||
|
|
||||||
|
// Convert the Uint8Array to a base64-encoded string
|
||||||
|
return btoa(String.fromCharCode(...utf8Bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// General utilities
|
// General utilities
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -423,29 +464,6 @@ function numberArrayFromString(data)
|
|||||||
return data.replace(/\[|\]/g, '').split(',').map(Number);
|
return data.replace(/\[|\]/g, '').split(',').map(Number);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
function setParameter (parameter, value) {
|
|
||||||
// Retry
|
|
||||||
$.get('php/server/parameters.php?action=set¶meter=' + parameter +
|
|
||||||
'&value='+ value,
|
|
||||||
function(data) {
|
|
||||||
if (data != "OK") {
|
|
||||||
// Retry
|
|
||||||
sleep (200);
|
|
||||||
$.get('php/server/parameters.php?action=set¶meter=' + parameter +
|
|
||||||
'&value='+ value,
|
|
||||||
function(data) {
|
|
||||||
if (data != "OK") {
|
|
||||||
// alert (data);
|
|
||||||
} else {
|
|
||||||
// alert ("OK. Second attempt");
|
|
||||||
};
|
|
||||||
} );
|
|
||||||
};
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function saveData(functionName, id, value) {
|
function saveData(functionName, id, value) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@@ -671,6 +689,13 @@ function openUrl(urls) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// force laod URL in current window with specific anchor
|
||||||
|
function forceLoadUrl(relativeUrl) {
|
||||||
|
window.location.replace(relativeUrl);
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function navigateToDeviceWithIp (ip) {
|
function navigateToDeviceWithIp (ip) {
|
||||||
@@ -683,9 +708,9 @@ function navigateToDeviceWithIp (ip) {
|
|||||||
|
|
||||||
$.each(devices, function(index, obj) {
|
$.each(devices, function(index, obj) {
|
||||||
|
|
||||||
if(obj.dev_LastIP.trim() == ip.trim())
|
if(obj.devLastIP.trim() == ip.trim())
|
||||||
{
|
{
|
||||||
mac = obj.dev_MAC;
|
mac = obj.devMac;
|
||||||
|
|
||||||
window.open(window.location.origin +'/deviceDetails.php?mac=' + mac , "_blank");
|
window.open(window.location.origin +'/deviceDetails.php?mac=' + mac , "_blank");
|
||||||
}
|
}
|
||||||
@@ -696,7 +721,7 @@ function navigateToDeviceWithIp (ip) {
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function getNameByMacAddress(macAddress) {
|
function getNameByMacAddress(macAddress) {
|
||||||
return getDeviceDataByMac(macAddress, "dev_Name")
|
return getDeviceDataByMac(macAddress, "devName")
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -862,7 +887,7 @@ function getDeviceDataByMac(macAddress, dbColumn) {
|
|||||||
const devices = JSON.parse(devicesCache);
|
const devices = JSON.parse(devicesCache);
|
||||||
|
|
||||||
for (const device of devices) {
|
for (const device of devices) {
|
||||||
if (device["dev_MAC"].toLowerCase() === macAddress.toLowerCase()) {
|
if (device["devMac"].toLowerCase() === macAddress.toLowerCase()) {
|
||||||
|
|
||||||
if(dbColumn)
|
if(dbColumn)
|
||||||
{
|
{
|
||||||
@@ -952,6 +977,19 @@ function getGuid() {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Loading Spinner overlay
|
// Loading Spinner overlay
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
spinnerHtml = `
|
||||||
|
<!-- spinner -->
|
||||||
|
<div id="loadingSpinner" style="display: block">
|
||||||
|
<div class="pa_semitransparent-panel"></div>
|
||||||
|
<div class="panel panel-default pa_spinner">
|
||||||
|
<table>
|
||||||
|
<td width="130px" align="middle">_text_</td>
|
||||||
|
<td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
|
||||||
function showSpinner(stringKey='Loading')
|
function showSpinner(stringKey='Loading')
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -970,20 +1008,7 @@ function showSpinner(stringKey='Loading')
|
|||||||
$("#loadingSpinner").show();
|
$("#loadingSpinner").show();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
html = `
|
$(".wrapper").append(spinnerHtml.replace('_text_',text))
|
||||||
<!-- spinner -->
|
|
||||||
<div id="loadingSpinner" style="display: block">
|
|
||||||
<div class="pa_semitransparent-panel"></div>
|
|
||||||
<div class="panel panel-default pa_spinner">
|
|
||||||
<table>
|
|
||||||
<td width="130px" align="middle">${text}</td>
|
|
||||||
<td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
|
|
||||||
$(".wrapper").append(html)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -995,11 +1020,11 @@ function hideSpinner()
|
|||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
// Calls a backend function to add a front-end event to an execution queue
|
// Calls a backend function to add a front-end event to an execution queue
|
||||||
function updateApi()
|
function updateApi(apiEndpoints)
|
||||||
{
|
{
|
||||||
|
|
||||||
// value has to be in format event|param. e.g. run|ARPSCAN
|
// value has to be in format event|param. e.g. run|ARPSCAN
|
||||||
action = `${getGuid()}|update_api|devices,appevents`
|
action = `${getGuid()}|update_api|${apiEndpoints}`
|
||||||
|
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@@ -1171,20 +1196,24 @@ function hideUIelements(settingKey) {
|
|||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// apply dark mode
|
// apply theme
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
// Assume getSetting is a function that returns true or false for dark mode
|
let theme = getSetting("UI_theme");
|
||||||
if (getSetting("UI_dark_mode") === "True") {
|
if (theme) {
|
||||||
// Add the dark mode stylesheet
|
theme = theme.replace("['","").replace("']","");
|
||||||
setCookie("UI_dark_mode", "True")
|
// Add the theme stylesheet
|
||||||
$('head').append('<link rel="stylesheet" href="css/dark-patch.css">');
|
setCookie("UI_theme", theme);
|
||||||
// Set the background image for dark mode
|
switch(theme) {
|
||||||
$('body').attr('style', 'background-image: url(\'img/boxed-bg-dark.png\');');
|
case "Dark":
|
||||||
|
$('head').append('<link rel="stylesheet" href="css/dark-patch.css">');
|
||||||
|
break;
|
||||||
|
case "System":
|
||||||
|
$('head').append('<link rel="stylesheet" href="css/system-dark-patch.css">');
|
||||||
|
break
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setCookie("UI_dark_mode", "False")
|
setCookie("UI_theme", "Light");
|
||||||
// Set the background image for light mode
|
|
||||||
$('body').attr('style', 'background-image: url(\'img/background.png\');');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1238,39 +1267,70 @@ async function handleFirstLoad(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Execute callback once app initialized
|
// Execute callback once the app is initialized and GraphQL server is running
|
||||||
function callAfterAppInitialized(callback) {
|
async function callAfterAppInitialized(callback) {
|
||||||
if (!isAppInitialized()) {
|
if (!isAppInitialized() || !(await isGraphQLServerRunning())) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
callAfterAppInitialized(callback)
|
callAfterAppInitialized(callback);
|
||||||
}, 500);
|
}, 500);
|
||||||
} else
|
} else {
|
||||||
{
|
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Polling function to repeatedly check if the server is running
|
||||||
|
async function waitForGraphQLServer() {
|
||||||
|
const pollInterval = 2000; // 2 seconds between each check
|
||||||
|
let serverRunning = false;
|
||||||
|
|
||||||
|
while (!serverRunning) {
|
||||||
|
serverRunning = await isGraphQLServerRunning();
|
||||||
|
if (!serverRunning) {
|
||||||
|
console.log("GraphQL server not running, retrying in 2 seconds...");
|
||||||
|
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("GraphQL server is now running.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Returns 1 if running, 0 otherwise
|
||||||
|
async function isGraphQLServerRunning() {
|
||||||
|
try {
|
||||||
|
const response = await $.get('api/app_state.json?nocache=' + Date.now());
|
||||||
|
console.log("graphQLServerStarted: " + response["graphQLServerStarted"]);
|
||||||
|
setCache("graphQLServerStarted", response["graphQLServerStarted"]);
|
||||||
|
return response["graphQLServerStarted"];
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to check GraphQL server status:", error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Check if the code has been executed before by checking sessionStorage
|
// Check if the code has been executed before by checking sessionStorage
|
||||||
function isAppInitialized() {
|
function isAppInitialized() {
|
||||||
// return arraysContainSameValues(getCache("completedCalls").split(',').filter(Boolean), completedCalls_final);
|
const completedCallsCount_final = getLangCode() == 'en_us' ? 3 : 4;
|
||||||
|
return (
|
||||||
// loading settings + 1 (or 2 language files if not english) + device cache.
|
parseInt(getCache("completedCallsCount")) >= completedCallsCount_final
|
||||||
completedCallsCount_final = getLangCode() == 'en_us' ? 3 : 4 ;
|
);
|
||||||
|
|
||||||
return (parseInt(getCache("completedCallsCount")) >= completedCallsCount_final);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define a function that will execute the code only once
|
// -----------------------------------------------------------------------------
|
||||||
|
// Main execution logic
|
||||||
async function executeOnce() {
|
async function executeOnce() {
|
||||||
showSpinner();
|
showSpinner();
|
||||||
|
|
||||||
if (!isAppInitialized()) {
|
if (!isAppInitialized()) {
|
||||||
try {
|
try {
|
||||||
|
await waitForGraphQLServer(); // Wait for the server to start
|
||||||
|
|
||||||
await cacheDevices();
|
await cacheDevices();
|
||||||
await cacheSettings();
|
await cacheSettings();
|
||||||
await cacheStrings();
|
await cacheStrings();
|
||||||
|
|
||||||
console.log("✅ All AJAX callbacks have completed");
|
console.log("✅ All AJAX callbacks have completed");
|
||||||
onAllCallsComplete();
|
onAllCallsComplete();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -1279,6 +1339,7 @@ async function executeOnce() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Function to handle successful completion of an AJAX call
|
// Function to handle successful completion of an AJAX call
|
||||||
const handleSuccess = (callName) => {
|
const handleSuccess = (callName) => {
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
function pia_draw_graph_online_history(pia_js_graph_online_history_time, pia_js_graph_online_history_ondev, pia_js_graph_online_history_dodev, pia_js_graph_online_history_ardev) {
|
function presenceOverTime(
|
||||||
var xValues = pia_js_graph_online_history_time;
|
timeStamp,
|
||||||
|
onlineCount,
|
||||||
// alert("dev presence")
|
offlineCount,
|
||||||
|
archivedCount,
|
||||||
|
downCount
|
||||||
|
) {
|
||||||
|
var xValues = timeStamp;
|
||||||
|
|
||||||
// Data object for online status
|
// Data object for online status
|
||||||
onlineData = {
|
onlineData = {
|
||||||
label: 'Online',
|
label: 'Online',
|
||||||
data: pia_js_graph_online_history_ondev,
|
data: onlineCount,
|
||||||
borderColor: "rgba(0, 166, 89)",
|
borderColor: "#00000",
|
||||||
fill: true,
|
fill: true,
|
||||||
backgroundColor: "rgba(0, 166, 89, .6)",
|
backgroundColor: "rgba(0, 166, 89, .6)",
|
||||||
pointStyle: 'circle',
|
pointStyle: 'circle',
|
||||||
@@ -15,20 +19,29 @@ function pia_draw_graph_online_history(pia_js_graph_online_history_time, pia_js_
|
|||||||
pointHoverRadius: 3
|
pointHoverRadius: 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Data object for down status
|
||||||
|
downData = {
|
||||||
|
label: 'Down',
|
||||||
|
data: downCount,
|
||||||
|
borderColor: "#00000",
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: "#dd4b39",
|
||||||
|
};
|
||||||
|
|
||||||
// Data object for offline status
|
// Data object for offline status
|
||||||
offlineData = {
|
offlineData = {
|
||||||
label: 'Offline/Down',
|
label: 'Offline',
|
||||||
data: pia_js_graph_online_history_dodev,
|
data: offlineCount,
|
||||||
borderColor: "rgba(222, 74, 56)",
|
borderColor: "#00000",
|
||||||
fill: true,
|
fill: true,
|
||||||
backgroundColor: "rgba(222, 74, 56, .6)",
|
backgroundColor: "#b2b6be",
|
||||||
};
|
};
|
||||||
|
|
||||||
// Data object for archived status
|
// Data object for archived status
|
||||||
archivedData = {
|
archivedData = {
|
||||||
label: 'Archived',
|
label: 'Archived',
|
||||||
data: pia_js_graph_online_history_ardev,
|
data: archivedCount,
|
||||||
borderColor: "rgba(220,220,220)",
|
borderColor: "#00000",
|
||||||
fill: true,
|
fill: true,
|
||||||
backgroundColor: "rgba(220,220,220, .6)",
|
backgroundColor: "rgba(220,220,220, .6)",
|
||||||
};
|
};
|
||||||
@@ -42,23 +55,27 @@ function pia_draw_graph_online_history(pia_js_graph_online_history_time, pia_js_
|
|||||||
// Check if 'online' status should be displayed
|
// Check if 'online' status should be displayed
|
||||||
if(showStats.includes("online"))
|
if(showStats.includes("online"))
|
||||||
{
|
{
|
||||||
datasets.push(onlineData); // Add onlineData to datasets array
|
datasets.push(onlineData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if 'down' status should be displayed
|
||||||
|
if(showStats.includes("down"))
|
||||||
|
{
|
||||||
|
datasets.push(downData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if 'offline' status should be displayed
|
// Check if 'offline' status should be displayed
|
||||||
if(showStats.includes("offline"))
|
if(showStats.includes("offline"))
|
||||||
{
|
{
|
||||||
datasets.push(offlineData); // Add offlineData to datasets array
|
datasets.push(offlineData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if 'archived' status should be displayed
|
// Check if 'archived' status should be displayed
|
||||||
if(showStats.includes("archived"))
|
if(showStats.includes("archived"))
|
||||||
{
|
{
|
||||||
datasets.push(archivedData); // Add archivedData to datasets array
|
datasets.push(archivedData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
new Chart("OnlineChart", {
|
new Chart("OnlineChart", {
|
||||||
type: "bar",
|
type: "bar",
|
||||||
scaleIntegersOnly: true,
|
scaleIntegersOnly: true,
|
||||||
|
|||||||
@@ -502,33 +502,6 @@ setTimeout(() => {
|
|||||||
});
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// handling events on the backend initiated by the front end END
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// UNUSED?
|
|
||||||
function getParam(targetId, key, skipCache = false) {
|
|
||||||
skipCacheQuery = "";
|
|
||||||
|
|
||||||
if (skipCache) {
|
|
||||||
skipCacheQuery = "&skipcache";
|
|
||||||
}
|
|
||||||
|
|
||||||
// get parameter value
|
|
||||||
$.get(
|
|
||||||
"php/server/parameters.php?action=get&defaultValue=0¶meter=" +
|
|
||||||
key +
|
|
||||||
skipCacheQuery,
|
|
||||||
function (data) {
|
|
||||||
var result = data;
|
|
||||||
|
|
||||||
result = result.replaceAll('"', "");
|
|
||||||
|
|
||||||
document.getElementById(targetId).innerHTML = result.replaceAll('"', "");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Show/hide the metadata settings
|
// Show/hide the metadata settings
|
||||||
@@ -539,6 +512,17 @@ function toggleMetadata(element) {
|
|||||||
$(`#${id}`).toggle();
|
$(`#${id}`).toggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Show setting description in a modal on smaller screens
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function showDescription(element) {
|
||||||
|
const id = $(element).attr("my-to-show");
|
||||||
|
|
||||||
|
description = $(`${id}`)[0].innerHTML
|
||||||
|
console.log(description);
|
||||||
|
showModalOK(getString("Gen_Description"), description);
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
// Helper methods
|
// Helper methods
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ function initDeviceSelectors(devicesListAll_JSON) {
|
|||||||
// Loop through the devices list
|
// Loop through the devices list
|
||||||
devicesList.forEach(function(device) {
|
devicesList.forEach(function(device) {
|
||||||
|
|
||||||
selectorFieldsHTML += `<option value="${device.dev_MAC}">${device.dev_Name}</option>`;
|
selectorFieldsHTML += `<option value="${device.devMac}">${device.devName}</option>`;
|
||||||
});
|
});
|
||||||
|
|
||||||
selector = `<div class="db_info_table_row col-sm-12" >
|
selector = `<div class="db_info_table_row col-sm-12" >
|
||||||
@@ -67,6 +67,35 @@ function initDeviceSelectors(devicesListAll_JSON) {
|
|||||||
}, 10);
|
}, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Utility function to generate a random API token in the format t_<random string of specified length>
|
||||||
|
function generateApiToken(elem, length) {
|
||||||
|
// Retrieve and parse custom parameters from the element
|
||||||
|
let params = $(elem).attr("my-customparams")?.split(',').map(param => param.trim());
|
||||||
|
if (params && params.length >= 1) {
|
||||||
|
var targetElementID = params[0]; // Get the target element's ID
|
||||||
|
}
|
||||||
|
|
||||||
|
let targetElement = $('#' + targetElementID);
|
||||||
|
|
||||||
|
// Function to generate a random string of a specified length
|
||||||
|
function generateRandomString(len) {
|
||||||
|
let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
let result = '';
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
result += characters.charAt(Math.floor(Math.random() * characters.length));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate the token in the format t_<random string of length>
|
||||||
|
let randomToken = 't_' + generateRandomString(length);
|
||||||
|
|
||||||
|
// Set the generated token as the value of the target element
|
||||||
|
if (targetElement.length) {
|
||||||
|
targetElement.val(randomToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// Updates the icon preview
|
// Updates the icon preview
|
||||||
|
|||||||
@@ -39,46 +39,17 @@
|
|||||||
|
|
||||||
// Size and last mod of DB ------------------------------------------------------
|
// Size and last mod of DB ------------------------------------------------------
|
||||||
|
|
||||||
$pia_db = str_replace('front', 'db', getcwd()).'/app.db';
|
$nax_db = str_replace('front', 'db', getcwd()).'/app.db';
|
||||||
$pia_db_size = number_format((filesize($pia_db) / 1000000),2,",",".") . ' MB';
|
$nax_db_size = number_format((filesize($nax_db) / 1000000),2,",",".") . ' MB';
|
||||||
$pia_db_mod = date ("F d Y H:i:s", filemtime($pia_db));
|
$nax_db_mod = date ("F d Y H:i:s", filemtime($nax_db));
|
||||||
|
|
||||||
|
|
||||||
// Count and Calc Backups -------------------------------------------------------
|
|
||||||
|
|
||||||
$Pia_Archive_Path = str_replace('front', 'db', getcwd()).'/';
|
|
||||||
$Pia_Archive_count = 0;
|
|
||||||
$Pia_Archive_diskusage = 0;
|
|
||||||
$files = glob($Pia_Archive_Path."appdb_*.zip");
|
|
||||||
if ($files){
|
|
||||||
$Pia_Archive_count = count($files);
|
|
||||||
}
|
|
||||||
foreach ($files as $result) {
|
|
||||||
$Pia_Archive_diskusage = $Pia_Archive_diskusage + filesize($result);
|
|
||||||
}
|
|
||||||
$Pia_Archive_diskusage = number_format(($Pia_Archive_diskusage / 1000000),2,",",".") . ' MB';
|
|
||||||
|
|
||||||
// Find latest Backup for restore -----------------------------------------------
|
|
||||||
|
|
||||||
$latestfiles = glob($Pia_Archive_Path."appdb_*.zip");
|
|
||||||
natsort($latestfiles);
|
|
||||||
$latestfiles = array_reverse($latestfiles,False);
|
|
||||||
|
|
||||||
$latestbackup = 'none';
|
|
||||||
$latestbackup_date = 'no backup';
|
|
||||||
|
|
||||||
if (count($latestfiles) > 0)
|
|
||||||
{
|
|
||||||
$latestbackup = $latestfiles[0];
|
|
||||||
$latestbackup_date = date ("Y-m-d H:i:s", filemtime($latestbackup));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Table sizes -----------------------------------------------------------------
|
// Table sizes -----------------------------------------------------------------
|
||||||
|
|
||||||
$tableSizesHTML = "";
|
$tableSizesHTML = "";
|
||||||
|
|
||||||
// Open a connection to the SQLite database
|
// Open a connection to the SQLite database
|
||||||
$db = new SQLite3($pia_db);
|
$db = new SQLite3($nax_db);
|
||||||
|
|
||||||
// Retrieve the table names from sqlite_master
|
// Retrieve the table names from sqlite_master
|
||||||
$query = "SELECT name FROM sqlite_master WHERE type='table'";
|
$query = "SELECT name FROM sqlite_master WHERE type='table'";
|
||||||
@@ -133,13 +104,13 @@ $db->close();
|
|||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_database_path');?></div>
|
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_database_path');?></div>
|
||||||
<div class="db_info_table_cell">
|
<div class="db_info_table_cell">
|
||||||
<?php echo $pia_db;?>
|
<?php echo $nax_db;?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
<div class="db_info_table_cell"><?= lang('Maintenance_database_size');?></div>
|
<div class="db_info_table_cell"><?= lang('Maintenance_database_size');?></div>
|
||||||
<div class="db_info_table_cell">
|
<div class="db_info_table_cell">
|
||||||
<?php echo $pia_db_size;?>
|
<?php echo $nax_db_size;?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
@@ -151,15 +122,9 @@ $db->close();
|
|||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
<div class="db_info_table_cell"><?= lang('Maintenance_database_lastmod');?></div>
|
<div class="db_info_table_cell"><?= lang('Maintenance_database_lastmod');?></div>
|
||||||
<div class="db_info_table_cell">
|
<div class="db_info_table_cell">
|
||||||
<?php echo $pia_db_mod;?>
|
<?php echo $nax_db_mod;?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table_row">
|
|
||||||
<div class="db_info_table_cell"><?= lang('Maintenance_database_backup');?></div>
|
|
||||||
<div class="db_info_table_cell">
|
|
||||||
<?php echo $Pia_Archive_count.' '.lang('Maintenance_database_backup_found').' / '.lang('Maintenance_database_backup_total').': '.$Pia_Archive_diskusage;?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.box-body -->
|
<!-- /.box-body -->
|
||||||
@@ -254,25 +219,7 @@ $db->close();
|
|||||||
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportPastedCSV" onclick="askImportPastedCSV()"><?= lang('Maintenance_Tool_ImportPastedCSV');?></button>
|
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportPastedCSV" onclick="askImportPastedCSV()"><?= lang('Maintenance_Tool_ImportPastedCSV');?></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportPastedCSV_text');?></div>
|
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportPastedCSV_text');?></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table_row">
|
|
||||||
<div class="db_tools_table_cell_a" >
|
|
||||||
<button type="button" class="btn btn-default pa-btn bg-green dbtools-button" id="btnPiaBackupDBtoArchive" onclick="askPiaBackupDBtoArchive()"><?= lang('Maintenance_Tool_backup');?></button>
|
|
||||||
</div>
|
|
||||||
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_backup_text');?></div>
|
|
||||||
</div>
|
|
||||||
<div class="db_info_table_row">
|
|
||||||
<div class="db_tools_table_cell_a" >
|
|
||||||
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnPiaRestoreDBfromArchive" onclick="askPiaRestoreDBfromArchive()"><?= lang('Maintenance_Tool_restore');?><br><?php echo $latestbackup_date;?></button>
|
|
||||||
</div>
|
|
||||||
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_restore_text');?></div>
|
|
||||||
</div>
|
|
||||||
<div class="db_info_table_row">
|
|
||||||
<div class="db_tools_table_cell_a" >
|
|
||||||
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnPiaPurgeDBBackups" onclick="askPiaPurgeDBBackups()"><?= lang('Maintenance_Tool_purgebackup');?></button>
|
|
||||||
</div>
|
|
||||||
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_purgebackup_text');?></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- ---------------------------Logging-------------------------------------------- -->
|
<!-- ---------------------------Logging-------------------------------------------- -->
|
||||||
@@ -458,51 +405,6 @@ function deleteActHistory()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
|
||||||
// Backup DB to Archive
|
|
||||||
function askPiaBackupDBtoArchive () {
|
|
||||||
// Ask
|
|
||||||
showModalWarning('<?= lang('Maintenance_Tool_backup_noti');?>', '<?= lang('Maintenance_Tool_backup_noti_text');?>',
|
|
||||||
'<?= lang('Gen_Cancel');?>', '<?= lang('Gen_Backup');?>', 'PiaBackupDBtoArchive');
|
|
||||||
}
|
|
||||||
function PiaBackupDBtoArchive()
|
|
||||||
{
|
|
||||||
// Execute
|
|
||||||
$.get('php/server/devices.php?action=PiaBackupDBtoArchive', function(msg) {
|
|
||||||
showMessage (msg);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
|
||||||
// Restore DB from Archive
|
|
||||||
function askPiaRestoreDBfromArchive () {
|
|
||||||
// Ask
|
|
||||||
showModalWarning('<?= lang('Maintenance_Tool_restore_noti');?>', '<?= lang('Maintenance_Tool_restore_noti_text');?>',
|
|
||||||
'<?= lang('Gen_Cancel');?>', '<?= lang('Gen_Restore');?>', 'PiaRestoreDBfromArchive');
|
|
||||||
}
|
|
||||||
function PiaRestoreDBfromArchive()
|
|
||||||
{
|
|
||||||
// Execute
|
|
||||||
$.get('php/server/devices.php?action=PiaRestoreDBfromArchive', function(msg) {
|
|
||||||
showMessage (msg);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
|
||||||
// Purge Backups
|
|
||||||
function askPiaPurgeDBBackups() {
|
|
||||||
// Ask
|
|
||||||
showModalWarning('<?= lang('Maintenance_Tool_purgebackup_noti');?>', '<?= lang('Maintenance_Tool_purgebackup_noti_text');?>',
|
|
||||||
'<?= lang('Gen_Cancel');?>', '<?= lang('Gen_Purge');?>', 'PiaPurgeDBBackups');
|
|
||||||
}
|
|
||||||
function PiaPurgeDBBackups()
|
|
||||||
{
|
|
||||||
// Execute
|
|
||||||
$.get('php/server/devices.php?action=PiaPurgeDBBackups', function(msg) {
|
|
||||||
showMessage (msg);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
// -----------------------------------------------------------
|
||||||
// Restart Backend Python Server
|
// Restart Backend Python Server
|
||||||
|
|
||||||
@@ -571,12 +473,15 @@ function askImportPastedCSV() {
|
|||||||
function ImportPastedCSV()
|
function ImportPastedCSV()
|
||||||
{
|
{
|
||||||
var csv = $('#modal-input-textarea').val();
|
var csv = $('#modal-input-textarea').val();
|
||||||
csvBase64 = btoa(csv)
|
|
||||||
// Execute
|
csvBase64 = utf8ToBase64(csv);
|
||||||
|
|
||||||
$.post('php/server/devices.php?action=ImportCSV', { content: csvBase64 }, function(msg) {
|
$.post('php/server/devices.php?action=ImportCSV', { content: csvBase64 }, function(msg) {
|
||||||
showMessage(msg);
|
showMessage(msg);
|
||||||
write_notification(`[Maintenance] Devices imported from pasted content`, 'info');
|
write_notification(`[Maintenance] Devices imported from pasted content`, 'info');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -77,11 +77,11 @@
|
|||||||
|
|
||||||
settingsData = res["data"];
|
settingsData = res["data"];
|
||||||
|
|
||||||
excludedColumns = ["NEWDEV_dev_MAC", "NEWDEV_dev_FirstConnection", "NEWDEV_dev_LastConnection", "NEWDEV_dev_LastNotification", "NEWDEV_dev_LastIP", "NEWDEV_dev_StaticIP", "NEWDEV_dev_ScanCycle", "NEWDEV_dev_PresentLastScan" ]
|
excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devLastIP", "NEWDEV_devStaticIP", "NEWDEV_devScan", "NEWDEV_devPresentLastScan" ]
|
||||||
|
|
||||||
const relevantColumns = settingsData.filter(set =>
|
const relevantColumns = settingsData.filter(set =>
|
||||||
set.Group === "NEWDEV" &&
|
set.Group === "NEWDEV" &&
|
||||||
set.Code_Name.includes("_dev_") &&
|
set.Code_Name.includes("_dev") &&
|
||||||
!excludedColumns.includes(set.Code_Name) &&
|
!excludedColumns.includes(set.Code_Name) &&
|
||||||
!set.Code_Name.includes("__metadata")
|
!set.Code_Name.includes("__metadata")
|
||||||
);
|
);
|
||||||
@@ -143,13 +143,13 @@
|
|||||||
|
|
||||||
console.log(columns[j].Code_Name)
|
console.log(columns[j].Code_Name)
|
||||||
// Handle Icons as they need a preview
|
// Handle Icons as they need a preview
|
||||||
if(columns[j].Code_Name == 'NEWDEV_dev_Icon')
|
if(columns[j].Code_Name == 'NEWDEV_devIcon')
|
||||||
{
|
{
|
||||||
input = `
|
input = `
|
||||||
<span class="input-group-addon iconPreview" my-customid="NEWDEV_dev_Icon_preview"></span>
|
<span class="input-group-addon iconPreview" my-customid="NEWDEV_devIcon_preview"></span>
|
||||||
<select class="form-control"
|
<select class="form-control"
|
||||||
onChange="updateIconPreview(this)"
|
onChange="updateIconPreview(this)"
|
||||||
my-customparams="NEWDEV_dev_Icon,NEWDEV_dev_Icon_preview"
|
my-customparams="NEWDEV_devIcon,NEWDEV_devIcon_preview"
|
||||||
id="${columns[j].Code_Name}"
|
id="${columns[j].Code_Name}"
|
||||||
data-my-column="${columns[j].Code_Name}"
|
data-my-column="${columns[j].Code_Name}"
|
||||||
data-my-targetColumns="${columns[j].Code_Name.replace('NEWDEV_','')}" >
|
data-my-targetColumns="${columns[j].Code_Name.replace('NEWDEV_','')}" >
|
||||||
@@ -283,7 +283,7 @@
|
|||||||
console.log(columnValue);
|
console.log(columnValue);
|
||||||
|
|
||||||
// update selected
|
// update selected
|
||||||
executeAction('update', 'dev_MAC', selectorMacs(), targetColumns, columnValue )
|
executeAction('update', 'devMac', selectorMacs(), targetColumns, columnValue )
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -305,7 +305,7 @@ function executeAction(action, whereColumnName, key, targetColumns, newTargetCol
|
|||||||
window.onbeforeunload = null;
|
window.onbeforeunload = null;
|
||||||
|
|
||||||
// update API endpoints to refresh the UI
|
// update API endpoints to refresh the UI
|
||||||
updateApi()
|
updateApi("devices,appevents")
|
||||||
|
|
||||||
write_notification(`[Multi edit] Executed "${action}" on Columns "${targetColumns}" matching "${key}"`, 'info')
|
write_notification(`[Multi edit] Executed "${action}" on Columns "${targetColumns}" matching "${key}"`, 'info')
|
||||||
|
|
||||||
@@ -333,7 +333,7 @@ function askDeleteSelectedDevices () {
|
|||||||
function deleteSelectedDevices()
|
function deleteSelectedDevices()
|
||||||
{
|
{
|
||||||
macs_tmp = selectorMacs()
|
macs_tmp = selectorMacs()
|
||||||
executeAction('delete', 'dev_MAC', macs_tmp )
|
executeAction('delete', 'devMac', macs_tmp )
|
||||||
write_notification('[Multi edit] Manually deleted devices with MACs:' + macs_tmp, 'info')
|
write_notification('[Multi edit] Manually deleted devices with MACs:' + macs_tmp, 'info')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<?php require 'php/templates/notification.php'; ?>
|
<?php require 'php/templates/notification.php'; ?>
|
||||||
<h1 id="pageTitle">
|
<h1 id="pageTitle">
|
||||||
<i class="fa fa-network-wired"></i> <?= lang('Network_Title');?>
|
<i class="fa fa-network-wired"></i> <?= lang('Network_Title');?>
|
||||||
<span class="networkPageHelp"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md"><i class="fa fa-circle-question"></i></a><span>
|
<span class="helpIconSmallTopRight"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md"><i class="fa fa-circle-question"></i></a><span>
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -162,14 +162,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get all leafs connected to a node based on the node_mac
|
// Get all leafs connected to a node based on the node_mac
|
||||||
$func_sql = 'SELECT dev_Network_Node_port as port,
|
$func_sql = 'SELECT devParentPort as port,
|
||||||
dev_MAC as mac,
|
devMac as mac,
|
||||||
dev_PresentLastScan as online,
|
devPresentLastScan as online,
|
||||||
dev_Name as name,
|
devName as name,
|
||||||
dev_DeviceType as type,
|
devType as type,
|
||||||
dev_LastIP as last_ip,
|
devLastIP as last_ip,
|
||||||
(select dev_DeviceType from Devices a where dev_MAC = "'.$node_mac.'") as node_type
|
(select devType from Devices a where devMac = "'.$node_mac.'") as node_type
|
||||||
FROM Devices WHERE dev_Network_Node_MAC_ADDR = "'.$node_mac.'" order by port, name asc';
|
FROM Devices WHERE devParentMAC = "'.$node_mac.'" order by port, name asc';
|
||||||
|
|
||||||
global $db;
|
global $db;
|
||||||
$func_result = $db->query($func_sql);
|
$func_result = $db->query($func_sql);
|
||||||
@@ -278,21 +278,21 @@
|
|||||||
$sql = "SELECT node_name, node_mac, online, node_type, node_ports_count, parent_mac, node_icon
|
$sql = "SELECT node_name, node_mac, online, node_type, node_ports_count, parent_mac, node_icon
|
||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT a.dev_Name as node_name,
|
SELECT a.devName as node_name,
|
||||||
a.dev_MAC as node_mac,
|
a.devMac as node_mac,
|
||||||
a.dev_PresentLastScan as online,
|
a.devPresentLastScan as online,
|
||||||
a.dev_DeviceType as node_type,
|
a.devType as node_type,
|
||||||
a.dev_Network_Node_MAC_ADDR as parent_mac,
|
a.devParentMAC as parent_mac,
|
||||||
a.dev_Icon as node_icon
|
a.devIcon as node_icon
|
||||||
FROM Devices a
|
FROM Devices a
|
||||||
WHERE a.dev_DeviceType in (".$networkDeviceTypes.")
|
WHERE a.devType in (".$networkDeviceTypes.")
|
||||||
) t1
|
) t1
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
(
|
(
|
||||||
SELECT b.dev_Network_Node_MAC_ADDR as node_mac_2,
|
SELECT b.devParentMAC as node_mac_2,
|
||||||
count() as node_ports_count
|
count() as node_ports_count
|
||||||
FROM Devices b
|
FROM Devices b
|
||||||
WHERE b.dev_Network_Node_MAC_ADDR NOT NULL group by b.dev_Network_Node_MAC_ADDR
|
WHERE b.devParentMAC NOT NULL group by b.devParentMAC
|
||||||
) t2
|
) t2
|
||||||
ON (t1.node_mac = t2.node_mac_2);
|
ON (t1.node_mac = t2.node_mac_2);
|
||||||
";
|
";
|
||||||
@@ -360,15 +360,15 @@
|
|||||||
|
|
||||||
// Get all Unassigned / unconnected nodes
|
// Get all Unassigned / unconnected nodes
|
||||||
$func_sql = 'SELECT
|
$func_sql = 'SELECT
|
||||||
dev_MAC AS mac,
|
devMac AS mac,
|
||||||
dev_PresentLastScan AS online,
|
devPresentLastScan AS online,
|
||||||
dev_Name AS name,
|
devName AS name,
|
||||||
dev_LastIP AS last_ip,
|
devLastIP AS last_ip,
|
||||||
dev_Network_Node_MAC_ADDR
|
devParentMAC
|
||||||
FROM Devices
|
FROM Devices
|
||||||
WHERE dev_Network_Node_MAC_ADDR IS NULL
|
WHERE devParentMAC IS NULL
|
||||||
OR dev_Network_Node_MAC_ADDR IN ("", " ", "undefined", "null")
|
OR devParentMAC IN ("", " ", "undefined", "null")
|
||||||
AND dev_MAC NOT LIKE "%internet%"
|
AND devMac NOT LIKE "%internet%"
|
||||||
ORDER BY name ASC;';
|
ORDER BY name ASC;';
|
||||||
|
|
||||||
global $db;
|
global $db;
|
||||||
@@ -481,21 +481,31 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
devicesListnew = rawData["data"].map(item => { return {
|
devicesListnew = rawData["data"].map(item => {
|
||||||
"name":item[0],
|
return {
|
||||||
"type":item[2],
|
"name": item[0],
|
||||||
"icon":item[3],
|
"type": item[2],
|
||||||
"mac":item[11],
|
"icon": item[3],
|
||||||
"parentMac":item[14],
|
"mac": item[11],
|
||||||
"rowid":item[13],
|
"parentMac": item[14],
|
||||||
"status":item[10],
|
"rowid": item[13],
|
||||||
"childrenQty":item[15],
|
"status": item[10],
|
||||||
"port":item[18]
|
"childrenQty": item[15],
|
||||||
}})
|
"port": item[18]
|
||||||
|
};
|
||||||
|
}).sort((a, b) => {
|
||||||
|
// First sort by name alphabetically
|
||||||
|
const nameCompare = a.name.localeCompare(b.name);
|
||||||
|
if (nameCompare !== 0) {
|
||||||
|
return nameCompare;
|
||||||
|
}
|
||||||
|
// If names are the same, sort by port numerically
|
||||||
|
return a.port - b.port;
|
||||||
|
});
|
||||||
|
|
||||||
setCache('devicesListNew', JSON.stringify(devicesListnew))
|
setCache('devicesListNew', JSON.stringify(devicesListnew));
|
||||||
|
|
||||||
// init global variable
|
// Init global variable
|
||||||
deviceListGlobal = devicesListnew;
|
deviceListGlobal = devicesListnew;
|
||||||
|
|
||||||
|
|
||||||
@@ -525,53 +535,57 @@
|
|||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
function getChildren(node, list, path)
|
// Recursively get children nodes and build a tree
|
||||||
|
function getChildren(node, list, path, visited = [])
|
||||||
{
|
{
|
||||||
var children = [];
|
var children = [];
|
||||||
|
|
||||||
// loop thru all items and find childern...
|
|
||||||
for(var i in list)
|
|
||||||
{
|
|
||||||
//... of the current node
|
|
||||||
|
|
||||||
if(list[i].parentMac.toLowerCase() == node.mac.toLowerCase() && !hiddenMacs.includes(list[i].parentMac))
|
|
||||||
{
|
|
||||||
|
|
||||||
visibleNodesCount++
|
|
||||||
|
|
||||||
// and process them
|
|
||||||
children.push(getChildren(list[i], list, path + ((path == "") ? "" : '|') + list[i].parentMac, hiddenMacs))
|
|
||||||
|
|
||||||
|
// Check for infinite recursion by seeing if the node has been visited before
|
||||||
|
if (visited.includes(node.mac.toLowerCase())) {
|
||||||
|
console.error("Infinite recursion detected at node:", node.mac);
|
||||||
|
write_notification("[ERROR] ⚠ Infinite recursion detected. You probably have assigned the Internet node to another children node or to itself. Please open a new issue on GitHub and describe how you did it.", 'interrupt')
|
||||||
|
return { error: "Infinite recursion detected", node: node.mac };
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// note the total number of leaf nodes to calculate the font scaling
|
// Add current node to visited list
|
||||||
if(children.length == 0)
|
visited.push(node.mac.toLowerCase());
|
||||||
{
|
|
||||||
leafNodesCount++
|
// Loop through all items to find children of the current node
|
||||||
} else
|
for (var i in list) {
|
||||||
{
|
if (list[i].parentMac.toLowerCase() == node.mac.toLowerCase() && !hiddenMacs.includes(list[i].parentMac)) {
|
||||||
parentNodesCount++
|
|
||||||
}
|
visibleNodesCount++;
|
||||||
|
|
||||||
return {
|
// Process children recursively, passing a copy of the visited list
|
||||||
name: node.name,
|
children.push(getChildren(list[i], list, path + ((path == "") ? "" : '|') + list[i].parentMac, visited));
|
||||||
path: path,
|
}
|
||||||
mac: node.mac,
|
}
|
||||||
port: node.port,
|
|
||||||
id: node.mac,
|
// Track leaf and parent node counts
|
||||||
parentMac: node.parentMac,
|
if (children.length == 0) {
|
||||||
icon: node.icon,
|
leafNodesCount++;
|
||||||
type: node.type,
|
} else {
|
||||||
status: node.status,
|
parentNodesCount++;
|
||||||
hasChildren: children.length > 0 || hiddenMacs.includes(node.mac),
|
}
|
||||||
hiddenChildren: hiddenMacs.includes(node.mac),
|
|
||||||
qty: children.length,
|
return {
|
||||||
children: children
|
name: node.name,
|
||||||
};
|
path: path,
|
||||||
|
mac: node.mac,
|
||||||
|
port: node.port,
|
||||||
|
id: node.mac,
|
||||||
|
parentMac: node.parentMac,
|
||||||
|
icon: node.icon,
|
||||||
|
type: node.type,
|
||||||
|
status: node.status,
|
||||||
|
hasChildren: children.length > 0 || hiddenMacs.includes(node.mac),
|
||||||
|
hiddenChildren: hiddenMacs.includes(node.mac),
|
||||||
|
qty: children.length,
|
||||||
|
children: children
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
function getHierarchy()
|
function getHierarchy()
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
require '../server/init.php';
|
require '../server/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
// Function to render the log area component
|
// Function to render the log area component
|
||||||
function renderLogArea($params) {
|
function renderLogArea($params) {
|
||||||
$fileName = isset($params['fileName']) ? $params['fileName'] : '';
|
$fileName = isset($params['fileName']) ? $params['fileName'] : '';
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
function renderInfobox($params) {
|
function renderInfobox($params) {
|
||||||
$onclickEvent = isset($params['onclickEvent']) ? $params['onclickEvent'] : '';
|
$onclickEvent = isset($params['onclickEvent']) ? $params['onclickEvent'] : '';
|
||||||
$color = isset($params['color']) ? $params['color'] : '';
|
$color = isset($params['color']) ? $params['color'] : '';
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Cache the contents to a cache file
|
|
||||||
$cached = fopen($cachefile, 'w');
|
|
||||||
fwrite($cached, ob_get_contents());
|
|
||||||
fclose($cached);
|
|
||||||
ob_end_flush(); // Send the output to the browser
|
|
||||||
?>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
$url = $_SERVER["SCRIPT_NAME"];
|
|
||||||
$break = Explode('/', $url);
|
|
||||||
$file = $break[count($break) - 1];
|
|
||||||
$cachefile = 'cached-'.substr_replace($file ,"",-4).'.html';
|
|
||||||
$cachetime = 18000;
|
|
||||||
|
|
||||||
// Serve from the cache if it is younger than $cachetime
|
|
||||||
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
|
|
||||||
echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->\n";
|
|
||||||
readfile($cachefile);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
ob_start(); // Start the output buffer
|
|
||||||
?>
|
|
||||||
@@ -13,6 +13,10 @@
|
|||||||
$DBFILE = dirname(__FILE__).'/../../../db/app.db';
|
$DBFILE = dirname(__FILE__).'/../../../db/app.db';
|
||||||
$DBFILE_LOCKED_FILE = dirname(__FILE__).'/../../../front/log/db_is_locked.log';
|
$DBFILE_LOCKED_FILE = dirname(__FILE__).'/../../../front/log/db_is_locked.log';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
$db_locked = false;
|
$db_locked = false;
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -3,16 +3,18 @@
|
|||||||
// NetAlertX
|
// NetAlertX
|
||||||
// Open Source Network Guard / WIFI & LAN intrusion detector
|
// Open Source Network Guard / WIFI & LAN intrusion detector
|
||||||
//
|
//
|
||||||
// parameters.php - Front module. Server side. Manage Parameters
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
# Puche 2022+ jokob jokob@duck.com GNU GPLv3
|
# Puche 2022+ jokob jokob@duck.com GNU GPLv3
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// External files
|
// External files
|
||||||
require dirname(__FILE__).'/init.php';
|
require dirname(__FILE__).'/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Action selector
|
// Action selector
|
||||||
|
|||||||
@@ -11,6 +11,10 @@
|
|||||||
// External files
|
// External files
|
||||||
require dirname(__FILE__).'/init.php';
|
require dirname(__FILE__).'/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Action selector
|
// Action selector
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@@ -69,22 +73,22 @@ function getDeviceData() {
|
|||||||
|
|
||||||
// Device Data
|
// Device Data
|
||||||
$sql = 'SELECT rowid, *,
|
$sql = 'SELECT rowid, *,
|
||||||
CASE WHEN dev_AlertDeviceDown !=0 AND dev_PresentLastScan=0 THEN "Down"
|
CASE WHEN devAlertDown !=0 AND devPresentLastScan=0 THEN "Down"
|
||||||
WHEN dev_PresentLastScan=1 THEN "On-line"
|
WHEN devPresentLastScan=1 THEN "On-line"
|
||||||
ELSE "Off-line" END as dev_Status
|
ELSE "Off-line" END as devStatus
|
||||||
FROM Devices
|
FROM Devices
|
||||||
WHERE dev_MAC="'. $mac .'" or cast(rowid as text)="'. $mac. '"';
|
WHERE devMac="'. $mac .'" or cast(rowid as text)="'. $mac. '"';
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
$row = $result -> fetchArray (SQLITE3_ASSOC);
|
$row = $result -> fetchArray (SQLITE3_ASSOC);
|
||||||
$deviceData = $row;
|
$deviceData = $row;
|
||||||
$mac = $deviceData['dev_MAC'];
|
$mac = $deviceData['devMac'];
|
||||||
|
|
||||||
$deviceData['dev_Network_Node_MAC_ADDR'] = $row['dev_Network_Node_MAC_ADDR'];
|
$deviceData['devParentMAC'] = $row['devParentMAC'];
|
||||||
$deviceData['dev_Network_Node_port'] = $row['dev_Network_Node_port'];
|
$deviceData['devParentPort'] = $row['devParentPort'];
|
||||||
$deviceData['dev_FirstConnection'] = formatDate ($row['dev_FirstConnection']); // Date formated
|
$deviceData['devFirstConnection'] = formatDate ($row['devFirstConnection']); // Date formated
|
||||||
$deviceData['dev_LastConnection'] = formatDate ($row['dev_LastConnection']); // Date formated
|
$deviceData['devLastConnection'] = formatDate ($row['devLastConnection']); // Date formated
|
||||||
|
|
||||||
$deviceData['dev_RandomMAC'] = isRandomMAC($mac);
|
$deviceData['devRandomMAC'] = isRandomMAC($mac);
|
||||||
|
|
||||||
// Count Totals
|
// Count Totals
|
||||||
$condition = ' WHERE eve_MAC="'. $mac .'" AND eve_DateTime >= '. $periodDate;
|
$condition = ' WHERE eve_MAC="'. $mac .'" AND eve_DateTime >= '. $periodDate;
|
||||||
@@ -97,19 +101,19 @@ function getDeviceData() {
|
|||||||
OR ses_StillConnected = 1 )';
|
OR ses_StillConnected = 1 )';
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
$row = $result -> fetchArray (SQLITE3_NUM);
|
||||||
$deviceData['dev_Sessions'] = $row[0];
|
$deviceData['devSessions'] = $row[0];
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
$sql = 'SELECT COUNT(*) FROM Events '. $condition .' AND eve_EventType <> "Connected" AND eve_EventType <> "Disconnected" ';
|
$sql = 'SELECT COUNT(*) FROM Events '. $condition .' AND eve_EventType <> "Connected" AND eve_EventType <> "Disconnected" ';
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
$row = $result -> fetchArray (SQLITE3_NUM);
|
||||||
$deviceData['dev_Events'] = $row[0];
|
$deviceData['devEvents'] = $row[0];
|
||||||
|
|
||||||
// Down Alerts
|
// Down Alerts
|
||||||
$sql = 'SELECT COUNT(*) FROM Events '. $condition .' AND eve_EventType = "Device Down"';
|
$sql = 'SELECT COUNT(*) FROM Events '. $condition .' AND eve_EventType = "Device Down"';
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
$row = $result -> fetchArray (SQLITE3_NUM);
|
||||||
$deviceData['dev_DownAlerts'] = $row[0];
|
$deviceData['devDownAlerts'] = $row[0];
|
||||||
|
|
||||||
// Get current date using php, sql datetime does not return time respective to timezone.
|
// Get current date using php, sql datetime does not return time respective to timezone.
|
||||||
$currentdate = date("Y-m-d H:i:s");
|
$currentdate = date("Y-m-d H:i:s");
|
||||||
@@ -126,7 +130,7 @@ function getDeviceData() {
|
|||||||
OR ses_StillConnected = 1 )';
|
OR ses_StillConnected = 1 )';
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
$row = $result -> fetchArray (SQLITE3_NUM);
|
||||||
$deviceData['dev_PresenceHours'] = round ($row[0]);
|
$deviceData['devPresenceHours'] = round ($row[0]);
|
||||||
|
|
||||||
// Return json
|
// Return json
|
||||||
echo (json_encode ($deviceData));
|
echo (json_encode ($deviceData));
|
||||||
@@ -141,27 +145,27 @@ function setDeviceData() {
|
|||||||
|
|
||||||
// sql
|
// sql
|
||||||
$sql = 'UPDATE Devices SET
|
$sql = 'UPDATE Devices SET
|
||||||
dev_Name = "'. quotes($_REQUEST['name']) .'",
|
devName = "'. quotes($_REQUEST['name']) .'",
|
||||||
dev_Owner = "'. quotes($_REQUEST['owner']) .'",
|
devOwner = "'. quotes($_REQUEST['owner']) .'",
|
||||||
dev_DeviceType = "'. quotes($_REQUEST['type']) .'",
|
devType = "'. quotes($_REQUEST['type']) .'",
|
||||||
dev_Vendor = "'. quotes($_REQUEST['vendor']) .'",
|
devVendor = "'. quotes($_REQUEST['vendor']) .'",
|
||||||
dev_Icon = "'. quotes($_REQUEST['icon']) .'",
|
devIcon = "'. quotes($_REQUEST['icon']) .'",
|
||||||
dev_Favorite = "'. quotes($_REQUEST['favorite']) .'",
|
devFavorite = "'. quotes($_REQUEST['favorite']) .'",
|
||||||
dev_Group = "'. quotes($_REQUEST['group']) .'",
|
devGroup = "'. quotes($_REQUEST['group']) .'",
|
||||||
dev_Location = "'. quotes($_REQUEST['location']) .'",
|
devLocation = "'. quotes($_REQUEST['location']) .'",
|
||||||
dev_Comments = "'. quotes($_REQUEST['comments']) .'",
|
devComments = "'. quotes($_REQUEST['comments']) .'",
|
||||||
dev_Network_Node_MAC_ADDR = "'. quotes($_REQUEST['networknode']).'",
|
devParentMAC = "'. quotes($_REQUEST['networknode']).'",
|
||||||
dev_Network_Node_port = "'. quotes($_REQUEST['networknodeport']).'",
|
devParentPort = "'. quotes($_REQUEST['networknodeport']).'",
|
||||||
dev_SSID = "'. quotes($_REQUEST['ssid']).'",
|
devSSID = "'. quotes($_REQUEST['ssid']).'",
|
||||||
dev_NetworkSite = "'. quotes($_REQUEST['networksite']).'",
|
devSite = "'. quotes($_REQUEST['networksite']).'",
|
||||||
dev_StaticIP = "'. quotes($_REQUEST['staticIP']) .'",
|
devStaticIP = "'. quotes($_REQUEST['staticIP']) .'",
|
||||||
dev_ScanCycle = "'. quotes($_REQUEST['scancycle']) .'",
|
devScan = "'. quotes($_REQUEST['scancycle']) .'",
|
||||||
dev_AlertEvents = "'. quotes($_REQUEST['alertevents']) .'",
|
devAlertEvents = "'. quotes($_REQUEST['alertevents']) .'",
|
||||||
dev_AlertDeviceDown = "'. quotes($_REQUEST['alertdown']) .'",
|
devAlertDown = "'. quotes($_REQUEST['alertdown']) .'",
|
||||||
dev_SkipRepeated = "'. quotes($_REQUEST['skiprepeated']) .'",
|
devSkipRepeated = "'. quotes($_REQUEST['skiprepeated']) .'",
|
||||||
dev_NewDevice = "'. quotes($_REQUEST['newdevice']) .'",
|
devIsNew = "'. quotes($_REQUEST['newdevice']) .'",
|
||||||
dev_Archived = "'. quotes($_REQUEST['archived']) .'"
|
devIsArchived = "'. quotes($_REQUEST['archived']) .'"
|
||||||
WHERE dev_MAC="' . $_REQUEST['mac'] .'"';
|
WHERE devMac="' . $_REQUEST['mac'] .'"';
|
||||||
// update Data
|
// update Data
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -181,7 +185,7 @@ function deleteDevice() {
|
|||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
// sql
|
// sql
|
||||||
$sql = 'DELETE FROM Devices WHERE dev_MAC="' . $_REQUEST['mac'] .'"';
|
$sql = 'DELETE FROM Devices WHERE devMac="' . $_REQUEST['mac'] .'"';
|
||||||
// execute sql
|
// execute sql
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -200,7 +204,7 @@ function deleteAllWithEmptyMACs() {
|
|||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
// sql
|
// sql
|
||||||
$sql = 'DELETE FROM Devices WHERE dev_MAC=""';
|
$sql = 'DELETE FROM Devices WHERE devMac=""';
|
||||||
// execute sql
|
// execute sql
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -219,7 +223,7 @@ function deleteUnknownDevices() {
|
|||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
// sql
|
// sql
|
||||||
$sql = 'DELETE FROM Devices WHERE dev_Name="(unknown)" OR dev_Name="(name not found)"';
|
$sql = 'DELETE FROM Devices WHERE devName="(unknown)" OR devName="(name not found)"';
|
||||||
// execute sql
|
// execute sql
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -424,41 +428,39 @@ function ExportCSV() {
|
|||||||
$func_result = $db->query("SELECT * FROM Devices");
|
$func_result = $db->query("SELECT * FROM Devices");
|
||||||
|
|
||||||
// prepare CSV header row
|
// prepare CSV header row
|
||||||
// header array with column names
|
|
||||||
$columns = getDevicesColumns();
|
$columns = getDevicesColumns();
|
||||||
|
|
||||||
// wrap the headers with " (quotes)
|
// wrap the headers with " (quotes)
|
||||||
$resultCSV = '"'.implode('","', $columns).'"';
|
$resultCSV = '"'.implode('","', $columns).'"'."\n";
|
||||||
|
|
||||||
//and append a new line
|
|
||||||
$resultCSV = $resultCSV."\n";
|
|
||||||
|
|
||||||
// retrieve the devices from the DB
|
// retrieve the devices from the DB
|
||||||
while ($row = $func_result -> fetchArray (SQLITE3_ASSOC)) {
|
while ($row = $func_result->fetchArray(SQLITE3_ASSOC)) {
|
||||||
|
|
||||||
// loop through columns and add values to the string
|
// loop through columns and add values to the string
|
||||||
$index = 0;
|
$index = 0;
|
||||||
foreach ($columns as $columnName) {
|
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
|
// add quotes around the value to prevent issues with commas in fields
|
||||||
$resultCSV = $resultCSV.'"'.$row[$columnName].'"';
|
$resultCSV .= '"'.$fieldValue.'"';
|
||||||
|
|
||||||
// detect last loop - skip as no comma needed
|
// detect last loop - skip as no comma needed
|
||||||
if ($index != count($columns) - 1 )
|
if ($index != count($columns) - 1) {
|
||||||
{
|
$resultCSV .= ',';
|
||||||
$resultCSV = $resultCSV.',';
|
|
||||||
}
|
}
|
||||||
$index++;
|
$index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//$resultCSV = $resultCSV.implode(",", [$row["dev_MAC"], $row["dev_Name"]]);
|
// add a new line for the next row
|
||||||
$resultCSV = $resultCSV."\n";
|
$resultCSV .= "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
//write the built CSV string
|
//write the built CSV string
|
||||||
echo $resultCSV;
|
echo $resultCSV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Import CSV of devices
|
// Import CSV of devices
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@@ -474,7 +476,11 @@ function ImportCSV() {
|
|||||||
if(isset ($_POST['content']) && !empty ($_POST['content']))
|
if(isset ($_POST['content']) && !empty ($_POST['content']))
|
||||||
{
|
{
|
||||||
// Decode the Base64 string
|
// Decode the Base64 string
|
||||||
$data = base64_decode($_POST['content']);
|
// $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
|
} else if (file_exists($file)) { // try to get the data form the file
|
||||||
|
|
||||||
@@ -486,6 +492,12 @@ function ImportCSV() {
|
|||||||
|
|
||||||
if($data != "")
|
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);
|
$lines = explode("\n", $data);
|
||||||
|
|
||||||
// Get the column headers from the first line of the CSV
|
// Get the column headers from the first line of the CSV
|
||||||
@@ -586,29 +598,30 @@ function getDevicesList() {
|
|||||||
|
|
||||||
// This object is used to map from the old order ( second parameter, first number) to the new mapping, that is represented by the 3rd parameter (Second number)
|
// This object is used to map from the old order ( second parameter, first number) to the new mapping, that is represented by the 3rd parameter (Second number)
|
||||||
$columnOrderMapping = array(
|
$columnOrderMapping = array(
|
||||||
array("dev_Name", 0, 0),
|
array("devName", 0, 0),
|
||||||
array("dev_Owner", 1, 1),
|
array("devOwner", 1, 1),
|
||||||
array("dev_DeviceType", 2, 2),
|
array("devType", 2, 2),
|
||||||
array("dev_Icon", 3, 3),
|
array("devIcon", 3, 3),
|
||||||
array("dev_Favorite", 4, 4),
|
array("devFavorite", 4, 4),
|
||||||
array("dev_Group", 5, 5),
|
array("devGroup", 5, 5),
|
||||||
array("dev_FirstConnection", 6, 6),
|
array("devFirstConnection", 6, 6),
|
||||||
array("dev_LastConnection", 7, 7),
|
array("devLastConnection", 7, 7),
|
||||||
array("dev_LastIP", 8, 8),
|
array("devLastIP", 8, 8),
|
||||||
array("dev_MAC", 9, 9),
|
array("devMac", 9, 9),
|
||||||
array("dev_Status", 10, 10),
|
array("devStatus", 10, 10),
|
||||||
array("dev_MAC_full", 11, 11),
|
array("devMac_full", 11, 11),
|
||||||
array("dev_LastIP_orderable", 12, 12),
|
array("devLastIP_orderable", 12, 12),
|
||||||
array("rowid", 13, 13),
|
array("rowid", 13, 13),
|
||||||
array("dev_Network_Node_MAC_ADDR", 14, 14),
|
array("devParentMAC", 14, 14),
|
||||||
array("connected_devices", 15, 15),
|
array("connected_devices", 15, 15),
|
||||||
array("dev_Location", 16, 16),
|
array("devLocation", 16, 16),
|
||||||
array("dev_Vendor", 17, 17),
|
array("devVendor", 17, 17),
|
||||||
array("dev_Network_Node_port", 18, 18),
|
array("devParentPort", 18, 18),
|
||||||
array("dev_GUID", 19, 19),
|
array("devGUID", 19, 19),
|
||||||
array("dev_SyncHubNodeName", 20, 20),
|
array("devSyncHubNode", 20, 20),
|
||||||
array("dev_NetworkSite", 21, 21),
|
array("devSite", 21, 21),
|
||||||
array("dev_SSID", 22, 22)
|
array("devSSID", 22, 22),
|
||||||
|
array("devSourcePlugin", 23, 23)
|
||||||
);
|
);
|
||||||
|
|
||||||
if($forceDefaultOrder == FALSE)
|
if($forceDefaultOrder == FALSE)
|
||||||
@@ -637,19 +650,19 @@ function getDevicesList() {
|
|||||||
|
|
||||||
$sql = 'SELECT * FROM (
|
$sql = 'SELECT * FROM (
|
||||||
SELECT rowid, *, CASE
|
SELECT rowid, *, CASE
|
||||||
WHEN t1.dev_AlertDeviceDown !=0 AND t1.dev_PresentLastScan=0 THEN "Down"
|
WHEN t1.devAlertDown !=0 AND t1.devPresentLastScan=0 THEN "Down"
|
||||||
WHEN t1.dev_NewDevice=1 THEN "New"
|
WHEN t1.devIsNew=1 THEN "New"
|
||||||
WHEN t1.dev_PresentLastScan=1 THEN "On-line"
|
WHEN t1.devPresentLastScan=1 THEN "On-line"
|
||||||
ELSE "Off-line" END AS dev_Status
|
ELSE "Off-line" END AS devStatus
|
||||||
FROM Devices t1 '.$condition.') t3
|
FROM Devices t1 '.$condition.') t3
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
(
|
(
|
||||||
SELECT dev_Network_Node_MAC_ADDR as dev_Network_Node_MAC_ADDR_t2, dev_MAC as dev_MAC_t2,
|
SELECT devParentMAC as devParentMAC_t2, devMac as devMac_t2,
|
||||||
count() as connected_devices
|
count() as connected_devices
|
||||||
FROM Devices b
|
FROM Devices b
|
||||||
WHERE b.dev_Network_Node_MAC_ADDR NOT NULL group by b.dev_Network_Node_MAC_ADDR
|
WHERE b.devParentMAC NOT NULL group by b.devParentMAC
|
||||||
) t2
|
) t2
|
||||||
ON (t3.dev_MAC = t2.dev_Network_Node_MAC_ADDR_t2);';
|
ON (t3.devMac = t2.devParentMAC_t2);';
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -658,30 +671,31 @@ function getDevicesList() {
|
|||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
||||||
|
|
||||||
$defaultOrder = array (
|
$defaultOrder = array (
|
||||||
$row['dev_Name'],
|
$row['devName'],
|
||||||
$row['dev_Owner'],
|
$row['devOwner'],
|
||||||
handleNull($row['dev_DeviceType']),
|
handleNull($row['devType']),
|
||||||
handleNull($row['dev_Icon'], "PGkgY2xhc3M9J2ZhIGZhLWxhcHRvcCc+PC9pPg=="), // laptop icon
|
handleNull($row['devIcon'], "PGkgY2xhc3M9J2ZhIGZhLWxhcHRvcCc+PC9pPg=="), // laptop icon
|
||||||
$row['dev_Favorite'],
|
$row['devFavorite'],
|
||||||
$row['dev_Group'],
|
$row['devGroup'],
|
||||||
// ----
|
// ----
|
||||||
formatDate ($row['dev_FirstConnection']),
|
formatDate ($row['devFirstConnection']),
|
||||||
formatDate ($row['dev_LastConnection']),
|
formatDate ($row['devLastConnection']),
|
||||||
$row['dev_LastIP'],
|
$row['devLastIP'],
|
||||||
( isRandomMAC($row['dev_MAC']) ),
|
( isRandomMAC($row['devMac']) ),
|
||||||
$row['dev_Status'],
|
$row['devStatus'],
|
||||||
$row['dev_MAC'], // MAC (hidden)
|
$row['devMac'], // MAC (hidden)
|
||||||
formatIPlong ($row['dev_LastIP']), // IP orderable
|
formatIPlong ($row['devLastIP']), // IP orderable
|
||||||
$row['rowid'], // Rowid (hidden)
|
$row['rowid'], // Rowid (hidden)
|
||||||
handleNull($row['dev_Network_Node_MAC_ADDR']),
|
handleNull($row['devParentMAC']),
|
||||||
handleNull($row['connected_devices']),
|
handleNull($row['connected_devices']),
|
||||||
handleNull($row['dev_Location']),
|
handleNull($row['devLocation']),
|
||||||
handleNull($row['dev_Vendor']),
|
handleNull($row['devVendor']),
|
||||||
handleNull($row['dev_Network_Node_port']),
|
handleNull($row['devParentPort']),
|
||||||
handleNull($row['dev_GUID']),
|
handleNull($row['devGUID']),
|
||||||
handleNull($row['dev_SyncHubNodeName']),
|
handleNull($row['devSyncHubNode']),
|
||||||
handleNull($row['dev_NetworkSite']),
|
handleNull($row['devSite']),
|
||||||
handleNull($row['dev_SSID'])
|
handleNull($row['devSSID']),
|
||||||
|
handleNull($row['devSourcePlugin'])
|
||||||
);
|
);
|
||||||
|
|
||||||
$newOrder = array();
|
$newOrder = array();
|
||||||
@@ -744,13 +758,13 @@ function getDevicesListCalendar() {
|
|||||||
// arrays of rows
|
// arrays of rows
|
||||||
$tableData = array();
|
$tableData = array();
|
||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
||||||
if ($row['dev_Favorite'] == 1) {
|
if ($row['devFavorite'] == 1) {
|
||||||
$row['dev_Name'] = '<span class="text-yellow">★</span> '. $row['dev_Name'];
|
$row['devName'] = '<span class="text-yellow">★</span> '. $row['devName'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tableData[] = array ('id' => $row['dev_MAC'],
|
$tableData[] = array ('id' => $row['devMac'],
|
||||||
'title' => $row['dev_Name'],
|
'title' => $row['devName'],
|
||||||
'favorite' => $row['dev_Favorite']);
|
'favorite' => $row['devFavorite']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return json
|
// Return json
|
||||||
@@ -767,14 +781,14 @@ function getIcons() {
|
|||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
// Device Data
|
// Device Data
|
||||||
$sql = 'select dev_Icon from Devices group by dev_Icon';
|
$sql = 'select devIcon from Devices group by devIcon';
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
// arrays of rows
|
// arrays of rows
|
||||||
$tableData = array();
|
$tableData = array();
|
||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
||||||
$icon = handleNull($row['dev_Icon'], "<i class='fa fa-laptop'></i>");
|
$icon = handleNull($row['devIcon'], "<i class='fa fa-laptop'></i>");
|
||||||
// Push row data
|
// Push row data
|
||||||
$tableData[] = array('id' => $icon,
|
$tableData[] = array('id' => $icon,
|
||||||
'name' => $icon );
|
'name' => $icon );
|
||||||
@@ -807,7 +821,7 @@ function getDevices() {
|
|||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
// Device Data
|
// Device Data
|
||||||
$sql = 'select dev_MAC, dev_Name from Devices';
|
$sql = 'select devMac, devName from Devices';
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -815,8 +829,8 @@ function getDevices() {
|
|||||||
$tableData = array();
|
$tableData = array();
|
||||||
|
|
||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
||||||
$name = handleNull($row['dev_Name'], "(unknown)");
|
$name = handleNull($row['devName'], "(unknown)");
|
||||||
$mac = handleNull($row['dev_MAC'], "(unknown)");
|
$mac = handleNull($row['devMac'], "(unknown)");
|
||||||
// Push row data
|
// Push row data
|
||||||
$tableData[] = array('id' => $mac,
|
$tableData[] = array('id' => $mac,
|
||||||
'name' => $name );
|
'name' => $name );
|
||||||
@@ -844,7 +858,7 @@ function updateNetworkLeaf()
|
|||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
// sql
|
// sql
|
||||||
$sql = 'UPDATE Devices SET "dev_Network_Node_MAC_ADDR" = "'. $nodeMac .'" WHERE "dev_MAC"="' . $leafMac.'"' ;
|
$sql = 'UPDATE Devices SET "devParentMAC" = "'. $nodeMac .'" WHERE "devMac"="' . $leafMac.'"' ;
|
||||||
// update Data
|
// update Data
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -871,7 +885,7 @@ function overwriteIconType()
|
|||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
// sql
|
// sql
|
||||||
$sql = 'UPDATE Devices SET "dev_Icon" = "'. $icon .'" where dev_DeviceType in (select dev_DeviceType from Devices where dev_MAC = "' . $mac.'")' ;
|
$sql = 'UPDATE Devices SET "devIcon" = "'. $icon .'" where devType in (select devType from Devices where devMac = "' . $mac.'")' ;
|
||||||
// update Data
|
// update Data
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
@@ -921,19 +935,19 @@ function copyFromDevice() {
|
|||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
// create temporary table with the source data
|
// create temporary table with the source data
|
||||||
$sql = "CREATE TABLE temp_devices AS SELECT * FROM Devices WHERE dev_MAC = '". $MAC_FROM . "';";
|
$sql = "CREATE TABLE temp_devices AS SELECT * FROM Devices WHERE devMac = '". $MAC_FROM . "';";
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
// update temporary table with the correct target MAC
|
// update temporary table with the correct target MAC
|
||||||
$sql = "UPDATE temp_devices SET dev_MAC = '". $MAC_TO . "';";
|
$sql = "UPDATE temp_devices SET devMac = '". $MAC_TO . "';";
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
// delete previous entry
|
// delete previous entry
|
||||||
$sql = "DELETE FROM Devices WHERE dev_MAC = '". $MAC_TO . "';";
|
$sql = "DELETE FROM Devices WHERE devMac = '". $MAC_TO . "';";
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
// insert new entry with the correct target MAC from the temporary table
|
// insert new entry with the correct target MAC from the temporary table
|
||||||
$sql = "INSERT INTO Devices SELECT * FROM temp_devices WHERE dev_MAC = '".$MAC_TO."'";
|
$sql = "INSERT INTO Devices SELECT * FROM temp_devices WHERE devMac = '".$MAC_TO."'";
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
|
|
||||||
// clean-up temporary table
|
// clean-up temporary table
|
||||||
@@ -954,13 +968,13 @@ function copyFromDevice() {
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
function getDeviceCondition ($deviceStatus) {
|
function getDeviceCondition ($deviceStatus) {
|
||||||
switch ($deviceStatus) {
|
switch ($deviceStatus) {
|
||||||
case 'all': return 'WHERE dev_Archived=0'; break;
|
case 'all': return 'WHERE devIsArchived=0'; break;
|
||||||
case 'my': return 'WHERE dev_Archived=0'; break;
|
case 'my': return 'WHERE devIsArchived=0'; break;
|
||||||
case 'connected': return 'WHERE dev_Archived=0 AND dev_PresentLastScan=1'; break;
|
case 'connected': return 'WHERE devIsArchived=0 AND devPresentLastScan=1'; break;
|
||||||
case 'favorites': return 'WHERE dev_Archived=0 AND dev_Favorite=1'; break;
|
case 'favorites': return 'WHERE devIsArchived=0 AND devFavorite=1'; break;
|
||||||
case 'new': return 'WHERE dev_Archived=0 AND dev_NewDevice=1'; break;
|
case 'new': return 'WHERE devIsArchived=0 AND devIsNew=1'; break;
|
||||||
case 'down': return 'WHERE dev_Archived=0 AND dev_AlertDeviceDown !=0 AND dev_PresentLastScan=0'; break;
|
case 'down': return 'WHERE devIsArchived=0 AND devAlertDown !=0 AND devPresentLastScan=0'; break;
|
||||||
case 'archived': return 'WHERE dev_Archived=1'; break;
|
case 'archived': return 'WHERE devIsArchived=1'; break;
|
||||||
default: return 'WHERE 1=0'; break;
|
default: return 'WHERE 1=0'; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,12 @@
|
|||||||
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// External files
|
// External files
|
||||||
require dirname(__FILE__).'/init.php';
|
require dirname(__FILE__).'/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Action selector
|
// Action selector
|
||||||
@@ -72,7 +75,7 @@ function getEventsTotals() {
|
|||||||
$resultJSON = getCache("getEventsTotals".$days);
|
$resultJSON = getCache("getEventsTotals".$days);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// one query to get all numbers, whcih is quicker than multiple queries
|
// one query to get all numbers, which is quicker than multiple queries
|
||||||
$sql = "select
|
$sql = "select
|
||||||
(SELECT Count(*) FROM Events WHERE eve_DateTime >= date('now', '".$periodDateSQL."')) as all_events,
|
(SELECT Count(*) FROM Events WHERE eve_DateTime >= date('now', '".$periodDateSQL."')) as all_events,
|
||||||
(SELECT Count(*) FROM Sessions as sessions WHERE ( ses_DateTimeConnection >= date('now', '".$periodDateSQL."') OR ses_DateTimeDisconnection >= date('now', '".$periodDateSQL."') OR ses_StillConnected = 1 )) as sessions,
|
(SELECT Count(*) FROM Sessions as sessions WHERE ( ses_DateTimeConnection >= date('now', '".$periodDateSQL."') OR ses_DateTimeDisconnection >= date('now', '".$periodDateSQL."') OR ses_StillConnected = 1 )) as sessions,
|
||||||
@@ -105,12 +108,12 @@ function getEvents() {
|
|||||||
$periodDate = getDateFromPeriod();
|
$periodDate = getDateFromPeriod();
|
||||||
|
|
||||||
// SQL
|
// SQL
|
||||||
$SQL1 = 'SELECT eve_DateTime AS eve_DateTimeOrder, dev_name, dev_owner, eve_DateTime, eve_EventType, NULL, NULL, NULL, NULL, eve_IP, NULL, eve_AdditionalInfo, NULL, Dev_MAC, eve_PendingAlertEmail
|
$SQL1 = 'SELECT eve_DateTime AS eve_DateTimeOrder, devName, devOwner, eve_DateTime, eve_EventType, NULL, NULL, NULL, NULL, eve_IP, NULL, eve_AdditionalInfo, NULL, devMac, eve_PendingAlertEmail
|
||||||
FROM Events_Devices
|
FROM Events_Devices
|
||||||
WHERE eve_DateTime >= '. $periodDate;
|
WHERE eve_DateTime >= '. $periodDate;
|
||||||
|
|
||||||
$SQL2 = 'SELECT IFNULL (ses_DateTimeConnection, ses_DateTimeDisconnection) ses_DateTimeOrder,
|
$SQL2 = 'SELECT IFNULL (ses_DateTimeConnection, ses_DateTimeDisconnection) ses_DateTimeOrder,
|
||||||
dev_name, dev_owner, Null, Null, ses_DateTimeConnection, ses_DateTimeDisconnection, NULL, NULL, ses_IP, NULL, ses_AdditionalInfo, ses_StillConnected, Dev_MAC
|
devName, devOwner, Null, Null, ses_DateTimeConnection, ses_DateTimeDisconnection, NULL, NULL, ses_IP, NULL, ses_AdditionalInfo, ses_StillConnected, devMac
|
||||||
FROM Sessions_Devices ';
|
FROM Sessions_Devices ';
|
||||||
|
|
||||||
// SQL Variations for status
|
// SQL Variations for status
|
||||||
@@ -334,24 +337,40 @@ function getEventsCalendar() {
|
|||||||
$endDate = '"'. $_REQUEST ['end'] .'"';
|
$endDate = '"'. $_REQUEST ['end'] .'"';
|
||||||
|
|
||||||
// SQL
|
// SQL
|
||||||
$SQL = 'SELECT ses_MAC, ses_EventTypeConnection, ses_DateTimeConnection,
|
$SQL = 'SELECT SES1.ses_MAC, SES1.ses_EventTypeConnection, SES1.ses_DateTimeConnection,
|
||||||
ses_EventTypeDisconnection, ses_DateTimeDisconnection, ses_IP, ses_AdditionalInfo, ses_StillConnected,
|
SES1.ses_EventTypeDisconnection, SES1.ses_DateTimeDisconnection, SES1.ses_IP,
|
||||||
|
SES1.ses_AdditionalInfo, SES1.ses_StillConnected,
|
||||||
CASE
|
|
||||||
WHEN ses_EventTypeConnection = "<missing event>" THEN
|
CASE
|
||||||
IFNULL ((SELECT MAX(ses_DateTimeDisconnection) FROM Sessions AS SES2 WHERE SES2.ses_MAC = SES1.ses_MAC AND SES2.ses_DateTimeDisconnection < SES1.ses_DateTimeDisconnection), DATETIME(ses_DateTimeDisconnection, "-1 hour"))
|
WHEN SES1.ses_EventTypeConnection = "<missing event>" THEN
|
||||||
ELSE ses_DateTimeConnection
|
IFNULL (
|
||||||
END AS ses_DateTimeConnectionCorrected,
|
(SELECT MAX(SES2.ses_DateTimeDisconnection)
|
||||||
|
FROM Sessions AS SES2
|
||||||
|
WHERE SES2.ses_MAC = SES1.ses_MAC
|
||||||
|
AND SES2.ses_DateTimeDisconnection < SES1.ses_DateTimeDisconnection
|
||||||
|
AND SES2.ses_DateTimeDisconnection BETWEEN Date('. $startDate .') AND Date('. $endDate .')
|
||||||
|
),
|
||||||
|
DATETIME(SES1.ses_DateTimeDisconnection, "-1 hour")
|
||||||
|
)
|
||||||
|
ELSE SES1.ses_DateTimeConnection
|
||||||
|
END AS ses_DateTimeConnectionCorrected,
|
||||||
|
|
||||||
CASE
|
CASE
|
||||||
WHEN ses_EventTypeDisconnection = "<missing event>" THEN
|
WHEN SES1.ses_EventTypeDisconnection = "<missing event>" THEN
|
||||||
(SELECT MIN(ses_DateTimeConnection) FROM Sessions AS SES2 WHERE SES2.ses_MAC = SES1.ses_MAC AND SES2.ses_DateTimeConnection > SES1.ses_DateTimeConnection)
|
(SELECT MIN(SES2.ses_DateTimeConnection)
|
||||||
ELSE ses_DateTimeDisconnection
|
FROM Sessions AS SES2
|
||||||
END AS ses_DateTimeDisconnectionCorrected
|
WHERE SES2.ses_MAC = SES1.ses_MAC
|
||||||
|
AND SES2.ses_DateTimeConnection > SES1.ses_DateTimeConnection
|
||||||
|
AND SES2.ses_DateTimeConnection BETWEEN Date('. $startDate .') AND Date('. $endDate .')
|
||||||
|
)
|
||||||
|
ELSE SES1.ses_DateTimeDisconnection
|
||||||
|
END AS ses_DateTimeDisconnectionCorrected
|
||||||
|
|
||||||
|
FROM Sessions AS SES1
|
||||||
|
WHERE (SES1.ses_DateTimeConnection BETWEEN Date('. $startDate .') AND Date('. $endDate .'))
|
||||||
|
OR (SES1.ses_DateTimeDisconnection BETWEEN Date('. $startDate .') AND Date('. $endDate .'))
|
||||||
|
OR SES1.ses_StillConnected = 1';
|
||||||
|
|
||||||
FROM Sessions AS SES1
|
|
||||||
WHERE ( ses_DateTimeConnectionCorrected <= Date('. $endDate .')
|
|
||||||
AND (ses_DateTimeDisconnectionCorrected >= Date('. $startDate .') OR ses_StillConnected = 1 )) ';
|
|
||||||
$result = $db->query($SQL);
|
$result = $db->query($SQL);
|
||||||
|
|
||||||
// arrays of rows
|
// arrays of rows
|
||||||
|
|||||||
@@ -15,6 +15,10 @@
|
|||||||
// Get init.php
|
// Get init.php
|
||||||
require dirname(__FILE__).'/../server/init.php';
|
require dirname(__FILE__).'/../server/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
// Perform a test with the PING command
|
// Perform a test with the PING command
|
||||||
$output = shell_exec("curl ipinfo.io");
|
$output = shell_exec("curl ipinfo.io");
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
require 'util.php';
|
require 'util.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
$PIA_HOST_IP = $_REQUEST['scan'];
|
$PIA_HOST_IP = $_REQUEST['scan'];
|
||||||
$PIA_SCAN_MODE = $_REQUEST['mode'];
|
$PIA_SCAN_MODE = $_REQUEST['mode'];
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,11 @@
|
|||||||
// Get init.php
|
// Get init.php
|
||||||
require dirname(__FILE__).'/../server/init.php';
|
require dirname(__FILE__).'/../server/init.php';
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
// Get IP
|
// Get IP
|
||||||
$ip = $_GET['ip'];
|
$ip = $_GET['ip'];
|
||||||
|
|
||||||
|
|||||||
@@ -1,144 +0,0 @@
|
|||||||
<?php
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// NetAlertX
|
|
||||||
// Open Source Network Guard / WIFI & LAN intrusion detector
|
|
||||||
//
|
|
||||||
// parameters.php - Front module. Server side. Manage Parameters
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// External files
|
|
||||||
require dirname(__FILE__).'/init.php';
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Action selector
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Set maximum execution time to 15 seconds
|
|
||||||
ini_set ('max_execution_time','15');
|
|
||||||
|
|
||||||
$skipCache = FALSE;
|
|
||||||
$expireMinutes = 5;
|
|
||||||
$defaultValue = '';
|
|
||||||
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['skipcache'])) {
|
|
||||||
$skipCache = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['defaultValue'])) {
|
|
||||||
$defaultValue = $_REQUEST['defaultValue'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['expireMinutes'])) {
|
|
||||||
$expireMinutes = $_REQUEST['expireMinutes'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Action functions
|
|
||||||
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
|
||||||
$action = $_REQUEST['action'];
|
|
||||||
switch ($action) {
|
|
||||||
case 'get': getParameter($skipCache, $defaultValue, $expireMinutes); break;
|
|
||||||
case 'set': setParameter($expireMinutes); break;
|
|
||||||
default: logServerConsole ('Action: '. $action); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Get Parameter Value
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getParameter($skipCache, $defaultValue, $expireMinutes) {
|
|
||||||
|
|
||||||
$parameter = $_REQUEST['parameter'];
|
|
||||||
$value = "";
|
|
||||||
|
|
||||||
// get the value from the cache if available
|
|
||||||
$cachedValue = getCache($parameter);
|
|
||||||
if($cachedValue != "")
|
|
||||||
{
|
|
||||||
$value = $cachedValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// query the database if no cache entry found or requesting live data (skipping cache)
|
|
||||||
if($skipCache || $value == "" )
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
$sql = 'SELECT par_Value FROM Parameters
|
|
||||||
WHERE par_ID="'. quotes($parameter) .'"';
|
|
||||||
|
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
|
||||||
|
|
||||||
if($row != NULL && count($row) == 1)
|
|
||||||
{
|
|
||||||
$value = $row[0];
|
|
||||||
} else{
|
|
||||||
$value = $defaultValue;
|
|
||||||
|
|
||||||
// Nothing found in the DB, Insert new value
|
|
||||||
insertNew($parameter, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update cache
|
|
||||||
setCache($parameter, $value, $expireMinutes);
|
|
||||||
}
|
|
||||||
// return value
|
|
||||||
echo (json_encode ($value));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Set Parameter Value
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function setParameter($expireMinutes) {
|
|
||||||
|
|
||||||
$parameter = $_REQUEST['parameter'];
|
|
||||||
$value = $_REQUEST['value'];
|
|
||||||
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Update value
|
|
||||||
$sql = 'UPDATE Parameters SET par_Value="'. quotes ($value) .'"
|
|
||||||
WHERE par_ID="'. quotes($parameter) .'"';
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
if (! $result == TRUE) {
|
|
||||||
echo "Error updating parameter\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$changes = $db->changes();
|
|
||||||
if ($changes == 0) {
|
|
||||||
// Insert new value
|
|
||||||
insertNew($parameter, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update cache
|
|
||||||
setCache($parameter, $value, $expireMinutes);
|
|
||||||
|
|
||||||
echo 'OK';
|
|
||||||
}
|
|
||||||
|
|
||||||
function insertNew($parameter, $value)
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Insert new value
|
|
||||||
$sql = 'INSERT INTO Parameters (par_ID, par_Value)
|
|
||||||
VALUES ("'. quotes($parameter) .'",
|
|
||||||
"'. quotes($value) .'")';
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
if (! $result == TRUE) {
|
|
||||||
echo "Error creating parameter\n\n$sql \n\n". $db->lastErrorMsg();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
||||||
84
front/php/server/query_graphql.php
Executable file
@@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// ---- IMPORTS ----
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
// Get init.php
|
||||||
|
require dirname(__FILE__).'/../server/init.php';
|
||||||
|
// ---- IMPORTS ----
|
||||||
|
|
||||||
|
|
||||||
|
// Helper function to get GraphQL URL (you can replace this with environment variables)
|
||||||
|
function getGraphQLUrl() {
|
||||||
|
$port = getSettingValue("GRAPHQL_PORT"); // Port for the GraphQL server
|
||||||
|
return "0.0.0.0:$port/graphql"; // Full URL to the GraphQL endpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to make a GraphQL query
|
||||||
|
function queryGraphQL($query, $variables = null) {
|
||||||
|
$url = getGraphQLUrl();
|
||||||
|
|
||||||
|
// Prepare the request data
|
||||||
|
$data = [
|
||||||
|
'query' => $query
|
||||||
|
];
|
||||||
|
|
||||||
|
// prepare header
|
||||||
|
$api_token = getSettingValue("API_TOKEN");
|
||||||
|
$headers = [
|
||||||
|
'Content-Type: application/json',
|
||||||
|
'Authorization: Bearer ' . $api_token // Add Authorization header
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
// Add variables if provided
|
||||||
|
if ($variables) {
|
||||||
|
$data['variables'] = $variables;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode the data as JSON
|
||||||
|
$dataJson = json_encode($data);
|
||||||
|
|
||||||
|
// Initialize cURL
|
||||||
|
$ch = curl_init($url);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
|
||||||
|
|
||||||
|
// Execute the request and handle errors
|
||||||
|
$response = curl_exec($ch);
|
||||||
|
if ($response === false) {
|
||||||
|
error_log('GraphQL Request Error: ' . curl_error($ch));
|
||||||
|
return ["error" => "Request failed (GraphQL server might be down). URL: " .$url . " Error: ". curl_error($ch)];
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_close($ch);
|
||||||
|
return json_decode($response, true); // Decode and return the JSON response
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Handle incoming requests
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
// Decode the JSON input from the AJAX request
|
||||||
|
$input = json_decode(file_get_contents('php://input'), true);
|
||||||
|
|
||||||
|
// Ensure the query is set
|
||||||
|
if (!isset($input['query'])) {
|
||||||
|
echo json_encode(['error' => 'No query provided']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the query and variables
|
||||||
|
$query = $input['query'];
|
||||||
|
$variables = isset($input['variables']) ? $input['variables'] : null;
|
||||||
|
|
||||||
|
// Call the GraphQL function
|
||||||
|
$result = queryGraphQL($query, $variables);
|
||||||
|
|
||||||
|
// Send the response back to the client
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
echo json_encode($result);
|
||||||
|
}
|
||||||
|
?>
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
require dirname(__FILE__).'/../server/init.php';
|
require dirname(__FILE__).'/../server/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
exec('../../../back/speedtest-cli --secure --simple', $output);
|
exec('../../../back/speedtest-cli --secure --simple', $output);
|
||||||
|
|
||||||
echo '<h4>'. lang('Speedtest_Results') .'</h4>';
|
echo '<h4>'. lang('Speedtest_Results') .'</h4>';
|
||||||
|
|||||||
@@ -15,6 +15,10 @@
|
|||||||
// Get init.php
|
// Get init.php
|
||||||
require dirname(__FILE__).'/../server/init.php';
|
require dirname(__FILE__).'/../server/init.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
// Get IP
|
// Get IP
|
||||||
$ip = $_GET['ip'];
|
$ip = $_GET['ip'];
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,10 @@
|
|||||||
require dirname(__FILE__).'/../templates/timezone.php';
|
require dirname(__FILE__).'/../templates/timezone.php';
|
||||||
require dirname(__FILE__).'/../templates/skinUI.php';
|
require dirname(__FILE__).'/../templates/skinUI.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
$FUNCTION = [];
|
$FUNCTION = [];
|
||||||
$SETTINGS = [];
|
$SETTINGS = [];
|
||||||
$ACTION = "";
|
$ACTION = "";
|
||||||
@@ -484,7 +488,7 @@ function getDateFromPeriod () {
|
|||||||
$days = "3650"; //10 years
|
$days = "3650"; //10 years
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$days = "1";
|
$days = "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
$periodDateSQL = "-".$days." day";
|
$periodDateSQL = "-".$days." day";
|
||||||
@@ -520,40 +524,60 @@ function handleNull ($text, $default = "") {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------
|
||||||
|
// Encode special chars
|
||||||
|
function encodeSpecialChars($str) {
|
||||||
|
return str_replace(
|
||||||
|
['&', '<', '>', '"', "'"],
|
||||||
|
['&', '<', '>', '"', '''],
|
||||||
|
$str
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------
|
||||||
|
// Decode special chars
|
||||||
|
function decodeSpecialChars($str) {
|
||||||
|
return str_replace(
|
||||||
|
['&', '<', '>', '"', '''],
|
||||||
|
['&', '<', '>', '"', "'"],
|
||||||
|
$str
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------
|
||||||
function getDevicesColumns(){
|
function getDevicesColumns(){
|
||||||
|
|
||||||
$columns = ["dev_MAC",
|
$columns = ["devMac",
|
||||||
"dev_Name",
|
"devName",
|
||||||
"dev_Owner",
|
"devOwner",
|
||||||
"dev_DeviceType",
|
"devType",
|
||||||
"dev_Vendor",
|
"devVendor",
|
||||||
"dev_Favorite",
|
"devFavorite",
|
||||||
"dev_Group",
|
"devGroup",
|
||||||
"dev_Comments",
|
"devComments",
|
||||||
"dev_FirstConnection",
|
"devFirstConnection",
|
||||||
"dev_LastConnection",
|
"devLastConnection",
|
||||||
"dev_LastIP",
|
"devLastIP",
|
||||||
"dev_StaticIP",
|
"devStaticIP",
|
||||||
"dev_ScanCycle",
|
"devScan",
|
||||||
"dev_LogEvents",
|
"devLogEvents",
|
||||||
"dev_AlertEvents",
|
"devAlertEvents",
|
||||||
"dev_AlertDeviceDown",
|
"devAlertDown",
|
||||||
"dev_SkipRepeated",
|
"devSkipRepeated",
|
||||||
"dev_LastNotification",
|
"devLastNotification",
|
||||||
"dev_PresentLastScan",
|
"devPresentLastScan",
|
||||||
"dev_NewDevice",
|
"devIsNew",
|
||||||
"dev_Location",
|
"devLocation",
|
||||||
"dev_Archived",
|
"devIsArchived",
|
||||||
"dev_Network_Node_port",
|
"devParentPort",
|
||||||
"dev_Network_Node_MAC_ADDR",
|
"devParentMAC",
|
||||||
"dev_Icon",
|
"devIcon",
|
||||||
"dev_GUID",
|
"devGUID",
|
||||||
"dev_SyncHubNodeName",
|
"devSyncHubNode",
|
||||||
"dev_NetworkSite",
|
"devSite",
|
||||||
"dev_SSID"
|
"devSSID",
|
||||||
|
"devSourcePlugin"
|
||||||
];
|
];
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
<!-- utils needing a DB connection -->
|
|
||||||
|
|
||||||
<?php
|
|
||||||
|
|
||||||
require dirname(__FILE__).'/init.php';
|
|
||||||
|
|
||||||
// Action functions
|
|
||||||
if (isset ($_REQUEST['key']))
|
|
||||||
{
|
|
||||||
echo lang($_REQUEST['key']);
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
require dirname(__FILE__).'/../templates/timezone.php';
|
require dirname(__FILE__).'/../templates/timezone.php';
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
// Check if the action parameter is set in the GET request
|
// Check if the action parameter is set in the GET request
|
||||||
if (isset($_GET['action'])) {
|
if (isset($_GET['action'])) {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
if (session_status() == PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
|
||||||
$isAuthenticated = false;
|
$isAuthenticated = false;
|
||||||
|
|
||||||
@@ -17,9 +19,9 @@ $config_file = "../../../config/app.conf"; // depends on where this file is call
|
|||||||
$config_file_lines = file($config_file);
|
$config_file_lines = file($config_file);
|
||||||
$config_file_lines = array_values(preg_grep('/^SETPWD_password.*=/', $config_file_lines));
|
$config_file_lines = array_values(preg_grep('/^SETPWD_password.*=/', $config_file_lines));
|
||||||
$password_line = explode("'", $config_file_lines[0]);
|
$password_line = explode("'", $config_file_lines[0]);
|
||||||
$Pia_Password = $password_line[1];
|
$nax_Password = $password_line[1];
|
||||||
|
|
||||||
if (isset($_COOKIE[$CookieSaveLoginName]) && $Pia_Password == $_COOKIE[$CookieSaveLoginName]) {
|
if (isset($_COOKIE[$CookieSaveLoginName]) && $nax_Password == $_COOKIE[$CookieSaveLoginName]) {
|
||||||
$isAuthenticated = true;
|
$isAuthenticated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,12 @@
|
|||||||
#---------------------------------------------------------------------------------#
|
#---------------------------------------------------------------------------------#
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<?php
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
?>
|
||||||
|
|
||||||
<!-- Main Footer -->
|
<!-- Main Footer -->
|
||||||
<footer class="main-footer">
|
<footer class="main-footer">
|
||||||
<!-- Default to the left -->
|
<!-- Default to the left -->
|
||||||
@@ -25,6 +31,7 @@
|
|||||||
| <a href="https://github.com/jokob-sk/NetAlertX/tree/main/docs#documentation-overview" target="_blank">Docs <i class="fa fa-circle-question"></i></a>
|
| <a href="https://github.com/jokob-sk/NetAlertX/tree/main/docs#documentation-overview" target="_blank">Docs <i class="fa fa-circle-question"></i></a>
|
||||||
| <a href="https://github.com/jokob-sk/NetAlertX/issues"><i class="fa-solid fa-bug"></i></a>
|
| <a href="https://github.com/jokob-sk/NetAlertX/issues"><i class="fa-solid fa-bug"></i></a>
|
||||||
| <a href="https://github.com/jokob-sk/NetAlertX/"><i class="fa-brands fa-github"></i></a>
|
| <a href="https://github.com/jokob-sk/NetAlertX/"><i class="fa-brands fa-github"></i></a>
|
||||||
|
| <a href="https://discord.gg/UQnnHNYV"><i class="fa-brands fa-discord"></i></a>
|
||||||
| <a href="mailto:jokob@duck.com?subject=NetAlertX"><i class="fa-solid fa-envelope"></i></a>
|
| <a href="mailto:jokob@duck.com?subject=NetAlertX"><i class="fa-solid fa-envelope"></i></a>
|
||||||
| <a href="https://github.com/pucherot/Pi.Alert">©</a>
|
| <a href="https://github.com/pucherot/Pi.Alert">©</a>
|
||||||
| <?= lang('Maintenance_built_on');?>: <?php include 'php/templates/build.php'; ?>
|
| <?= lang('Maintenance_built_on');?>: <?php include 'php/templates/build.php'; ?>
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
$Pia_Graph_Device_Time = array();
|
|
||||||
$Pia_Graph_Device_All = array();
|
|
||||||
$Pia_Graph_Device_Online = array();
|
|
||||||
$Pia_Graph_Device_Down = array();
|
|
||||||
$Pia_Graph_Device_Arch = array();
|
|
||||||
|
|
||||||
$statusesToShow = "'online', 'offline', 'archived'";
|
|
||||||
|
|
||||||
$statQuery = $db->query("SELECT * FROM Settings WHERE Code_Name = 'UI_PRESENCE'");
|
|
||||||
|
|
||||||
while($r = $statQuery->fetchArray(SQLITE3_ASSOC))
|
|
||||||
{
|
|
||||||
$statusesToShow = $r['Value'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$results = $db->query('SELECT * FROM Online_History ORDER BY Scan_Date DESC LIMIT 144');
|
|
||||||
|
|
||||||
while ($row = $results->fetchArray())
|
|
||||||
{
|
|
||||||
$time_raw = explode(' ', $row['Scan_Date']);
|
|
||||||
$time = explode(':', $time_raw[1]);
|
|
||||||
array_push($Pia_Graph_Device_Time, $time[0].':'.$time[1]);
|
|
||||||
|
|
||||||
// Offline
|
|
||||||
if(strpos($statusesToShow, 'offline') !== false)
|
|
||||||
{
|
|
||||||
array_push($Pia_Graph_Device_Down, $row['Down_Devices']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// All
|
|
||||||
array_push($Pia_Graph_Device_All, $row['All_Devices']);
|
|
||||||
|
|
||||||
// Online
|
|
||||||
if(strpos($statusesToShow, 'online') !== false)
|
|
||||||
{
|
|
||||||
array_push($Pia_Graph_Device_Online, $row['Online_Devices']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Archived
|
|
||||||
if(strpos($statusesToShow, 'archived') !== false)
|
|
||||||
{
|
|
||||||
array_push($Pia_Graph_Device_Arch, $row['Archived_Devices']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function pia_graph_devices_data($Pia_Graph_Array) {
|
|
||||||
$Pia_Graph_Array_rev = array_reverse($Pia_Graph_Array);
|
|
||||||
foreach ($Pia_Graph_Array_rev as $result) {
|
|
||||||
echo "'".$result."'";
|
|
||||||
echo ",";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,8 +8,10 @@
|
|||||||
#--------------------------------------------------------------------------- -->
|
#--------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require dirname(__FILE__).'/../server/init.php';
|
require dirname(__FILE__).'/../server/init.php';
|
||||||
require dirname(__FILE__).'/security.php';
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@@ -71,10 +73,14 @@ require dirname(__FILE__).'/security.php';
|
|||||||
<!-- Dark-Mode Patch -->
|
<!-- Dark-Mode Patch -->
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
if ($ENABLED_DARKMODE === True) {
|
switch ($UI_THEME) {
|
||||||
echo '<link rel="stylesheet" href="css/dark-patch.css">';
|
case "Dark":
|
||||||
$BACKGROUND_IMAGE_PATCH='style="background-image: url(\'img/boxed-bg-dark.png\');"';
|
echo '<link rel="stylesheet" href="css/dark-patch.css">';
|
||||||
} else { $BACKGROUND_IMAGE_PATCH='style="background-image: url(\'img/background.png\');"';}
|
break;
|
||||||
|
case "System":
|
||||||
|
echo '<link rel="stylesheet" href="css/system-dark-patch.css">';
|
||||||
|
break;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
@@ -112,7 +118,7 @@ require dirname(__FILE__).'/security.php';
|
|||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
<!-- Layout Boxed Yellow -->
|
<!-- Layout Boxed Yellow -->
|
||||||
|
|
||||||
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> sidebar-mini" <?php echo $BACKGROUND_IMAGE_PATCH;?> onLoad="show_pia_servertime();" >
|
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> sidebar-mini" onLoad="show_pia_servertime();" >
|
||||||
<!-- Site wrapper -->
|
<!-- Site wrapper -->
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
|
|
||||||
@@ -249,28 +255,28 @@ require dirname(__FILE__).'/security.php';
|
|||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu" style="display: <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('devices.php', 'deviceDetails.php') ) ){ echo 'block'; } else {echo 'none';} ?>;">
|
<ul class="treeview-menu" style="display: <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('devices.php', 'deviceDetails.php') ) ){ echo 'block'; } else {echo 'none';} ?>;">
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#my" onclick="initializeDatatable('my')" > <?= lang("Device_Shortcut_AllDevices");?> </a>
|
<a href="devices.php#my_devices" onclick="forceLoadUrl('devices.php#my_devices')" > <?= lang("Device_Shortcut_AllDevices");?> </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#connected" onclick="initializeDatatable('connected')" > <?= lang("Device_Shortcut_Connected");?> </a>
|
<a href="devices.php#connected" onclick="forceLoadUrl('devices.php#connected')" > <?= lang("Device_Shortcut_Connected");?> </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#favorites" onclick="initializeDatatable('favorites')" > <?= lang("Device_Shortcut_Favorites");?> </a>
|
<a href="devices.php#favorites" onclick="forceLoadUrl('devices.php#favorites')" > <?= lang("Device_Shortcut_Favorites");?> </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#new" onclick="initializeDatatable('new')" > <?= lang("Device_Shortcut_NewDevices");?> </a>
|
<a href="devices.php#new" onclick="forceLoadUrl('devices.php#new')" > <?= lang("Device_Shortcut_NewDevices");?> </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#down" onclick="initializeDatatable('down')" > <?= lang("Device_Shortcut_DownOnly");?> </a>
|
<a href="devices.php#down" onclick="forceLoadUrl('devices.php#down')" > <?= lang("Device_Shortcut_DownOnly");?> </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#offline" onclick="initializeDatatable('offline')" > <?= lang("Gen_Offline");?> </a>
|
<a href="devices.php#offline" onclick="forceLoadUrl('devices.php#offline')" > <?= lang("Gen_Offline");?> </a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="devices.php#archived" onclick="initializeDatatable('archived')" > <?= lang("Device_Shortcut_Archived");?> </a>
|
<a href="devices.php#archived" onclick="forceLoadUrl('devices.php#archived')" > <?= lang("Device_Shortcut_Archived");?> </a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Monitoring menu item -->
|
<!-- Monitoring menu item -->
|
||||||
|
|||||||
720
front/php/templates/language/ar_ar.json
Executable file
@@ -0,0 +1,720 @@
|
|||||||
|
{
|
||||||
|
"API_CUSTOM_SQL_description": "",
|
||||||
|
"API_CUSTOM_SQL_name": "",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
|
"API_display_name": "",
|
||||||
|
"API_icon": "",
|
||||||
|
"About_Design": "",
|
||||||
|
"About_Exit": "",
|
||||||
|
"About_Title": "",
|
||||||
|
"AppEvents_DateTimeCreated": "",
|
||||||
|
"AppEvents_Extra": "",
|
||||||
|
"AppEvents_GUID": "",
|
||||||
|
"AppEvents_Helper1": "",
|
||||||
|
"AppEvents_Helper2": "",
|
||||||
|
"AppEvents_Helper3": "",
|
||||||
|
"AppEvents_ObjectForeignKey": "",
|
||||||
|
"AppEvents_ObjectIndex": "",
|
||||||
|
"AppEvents_ObjectIsArchived": "",
|
||||||
|
"AppEvents_ObjectIsNew": "",
|
||||||
|
"AppEvents_ObjectPlugin": "",
|
||||||
|
"AppEvents_ObjectPrimaryID": "",
|
||||||
|
"AppEvents_ObjectSecondaryID": "",
|
||||||
|
"AppEvents_ObjectStatus": "",
|
||||||
|
"AppEvents_ObjectStatusColumn": "",
|
||||||
|
"AppEvents_ObjectType": "",
|
||||||
|
"AppEvents_Plugin": "",
|
||||||
|
"AppEvents_Type": "",
|
||||||
|
"BackDevDetail_Actions_Ask_Run": "",
|
||||||
|
"BackDevDetail_Actions_Not_Registered": "",
|
||||||
|
"BackDevDetail_Actions_Title_Run": "",
|
||||||
|
"BackDevDetail_Copy_Ask": "",
|
||||||
|
"BackDevDetail_Copy_Title": "",
|
||||||
|
"BackDevDetail_Tools_WOL_error": "",
|
||||||
|
"BackDevDetail_Tools_WOL_okay": "",
|
||||||
|
"BackDevices_Arpscan_disabled": "",
|
||||||
|
"BackDevices_Arpscan_enabled": "",
|
||||||
|
"BackDevices_Backup_CopError": "",
|
||||||
|
"BackDevices_Backup_Failed": "",
|
||||||
|
"BackDevices_Backup_okay": "",
|
||||||
|
"BackDevices_DBTools_DelDevError_a": "",
|
||||||
|
"BackDevices_DBTools_DelDevError_b": "",
|
||||||
|
"BackDevices_DBTools_DelDev_a": "",
|
||||||
|
"BackDevices_DBTools_DelDev_b": "",
|
||||||
|
"BackDevices_DBTools_DelEvents": "",
|
||||||
|
"BackDevices_DBTools_DelEventsError": "",
|
||||||
|
"BackDevices_DBTools_ImportCSV": "",
|
||||||
|
"BackDevices_DBTools_ImportCSVError": "",
|
||||||
|
"BackDevices_DBTools_ImportCSVMissing": "",
|
||||||
|
"BackDevices_DBTools_Purge": "",
|
||||||
|
"BackDevices_DBTools_UpdDev": "",
|
||||||
|
"BackDevices_DBTools_UpdDevError": "",
|
||||||
|
"BackDevices_DBTools_Upgrade": "",
|
||||||
|
"BackDevices_DBTools_UpgradeError": "",
|
||||||
|
"BackDevices_Device_UpdDevError": "",
|
||||||
|
"BackDevices_Restore_CopError": "",
|
||||||
|
"BackDevices_Restore_Failed": "",
|
||||||
|
"BackDevices_Restore_okay": "",
|
||||||
|
"BackDevices_darkmode_disabled": "",
|
||||||
|
"BackDevices_darkmode_enabled": "",
|
||||||
|
"CLEAR_NEW_FLAG_description": "",
|
||||||
|
"CLEAR_NEW_FLAG_name": "",
|
||||||
|
"DAYS_TO_KEEP_EVENTS_description": "",
|
||||||
|
"DAYS_TO_KEEP_EVENTS_name": "",
|
||||||
|
"DevDetail_Copy_Device_Title": "",
|
||||||
|
"DevDetail_Copy_Device_Tooltip": "",
|
||||||
|
"DevDetail_EveandAl_AlertAllEvents": "",
|
||||||
|
"DevDetail_EveandAl_AlertDown": "",
|
||||||
|
"DevDetail_EveandAl_Archived": "",
|
||||||
|
"DevDetail_EveandAl_NewDevice": "",
|
||||||
|
"DevDetail_EveandAl_NewDevice_Tooltip": "",
|
||||||
|
"DevDetail_EveandAl_RandomMAC": "",
|
||||||
|
"DevDetail_EveandAl_ScanCycle": "",
|
||||||
|
"DevDetail_EveandAl_ScanCycle_a": "",
|
||||||
|
"DevDetail_EveandAl_ScanCycle_z": "",
|
||||||
|
"DevDetail_EveandAl_Skip": "",
|
||||||
|
"DevDetail_EveandAl_Title": "",
|
||||||
|
"DevDetail_Events_CheckBox": "",
|
||||||
|
"DevDetail_GoToNetworkNode": "",
|
||||||
|
"DevDetail_Icon": "",
|
||||||
|
"DevDetail_Icon_Descr": "",
|
||||||
|
"DevDetail_Loading": "",
|
||||||
|
"DevDetail_MainInfo_Comments": "",
|
||||||
|
"DevDetail_MainInfo_Favorite": "",
|
||||||
|
"DevDetail_MainInfo_Group": "",
|
||||||
|
"DevDetail_MainInfo_Location": "",
|
||||||
|
"DevDetail_MainInfo_Name": "",
|
||||||
|
"DevDetail_MainInfo_Network": "",
|
||||||
|
"DevDetail_MainInfo_Network_Port": "",
|
||||||
|
"DevDetail_MainInfo_Network_Site": "",
|
||||||
|
"DevDetail_MainInfo_Network_Title": "",
|
||||||
|
"DevDetail_MainInfo_Owner": "",
|
||||||
|
"DevDetail_MainInfo_SSID": "",
|
||||||
|
"DevDetail_MainInfo_Title": "",
|
||||||
|
"DevDetail_MainInfo_Type": "",
|
||||||
|
"DevDetail_MainInfo_Vendor": "",
|
||||||
|
"DevDetail_MainInfo_mac": "",
|
||||||
|
"DevDetail_Network_Node_hover": "",
|
||||||
|
"DevDetail_Network_Port_hover": "",
|
||||||
|
"DevDetail_Nmap_Scans": "",
|
||||||
|
"DevDetail_Nmap_Scans_desc": "",
|
||||||
|
"DevDetail_Nmap_buttonDefault": "",
|
||||||
|
"DevDetail_Nmap_buttonDefault_text": "",
|
||||||
|
"DevDetail_Nmap_buttonDetail": "",
|
||||||
|
"DevDetail_Nmap_buttonDetail_text": "",
|
||||||
|
"DevDetail_Nmap_buttonFast": "",
|
||||||
|
"DevDetail_Nmap_buttonFast_text": "",
|
||||||
|
"DevDetail_Nmap_buttonSkipDiscovery": "",
|
||||||
|
"DevDetail_Nmap_buttonSkipDiscovery_text": "",
|
||||||
|
"DevDetail_Nmap_resultsLink": "",
|
||||||
|
"DevDetail_Owner_hover": "",
|
||||||
|
"DevDetail_Periodselect_All": "",
|
||||||
|
"DevDetail_Periodselect_LastMonth": "",
|
||||||
|
"DevDetail_Periodselect_LastWeek": "",
|
||||||
|
"DevDetail_Periodselect_LastYear": "",
|
||||||
|
"DevDetail_Periodselect_today": "",
|
||||||
|
"DevDetail_Run_Actions_Title": "",
|
||||||
|
"DevDetail_Run_Actions_Tooltip": "",
|
||||||
|
"DevDetail_SessionInfo_FirstSession": "",
|
||||||
|
"DevDetail_SessionInfo_LastIP": "",
|
||||||
|
"DevDetail_SessionInfo_LastSession": "",
|
||||||
|
"DevDetail_SessionInfo_StaticIP": "",
|
||||||
|
"DevDetail_SessionInfo_Status": "",
|
||||||
|
"DevDetail_SessionInfo_Title": "",
|
||||||
|
"DevDetail_SessionTable_Additionalinfo": "",
|
||||||
|
"DevDetail_SessionTable_Connection": "",
|
||||||
|
"DevDetail_SessionTable_Disconnection": "",
|
||||||
|
"DevDetail_SessionTable_Duration": "",
|
||||||
|
"DevDetail_SessionTable_IP": "",
|
||||||
|
"DevDetail_SessionTable_Order": "",
|
||||||
|
"DevDetail_Shortcut_CurrentStatus": "",
|
||||||
|
"DevDetail_Shortcut_DownAlerts": "",
|
||||||
|
"DevDetail_Shortcut_Presence": "",
|
||||||
|
"DevDetail_Shortcut_Sessions": "",
|
||||||
|
"DevDetail_Tab_Details": "",
|
||||||
|
"DevDetail_Tab_Events": "",
|
||||||
|
"DevDetail_Tab_EventsTableDate": "",
|
||||||
|
"DevDetail_Tab_EventsTableEvent": "",
|
||||||
|
"DevDetail_Tab_EventsTableIP": "",
|
||||||
|
"DevDetail_Tab_EventsTableInfo": "",
|
||||||
|
"DevDetail_Tab_Nmap": "",
|
||||||
|
"DevDetail_Tab_NmapEmpty": "",
|
||||||
|
"DevDetail_Tab_NmapTableExtra": "",
|
||||||
|
"DevDetail_Tab_NmapTableHeader": "",
|
||||||
|
"DevDetail_Tab_NmapTableIndex": "",
|
||||||
|
"DevDetail_Tab_NmapTablePort": "",
|
||||||
|
"DevDetail_Tab_NmapTableService": "",
|
||||||
|
"DevDetail_Tab_NmapTableState": "",
|
||||||
|
"DevDetail_Tab_NmapTableText": "",
|
||||||
|
"DevDetail_Tab_NmapTableTime": "",
|
||||||
|
"DevDetail_Tab_Plugins": "",
|
||||||
|
"DevDetail_Tab_Presence": "",
|
||||||
|
"DevDetail_Tab_Sessions": "",
|
||||||
|
"DevDetail_Tab_Tools": "",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Description": "",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Error": "",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Start": "",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Title": "",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Description": "",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Error": "",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Start": "",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Title": "",
|
||||||
|
"DevDetail_Tab_Tools_Speedtest_Description": "",
|
||||||
|
"DevDetail_Tab_Tools_Speedtest_Start": "",
|
||||||
|
"DevDetail_Tab_Tools_Speedtest_Title": "",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Description": "",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Error": "",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Start": "",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Title": "",
|
||||||
|
"DevDetail_Tools_WOL": "",
|
||||||
|
"DevDetail_Tools_WOL_noti": "",
|
||||||
|
"DevDetail_Tools_WOL_noti_text": "",
|
||||||
|
"DevDetail_Type_hover": "",
|
||||||
|
"DevDetail_Vendor_hover": "",
|
||||||
|
"DevDetail_WOL_Title": "",
|
||||||
|
"DevDetail_button_AddIcon": "",
|
||||||
|
"DevDetail_button_AddIcon_Help": "",
|
||||||
|
"DevDetail_button_AddIcon_Tooltip": "",
|
||||||
|
"DevDetail_button_Delete": "",
|
||||||
|
"DevDetail_button_DeleteEvents": "",
|
||||||
|
"DevDetail_button_DeleteEvents_Warning": "",
|
||||||
|
"DevDetail_button_OverwriteIcons": "",
|
||||||
|
"DevDetail_button_OverwriteIcons_Tooltip": "",
|
||||||
|
"DevDetail_button_OverwriteIcons_Warning": "",
|
||||||
|
"DevDetail_button_Reset": "",
|
||||||
|
"DevDetail_button_Save": "",
|
||||||
|
"Device_MultiEdit": "",
|
||||||
|
"Device_MultiEdit_Backup": "",
|
||||||
|
"Device_MultiEdit_Fields": "",
|
||||||
|
"Device_MultiEdit_MassActions": "",
|
||||||
|
"Device_MultiEdit_Tooltip": "",
|
||||||
|
"Device_Searchbox": "",
|
||||||
|
"Device_Shortcut_AllDevices": "",
|
||||||
|
"Device_Shortcut_Archived": "",
|
||||||
|
"Device_Shortcut_Connected": "",
|
||||||
|
"Device_Shortcut_Devices": "",
|
||||||
|
"Device_Shortcut_DownAlerts": "",
|
||||||
|
"Device_Shortcut_DownOnly": "",
|
||||||
|
"Device_Shortcut_Favorites": "",
|
||||||
|
"Device_Shortcut_NewDevices": "",
|
||||||
|
"Device_Shortcut_OnlineChart": "",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
|
"Device_TableHead_Connected_Devices": "",
|
||||||
|
"Device_TableHead_Favorite": "",
|
||||||
|
"Device_TableHead_FirstSession": "",
|
||||||
|
"Device_TableHead_GUID": "",
|
||||||
|
"Device_TableHead_Group": "",
|
||||||
|
"Device_TableHead_Icon": "",
|
||||||
|
"Device_TableHead_LastIP": "",
|
||||||
|
"Device_TableHead_LastIPOrder": "",
|
||||||
|
"Device_TableHead_LastSession": "",
|
||||||
|
"Device_TableHead_Location": "",
|
||||||
|
"Device_TableHead_MAC": "",
|
||||||
|
"Device_TableHead_MAC_full": "",
|
||||||
|
"Device_TableHead_Name": "",
|
||||||
|
"Device_TableHead_NetworkSite": "",
|
||||||
|
"Device_TableHead_Owner": "",
|
||||||
|
"Device_TableHead_Parent_MAC": "",
|
||||||
|
"Device_TableHead_Port": "",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
|
"Device_TableHead_RowID": "",
|
||||||
|
"Device_TableHead_Rowid": "",
|
||||||
|
"Device_TableHead_SSID": "",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
|
"Device_TableHead_Status": "",
|
||||||
|
"Device_TableHead_SyncHubNodeName": "",
|
||||||
|
"Device_TableHead_Type": "",
|
||||||
|
"Device_TableHead_Vendor": "",
|
||||||
|
"Device_Table_Not_Network_Device": "",
|
||||||
|
"Device_Table_info": "",
|
||||||
|
"Device_Table_nav_next": "",
|
||||||
|
"Device_Table_nav_prev": "",
|
||||||
|
"Device_Tablelenght": "",
|
||||||
|
"Device_Tablelenght_all": "",
|
||||||
|
"Device_Title": "",
|
||||||
|
"Donations_Others": "",
|
||||||
|
"Donations_Platforms": "",
|
||||||
|
"Donations_Text": "",
|
||||||
|
"Donations_Title": "",
|
||||||
|
"ENABLE_PLUGINS_description": "",
|
||||||
|
"ENABLE_PLUGINS_name": "",
|
||||||
|
"Email_display_name": "",
|
||||||
|
"Email_icon": "",
|
||||||
|
"Events_Loading": "",
|
||||||
|
"Events_Periodselect_All": "",
|
||||||
|
"Events_Periodselect_LastMonth": "",
|
||||||
|
"Events_Periodselect_LastWeek": "",
|
||||||
|
"Events_Periodselect_LastYear": "",
|
||||||
|
"Events_Periodselect_today": "",
|
||||||
|
"Events_Searchbox": "",
|
||||||
|
"Events_Shortcut_AllEvents": "",
|
||||||
|
"Events_Shortcut_DownAlerts": "",
|
||||||
|
"Events_Shortcut_Events": "",
|
||||||
|
"Events_Shortcut_MissSessions": "",
|
||||||
|
"Events_Shortcut_NewDevices": "",
|
||||||
|
"Events_Shortcut_Sessions": "",
|
||||||
|
"Events_Shortcut_VoidSessions": "",
|
||||||
|
"Events_TableHead_AdditionalInfo": "",
|
||||||
|
"Events_TableHead_Connection": "",
|
||||||
|
"Events_TableHead_Date": "",
|
||||||
|
"Events_TableHead_Device": "",
|
||||||
|
"Events_TableHead_Disconnection": "",
|
||||||
|
"Events_TableHead_Duration": "",
|
||||||
|
"Events_TableHead_DurationOrder": "",
|
||||||
|
"Events_TableHead_EventType": "",
|
||||||
|
"Events_TableHead_IP": "",
|
||||||
|
"Events_TableHead_IPOrder": "",
|
||||||
|
"Events_TableHead_Order": "",
|
||||||
|
"Events_TableHead_Owner": "",
|
||||||
|
"Events_TableHead_PendingAlert": "",
|
||||||
|
"Events_Table_info": "",
|
||||||
|
"Events_Table_nav_next": "",
|
||||||
|
"Events_Table_nav_prev": "",
|
||||||
|
"Events_Tablelenght": "",
|
||||||
|
"Events_Tablelenght_all": "",
|
||||||
|
"Events_Title": "",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
|
"Gen_Action": "",
|
||||||
|
"Gen_Add": "",
|
||||||
|
"Gen_Add_All": "",
|
||||||
|
"Gen_All_Devices": "",
|
||||||
|
"Gen_AreYouSure": "",
|
||||||
|
"Gen_Backup": "",
|
||||||
|
"Gen_Cancel": "",
|
||||||
|
"Gen_Change": "",
|
||||||
|
"Gen_Copy": "",
|
||||||
|
"Gen_DataUpdatedUITakesTime": "",
|
||||||
|
"Gen_Delete": "",
|
||||||
|
"Gen_DeleteAll": "",
|
||||||
|
"Gen_Description": "",
|
||||||
|
"Gen_Error": "",
|
||||||
|
"Gen_Filter": "",
|
||||||
|
"Gen_Generate": "",
|
||||||
|
"Gen_LockedDB": "",
|
||||||
|
"Gen_Offline": "",
|
||||||
|
"Gen_Okay": "",
|
||||||
|
"Gen_Purge": "",
|
||||||
|
"Gen_ReadDocs": "",
|
||||||
|
"Gen_Remove_All": "",
|
||||||
|
"Gen_Remove_Last": "",
|
||||||
|
"Gen_Restore": "",
|
||||||
|
"Gen_Run": "",
|
||||||
|
"Gen_Save": "",
|
||||||
|
"Gen_Saved": "",
|
||||||
|
"Gen_Search": "",
|
||||||
|
"Gen_SelectToPreview": "",
|
||||||
|
"Gen_Selected_Devices": "",
|
||||||
|
"Gen_Switch": "",
|
||||||
|
"Gen_Upd": "",
|
||||||
|
"Gen_Upd_Fail": "",
|
||||||
|
"Gen_Update": "",
|
||||||
|
"Gen_Update_Value": "",
|
||||||
|
"Gen_Warning": "",
|
||||||
|
"Gen_Work_In_Progress": "",
|
||||||
|
"General_display_name": "",
|
||||||
|
"General_icon": "",
|
||||||
|
"HRS_TO_KEEP_NEWDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_NEWDEV_name": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
|
"HelpFAQ_Cat_Detail": "",
|
||||||
|
"HelpFAQ_Cat_Detail_300_head": "",
|
||||||
|
"HelpFAQ_Cat_Detail_300_text_a": "",
|
||||||
|
"HelpFAQ_Cat_Detail_300_text_b": "",
|
||||||
|
"HelpFAQ_Cat_Detail_301_head_a": "",
|
||||||
|
"HelpFAQ_Cat_Detail_301_head_b": "",
|
||||||
|
"HelpFAQ_Cat_Detail_301_text": "",
|
||||||
|
"HelpFAQ_Cat_Detail_302_head_a": "",
|
||||||
|
"HelpFAQ_Cat_Detail_302_head_b": "",
|
||||||
|
"HelpFAQ_Cat_Detail_302_text": "",
|
||||||
|
"HelpFAQ_Cat_Detail_303_head": "",
|
||||||
|
"HelpFAQ_Cat_Detail_303_text": "",
|
||||||
|
"HelpFAQ_Cat_Device_200_head": "",
|
||||||
|
"HelpFAQ_Cat_Device_200_text": "",
|
||||||
|
"HelpFAQ_Cat_General": "",
|
||||||
|
"HelpFAQ_Cat_General_100_head": "",
|
||||||
|
"HelpFAQ_Cat_General_100_text_a": "",
|
||||||
|
"HelpFAQ_Cat_General_100_text_b": "",
|
||||||
|
"HelpFAQ_Cat_General_100_text_c": "",
|
||||||
|
"HelpFAQ_Cat_General_101_head": "",
|
||||||
|
"HelpFAQ_Cat_General_101_text": "",
|
||||||
|
"HelpFAQ_Cat_General_102_head": "",
|
||||||
|
"HelpFAQ_Cat_General_102_text": "",
|
||||||
|
"HelpFAQ_Cat_General_102docker_head": "",
|
||||||
|
"HelpFAQ_Cat_General_102docker_text": "",
|
||||||
|
"HelpFAQ_Cat_General_103_head": "",
|
||||||
|
"HelpFAQ_Cat_General_103_text": "",
|
||||||
|
"HelpFAQ_Cat_Network_600_head": "",
|
||||||
|
"HelpFAQ_Cat_Network_600_text": "",
|
||||||
|
"HelpFAQ_Cat_Network_601_head": "",
|
||||||
|
"HelpFAQ_Cat_Network_601_text": "",
|
||||||
|
"HelpFAQ_Cat_Presence_400_head": "",
|
||||||
|
"HelpFAQ_Cat_Presence_400_text": "",
|
||||||
|
"HelpFAQ_Cat_Presence_401_head": "",
|
||||||
|
"HelpFAQ_Cat_Presence_401_text": "",
|
||||||
|
"HelpFAQ_Title": "",
|
||||||
|
"LOADED_PLUGINS_description": "",
|
||||||
|
"LOADED_PLUGINS_name": "",
|
||||||
|
"LOG_LEVEL_description": "",
|
||||||
|
"LOG_LEVEL_name": "",
|
||||||
|
"Loading": "",
|
||||||
|
"Login_Box": "",
|
||||||
|
"Login_Default_PWD": "",
|
||||||
|
"Login_Info": "",
|
||||||
|
"Login_Psw-box": "",
|
||||||
|
"Login_Psw_alert": "",
|
||||||
|
"Login_Psw_folder": "",
|
||||||
|
"Login_Psw_new": "",
|
||||||
|
"Login_Psw_run": "",
|
||||||
|
"Login_Remember": "",
|
||||||
|
"Login_Remember_small": "",
|
||||||
|
"Login_Submit": "",
|
||||||
|
"Login_Toggle_Alert_headline": "",
|
||||||
|
"Login_Toggle_Info": "",
|
||||||
|
"Login_Toggle_Info_headline": "",
|
||||||
|
"Maint_PurgeLog": "",
|
||||||
|
"Maint_RestartServer": "",
|
||||||
|
"Maint_Restart_Server_noti_text": "",
|
||||||
|
"Maintenance_Running_Version": "",
|
||||||
|
"Maintenance_Status": "",
|
||||||
|
"Maintenance_Title": "",
|
||||||
|
"Maintenance_Tool_ExportCSV": "",
|
||||||
|
"Maintenance_Tool_ExportCSV_noti": "",
|
||||||
|
"Maintenance_Tool_ExportCSV_noti_text": "",
|
||||||
|
"Maintenance_Tool_ExportCSV_text": "",
|
||||||
|
"Maintenance_Tool_ImportCSV": "",
|
||||||
|
"Maintenance_Tool_ImportCSV_noti": "",
|
||||||
|
"Maintenance_Tool_ImportCSV_noti_text": "",
|
||||||
|
"Maintenance_Tool_ImportCSV_text": "",
|
||||||
|
"Maintenance_Tool_ImportPastedCSV": "",
|
||||||
|
"Maintenance_Tool_ImportPastedCSV_noti_text": "",
|
||||||
|
"Maintenance_Tool_ImportPastedCSV_text": "",
|
||||||
|
"Maintenance_Tool_arpscansw": "",
|
||||||
|
"Maintenance_Tool_arpscansw_noti": "",
|
||||||
|
"Maintenance_Tool_arpscansw_noti_text": "",
|
||||||
|
"Maintenance_Tool_arpscansw_text": "",
|
||||||
|
"Maintenance_Tool_backup": "",
|
||||||
|
"Maintenance_Tool_backup_noti": "",
|
||||||
|
"Maintenance_Tool_backup_noti_text": "",
|
||||||
|
"Maintenance_Tool_backup_text": "",
|
||||||
|
"Maintenance_Tool_check_visible": "",
|
||||||
|
"Maintenance_Tool_darkmode": "",
|
||||||
|
"Maintenance_Tool_darkmode_noti": "",
|
||||||
|
"Maintenance_Tool_darkmode_noti_text": "",
|
||||||
|
"Maintenance_Tool_darkmode_text": "",
|
||||||
|
"Maintenance_Tool_del_ActHistory": "",
|
||||||
|
"Maintenance_Tool_del_ActHistory_noti": "",
|
||||||
|
"Maintenance_Tool_del_ActHistory_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_ActHistory_text": "",
|
||||||
|
"Maintenance_Tool_del_alldev": "",
|
||||||
|
"Maintenance_Tool_del_alldev_noti": "",
|
||||||
|
"Maintenance_Tool_del_alldev_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_alldev_text": "",
|
||||||
|
"Maintenance_Tool_del_allevents": "",
|
||||||
|
"Maintenance_Tool_del_allevents30": "",
|
||||||
|
"Maintenance_Tool_del_allevents30_noti": "",
|
||||||
|
"Maintenance_Tool_del_allevents30_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_allevents30_text": "",
|
||||||
|
"Maintenance_Tool_del_allevents_noti": "",
|
||||||
|
"Maintenance_Tool_del_allevents_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_allevents_text": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs_noti": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs_text": "",
|
||||||
|
"Maintenance_Tool_del_selecteddev": "",
|
||||||
|
"Maintenance_Tool_del_selecteddev_text": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev_noti": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev_text": "",
|
||||||
|
"Maintenance_Tool_displayed_columns_text": "",
|
||||||
|
"Maintenance_Tool_drag_me": "",
|
||||||
|
"Maintenance_Tool_order_columns_text": "",
|
||||||
|
"Maintenance_Tool_purgebackup": "",
|
||||||
|
"Maintenance_Tool_purgebackup_noti": "",
|
||||||
|
"Maintenance_Tool_purgebackup_noti_text": "",
|
||||||
|
"Maintenance_Tool_purgebackup_text": "",
|
||||||
|
"Maintenance_Tool_restore": "",
|
||||||
|
"Maintenance_Tool_restore_noti": "",
|
||||||
|
"Maintenance_Tool_restore_noti_text": "",
|
||||||
|
"Maintenance_Tool_restore_text": "",
|
||||||
|
"Maintenance_Tool_upgrade_database_noti": "",
|
||||||
|
"Maintenance_Tool_upgrade_database_noti_text": "",
|
||||||
|
"Maintenance_Tool_upgrade_database_text": "",
|
||||||
|
"Maintenance_Tools_Tab_BackupRestore": "",
|
||||||
|
"Maintenance_Tools_Tab_Logging": "",
|
||||||
|
"Maintenance_Tools_Tab_Settings": "",
|
||||||
|
"Maintenance_Tools_Tab_Tools": "",
|
||||||
|
"Maintenance_Tools_Tab_UISettings": "",
|
||||||
|
"Maintenance_arp_status": "",
|
||||||
|
"Maintenance_arp_status_off": "",
|
||||||
|
"Maintenance_arp_status_on": "",
|
||||||
|
"Maintenance_built_on": "",
|
||||||
|
"Maintenance_current_version": "",
|
||||||
|
"Maintenance_database_backup": "",
|
||||||
|
"Maintenance_database_backup_found": "",
|
||||||
|
"Maintenance_database_backup_total": "",
|
||||||
|
"Maintenance_database_lastmod": "",
|
||||||
|
"Maintenance_database_path": "",
|
||||||
|
"Maintenance_database_rows": "",
|
||||||
|
"Maintenance_database_size": "",
|
||||||
|
"Maintenance_lang_selector_apply": "",
|
||||||
|
"Maintenance_lang_selector_empty": "",
|
||||||
|
"Maintenance_lang_selector_lable": "",
|
||||||
|
"Maintenance_lang_selector_text": "",
|
||||||
|
"Maintenance_new_version": "",
|
||||||
|
"Maintenance_themeselector_apply": "",
|
||||||
|
"Maintenance_themeselector_empty": "",
|
||||||
|
"Maintenance_themeselector_lable": "",
|
||||||
|
"Maintenance_themeselector_text": "",
|
||||||
|
"Maintenance_version": "",
|
||||||
|
"NETWORK_DEVICE_TYPES_description": "",
|
||||||
|
"NETWORK_DEVICE_TYPES_name": "",
|
||||||
|
"Navigation_About": "",
|
||||||
|
"Navigation_Devices": "",
|
||||||
|
"Navigation_Donations": "",
|
||||||
|
"Navigation_Events": "",
|
||||||
|
"Navigation_HelpFAQ": "",
|
||||||
|
"Navigation_Integrations": "",
|
||||||
|
"Navigation_Maintenance": "",
|
||||||
|
"Navigation_Monitoring": "",
|
||||||
|
"Navigation_Network": "",
|
||||||
|
"Navigation_Notifications": "",
|
||||||
|
"Navigation_Plugins": "",
|
||||||
|
"Navigation_Presence": "",
|
||||||
|
"Navigation_Report": "",
|
||||||
|
"Navigation_Settings": "",
|
||||||
|
"Navigation_SystemInfo": "",
|
||||||
|
"Navigation_Workflows": "",
|
||||||
|
"Network_Assign": "",
|
||||||
|
"Network_Cant_Assign": "",
|
||||||
|
"Network_Configuration_Error": "",
|
||||||
|
"Network_Connected": "",
|
||||||
|
"Network_ManageAdd": "",
|
||||||
|
"Network_ManageAdd_Name": "",
|
||||||
|
"Network_ManageAdd_Name_text": "",
|
||||||
|
"Network_ManageAdd_Port": "",
|
||||||
|
"Network_ManageAdd_Port_text": "",
|
||||||
|
"Network_ManageAdd_Submit": "",
|
||||||
|
"Network_ManageAdd_Type": "",
|
||||||
|
"Network_ManageAdd_Type_text": "",
|
||||||
|
"Network_ManageAssign": "",
|
||||||
|
"Network_ManageDel": "",
|
||||||
|
"Network_ManageDel_Name": "",
|
||||||
|
"Network_ManageDel_Name_text": "",
|
||||||
|
"Network_ManageDel_Submit": "",
|
||||||
|
"Network_ManageDevices": "",
|
||||||
|
"Network_ManageEdit": "",
|
||||||
|
"Network_ManageEdit_ID": "",
|
||||||
|
"Network_ManageEdit_ID_text": "",
|
||||||
|
"Network_ManageEdit_Name": "",
|
||||||
|
"Network_ManageEdit_Name_text": "",
|
||||||
|
"Network_ManageEdit_Port": "",
|
||||||
|
"Network_ManageEdit_Port_text": "",
|
||||||
|
"Network_ManageEdit_Submit": "",
|
||||||
|
"Network_ManageEdit_Type": "",
|
||||||
|
"Network_ManageEdit_Type_text": "",
|
||||||
|
"Network_ManageLeaf": "",
|
||||||
|
"Network_ManageUnassign": "",
|
||||||
|
"Network_NoAssignedDevices": "",
|
||||||
|
"Network_NoDevices": "",
|
||||||
|
"Network_Node": "",
|
||||||
|
"Network_Node_Name": "",
|
||||||
|
"Network_Parent": "",
|
||||||
|
"Network_Root": "",
|
||||||
|
"Network_Root_Not_Configured": "",
|
||||||
|
"Network_Root_Unconfigurable": "",
|
||||||
|
"Network_Table_Hostname": "",
|
||||||
|
"Network_Table_IP": "",
|
||||||
|
"Network_Table_State": "",
|
||||||
|
"Network_Title": "",
|
||||||
|
"Network_UnassignedDevices": "",
|
||||||
|
"Notifications_All": "",
|
||||||
|
"Notifications_Mark_All_Read": "",
|
||||||
|
"PIALERT_WEB_PASSWORD_description": "",
|
||||||
|
"PIALERT_WEB_PASSWORD_name": "",
|
||||||
|
"PIALERT_WEB_PROTECTION_description": "",
|
||||||
|
"PIALERT_WEB_PROTECTION_name": "",
|
||||||
|
"PLUGINS_KEEP_HIST_description": "",
|
||||||
|
"PLUGINS_KEEP_HIST_name": "",
|
||||||
|
"Plugins_DeleteAll": "",
|
||||||
|
"Plugins_Filters_Mac": "",
|
||||||
|
"Plugins_History": "",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
|
"Plugins_Objects": "",
|
||||||
|
"Plugins_Out_of": "",
|
||||||
|
"Plugins_Unprocessed_Events": "",
|
||||||
|
"Plugins_no_control": "",
|
||||||
|
"Presence_CalHead_day": "",
|
||||||
|
"Presence_CalHead_lang": "",
|
||||||
|
"Presence_CalHead_month": "",
|
||||||
|
"Presence_CalHead_quarter": "",
|
||||||
|
"Presence_CalHead_week": "",
|
||||||
|
"Presence_CalHead_year": "",
|
||||||
|
"Presence_CallHead_Devices": "",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
|
"Presence_Loading": "",
|
||||||
|
"Presence_Shortcut_AllDevices": "",
|
||||||
|
"Presence_Shortcut_Archived": "",
|
||||||
|
"Presence_Shortcut_Connected": "",
|
||||||
|
"Presence_Shortcut_Devices": "",
|
||||||
|
"Presence_Shortcut_DownAlerts": "",
|
||||||
|
"Presence_Shortcut_Favorites": "",
|
||||||
|
"Presence_Shortcut_NewDevices": "",
|
||||||
|
"Presence_Title": "",
|
||||||
|
"REPORT_DASHBOARD_URL_description": "",
|
||||||
|
"REPORT_DASHBOARD_URL_name": "",
|
||||||
|
"REPORT_ERROR": "",
|
||||||
|
"REPORT_MAIL_description": "",
|
||||||
|
"REPORT_MAIL_name": "",
|
||||||
|
"REPORT_TITLE": "",
|
||||||
|
"RandomMAC_hover": "",
|
||||||
|
"Reports_Sent_Log": "",
|
||||||
|
"SCAN_SUBNETS_description": "",
|
||||||
|
"SCAN_SUBNETS_name": "",
|
||||||
|
"SYSTEM_TITLE": "",
|
||||||
|
"Setting_Override": "",
|
||||||
|
"Setting_Override_Description": "",
|
||||||
|
"Settings_Metadata_Toggle": "",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
|
"Settings_device_Scanners_desync": "",
|
||||||
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
|
"Speedtest_Results": "",
|
||||||
|
"Systeminfo_CPU": "",
|
||||||
|
"Systeminfo_CPU_Cores": "",
|
||||||
|
"Systeminfo_CPU_Name": "",
|
||||||
|
"Systeminfo_CPU_Speed": "",
|
||||||
|
"Systeminfo_CPU_Temp": "",
|
||||||
|
"Systeminfo_CPU_Vendor": "",
|
||||||
|
"Systeminfo_Client_Resolution": "",
|
||||||
|
"Systeminfo_Client_User_Agent": "",
|
||||||
|
"Systeminfo_General": "",
|
||||||
|
"Systeminfo_General_Date": "",
|
||||||
|
"Systeminfo_General_Date2": "",
|
||||||
|
"Systeminfo_General_Full_Date": "",
|
||||||
|
"Systeminfo_General_TimeZone": "",
|
||||||
|
"Systeminfo_Memory": "",
|
||||||
|
"Systeminfo_Memory_Total_Memory": "",
|
||||||
|
"Systeminfo_Memory_Usage": "",
|
||||||
|
"Systeminfo_Memory_Usage_Percent": "",
|
||||||
|
"Systeminfo_Motherboard": "",
|
||||||
|
"Systeminfo_Motherboard_BIOS": "",
|
||||||
|
"Systeminfo_Motherboard_BIOS_Date": "",
|
||||||
|
"Systeminfo_Motherboard_BIOS_Vendor": "",
|
||||||
|
"Systeminfo_Motherboard_Manufactured": "",
|
||||||
|
"Systeminfo_Motherboard_Name": "",
|
||||||
|
"Systeminfo_Motherboard_Revision": "",
|
||||||
|
"Systeminfo_Network": "",
|
||||||
|
"Systeminfo_Network_Accept_Encoding": "",
|
||||||
|
"Systeminfo_Network_Accept_Language": "",
|
||||||
|
"Systeminfo_Network_Connection_Port": "",
|
||||||
|
"Systeminfo_Network_HTTP_Host": "",
|
||||||
|
"Systeminfo_Network_HTTP_Referer": "",
|
||||||
|
"Systeminfo_Network_HTTP_Referer_String": "",
|
||||||
|
"Systeminfo_Network_Hardware": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_Mask": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_Name": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_RX": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_TX": "",
|
||||||
|
"Systeminfo_Network_IP": "",
|
||||||
|
"Systeminfo_Network_IP_Connection": "",
|
||||||
|
"Systeminfo_Network_IP_Server": "",
|
||||||
|
"Systeminfo_Network_MIME": "",
|
||||||
|
"Systeminfo_Network_Request_Method": "",
|
||||||
|
"Systeminfo_Network_Request_Time": "",
|
||||||
|
"Systeminfo_Network_Request_URI": "",
|
||||||
|
"Systeminfo_Network_Secure_Connection": "",
|
||||||
|
"Systeminfo_Network_Secure_Connection_String": "",
|
||||||
|
"Systeminfo_Network_Server_Name": "",
|
||||||
|
"Systeminfo_Network_Server_Name_String": "",
|
||||||
|
"Systeminfo_Network_Server_Query": "",
|
||||||
|
"Systeminfo_Network_Server_Query_String": "",
|
||||||
|
"Systeminfo_Network_Server_Version": "",
|
||||||
|
"Systeminfo_Services": "",
|
||||||
|
"Systeminfo_Services_Description": "",
|
||||||
|
"Systeminfo_Services_Name": "",
|
||||||
|
"Systeminfo_Storage": "",
|
||||||
|
"Systeminfo_Storage_Device": "",
|
||||||
|
"Systeminfo_Storage_Mount": "",
|
||||||
|
"Systeminfo_Storage_Size": "",
|
||||||
|
"Systeminfo_Storage_Type": "",
|
||||||
|
"Systeminfo_Storage_Usage": "",
|
||||||
|
"Systeminfo_Storage_Usage_Free": "",
|
||||||
|
"Systeminfo_Storage_Usage_Mount": "",
|
||||||
|
"Systeminfo_Storage_Usage_Total": "",
|
||||||
|
"Systeminfo_Storage_Usage_Used": "",
|
||||||
|
"Systeminfo_System": "",
|
||||||
|
"Systeminfo_System_AVG": "",
|
||||||
|
"Systeminfo_System_Architecture": "",
|
||||||
|
"Systeminfo_System_Kernel": "",
|
||||||
|
"Systeminfo_System_OSVersion": "",
|
||||||
|
"Systeminfo_System_Running_Processes": "",
|
||||||
|
"Systeminfo_System_System": "",
|
||||||
|
"Systeminfo_System_Uname": "",
|
||||||
|
"Systeminfo_System_Uptime": "",
|
||||||
|
"Systeminfo_This_Client": "",
|
||||||
|
"Systeminfo_USB_Devices": "",
|
||||||
|
"TICKER_MIGRATE_TO_NETALERTX": "",
|
||||||
|
"TIMEZONE_description": "",
|
||||||
|
"TIMEZONE_name": "",
|
||||||
|
"UI_DEV_SECTIONS_description": "",
|
||||||
|
"UI_DEV_SECTIONS_name": "",
|
||||||
|
"UI_ICONS_description": "",
|
||||||
|
"UI_ICONS_name": "",
|
||||||
|
"UI_LANG_description": "",
|
||||||
|
"UI_LANG_name": "",
|
||||||
|
"UI_MY_DEVICES_description": "",
|
||||||
|
"UI_MY_DEVICES_name": "",
|
||||||
|
"UI_NOT_RANDOM_MAC_description": "",
|
||||||
|
"UI_NOT_RANDOM_MAC_name": "",
|
||||||
|
"UI_PRESENCE_description": "",
|
||||||
|
"UI_PRESENCE_name": "",
|
||||||
|
"UI_REFRESH_description": "",
|
||||||
|
"UI_REFRESH_name": "",
|
||||||
|
"VERSION_description": "",
|
||||||
|
"VERSION_name": "",
|
||||||
|
"devices_old": "",
|
||||||
|
"general_event_description": "",
|
||||||
|
"general_event_title": "",
|
||||||
|
"report_guid": "",
|
||||||
|
"report_guid_missing": "",
|
||||||
|
"report_select_format": "",
|
||||||
|
"report_time": "",
|
||||||
|
"run_event_icon": "",
|
||||||
|
"run_event_tooltip": "",
|
||||||
|
"settings_core_icon": "",
|
||||||
|
"settings_core_label": "",
|
||||||
|
"settings_device_scanners": "",
|
||||||
|
"settings_device_scanners_icon": "",
|
||||||
|
"settings_device_scanners_info": "",
|
||||||
|
"settings_device_scanners_label": "",
|
||||||
|
"settings_enabled": "",
|
||||||
|
"settings_enabled_icon": "",
|
||||||
|
"settings_expand_all": "",
|
||||||
|
"settings_imported": "",
|
||||||
|
"settings_imported_label": "",
|
||||||
|
"settings_missing": "",
|
||||||
|
"settings_missing_block": "",
|
||||||
|
"settings_old": "",
|
||||||
|
"settings_other_scanners": "",
|
||||||
|
"settings_other_scanners_icon": "",
|
||||||
|
"settings_other_scanners_label": "",
|
||||||
|
"settings_publishers": "",
|
||||||
|
"settings_publishers_icon": "",
|
||||||
|
"settings_publishers_info": "",
|
||||||
|
"settings_publishers_label": "",
|
||||||
|
"settings_saved": "",
|
||||||
|
"settings_system_icon": "",
|
||||||
|
"settings_system_label": "",
|
||||||
|
"settings_update_item_warning": "",
|
||||||
|
"test_event_icon": "",
|
||||||
|
"test_event_tooltip": ""
|
||||||
|
}
|
||||||
720
front/php/templates/language/ca_ca.json
Executable file
@@ -0,0 +1,720 @@
|
|||||||
|
{
|
||||||
|
"API_CUSTOM_SQL_description": "Pots especificar una consulta SQL personalitzada que generarà un fitxer JSON i el mostrarà mitjançant <a href=\"/api/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": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
|
"API_display_name": "API",
|
||||||
|
"API_icon": "",
|
||||||
|
"About_Design": "Dissenyat per:",
|
||||||
|
"About_Exit": "Sortir",
|
||||||
|
"About_Title": "",
|
||||||
|
"AppEvents_DateTimeCreated": "",
|
||||||
|
"AppEvents_Extra": "Extra",
|
||||||
|
"AppEvents_GUID": "",
|
||||||
|
"AppEvents_Helper1": "Ajudant 1",
|
||||||
|
"AppEvents_Helper2": "Ajudant 2",
|
||||||
|
"AppEvents_Helper3": "Ajudant 3",
|
||||||
|
"AppEvents_ObjectForeignKey": "Clau forana",
|
||||||
|
"AppEvents_ObjectIndex": "Índex",
|
||||||
|
"AppEvents_ObjectIsArchived": "",
|
||||||
|
"AppEvents_ObjectIsNew": "",
|
||||||
|
"AppEvents_ObjectPlugin": "",
|
||||||
|
"AppEvents_ObjectPrimaryID": "ID primari",
|
||||||
|
"AppEvents_ObjectSecondaryID": "ID secundari",
|
||||||
|
"AppEvents_ObjectStatus": "",
|
||||||
|
"AppEvents_ObjectStatusColumn": "Columna d'estat",
|
||||||
|
"AppEvents_ObjectType": "Tipus d'objecte",
|
||||||
|
"AppEvents_Plugin": "",
|
||||||
|
"AppEvents_Type": "Tipus",
|
||||||
|
"BackDevDetail_Actions_Ask_Run": "Vol executar aquesta comanda?",
|
||||||
|
"BackDevDetail_Actions_Not_Registered": "Comanda no registrada: ",
|
||||||
|
"BackDevDetail_Actions_Title_Run": "Executar la comanda",
|
||||||
|
"BackDevDetail_Copy_Ask": "",
|
||||||
|
"BackDevDetail_Copy_Title": "Copiar detalls",
|
||||||
|
"BackDevDetail_Tools_WOL_error": "La comanda NO s'ha executat.",
|
||||||
|
"BackDevDetail_Tools_WOL_okay": "La comanda s'ha executat.",
|
||||||
|
"BackDevices_Arpscan_disabled": "Arp-Scan Desactivat",
|
||||||
|
"BackDevices_Arpscan_enabled": "Arp-Scan Activat",
|
||||||
|
"BackDevices_Backup_CopError": "La base de dades original no s'ha pogut guardar.",
|
||||||
|
"BackDevices_Backup_Failed": "",
|
||||||
|
"BackDevices_Backup_okay": "La còpia de seguretat s'ha executat en un nou arxiu",
|
||||||
|
"BackDevices_DBTools_DelDevError_a": "Error esborrant el Dispositiu",
|
||||||
|
"BackDevices_DBTools_DelDevError_b": "Error esborrant els Dispositius",
|
||||||
|
"BackDevices_DBTools_DelDev_a": "Dispositiu esborrat",
|
||||||
|
"BackDevices_DBTools_DelDev_b": "Dispositius esborrats",
|
||||||
|
"BackDevices_DBTools_DelEvents": "Esdeveniments esborrats",
|
||||||
|
"BackDevices_DBTools_DelEventsError": "Error esborrant Esdeveniments",
|
||||||
|
"BackDevices_DBTools_ImportCSV": "Els dispositius del fitxer CSV s'han importat correctament.",
|
||||||
|
"BackDevices_DBTools_ImportCSVError": "El fitxer CSV no s'ha pogut importar. Comprovi que el format és correcte.",
|
||||||
|
"BackDevices_DBTools_ImportCSVMissing": "No es pot trobar el fitxer CSV a la ubicació <b>/config/devices.csv.</b>",
|
||||||
|
"BackDevices_DBTools_Purge": "Les còpies de seguretat més antigues s'han esborrat",
|
||||||
|
"BackDevices_DBTools_UpdDev": "Dispositiu actualitzat correctament",
|
||||||
|
"BackDevices_DBTools_UpdDevError": "Error actualitzant el dispositiu",
|
||||||
|
"BackDevices_DBTools_Upgrade": "Base de dades actualitzada correctament",
|
||||||
|
"BackDevices_DBTools_UpgradeError": "Actualització de la base de dades fallida",
|
||||||
|
"BackDevices_Device_UpdDevError": "Error actualitzant dispositius, intenti-ho més endavant. Potser la base de dades està bloquejada per una altra tasca.",
|
||||||
|
"BackDevices_Restore_CopError": "La base de dades original no s'ha pogut guardar.",
|
||||||
|
"BackDevices_Restore_Failed": "Ha fallat la restauració. Si us plau faci una restauració manual de la còpia de seguretat.",
|
||||||
|
"BackDevices_Restore_okay": "Restauració completada correctament.",
|
||||||
|
"BackDevices_darkmode_disabled": "Mode fosc Desactivat",
|
||||||
|
"BackDevices_darkmode_enabled": "Mode fosc Activat",
|
||||||
|
"CLEAR_NEW_FLAG_description": "",
|
||||||
|
"CLEAR_NEW_FLAG_name": "Netejar indicador de nou",
|
||||||
|
"DAYS_TO_KEEP_EVENTS_description": "Això és una configuració de manteniment. Especifica el nombre de dies que es conservaran els esdeveniments. Els esdeveniments antics s'esborraran periòdicament. També aplica als esdeveniments dels Connectors (Plugins).",
|
||||||
|
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
|
||||||
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalls des del dispositiu",
|
||||||
|
"DevDetail_Copy_Device_Tooltip": "Copiar detalls del dispositius des de la llista desplegable. Tot el d'aquesta pàgina es sobre-escriurà",
|
||||||
|
"DevDetail_EveandAl_AlertAllEvents": "Alertes",
|
||||||
|
"DevDetail_EveandAl_AlertDown": "",
|
||||||
|
"DevDetail_EveandAl_Archived": "Arxivat",
|
||||||
|
"DevDetail_EveandAl_NewDevice": "Nou Dispositiu",
|
||||||
|
"DevDetail_EveandAl_NewDevice_Tooltip": "Es mostrarà el nou estat del dispositiu i s'inclourà a les llistes quan el filtre New Devices estigui actiu. No afecta les notificacions.",
|
||||||
|
"DevDetail_EveandAl_RandomMAC": "MAC aleatori",
|
||||||
|
"DevDetail_EveandAl_ScanCycle": "Dispositiu d'escaneig",
|
||||||
|
"DevDetail_EveandAl_ScanCycle_a": "Dispositiu d'escaneig",
|
||||||
|
"DevDetail_EveandAl_ScanCycle_z": "No Escanejar Dispositiu",
|
||||||
|
"DevDetail_EveandAl_Skip": "Omet notificacions repetides per",
|
||||||
|
"DevDetail_EveandAl_Title": "<i class=\"fa fa-bolt\"></i> Configuració de Successos i Alertes",
|
||||||
|
"DevDetail_Events_CheckBox": "Amagar successos de connexió",
|
||||||
|
"DevDetail_GoToNetworkNode": "Navegació a la pàgina de la Xarxa del node donat.",
|
||||||
|
"DevDetail_Icon": "Icona",
|
||||||
|
"DevDetail_Icon_Descr": "",
|
||||||
|
"DevDetail_Loading": "",
|
||||||
|
"DevDetail_MainInfo_Comments": "",
|
||||||
|
"DevDetail_MainInfo_Favorite": "",
|
||||||
|
"DevDetail_MainInfo_Group": "",
|
||||||
|
"DevDetail_MainInfo_Location": "",
|
||||||
|
"DevDetail_MainInfo_Name": "",
|
||||||
|
"DevDetail_MainInfo_Network": "",
|
||||||
|
"DevDetail_MainInfo_Network_Port": "",
|
||||||
|
"DevDetail_MainInfo_Network_Site": "",
|
||||||
|
"DevDetail_MainInfo_Network_Title": "",
|
||||||
|
"DevDetail_MainInfo_Owner": "",
|
||||||
|
"DevDetail_MainInfo_SSID": "",
|
||||||
|
"DevDetail_MainInfo_Title": "",
|
||||||
|
"DevDetail_MainInfo_Type": "",
|
||||||
|
"DevDetail_MainInfo_Vendor": "Venedor",
|
||||||
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_Network_Node_hover": "",
|
||||||
|
"DevDetail_Network_Port_hover": "El port on el dispositiu està connectat al dispositiu de xarxa del pare. Si es deixa buit, sortirà una icona wifi a la representació de la Xarxa.",
|
||||||
|
"DevDetail_Nmap_Scans": "Escaneig manual Nmap",
|
||||||
|
"DevDetail_Nmap_Scans_desc": "Aquí podeu executar les exploracions NMAP manuals. També podeu programar les exploracions NMAP automàtiques a través del connector Serveis i Ports (NMAP). Ves a <a href='/settings.php' target='_blank'>Configuració</a> per saber-ne més",
|
||||||
|
"DevDetail_Nmap_buttonDefault": "Escaneig predeterminat",
|
||||||
|
"DevDetail_Nmap_buttonDefault_text": "Escaneig predeterminat: Nmap escaneja els 1000 ports superiors per a cada protocol d'exploració sol·licitat. El 93% dels ports TCP i el 49% dels ports UDP. (uns 5 segons)",
|
||||||
|
"DevDetail_Nmap_buttonDetail": "Escaneig Detallat",
|
||||||
|
"DevDetail_Nmap_buttonDetail_text": "Escaneig detallat: Escaneig predeterminat amb detecció del sistema operatiu habilitat, detecció de versions, escaneig i traça (fins a 30 segons o més)",
|
||||||
|
"DevDetail_Nmap_buttonFast": "Escaneig ràpid",
|
||||||
|
"DevDetail_Nmap_buttonFast_text": "Escaneig ràpid: Escaneig de menys ports (100) que l'exploració predeterminada (uns pocs segons)",
|
||||||
|
"DevDetail_Nmap_buttonSkipDiscovery": "Ometre el descobriment de Hosts",
|
||||||
|
"DevDetail_Nmap_buttonSkipDiscovery_text": "Omet descobriment de Host (-Pn opció): exploració predeterminada sense descobriment de host",
|
||||||
|
"DevDetail_Nmap_resultsLink": "Podeu sortir d'aquesta pàgina després d'iniciar una exploració. Els resultats també estaran disponibles al fitxer <code>app_front.log</code>.",
|
||||||
|
"DevDetail_Owner_hover": "Titular d'aquest dispositiu. Camp de text lliure.",
|
||||||
|
"DevDetail_Periodselect_All": "Tota la informació",
|
||||||
|
"DevDetail_Periodselect_LastMonth": "Darrer Mes",
|
||||||
|
"DevDetail_Periodselect_LastWeek": "Darrera setmana",
|
||||||
|
"DevDetail_Periodselect_LastYear": "Últim any",
|
||||||
|
"DevDetail_Periodselect_today": "Avui",
|
||||||
|
"DevDetail_Run_Actions_Title": "<i class=\"fa fa-play\"></i> Executar l'acció al dispositiu",
|
||||||
|
"DevDetail_Run_Actions_Tooltip": "Executar una acció al dispositiu actual des de la llista desplegable.",
|
||||||
|
"DevDetail_SessionInfo_FirstSession": "Primera Sessió",
|
||||||
|
"DevDetail_SessionInfo_LastIP": "Darrera IP",
|
||||||
|
"DevDetail_SessionInfo_LastSession": "Últim Fora de línia",
|
||||||
|
"DevDetail_SessionInfo_StaticIP": "IP estàtica",
|
||||||
|
"DevDetail_SessionInfo_Status": "Estat",
|
||||||
|
"DevDetail_SessionInfo_Title": "<i class=\"fa fa-calendar\"></i> Informació de la sessió",
|
||||||
|
"DevDetail_SessionTable_Additionalinfo": "Informació addicional",
|
||||||
|
"DevDetail_SessionTable_Connection": "Connexió",
|
||||||
|
"DevDetail_SessionTable_Disconnection": "Desconnexió",
|
||||||
|
"DevDetail_SessionTable_Duration": "Durada",
|
||||||
|
"DevDetail_SessionTable_IP": "IP",
|
||||||
|
"DevDetail_SessionTable_Order": "Ordre",
|
||||||
|
"DevDetail_Shortcut_CurrentStatus": "Estat actual",
|
||||||
|
"DevDetail_Shortcut_DownAlerts": "",
|
||||||
|
"DevDetail_Shortcut_Presence": "Presència",
|
||||||
|
"DevDetail_Shortcut_Sessions": "Sessions",
|
||||||
|
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Detalls",
|
||||||
|
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Esdeveniments",
|
||||||
|
"DevDetail_Tab_EventsTableDate": "Data",
|
||||||
|
"DevDetail_Tab_EventsTableEvent": "Tipus d'esdeveniment",
|
||||||
|
"DevDetail_Tab_EventsTableIP": "IP",
|
||||||
|
"DevDetail_Tab_EventsTableInfo": "Informació addicional",
|
||||||
|
"DevDetail_Tab_Nmap": "<i class=\"fa fa-ethernet\"></i> Nmap",
|
||||||
|
"DevDetail_Tab_NmapEmpty": "Cap port detectat amb Nmap en aquest dispositiu.",
|
||||||
|
"DevDetail_Tab_NmapTableExtra": "Extra",
|
||||||
|
"DevDetail_Tab_NmapTableHeader": "Resultats de la exploració programada",
|
||||||
|
"DevDetail_Tab_NmapTableIndex": "Índex",
|
||||||
|
"DevDetail_Tab_NmapTablePort": "Port",
|
||||||
|
"DevDetail_Tab_NmapTableService": "Servei",
|
||||||
|
"DevDetail_Tab_NmapTableState": "Estat",
|
||||||
|
"DevDetail_Tab_NmapTableText": "Configurar un calendari a <a href=\"/settings.php#NMAP_ACTIVE\">Configuració</a>",
|
||||||
|
"DevDetail_Tab_NmapTableTime": "Temps",
|
||||||
|
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Connectors (Plugins)",
|
||||||
|
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Presència",
|
||||||
|
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sessions",
|
||||||
|
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Eines",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Description": "L'eina d'informació d'Internet mostra informació sobre la connexió a Internet, com ara adreça IP, ciutat, país, codi d'àrea i zona horària.",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Error": "S'ha produït un error",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Start": "Inici Informació d'Internet",
|
||||||
|
"DevDetail_Tab_Tools_Internet_Info_Title": "Informació d'Internet",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Description": "Nslookup és una eina de línia de comandes utilitzada per consultar el sistema de noms de domini (DNS). DNS és un sistema que tradueix noms de domini, com www.google.com, a adreces d'IP, com 172.217.0.142.",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Error": "Error: l'adreça IP no és vàlida",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Start": "Iniciar Nslookup",
|
||||||
|
"DevDetail_Tab_Tools_Nslookup_Title": "Nslookup",
|
||||||
|
"DevDetail_Tab_Tools_Speedtest_Description": "L'eina Speedtest mesura la velocitat de descàrrega, la velocitat de pujada i la latència de la connexió a Internet.",
|
||||||
|
"DevDetail_Tab_Tools_Speedtest_Start": "Iniciar Speedtest",
|
||||||
|
"DevDetail_Tab_Tools_Speedtest_Title": "Speedtest Online",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Description": "Traceroute és una ordre de diagnòstic de xarxa utilitzada per traçar el camí que els paquets de dades prenen d'un amfitrió a un altre.<br><br> L'ordre utilitza el protocol de missatges de control d'Internet (ICMP) per enviar paquets a nodes intermedis de la ruta, cada node intermedi respon amb un paquet de temps de sortida ICMP (TTL a temps).<br><br> La sortida de l'ordre traceroute mostra l'adreça IP de cada node intermedi de la ruta.<br><br> L'ordre traceroute es pot utilitzar per diagnosticar problemes de xarxa, com ara retards, pèrdua de paquets i rutes bloquejades.<br><br> També es pot utilitzar per identificar la localització d’un node intermedi en una xarxa.",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Error": "Error: l'adreça IP no és vàlida",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Start": "Inici Traceroute",
|
||||||
|
"DevDetail_Tab_Tools_Traceroute_Title": "Traceroute",
|
||||||
|
"DevDetail_Tools_WOL": "Enviar comanda WoL a ",
|
||||||
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
|
"DevDetail_Tools_WOL_noti_text": "L'ordre Wake-on-LAN s'envia a l'adreça de difusió. Si l'objectiu no és a la subxarxa/VLAN de NetAlertX, el dispositiu objectiu no respondrà.",
|
||||||
|
"DevDetail_Type_hover": "Tipus del dispositiu. Si seleccioneu qualsevol dels dispositius de xarxa predefinits (per exemple: AP, Firewall, Router, Switch...) es mostrarà a la configuració de Xarxa com a possible node de xarxa mare.",
|
||||||
|
"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_Tooltip": "Afegir una nova Icona a aquest dispositiu que encara no està disponible al desplegable.",
|
||||||
|
"DevDetail_button_Delete": "Eliminar dispositiu",
|
||||||
|
"DevDetail_button_DeleteEvents": "Eliminar Esdeveniments",
|
||||||
|
"DevDetail_button_DeleteEvents_Warning": "Estàs segur que vols eliminar tots els esdeveniments d'aquest dispositiu?<br><br>(això esborrarà la <b>Historial d'esdeveniments</b> i la <b>Sessions</b> i pot ajudar amb les notificacions constants (persistents)",
|
||||||
|
"DevDetail_button_OverwriteIcons": "Sobreescriure icones",
|
||||||
|
"DevDetail_button_OverwriteIcons_Tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu",
|
||||||
|
"DevDetail_button_OverwriteIcons_Warning": "Estàs segur que vols sobreescriure totes les icones de tots els dispositius amb el mateix tipus de dispositiu que el tipus de dispositiu actual?",
|
||||||
|
"DevDetail_button_Reset": "Restablir canvis",
|
||||||
|
"DevDetail_button_Save": "Guardar",
|
||||||
|
"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 dins el <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>.",
|
||||||
|
"Device_MultiEdit_Fields": "Editar camps:",
|
||||||
|
"Device_MultiEdit_MassActions": "Accions massives:",
|
||||||
|
"Device_MultiEdit_Tooltip": "Atenció. Si feu clic a això s'aplicarà el valor de l'esquerra a tots els dispositius seleccionats a dalt.",
|
||||||
|
"Device_Searchbox": "Cerca",
|
||||||
|
"Device_Shortcut_AllDevices": "Els meus dispositius",
|
||||||
|
"Device_Shortcut_Archived": "Arxivat",
|
||||||
|
"Device_Shortcut_Connected": "Connectat",
|
||||||
|
"Device_Shortcut_Devices": "Dispositius",
|
||||||
|
"Device_Shortcut_DownAlerts": "Aturat i Fora de línia",
|
||||||
|
"Device_Shortcut_DownOnly": "Aturat",
|
||||||
|
"Device_Shortcut_Favorites": "Favorits",
|
||||||
|
"Device_Shortcut_NewDevices": "Nous dispositius",
|
||||||
|
"Device_Shortcut_OnlineChart": "Presència de dispositius",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
|
"Device_TableHead_Connected_Devices": "Connexions",
|
||||||
|
"Device_TableHead_Favorite": "Favorit",
|
||||||
|
"Device_TableHead_FirstSession": "Primera Sessió",
|
||||||
|
"Device_TableHead_GUID": "GUID",
|
||||||
|
"Device_TableHead_Group": "Grup",
|
||||||
|
"Device_TableHead_Icon": "Icona",
|
||||||
|
"Device_TableHead_LastIP": "Darrera IP",
|
||||||
|
"Device_TableHead_LastIPOrder": "Últim Ordre d'IP",
|
||||||
|
"Device_TableHead_LastSession": "Últim Offline",
|
||||||
|
"Device_TableHead_Location": "Ubicació",
|
||||||
|
"Device_TableHead_MAC": "MAC aleatori",
|
||||||
|
"Device_TableHead_MAC_full": "MAC complet",
|
||||||
|
"Device_TableHead_Name": "Nom",
|
||||||
|
"Device_TableHead_NetworkSite": "Network Site",
|
||||||
|
"Device_TableHead_Owner": "Propietari",
|
||||||
|
"Device_TableHead_Parent_MAC": "MAC del node pare",
|
||||||
|
"Device_TableHead_Port": "Port",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
|
"Device_TableHead_RowID": "ID de fila",
|
||||||
|
"Device_TableHead_Rowid": "ID de fila",
|
||||||
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "Connector(Plugin) font",
|
||||||
|
"Device_TableHead_Status": "Estat",
|
||||||
|
"Device_TableHead_SyncHubNodeName": "Node Sync",
|
||||||
|
"Device_TableHead_Type": "Tipus",
|
||||||
|
"Device_TableHead_Vendor": "Venedor",
|
||||||
|
"Device_Table_Not_Network_Device": "No configurat com a dispositiu de xarxa",
|
||||||
|
"Device_Table_info": "Mostrant _INICI_ a_FINAL_ d'entrades_ TOTALS",
|
||||||
|
"Device_Table_nav_next": "Següent",
|
||||||
|
"Device_Table_nav_prev": "Anterior",
|
||||||
|
"Device_Tablelenght": "Veure_entrades_MENU",
|
||||||
|
"Device_Tablelenght_all": "Tot",
|
||||||
|
"Device_Title": "Dispositius",
|
||||||
|
"Donations_Others": "Altres",
|
||||||
|
"Donations_Platforms": "Plataformes patrocinadores",
|
||||||
|
"Donations_Text": "Hola 👋! </br> Gràcies per fer clic en aquest element de menú 😅 </br> </br> Estic intentant recollir algunes donacions per fer un millor programari. També, m'ajudaria per cremar-me, i així recolzar aquesta aplicació més temps. Qualsevol petit (recurrent o no) patrocini em farà posar més esforç a aquesta aplicació. </br> M'agradaria escurçar la meva setmana de feina i en el temps restant enfocar-me en el NetAlertX. Així rebries més funcionalitat, una aplicació més neta i menys bugs. </br> </br> Gràcies per llegir-ho - Agraeixo qualsevol suport ❤🙏 </br> </br> TL;DR: Pel teu suport reps: </br> </br> <ul><li>Actualitzacions regulars per seguir les vostres dades i mantenir la família segura 🔄</li><li>Menys bugs 🐛🔫</li><li>Millor i més funcionalitat➕</li><li>Que no m'arribi el \"burn out\" 🔥🤯</li><li>Menys actualitzacions d'emergència 💨</li><li>Millors documentacions📚</li><li>Suport més ràpid i millor amb les incidències 🆘</li></ul> </br> 📧Correu electrònic <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si vols contactar o si hauria d'afegir altres programes de patrocini. </br>",
|
||||||
|
"Donations_Title": "Donacions",
|
||||||
|
"ENABLE_PLUGINS_description": "Habilita la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/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)",
|
||||||
|
"Email_display_name": "Correu electrònic",
|
||||||
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
|
"Events_Loading": "Carregant ...",
|
||||||
|
"Events_Periodselect_All": "Tota la informació",
|
||||||
|
"Events_Periodselect_LastMonth": "Darrer Mes",
|
||||||
|
"Events_Periodselect_LastWeek": "Darrera setmana",
|
||||||
|
"Events_Periodselect_LastYear": "Últim Any",
|
||||||
|
"Events_Periodselect_today": "Avui",
|
||||||
|
"Events_Searchbox": "",
|
||||||
|
"Events_Shortcut_AllEvents": "Tots els esdeveniments",
|
||||||
|
"Events_Shortcut_DownAlerts": "Aturar alertes",
|
||||||
|
"Events_Shortcut_Events": "Esdeveniments",
|
||||||
|
"Events_Shortcut_MissSessions": "",
|
||||||
|
"Events_Shortcut_NewDevices": "Nous dispositius",
|
||||||
|
"Events_Shortcut_Sessions": "Sessions",
|
||||||
|
"Events_Shortcut_VoidSessions": "Sessions Anulades",
|
||||||
|
"Events_TableHead_AdditionalInfo": "Informació addicional",
|
||||||
|
"Events_TableHead_Connection": "Connexió",
|
||||||
|
"Events_TableHead_Date": "Data",
|
||||||
|
"Events_TableHead_Device": "Dispositiu",
|
||||||
|
"Events_TableHead_Disconnection": "Desconnexió",
|
||||||
|
"Events_TableHead_Duration": "Durada",
|
||||||
|
"Events_TableHead_DurationOrder": "",
|
||||||
|
"Events_TableHead_EventType": "Tipus d'esdeveniment",
|
||||||
|
"Events_TableHead_IP": "IP",
|
||||||
|
"Events_TableHead_IPOrder": "",
|
||||||
|
"Events_TableHead_Order": "",
|
||||||
|
"Events_TableHead_Owner": "Propietari",
|
||||||
|
"Events_TableHead_PendingAlert": "Alerta pendent",
|
||||||
|
"Events_Table_info": "Mostrant _INICI_ a_FINAL_ d'entrades_ TOTALS",
|
||||||
|
"Events_Table_nav_next": "Següent",
|
||||||
|
"Events_Table_nav_prev": "Anterior",
|
||||||
|
"Events_Tablelenght": "Veure_entrades_MENU",
|
||||||
|
"Events_Tablelenght_all": "Tot",
|
||||||
|
"Events_Title": "Esdeveniments",
|
||||||
|
"GRAPHQL_PORT_description": "El número de port del servidor GraphQL.",
|
||||||
|
"GRAPHQL_PORT_name": "Port GraphQL",
|
||||||
|
"Gen_Action": "Acció",
|
||||||
|
"Gen_Add": "Afegir",
|
||||||
|
"Gen_Add_All": "Afegeix tot",
|
||||||
|
"Gen_All_Devices": "Tots els dispositius",
|
||||||
|
"Gen_AreYouSure": "Estàs segur?",
|
||||||
|
"Gen_Backup": "Executar Backup",
|
||||||
|
"Gen_Cancel": "Cancel·lar",
|
||||||
|
"Gen_Change": "Canviar",
|
||||||
|
"Gen_Copy": "Executar",
|
||||||
|
"Gen_DataUpdatedUITakesTime": "D'acord - Pot passar una estona perquè la interfície d'usuari s'actualitzi si s'està executant una exploració.",
|
||||||
|
"Gen_Delete": "Esborrar",
|
||||||
|
"Gen_DeleteAll": "Esborrar tot",
|
||||||
|
"Gen_Description": "Descripció",
|
||||||
|
"Gen_Error": "Error",
|
||||||
|
"Gen_Filter": "Filtrar",
|
||||||
|
"Gen_Generate": "Generar",
|
||||||
|
"Gen_LockedDB": "ERROR - DB podria estar bloquejada - Fes servir F12 Eines desenvolupament -> Consola o provar-ho més tard.",
|
||||||
|
"Gen_Offline": "Fora de línia",
|
||||||
|
"Gen_Okay": "Ok",
|
||||||
|
"Gen_Purge": "Elimina",
|
||||||
|
"Gen_ReadDocs": "Llegit més dins el docs.",
|
||||||
|
"Gen_Remove_All": "Esborra tot",
|
||||||
|
"Gen_Remove_Last": "Esborra el darrer",
|
||||||
|
"Gen_Restore": "Executar Restaurar",
|
||||||
|
"Gen_Run": "Executar",
|
||||||
|
"Gen_Save": "Guardar",
|
||||||
|
"Gen_Saved": "Guardat",
|
||||||
|
"Gen_Search": "",
|
||||||
|
"Gen_SelectToPreview": "Seleccioneu la vista prèvia",
|
||||||
|
"Gen_Selected_Devices": "Dispositius seleccionats:",
|
||||||
|
"Gen_Switch": "Switch",
|
||||||
|
"Gen_Upd": "Actualitzat correctament",
|
||||||
|
"Gen_Upd_Fail": "Actualització fallida",
|
||||||
|
"Gen_Update": "Actualitza",
|
||||||
|
"Gen_Update_Value": "Actualitzar Valor",
|
||||||
|
"Gen_Warning": "Advertència",
|
||||||
|
"Gen_Work_In_Progress": "Work in progress, un bon moment per retroalimentació a https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
|
"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",
|
||||||
|
"HelpFAQ_Cat_Detail": "Detalls",
|
||||||
|
"HelpFAQ_Cat_Detail_300_head": "Què significa ",
|
||||||
|
"HelpFAQ_Cat_Detail_300_text_a": "significa un dispositiu de xarxa (un dispositiu del tipus AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, router, adaptador LAN USB, adaptador WIFI USB, o Internet). Els tipus personalitzats es poden afegir a través de la configuració <code>NETWORK_DEVICE_TYPES</code>.",
|
||||||
|
"HelpFAQ_Cat_Detail_300_text_b": "designa el número de port on el dispositiu que s'està editant està connectat al dispositiu de xarxa. Llegir <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\">aquesta guia</a> per a més informació.",
|
||||||
|
"HelpFAQ_Cat_Detail_301_head_a": "",
|
||||||
|
"HelpFAQ_Cat_Detail_301_head_b": " diu 1min però el gràfic mostra intervals de 5min.",
|
||||||
|
"HelpFAQ_Cat_Detail_301_text": "L'interval de temps entre les exploracions es defineix per la \"Cronjob\", que s'estableix a 5min per defecte. La denominació \"1min\" fa referència a la durada prevista de l'exploració. Segons la configuració de la xarxa, aquesta vegada pot variar. Per editar el cronjob, podeu utilitzar l'ordre següent al terminal/consol <span class=\"text-danger help_faq_code\">crontab -e</span> i canviar l'interval.",
|
||||||
|
"HelpFAQ_Cat_Detail_302_head_a": "Què significa ",
|
||||||
|
"HelpFAQ_Cat_Detail_302_head_b": "i per què no puc seleccionar això?",
|
||||||
|
"HelpFAQ_Cat_Detail_302_text": "Alguns dispositius moderns generen adreça MAC aleatòria per a raons de privacitat, ja no es poden associar amb els fabricants i canvien amb cada connexió nova. NetAlertX detecta si és aquest tipus d'adreça MAC aleatoria i activa aquest \"camp\" automàticament. Per desactivar aquesta conducta has de mirar en el vostre dispositiu com desactivar la randomització d'adreça MAC.",
|
||||||
|
"HelpFAQ_Cat_Detail_303_head": "Què és Nmap i perquè serveix?",
|
||||||
|
"HelpFAQ_Cat_Detail_303_text": "Nmap és un escàner de xarxa amb múltiples capacitats.<br> Quan un nou dispositiu apareix a la seva llista, vostè té la possibilitat d'obtenir informació més detallada sobre el dispositiu mitjançant l'exploració Nmap.",
|
||||||
|
"HelpFAQ_Cat_Device_200_head": "Tinc dispositius en la meva llista que no conec. Després de suprimir-los, sempre tornen a aparèixer.",
|
||||||
|
"HelpFAQ_Cat_Device_200_text": "Si utilitzes Pi-hole, per favor recorda que NetAlertX recupera informació des de Pi-hole. Pausa NetAlertX, ves a la pàgina de paràmetres en Pi-hole i elimina en les concessions DHCP si és necessari. També al Pi-hole, sota Eines -> Xarxa revisa si pots trobar amfitrions recurrents allà. Si n'hi ha, elimina'ls allà també. Després pots tornar a arrencar NetAlertX. Ara el(s) dispositiu(s) no hauria d'aparèixer més.",
|
||||||
|
"HelpFAQ_Cat_General": "General",
|
||||||
|
"HelpFAQ_Cat_General_100_head": "El rellotge a la part dreta superior i el temps dels esdeveniments no son correctes (diferència de temps).",
|
||||||
|
"HelpFAQ_Cat_General_100_text_a": "En el seu PC la següent zona horària s'ha establert per a l'entorn PHP:",
|
||||||
|
"HelpFAQ_Cat_General_100_text_b": "Si no és la zona horària en la qual es troba, ha de canviar la zona horària en el fitxer de configuració PHP. Podeu trobar-lo en aquest directori:",
|
||||||
|
"HelpFAQ_Cat_General_100_text_c": "Cerca en aquest fitxer per a l'entrada \"date.timezone\", traieu el líder \";\" si cal i introduïu la zona horària desitjada. Podeu trobar una llista amb les zones horàries suportades aquí (<a href=\"https://www.php.net/manual/en/timezones.php\" target=\"blank\">Link</a>)",
|
||||||
|
"HelpFAQ_Cat_General_101_head": "La meva xarxa sembla alentir, streaming es congela.",
|
||||||
|
"HelpFAQ_Cat_General_101_text": "Pot ser que els dispositius de baixa potència arribin als seus límits de rendiment per la manera que NetalertX detecta nous dispositius a la xarxa. Això s'amplifica encara més, si aquests dispositius comuniquen amb la xarxa via WLAN. Les solucions aquí serien canviar a una connexió per cable si és possible o, si el dispositiu s'utilitza per un període limitat de temps, per usar el scan arp, aturar el scan arp a la pàgina de manteniment.",
|
||||||
|
"HelpFAQ_Cat_General_102_head": "Rebo el missatge que la base de dades és només de lectura.",
|
||||||
|
"HelpFAQ_Cat_General_102_text": "Comprova dins del directori NetAlertX si la carpeta de base de dades (db) té assignats els permisos correctes:<br> <span class=\"text-danger help_faq_code\">drwxrwx--- 2 (el vostre username) www-dada</span><br> Si el permís no és correcte, el pots posar de nou amb les ordres següents en la terminal o la consola:<br> <span class=\"text-danger help_faq_code\">sudo chgrp -R www-aplicació /de dades/db<br>chmod -R 770 /aplicació/db</span><br>Si la base de dades és encara només de lectura, prova reinstal·lar o restaurar una còpia de seguretat de base de dades des de la pàgina de manteniment.",
|
||||||
|
"HelpFAQ_Cat_General_102docker_head": "Assumptes de base de dades (AJAX errors, només de lectura, no trobat)",
|
||||||
|
"HelpFAQ_Cat_General_102docker_text": "Comprova si has seguit el <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles\">dockerfile readme (informació més actual)</a>. <br/> <br/> <ul data-sourcepos=\"49:4-52:146\" dir=\"auto\"><li data-sourcepos=\"49:4-49:106\">Descarrega la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/db/app.db\"> base de dades original des de GitHub</a>.</li><li data-sourcepos=\"50:4-50:195\">Mapeja el <code>app.db</code> fitxer (<g-emoji class=\"g-emoji\" alias=\"warning\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/26a0.png\">⚠</g-emoji> not folder) des de sobre a <code>/app/db/app.db</code> (veure <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles#-examples\">Exemples</a> per detalls).</li><li data-sourcepos=\"51:4-51:161\">Si trobes problemes (AJAX errors, que no es pot escriure a DB, etc,) assegura que els permisos s'han posat correctament, alternativament comprova els registres a <code>/app/front/log</code>.</li><li data-sourcepos=\"52:4-52:146\">Per solucionar els permisos també pot intentar crear un DB còpia de seguretat i llavors executar una restauració DB via la secció <strong>Manteniment > Backup/Restaurar</strong> .</li><li data-sourcepos=\"53:4-53:228\">Si la base de dades esta en mode només de lectura, pots solucionar això configuranr el propietari i el grup amb l'ordre següent en el sistema amfitrió: <code>docker exec netalertx chown -R www-data:www-data /app/db/app.db</code>.</li></ul>",
|
||||||
|
"HelpFAQ_Cat_General_103_head": "La pàgina de login no apareix, fins i tot després de canviar la contrasenya.",
|
||||||
|
"HelpFAQ_Cat_General_103_text": "A més de la contrasenya, el fitxer de configuració ha de contenir <span class=\"text-danger help_faq_code\">/app/config/app.conf</span> també el paràmetre <span class=\"text-danger help_faq_code\">PIALERT_WEB_PROTECTION</span> i s'ha d'establir a <span class=\"text-danger help_faq_code\">True</span>.",
|
||||||
|
"HelpFAQ_Cat_Network_600_head": "Per a què serveix aquesta pàgina?",
|
||||||
|
"HelpFAQ_Cat_Network_600_text": "Aquesta pàgina t'hauria d'oferir la possibilitat de mapejar l'assignació dels vostres dispositius de xarxa. Per a aquest propòsit, pots crear un o més switch, WLANs, enrutadors, etc., proporciona'ls un número de port si és necessari i assigna'ls dispositius ja detectats. Aquesta assignació es fa dins la vista detallada del dispositiu. Així és possible determinar ràpidament a quin port s'ha connectat un host i si està en línia. Llegir <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\">aquesta guia</a> per més informació.",
|
||||||
|
"HelpFAQ_Cat_Network_601_head": "Hi ha altres documents?",
|
||||||
|
"HelpFAQ_Cat_Network_601_text": "Sí, hi ha! <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/\">tots els documents</a> per a més informació.",
|
||||||
|
"HelpFAQ_Cat_Presence_400_head": "Els dispositius són mostrats amb un marcador groc i la nota \"succés desaparegut\".",
|
||||||
|
"HelpFAQ_Cat_Presence_400_text": "Si això passa, tens l'opció d'esborrar els esdeveniments del dispositiu en qüestió (veure detalls). Una altra possibilitat seria canviar el dispositiu i esperar fins que NetAlertX detecti el dispositiu com \"en línia\" amb la següent exploració i, a continuació, simplement torneu a activar el dispositiu. NetAlert X ha de tenir en compte l'estat del dispositiu a la base de dades amb la següent exploració.",
|
||||||
|
"HelpFAQ_Cat_Presence_401_head": "Un dispositiu és mostrat tan present tot i que és Fora de línia \"\".",
|
||||||
|
"HelpFAQ_Cat_Presence_401_text": "Si això passa, tens la possibilitat d'esborrar els esdeveniments del dispositiu en qüestió (veure detalls). Una altra possibilitat seria canviar el dispositiu i esperar fins a NetAlert X reconeix el dispositiu com a \"en línia\" amb la següent exploració i, a continuació, simplement torneu a desactivar el dispositiu. NetAlert X ha de tenir en compte l'estat del dispositiu a la base de dades amb la següent exploració.",
|
||||||
|
"HelpFAQ_Title": "Ajuda / FAQ",
|
||||||
|
"LOADED_PLUGINS_description": "Quins Connectors(Plugins) carregar. Afegir connectors podria alentir l'aplicació. Llegir més sobre quins connectors necessiten estar habilitats, tipus, o opcions d'escanejar dins del <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">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 verbal. Útil per a la depuració d'esdeveniments escrivint a la base de dades.",
|
||||||
|
"LOG_LEVEL_name": "Imprimeix el registre addicional",
|
||||||
|
"Loading": "Carregant ...",
|
||||||
|
"Login_Box": "Introduïu la vostra contrasenya",
|
||||||
|
"Login_Default_PWD": "Contrasenya per defecte \"123456\" encara és activa.",
|
||||||
|
"Login_Info": "Les contrasenyes es canvien al connector(plugin) Configurar Contrasenya. Comprova el <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SETPWD docs</a> si tens dubtes fent logging.",
|
||||||
|
"Login_Psw-box": "Contrasenya",
|
||||||
|
"Login_Psw_alert": "Alerta de contrasenya!",
|
||||||
|
"Login_Psw_folder": "a la carpeta config.",
|
||||||
|
"Login_Psw_new": "new_password",
|
||||||
|
"Login_Psw_run": "Per canviar la contrasenya:",
|
||||||
|
"Login_Remember": "Recorda",
|
||||||
|
"Login_Remember_small": "(vàlid per 7 dies)",
|
||||||
|
"Login_Submit": "Inici de sessió",
|
||||||
|
"Login_Toggle_Alert_headline": "Alerta de contrasenya!",
|
||||||
|
"Login_Toggle_Info": "Informació de contrasenya",
|
||||||
|
"Login_Toggle_Info_headline": "Informació de contrasenya",
|
||||||
|
"Maint_PurgeLog": "Registre de purga",
|
||||||
|
"Maint_RestartServer": "Reinici del servidor",
|
||||||
|
"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_Running_Version": "Versió instal·lada",
|
||||||
|
"Maintenance_Status": "Estat",
|
||||||
|
"Maintenance_Title": "Eines de manteniment",
|
||||||
|
"Maintenance_Tool_ExportCSV": "CSV Exportació",
|
||||||
|
"Maintenance_Tool_ExportCSV_noti": "CSV Exportació",
|
||||||
|
"Maintenance_Tool_ExportCSV_noti_text": "Estàs segur que vols generar un fitxer CSV?",
|
||||||
|
"Maintenance_Tool_ExportCSV_text": "Genera un fitxer CSV (comma separated value) que conté la llista dels dispositius incloent les relacions de Xarxa entre Nodes i dispositius connectats. També pots disparar-ho accedint a la URL <code>el vostre NetAlertX url/php/server/devices.php?acció=ExportCSV</code> o activant el connector <a href=\"settings.php#CSVBCKP_header\">CSV Còpia de seguretat</a>.",
|
||||||
|
"Maintenance_Tool_ImportCSV": "CSV Importació",
|
||||||
|
"Maintenance_Tool_ImportCSV_noti": "CSV Importació",
|
||||||
|
"Maintenance_Tool_ImportCSV_noti_text": "Estàs segur que vols importar el fitxer CSV? Això <b> sobreescriurà</b> completament els dispositius de la seva base de dades.",
|
||||||
|
"Maintenance_Tool_ImportCSV_text": "Abans d'utilitzar aquesta funció, fes una còpia de seguretat, si us plau. Importa un CSV (comma separated value) el fitxer que conté la llista dels dispositius que inclouen les relacions de Xarxa entre Nodes i dispositius connectats. Per fer-ho col·loca el CSV el fitxer anomenat <b>devices.csv</b> a la vostra <b>/config</b> carpeta.",
|
||||||
|
"Maintenance_Tool_ImportPastedCSV": "CSV Import (Paste)",
|
||||||
|
"Maintenance_Tool_ImportPastedCSV_noti_text": "Estàs segur que vols importar el CSV copiat? Això <b> sobreescriurà</b> completament els dispositius de la base de dades.",
|
||||||
|
"Maintenance_Tool_ImportPastedCSV_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. Importar un fitxer CSV (comma separated value) que contingui la llista de dispositius, incloent les relacions de xarxa entre els nodes i els dispositius connectats.",
|
||||||
|
"Maintenance_Tool_arpscansw": "Conmuta arp-Scan (on/off)",
|
||||||
|
"Maintenance_Tool_arpscansw_noti": "Conmuta arp-Scan on or off",
|
||||||
|
"Maintenance_Tool_arpscansw_noti_text": "Quan l'escàner ha estat canviat a off es queda off fins que és activat de bell nou.",
|
||||||
|
"Maintenance_Tool_arpscansw_text": "Canviant el arp-escàner on o off. Quan el scan ha estat canviat off es queda off fins que és activat de bell nou. Els escàners actius no són anul·lats.",
|
||||||
|
"Maintenance_Tool_backup": "DB Còpia de seguretat",
|
||||||
|
"Maintenance_Tool_backup_noti": "Preguntes Freqüents - FAQ",
|
||||||
|
"Maintenance_Tool_backup_noti_text": "Estàs segur que vols executar el Backup DB? Assegura't que no hi ha exploració en funcionament.",
|
||||||
|
"Maintenance_Tool_backup_text": "Les còpies de seguretat de la base de dades es troben al directori de bases de dades com a arxiu zip, anomenat amb la data de creació. No hi ha un nombre màxim de còpies de seguretat.",
|
||||||
|
"Maintenance_Tool_check_visible": "Desmarqueu-ho per amagar la columna.",
|
||||||
|
"Maintenance_Tool_darkmode": "Canvia Modes (Fosc/Clar)",
|
||||||
|
"Maintenance_Tool_darkmode_noti": "Canvia Modes",
|
||||||
|
"Maintenance_Tool_darkmode_noti_text": "Després del canvi de tema, la pàgina intenta recarregar-se per activar el canvi. Si és necessari, s'ha de netejar la memòria cau.",
|
||||||
|
"Maintenance_Tool_darkmode_text": "Canvia entre mode fosc i mode clar. Si el canvi no funciona correctament, prova per netejar la memòria cau de navegador. El canvi té lloc en el cantó de servidor, així que afecta tots dispositius en ús.",
|
||||||
|
"Maintenance_Tool_del_ActHistory": "Eliminant l'activitat de xarxa",
|
||||||
|
"Maintenance_Tool_del_ActHistory_noti": "Eliminar l'activitat de xarxa",
|
||||||
|
"Maintenance_Tool_del_ActHistory_noti_text": "Estàs segur que vols restablir l’activitat de la xarxa?",
|
||||||
|
"Maintenance_Tool_del_ActHistory_text": "El gràfic d’activitat de la xarxa es reinicialitzarà. No afecta als esdeveniments.",
|
||||||
|
"Maintenance_Tool_del_alldev": "Eliminar tots els dispositius",
|
||||||
|
"Maintenance_Tool_del_alldev_noti": "Eliminar dispositius",
|
||||||
|
"Maintenance_Tool_del_alldev_noti_text": "Estàs segur que vols eliminar tots els dispositius?",
|
||||||
|
"Maintenance_Tool_del_alldev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius s'eliminaran de la base de dades.",
|
||||||
|
"Maintenance_Tool_del_allevents": "Suprimeix esdeveniments (Elimina presència)",
|
||||||
|
"Maintenance_Tool_del_allevents30": "Suprimeix tots els esdeveniments més vells que 30 dies",
|
||||||
|
"Maintenance_Tool_del_allevents30_noti": "Eliminar Esdeveniments",
|
||||||
|
"Maintenance_Tool_del_allevents30_noti_text": "T'és segur vols eliminar tot els successos més vells que 30 dies? Això elimina la Presencia de tots els Dispositius.",
|
||||||
|
"Maintenance_Tool_del_allevents30_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. S'eliminaran tots els esdeveniments mes vells de 30 dies a la base de dades. També es restablirà la presència de tots els dispositius. Això pot portar a sessions no vàlides. Això significa que els dispositius es mostren com a \"present\" encara que estiguin fora de línia. Una anàlisi mentre el dispositiu en qüestió està en línia resol el problema.",
|
||||||
|
"Maintenance_Tool_del_allevents_noti": "Eliminar Esdeveniments",
|
||||||
|
"Maintenance_Tool_del_allevents_noti_text": "Estàs segur que vols eliminar tots els esdeveniments? Això reinicialització Presència de tots els dispositius.",
|
||||||
|
"Maintenance_Tool_del_allevents_text": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs_noti": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_empty_macs_text": "",
|
||||||
|
"Maintenance_Tool_del_selecteddev": "",
|
||||||
|
"Maintenance_Tool_del_selecteddev_text": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev_noti": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev_noti_text": "",
|
||||||
|
"Maintenance_Tool_del_unknowndev_text": "",
|
||||||
|
"Maintenance_Tool_displayed_columns_text": "",
|
||||||
|
"Maintenance_Tool_drag_me": "",
|
||||||
|
"Maintenance_Tool_order_columns_text": "",
|
||||||
|
"Maintenance_Tool_purgebackup": "",
|
||||||
|
"Maintenance_Tool_purgebackup_noti": "",
|
||||||
|
"Maintenance_Tool_purgebackup_noti_text": "",
|
||||||
|
"Maintenance_Tool_purgebackup_text": "",
|
||||||
|
"Maintenance_Tool_restore": "",
|
||||||
|
"Maintenance_Tool_restore_noti": "",
|
||||||
|
"Maintenance_Tool_restore_noti_text": "",
|
||||||
|
"Maintenance_Tool_restore_text": "",
|
||||||
|
"Maintenance_Tool_upgrade_database_noti": "",
|
||||||
|
"Maintenance_Tool_upgrade_database_noti_text": "",
|
||||||
|
"Maintenance_Tool_upgrade_database_text": "",
|
||||||
|
"Maintenance_Tools_Tab_BackupRestore": "",
|
||||||
|
"Maintenance_Tools_Tab_Logging": "",
|
||||||
|
"Maintenance_Tools_Tab_Settings": "",
|
||||||
|
"Maintenance_Tools_Tab_Tools": "",
|
||||||
|
"Maintenance_Tools_Tab_UISettings": "",
|
||||||
|
"Maintenance_arp_status": "",
|
||||||
|
"Maintenance_arp_status_off": "",
|
||||||
|
"Maintenance_arp_status_on": "",
|
||||||
|
"Maintenance_built_on": "",
|
||||||
|
"Maintenance_current_version": "",
|
||||||
|
"Maintenance_database_backup": "",
|
||||||
|
"Maintenance_database_backup_found": "",
|
||||||
|
"Maintenance_database_backup_total": "",
|
||||||
|
"Maintenance_database_lastmod": "",
|
||||||
|
"Maintenance_database_path": "",
|
||||||
|
"Maintenance_database_rows": "",
|
||||||
|
"Maintenance_database_size": "",
|
||||||
|
"Maintenance_lang_selector_apply": "",
|
||||||
|
"Maintenance_lang_selector_empty": "",
|
||||||
|
"Maintenance_lang_selector_lable": "",
|
||||||
|
"Maintenance_lang_selector_text": "",
|
||||||
|
"Maintenance_new_version": "",
|
||||||
|
"Maintenance_themeselector_apply": "",
|
||||||
|
"Maintenance_themeselector_empty": "",
|
||||||
|
"Maintenance_themeselector_lable": "",
|
||||||
|
"Maintenance_themeselector_text": "",
|
||||||
|
"Maintenance_version": "",
|
||||||
|
"NETWORK_DEVICE_TYPES_description": "",
|
||||||
|
"NETWORK_DEVICE_TYPES_name": "",
|
||||||
|
"Navigation_About": "",
|
||||||
|
"Navigation_Devices": "",
|
||||||
|
"Navigation_Donations": "",
|
||||||
|
"Navigation_Events": "",
|
||||||
|
"Navigation_HelpFAQ": "",
|
||||||
|
"Navigation_Integrations": "",
|
||||||
|
"Navigation_Maintenance": "",
|
||||||
|
"Navigation_Monitoring": "",
|
||||||
|
"Navigation_Network": "",
|
||||||
|
"Navigation_Notifications": "",
|
||||||
|
"Navigation_Plugins": "",
|
||||||
|
"Navigation_Presence": "",
|
||||||
|
"Navigation_Report": "",
|
||||||
|
"Navigation_Settings": "",
|
||||||
|
"Navigation_SystemInfo": "",
|
||||||
|
"Navigation_Workflows": "",
|
||||||
|
"Network_Assign": "",
|
||||||
|
"Network_Cant_Assign": "",
|
||||||
|
"Network_Configuration_Error": "",
|
||||||
|
"Network_Connected": "",
|
||||||
|
"Network_ManageAdd": "",
|
||||||
|
"Network_ManageAdd_Name": "",
|
||||||
|
"Network_ManageAdd_Name_text": "",
|
||||||
|
"Network_ManageAdd_Port": "",
|
||||||
|
"Network_ManageAdd_Port_text": "",
|
||||||
|
"Network_ManageAdd_Submit": "",
|
||||||
|
"Network_ManageAdd_Type": "",
|
||||||
|
"Network_ManageAdd_Type_text": "",
|
||||||
|
"Network_ManageAssign": "",
|
||||||
|
"Network_ManageDel": "",
|
||||||
|
"Network_ManageDel_Name": "",
|
||||||
|
"Network_ManageDel_Name_text": "",
|
||||||
|
"Network_ManageDel_Submit": "",
|
||||||
|
"Network_ManageDevices": "",
|
||||||
|
"Network_ManageEdit": "",
|
||||||
|
"Network_ManageEdit_ID": "",
|
||||||
|
"Network_ManageEdit_ID_text": "",
|
||||||
|
"Network_ManageEdit_Name": "",
|
||||||
|
"Network_ManageEdit_Name_text": "",
|
||||||
|
"Network_ManageEdit_Port": "",
|
||||||
|
"Network_ManageEdit_Port_text": "",
|
||||||
|
"Network_ManageEdit_Submit": "",
|
||||||
|
"Network_ManageEdit_Type": "",
|
||||||
|
"Network_ManageEdit_Type_text": "",
|
||||||
|
"Network_ManageLeaf": "",
|
||||||
|
"Network_ManageUnassign": "",
|
||||||
|
"Network_NoAssignedDevices": "",
|
||||||
|
"Network_NoDevices": "",
|
||||||
|
"Network_Node": "",
|
||||||
|
"Network_Node_Name": "",
|
||||||
|
"Network_Parent": "",
|
||||||
|
"Network_Root": "",
|
||||||
|
"Network_Root_Not_Configured": "",
|
||||||
|
"Network_Root_Unconfigurable": "",
|
||||||
|
"Network_Table_Hostname": "",
|
||||||
|
"Network_Table_IP": "",
|
||||||
|
"Network_Table_State": "",
|
||||||
|
"Network_Title": "",
|
||||||
|
"Network_UnassignedDevices": "",
|
||||||
|
"Notifications_All": "",
|
||||||
|
"Notifications_Mark_All_Read": "",
|
||||||
|
"PIALERT_WEB_PASSWORD_description": "",
|
||||||
|
"PIALERT_WEB_PASSWORD_name": "",
|
||||||
|
"PIALERT_WEB_PROTECTION_description": "",
|
||||||
|
"PIALERT_WEB_PROTECTION_name": "",
|
||||||
|
"PLUGINS_KEEP_HIST_description": "",
|
||||||
|
"PLUGINS_KEEP_HIST_name": "",
|
||||||
|
"Plugins_DeleteAll": "",
|
||||||
|
"Plugins_Filters_Mac": "",
|
||||||
|
"Plugins_History": "",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
|
"Plugins_Objects": "",
|
||||||
|
"Plugins_Out_of": "",
|
||||||
|
"Plugins_Unprocessed_Events": "",
|
||||||
|
"Plugins_no_control": "",
|
||||||
|
"Presence_CalHead_day": "",
|
||||||
|
"Presence_CalHead_lang": "",
|
||||||
|
"Presence_CalHead_month": "",
|
||||||
|
"Presence_CalHead_quarter": "",
|
||||||
|
"Presence_CalHead_week": "",
|
||||||
|
"Presence_CalHead_year": "",
|
||||||
|
"Presence_CallHead_Devices": "",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
|
"Presence_Loading": "",
|
||||||
|
"Presence_Shortcut_AllDevices": "",
|
||||||
|
"Presence_Shortcut_Archived": "",
|
||||||
|
"Presence_Shortcut_Connected": "",
|
||||||
|
"Presence_Shortcut_Devices": "",
|
||||||
|
"Presence_Shortcut_DownAlerts": "",
|
||||||
|
"Presence_Shortcut_Favorites": "",
|
||||||
|
"Presence_Shortcut_NewDevices": "",
|
||||||
|
"Presence_Title": "",
|
||||||
|
"REPORT_DASHBOARD_URL_description": "",
|
||||||
|
"REPORT_DASHBOARD_URL_name": "",
|
||||||
|
"REPORT_ERROR": "",
|
||||||
|
"REPORT_MAIL_description": "",
|
||||||
|
"REPORT_MAIL_name": "",
|
||||||
|
"REPORT_TITLE": "",
|
||||||
|
"RandomMAC_hover": "",
|
||||||
|
"Reports_Sent_Log": "",
|
||||||
|
"SCAN_SUBNETS_description": "",
|
||||||
|
"SCAN_SUBNETS_name": "",
|
||||||
|
"SYSTEM_TITLE": "",
|
||||||
|
"Setting_Override": "",
|
||||||
|
"Setting_Override_Description": "",
|
||||||
|
"Settings_Metadata_Toggle": "",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
|
"Settings_device_Scanners_desync": "",
|
||||||
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
|
"Speedtest_Results": "",
|
||||||
|
"Systeminfo_CPU": "",
|
||||||
|
"Systeminfo_CPU_Cores": "",
|
||||||
|
"Systeminfo_CPU_Name": "",
|
||||||
|
"Systeminfo_CPU_Speed": "",
|
||||||
|
"Systeminfo_CPU_Temp": "",
|
||||||
|
"Systeminfo_CPU_Vendor": "",
|
||||||
|
"Systeminfo_Client_Resolution": "",
|
||||||
|
"Systeminfo_Client_User_Agent": "",
|
||||||
|
"Systeminfo_General": "",
|
||||||
|
"Systeminfo_General_Date": "",
|
||||||
|
"Systeminfo_General_Date2": "",
|
||||||
|
"Systeminfo_General_Full_Date": "",
|
||||||
|
"Systeminfo_General_TimeZone": "",
|
||||||
|
"Systeminfo_Memory": "",
|
||||||
|
"Systeminfo_Memory_Total_Memory": "",
|
||||||
|
"Systeminfo_Memory_Usage": "",
|
||||||
|
"Systeminfo_Memory_Usage_Percent": "",
|
||||||
|
"Systeminfo_Motherboard": "",
|
||||||
|
"Systeminfo_Motherboard_BIOS": "",
|
||||||
|
"Systeminfo_Motherboard_BIOS_Date": "",
|
||||||
|
"Systeminfo_Motherboard_BIOS_Vendor": "",
|
||||||
|
"Systeminfo_Motherboard_Manufactured": "",
|
||||||
|
"Systeminfo_Motherboard_Name": "",
|
||||||
|
"Systeminfo_Motherboard_Revision": "",
|
||||||
|
"Systeminfo_Network": "",
|
||||||
|
"Systeminfo_Network_Accept_Encoding": "",
|
||||||
|
"Systeminfo_Network_Accept_Language": "",
|
||||||
|
"Systeminfo_Network_Connection_Port": "",
|
||||||
|
"Systeminfo_Network_HTTP_Host": "",
|
||||||
|
"Systeminfo_Network_HTTP_Referer": "",
|
||||||
|
"Systeminfo_Network_HTTP_Referer_String": "",
|
||||||
|
"Systeminfo_Network_Hardware": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_Mask": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_Name": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_RX": "",
|
||||||
|
"Systeminfo_Network_Hardware_Interface_TX": "",
|
||||||
|
"Systeminfo_Network_IP": "",
|
||||||
|
"Systeminfo_Network_IP_Connection": "",
|
||||||
|
"Systeminfo_Network_IP_Server": "",
|
||||||
|
"Systeminfo_Network_MIME": "",
|
||||||
|
"Systeminfo_Network_Request_Method": "",
|
||||||
|
"Systeminfo_Network_Request_Time": "",
|
||||||
|
"Systeminfo_Network_Request_URI": "",
|
||||||
|
"Systeminfo_Network_Secure_Connection": "",
|
||||||
|
"Systeminfo_Network_Secure_Connection_String": "",
|
||||||
|
"Systeminfo_Network_Server_Name": "",
|
||||||
|
"Systeminfo_Network_Server_Name_String": "",
|
||||||
|
"Systeminfo_Network_Server_Query": "",
|
||||||
|
"Systeminfo_Network_Server_Query_String": "",
|
||||||
|
"Systeminfo_Network_Server_Version": "",
|
||||||
|
"Systeminfo_Services": "",
|
||||||
|
"Systeminfo_Services_Description": "",
|
||||||
|
"Systeminfo_Services_Name": "",
|
||||||
|
"Systeminfo_Storage": "",
|
||||||
|
"Systeminfo_Storage_Device": "",
|
||||||
|
"Systeminfo_Storage_Mount": "",
|
||||||
|
"Systeminfo_Storage_Size": "",
|
||||||
|
"Systeminfo_Storage_Type": "",
|
||||||
|
"Systeminfo_Storage_Usage": "",
|
||||||
|
"Systeminfo_Storage_Usage_Free": "",
|
||||||
|
"Systeminfo_Storage_Usage_Mount": "",
|
||||||
|
"Systeminfo_Storage_Usage_Total": "",
|
||||||
|
"Systeminfo_Storage_Usage_Used": "",
|
||||||
|
"Systeminfo_System": "",
|
||||||
|
"Systeminfo_System_AVG": "",
|
||||||
|
"Systeminfo_System_Architecture": "",
|
||||||
|
"Systeminfo_System_Kernel": "",
|
||||||
|
"Systeminfo_System_OSVersion": "",
|
||||||
|
"Systeminfo_System_Running_Processes": "",
|
||||||
|
"Systeminfo_System_System": "",
|
||||||
|
"Systeminfo_System_Uname": "",
|
||||||
|
"Systeminfo_System_Uptime": "",
|
||||||
|
"Systeminfo_This_Client": "",
|
||||||
|
"Systeminfo_USB_Devices": "",
|
||||||
|
"TICKER_MIGRATE_TO_NETALERTX": "",
|
||||||
|
"TIMEZONE_description": "",
|
||||||
|
"TIMEZONE_name": "",
|
||||||
|
"UI_DEV_SECTIONS_description": "",
|
||||||
|
"UI_DEV_SECTIONS_name": "",
|
||||||
|
"UI_ICONS_description": "",
|
||||||
|
"UI_ICONS_name": "",
|
||||||
|
"UI_LANG_description": "",
|
||||||
|
"UI_LANG_name": "",
|
||||||
|
"UI_MY_DEVICES_description": "",
|
||||||
|
"UI_MY_DEVICES_name": "",
|
||||||
|
"UI_NOT_RANDOM_MAC_description": "",
|
||||||
|
"UI_NOT_RANDOM_MAC_name": "",
|
||||||
|
"UI_PRESENCE_description": "",
|
||||||
|
"UI_PRESENCE_name": "",
|
||||||
|
"UI_REFRESH_description": "",
|
||||||
|
"UI_REFRESH_name": "",
|
||||||
|
"VERSION_description": "",
|
||||||
|
"VERSION_name": "",
|
||||||
|
"devices_old": "",
|
||||||
|
"general_event_description": "",
|
||||||
|
"general_event_title": "",
|
||||||
|
"report_guid": "",
|
||||||
|
"report_guid_missing": "",
|
||||||
|
"report_select_format": "",
|
||||||
|
"report_time": "",
|
||||||
|
"run_event_icon": "",
|
||||||
|
"run_event_tooltip": "",
|
||||||
|
"settings_core_icon": "",
|
||||||
|
"settings_core_label": "",
|
||||||
|
"settings_device_scanners": "",
|
||||||
|
"settings_device_scanners_icon": "",
|
||||||
|
"settings_device_scanners_info": "",
|
||||||
|
"settings_device_scanners_label": "",
|
||||||
|
"settings_enabled": "",
|
||||||
|
"settings_enabled_icon": "",
|
||||||
|
"settings_expand_all": "",
|
||||||
|
"settings_imported": "",
|
||||||
|
"settings_imported_label": "",
|
||||||
|
"settings_missing": "",
|
||||||
|
"settings_missing_block": "",
|
||||||
|
"settings_old": "",
|
||||||
|
"settings_other_scanners": "",
|
||||||
|
"settings_other_scanners_icon": "",
|
||||||
|
"settings_other_scanners_label": "",
|
||||||
|
"settings_publishers": "",
|
||||||
|
"settings_publishers_icon": "",
|
||||||
|
"settings_publishers_info": "",
|
||||||
|
"settings_publishers_label": "",
|
||||||
|
"settings_saved": "",
|
||||||
|
"settings_system_icon": "",
|
||||||
|
"settings_system_label": "",
|
||||||
|
"settings_update_item_warning": "",
|
||||||
|
"test_event_icon": "",
|
||||||
|
"test_event_tooltip": ""
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "",
|
"API_CUSTOM_SQL_description": "",
|
||||||
"API_CUSTOM_SQL_name": "",
|
"API_CUSTOM_SQL_name": "",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "",
|
"API_display_name": "",
|
||||||
"API_icon": "",
|
"API_icon": "",
|
||||||
"About_Design": "",
|
"About_Design": "",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "",
|
"Device_Shortcut_Favorites": "",
|
||||||
"Device_Shortcut_NewDevices": "",
|
"Device_Shortcut_NewDevices": "",
|
||||||
"Device_Shortcut_OnlineChart": "",
|
"Device_Shortcut_OnlineChart": "",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "",
|
"Device_TableHead_Connected_Devices": "",
|
||||||
"Device_TableHead_Favorite": "",
|
"Device_TableHead_Favorite": "",
|
||||||
"Device_TableHead_FirstSession": "",
|
"Device_TableHead_FirstSession": "",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "",
|
"Device_TableHead_Owner": "",
|
||||||
"Device_TableHead_Parent_MAC": "",
|
"Device_TableHead_Parent_MAC": "",
|
||||||
"Device_TableHead_Port": "",
|
"Device_TableHead_Port": "",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "",
|
"Device_TableHead_RowID": "",
|
||||||
"Device_TableHead_Rowid": "",
|
"Device_TableHead_Rowid": "",
|
||||||
"Device_TableHead_SSID": "",
|
"Device_TableHead_SSID": "",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "",
|
"Device_TableHead_Status": "",
|
||||||
"Device_TableHead_SyncHubNodeName": "",
|
"Device_TableHead_SyncHubNodeName": "",
|
||||||
"Device_TableHead_Type": "",
|
"Device_TableHead_Type": "",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "",
|
"Events_Tablelenght": "",
|
||||||
"Events_Tablelenght_all": "",
|
"Events_Tablelenght_all": "",
|
||||||
"Events_Title": "",
|
"Events_Title": "",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "",
|
"Gen_Action": "",
|
||||||
"Gen_Add": "",
|
"Gen_Add": "",
|
||||||
"Gen_Add_All": "",
|
"Gen_Add_All": "",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "",
|
"Gen_DataUpdatedUITakesTime": "",
|
||||||
"Gen_Delete": "",
|
"Gen_Delete": "",
|
||||||
"Gen_DeleteAll": "",
|
"Gen_DeleteAll": "",
|
||||||
|
"Gen_Description": "",
|
||||||
"Gen_Error": "",
|
"Gen_Error": "",
|
||||||
"Gen_Filter": "",
|
"Gen_Filter": "",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "",
|
"Gen_LockedDB": "",
|
||||||
"Gen_Offline": "",
|
"Gen_Offline": "",
|
||||||
"Gen_Okay": "",
|
"Gen_Okay": "",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "",
|
"General_icon": "",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "",
|
"HRS_TO_KEEP_NEWDEV_description": "",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "",
|
"HRS_TO_KEEP_NEWDEV_name": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "",
|
"HelpFAQ_Cat_Detail": "",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "",
|
"HelpFAQ_Cat_Detail_300_head": "",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "",
|
"HelpFAQ_Cat_Detail_300_text_a": "",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "",
|
"Loading": "",
|
||||||
"Login_Box": "",
|
"Login_Box": "",
|
||||||
"Login_Default_PWD": "",
|
"Login_Default_PWD": "",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "",
|
"Login_Psw-box": "",
|
||||||
"Login_Psw_alert": "",
|
"Login_Psw_alert": "",
|
||||||
"Login_Psw_folder": "",
|
"Login_Psw_folder": "",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "",
|
"Plugins_DeleteAll": "",
|
||||||
"Plugins_Filters_Mac": "",
|
"Plugins_Filters_Mac": "",
|
||||||
"Plugins_History": "",
|
"Plugins_History": "",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
"Plugins_Objects": "",
|
"Plugins_Objects": "",
|
||||||
"Plugins_Out_of": "",
|
"Plugins_Out_of": "",
|
||||||
"Plugins_Unprocessed_Events": "",
|
"Plugins_Unprocessed_Events": "",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "",
|
"Presence_CalHead_week": "",
|
||||||
"Presence_CalHead_year": "",
|
"Presence_CalHead_year": "",
|
||||||
"Presence_CallHead_Devices": "",
|
"Presence_CallHead_Devices": "",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "",
|
"Presence_Loading": "",
|
||||||
"Presence_Shortcut_AllDevices": "",
|
"Presence_Shortcut_AllDevices": "",
|
||||||
"Presence_Shortcut_Archived": "",
|
"Presence_Shortcut_Archived": "",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "",
|
"Setting_Override": "",
|
||||||
"Setting_Override_Description": "",
|
"Setting_Override_Description": "",
|
||||||
"Settings_Metadata_Toggle": "",
|
"Settings_Metadata_Toggle": "",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
"Settings_device_Scanners_desync": "",
|
"Settings_device_Scanners_desync": "",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "",
|
"Speedtest_Results": "",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Benutzerdefinierte SQL-Abfrage, welche eine JSON-Datei generiert und diese mit dem <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\">Dateiendpunkt <code>table_custom_endpoint.json</code></a> zur Verfügung stellt.",
|
"API_CUSTOM_SQL_description": "Benutzerdefinierte SQL-Abfrage, welche eine JSON-Datei generiert und diese mit dem <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\">Dateiendpunkt <code>table_custom_endpoint.json</code></a> zur Verfügung stellt.",
|
||||||
"API_CUSTOM_SQL_name": "Benutzerdefinierte SQL-Abfrage",
|
"API_CUSTOM_SQL_name": "Benutzerdefinierte SQL-Abfrage",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"APPRISE_HOST_description": "Apprise host URL starting with <code>http://</code> or <code>https://</code>. (do not forget to include <code>/notify</code> at the end)",
|
"APPRISE_HOST_description": "Apprise host URL starting with <code>http://</code> or <code>https://</code>. (do not forget to include <code>/notify</code> at the end)",
|
||||||
@@ -11,7 +13,7 @@
|
|||||||
"APPRISE_SIZE_name": "Max payload size",
|
"APPRISE_SIZE_name": "Max payload size",
|
||||||
"APPRISE_URL_description": "Apprise notification target URL. For example for Telegram it would be <code>tgram://{bot_token}/{chat_id}</code>.",
|
"APPRISE_URL_description": "Apprise notification target URL. For example for Telegram it would be <code>tgram://{bot_token}/{chat_id}</code>.",
|
||||||
"APPRISE_URL_name": "Apprise notification URL",
|
"APPRISE_URL_name": "Apprise notification URL",
|
||||||
"About_Design": "Designed for:",
|
"About_Design": "Entworfen für:",
|
||||||
"About_Exit": "Abmelden",
|
"About_Exit": "Abmelden",
|
||||||
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
|
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
|
||||||
"AppEvents_DateTimeCreated": "protokolliert",
|
"AppEvents_DateTimeCreated": "protokolliert",
|
||||||
@@ -27,53 +29,53 @@
|
|||||||
"AppEvents_ObjectPlugin": "Verknüpfte Plugins",
|
"AppEvents_ObjectPlugin": "Verknüpfte Plugins",
|
||||||
"AppEvents_ObjectPrimaryID": "Primär ID",
|
"AppEvents_ObjectPrimaryID": "Primär ID",
|
||||||
"AppEvents_ObjectSecondaryID": "Sekundär ID",
|
"AppEvents_ObjectSecondaryID": "Sekundär ID",
|
||||||
"AppEvents_ObjectStatus": "",
|
"AppEvents_ObjectStatus": "Status (zum Log-Zeitpunkt)",
|
||||||
"AppEvents_ObjectStatusColumn": "Statusspalte",
|
"AppEvents_ObjectStatusColumn": "Statusspalte",
|
||||||
"AppEvents_ObjectType": "Objekttyp",
|
"AppEvents_ObjectType": "Objekttyp",
|
||||||
"AppEvents_Plugin": "Plugin",
|
"AppEvents_Plugin": "Plugin",
|
||||||
"AppEvents_Type": "Typ",
|
"AppEvents_Type": "Typ",
|
||||||
"Apprise_display_name": "Apprise",
|
"Apprise_display_name": "Apprise",
|
||||||
"Apprise_icon": "<i class=\"fa fa-bullhorn\"></i>",
|
"Apprise_icon": "<i class=\"fa fa-bullhorn\"></i>",
|
||||||
"BackDevDetail_Actions_Ask_Run": "Do you want to execute the action?",
|
"BackDevDetail_Actions_Ask_Run": "Möchtest du die Aktion ausführen?",
|
||||||
"BackDevDetail_Actions_Not_Registered": "Action not registered: ",
|
"BackDevDetail_Actions_Not_Registered": "Aktion nicht registriert: ",
|
||||||
"BackDevDetail_Actions_Title_Run": "Run action",
|
"BackDevDetail_Actions_Title_Run": "Aktion ausführen",
|
||||||
"BackDevDetail_Copy_Ask": "Copy details from device from the dropdown list (Everything on this page will be overwritten)?",
|
"BackDevDetail_Copy_Ask": "Details vom Gerät aus der Dropdown-Liste kopieren (alles auf dieser Seite wird überschrieben)?",
|
||||||
"BackDevDetail_Copy_Title": "Copy details",
|
"BackDevDetail_Copy_Title": "Details kopieren",
|
||||||
"BackDevDetail_Tools_WOL_error": "Befehl wurde NICHT ausgeführt.",
|
"BackDevDetail_Tools_WOL_error": "Befehl wurde NICHT ausgeführt.",
|
||||||
"BackDevDetail_Tools_WOL_okay": "Befehl wurde ausgeführt.",
|
"BackDevDetail_Tools_WOL_okay": "Der Befehl wurde ausgeführt.",
|
||||||
"BackDevices_Arpscan_disabled": "Automatischer Arp-Scan deaktiviert.",
|
"BackDevices_Arpscan_disabled": "Arp-Scan deaktiviert",
|
||||||
"BackDevices_Arpscan_enabled": "Automatischer Arp-Scan aktiviert.",
|
"BackDevices_Arpscan_enabled": "Arp-Scan aktiviert",
|
||||||
"BackDevices_Backup_CopError": "Die originale Datenbank konnte nicht gesichert werden.",
|
"BackDevices_Backup_CopError": "Die originale Datenbank konnte nicht gesichert werden.",
|
||||||
"BackDevices_Backup_Failed": "Das Backup wurde teilweise ausgeführt. Das Archiv ist entweder leer oder nicht vorhanden.",
|
"BackDevices_Backup_Failed": "Das Backup wurde teilweise ausgeführt. Das Archiv ist entweder leer oder nicht vorhanden.",
|
||||||
"BackDevices_Backup_okay": "Das Backup wurde erfolgreich beendet.",
|
"BackDevices_Backup_okay": "Die Sicherung wurde erfolgreich mit dem neuen Archiv ausgeführt",
|
||||||
"BackDevices_DBTools_DelActHistory": "Die Anzeige der Netzwerkaktivität wurde zurückgesetzt.",
|
"BackDevices_DBTools_DelActHistory": "Die Anzeige der Netzwerkaktivität wurde zurückgesetzt.",
|
||||||
"BackDevices_DBTools_DelActHistoryError": "Fehler beim Zurücksetzen der Netzwerkaktivitätsanzeige.",
|
"BackDevices_DBTools_DelActHistoryError": "Fehler beim Zurücksetzen der Netzwerkaktivitätsanzeige.",
|
||||||
"BackDevices_DBTools_DelDevError_a": "Fehler beim Löschen des Gerätes.",
|
"BackDevices_DBTools_DelDevError_a": "Fehler beim Löschen des Gerätes",
|
||||||
"BackDevices_DBTools_DelDevError_b": "Fehler beim Löschen der Geräte.",
|
"BackDevices_DBTools_DelDevError_b": "Fehler beim Löschen der Geräte",
|
||||||
"BackDevices_DBTools_DelDev_a": "Gerät gelöscht.",
|
"BackDevices_DBTools_DelDev_a": "Gerät wurde gelöscht",
|
||||||
"BackDevices_DBTools_DelDev_b": "Geräte gelöscht.",
|
"BackDevices_DBTools_DelDev_b": "Geräte wurden gelöscht",
|
||||||
"BackDevices_DBTools_DelEvents": "Events gelöscht.",
|
"BackDevices_DBTools_DelEvents": "Events wurden gelöscht",
|
||||||
"BackDevices_DBTools_DelEventsError": "Fehler beim Löschen der Ereignisse.",
|
"BackDevices_DBTools_DelEventsError": "Fehler beim Löschen der Ereignisse",
|
||||||
"BackDevices_DBTools_ImportCSV": "Die Geräte aus der CSV-Datei wurden erfolgreich importiert.",
|
"BackDevices_DBTools_ImportCSV": "Die Geräte aus der CSV-Datei wurden erfolgreich importiert.",
|
||||||
"BackDevices_DBTools_ImportCSVError": "Die CSV-Datei konnte nicht importiert werden. Stellen Sie sicher, dass das Format korrekt ist.",
|
"BackDevices_DBTools_ImportCSVError": "Die CSV-Datei konnte nicht importiert werden. Stellen Sie sicher, dass das Format korrekt ist.",
|
||||||
"BackDevices_DBTools_ImportCSVMissing": "Die CSV-Datei konnte nicht in <b>/config/devices.csv</b> gefunden werden.",
|
"BackDevices_DBTools_ImportCSVMissing": "Die CSV-Datei konnte nicht in <b>/config/devices.csv</b> gefunden werden.",
|
||||||
"BackDevices_DBTools_Purge": "Die ältesten Backups wurden gelöscht.",
|
"BackDevices_DBTools_Purge": "Die ältesten Backups wurden gelöscht",
|
||||||
"BackDevices_DBTools_UpdDev": "Gerät erfolgreich aktualisiert.",
|
"BackDevices_DBTools_UpdDev": "Gerät wurde erfolgreich aktualisiert",
|
||||||
"BackDevices_DBTools_UpdDevError": "Fehler beim Aktualisieren des Gerätes.",
|
"BackDevices_DBTools_UpdDevError": "Fehler beim Aktualisieren des Gerätes",
|
||||||
"BackDevices_DBTools_Upgrade": "Datenbank erfolgreich aktualisiert.",
|
"BackDevices_DBTools_Upgrade": "Datenbank wurde erfolgreich aktualisiert",
|
||||||
"BackDevices_DBTools_UpgradeError": "Fehler beim Aktualisieren der Datenbank.",
|
"BackDevices_DBTools_UpgradeError": "Fehler beim Aktualisieren der Datenbank",
|
||||||
"BackDevices_Device_UpdDevError": "Konnte Geräte nicht aktualisieren, versuchen Sie es später erneut. Die Datenbank ist wahrscheinlich wegen einer laufenden Aufgabe gesperrt.",
|
"BackDevices_Device_UpdDevError": "Konnte Geräte nicht aktualisieren, versuchen Sie es später erneut. Die Datenbank ist wahrscheinlich wegen einer laufenden Aufgabe gesperrt.",
|
||||||
"BackDevices_Restore_CopError": "Die originale Datenbank konnte nicht kopiert werden.",
|
"BackDevices_Restore_CopError": "Die originale Datenbank konnte nicht kopiert werden.",
|
||||||
"BackDevices_Restore_Failed": "Die Wiederherstellung ist fehlgeschlagen. Stellen Sie das Backup manuell her.",
|
"BackDevices_Restore_Failed": "Die Wiederherstellung ist fehlgeschlagen. Stellen Sie das Backup manuell her.",
|
||||||
"BackDevices_Restore_okay": "Die Wiederherstellung wurde erfolgreich ausgeführt.",
|
"BackDevices_Restore_okay": "Die Wiederherstellung wurde erfolgreich ausgeführt.",
|
||||||
"BackDevices_darkmode_disabled": "Heller Modus aktiviert.",
|
"BackDevices_darkmode_disabled": "Heller Modus aktiviert",
|
||||||
"BackDevices_darkmode_enabled": "Dunkler Modus aktiviert.",
|
"BackDevices_darkmode_enabled": "Dunkler Modus aktiviert",
|
||||||
"CLEAR_NEW_FLAG_description": "",
|
"CLEAR_NEW_FLAG_description": "",
|
||||||
"CLEAR_NEW_FLAG_name": "",
|
"CLEAR_NEW_FLAG_name": "Neues Flag löschen",
|
||||||
"DAYS_TO_KEEP_EVENTS_description": "Dies ist eine Wartungseinstellung. Spezifiziert wie viele Tage Events gespeichert bleiben. Alle älteren Events werden periodisch gelöscht. Wird auch auf die Plugins History angewendet.",
|
"DAYS_TO_KEEP_EVENTS_description": "Dies ist eine Wartungseinstellung. Spezifiziert wie viele Tage Events gespeichert bleiben. Alle älteren Events werden periodisch gelöscht. Wird auch auf die Plugins History angewendet.",
|
||||||
"DAYS_TO_KEEP_EVENTS_name": "Lösche Events älter als",
|
"DAYS_TO_KEEP_EVENTS_name": "Lösche Events älter als",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Details von Gerät kopieren",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Details von Gerät kopieren",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copy details from device from the dropdown list. Everything on this page will be overwritten",
|
"DevDetail_Copy_Device_Tooltip": "Details vom Gerät aus der Dropdown-Liste kopieren. Alles auf dieser Seite wird überschrieben",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Melde alle Ereignisse",
|
"DevDetail_EveandAl_AlertAllEvents": "Melde alle Ereignisse",
|
||||||
"DevDetail_EveandAl_AlertDown": "Melde Down",
|
"DevDetail_EveandAl_AlertDown": "Melde Down",
|
||||||
"DevDetail_EveandAl_Archived": "Archivierung",
|
"DevDetail_EveandAl_Archived": "Archivierung",
|
||||||
@@ -86,9 +88,9 @@
|
|||||||
"DevDetail_EveandAl_Skip": "pausiere wiederhol. Meldungen für",
|
"DevDetail_EveandAl_Skip": "pausiere wiederhol. Meldungen für",
|
||||||
"DevDetail_EveandAl_Title": "Ereignisse & Alarme einstellen",
|
"DevDetail_EveandAl_Title": "Ereignisse & Alarme einstellen",
|
||||||
"DevDetail_Events_CheckBox": "Blende Verbindungs-Ereignisse aus",
|
"DevDetail_Events_CheckBox": "Blende Verbindungs-Ereignisse aus",
|
||||||
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
"DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.",
|
||||||
"DevDetail_Icon": "Icon",
|
"DevDetail_Icon": "Icon",
|
||||||
"DevDetail_Icon_Descr": "Enter a font awesome icon name without the fa- prefix or with complete class, e.g.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "",
|
||||||
"DevDetail_Loading": "Laden ...",
|
"DevDetail_Loading": "Laden ...",
|
||||||
"DevDetail_MainInfo_Comments": "Notiz",
|
"DevDetail_MainInfo_Comments": "Notiz",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorit",
|
"DevDetail_MainInfo_Favorite": "Favorit",
|
||||||
@@ -97,7 +99,7 @@
|
|||||||
"DevDetail_MainInfo_Name": "Name",
|
"DevDetail_MainInfo_Name": "Name",
|
||||||
"DevDetail_MainInfo_Network": "<i class=\"fa fa-server\"></i> Knoten (MAC)",
|
"DevDetail_MainInfo_Network": "<i class=\"fa fa-server\"></i> Knoten (MAC)",
|
||||||
"DevDetail_MainInfo_Network_Port": "<i class=\"fa fa-ethernet\"></i> Port",
|
"DevDetail_MainInfo_Network_Port": "<i class=\"fa fa-ethernet\"></i> Port",
|
||||||
"DevDetail_MainInfo_Network_Site": "",
|
"DevDetail_MainInfo_Network_Site": "Seite",
|
||||||
"DevDetail_MainInfo_Network_Title": "<i class=\"fa fa-network-wired\"></i> Network",
|
"DevDetail_MainInfo_Network_Title": "<i class=\"fa fa-network-wired\"></i> Network",
|
||||||
"DevDetail_MainInfo_Owner": "Eigen­tümer",
|
"DevDetail_MainInfo_Owner": "Eigen­tümer",
|
||||||
"DevDetail_MainInfo_SSID": "SSID",
|
"DevDetail_MainInfo_SSID": "SSID",
|
||||||
@@ -106,9 +108,9 @@
|
|||||||
"DevDetail_MainInfo_Vendor": "Hersteller",
|
"DevDetail_MainInfo_Vendor": "Hersteller",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
"DevDetail_Network_Node_hover": "Wählen Sie das Elternnetzgerät aus, an das das aktuelle Gerät angeschlossen ist, um den Netzwerkbaum zu erstellen.",
|
"DevDetail_Network_Node_hover": "Wählen Sie das Elternnetzgerät aus, an das das aktuelle Gerät angeschlossen ist, um den Netzwerkbaum zu erstellen.",
|
||||||
"DevDetail_Network_Port_hover": "The port this device is connected to on the parent network device. If left empty a wifi icon is displayed in the Network tree.",
|
"DevDetail_Network_Port_hover": "Der Port, mit dem dieses Gerät am übergeordneten Netzwerkgerät verbunden ist. Bleibt er leer, wird ein WLAN-Symbol in der Netzwerkstruktur angezeigt.",
|
||||||
"DevDetail_Nmap_Scans": "Nmap Scans",
|
"DevDetail_Nmap_Scans": "Nmap Scans",
|
||||||
"DevDetail_Nmap_Scans_desc": "Hier kannst du manuelle NMAP Scans starten. Reguläre automatische NMAP Scans können mit dem Services & Ports (NMAP) Plugin geplant werden. Gehe zu den <a href='/settings.php' target='_blank'>Einstellungen</a> um mehr herauszufinden.",
|
"DevDetail_Nmap_Scans_desc": "Hier kannst du manuelle NMAP Scans starten. Reguläre automatische NMAP Scans können mit dem Services & Ports (NMAP) Plugin geplant werden. Gehe zu den <a href='/settings.php' target='_blank'>Einstellungen</a> um erfahren",
|
||||||
"DevDetail_Nmap_buttonDefault": "Standard Scan",
|
"DevDetail_Nmap_buttonDefault": "Standard Scan",
|
||||||
"DevDetail_Nmap_buttonDefault_text": "Standard Scan: Nmap scannt die ersten 1.000 Ports für jedes angeforderte Scan-Protokoll. Damit werden etwa 93 % der TCP-Ports und 49 % der UDP-Ports erfasst. (ca. 5-10 Sekunden)",
|
"DevDetail_Nmap_buttonDefault_text": "Standard Scan: Nmap scannt die ersten 1.000 Ports für jedes angeforderte Scan-Protokoll. Damit werden etwa 93 % der TCP-Ports und 49 % der UDP-Ports erfasst. (ca. 5-10 Sekunden)",
|
||||||
"DevDetail_Nmap_buttonDetail": "Detailierter Scan",
|
"DevDetail_Nmap_buttonDetail": "Detailierter Scan",
|
||||||
@@ -116,7 +118,7 @@
|
|||||||
"DevDetail_Nmap_buttonFast": "Schneller Scan",
|
"DevDetail_Nmap_buttonFast": "Schneller Scan",
|
||||||
"DevDetail_Nmap_buttonFast_text": "Schneller Scan: Überprüft nur die wichtigsten 100 Ports (wenige Sekunden)",
|
"DevDetail_Nmap_buttonFast_text": "Schneller Scan: Überprüft nur die wichtigsten 100 Ports (wenige Sekunden)",
|
||||||
"DevDetail_Nmap_buttonSkipDiscovery": "Ohne Erreichbarkeitsprüfung",
|
"DevDetail_Nmap_buttonSkipDiscovery": "Ohne Erreichbarkeitsprüfung",
|
||||||
"DevDetail_Nmap_buttonSkipDiscovery_text": "Ohne Erreichbarkeitsprüfung (-Pn Parameter): Standard Scan bei dem nmap annimmt, dass der Host erreichbar ist.",
|
"DevDetail_Nmap_buttonSkipDiscovery_text": "Ohne Erreichbarkeitsprüfung (-Pn Parameter): Standard Scan, bei dem nmap annimmt, dass der Host erreichbar ist",
|
||||||
"DevDetail_Nmap_resultsLink": "Nachdem ein Scan gestartet wurde, kann diese Seite verlassen werden. Resultate sind auch in der Datei <code>app_front.log</code> verfügbar.",
|
"DevDetail_Nmap_resultsLink": "Nachdem ein Scan gestartet wurde, kann diese Seite verlassen werden. Resultate sind auch in der Datei <code>app_front.log</code> verfügbar.",
|
||||||
"DevDetail_Owner_hover": "Der Eigentümer des Gerätes. Freies Textfeld.",
|
"DevDetail_Owner_hover": "Der Eigentümer des Gerätes. Freies Textfeld.",
|
||||||
"DevDetail_Periodselect_All": "Alle Infos",
|
"DevDetail_Periodselect_All": "Alle Infos",
|
||||||
@@ -137,7 +139,7 @@
|
|||||||
"DevDetail_SessionTable_Disconnection": "Trennung",
|
"DevDetail_SessionTable_Disconnection": "Trennung",
|
||||||
"DevDetail_SessionTable_Duration": "Dauer",
|
"DevDetail_SessionTable_Duration": "Dauer",
|
||||||
"DevDetail_SessionTable_IP": "IP",
|
"DevDetail_SessionTable_IP": "IP",
|
||||||
"DevDetail_SessionTable_Order": "Order",
|
"DevDetail_SessionTable_Order": "Reihenfolge",
|
||||||
"DevDetail_Shortcut_CurrentStatus": "aktueller Status",
|
"DevDetail_Shortcut_CurrentStatus": "aktueller Status",
|
||||||
"DevDetail_Shortcut_DownAlerts": "Down Meldungen",
|
"DevDetail_Shortcut_DownAlerts": "Down Meldungen",
|
||||||
"DevDetail_Shortcut_Presence": "Anwesenheit",
|
"DevDetail_Shortcut_Presence": "Anwesenheit",
|
||||||
@@ -161,12 +163,12 @@
|
|||||||
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins",
|
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins",
|
||||||
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Anwesenheit",
|
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Anwesenheit",
|
||||||
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sitzungen",
|
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sitzungen",
|
||||||
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Tools",
|
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Werkzeuge",
|
||||||
"DevDetail_Tab_Tools_Internet_Info_Description": "Das Internet-Info-Tool zeigt Informationen über die Internetverbindung an, wie z. B. IP-Adresse, Stadt, Land, Ortsvorwahl und Zeitzone.",
|
"DevDetail_Tab_Tools_Internet_Info_Description": "Das Internet-Info-Tool zeigt Informationen über die Internetverbindung an, wie z. B. IP-Adresse, Stadt, Land, Ortsvorwahl und Zeitzone.",
|
||||||
"DevDetail_Tab_Tools_Internet_Info_Error": "Es ist ein Fehler aufgetreten",
|
"DevDetail_Tab_Tools_Internet_Info_Error": "Es ist ein Fehler aufgetreten",
|
||||||
"DevDetail_Tab_Tools_Internet_Info_Start": "Internet-Info starten",
|
"DevDetail_Tab_Tools_Internet_Info_Start": "Internet-Info starten",
|
||||||
"DevDetail_Tab_Tools_Internet_Info_Title": "Internetinformationen",
|
"DevDetail_Tab_Tools_Internet_Info_Title": "Internetinformationen",
|
||||||
"DevDetail_Tab_Tools_Nslookup_Description": "Nslookup ist ein Befehlszeilentool zur Abfrage des Domain Name System (DNS). DNS ist ein System, das Domainnamen wie www.google.com in IP-Adressen wie 172.217.0.142 übersetzt. ",
|
"DevDetail_Tab_Tools_Nslookup_Description": "Nslookup ist ein Befehlszeilentool zur Abfrage des Domain Name System (DNS). DNS ist ein System, das Domainnamen wie www.google.com in IP-Adressen wie 172.217.0.142 übersetzt.",
|
||||||
"DevDetail_Tab_Tools_Nslookup_Error": "Fehler: IP-Adresse ist ungültig",
|
"DevDetail_Tab_Tools_Nslookup_Error": "Fehler: IP-Adresse ist ungültig",
|
||||||
"DevDetail_Tab_Tools_Nslookup_Start": "Nslookup starten",
|
"DevDetail_Tab_Tools_Nslookup_Start": "Nslookup starten",
|
||||||
"DevDetail_Tab_Tools_Nslookup_Title": "Nslookup",
|
"DevDetail_Tab_Tools_Nslookup_Title": "Nslookup",
|
||||||
@@ -181,24 +183,24 @@
|
|||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "Der Wake-on-LAN Befehl wurde and die Broadcast Adresse gesendet. Wenn sich das zu startende Gerät nicht im gleichen Subnet / VLan wie NetAlertX befindet, wird das Gerät nicht reagieren.",
|
"DevDetail_Tools_WOL_noti_text": "Der Wake-on-LAN Befehl wurde and die Broadcast Adresse gesendet. Wenn sich das zu startende Gerät nicht im gleichen Subnet / VLan wie NetAlertX befindet, wird das Gerät nicht reagieren.",
|
||||||
"DevDetail_Type_hover": "Der Type des Gerätes. If you select any of the pre-defined network devices (e.g.: AP, Firewall, Router, Switch...) they will show up in the Network tree configuration as possible parent network nodes.",
|
"DevDetail_Type_hover": "Der Type des Gerätes. If you select any of the pre-defined network devices (e.g.: AP, Firewall, Router, Switch...) they will show up in the Network tree configuration as possible parent network nodes.",
|
||||||
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
"DevDetail_Vendor_hover": "Der Anbieter sollte automatisch erkannt werden. Du kannst den Wert überschreiben oder deinen eigenen Wert hinzufügen.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Neues Symbol Hinzufügen",
|
"DevDetail_button_AddIcon": "Neues Symbol Hinzufügen",
|
||||||
"DevDetail_button_AddIcon_Help": "Füge ein HTML SVG Tag oder Font Awesome HTML Tag ein. Siehe <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icon Dokumentation</a> für details.",
|
"DevDetail_button_AddIcon_Help": "Füge ein HTML SVG Tag oder Font Awesome HTML Tag ein. Siehe <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icon Dokumentation</a> für details.",
|
||||||
"DevDetail_button_AddIcon_Tooltip": "Neues Icon zu diesem Gerät hinzufügen, welches es noch nicht im dropdown gibt.",
|
"DevDetail_button_AddIcon_Tooltip": "Neues Icon zu diesem Gerät hinzufügen, welches es noch nicht im dropdown gibt.",
|
||||||
"DevDetail_button_Delete": "Lösche Gerät",
|
"DevDetail_button_Delete": "Gerät löschen",
|
||||||
"DevDetail_button_DeleteEvents": "Lösche Events",
|
"DevDetail_button_DeleteEvents": "Ereignisse löschen",
|
||||||
"DevDetail_button_DeleteEvents_Warning": "Sind Sie sicher, dass Sie alle Ereignisse dieses Geräts löschen möchten? (dies löscht den Ereignisverlauf und die Sitzungen und könnte bei ständigen (anhaltenden) Benachrichtigungen helfen)",
|
"DevDetail_button_DeleteEvents_Warning": "Sind Sie sicher, dass Sie alle Ereignisse dieses Geräts löschen möchten? (dies löscht den Ereignisverlauf und die Sitzungen und könnte bei ständigen (anhaltenden) Benachrichtigungen helfen)",
|
||||||
"DevDetail_button_OverwriteIcons": "Overwrite Icons",
|
"DevDetail_button_OverwriteIcons": "Symbole überschreiben",
|
||||||
"DevDetail_button_OverwriteIcons_Tooltip": "Overwrite icons of all devices with the same device type",
|
"DevDetail_button_OverwriteIcons_Tooltip": "Symbole aller Geräte mit demselben Gerätetyp überschreiben",
|
||||||
"DevDetail_button_OverwriteIcons_Warning": "Are you sure you want to overwrite all icons of all devices with the same device type as the current device type?",
|
"DevDetail_button_OverwriteIcons_Warning": "Bist du sicher, dass du alle Symbole aller Geräte mit dem gleichen Gerätetyp wie dem aktuellen Gerätetyp überschreiben willst?",
|
||||||
"DevDetail_button_Reset": "Verwerfen",
|
"DevDetail_button_Reset": "Verwerfen",
|
||||||
"DevDetail_button_Save": "Speichern",
|
"DevDetail_button_Save": "Speichern",
|
||||||
"Device_MultiEdit": "Mehrfach-bearbeiten",
|
"Device_MultiEdit": "Mehrfach-bearbeiten",
|
||||||
"Device_MultiEdit_Backup": "",
|
"Device_MultiEdit_Backup": "",
|
||||||
"Device_MultiEdit_Fields": "Felder bearbeiten:",
|
"Device_MultiEdit_Fields": "Felder bearbeiten:",
|
||||||
"Device_MultiEdit_MassActions": "Massen aktionen:",
|
"Device_MultiEdit_MassActions": "Massen aktionen:",
|
||||||
"Device_MultiEdit_Tooltip": "",
|
"Device_MultiEdit_Tooltip": "Achtung! Beim Drücken werden alle Werte auf die oben ausgewählten Geräte übertragen.",
|
||||||
"Device_Searchbox": "Suche",
|
"Device_Searchbox": "Suche",
|
||||||
"Device_Shortcut_AllDevices": "Meine Geräte",
|
"Device_Shortcut_AllDevices": "Meine Geräte",
|
||||||
"Device_Shortcut_Archived": "Archiviert",
|
"Device_Shortcut_Archived": "Archiviert",
|
||||||
@@ -209,26 +211,29 @@
|
|||||||
"Device_Shortcut_Favorites": "Favoriten",
|
"Device_Shortcut_Favorites": "Favoriten",
|
||||||
"Device_Shortcut_NewDevices": "Neue Geräte",
|
"Device_Shortcut_NewDevices": "Neue Geräte",
|
||||||
"Device_Shortcut_OnlineChart": "Gerätepräsenz im Laufe der Zeit",
|
"Device_Shortcut_OnlineChart": "Gerätepräsenz im Laufe der Zeit",
|
||||||
"Device_TableHead_Connected_Devices": "Verbundene Geräte",
|
"Device_TableHead_AlertDown": "",
|
||||||
|
"Device_TableHead_Connected_Devices": "Verbindungen",
|
||||||
"Device_TableHead_Favorite": "Favorit",
|
"Device_TableHead_Favorite": "Favorit",
|
||||||
"Device_TableHead_FirstSession": "Erste Sitzung",
|
"Device_TableHead_FirstSession": "Erste Sitzung",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
"Device_TableHead_Group": "Gruppe",
|
"Device_TableHead_Group": "Gruppe",
|
||||||
"Device_TableHead_Icon": "Icon",
|
"Device_TableHead_Icon": "Icon",
|
||||||
"Device_TableHead_LastIP": "Letzte IP",
|
"Device_TableHead_LastIP": "Letzte IP",
|
||||||
"Device_TableHead_LastIPOrder": "Last IP Order",
|
"Device_TableHead_LastIPOrder": "Letzte erhaltene IP",
|
||||||
"Device_TableHead_LastSession": "Zuletzt offline",
|
"Device_TableHead_LastSession": "Zuletzt offline",
|
||||||
"Device_TableHead_Location": "Standort",
|
"Device_TableHead_Location": "Standort",
|
||||||
"Device_TableHead_MAC": "MAC",
|
"Device_TableHead_MAC": "Zufälliger MAC",
|
||||||
"Device_TableHead_MAC_full": "Gesamte MAC",
|
"Device_TableHead_MAC_full": "Gesamte MAC",
|
||||||
"Device_TableHead_Name": "Name",
|
"Device_TableHead_Name": "Name",
|
||||||
"Device_TableHead_NetworkSite": "",
|
"Device_TableHead_NetworkSite": "Netzwerkseite",
|
||||||
"Device_TableHead_Owner": "Eigentümer",
|
"Device_TableHead_Owner": "Eigentümer",
|
||||||
"Device_TableHead_Parent_MAC": "Übergeordnete MAC",
|
"Device_TableHead_Parent_MAC": "Übergeordnete MAC",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "Zeilen ID",
|
"Device_TableHead_RowID": "Zeilen ID",
|
||||||
"Device_TableHead_Rowid": "Zeilennummer",
|
"Device_TableHead_Rowid": "Zeilennummer",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "Status",
|
"Device_TableHead_Status": "Status",
|
||||||
"Device_TableHead_SyncHubNodeName": "Synchronisationsknoten",
|
"Device_TableHead_SyncHubNodeName": "Synchronisationsknoten",
|
||||||
"Device_TableHead_Type": "Typ",
|
"Device_TableHead_Type": "Typ",
|
||||||
@@ -240,10 +245,10 @@
|
|||||||
"Device_Tablelenght": "Zeige _MENU_ Einträge",
|
"Device_Tablelenght": "Zeige _MENU_ Einträge",
|
||||||
"Device_Tablelenght_all": "Alle",
|
"Device_Tablelenght_all": "Alle",
|
||||||
"Device_Title": "Geräte",
|
"Device_Title": "Geräte",
|
||||||
"Donations_Others": "Others",
|
"Donations_Others": "Andere",
|
||||||
"Donations_Platforms": "Sponsor platforms",
|
"Donations_Platforms": "Sponsor-Platformen",
|
||||||
"Donations_Text": "Hey 👋! </br> Thanks for clicking on this menu item 😅 </br> </br> I'm trying to collect some donations to make you better software. Also, it would help me not to get burned out. Me burning out might mean end of support for this app. Any small (recurring or not) sponsorship makes me want ot put more effort into this app. I don't want to lock features (new plugins) behind paywalls 🔐. </br> Currently, I'm waking up 2h before work so I contribute to the app a bit. If I had some recurring income I could shorten my workweek and in the remaining time fully focus on NetAlertX. You'd get more functionality, a more polished app and less bugs. </br> </br> Thanks for reading - I'm super grateful for any support ❤🙏 </br> </br> TL;DR: By supporting me you get: </br> </br> <ul><li>Regular updates to keep your data and family safe 🔄</li><li>Less bugs 🐛🔫</li><li>Better and more functionality➕</li><li>I don't get burned out 🔥🤯</li><li>Less rushed releases 💨</li><li>Better docs📚</li><li>Quicker and better support with issues 🆘</li><li>Less grumpy me 😄</li></ul> </br> 📧Email me to <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> if you want to get in touch or if I should add other sponsorship platforms. </br>",
|
"Donations_Text": "Hey 👋! </br> Thanks for clicking on this menu item 😅 </br> </br> I'm trying to collect some donations to make you better software. Also, it would help me not to get burned out. Me burning out might mean end of support for this app. Any small (recurring or not) sponsorship makes me want ot put more effort into this app. I don't want to lock features (new plugins) behind paywalls 🔐. </br> Currently, I'm waking up 2h before work so I contribute to the app a bit. If I had some recurring income I could shorten my workweek and in the remaining time fully focus on NetAlertX. You'd get more functionality, a more polished app and less bugs. </br> </br> Thanks for reading - I'm super grateful for any support ❤🙏 </br> </br> TL;DR: By supporting me you get: </br> </br> <ul><li>Regular updates to keep your data and family safe 🔄</li><li>Less bugs 🐛🔫</li><li>Better and more functionality➕</li><li>I don't get burned out 🔥🤯</li><li>Less rushed releases 💨</li><li>Better docs📚</li><li>Quicker and better support with issues 🆘</li><li>Less grumpy me 😄</li></ul> </br> 📧Email me to <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> if you want to get in touch or if I should add other sponsorship platforms. </br>",
|
||||||
"Donations_Title": "Donations",
|
"Donations_Title": "Spenden",
|
||||||
"ENABLE_PLUGINS_description": "NOTUSED Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">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://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
|
||||||
"ENABLE_PLUGINS_name": "NOTUSED Enable Plugins",
|
"ENABLE_PLUGINS_name": "NOTUSED Enable Plugins",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
@@ -268,11 +273,11 @@
|
|||||||
"Events_TableHead_Device": "Gerät",
|
"Events_TableHead_Device": "Gerät",
|
||||||
"Events_TableHead_Disconnection": "Trennung",
|
"Events_TableHead_Disconnection": "Trennung",
|
||||||
"Events_TableHead_Duration": "Dauer",
|
"Events_TableHead_Duration": "Dauer",
|
||||||
"Events_TableHead_DurationOrder": "Duration Order",
|
"Events_TableHead_DurationOrder": "Dauer-Reihenfolge",
|
||||||
"Events_TableHead_EventType": "Ereignis Typ",
|
"Events_TableHead_EventType": "Ereignis Typ",
|
||||||
"Events_TableHead_IP": "IP",
|
"Events_TableHead_IP": "IP",
|
||||||
"Events_TableHead_IPOrder": "IP Order",
|
"Events_TableHead_IPOrder": "IP-Reihenfolge",
|
||||||
"Events_TableHead_Order": "Order",
|
"Events_TableHead_Order": "Reihenfolge",
|
||||||
"Events_TableHead_Owner": "Eigentümer",
|
"Events_TableHead_Owner": "Eigentümer",
|
||||||
"Events_TableHead_PendingAlert": "Ausstehender Alarm",
|
"Events_TableHead_PendingAlert": "Ausstehender Alarm",
|
||||||
"Events_Table_info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
"Events_Table_info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
@@ -281,6 +286,8 @@
|
|||||||
"Events_Tablelenght": "Zeige _MENU_ Einträge",
|
"Events_Tablelenght": "Zeige _MENU_ Einträge",
|
||||||
"Events_Tablelenght_all": "Alle",
|
"Events_Tablelenght_all": "Alle",
|
||||||
"Events_Title": "Ereignisse",
|
"Events_Title": "Ereignisse",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "Action",
|
"Gen_Action": "Action",
|
||||||
"Gen_Add": "Hinzufügen",
|
"Gen_Add": "Hinzufügen",
|
||||||
"Gen_Add_All": "Alle hinzufügen",
|
"Gen_Add_All": "Alle hinzufügen",
|
||||||
@@ -288,26 +295,28 @@
|
|||||||
"Gen_AreYouSure": "Sind Sie sich sicher?",
|
"Gen_AreYouSure": "Sind Sie sich sicher?",
|
||||||
"Gen_Backup": "Sichern",
|
"Gen_Backup": "Sichern",
|
||||||
"Gen_Cancel": "Abbrechen",
|
"Gen_Cancel": "Abbrechen",
|
||||||
"Gen_Change": "",
|
"Gen_Change": "Ändern",
|
||||||
"Gen_Copy": "Run",
|
"Gen_Copy": "Ausführen",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK - It may take a while for the UI to update if a scan is runnig",
|
"Gen_DataUpdatedUITakesTime": "OK – Es kann einen Moment dauern, bis die Benutzeroberfläche aktualisiert wird, während ein Scan ausgeführt wird.",
|
||||||
"Gen_Delete": "Löschen",
|
"Gen_Delete": "Löschen",
|
||||||
"Gen_DeleteAll": "Delete all",
|
"Gen_DeleteAll": "Alles löschen",
|
||||||
|
"Gen_Description": "Beschreibung",
|
||||||
"Gen_Error": "Fehler",
|
"Gen_Error": "Fehler",
|
||||||
"Gen_Filter": "Filter",
|
"Gen_Filter": "Filter",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "ERROR - DB eventuell gesperrt - Nutze die Konsole in den Entwickler Werkzeugen (F12) zur Überprüfung oder probiere es später erneut.",
|
"Gen_LockedDB": "ERROR - DB eventuell gesperrt - Nutze die Konsole in den Entwickler Werkzeugen (F12) zur Überprüfung oder probiere es später erneut.",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Purge": "Aufräumen",
|
"Gen_Purge": "Aufräumen",
|
||||||
"Gen_ReadDocs": "Mehr in der Dokumentation",
|
"Gen_ReadDocs": "Mehr in der Dokumentation.",
|
||||||
"Gen_Remove_All": "Alle entfernen",
|
"Gen_Remove_All": "Alle entfernen",
|
||||||
"Gen_Remove_Last": "Letzte entfernen",
|
"Gen_Remove_Last": "Letzte entfernen",
|
||||||
"Gen_Restore": "Wiederherstellen",
|
"Gen_Restore": "Wiederherstellen",
|
||||||
"Gen_Run": "Run",
|
"Gen_Run": "Ausführen",
|
||||||
"Gen_Save": "Speichern",
|
"Gen_Save": "Speichern",
|
||||||
"Gen_Saved": "Gespeichert",
|
"Gen_Saved": "Gespeichert",
|
||||||
"Gen_Search": "Suchen",
|
"Gen_Search": "Suchen",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_SelectToPreview": "Zur Vorschau auswählen",
|
||||||
"Gen_Selected_Devices": "Ausgewählte Geräte:",
|
"Gen_Selected_Devices": "Ausgewählte Geräte:",
|
||||||
"Gen_Switch": "Umschalten",
|
"Gen_Switch": "Umschalten",
|
||||||
"Gen_Upd": "Aktualisierung erfolgreich",
|
"Gen_Upd": "Aktualisierung erfolgreich",
|
||||||
@@ -318,8 +327,10 @@
|
|||||||
"Gen_Work_In_Progress": "Keine Finalversion, feedback bitte unter: https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Keine Finalversion, feedback bitte unter: https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"General_display_name": "Allgemein",
|
"General_display_name": "Allgemein",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Dies ist eine Wartungseinstellung. Wenn aktiviert (<code>0</code> bedeutet deaktiviert), werden als <b>\"Neues Gerät\"</b> markierte Geräte gelöscht, wenn ihre <b>erste Sitzung</b> länger her ist als in dieser Einstellung angegeben. Verwenden Sie diese Einstellung, wenn Sie <b>Neue Geräte</b> nach <code>X</code> Stunden automatisch löschen wollen.",
|
"HRS_TO_KEEP_NEWDEV_description": "Dies ist eine Wartungseinstellung <b>DELETING devices</b>. Wenn aktiviert (<code>0</code> bedeutet deaktiviert), werden als <b>\"Neues Gerät\"</b> markierte Geräte gelöscht, wenn ihre <b>erste Sitzung</b> länger her ist als in dieser Einstellung angegeben. Verwenden Sie diese Einstellung, wenn Sie <b>Neue Geräte</b> nach <code>X</code> Stunden automatisch löschen wollen.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Neue Geräte speichern für",
|
"HRS_TO_KEEP_NEWDEV_name": "Neue Geräte löschen nach",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "Detailansicht",
|
"HelpFAQ_Cat_Detail": "Detailansicht",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "Was bedeutet ",
|
"HelpFAQ_Cat_Detail_300_head": "Was bedeutet ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "meint ein Netzwerkgerät (ein Gerät vom Typ AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router, USB-LAN-Adapter oder Internet). Benutzerdefinierte Typen können über die <code>NETWORK_DEVICE_TYPES</code> Einstellung hinzugefügt werden.",
|
"HelpFAQ_Cat_Detail_300_text_a": "meint ein Netzwerkgerät (ein Gerät vom Typ AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router, USB-LAN-Adapter oder Internet). Benutzerdefinierte Typen können über die <code>NETWORK_DEVICE_TYPES</code> Einstellung hinzugefügt werden.",
|
||||||
@@ -338,13 +349,13 @@
|
|||||||
"HelpFAQ_Cat_General_100_head": "Die Uhr oben rechts und die Zeiten der Events/Anwesenheit stimmen nicht überein (Zeitverschiebung).",
|
"HelpFAQ_Cat_General_100_head": "Die Uhr oben rechts und die Zeiten der Events/Anwesenheit stimmen nicht überein (Zeitverschiebung).",
|
||||||
"HelpFAQ_Cat_General_100_text_a": "Auf deinem PC ist für die PHP Umgebung folgende Zeitzone voreingestellt:",
|
"HelpFAQ_Cat_General_100_text_a": "Auf deinem PC ist für die PHP Umgebung folgende Zeitzone voreingestellt:",
|
||||||
"HelpFAQ_Cat_General_100_text_b": "Sollte dies nicht die Zeitzone sein, in der du dich aufhältst, solltest du die Zeitzone in der PHP Konfigurationsdatei anpassen. Diese findest du in diesem Verzeichnis:",
|
"HelpFAQ_Cat_General_100_text_b": "Sollte dies nicht die Zeitzone sein, in der du dich aufhältst, solltest du die Zeitzone in der PHP Konfigurationsdatei anpassen. Diese findest du in diesem Verzeichnis:",
|
||||||
"HelpFAQ_Cat_General_100_text_c": "Suche in dieser Datei nach dem Eintrag 'date.timezone', entferne ggf. das führende ';' und trage die gewünschte Zeitzone ein. Eine Liste mit den unterstützten Zeitzonen findest du hier (<a href=\"https://www.php.net/manual/de/timezones.php\" target=\"blank\">Link</a>).",
|
"HelpFAQ_Cat_General_100_text_c": "Suche in dieser Datei nach dem Eintrag 'date.timezone', entferne ggf. das führende ';' und trage die gewünschte Zeitzone ein. Eine Liste mit den unterstützten Zeitzonen findest du hier: (<a href=\"https://www.php.net/manual/de/timezones.php\" target=\"blank\">Link</a>)",
|
||||||
"HelpFAQ_Cat_General_101_head": "Mein Netzwerk scheint langsamer zu werden, Streaming ruckelt.",
|
"HelpFAQ_Cat_General_101_head": "Mein Netzwerk scheint langsamer zu werden, Streaming ruckelt.",
|
||||||
"HelpFAQ_Cat_General_101_text": "Es kann durchaus sein, das leistungsschwache Geräte mit der Art und Weise, wie NetAlertX neue Geräte im Netzwerk erkennt, an ihre Leistungsgrenzen kommen. Dies verstärkt sich noch einmal, <br/> wenn diese Geräte per WLAN mit dem Netzwerk kommunizieren. Lösungen wären hier, wenn möglich ein Wechsel auf eine Kabelverbindung oder, falls das Geräte nur einen begrenzten Zeitraum genutzt <br/> werden soll, den arp-Scan auf der Wartungsseite zu pausieren.",
|
"HelpFAQ_Cat_General_101_text": "Es kann durchaus sein, das leistungsschwache Geräte mit der Art und Weise, wie NetAlertX neue Geräte im Netzwerk erkennt, an ihre Leistungsgrenzen kommen. Dies verstärkt sich noch einmal, <br/> wenn diese Geräte per WLAN mit dem Netzwerk kommunizieren. Lösungen wären hier, wenn möglich ein Wechsel auf eine Kabelverbindung oder, falls das Geräte nur einen begrenzten Zeitraum genutzt <br/> werden soll, den arp-Scan auf der Wartungsseite zu pausieren.",
|
||||||
"HelpFAQ_Cat_General_102_head": "Ich bekomme die Meldung, dass die Datenbank schreibgeschützt (read only) ist.",
|
"HelpFAQ_Cat_General_102_head": "Ich bekomme die Meldung, dass die Datenbank schreibgeschützt (read only) ist.",
|
||||||
"HelpFAQ_Cat_General_102_text": "Prüfe im NetAlertX verzeichnis ob der Ordner der Datenbank (db) die richtigen Rechte zugewiesen bekommen hat:<br> <span class=\"text-danger help_faq_code\">drwxrwx--- 2 (dein Username) www-data</span><br> Sollte die Berechtigung nicht stimmen, kannst du sie mit folgenden Befehlen im Terminal oder der Konsole wieder setzen:<br> <span class=\"text-danger help_faq_code\"> sudo chgrp -R www-data /app/db<br> chmod -R 770 /app/db </span><br> Wenn die Datenbank danach noch immer schreibgeschützt ist, versuche eine erneute Installation, oder das Zuückspielen eines Datenbank-Backups über die Wartungsseite.",
|
"HelpFAQ_Cat_General_102_text": "Prüfe im NetAlertX verzeichnis ob der Ordner der Datenbank (db) die richtigen Rechte zugewiesen bekommen hat:<br> <span class=\"text-danger help_faq_code\">drwxrwx--- 2 (dein Username) www-data</span><br> Sollte die Berechtigung nicht stimmen, kannst du sie mit folgenden Befehlen im Terminal oder der Konsole wieder setzen:<br> <span class=\"text-danger help_faq_code\"> sudo chgrp -R www-data /app/db<br> chmod -R 770 /app/db </span><br> Wenn die Datenbank danach noch immer schreibgeschützt ist, versuche eine erneute Installation, oder das Zuückspielen eines Datenbank-Backups über die Wartungsseite.",
|
||||||
"HelpFAQ_Cat_General_102docker_head": "(🐳 Docker only) Database issues (AJAX errors, read-only, not found)",
|
"HelpFAQ_Cat_General_102docker_head": "(🐳 Docker only) Database issues (AJAX errors, read-only, not found)",
|
||||||
"HelpFAQ_Cat_General_102docker_text": "Double-check you have followed the <a href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles\">dockerfile readme (most up-to-date info)</a>. <br/> <br/> <ul data-sourcepos=\"49:4-52:146\" dir=\"auto\"> <li data-sourcepos=\"49:4-49:106\">Download the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/db/app.db\">original DB from GitHub</a>.</li> <li data-sourcepos=\"50:4-50:195\">Map the <code>app.db</code> file (<g-emoji class=\"g-emoji\" alias=\"warning\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/26a0.png\">⚠</g-emoji> not folder) from above to <code>/app/db/app.db</code> (see <a href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles#-examples\">Examples</a> for details).</li><li data-sourcepos=\"51:4-51:161\">If facing issues (AJAX errors, can not write to DB, etc,) make sure permissions are set correctly, alternatively check the logs under <code>/app/front/log</code>.</li> <li data-sourcepos=\"52:4-52:146\">To solve permission issues you can also try to create a DB backup and then run a DB Restore via the <strong>Maintenance > Backup/Restore</strong> section.</li> <li data-sourcepos=\"53:4-53:228\">If the database is in read-only mode you can solve this by setting the owner and group by executing the following command on the host system: <code>docker exec netalertx chown -R www-data:www-data /app/db/app.db</code>.</li></ul>",
|
"HelpFAQ_Cat_General_102docker_text": "",
|
||||||
"HelpFAQ_Cat_General_103_head": "Die Login-Seite erscheint nicht, auch nicht nach der Passwortänderung.",
|
"HelpFAQ_Cat_General_103_head": "Die Login-Seite erscheint nicht, auch nicht nach der Passwortänderung.",
|
||||||
"HelpFAQ_Cat_General_103_text": "Neben dem Passwort, muss in der Konfigurationsdatei <span class=\"text-danger help_faq_code\">/app/config/app.conf</span> auch der Parameter <span class=\"text-danger help_faq_code\">PIALERT_WEB_PROTECTION</span> auf <span class=\"text-danger help_faq_code\">True</span> gesetzt sein.",
|
"HelpFAQ_Cat_General_103_text": "Neben dem Passwort, muss in der Konfigurationsdatei <span class=\"text-danger help_faq_code\">/app/config/app.conf</span> auch der Parameter <span class=\"text-danger help_faq_code\">PIALERT_WEB_PROTECTION</span> auf <span class=\"text-danger help_faq_code\">True</span> gesetzt sein.",
|
||||||
"HelpFAQ_Cat_Network_600_head": "Was bringt mir diese Seite?",
|
"HelpFAQ_Cat_Network_600_head": "Was bringt mir diese Seite?",
|
||||||
@@ -363,9 +374,10 @@
|
|||||||
"Loading": "Laden...",
|
"Loading": "Laden...",
|
||||||
"Login_Box": "Passwort eingeben",
|
"Login_Box": "Passwort eingeben",
|
||||||
"Login_Default_PWD": "Standardpasswort \"123456\" noch immer aktiv.",
|
"Login_Default_PWD": "Standardpasswort \"123456\" noch immer aktiv.",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "Passwort",
|
"Login_Psw-box": "Passwort",
|
||||||
"Login_Psw_alert": "Sicherheitshinweis!",
|
"Login_Psw_alert": "Sicherheitshinweis!",
|
||||||
"Login_Psw_folder": "im Ordner /app/config",
|
"Login_Psw_folder": "im Konfigurationsordner.",
|
||||||
"Login_Psw_new": "neues_passwort",
|
"Login_Psw_new": "neues_passwort",
|
||||||
"Login_Psw_run": "Um das Passwort zu ändern nutze:",
|
"Login_Psw_run": "Um das Passwort zu ändern nutze:",
|
||||||
"Login_Remember": "Passwort speichern",
|
"Login_Remember": "Passwort speichern",
|
||||||
@@ -405,8 +417,8 @@
|
|||||||
"Maintenance_Tool_ImportPastedCSV": "CSV-Import (Einfügen)",
|
"Maintenance_Tool_ImportPastedCSV": "CSV-Import (Einfügen)",
|
||||||
"Maintenance_Tool_ImportPastedCSV_noti_text": "",
|
"Maintenance_Tool_ImportPastedCSV_noti_text": "",
|
||||||
"Maintenance_Tool_ImportPastedCSV_text": "",
|
"Maintenance_Tool_ImportPastedCSV_text": "",
|
||||||
"Maintenance_Tool_arpscansw": "arp-Scan stoppen/starten",
|
"Maintenance_Tool_arpscansw": "ARP-Scan umschalten (ein/aus)",
|
||||||
"Maintenance_Tool_arpscansw_noti": "arp-Scan stoppen/starten",
|
"Maintenance_Tool_arpscansw_noti": "ARP-Scan ein- oder ausschalten",
|
||||||
"Maintenance_Tool_arpscansw_noti_text": "Wenn der Scan aus ist, bleibt er so lange aus bis er wieder aktiviert wird.",
|
"Maintenance_Tool_arpscansw_noti_text": "Wenn der Scan aus ist, bleibt er so lange aus bis er wieder aktiviert wird.",
|
||||||
"Maintenance_Tool_arpscansw_text": "Schaltet den arp-Scan an oder aus. Wenn der Scan aus ist, bleibt er so lange aus bis er wieder aktiviert wird. Bereits laufende Scans werden dabei nicht beendet.",
|
"Maintenance_Tool_arpscansw_text": "Schaltet den arp-Scan an oder aus. Wenn der Scan aus ist, bleibt er so lange aus bis er wieder aktiviert wird. Bereits laufende Scans werden dabei nicht beendet.",
|
||||||
"Maintenance_Tool_backup": "DB Sicherung",
|
"Maintenance_Tool_backup": "DB Sicherung",
|
||||||
@@ -431,7 +443,7 @@
|
|||||||
"Maintenance_Tool_del_allevents30_noti": "Ereignisse löschen",
|
"Maintenance_Tool_del_allevents30_noti": "Ereignisse löschen",
|
||||||
"Maintenance_Tool_del_allevents30_noti_text": "Sind Sie sich sicher, dass Sie alle Ereignisse älter als 30 Tage löschen wollen? Dies setzt die Präsenz aller Geräte zurück.",
|
"Maintenance_Tool_del_allevents30_noti_text": "Sind Sie sich sicher, dass Sie alle Ereignisse älter als 30 Tage löschen wollen? Dies setzt die Präsenz aller Geräte zurück.",
|
||||||
"Maintenance_Tool_del_allevents30_text": "Machen Sie ein Backup, bevor Sie diese Funktion nutzen. Der Vorgang kann ohne Backup nicht rückgängig gemacht werden. Alle Ereignisse älter als 30 Tage werden aus der Datenbank gelöscht. Dies setzt auch die Anwesenheit zurück. Es kann ab dem Moment zu ungültigen Sitzungen kommen. Ein Scan, während das betreffende Gerät online ist, sollte das Problem lösen.",
|
"Maintenance_Tool_del_allevents30_text": "Machen Sie ein Backup, bevor Sie diese Funktion nutzen. Der Vorgang kann ohne Backup nicht rückgängig gemacht werden. Alle Ereignisse älter als 30 Tage werden aus der Datenbank gelöscht. Dies setzt auch die Anwesenheit zurück. Es kann ab dem Moment zu ungültigen Sitzungen kommen. Ein Scan, während das betreffende Gerät online ist, sollte das Problem lösen.",
|
||||||
"Maintenance_Tool_del_allevents_noti": "Alle Ereignisse löschen",
|
"Maintenance_Tool_del_allevents_noti": "Ereignisse löschen",
|
||||||
"Maintenance_Tool_del_allevents_noti_text": "Sind Sie sicher, dass Sie alle Ereignisse aus der Datenbank löschen wollen. Dies setzt die Anwesenheit aller Geräte zurück.",
|
"Maintenance_Tool_del_allevents_noti_text": "Sind Sie sicher, dass Sie alle Ereignisse aus der Datenbank löschen wollen. Dies setzt die Anwesenheit aller Geräte zurück.",
|
||||||
"Maintenance_Tool_del_allevents_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen. Der Vor­gang kann ohne Back­up nicht rück­gängig gemacht werden. Alle Ereignisse werden aus der Datenbank ge­löscht. Dies setzt auch die Anwesenheit zu­rück. Es kann ab dem Moment zu ungültigen Sitzungen kommen. Ein Scan, während das betreffende Gerät online ist, sollte das Problem lösen.",
|
"Maintenance_Tool_del_allevents_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen. Der Vor­gang kann ohne Back­up nicht rück­gängig gemacht werden. Alle Ereignisse werden aus der Datenbank ge­löscht. Dies setzt auch die Anwesenheit zu­rück. Es kann ab dem Moment zu ungültigen Sitzungen kommen. Ein Scan, während das betreffende Gerät online ist, sollte das Problem lösen.",
|
||||||
"Maintenance_Tool_del_empty_macs": "Alle Geräte ohne MAC löschen",
|
"Maintenance_Tool_del_empty_macs": "Alle Geräte ohne MAC löschen",
|
||||||
@@ -444,7 +456,7 @@
|
|||||||
"Maintenance_Tool_del_unknowndev_noti": "Lösche (unknown) Geräte",
|
"Maintenance_Tool_del_unknowndev_noti": "Lösche (unknown) Geräte",
|
||||||
"Maintenance_Tool_del_unknowndev_noti_text": "Sind Sie sicher, dass Sie alle (unknown) Geräte aus der Datenbank löschen wollen?",
|
"Maintenance_Tool_del_unknowndev_noti_text": "Sind Sie sicher, dass Sie alle (unknown) Geräte aus der Datenbank löschen wollen?",
|
||||||
"Maintenance_Tool_del_unknowndev_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen. Der Vor­gang kann ohne Back­up nicht rück­gängig gemacht werden. Alle Gräte mit dem Namen (unknown) werden aus der Datenbank ge­löscht.",
|
"Maintenance_Tool_del_unknowndev_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen. Der Vor­gang kann ohne Back­up nicht rück­gängig gemacht werden. Alle Gräte mit dem Namen (unknown) werden aus der Datenbank ge­löscht.",
|
||||||
"Maintenance_Tool_displayed_columns_text": "Ändere die Sichtbarkeit und Anordnung der Spalten in der <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Geräte</b></a>-Seite. (Drag-and-Drop funktioniert nicht einwandfrei, ist aber verwendbar. Ich habe <a href=\"https://github.com/jokob-sk/NetAlertX/commit/94b32f0f7332879f5a7d2af05dafa2e5d5cfa5da\">3 Stunden</a> versucht das zu beheben, werde es aber nicht weiter verfolgen. Über einen PR mit einem Fix würde ich mich freuen :) ).",
|
"Maintenance_Tool_displayed_columns_text": "Ändere die Sichtbarkeit und Anordnung der Spalten in der <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Geräte</b></a>-Seite.",
|
||||||
"Maintenance_Tool_drag_me": "Zieh mich um die Anordnung der Spalten zu ändern.",
|
"Maintenance_Tool_drag_me": "Zieh mich um die Anordnung der Spalten zu ändern.",
|
||||||
"Maintenance_Tool_order_columns_text": "",
|
"Maintenance_Tool_order_columns_text": "",
|
||||||
"Maintenance_Tool_purgebackup": "Sicherungen aufräumen",
|
"Maintenance_Tool_purgebackup": "Sicherungen aufräumen",
|
||||||
@@ -456,14 +468,14 @@
|
|||||||
"Maintenance_Tool_restore_noti_text": "Sind Sie sicher, dass Sie die Datenbank aus der neusten Sicherung wiederherstellen möchten? Prüfen Sie, dass gerade keine Scans stattfinden.",
|
"Maintenance_Tool_restore_noti_text": "Sind Sie sicher, dass Sie die Datenbank aus der neusten Sicherung wiederherstellen möchten? Prüfen Sie, dass gerade keine Scans stattfinden.",
|
||||||
"Maintenance_Tool_restore_text": "Das neuste Backup kann über diese Funk­tion wiederhergestellt werden. Ältere Sicher­ungen müssen manuell wieder­hergestellt wer­den. Es empfiehlt sich eine Integritäts­prüfung nach der Wieder­her­stellung zu machen, falls die Datenbank bei der Sicherung geöffnet war.",
|
"Maintenance_Tool_restore_text": "Das neuste Backup kann über diese Funk­tion wiederhergestellt werden. Ältere Sicher­ungen müssen manuell wieder­hergestellt wer­den. Es empfiehlt sich eine Integritäts­prüfung nach der Wieder­her­stellung zu machen, falls die Datenbank bei der Sicherung geöffnet war.",
|
||||||
"Maintenance_Tool_upgrade_database_noti": "Aktualisiere Datenbank",
|
"Maintenance_Tool_upgrade_database_noti": "Aktualisiere Datenbank",
|
||||||
"Maintenance_Tool_upgrade_database_noti_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen.",
|
"Maintenance_Tool_upgrade_database_noti_text": "",
|
||||||
"Maintenance_Tool_upgrade_database_text": "Mit dieser Schaltfläche wird die Datenbank aktualisiert, um das Diagramm der Netzwerkaktivitäten der letzten 12 Stunden zu aktivieren. Bitte sichern Sie Ihre Datenbank, falls Probleme auftreten.",
|
"Maintenance_Tool_upgrade_database_text": "Mit dieser Schaltfläche wird die Datenbank aktualisiert, um das Diagramm der Netzwerkaktivitäten der letzten 12 Stunden zu aktivieren. Bitte sichern Sie Ihre Datenbank, falls Probleme auftreten.",
|
||||||
"Maintenance_Tools_Tab_BackupRestore": "Sicherg. / Wiederherstellg.",
|
"Maintenance_Tools_Tab_BackupRestore": "Sichern / Wiederherstellen",
|
||||||
"Maintenance_Tools_Tab_Logging": "Logs",
|
"Maintenance_Tools_Tab_Logging": "Protokolle",
|
||||||
"Maintenance_Tools_Tab_Settings": "Einstellungen",
|
"Maintenance_Tools_Tab_Settings": "Einstellungen",
|
||||||
"Maintenance_Tools_Tab_Tools": "Werkzeuge",
|
"Maintenance_Tools_Tab_Tools": "Werkzeuge",
|
||||||
"Maintenance_Tools_Tab_UISettings": "UI Einstellungen",
|
"Maintenance_Tools_Tab_UISettings": "UI Einstellungen",
|
||||||
"Maintenance_arp_status": "Scan Status",
|
"Maintenance_arp_status": "Scan-Status",
|
||||||
"Maintenance_arp_status_off": "ist im Moment deaktiviert",
|
"Maintenance_arp_status_off": "ist im Moment deaktiviert",
|
||||||
"Maintenance_arp_status_on": "Scan(s) sind gerade aktiv",
|
"Maintenance_arp_status_on": "Scan(s) sind gerade aktiv",
|
||||||
"Maintenance_built_on": "Erstellt am",
|
"Maintenance_built_on": "Erstellt am",
|
||||||
@@ -499,7 +511,7 @@
|
|||||||
"NTFY_icon": "<i class=\"fa fa-terminal\"></i>",
|
"NTFY_icon": "<i class=\"fa fa-terminal\"></i>",
|
||||||
"Navigation_About": "Über",
|
"Navigation_About": "Über",
|
||||||
"Navigation_Devices": "Geräte",
|
"Navigation_Devices": "Geräte",
|
||||||
"Navigation_Donations": "Donations",
|
"Navigation_Donations": "Spenden",
|
||||||
"Navigation_Events": "Ereignisse",
|
"Navigation_Events": "Ereignisse",
|
||||||
"Navigation_Flows": "Flows",
|
"Navigation_Flows": "Flows",
|
||||||
"Navigation_HelpFAQ": "Hilfe / FAQ",
|
"Navigation_HelpFAQ": "Hilfe / FAQ",
|
||||||
@@ -537,7 +549,7 @@
|
|||||||
"Network_ManageEdit_ID_text": "-- Gerät wählen --",
|
"Network_ManageEdit_ID_text": "-- Gerät wählen --",
|
||||||
"Network_ManageEdit_Name": "Neuer Name",
|
"Network_ManageEdit_Name": "Neuer Name",
|
||||||
"Network_ManageEdit_Name_text": "Name ohne Sonderzeichen",
|
"Network_ManageEdit_Name_text": "Name ohne Sonderzeichen",
|
||||||
"Network_ManageEdit_Port": "Neue Portanzahl",
|
"Network_ManageEdit_Port": " Neue Portanzahl",
|
||||||
"Network_ManageEdit_Port_text": "bei WLAN oder Powerline leer lassen",
|
"Network_ManageEdit_Port_text": "bei WLAN oder Powerline leer lassen",
|
||||||
"Network_ManageEdit_Submit": "Speichern",
|
"Network_ManageEdit_Submit": "Speichern",
|
||||||
"Network_ManageEdit_Type": "Neuer Typ",
|
"Network_ManageEdit_Type": "Neuer Typ",
|
||||||
@@ -562,20 +574,21 @@
|
|||||||
"PIALERT_WEB_PASSWORD_description": "Das Standardpasswort ist <code>123456</code>. Um das Passwort zu ändern, entweder <code>/app/back/pialert-cli</code> im Container starten oder <a onclick=\"toggleAllSettings()\" href=\"#SETPWD_RUN\"><code>SETPWD_RUN</code> Set password plugin</a> nutzen.",
|
"PIALERT_WEB_PASSWORD_description": "Das Standardpasswort ist <code>123456</code>. Um das Passwort zu ändern, entweder <code>/app/back/pialert-cli</code> im Container starten oder <a onclick=\"toggleAllSettings()\" href=\"#SETPWD_RUN\"><code>SETPWD_RUN</code> Set password plugin</a> nutzen.",
|
||||||
"PIALERT_WEB_PASSWORD_name": "Login-Passwort",
|
"PIALERT_WEB_PASSWORD_name": "Login-Passwort",
|
||||||
"PIALERT_WEB_PROTECTION_description": "Ein Loginfenster wird angezeigt wenn aktiviert. Untere Beschreibung genau durchlesen falls Sie sich aus Ihrer Instanz aussperren.",
|
"PIALERT_WEB_PROTECTION_description": "Ein Loginfenster wird angezeigt wenn aktiviert. Untere Beschreibung genau durchlesen falls Sie sich aus Ihrer Instanz aussperren.",
|
||||||
"PIALERT_WEB_PROTECTION_name": "Login aktivieren",
|
"PIALERT_WEB_PROTECTION_name": "Anmeldung aktivieren",
|
||||||
"PLUGINS_KEEP_HIST_description": "Wie viele Plugin Scanresultate behalten werden (pro Plugin, nicht gerätespezifisch).",
|
"PLUGINS_KEEP_HIST_description": "Wie viele Plugin Scanresultate behalten werden (pro Plugin, nicht gerätespezifisch).",
|
||||||
"PLUGINS_KEEP_HIST_name": "Plugins Verlauf",
|
"PLUGINS_KEEP_HIST_name": "Plugins Verlauf",
|
||||||
"PUSHSAFER_TOKEN_description": "Your secret Pushsafer API key (token).",
|
"PUSHSAFER_TOKEN_description": "Your secret Pushsafer API key (token).",
|
||||||
"PUSHSAFER_TOKEN_name": "Pushsafer token",
|
"PUSHSAFER_TOKEN_name": "Pushsafer token",
|
||||||
"PUSHSAFER_display_name": "Pushsafer",
|
"PUSHSAFER_display_name": "Pushsafer",
|
||||||
"PUSHSAFER_icon": "<i class=\"fa fa-bell\"></i>",
|
"PUSHSAFER_icon": "<i class=\"fa fa-bell\"></i>",
|
||||||
"Plugins_DeleteAll": "Delete all (filters are ignored)",
|
"Plugins_DeleteAll": "Alles löschen (Filter werden ignoriert)",
|
||||||
"Plugins_Filters_Mac": "Mac Filter",
|
"Plugins_Filters_Mac": "Mac Filter",
|
||||||
"Plugins_History": "Events History",
|
"Plugins_History": "Verlauf der Ereignisse",
|
||||||
"Plugins_Objects": "Plugin Objects",
|
"Plugins_Obj_DeleteListed": "Aufgelistete Objekte löschen",
|
||||||
|
"Plugins_Objects": "Plugin-Objekte",
|
||||||
"Plugins_Out_of": "von",
|
"Plugins_Out_of": "von",
|
||||||
"Plugins_Unprocessed_Events": "Unprocessed Events",
|
"Plugins_Unprocessed_Events": "Unverarbeitete Ereignisse",
|
||||||
"Plugins_no_control": "No form control was found to render this value.",
|
"Plugins_no_control": "",
|
||||||
"Presence_CalHead_day": "Tag",
|
"Presence_CalHead_day": "Tag",
|
||||||
"Presence_CalHead_lang": "de",
|
"Presence_CalHead_lang": "de",
|
||||||
"Presence_CalHead_month": "Monat",
|
"Presence_CalHead_month": "Monat",
|
||||||
@@ -583,6 +596,12 @@
|
|||||||
"Presence_CalHead_week": "Woche",
|
"Presence_CalHead_week": "Woche",
|
||||||
"Presence_CalHead_year": "Jahr",
|
"Presence_CalHead_year": "Jahr",
|
||||||
"Presence_CallHead_Devices": "Geräte",
|
"Presence_CallHead_Devices": "Geräte",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "Laden...",
|
"Presence_Loading": "Laden...",
|
||||||
"Presence_Shortcut_AllDevices": "Meine Geräte",
|
"Presence_Shortcut_AllDevices": "Meine Geräte",
|
||||||
"Presence_Shortcut_Archived": "Archiviert",
|
"Presence_Shortcut_Archived": "Archiviert",
|
||||||
@@ -600,7 +619,7 @@
|
|||||||
"REPORT_FROM_description": "Notification email subject line. Some SMTP servers need this to be an email.",
|
"REPORT_FROM_description": "Notification email subject line. Some SMTP servers need this to be an email.",
|
||||||
"REPORT_FROM_name": "Email subject",
|
"REPORT_FROM_name": "Email subject",
|
||||||
"REPORT_MAIL_description": "If enabled an email is sent out with a list of changes you nove subscribed to. Please also fill out all remaining settings related to the SMTP setup below. If facing issues, set <code>LOG_LEVEL</code> to <code>debug</code> and check the <a href=\"/maintenance.php#tab_Logging\">error log</a>.",
|
"REPORT_MAIL_description": "If enabled an email is sent out with a list of changes you nove subscribed to. Please also fill out all remaining settings related to the SMTP setup below. If facing issues, set <code>LOG_LEVEL</code> to <code>debug</code> and check the <a href=\"/maintenance.php#tab_Logging\">error log</a>.",
|
||||||
"REPORT_MAIL_name": "Enable email",
|
"REPORT_MAIL_name": "E-Mail aktivieren",
|
||||||
"REPORT_MQTT_description": "Enable sending notifications via <a target=\"_blank\" href=\"https://www.home-assistant.io/integrations/mqtt/\">MQTT</a> to your Home Assistance instance.",
|
"REPORT_MQTT_description": "Enable sending notifications via <a target=\"_blank\" href=\"https://www.home-assistant.io/integrations/mqtt/\">MQTT</a> to your Home Assistance instance.",
|
||||||
"REPORT_MQTT_name": "Enable MQTT",
|
"REPORT_MQTT_name": "Enable MQTT",
|
||||||
"REPORT_NTFY_description": "Enable sending notifications via <a target=\"_blank\" href=\"https://ntfy.sh/\">NTFY</a>.",
|
"REPORT_NTFY_description": "Enable sending notifications via <a target=\"_blank\" href=\"https://ntfy.sh/\">NTFY</a>.",
|
||||||
@@ -612,10 +631,10 @@
|
|||||||
"REPORT_TO_name": "Send email to",
|
"REPORT_TO_name": "Send email to",
|
||||||
"REPORT_WEBHOOK_description": "Enable webhooks for notifications. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a> to name a few. Check out this simple <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md\" target=\"_blank\">n8n guide here</a> to get started. If enabled, configure related settings below.",
|
"REPORT_WEBHOOK_description": "Enable webhooks for notifications. Webhooks help you to connect to a lot of 3rd party tools, such as IFTTT, Zapier or <a href=\"https://n8n.io/\" target=\"_blank\">n8n</a> to name a few. Check out this simple <a href=\"https://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_name": "Enable Webhooks",
|
"REPORT_WEBHOOK_name": "Enable Webhooks",
|
||||||
"RandomMAC_hover": "Autodetected - indicates if the device randomizes it's MAC address.",
|
"RandomMAC_hover": "Automatisch erkannt - gibt an, ob das Gerät seine MAC-Adresse zufällig ermittelt.",
|
||||||
"Reports_Sent_Log": "Protokoll gesendeter Berichte",
|
"Reports_Sent_Log": "Protokoll gesendeter Berichte",
|
||||||
"SCAN_SUBNETS_description": "",
|
"SCAN_SUBNETS_description": "",
|
||||||
"SCAN_SUBNETS_name": "",
|
"SCAN_SUBNETS_name": "scan Netzwerke",
|
||||||
"SMTP_FORCE_SSL_description": "Force SSL when connecting to your SMTP server.",
|
"SMTP_FORCE_SSL_description": "Force SSL when connecting to your SMTP server.",
|
||||||
"SMTP_FORCE_SSL_name": "Force SSL",
|
"SMTP_FORCE_SSL_name": "Force SSL",
|
||||||
"SMTP_PASS_description": "The SMTP server password. ",
|
"SMTP_PASS_description": "The SMTP server password. ",
|
||||||
@@ -631,9 +650,10 @@
|
|||||||
"SMTP_USER_description": "The user name used to login into the SMTP server (sometimes a full email address).",
|
"SMTP_USER_description": "The user name used to login into the SMTP server (sometimes a full email address).",
|
||||||
"SMTP_USER_name": "SMTP user",
|
"SMTP_USER_name": "SMTP user",
|
||||||
"SYSTEM_TITLE": "Systeminformationen",
|
"SYSTEM_TITLE": "Systeminformationen",
|
||||||
"Setting_Override": "Override value",
|
"Setting_Override": "Wert überschreiben",
|
||||||
"Setting_Override_Description": "Enabling this option will override an App supplied default value with the value specified above.",
|
"Setting_Override_Description": "",
|
||||||
"Settings_Metadata_Toggle": "Show/hide metadata for the given setting.",
|
"Settings_Metadata_Toggle": "Metadaten für die angegebene Einstellung anzeigen/ausblenden.",
|
||||||
|
"Settings_Show_Description": "Beschreibung der Einstellung anzeigen.",
|
||||||
"Settings_device_Scanners_desync": "⚠ Die Zeitpläne des Gerätescanners sind nicht synchronisiert.",
|
"Settings_device_Scanners_desync": "⚠ Die Zeitpläne des Gerätescanners sind nicht synchronisiert.",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "Ergebnisse des Geschwindigkeitstests",
|
"Speedtest_Results": "Ergebnisse des Geschwindigkeitstests",
|
||||||
@@ -717,19 +737,19 @@
|
|||||||
"UI_DEV_SECTIONS_description": "Auswählen, welche Elemente in der Geräteseite versteckt werden sollen.",
|
"UI_DEV_SECTIONS_description": "Auswählen, welche Elemente in der Geräteseite versteckt werden sollen.",
|
||||||
"UI_DEV_SECTIONS_name": "Geräteauswahl verstecken",
|
"UI_DEV_SECTIONS_name": "Geräteauswahl verstecken",
|
||||||
"UI_ICONS_description": "",
|
"UI_ICONS_description": "",
|
||||||
"UI_ICONS_name": "Vorgefertigte Icons",
|
"UI_ICONS_name": "Vordefinierte Symbole",
|
||||||
"UI_LANG_description": "Bevorzugte Oberflächensprache auswählen. Du möchtest beim Übersetzen helfen? Gerne hier: <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Bevorzugte Oberflächensprache auswählen. Du möchtest beim Übersetzen helfen? Gerne hier: <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "UI Sprache",
|
"UI_LANG_name": "Sprache der Benutzeroberfläche",
|
||||||
"UI_MY_DEVICES_description": "",
|
"UI_MY_DEVICES_description": "",
|
||||||
"UI_MY_DEVICES_name": "In \"Meine Geräte\" anzeigen",
|
"UI_MY_DEVICES_name": "In \"Meine Geräte\" anzeigen",
|
||||||
"UI_NOT_RANDOM_MAC_description": "",
|
"UI_NOT_RANDOM_MAC_description": "",
|
||||||
"UI_NOT_RANDOM_MAC_name": "",
|
"UI_NOT_RANDOM_MAC_name": "Nicht als zufällig markieren",
|
||||||
"UI_PRESENCE_description": "Auswählen, welche Status im <b>Gerätepräsenz im Laufe der Zeit</b>-Diagramm in der <a href=\"/devices.php\" target=\"_blank\">Geräte</a>-Seite angzeigt werden sollen. (<code>STRG + klicken</code> zum aus-/abwählen).",
|
"UI_PRESENCE_description": "Auswählen, welche Status im <b>Gerätepräsenz im Laufe der Zeit</b>-Diagramm in der <a href=\"/devices.php\" target=\"_blank\">Geräte</a>-Seite angzeigt werden sollen.",
|
||||||
"UI_PRESENCE_name": "Anzeige im Präsenzdiagramm",
|
"UI_PRESENCE_name": "Anzeige im Präsenzdiagramm",
|
||||||
"UI_REFRESH_description": "",
|
"UI_REFRESH_description": "",
|
||||||
"UI_REFRESH_name": "Automatisch Aktualisieren",
|
"UI_REFRESH_name": "Benutzeroberfläche automatisch auffrischen",
|
||||||
"VERSION_description": "",
|
"VERSION_description": "",
|
||||||
"VERSION_name": "",
|
"VERSION_name": "Version oder Zeitstempel",
|
||||||
"WEBHOOK_PAYLOAD_description": "The Webhook payload data format for the <code>body</code> > <code>attachments</code> > <code>text</code> attribute in the payload json. See an example of the payload <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/front/report_templates/webhook_json_sample.json\">here</a>. (e.g.: for discord use <code>text</code>)",
|
"WEBHOOK_PAYLOAD_description": "The Webhook payload data format for the <code>body</code> > <code>attachments</code> > <code>text</code> attribute in the payload json. See an example of the payload <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/front/report_templates/webhook_json_sample.json\">here</a>. (e.g.: for discord use <code>text</code>)",
|
||||||
"WEBHOOK_PAYLOAD_name": "Payload type",
|
"WEBHOOK_PAYLOAD_name": "Payload type",
|
||||||
"WEBHOOK_REQUEST_METHOD_description": "The HTTP request method to be used for the webhook call.",
|
"WEBHOOK_REQUEST_METHOD_description": "The HTTP request method to be used for the webhook call.",
|
||||||
@@ -744,13 +764,13 @@
|
|||||||
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
||||||
"devices_old": "Aktualisiert...",
|
"devices_old": "Aktualisiert...",
|
||||||
"general_event_description": "Das Ereignis, das Sie ausgelöst haben, könnte eine Weile dauern, bis Hintergrundprozesse abgeschlossen sind. Die Ausführung endet, wenn die unten ausgeführte Warteschlangen abgearbeitet ist. (Siehe <a href='/maintenance.php#tab_Logging'>error log</a>, wenn Probleme auftreten.)<br/> <br/> Ausführungsschlange:",
|
"general_event_description": "Das Ereignis, das Sie ausgelöst haben, könnte eine Weile dauern, bis Hintergrundprozesse abgeschlossen sind. Die Ausführung endet, wenn die unten ausgeführte Warteschlangen abgearbeitet ist. (Siehe <a href='/maintenance.php#tab_Logging'>error log</a>, wenn Probleme auftreten.)<br/> <br/> Ausführungsschlange:",
|
||||||
"general_event_title": "Executing an ad-hoc event",
|
"general_event_title": "",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "Format auswählen:",
|
"report_select_format": "Format auswählen:",
|
||||||
"report_time": "Benachrichtigungszeit:",
|
"report_time": "Benachrichtigungszeit:",
|
||||||
"run_event_icon": "fa-play",
|
"run_event_icon": "",
|
||||||
"run_event_tooltip": "Enable the setting and save your changes at first before you run it.",
|
"run_event_tooltip": "Aktiviere die Einstellung und speichere deine Änderungen, bevor du sie ausführst.",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "Kern",
|
"settings_core_label": "Kern",
|
||||||
"settings_device_scanners": "",
|
"settings_device_scanners": "",
|
||||||
@@ -759,23 +779,23 @@
|
|||||||
"settings_device_scanners_label": "Gerätescanner",
|
"settings_device_scanners_label": "Gerätescanner",
|
||||||
"settings_enabled": "Aktive Einstellungen",
|
"settings_enabled": "Aktive Einstellungen",
|
||||||
"settings_enabled_icon": "",
|
"settings_enabled_icon": "",
|
||||||
"settings_expand_all": "Expand all",
|
"settings_expand_all": "Alles ausklappen",
|
||||||
"settings_imported": "Last time settings were imported from the app.conf file:",
|
"settings_imported": "Die letzten Einstellungen wurden aus der Datei app.conf importiert",
|
||||||
"settings_imported_label": "Einstellungen importiert",
|
"settings_imported_label": "Einstellungen importiert",
|
||||||
"settings_missing": "",
|
"settings_missing": "",
|
||||||
"settings_missing_block": "",
|
"settings_missing_block": "",
|
||||||
"settings_old": "Importing settings and re-initializing...",
|
"settings_old": "",
|
||||||
"settings_other_scanners": "",
|
"settings_other_scanners": "",
|
||||||
"settings_other_scanners_icon": "",
|
"settings_other_scanners_icon": "",
|
||||||
"settings_other_scanners_label": "Andere Scanner",
|
"settings_other_scanners_label": "Andere Scanner",
|
||||||
"settings_publishers": "",
|
"settings_publishers": "",
|
||||||
"settings_publishers_icon": "fa-solid fa-paper-plane",
|
"settings_publishers_icon": "",
|
||||||
"settings_publishers_info": "",
|
"settings_publishers_info": "Lade mehr Veröffentlicher mit den <a href=\"/settings.php#LOADED_PLUGINS\">geladene Plugins</a>-Einstellungen",
|
||||||
"settings_publishers_label": "Veröffentlicher",
|
"settings_publishers_label": "Veröffentlicher",
|
||||||
"settings_saved": "",
|
"settings_saved": "<br/>Einstellungen gespeichert. <br/> Wird geladen... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
"test_event_icon": "",
|
||||||
"test_event_tooltip": "Save your changes at first before you test your settings."
|
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"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=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
"API_CUSTOM_SQL_description": "You can specify a custom SQL query which will generate a JSON file and then expose it via the <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Custom endpoint",
|
"API_CUSTOM_SQL_name": "Custom endpoint",
|
||||||
|
"API_TOKEN_description": "API token to secure communication, you can generate one or enter any value. It's sent in the request header. Used in the <code>SYNC</code> plugin, GraphQL server.",
|
||||||
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Designed for:",
|
"About_Design": "Designed for:",
|
||||||
@@ -62,7 +64,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Delete events older than",
|
"DAYS_TO_KEEP_EVENTS_name": "Delete events older than",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copy details from device",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copy details from device",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copy details from device from the dropdown list. Everything on this page will be overwritten",
|
"DevDetail_Copy_Device_Tooltip": "Copy details from device from the dropdown list. Everything on this page will be overwritten",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Alert All Events",
|
"DevDetail_EveandAl_AlertAllEvents": "Alert Events",
|
||||||
"DevDetail_EveandAl_AlertDown": "Alert Down",
|
"DevDetail_EveandAl_AlertDown": "Alert Down",
|
||||||
"DevDetail_EveandAl_Archived": "Archived",
|
"DevDetail_EveandAl_Archived": "Archived",
|
||||||
"DevDetail_EveandAl_NewDevice": "New Device",
|
"DevDetail_EveandAl_NewDevice": "New Device",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Favorites",
|
"Device_Shortcut_Favorites": "Favorites",
|
||||||
"Device_Shortcut_NewDevices": "New Devices",
|
"Device_Shortcut_NewDevices": "New Devices",
|
||||||
"Device_Shortcut_OnlineChart": "Device presence",
|
"Device_Shortcut_OnlineChart": "Device presence",
|
||||||
|
"Device_TableHead_AlertDown": "Alert Down",
|
||||||
"Device_TableHead_Connected_Devices": "Connections",
|
"Device_TableHead_Connected_Devices": "Connections",
|
||||||
"Device_TableHead_Favorite": "Favorite",
|
"Device_TableHead_Favorite": "Favorite",
|
||||||
"Device_TableHead_FirstSession": "First Session",
|
"Device_TableHead_FirstSession": "First Session",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "Owner",
|
"Device_TableHead_Owner": "Owner",
|
||||||
"Device_TableHead_Parent_MAC": "Parent node MAC",
|
"Device_TableHead_Parent_MAC": "Parent node MAC",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
|
"Device_TableHead_PresentLastScan": "Presence",
|
||||||
"Device_TableHead_RowID": "Row ID",
|
"Device_TableHead_RowID": "Row ID",
|
||||||
"Device_TableHead_Rowid": "Row ID",
|
"Device_TableHead_Rowid": "Row ID",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "Source Plugin",
|
||||||
"Device_TableHead_Status": "Status",
|
"Device_TableHead_Status": "Status",
|
||||||
"Device_TableHead_SyncHubNodeName": "Sync Node",
|
"Device_TableHead_SyncHubNodeName": "Sync Node",
|
||||||
"Device_TableHead_Type": "Type",
|
"Device_TableHead_Type": "Type",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Show _MENU_ entries",
|
"Events_Tablelenght": "Show _MENU_ entries",
|
||||||
"Events_Tablelenght_all": "All",
|
"Events_Tablelenght_all": "All",
|
||||||
"Events_Title": "Events",
|
"Events_Title": "Events",
|
||||||
|
"GRAPHQL_PORT_description": "The port number of the GraphQL server.",
|
||||||
|
"GRAPHQL_PORT_name": "GraphQL port",
|
||||||
"Gen_Action": "Action",
|
"Gen_Action": "Action",
|
||||||
"Gen_Add": "Add",
|
"Gen_Add": "Add",
|
||||||
"Gen_Add_All": "Add all",
|
"Gen_Add_All": "Add all",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "OK - It may take a while for the UI to update if a scan is running.",
|
"Gen_DataUpdatedUITakesTime": "OK - It may take a while for the UI to update if a scan is running.",
|
||||||
"Gen_Delete": "Delete",
|
"Gen_Delete": "Delete",
|
||||||
"Gen_DeleteAll": "Delete all",
|
"Gen_DeleteAll": "Delete all",
|
||||||
|
"Gen_Description": "Description",
|
||||||
"Gen_Error": "Error",
|
"Gen_Error": "Error",
|
||||||
"Gen_Filter": "Filter",
|
"Gen_Filter": "Filter",
|
||||||
|
"Gen_Generate": "Generate",
|
||||||
"Gen_LockedDB": "ERROR - DB might be locked - Check F12 Dev tools -> Console or try later.",
|
"Gen_LockedDB": "ERROR - DB might be locked - Check F12 Dev tools -> Console or try later.",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New Device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New Devices</b> after <code>X</code> hours.",
|
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New Device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New Devices</b> after <code>X</code> hours.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Delete new devices after",
|
"HRS_TO_KEEP_NEWDEV_name": "Delete new devices after",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices that are <b>Offline</b> and their <b>Last Offline</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",
|
||||||
"HelpFAQ_Cat_Detail": "Details",
|
"HelpFAQ_Cat_Detail": "Details",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "What means ",
|
"HelpFAQ_Cat_Detail_300_head": "What means ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "means a network device (a device of the type AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router,USB LAN Adapter, USB WIFI Adapter, or Internet). Custom types can be added via the <code>NETWORK_DEVICE_TYPES</code> setting.",
|
"HelpFAQ_Cat_Detail_300_text_a": "means a network device (a device of the type AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router,USB LAN Adapter, USB WIFI Adapter, or Internet). Custom types can be added via the <code>NETWORK_DEVICE_TYPES</code> setting.",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Loading...",
|
"Loading": "Loading...",
|
||||||
"Login_Box": "Enter your password",
|
"Login_Box": "Enter your password",
|
||||||
"Login_Default_PWD": "Default password \"123456\" is still active.",
|
"Login_Default_PWD": "Default password \"123456\" is still active.",
|
||||||
|
"Login_Info": "Passwords are set via the Set Password plugin. Check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SETPWD docs</a> if you have issues logging in.",
|
||||||
"Login_Psw-box": "Password",
|
"Login_Psw-box": "Password",
|
||||||
"Login_Psw_alert": "Password Alert!",
|
"Login_Psw_alert": "Password Alert!",
|
||||||
"Login_Psw_folder": "in the config folder.",
|
"Login_Psw_folder": "in the config folder.",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "Delete all (filters are ignored)",
|
"Plugins_DeleteAll": "Delete all (filters are ignored)",
|
||||||
"Plugins_Filters_Mac": "Mac Filter",
|
"Plugins_Filters_Mac": "Mac Filter",
|
||||||
"Plugins_History": "Events History",
|
"Plugins_History": "Events History",
|
||||||
|
"Plugins_Obj_DeleteListed": "Delete Listed Objects",
|
||||||
"Plugins_Objects": "Plugin Objects",
|
"Plugins_Objects": "Plugin Objects",
|
||||||
"Plugins_Out_of": "out of",
|
"Plugins_Out_of": "out of",
|
||||||
"Plugins_Unprocessed_Events": "Unprocessed Events",
|
"Plugins_Unprocessed_Events": "Unprocessed Events",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "week",
|
"Presence_CalHead_week": "week",
|
||||||
"Presence_CalHead_year": "year",
|
"Presence_CalHead_year": "year",
|
||||||
"Presence_CallHead_Devices": "Devices",
|
"Presence_CallHead_Devices": "Devices",
|
||||||
|
"Presence_Key_OnlineNow": "Now online",
|
||||||
|
"Presence_Key_OnlineNow_desc": "Device detected in the last scan as online.",
|
||||||
|
"Presence_Key_OnlinePast": "Past online",
|
||||||
|
"Presence_Key_OnlinePastMiss": "Past online (miss-match)",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "Device online in the past, but currently offline, but the start session might be missing or has conflicting data. (might be a bug - please submit a PR if you know how to fix it - I'm a bit lost in code here)",
|
||||||
|
"Presence_Key_OnlinePast_desc": "Device online in the past, but currently offline.",
|
||||||
"Presence_Loading": "Loading...",
|
"Presence_Loading": "Loading...",
|
||||||
"Presence_Shortcut_AllDevices": "My Devices",
|
"Presence_Shortcut_AllDevices": "My Devices",
|
||||||
"Presence_Shortcut_Archived": "Archived",
|
"Presence_Shortcut_Archived": "Archived",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "Override value",
|
"Setting_Override": "Override value",
|
||||||
"Setting_Override_Description": "Enabling this option will override an App supplied default value with the value specified above.",
|
"Setting_Override_Description": "Enabling this option will override an App supplied default value with the value specified above.",
|
||||||
"Settings_Metadata_Toggle": "Show/hide metadata for the given setting.",
|
"Settings_Metadata_Toggle": "Show/hide metadata for the given setting.",
|
||||||
|
"Settings_Show_Description": "Show setting description.",
|
||||||
"Settings_device_Scanners_desync": "⚠ Device scanner schedules are out-of-sync.",
|
"Settings_device_Scanners_desync": "⚠ Device scanner schedules are out-of-sync.",
|
||||||
"Settings_device_Scanners_desync_popup": "Schedules of devices scanners (<code>*_RUN_SCHD</code>) are not the same. This will result into inconsistent device online/offline notifications. Unless this is intended, please use the same schedule for all enabled <b>🔍Device scanners</b>.",
|
"Settings_device_Scanners_desync_popup": "Schedules of devices scanners (<code>*_RUN_SCHD</code>) are not the same. This will result into inconsistent device online/offline notifications. Unless this is intended, please use the same schedule for all enabled <b>🔍Device scanners</b>.",
|
||||||
"Speedtest_Results": "Speedtest Results",
|
"Speedtest_Results": "Speedtest Results",
|
||||||
@@ -651,11 +671,11 @@
|
|||||||
"UI_ICONS_name": "Pre-defined icons",
|
"UI_ICONS_name": "Pre-defined icons",
|
||||||
"UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "UI Language",
|
"UI_LANG_name": "UI Language",
|
||||||
"UI_MY_DEVICES_description": "Devices of which statuses should be shown in the default <b>My Devices</b> view. (<code>CTRL + Click</code> to select/deselect)",
|
"UI_MY_DEVICES_description": "Devices of which statuses should be shown in the default <b>My Devices</b> view.",
|
||||||
"UI_MY_DEVICES_name": "Show in My Devices view",
|
"UI_MY_DEVICES_name": "Show in My Devices view",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Mac prefixes which shouldn't be marked as Random devices. Enter for example <code>52</code> to exclude devices starting with <code>52:xx:xx:xx:xx:xx</code> from being marked as devices with a random MAC address.",
|
"UI_NOT_RANDOM_MAC_description": "Mac prefixes which shouldn't be marked as Random devices. Enter for example <code>52</code> to exclude devices starting with <code>52:xx:xx:xx:xx:xx</code> from being marked as devices with a random MAC address.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "Don't mark as Random",
|
"UI_NOT_RANDOM_MAC_name": "Don't mark as Random",
|
||||||
"UI_PRESENCE_description": "Select what statuses should be shown in the <b>Device presence</b> chart in the <a href=\"/devices.php\" target=\"_blank\">Devices</a> page. (<code>CTRL + Click</code> to select/deselect)",
|
"UI_PRESENCE_description": "Select what statuses should be shown in the <b>Device presence</b> chart in the <a href=\"/devices.php\" target=\"_blank\">Devices</a> page.",
|
||||||
"UI_PRESENCE_name": "Show in presence chart",
|
"UI_PRESENCE_name": "Show in presence chart",
|
||||||
"UI_REFRESH_description": "Enter number of seconds after which the UI reloads. Set to <code>0</code> to disable.",
|
"UI_REFRESH_description": "Enter number of seconds after which the UI reloads. Set to <code>0</code> to disable.",
|
||||||
"UI_REFRESH_name": "Auto-refresh UI",
|
"UI_REFRESH_name": "Auto-refresh UI",
|
||||||
|
|||||||
26
front/php/templates/language/es_es.json
Executable file → Normal file
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"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=\"/api/table_custom_endpoint.json\" target=\"_blank\">archivo <code>table_custom_endpoint.json</code ></a>.",
|
"API_CUSTOM_SQL_description": "Puede especificar una consulta SQL personalizada que generará un archivo JSON y luego lo expondrá a través del <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\">archivo <code>table_custom_endpoint.json</code ></a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint personalizado",
|
"API_CUSTOM_SQL_name": "Endpoint personalizado",
|
||||||
|
"API_TOKEN_description": "Token de API para asegurar la comunicación, puede generar uno o introducir cualquier valor. Se envía en el encabezado de solicitud. Se utiliza en el plugin <code>SYNC</code> del servidor GraphQL.",
|
||||||
|
"API_TOKEN_name": "Token de la API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"APPRISE_HOST_description": "URL del host de Apprise que comienza con <code>http://</code> o <code>https://</code>. (no olvide incluir <code>/notify</code> al final)",
|
"APPRISE_HOST_description": "URL del host de Apprise que comienza con <code>http://</code> o <code>https://</code>. (no olvide incluir <code>/notify</code> al final)",
|
||||||
@@ -72,7 +74,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Eliminar eventos anteriores a",
|
"DAYS_TO_KEEP_EVENTS_name": "Eliminar eventos anteriores a",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalles del dispositivo",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalles del dispositivo",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copiar detalles del dispositivo de la lista desplegable. Todo en esta página se sobrescribirá",
|
"DevDetail_Copy_Device_Tooltip": "Copiar detalles del dispositivo de la lista desplegable. Todo en esta página se sobrescribirá",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Alerta a todos los eventos",
|
"DevDetail_EveandAl_AlertAllEvents": "Notificaciones de eventos",
|
||||||
"DevDetail_EveandAl_AlertDown": "Alerta de caída",
|
"DevDetail_EveandAl_AlertDown": "Alerta de caída",
|
||||||
"DevDetail_EveandAl_Archived": "Archivada",
|
"DevDetail_EveandAl_Archived": "Archivada",
|
||||||
"DevDetail_EveandAl_NewDevice": "Nuevo dispositivo",
|
"DevDetail_EveandAl_NewDevice": "Nuevo dispositivo",
|
||||||
@@ -207,6 +209,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Favorito(s)",
|
"Device_Shortcut_Favorites": "Favorito(s)",
|
||||||
"Device_Shortcut_NewDevices": "Nuevo(s)",
|
"Device_Shortcut_NewDevices": "Nuevo(s)",
|
||||||
"Device_Shortcut_OnlineChart": "Presencia del dispositivo a lo largo del tiempo",
|
"Device_Shortcut_OnlineChart": "Presencia del dispositivo a lo largo del tiempo",
|
||||||
|
"Device_TableHead_AlertDown": "Alerta desactivada",
|
||||||
"Device_TableHead_Connected_Devices": "Conexiones",
|
"Device_TableHead_Connected_Devices": "Conexiones",
|
||||||
"Device_TableHead_Favorite": "Favorito",
|
"Device_TableHead_Favorite": "Favorito",
|
||||||
"Device_TableHead_FirstSession": "1ra. sesión",
|
"Device_TableHead_FirstSession": "1ra. sesión",
|
||||||
@@ -224,9 +227,11 @@
|
|||||||
"Device_TableHead_Owner": "Propietario",
|
"Device_TableHead_Owner": "Propietario",
|
||||||
"Device_TableHead_Parent_MAC": "Nodo principal de la MAC",
|
"Device_TableHead_Parent_MAC": "Nodo principal de la MAC",
|
||||||
"Device_TableHead_Port": "Puerto",
|
"Device_TableHead_Port": "Puerto",
|
||||||
|
"Device_TableHead_PresentLastScan": "Historial",
|
||||||
"Device_TableHead_RowID": "Row ID",
|
"Device_TableHead_RowID": "Row ID",
|
||||||
"Device_TableHead_Rowid": "Row ID",
|
"Device_TableHead_Rowid": "Row ID",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "Fuente del plugin",
|
||||||
"Device_TableHead_Status": "Situación",
|
"Device_TableHead_Status": "Situación",
|
||||||
"Device_TableHead_SyncHubNodeName": "Nodo de sincronización",
|
"Device_TableHead_SyncHubNodeName": "Nodo de sincronización",
|
||||||
"Device_TableHead_Type": "Tipo",
|
"Device_TableHead_Type": "Tipo",
|
||||||
@@ -279,6 +284,8 @@
|
|||||||
"Events_Tablelenght": "Mostrando entradas del MENÚ",
|
"Events_Tablelenght": "Mostrando entradas del MENÚ",
|
||||||
"Events_Tablelenght_all": "Todos",
|
"Events_Tablelenght_all": "Todos",
|
||||||
"Events_Title": "Eventos",
|
"Events_Title": "Eventos",
|
||||||
|
"GRAPHQL_PORT_description": "El número de puerto del servidor GraphQL.",
|
||||||
|
"GRAPHQL_PORT_name": "Puerto GraphQL",
|
||||||
"Gen_Action": "Acción",
|
"Gen_Action": "Acción",
|
||||||
"Gen_Add": "Añadir",
|
"Gen_Add": "Añadir",
|
||||||
"Gen_Add_All": "Añadir todo",
|
"Gen_Add_All": "Añadir todo",
|
||||||
@@ -291,8 +298,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "Correcto - La interfaz puede tardar en actualizarse si se está ejecutando un escaneo.",
|
"Gen_DataUpdatedUITakesTime": "Correcto - La interfaz puede tardar en actualizarse si se está ejecutando un escaneo.",
|
||||||
"Gen_Delete": "Eliminar",
|
"Gen_Delete": "Eliminar",
|
||||||
"Gen_DeleteAll": "Eliminar todo",
|
"Gen_DeleteAll": "Eliminar todo",
|
||||||
|
"Gen_Description": "Descripción",
|
||||||
"Gen_Error": "Error",
|
"Gen_Error": "Error",
|
||||||
"Gen_Filter": "Filtro",
|
"Gen_Filter": "Filtro",
|
||||||
|
"Gen_Generate": "Generar",
|
||||||
"Gen_LockedDB": "Fallo - La base de datos puede estar bloqueada - Pulsa F1 -> Ajustes de desarrolladores -> Consola o prueba más tarde.",
|
"Gen_LockedDB": "Fallo - La base de datos puede estar bloqueada - Pulsa F1 -> Ajustes de desarrolladores -> Consola o prueba más tarde.",
|
||||||
"Gen_Offline": "Desconectado",
|
"Gen_Offline": "Desconectado",
|
||||||
"Gen_Okay": "Aceptar",
|
"Gen_Okay": "Aceptar",
|
||||||
@@ -318,6 +327,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Se trata de una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>primera sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
|
"HRS_TO_KEEP_NEWDEV_description": "Se trata de una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>primera sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nuevos dispositivos después",
|
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nuevos dispositivos después",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "Se trata de 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",
|
||||||
"HelpFAQ_Cat_Detail": "Detalles",
|
"HelpFAQ_Cat_Detail": "Detalles",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "¿Qué significa? ",
|
"HelpFAQ_Cat_Detail_300_head": "¿Qué significa? ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "significa un dispositivo de red (un dispositivo del tipo AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router,Adaptador LAN USB, Adaptador WIFI USB o Internet). Los tipos personalizados pueden añadirse mediante el ajuste <code>NETWORK_DEVICE_TYPES</code>.",
|
"HelpFAQ_Cat_Detail_300_text_a": "significa un dispositivo de red (un dispositivo del tipo AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router,Adaptador LAN USB, Adaptador WIFI USB o Internet). Los tipos personalizados pueden añadirse mediante el ajuste <code>NETWORK_DEVICE_TYPES</code>.",
|
||||||
@@ -361,6 +372,7 @@
|
|||||||
"Loading": "Cargando...",
|
"Loading": "Cargando...",
|
||||||
"Login_Box": "Ingrese su contraseña",
|
"Login_Box": "Ingrese su contraseña",
|
||||||
"Login_Default_PWD": "La contraseña por defecto \"123456\" sigue activa.",
|
"Login_Default_PWD": "La contraseña por defecto \"123456\" sigue activa.",
|
||||||
|
"Login_Info": "Las contraseñas se establecen a través del plugin Establecer contraseña. Compruebe la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentación SETPWD</a> si tiene problemas para iniciar sesión.",
|
||||||
"Login_Psw-box": "Contraseña",
|
"Login_Psw-box": "Contraseña",
|
||||||
"Login_Psw_alert": "¡Alerta de Contraseña!",
|
"Login_Psw_alert": "¡Alerta de Contraseña!",
|
||||||
"Login_Psw_folder": "en la carpeta config.",
|
"Login_Psw_folder": "en la carpeta config.",
|
||||||
@@ -570,6 +582,7 @@
|
|||||||
"Plugins_DeleteAll": "Eliminar todo (se ignoran los filtros)",
|
"Plugins_DeleteAll": "Eliminar todo (se ignoran los filtros)",
|
||||||
"Plugins_Filters_Mac": "Filtro MAC",
|
"Plugins_Filters_Mac": "Filtro MAC",
|
||||||
"Plugins_History": "Historial de eventos",
|
"Plugins_History": "Historial de eventos",
|
||||||
|
"Plugins_Obj_DeleteListed": "Eliminar objetos enumerados",
|
||||||
"Plugins_Objects": "Objetos del Plugin",
|
"Plugins_Objects": "Objetos del Plugin",
|
||||||
"Plugins_Out_of": "de",
|
"Plugins_Out_of": "de",
|
||||||
"Plugins_Unprocessed_Events": "Eventos sin procesar",
|
"Plugins_Unprocessed_Events": "Eventos sin procesar",
|
||||||
@@ -581,6 +594,12 @@
|
|||||||
"Presence_CalHead_week": "semana",
|
"Presence_CalHead_week": "semana",
|
||||||
"Presence_CalHead_year": "año",
|
"Presence_CalHead_year": "año",
|
||||||
"Presence_CallHead_Devices": "Dispositivos",
|
"Presence_CallHead_Devices": "Dispositivos",
|
||||||
|
"Presence_Key_OnlineNow": "En línea",
|
||||||
|
"Presence_Key_OnlineNow_desc": "Dispositivo detectado en el último escaneo como conectado.",
|
||||||
|
"Presence_Key_OnlinePast": "Anterior en línea",
|
||||||
|
"Presence_Key_OnlinePastMiss": "Anterior en línea (miss-match)",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "Dispositivo en línea en el pasado, pero actualmente desconectado, pero la sesión de inicio podría estar faltando o tiene datos conflictivos. (Puede ser un error - por favor envíe un PR si sabe cómo solucionarlo - estoy un poco perdido en código)",
|
||||||
|
"Presence_Key_OnlinePast_desc": "Dispositivo en línea en el pasado, pero actualmente no conectado.",
|
||||||
"Presence_Loading": "Cargando...",
|
"Presence_Loading": "Cargando...",
|
||||||
"Presence_Shortcut_AllDevices": "Mis dispositivos",
|
"Presence_Shortcut_AllDevices": "Mis dispositivos",
|
||||||
"Presence_Shortcut_Archived": "Archivado(s)",
|
"Presence_Shortcut_Archived": "Archivado(s)",
|
||||||
@@ -632,6 +651,7 @@
|
|||||||
"Setting_Override": "Sobreescribir el valor",
|
"Setting_Override": "Sobreescribir el valor",
|
||||||
"Setting_Override_Description": "Habilitar esta opción anulará un valor predeterminado proporcionado por la aplicación con el valor especificado anteriormente.",
|
"Setting_Override_Description": "Habilitar esta opción anulará un valor predeterminado proporcionado por la aplicación con el valor especificado anteriormente.",
|
||||||
"Settings_Metadata_Toggle": "Mostrar/ocultar los metadatos de la configuración.",
|
"Settings_Metadata_Toggle": "Mostrar/ocultar los metadatos de la configuración.",
|
||||||
|
"Settings_Show_Description": "Mostrar descripción de la configuración.",
|
||||||
"Settings_Title": "<i class=\"fa fa-cog\"> Configuración</i>",
|
"Settings_Title": "<i class=\"fa fa-cog\"> Configuración</i>",
|
||||||
"Settings_device_Scanners_desync": "⚠ Los horarios del escáner de los dispositivos no están sincronizados.",
|
"Settings_device_Scanners_desync": "⚠ Los horarios del escáner de los dispositivos no están sincronizados.",
|
||||||
"Settings_device_Scanners_desync_popup": "Los horarios de escáneres de dispositivos (<code> *_RUN_SCHD</code> ) no son lo mismo. Esto resultará en notificaciones inconsistentes del dispositivo en línea/fuera de línea. A menos que sea así, utilice el mismo horario para todos los habilitados.<b> 🔍Escáneres de dispositivos</b> .",
|
"Settings_device_Scanners_desync_popup": "Los horarios de escáneres de dispositivos (<code> *_RUN_SCHD</code> ) no son lo mismo. Esto resultará en notificaciones inconsistentes del dispositivo en línea/fuera de línea. A menos que sea así, utilice el mismo horario para todos los habilitados.<b> 🔍Escáneres de dispositivos</b> .",
|
||||||
@@ -719,11 +739,11 @@
|
|||||||
"UI_ICONS_name": "Iconos predefinidos",
|
"UI_ICONS_name": "Iconos predefinidos",
|
||||||
"UI_LANG_description": "Seleccione el idioma preferido para la interfaz de usuario. Ayude a traducir o sugiera idiomas en el portal en línea de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Seleccione el idioma preferido para la interfaz de usuario. Ayude a traducir o sugiera idiomas en el portal en línea de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Idioma de interfaz",
|
"UI_LANG_name": "Idioma de interfaz",
|
||||||
"UI_MY_DEVICES_description": "Dispositivos cuyos estados deben mostrarse en la vista por defecto <b>Mis dispositivos</b>. (<code>CTRL + Click</code> para seleccionar/deseleccionar)",
|
"UI_MY_DEVICES_description": "Dispositivos cuyos estados deben mostrarse en la vista por defecto <b>Mis dispositivos</b>.",
|
||||||
"UI_MY_DEVICES_name": "Mostrar en Mis dispositivos",
|
"UI_MY_DEVICES_name": "Mostrar en Mis dispositivos",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Prefijos Mac que no deberían marcarse como dispositivos aleatorios. Introduzca por ejemplo <code>52</code> para excluir los dispositivos que empiecen por <code>52:xx:xx:xx:xx</code> para ser marcados como dispositivos con una dirección MAC aleatoria.",
|
"UI_NOT_RANDOM_MAC_description": "Prefijos Mac que no deberían marcarse como dispositivos aleatorios. Introduzca por ejemplo <code>52</code> para excluir los dispositivos que empiecen por <code>52:xx:xx:xx:xx</code> para ser marcados como dispositivos con una dirección MAC aleatoria.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "No marcar como aleatoria",
|
"UI_NOT_RANDOM_MAC_name": "No marcar como aleatoria",
|
||||||
"UI_PRESENCE_description": "Elige que estados del dispositivo deben mostrarse en la gráfica de <b>Presencia del dispositivo a lo largo del tiempo</b> de la página de <a href=\"/devices.php\" target=\"_blank\">Dispositivos</a>. (<code>CTRL + Clic</code> para seleccionar / deseleccionar)",
|
"UI_PRESENCE_description": "Elige que estados del dispositivo deben mostrarse en la gráfica de <b>Presencia del dispositivo a lo largo del tiempo</b> de la página de <a href=\"/devices.php\" target=\"_blank\">Dispositivos</a>.",
|
||||||
"UI_PRESENCE_name": "Mostrar en el gráfico de presencia",
|
"UI_PRESENCE_name": "Mostrar en el gráfico de presencia",
|
||||||
"UI_REFRESH_description": "Ingrese el número de segundos después de los cuales se recarga la interfaz de usuario. Ajustado a <code> 0 </code> para desactivar.",
|
"UI_REFRESH_description": "Ingrese el número de segundos después de los cuales se recarga la interfaz de usuario. Ajustado a <code> 0 </code> para desactivar.",
|
||||||
"UI_REFRESH_name": "Actualización automática de la interfaz de usuario",
|
"UI_REFRESH_name": "Actualización automática de la interfaz de usuario",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Vous pouvez spécifier votre propre requête SQL qui retournera un fichier JSON et l'exposer via <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> le point de terminaison de fichier</a>.",
|
"API_CUSTOM_SQL_description": "Vous pouvez spécifier votre propre requête SQL qui retournera un fichier JSON et l'exposer via <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> le point de terminaison de fichier</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Point de terminaison personnalisé",
|
"API_CUSTOM_SQL_name": "Point de terminaison personnalisé",
|
||||||
|
"API_TOKEN_description": "Vous pouvez renseigner ou générer un jeton API pour sécuriser les échanges. Il est transmis dans le header de la requête. C'est utilisé dans le plugin <code>SYNC</code> du serveur GraphQL.",
|
||||||
|
"API_TOKEN_name": "Jeton d'API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Conçu pour :",
|
"About_Design": "Conçu pour :",
|
||||||
@@ -56,13 +58,13 @@
|
|||||||
"BackDevices_Restore_okay": "Restauration exécutée avec succès.",
|
"BackDevices_Restore_okay": "Restauration exécutée avec succès.",
|
||||||
"BackDevices_darkmode_disabled": "Mode sombre désactivé",
|
"BackDevices_darkmode_disabled": "Mode sombre désactivé",
|
||||||
"BackDevices_darkmode_enabled": "Mode sombre activé",
|
"BackDevices_darkmode_enabled": "Mode sombre activé",
|
||||||
"CLEAR_NEW_FLAG_description": "",
|
"CLEAR_NEW_FLAG_description": "Si activé (<code>0</code> est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront démarqués si la limite de temps (spécifiée en heures) dépasse la durée de <b>Première Session</b>.",
|
||||||
"CLEAR_NEW_FLAG_name": "",
|
"CLEAR_NEW_FLAG_name": "Supprime le nouveau drapeau",
|
||||||
"DAYS_TO_KEEP_EVENTS_description": "Il s'agit d'un paramètre de maintenance. Il indique le nombre de jours pendant lesquels les entrées d'événements seront conservées. Tous les événements plus anciens seront supprimés périodiquement. S'applique également à l'historique des événements du plugin.",
|
"DAYS_TO_KEEP_EVENTS_description": "Il s'agit d'un paramètre de maintenance. Il indique le nombre de jours pendant lesquels les entrées d'événements seront conservées. Tous les événements plus anciens seront supprimés périodiquement. S'applique également à l'historique des événements du plugin.",
|
||||||
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
|
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copier les détails de l'appareil",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copier les détails de l'appareil",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copier les détails de l'appareil dans la liste déroulante. Tout ce qui se trouve sur cette page sera remplacé",
|
"DevDetail_Copy_Device_Tooltip": "Copier les détails de l'appareil dans la liste déroulante. Tout ce qui se trouve sur cette page sera remplacé",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Alerter de tous les événements",
|
"DevDetail_EveandAl_AlertAllEvents": "Alerter les événements",
|
||||||
"DevDetail_EveandAl_AlertDown": "Alerte de panne",
|
"DevDetail_EveandAl_AlertDown": "Alerte de panne",
|
||||||
"DevDetail_EveandAl_Archived": "Archivés",
|
"DevDetail_EveandAl_Archived": "Archivés",
|
||||||
"DevDetail_EveandAl_NewDevice": "Nouvel appareil",
|
"DevDetail_EveandAl_NewDevice": "Nouvel appareil",
|
||||||
@@ -74,9 +76,9 @@
|
|||||||
"DevDetail_EveandAl_Skip": "Passer les notifications répétées durant",
|
"DevDetail_EveandAl_Skip": "Passer les notifications répétées durant",
|
||||||
"DevDetail_EveandAl_Title": "<i class=\"fa fa-bolt\"></i> Configuration des événements & Alertes",
|
"DevDetail_EveandAl_Title": "<i class=\"fa fa-bolt\"></i> Configuration des événements & Alertes",
|
||||||
"DevDetail_Events_CheckBox": "Masquer les événements de connexion",
|
"DevDetail_Events_CheckBox": "Masquer les événements de connexion",
|
||||||
"DevDetail_GoToNetworkNode": "Naviguer à la page Réseau pour le noeud sélectionné",
|
"DevDetail_GoToNetworkNode": "Naviguer à la page Réseau pour le nœud sélectionné.",
|
||||||
"DevDetail_Icon": "Icône",
|
"DevDetail_Icon": "Icône",
|
||||||
"DevDetail_Icon_Descr": "Renseigner le nom d'une icône Font Awesome sans le préfixe fa- ou la classe complète ; par ex. fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Renseigner le nom d'une icône Font Awesome sans le préfixe fa- ou la classe complète, par ex. fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Chargement…",
|
"DevDetail_Loading": "Chargement…",
|
||||||
"DevDetail_MainInfo_Comments": "Observations",
|
"DevDetail_MainInfo_Comments": "Observations",
|
||||||
"DevDetail_MainInfo_Favorite": "Favori",
|
"DevDetail_MainInfo_Favorite": "Favori",
|
||||||
@@ -95,10 +97,10 @@
|
|||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
"DevDetail_Network_Node_hover": "Sélectionner l'appareil du réseau principal auquel cet appareil est connecté afin de compléter l'arborescence du Réseau.",
|
"DevDetail_Network_Node_hover": "Sélectionner l'appareil du réseau principal auquel cet appareil est connecté afin de compléter l'arborescence du Réseau.",
|
||||||
"DevDetail_Network_Port_hover": "Le port auquel cet appareil est connecté sur l'appareil du réseau principal. Si vide, une icône Wifi est affichée dans l'arborescence du Réseau.",
|
"DevDetail_Network_Port_hover": "Le port auquel cet appareil est connecté sur l'appareil du réseau principal. Si vide, une icône Wifi est affichée dans l'arborescence du Réseau.",
|
||||||
"DevDetail_Nmap_Scans": "Scans NMAP manuels",
|
"DevDetail_Nmap_Scans": "Scans manuels via Nmap",
|
||||||
"DevDetail_Nmap_Scans_desc": "Vous pouvez lancer des scans NMAP manuels. Vous pouvez aussi programmer des sans réguliers via le plugin Services & Ports (NMAP). Aller dans les <a href='/settings.php' target='_blank'>Paramètres</a> pour plus de details",
|
"DevDetail_Nmap_Scans_desc": "Vous pouvez lancer des scans NMAP manuels. Vous pouvez aussi programmer des sans réguliers via le plugin Services & Ports (NMAP). Aller dans les <a href='/settings.php' target='_blank'>Paramètres</a> pour plus de details",
|
||||||
"DevDetail_Nmap_buttonDefault": "Scan par défaut",
|
"DevDetail_Nmap_buttonDefault": "Scan par défaut",
|
||||||
"DevDetail_Nmap_buttonDefault_text": "Scan par défaut : NMAP scanne les 1 000 premiers ports pour chaque demande de scan de protocole. Cela couvre environ 93% des ports TCP et 49% des ports UDP (environ 5 secondes).",
|
"DevDetail_Nmap_buttonDefault_text": "Scan par défaut : NMAP scanne les 1 000 premiers ports pour chaque demande de scan de protocole. Cela couvre environ 93% des ports TCP et 49% des ports UDP (environ 5 secondes)",
|
||||||
"DevDetail_Nmap_buttonDetail": "Scan détaillé",
|
"DevDetail_Nmap_buttonDetail": "Scan détaillé",
|
||||||
"DevDetail_Nmap_buttonDetail_text": "Scan détaillé : scan par défaut avec la détection de système d'exploitation, la détection de version, l'analyse de script et le traceroute (jusqu'à 30 secondes ou plus)",
|
"DevDetail_Nmap_buttonDetail_text": "Scan détaillé : scan par défaut avec la détection de système d'exploitation, la détection de version, l'analyse de script et le traceroute (jusqu'à 30 secondes ou plus)",
|
||||||
"DevDetail_Nmap_buttonFast": "Scan rapide",
|
"DevDetail_Nmap_buttonFast": "Scan rapide",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Favoris",
|
"Device_Shortcut_Favorites": "Favoris",
|
||||||
"Device_Shortcut_NewDevices": "Nouveaux appareils",
|
"Device_Shortcut_NewDevices": "Nouveaux appareils",
|
||||||
"Device_Shortcut_OnlineChart": "Présence de l'appareil",
|
"Device_Shortcut_OnlineChart": "Présence de l'appareil",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Connexions",
|
"Device_TableHead_Connected_Devices": "Connexions",
|
||||||
"Device_TableHead_Favorite": "Favori",
|
"Device_TableHead_Favorite": "Favori",
|
||||||
"Device_TableHead_FirstSession": "Première session",
|
"Device_TableHead_FirstSession": "Première session",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "Propriétaire",
|
"Device_TableHead_Owner": "Propriétaire",
|
||||||
"Device_TableHead_Parent_MAC": "MAC du nœud principal",
|
"Device_TableHead_Parent_MAC": "MAC du nœud principal",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "ID de colonne",
|
"Device_TableHead_RowID": "ID de colonne",
|
||||||
"Device_TableHead_Rowid": "ID de colonne",
|
"Device_TableHead_Rowid": "ID de colonne",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "Source du plugin",
|
||||||
"Device_TableHead_Status": "État",
|
"Device_TableHead_Status": "État",
|
||||||
"Device_TableHead_SyncHubNodeName": "Noeud de synchro",
|
"Device_TableHead_SyncHubNodeName": "Noeud de synchro",
|
||||||
"Device_TableHead_Type": "Type",
|
"Device_TableHead_Type": "Type",
|
||||||
@@ -230,7 +235,7 @@
|
|||||||
"Device_Title": "Appareils",
|
"Device_Title": "Appareils",
|
||||||
"Donations_Others": "Autres",
|
"Donations_Others": "Autres",
|
||||||
"Donations_Platforms": "Plateformes de sponsoring",
|
"Donations_Platforms": "Plateformes de sponsoring",
|
||||||
"Donations_Text": "Coucou 👋! </br> Merci d'avoir cliqué ici 😅 </br> </br> J'essaie de récolter des donations pour vous faire un meilleur produit. En plus, ça m'aide à éviter le burn-out pour développer cette application plus longtemps. Toute subvention (régulière ou non) me donne envie de poursuivre le développement de cette application.</br> J'aimerais réduire mon activité principale pour me concentrer plus longuement à NetAlertX. Vous auriez plus de fonctionnalités, une application mieux finie et avec moins de bugs.</br> </br> Merci de votre lecture - je vous suis reconnaissant pour votre soutien ❤🙏 </br> </br> Version courte : en me soutenant, vous aurez : </br> </br> <ul><li>Des mises à jour régulières pour protéger vos données personnelles et familiales 🔄</li><li>Moins de bugs 🐛🔫</li><li>Des fonctionnalités plus riches et plus nombreuses ➕</li><li>Je ne me retrouve pas en burn-out 🔥🤯</li><li>Des versions moins à la va-vite 💨</li><li>une meilleure documentation <20></li><li>Un support meilleur et plus réactif en cas de problème 🆘</li></ul> </br> 📧Envoyez-moi un courriel à <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si vous voulez mebcontacter ou du je peux ajouter une autre plateforme de soutien. </br>",
|
"Donations_Text": "Coucou 👋 ! </br> Merci d'avoir cliqué ici 😅 </br> </br> J'essaie de récolter des donations pour vous faire un meilleur produit. En plus, ça m'aide à éviter le burn-out pour développer cette application plus longtemps. Toute subvention (régulière ou non) me donne envie de poursuivre le développement de cette application.</br> J'aimerais réduire mon activité principale pour me concentrer plus longuement à NetAlertX. Vous auriez plus de fonctionnalités, une application mieux finie et avec moins de bugs.</br> </br> Merci de votre lecture - je vous suis reconnaissant pour votre soutien ❤🙏 </br> </br> Version courte : en me soutenant, vous aurez : </br> </br> <ul><li>Des mises à jour régulières pour protéger vos données personnelles et familiales 🔄</li><li>Moins de bugs 🐛🔫</li><li>Des fonctionnalités plus riches et plus nombreuses ➕</li><li>Je ne me retrouve pas en burn-out 🔥🤯</li><li>Des versions moins à la va-vite 💨</li><li>une meilleure documentation <20></li><li>Un support meilleur et plus réactif en cas de problème 🆘</li></ul> </br> 📧Envoyez-moi un courriel à <a href='mailto :jokob@duck.com ?subject=NetAlertX'>jokob@duck.com</a> si vous voulez me contacter ou du je peux ajouter une autre plateforme de soutien. </br>",
|
||||||
"Donations_Title": "Dons",
|
"Donations_Title": "Dons",
|
||||||
"ENABLE_PLUGINS_description": "Active les fonctionnalités des <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/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_description": "Active les fonctionnalités des <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">Plugins</a>. Charger des plugins nécessite plus de ressources, il est recommandé de les désactiver sur des systèmes de faible puissance.",
|
||||||
"ENABLE_PLUGINS_name": "Activer les Plugins",
|
"ENABLE_PLUGINS_name": "Activer les Plugins",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Afficher _MENU_ entrées",
|
"Events_Tablelenght": "Afficher _MENU_ entrées",
|
||||||
"Events_Tablelenght_all": "Tous",
|
"Events_Tablelenght_all": "Tous",
|
||||||
"Events_Title": "Évènements",
|
"Events_Title": "Évènements",
|
||||||
|
"GRAPHQL_PORT_description": "Le numéro de port du serveur GraphQL.",
|
||||||
|
"GRAPHQL_PORT_name": "Port GraphQL",
|
||||||
"Gen_Action": "Action",
|
"Gen_Action": "Action",
|
||||||
"Gen_Add": "Ajouter",
|
"Gen_Add": "Ajouter",
|
||||||
"Gen_Add_All": "Ajouter tous",
|
"Gen_Add_All": "Ajouter tous",
|
||||||
@@ -276,13 +283,15 @@
|
|||||||
"Gen_AreYouSure": "Êtes-vous sûr ?",
|
"Gen_AreYouSure": "Êtes-vous sûr ?",
|
||||||
"Gen_Backup": "Lancer la sauvegarde",
|
"Gen_Backup": "Lancer la sauvegarde",
|
||||||
"Gen_Cancel": "Annuler",
|
"Gen_Cancel": "Annuler",
|
||||||
"Gen_Change": "",
|
"Gen_Change": "Changement",
|
||||||
"Gen_Copy": "Lancer",
|
"Gen_Copy": "Lancer",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK - cela peut prendre du temps à l'interface pour se mettre à jour si un scan est en cours.",
|
"Gen_DataUpdatedUITakesTime": "OK - cela peut prendre du temps à l'interface pour se mettre à jour si un scan est en cours.",
|
||||||
"Gen_Delete": "Supprimer",
|
"Gen_Delete": "Supprimer",
|
||||||
"Gen_DeleteAll": "Supprimer tous",
|
"Gen_DeleteAll": "Supprimer tous",
|
||||||
|
"Gen_Description": "Description",
|
||||||
"Gen_Error": "Erreur",
|
"Gen_Error": "Erreur",
|
||||||
"Gen_Filter": "Filtrer",
|
"Gen_Filter": "Filtrer",
|
||||||
|
"Gen_Generate": "Générer",
|
||||||
"Gen_LockedDB": "Erreur - La base de données est peut-être verrouillée - Vérifier avec les outils de dév via F12 -> Console ou essayer plus tard.",
|
"Gen_LockedDB": "Erreur - La base de données est peut-être verrouillée - Vérifier avec les outils de dév via F12 -> Console ou essayer plus tard.",
|
||||||
"Gen_Offline": "Hors ligne",
|
"Gen_Offline": "Hors ligne",
|
||||||
"Gen_Okay": "OK",
|
"Gen_Okay": "OK",
|
||||||
@@ -295,7 +304,7 @@
|
|||||||
"Gen_Save": "Enregistrer",
|
"Gen_Save": "Enregistrer",
|
||||||
"Gen_Saved": "Enregistré",
|
"Gen_Saved": "Enregistré",
|
||||||
"Gen_Search": "Recherche",
|
"Gen_Search": "Recherche",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_SelectToPreview": "Sélectionnez pour prévisualiser",
|
||||||
"Gen_Selected_Devices": "Appareils sélectionnés :",
|
"Gen_Selected_Devices": "Appareils sélectionnés :",
|
||||||
"Gen_Switch": "Basculer",
|
"Gen_Switch": "Basculer",
|
||||||
"Gen_Upd": "Mise à jour réussie",
|
"Gen_Upd": "Mise à jour réussie",
|
||||||
@@ -306,8 +315,10 @@
|
|||||||
"Gen_Work_In_Progress": "Travaux en cours, c'est le bon moment pour faire un retour via la liste d'anomalies sur Github https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Travaux en cours, c'est le bon moment pour faire un retour via la liste d'anomalies sur Github https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"General_display_name": "Général",
|
"General_display_name": "Général",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Paramétrage de maintenance. S'il est activé (<code>0</code> s'il est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront supprimés si leur durée depuis la <b>première session</b> est plus ancienne que le nombre d'heures paramétré. Utilisez ce paramétrage si vous voulez supprimer automatiquement les <b>Nouveaux appareils</b> après <code>X</code> heures.",
|
"HRS_TO_KEEP_NEWDEV_description": "Paramètre de maintenance. S'il est activé (<code>0</code> s'il est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront supprimés si leur durée depuis la <b>première session</b> est plus ancienne que le nombre d'heures paramétré. Utilisez ce paramétrage si vous voulez supprimer automatiquement les <b>Nouveaux appareils</b> après <code>X</code> heures.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Garder les appareils en Nouveau pendant",
|
"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 heure hors ligne</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",
|
||||||
"HelpFAQ_Cat_Detail": "Détails",
|
"HelpFAQ_Cat_Detail": "Détails",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "Que signifie ",
|
"HelpFAQ_Cat_Detail_300_head": "Que signifie ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "signifie que cela représente un équipement réseau (Access Point, Gateway, Firewall, Hyperviseur, Powerline, Switch, WLAN, CPL, adaptateur Ethernet USB, adaptateur Wifi USB, Internet). Les types d'appareils personnalisés peuvent être ajoutés via le paramètre <code>NETWORK_DEVICE_TYPES</code>.",
|
"HelpFAQ_Cat_Detail_300_text_a": "signifie que cela représente un équipement réseau (Access Point, Gateway, Firewall, Hyperviseur, Powerline, Switch, WLAN, CPL, adaptateur Ethernet USB, adaptateur Wifi USB, Internet). Les types d'appareils personnalisés peuvent être ajoutés via le paramètre <code>NETWORK_DEVICE_TYPES</code>.",
|
||||||
@@ -332,7 +343,7 @@
|
|||||||
"HelpFAQ_Cat_General_102_head": "Un message m'indique que la base de données est en lecture seule.",
|
"HelpFAQ_Cat_General_102_head": "Un message m'indique que la base de données est en lecture seule.",
|
||||||
"HelpFAQ_Cat_General_102_text": "Vérifiez dans le répertoire de NetAlertX si la base de données (db) possède les bonnes permissions :<br> <span class=\"text-danger help_faq_code\">drwxrwx--- 2 (votre nom d'utilisateur) www-data</span><br> Si la permission n'est pas correcte, vous pouvez la modifier en passant les commandes suivantes dans le terminal :<br> <span class=\"text-danger help_faq_code\">sudo chgrp -R www-data /app/db<br>chmod -R 770 /app/db</span><br>Si la base de données est encore en lecture seule, tentez de la réinstaller ou de restaurer une sauvegarde de la base à partir de la page de maintenance.",
|
"HelpFAQ_Cat_General_102_text": "Vérifiez dans le répertoire de NetAlertX si la base de données (db) possède les bonnes permissions :<br> <span class=\"text-danger help_faq_code\">drwxrwx--- 2 (votre nom d'utilisateur) www-data</span><br> Si la permission n'est pas correcte, vous pouvez la modifier en passant les commandes suivantes dans le terminal :<br> <span class=\"text-danger help_faq_code\">sudo chgrp -R www-data /app/db<br>chmod -R 770 /app/db</span><br>Si la base de données est encore en lecture seule, tentez de la réinstaller ou de restaurer une sauvegarde de la base à partir de la page de maintenance.",
|
||||||
"HelpFAQ_Cat_General_102docker_head": "Erreur de base de données (erreurs AJAX, lecture seule, non trouvé)",
|
"HelpFAQ_Cat_General_102docker_head": "Erreur de base de données (erreurs AJAX, lecture seule, non trouvé)",
|
||||||
"HelpFAQ_Cat_General_102docker_text": "Vérifiez avec attention que vous avez suivi les instructions dans le <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles\">lisez-moi (readme) Docker (contient les infos les plus récentes)</a>. <br/> <br/> <ul data-sourcepos=\"49:4-52:146\" dir=\"auto\"><li data-sourcepos=\"49:4-49:106\"> Télécharger la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/db/app.db\">base de données originelle depuis GitHub</a>.</li><li data-sourcepos=\"50:4-50:195\">Relier le fichier <code>app.db</code> (<g-emoji class=\"g-emoji\" alias=\"warning\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/26a0.png\">⚠</g-emoji> pas le dossier) au-dessus avec <code>/app/db/app.db</code> (plus de détails dans les <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles#-examples\">Exemples</a>).</li><li data-sourcepos=\"51:4-51:161\">. Si vous rencontrez des erreurs (erreurs Ajax, impossible d'écrire dans la base, etc.), vérifiez que les permissions sont correctement définies, éventuellement regarder dans les blogs présents dans <code>/app/front/log</code>.</li><li data-sourcepos=\"52:4-52:146\">. Pour résoudre les problèmes de permission, vous pouvez aussi essayer de créer une sauvegarde de la base de données et lancer une restauration via la section <strong>Maintenance > Sauvegarde/Restauration</strong>.</li><li data-sourcepos=\"53:4-53:228\">Si la base de données est en lecture seule, vous pouvez résoudre cela en définissant le propriétaire et le groupe en lançant la commande suivante depuis le système hôte : <code>docker exec netalertx chown -R www-data:www-data /app/db/app.db</code>.</li></ul>",
|
"HelpFAQ_Cat_General_102docker_text": "Vérifiez avec attention que vous avez suivi les instructions dans le <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles\">lisez-moi (readme) Docker (contient les infos les plus récentes)</a>. <br/> <br/> <ul data-sourcepos=\"49:4-52:146\" dir=\"auto\"><li data-sourcepos=\"49:4-49:106\"> Télécharger la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/db/app.db\">base de données originelle depuis GitHub</a>.</li><li data-sourcepos=\"50:4-50:195\">Relier le fichier <code>app.db</code> (<g-emoji class=\"g-emoji\" alias=\"warning\" fallback-src=\"https://github.githubassets.com/images/icons/emoji/unicode/26a0.png\">⚠</g-emoji> pas le dossier) au-dessus avec <code>/app/db/app.db</code> (plus de détails dans les <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles#-examples\">Exemples</a>).</li><li data-sourcepos=\"51:4-51:161\">. Si vous rencontrez des erreurs (erreurs Ajax, impossible d'écrire dans la base, etc.), vérifiez que les permissions sont correctement définies, éventuellement regarder dans les blogs présents dans <code>/app/front/log</code>.</li><li data-sourcepos=\"52:4-52:146\">. Pour résoudre les problèmes de permission, vous pouvez aussi essayer de créer une sauvegarde de la base de données et lancer une restauration via la section <strong>Maintenance > Sauvegarde/Restauration</strong>.</li><li data-sourcepos=\"53:4-53:228\">Si la base de données est en lecture seule, vous pouvez résoudre cela en définissant le propriétaire et le groupe en lançant la commande suivante depuis le système hôte : <code>docker exec netalertx chown -R www-data:www-data /app/db/app.db</code>.</li></ul>",
|
||||||
"HelpFAQ_Cat_General_103_head": "La page d'authentification n'apparaît pas, même après avoir changé le mot de passe.",
|
"HelpFAQ_Cat_General_103_head": "La page d'authentification n'apparaît pas, même après avoir changé le mot de passe.",
|
||||||
"HelpFAQ_Cat_General_103_text": "En plus du mot de passe, le fichier de configuration doit contenir <span class=\"text-danger help_faq_code\">/app/config/app.conf</span>. De plus, le paramètre <span class=\"text-danger help_faq_code\">PIALERT_WEB_PROTECTION</span> doit être à la valeur<span class=\"text-danger help_faq_code\">True</span>.",
|
"HelpFAQ_Cat_General_103_text": "En plus du mot de passe, le fichier de configuration doit contenir <span class=\"text-danger help_faq_code\">/app/config/app.conf</span>. De plus, le paramètre <span class=\"text-danger help_faq_code\">PIALERT_WEB_PROTECTION</span> doit être à la valeur<span class=\"text-danger help_faq_code\">True</span>.",
|
||||||
"HelpFAQ_Cat_Network_600_head": "A quoi sert cette page ?",
|
"HelpFAQ_Cat_Network_600_head": "A quoi sert cette page ?",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Chargement...",
|
"Loading": "Chargement...",
|
||||||
"Login_Box": "Saisir votre mot de passe",
|
"Login_Box": "Saisir votre mot de passe",
|
||||||
"Login_Default_PWD": "Le mot de passe par défaut \"123456\" est encore actif.",
|
"Login_Default_PWD": "Le mot de passe par défaut \"123456\" est encore actif.",
|
||||||
|
"Login_Info": "Les mots de passe sont définis via le plugin Set Password. Vérifiez la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentation de SETPWD</a> si vous rencontrez des difficultés à vous identifier.",
|
||||||
"Login_Psw-box": "Mot de passe",
|
"Login_Psw-box": "Mot de passe",
|
||||||
"Login_Psw_alert": "Alerte de mot de passe !",
|
"Login_Psw_alert": "Alerte de mot de passe !",
|
||||||
"Login_Psw_folder": "dans le dossier de configuration.",
|
"Login_Psw_folder": "dans le dossier de configuration.",
|
||||||
@@ -374,7 +386,7 @@
|
|||||||
"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 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_ImportCSV": "Import CSV",
|
"Maintenance_Tool_ImportCSV": "Import CSV",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "Import CSV",
|
"Maintenance_Tool_ImportCSV_noti": "Import CSV",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "Êtes-vous sûr de vouloir importer le fichier CSV ? Cela écrasera complètement les appareils de votre base de données.",
|
"Maintenance_Tool_ImportCSV_noti_text": "Êtes-vous sûr de vouloir importer le fichier CSV ? Cela <b>écrasera</b> complètement les appareils de votre base de données.",
|
||||||
"Maintenance_Tool_ImportCSV_text": "Avant d'utiliser cette fonctionnalité, il est recommandé de faire une sauvegarde. La fonctionnalité importe un fichier CSV (valeurs séparées par des virgules) contenant la liste des appareils, dont les liens réseau entre les nœuds du réseau et ces appareils. Pour cela, placer un fichier CSV nommé <b>devices.csv</b> dans votre répertoire <b>/config</b>.",
|
"Maintenance_Tool_ImportCSV_text": "Avant d'utiliser cette fonctionnalité, il est recommandé de faire une sauvegarde. La fonctionnalité importe un fichier CSV (valeurs séparées par des virgules) contenant la liste des appareils, dont les liens réseau entre les nœuds du réseau et ces appareils. Pour cela, placer un fichier CSV nommé <b>devices.csv</b> dans votre répertoire <b>/config</b>.",
|
||||||
"Maintenance_Tool_ImportPastedCSV": "Import CSV (coller)",
|
"Maintenance_Tool_ImportPastedCSV": "Import CSV (coller)",
|
||||||
"Maintenance_Tool_ImportPastedCSV_noti_text": "Êtes-vous sûr de vouloir importer les CSV copié ? Cela va complètement <b>remplacer</b> les appareils de votre base de données.",
|
"Maintenance_Tool_ImportPastedCSV_noti_text": "Êtes-vous sûr de vouloir importer les CSV copié ? Cela va complètement <b>remplacer</b> les appareils de votre base de données.",
|
||||||
@@ -513,7 +525,7 @@
|
|||||||
"Network_Node_Name": "Nom du nœud",
|
"Network_Node_Name": "Nom du nœud",
|
||||||
"Network_Parent": "Appareil du réseau principal",
|
"Network_Parent": "Appareil du réseau principal",
|
||||||
"Network_Root": "Noeud racine",
|
"Network_Root": "Noeud racine",
|
||||||
"Network_Root_Not_Configured": "Pour commencer la configuration de cet écran, sélectionner un type d'appareil réseau, par exemple une <b>Gateway</b>, dans le champ <b>Type</b> de <a href=\"deviceDetails.php?mac=Internet\">l'appareil racine pour Internet</a> <br/><br/> Plus d'informations dans le guide <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Comment configurer votre page Réseau</a>",
|
"Network_Root_Not_Configured": "Pour commencer la configuration de cet écran, sélectionner un type d'appareil réseau, par exemple une <b>Gateway</b>, dans le champ <b>Type</b> de <a href=\"deviceDetails.php?mac=Internet\">l'appareil racine pour Internet</a> <br/><br/> Plus d'informations dans le guide <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Comment configurer votre page Réseau</a>",
|
||||||
"Network_Root_Unconfigurable": "Racine non configurable",
|
"Network_Root_Unconfigurable": "Racine non configurable",
|
||||||
"Network_Table_Hostname": "Nom de hôte",
|
"Network_Table_Hostname": "Nom de hôte",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "Tout supprimer (ne prend pas en compte les filtres)",
|
"Plugins_DeleteAll": "Tout supprimer (ne prend pas en compte les filtres)",
|
||||||
"Plugins_Filters_Mac": "Filtrer par MAC",
|
"Plugins_Filters_Mac": "Filtrer par MAC",
|
||||||
"Plugins_History": "Historique des événements",
|
"Plugins_History": "Historique des événements",
|
||||||
|
"Plugins_Obj_DeleteListed": "Effacer les objets listés",
|
||||||
"Plugins_Objects": "Objets des plugins",
|
"Plugins_Objects": "Objets des plugins",
|
||||||
"Plugins_Out_of": "sur",
|
"Plugins_Out_of": "sur",
|
||||||
"Plugins_Unprocessed_Events": "Événements non traités",
|
"Plugins_Unprocessed_Events": "Événements non traités",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "semaine",
|
"Presence_CalHead_week": "semaine",
|
||||||
"Presence_CalHead_year": "année",
|
"Presence_CalHead_year": "année",
|
||||||
"Presence_CallHead_Devices": "Appareils",
|
"Presence_CallHead_Devices": "Appareils",
|
||||||
|
"Presence_Key_OnlineNow": "Maintenant en ligne",
|
||||||
|
"Presence_Key_OnlineNow_desc": "Appareil détecté comme étant en ligne lors de la dernière analyse.",
|
||||||
|
"Presence_Key_OnlinePast": "Passé en ligne",
|
||||||
|
"Presence_Key_OnlinePastMiss": "Passé en ligne (correspondance manquée)",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "Appareil en ligne dans le passé, mais actuellement hors ligne, mais la session de démarrage pourrait être manquante ou avoir des données contradictoires. (il s'agit peut-être d'un bogue - veuillez soumettre un PR si vous savez comment le corriger - je suis un peu perdu dans le code ici)",
|
||||||
|
"Presence_Key_OnlinePast_desc": "Appareil en ligne dans le passé, mais actuellement hors ligne.",
|
||||||
"Presence_Loading": "Chargement …",
|
"Presence_Loading": "Chargement …",
|
||||||
"Presence_Shortcut_AllDevices": "Mes appareils",
|
"Presence_Shortcut_AllDevices": "Mes appareils",
|
||||||
"Presence_Shortcut_Archived": "Archivés",
|
"Presence_Shortcut_Archived": "Archivés",
|
||||||
@@ -560,11 +579,12 @@
|
|||||||
"RandomMAC_hover": "Détecté automatiquement - indique si l'appareil dispose d'une adresse MAC générée aléatoirement.",
|
"RandomMAC_hover": "Détecté automatiquement - indique si l'appareil dispose d'une adresse MAC générée aléatoirement.",
|
||||||
"Reports_Sent_Log": "Rapports de log transmis",
|
"Reports_Sent_Log": "Rapports de log transmis",
|
||||||
"SCAN_SUBNETS_description": "La plupart des scanners sur le réseau (scan ARP, NMAP, Nslookup, DIG, Pholud) 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, Pholud) 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_name": "",
|
"SCAN_SUBNETS_name": "Réseaux à scanner",
|
||||||
"SYSTEM_TITLE": "Informations système",
|
"SYSTEM_TITLE": "Informations système",
|
||||||
"Setting_Override": "Remplacer la valeur",
|
"Setting_Override": "Remplacer la valeur",
|
||||||
"Setting_Override_Description": "Activer cette option va remplacer la valeur fournie par défaut par une application par la valeur renseignée au-dessus.",
|
"Setting_Override_Description": "Activer cette option va remplacer la valeur fournie par défaut par une application par la valeur renseignée au-dessus.",
|
||||||
"Settings_Metadata_Toggle": "Afficher/masquer les méta données pour le paramètre sélectionné.",
|
"Settings_Metadata_Toggle": "Afficher/masquer les méta données pour le paramètre sélectionné.",
|
||||||
|
"Settings_Show_Description": "Montrer la description de la configuration.",
|
||||||
"Settings_device_Scanners_desync": "⚠ La planification des différents scanners d'appareils est désynchronisée.",
|
"Settings_device_Scanners_desync": "⚠ La planification des différents scanners d'appareils est désynchronisée.",
|
||||||
"Settings_device_Scanners_desync_popup": "La planification des scanners (<code>*_RUN_SCHD</code>) n'est pas identique entre scanners. Cela va entraîner des notifications en ligne/hors-ligne non cohérentes. À moins que cela soit attendu, utilisez la même planification pour tous les <b>🔍scanners d'appareils</b> activés.",
|
"Settings_device_Scanners_desync_popup": "La planification des scanners (<code>*_RUN_SCHD</code>) n'est pas identique entre scanners. Cela va entraîner des notifications en ligne/hors-ligne non cohérentes. À moins que cela soit attendu, utilisez la même planification pour tous les <b>🔍scanners d'appareils</b> activés.",
|
||||||
"Speedtest_Results": "Résultats du test de débit",
|
"Speedtest_Results": "Résultats du test de débit",
|
||||||
@@ -651,16 +671,16 @@
|
|||||||
"UI_ICONS_name": "Icones prédéfinies",
|
"UI_ICONS_name": "Icones prédéfinies",
|
||||||
"UI_LANG_description": "Sélectionnez votre langue préféré de l’interface. Aidez à traduire ou suggérez des langues dans le portail en ligne de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Sélectionnez votre langue préféré de l’interface. Aidez à traduire ou suggérez des langues dans le portail en ligne de <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Langue de l'interface graphique",
|
"UI_LANG_name": "Langue de l'interface graphique",
|
||||||
"UI_MY_DEVICES_description": "Les états autorisant les appareils à être affichés par défaut dans la vue <b>Mes appareils</b>. (<code>CTRL + Clic</code> pour sélectionner/desélectionner",
|
"UI_MY_DEVICES_description": "Les états autorisant les appareils à être affichés par défaut dans la vue <b>Mes appareils</b>.",
|
||||||
"UI_MY_DEVICES_name": "Afficher dans la vue de mes appareils",
|
"UI_MY_DEVICES_name": "Afficher dans la vue de mes appareils",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Les préfixes d'adresses MAC à ne pas considérer comme généré aléatoirement pour les appareils. Renseignez par exemple <code>52</code> pour que les appareils commençant par <code>52:xx:xx:xx:xx:xx</code> ne soient pas considérés comme disposant d'une adresse MAC aléatoire.",
|
"UI_NOT_RANDOM_MAC_description": "Les préfixes d'adresses MAC à ne pas considérer comme généré aléatoirement pour les appareils. Renseignez par exemple <code>52</code> pour que les appareils commençant par <code>52:xx:xx:xx:xx:xx</code> ne soient pas considérés comme disposant d'une adresse MAC aléatoire.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "Ne pas marquer comme aléatoire",
|
"UI_NOT_RANDOM_MAC_name": "Ne pas marquer comme aléatoire",
|
||||||
"UI_PRESENCE_description": "Sélectionner les états qui doivent être affichés dans le graphique de <b>Présence des appareils</b> de la page <a href=\"/devices.php\" target=\"_blank\">Appareils</a>. (<code>CTRL + Clic</code> pour sélectionner/désélectionner)",
|
"UI_PRESENCE_description": "Sélectionner les états qui doivent être affichés dans le graphique de <b>Présence des appareils</b> de la page <a href=\"/devices.php\" target=\"_blank\">Appareils</a>.",
|
||||||
"UI_PRESENCE_name": "Afficher dans le graphique de présence",
|
"UI_PRESENCE_name": "Afficher dans le graphique de présence",
|
||||||
"UI_REFRESH_description": "Renseignez le nombre de secondes après lequel rafraîchir l'interface graphique. Renseignez <code>0</code> pour désactiver.",
|
"UI_REFRESH_description": "Renseignez le nombre de secondes après lequel rafraîchir l'interface graphique. Renseignez <code>0</code> pour désactiver.",
|
||||||
"UI_REFRESH_name": "Rafraîchir automatiquement l'interface graphique",
|
"UI_REFRESH_name": "Rafraîchir automatiquement l'interface graphique",
|
||||||
"VERSION_description": "",
|
"VERSION_description": "Valeur de la version ou du timestamp d'aide à vérifier si l'application a été mise à jour.",
|
||||||
"VERSION_name": "",
|
"VERSION_name": "Version ou Timestamp",
|
||||||
"devices_old": "Rafraichissement...",
|
"devices_old": "Rafraichissement...",
|
||||||
"general_event_description": "L'événement que vous avez lancé peut prendre du temps avant que les tâches de fond ne soit terminées. La durée d'exécution finira une fois que la file d'exécution ci-dessous sera vide (consulter les <a href='/maintenance.php#tab_Logging'>journaux d'erreur</a> si vous rencontrez des erreurs). <br/> <br/> File d'exécution :",
|
"general_event_description": "L'événement que vous avez lancé peut prendre du temps avant que les tâches de fond ne soit terminées. La durée d'exécution finira une fois que la file d'exécution ci-dessous sera vide (consulter les <a href='/maintenance.php#tab_Logging'>journaux d'erreur</a> si vous rencontrez des erreurs). <br/> <br/> File d'exécution :",
|
||||||
"general_event_title": "Lancement d'un événement sur mesure",
|
"general_event_title": "Lancement d'un événement sur mesure",
|
||||||
@@ -697,4 +717,4 @@
|
|||||||
"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>",
|
"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_icon": "fa-vial-circle-check",
|
"test_event_icon": "fa-vial-circle-check",
|
||||||
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
|
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
|
||||||
}
|
}
|
||||||
38
front/php/templates/language/it_it.json
Executable file → Normal file
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Puoi specificare una query SQL personalizzata che genererà un file JSON e quindi lo esporrà tramite l'<a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>endpoint del file</a>.",
|
"API_CUSTOM_SQL_description": "Puoi specificare una query SQL personalizzata che genererà un file JSON e quindi lo esporrà tramite l'<a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>endpoint del file</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint personalizzato",
|
"API_CUSTOM_SQL_name": "Endpoint personalizzato",
|
||||||
|
"API_TOKEN_description": "Token API per proteggere la comunicazione, puoi generarne uno o inserire qualsiasi valore. Viene inviato nell'intestazione della richiesta. Usato nel plugin <code>SYNC</code>, server GraphQL.",
|
||||||
|
"API_TOKEN_name": "Token API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Progettato per:",
|
"About_Design": "Progettato per:",
|
||||||
@@ -56,13 +58,13 @@
|
|||||||
"BackDevices_Restore_okay": "Ripristino eseguito correttamente.",
|
"BackDevices_Restore_okay": "Ripristino eseguito correttamente.",
|
||||||
"BackDevices_darkmode_disabled": "Modalità scura disabilitata",
|
"BackDevices_darkmode_disabled": "Modalità scura disabilitata",
|
||||||
"BackDevices_darkmode_enabled": "Modalità scura abilitata",
|
"BackDevices_darkmode_enabled": "Modalità scura abilitata",
|
||||||
"CLEAR_NEW_FLAG_description": "",
|
"CLEAR_NEW_FLAG_description": "Se abilitato (<code>0</code> è disabilitato), i dispositivi contrassegnati come <b>Nuovo dispositivo</b> verranno deselezionati se il limite di tempo (specificato in ore) supera il tempo della <b>Prima sessione</b>.",
|
||||||
"CLEAR_NEW_FLAG_name": "",
|
"CLEAR_NEW_FLAG_name": "Cancella nuova bandiera",
|
||||||
"DAYS_TO_KEEP_EVENTS_description": "Questa è un'impostazione di manutenzione. Specifica il numero di giorni delle voci degli eventi che verranno conservati. Tutti gli eventi più vecchi verranno eliminati periodicamente. Si applica anche alla cronologia degli eventi del plugin (Plugin Events History).",
|
"DAYS_TO_KEEP_EVENTS_description": "Questa è un'impostazione di manutenzione. Specifica il numero di giorni delle voci degli eventi che verranno conservati. Tutti gli eventi più vecchi verranno eliminati periodicamente. Si applica anche alla cronologia degli eventi del plugin (Plugin Events History).",
|
||||||
"DAYS_TO_KEEP_EVENTS_name": "Elimina eventi più vecchi di",
|
"DAYS_TO_KEEP_EVENTS_name": "Elimina eventi più vecchi di",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copia dettagli dal dispositivo",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copia dettagli dal dispositivo",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copia i dettagli dal dispositivo dall'elenco a discesa. Tutto in questa pagina verrà sovrascritto",
|
"DevDetail_Copy_Device_Tooltip": "Copia i dettagli dal dispositivo dall'elenco a discesa. Tutto in questa pagina verrà sovrascritto",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Notifica tutti gli eventi",
|
"DevDetail_EveandAl_AlertAllEvents": "Notifica eventi",
|
||||||
"DevDetail_EveandAl_AlertDown": "Avviso disconnessione",
|
"DevDetail_EveandAl_AlertDown": "Avviso disconnessione",
|
||||||
"DevDetail_EveandAl_Archived": "Archiviato",
|
"DevDetail_EveandAl_Archived": "Archiviato",
|
||||||
"DevDetail_EveandAl_NewDevice": "Nuovo dispositivo",
|
"DevDetail_EveandAl_NewDevice": "Nuovo dispositivo",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Preferiti",
|
"Device_Shortcut_Favorites": "Preferiti",
|
||||||
"Device_Shortcut_NewDevices": "Nuovi dispositivi",
|
"Device_Shortcut_NewDevices": "Nuovi dispositivi",
|
||||||
"Device_Shortcut_OnlineChart": "Presenza dispositivo",
|
"Device_Shortcut_OnlineChart": "Presenza dispositivo",
|
||||||
|
"Device_TableHead_AlertDown": "Avviso disconnessione",
|
||||||
"Device_TableHead_Connected_Devices": "Connessioni",
|
"Device_TableHead_Connected_Devices": "Connessioni",
|
||||||
"Device_TableHead_Favorite": "Preferito",
|
"Device_TableHead_Favorite": "Preferito",
|
||||||
"Device_TableHead_FirstSession": "Prima sessione",
|
"Device_TableHead_FirstSession": "Prima sessione",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "Proprietario",
|
"Device_TableHead_Owner": "Proprietario",
|
||||||
"Device_TableHead_Parent_MAC": "MAC del nodo principale",
|
"Device_TableHead_Parent_MAC": "MAC del nodo principale",
|
||||||
"Device_TableHead_Port": "Porta",
|
"Device_TableHead_Port": "Porta",
|
||||||
|
"Device_TableHead_PresentLastScan": "Presenza",
|
||||||
"Device_TableHead_RowID": "ID riga",
|
"Device_TableHead_RowID": "ID riga",
|
||||||
"Device_TableHead_Rowid": "ID riga",
|
"Device_TableHead_Rowid": "ID riga",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "Plugin sorgente",
|
||||||
"Device_TableHead_Status": "Stato",
|
"Device_TableHead_Status": "Stato",
|
||||||
"Device_TableHead_SyncHubNodeName": "Sincronizza nodo",
|
"Device_TableHead_SyncHubNodeName": "Sincronizza nodo",
|
||||||
"Device_TableHead_Type": "Tipo",
|
"Device_TableHead_Type": "Tipo",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Mostra _MENU_ elementi",
|
"Events_Tablelenght": "Mostra _MENU_ elementi",
|
||||||
"Events_Tablelenght_all": "Tutti",
|
"Events_Tablelenght_all": "Tutti",
|
||||||
"Events_Title": "Eventi",
|
"Events_Title": "Eventi",
|
||||||
|
"GRAPHQL_PORT_description": "Il numero di porta del server GraphQL.",
|
||||||
|
"GRAPHQL_PORT_name": "Porta GraphQL",
|
||||||
"Gen_Action": "Azione",
|
"Gen_Action": "Azione",
|
||||||
"Gen_Add": "Aggiungi",
|
"Gen_Add": "Aggiungi",
|
||||||
"Gen_Add_All": "Aggiungi tutti",
|
"Gen_Add_All": "Aggiungi tutti",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "OK: l'aggiornamento dell'interfaccia utente potrebbe richiedere del tempo se è in esecuzione una scansione.",
|
"Gen_DataUpdatedUITakesTime": "OK: l'aggiornamento dell'interfaccia utente potrebbe richiedere del tempo se è in esecuzione una scansione.",
|
||||||
"Gen_Delete": "Elimina",
|
"Gen_Delete": "Elimina",
|
||||||
"Gen_DeleteAll": "Elimina tutti",
|
"Gen_DeleteAll": "Elimina tutti",
|
||||||
|
"Gen_Description": "Descrizione",
|
||||||
"Gen_Error": "Errore",
|
"Gen_Error": "Errore",
|
||||||
"Gen_Filter": "Filtro",
|
"Gen_Filter": "Filtro",
|
||||||
|
"Gen_Generate": "Genera",
|
||||||
"Gen_LockedDB": "ERRORE: il DB potrebbe essere bloccato, controlla F12 Strumenti di sviluppo -> Console o riprova più tardi.",
|
"Gen_LockedDB": "ERRORE: il DB potrebbe essere bloccato, controlla F12 Strumenti di sviluppo -> Console o riprova più tardi.",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
@@ -295,7 +304,7 @@
|
|||||||
"Gen_Save": "Salva",
|
"Gen_Save": "Salva",
|
||||||
"Gen_Saved": "Salvato",
|
"Gen_Saved": "Salvato",
|
||||||
"Gen_Search": "Cerca",
|
"Gen_Search": "Cerca",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_SelectToPreview": "Seleziona per anteprima",
|
||||||
"Gen_Selected_Devices": "Dispositivi selezionati:",
|
"Gen_Selected_Devices": "Dispositivi selezionati:",
|
||||||
"Gen_Switch": "Cambia",
|
"Gen_Switch": "Cambia",
|
||||||
"Gen_Upd": "Aggiornato correttamente",
|
"Gen_Upd": "Aggiornato correttamente",
|
||||||
@@ -306,8 +315,10 @@
|
|||||||
"Gen_Work_In_Progress": "Lavori in corso, è quindi un buon momento per un feedback su https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Lavori in corso, è quindi un buon momento per un feedback su https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"General_display_name": "Generale",
|
"General_display_name": "Generale",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'opzione di manutenzione. Se abilitata (<code>0</code> è disabilitata), tutti i dispositivi marcati con <b>Nuovo dispositivo</b> verranno eliminati se l'orario della <b>Prima sessione</b> è precedente all'orario di questa impostazione. Usa questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
|
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione <b>ELIMINAZIONE dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), tutti i dispositivi marcati con <b>Nuovo dispositivo</b> verranno eliminati se l'orario della <b>Prima sessione</b> è precedente all'orario di questa impostazione. Usa questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Mantieni nuovi dispositivi per",
|
"HRS_TO_KEEP_NEWDEV_name": "Elimina nuovi dispositivi dopo",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "Questa è un'impostazione di manutenzione <b>ELIMINAZIONE dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi che sono <b>Offline</b> e la loro data e ora <b>Ultima offline</b> sono più vecchi delle ore specificate in questa impostazione saranno eliminati. Usa questa impostazione se vuoi eliminare automaticamente <b>Dispositivi offline</b> dopo <code>X</code> ore trascorse offline.",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "Elimina dispositivi offline dopo",
|
||||||
"HelpFAQ_Cat_Detail": "Dettagli",
|
"HelpFAQ_Cat_Detail": "Dettagli",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "Cosa significa ",
|
"HelpFAQ_Cat_Detail_300_head": "Cosa significa ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "indica un dispositivo di rete (un dispositivo di tipo AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router, USB LAN Adapter, USB WIFI Adapter, o Internet). Tipi personalizzati possono essere aggiunti attraverso l'impostazione <code>NETWORK_DEVICE_TYPES</code>.",
|
"HelpFAQ_Cat_Detail_300_text_a": "indica un dispositivo di rete (un dispositivo di tipo AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Router, USB LAN Adapter, USB WIFI Adapter, o Internet). Tipi personalizzati possono essere aggiunti attraverso l'impostazione <code>NETWORK_DEVICE_TYPES</code>.",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Caricamento...",
|
"Loading": "Caricamento...",
|
||||||
"Login_Box": "Inserisci la tua password",
|
"Login_Box": "Inserisci la tua password",
|
||||||
"Login_Default_PWD": "La password predefinita \"123456\" è ancora attiva.",
|
"Login_Default_PWD": "La password predefinita \"123456\" è ancora attiva.",
|
||||||
|
"Login_Info": "Le password vengono impostate tramite il plugin Set Password. Controlla la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentazione SETPWD</a> se riscontri problemi di accesso.",
|
||||||
"Login_Psw-box": "Password",
|
"Login_Psw-box": "Password",
|
||||||
"Login_Psw_alert": "Avviso password!",
|
"Login_Psw_alert": "Avviso password!",
|
||||||
"Login_Psw_folder": "nella cartella di configurazione.",
|
"Login_Psw_folder": "nella cartella di configurazione.",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "Elimina tutti (i filtri vengono ignorati)",
|
"Plugins_DeleteAll": "Elimina tutti (i filtri vengono ignorati)",
|
||||||
"Plugins_Filters_Mac": "Filtro MAC",
|
"Plugins_Filters_Mac": "Filtro MAC",
|
||||||
"Plugins_History": "Storico eventi",
|
"Plugins_History": "Storico eventi",
|
||||||
|
"Plugins_Obj_DeleteListed": "Elimina oggetti elencati",
|
||||||
"Plugins_Objects": "Oggetti plugin",
|
"Plugins_Objects": "Oggetti plugin",
|
||||||
"Plugins_Out_of": "fuori da",
|
"Plugins_Out_of": "fuori da",
|
||||||
"Plugins_Unprocessed_Events": "Eventi non processati",
|
"Plugins_Unprocessed_Events": "Eventi non processati",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "settimana",
|
"Presence_CalHead_week": "settimana",
|
||||||
"Presence_CalHead_year": "anno",
|
"Presence_CalHead_year": "anno",
|
||||||
"Presence_CallHead_Devices": "Dispositivi",
|
"Presence_CallHead_Devices": "Dispositivi",
|
||||||
|
"Presence_Key_OnlineNow": "Online adesso",
|
||||||
|
"Presence_Key_OnlineNow_desc": "Dispositivo rilevato durante l'ultima scansione come online.",
|
||||||
|
"Presence_Key_OnlinePast": "Online in passato",
|
||||||
|
"Presence_Key_OnlinePastMiss": "Online in passato (non corrispondente)",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "Dispositivo online in passato, ma attualmente offline, ma la sessione di avvio potrebbe essere mancante o presentare dati in conflitto. (potrebbe trattarsi di un bug: invia una PR se sai come risolverlo, sono un po' perso nel codice qui)",
|
||||||
|
"Presence_Key_OnlinePast_desc": "Dispositivo online in passato, ma attualmente offline.",
|
||||||
"Presence_Loading": "Caricamento...",
|
"Presence_Loading": "Caricamento...",
|
||||||
"Presence_Shortcut_AllDevices": "Miei dispositivi",
|
"Presence_Shortcut_AllDevices": "Miei dispositivi",
|
||||||
"Presence_Shortcut_Archived": "Archiviati",
|
"Presence_Shortcut_Archived": "Archiviati",
|
||||||
@@ -560,11 +579,12 @@
|
|||||||
"RandomMAC_hover": "Rilevato automaticamente: indica se il dispositivo genera il suo indirizzo MAC casualmente.",
|
"RandomMAC_hover": "Rilevato automaticamente: indica se il dispositivo genera il suo indirizzo MAC casualmente.",
|
||||||
"Reports_Sent_Log": "Log rapporti inviati",
|
"Reports_Sent_Log": "Log rapporti inviati",
|
||||||
"SCAN_SUBNETS_description": "La maggior parte degli scanner di rete (ARP-SCAN, NMAP, NSLOOKUP, DIG, PHOLUS) 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, PHOLUS) 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_name": "",
|
"SCAN_SUBNETS_name": "Reti da scansionare",
|
||||||
"SYSTEM_TITLE": "Informazioni sistema",
|
"SYSTEM_TITLE": "Informazioni sistema",
|
||||||
"Setting_Override": "Sovrascrivi valore",
|
"Setting_Override": "Sovrascrivi valore",
|
||||||
"Setting_Override_Description": "L'abilitazione di questa opzione sovrascriverà il valore predefinito fornito dall'app con il valore specificato sopra.",
|
"Setting_Override_Description": "L'abilitazione di questa opzione sovrascriverà il valore predefinito fornito dall'app con il valore specificato sopra.",
|
||||||
"Settings_Metadata_Toggle": "Mostra/nascondi i metadati per l'impostazione specificata.",
|
"Settings_Metadata_Toggle": "Mostra/nascondi i metadati per l'impostazione specificata.",
|
||||||
|
"Settings_Show_Description": "Mostra descrizione dell'impostazione.",
|
||||||
"Settings_device_Scanners_desync": "⚠ Le pianificazioni dello scanner del dispositivo non sono sincronizzate.",
|
"Settings_device_Scanners_desync": "⚠ Le pianificazioni dello scanner del dispositivo non sono sincronizzate.",
|
||||||
"Settings_device_Scanners_desync_popup": "Gli orari degli scanner dei dispositivi (<code>*_RUN_SCHD</code>) non sono gli stessi. Questo comporterà notifiche online/offline incoerenti del dispositivo. A meno che ciò non sia previsto, utilizza la stessa pianificazione per tutti gli <b>🔍Scanner dispositivi</b> abilitati.",
|
"Settings_device_Scanners_desync_popup": "Gli orari degli scanner dei dispositivi (<code>*_RUN_SCHD</code>) non sono gli stessi. Questo comporterà notifiche online/offline incoerenti del dispositivo. A meno che ciò non sia previsto, utilizza la stessa pianificazione per tutti gli <b>🔍Scanner dispositivi</b> abilitati.",
|
||||||
"Speedtest_Results": "Risultati test di velocità",
|
"Speedtest_Results": "Risultati test di velocità",
|
||||||
@@ -651,11 +671,11 @@
|
|||||||
"UI_ICONS_name": "Icone predefinite",
|
"UI_ICONS_name": "Icone predefinite",
|
||||||
"UI_LANG_description": "Seleziona la lingua preferita dell'interfaccia utente. Aiuta nella traduzione o suggerisci una nuova lingua sul portale online di <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Seleziona la lingua preferita dell'interfaccia utente. Aiuta nella traduzione o suggerisci una nuova lingua sul portale online di <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Lingua UI",
|
"UI_LANG_name": "Lingua UI",
|
||||||
"UI_MY_DEVICES_description": "Dispositivi i cui stati devono essere visualizzati nella visualizzazione predefinita <b>Miei dispositivi</b>. (<code>CTRL + clic</code> per selezionare/deselezionare)",
|
"UI_MY_DEVICES_description": "Dispositivi i cui stati devono essere visualizzati nella visualizzazione predefinita <b>Miei dispositivi</b>.",
|
||||||
"UI_MY_DEVICES_name": "Mostra nella vista Miei dispositivi",
|
"UI_MY_DEVICES_name": "Mostra nella vista Miei dispositivi",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Prefissi MAC che non devono essere contrassegnati come dispositivi casuali. Inserisci ad esempio <code>52</code> per escludere i dispositivi che iniziano con <code>52:xx:xx:xx:xx:xx</code> dall'essere contrassegnati come dispositivi con un indirizzo MAC casuale.",
|
"UI_NOT_RANDOM_MAC_description": "Prefissi MAC che non devono essere contrassegnati come dispositivi casuali. Inserisci ad esempio <code>52</code> per escludere i dispositivi che iniziano con <code>52:xx:xx:xx:xx:xx</code> dall'essere contrassegnati come dispositivi con un indirizzo MAC casuale.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "Non segnalare come casuale",
|
"UI_NOT_RANDOM_MAC_name": "Non segnalare come casuale",
|
||||||
"UI_PRESENCE_description": "Seleziona quali stati devono essere mostrati nel grafico <b>Presenza dispositivo</b> nella pagina <a href=\"/devices.php\" target=\"_blank\">Dispositivi</a>. (<code>CTRL + clic</code> per selezionare/deselezionare)",
|
"UI_PRESENCE_description": "Seleziona quali stati devono essere mostrati nel grafico <b>Presenza dispositivo</b> nella pagina <a href=\"/devices.php\" target=\"_blank\">Dispositivi</a>.",
|
||||||
"UI_PRESENCE_name": "Mostra nel grafico delle presenze",
|
"UI_PRESENCE_name": "Mostra nel grafico delle presenze",
|
||||||
"UI_REFRESH_description": "Inserisci il numero di secondi dopo il quale la UI si ricarica. Imposta a <code>0</code> per disabilitare.",
|
"UI_REFRESH_description": "Inserisci il numero di secondi dopo il quale la UI si ricarica. Imposta a <code>0</code> per disabilitare.",
|
||||||
"UI_REFRESH_name": "Aggiorna automaticamente la UI",
|
"UI_REFRESH_name": "Aggiorna automaticamente la UI",
|
||||||
|
|||||||
@@ -5,12 +5,14 @@
|
|||||||
// ###################################
|
// ###################################
|
||||||
|
|
||||||
$defaultLang = "en_us";
|
$defaultLang = "en_us";
|
||||||
$allLanguages = ["en_us", "es_es", "de_de", "fr_fr", "it_it", "ru_ru", "nb_no", "pl_pl", "pt_br", "tr_tr", "zh_cn", "cs_cz"];
|
$allLanguages = ["en_us", "es_es", "de_de", "fr_fr", "it_it", "ru_ru", "nb_no", "pl_pl", "pt_br", "tr_tr", "zh_cn", "cs_cz", "ar_ar", "ca_ca"];
|
||||||
|
|
||||||
|
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
$result = $db->querySingle("SELECT Value FROM Settings WHERE Code_Name = 'UI_LANG'");
|
$result = $db->querySingle("SELECT Value FROM Settings WHERE Code_Name = 'UI_LANG'");
|
||||||
|
|
||||||
|
// below has to match exactly teh values in /front/php/templates/language/lang.php & /front/js/common.js
|
||||||
switch($result){
|
switch($result){
|
||||||
case 'Spanish': $pia_lang_selected = 'es_es'; break;
|
case 'Spanish': $pia_lang_selected = 'es_es'; break;
|
||||||
case 'German': $pia_lang_selected = 'de_de'; break;
|
case 'German': $pia_lang_selected = 'de_de'; break;
|
||||||
@@ -23,13 +25,13 @@ switch($result){
|
|||||||
case 'French': $pia_lang_selected = 'fr_fr'; break;
|
case 'French': $pia_lang_selected = 'fr_fr'; break;
|
||||||
case 'Chinese (zh_cn)': $pia_lang_selected = 'zh_cn'; break;
|
case 'Chinese (zh_cn)': $pia_lang_selected = 'zh_cn'; break;
|
||||||
case 'Czech (cs_cz)': $pia_lang_selected = 'cs_cz'; break;
|
case 'Czech (cs_cz)': $pia_lang_selected = 'cs_cz'; break;
|
||||||
|
case 'Arabic (ar_ar)': $pia_lang_selected = 'ar_ar'; break;
|
||||||
|
case 'Catalan (ca_ca)': $pia_lang_selected = 'ca_ca'; break;
|
||||||
default: $pia_lang_selected = 'en_us'; break;
|
default: $pia_lang_selected = 'en_us'; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($pia_lang_selected) == FALSE or (strlen($pia_lang_selected) == 0)) {$pia_lang_selected = $defaultLang;}
|
if (isset($pia_lang_selected) == FALSE or (strlen($pia_lang_selected) == 0)) {$pia_lang_selected = $defaultLang;}
|
||||||
|
|
||||||
require dirname(__FILE__).'/../skinUI.php';
|
|
||||||
|
|
||||||
$result = $db->query("SELECT * FROM Plugins_Language_Strings");
|
$result = $db->query("SELECT * FROM Plugins_Language_Strings");
|
||||||
$strings = array();
|
$strings = array();
|
||||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||||
|
|||||||
@@ -33,6 +33,6 @@ def merge_translations(main_file, other_files):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
current_path = os.path.dirname(os.path.abspath(__file__))
|
current_path = os.path.dirname(os.path.abspath(__file__))
|
||||||
# language codes can be found here: http://www.lingoes.net/en/translator/langcode.htm
|
# language codes can be found here: http://www.lingoes.net/en/translator/langcode.htm
|
||||||
json_files = ["en_us.json", "de_de.json", "es_es.json", "fr_fr.json", "nb_no.json", "ru_ru.json", "it_it.json", "pt_br.json", "pl_pl.json", "zh_cn.json", "tr_tr.json", "cs_cz.json"]
|
json_files = ["en_us.json", "de_de.json", "es_es.json", "fr_fr.json", "nb_no.json", "ru_ru.json", "it_it.json", "pt_br.json", "pl_pl.json", "zh_cn.json", "tr_tr.json", "cs_cz.json", "ar_ar.json", "ca_ca.json"]
|
||||||
file_paths = [os.path.join(current_path, file) for file in json_files]
|
file_paths = [os.path.join(current_path, file) for file in json_files]
|
||||||
merge_translations(file_paths[0], file_paths[1:])
|
merge_translations(file_paths[0], file_paths[1:])
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Du kan spesifisere en egendefinert SQL-Spørring som vil generere en JSON-fil og deretter eksponere den via <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
"API_CUSTOM_SQL_description": "Du kan spesifisere en egendefinert SQL-Spørring som vil generere en JSON-fil og deretter eksponere den via <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Egendefinert endepunkt",
|
"API_CUSTOM_SQL_name": "Egendefinert endepunkt",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Designet for:",
|
"About_Design": "Designet for:",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Favoritter",
|
"Device_Shortcut_Favorites": "Favoritter",
|
||||||
"Device_Shortcut_NewDevices": "Nye Enheter",
|
"Device_Shortcut_NewDevices": "Nye Enheter",
|
||||||
"Device_Shortcut_OnlineChart": "Enhetens tilstedeværelse",
|
"Device_Shortcut_OnlineChart": "Enhetens tilstedeværelse",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Tilkoblinger",
|
"Device_TableHead_Connected_Devices": "Tilkoblinger",
|
||||||
"Device_TableHead_Favorite": "Favoritt",
|
"Device_TableHead_Favorite": "Favoritt",
|
||||||
"Device_TableHead_FirstSession": "Første Økt",
|
"Device_TableHead_FirstSession": "Første Økt",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "Eier",
|
"Device_TableHead_Owner": "Eier",
|
||||||
"Device_TableHead_Parent_MAC": "Overordnet node MAC",
|
"Device_TableHead_Parent_MAC": "Overordnet node MAC",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "Rad ID",
|
"Device_TableHead_RowID": "Rad ID",
|
||||||
"Device_TableHead_Rowid": "Rad ID",
|
"Device_TableHead_Rowid": "Rad ID",
|
||||||
"Device_TableHead_SSID": "",
|
"Device_TableHead_SSID": "",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "Status",
|
"Device_TableHead_Status": "Status",
|
||||||
"Device_TableHead_SyncHubNodeName": "Synkroniser Node",
|
"Device_TableHead_SyncHubNodeName": "Synkroniser Node",
|
||||||
"Device_TableHead_Type": "Type",
|
"Device_TableHead_Type": "Type",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Show _MENU_ entries",
|
"Events_Tablelenght": "Show _MENU_ entries",
|
||||||
"Events_Tablelenght_all": "Alle",
|
"Events_Tablelenght_all": "Alle",
|
||||||
"Events_Title": "Hendelser",
|
"Events_Title": "Hendelser",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "Handling",
|
"Gen_Action": "Handling",
|
||||||
"Gen_Add": "Legg til",
|
"Gen_Add": "Legg til",
|
||||||
"Gen_Add_All": "Legg til alle",
|
"Gen_Add_All": "Legg til alle",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "OK - Det kan ta litt tid før brukergrensesnittet oppdateres hvis en skanning kjøres.",
|
"Gen_DataUpdatedUITakesTime": "OK - Det kan ta litt tid før brukergrensesnittet oppdateres hvis en skanning kjøres.",
|
||||||
"Gen_Delete": "Slett",
|
"Gen_Delete": "Slett",
|
||||||
"Gen_DeleteAll": "Slett alle",
|
"Gen_DeleteAll": "Slett alle",
|
||||||
|
"Gen_Description": "",
|
||||||
"Gen_Error": "Feil",
|
"Gen_Error": "Feil",
|
||||||
"Gen_Filter": "Filter",
|
"Gen_Filter": "Filter",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "FEIL - DB kan være låst - Sjekk F12 Dev tools -> Konsoll eller prøv senere.",
|
"Gen_LockedDB": "FEIL - DB kan være låst - Sjekk F12 Dev tools -> Konsoll eller prøv senere.",
|
||||||
"Gen_Offline": "Frakoblet",
|
"Gen_Offline": "Frakoblet",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Dette er en vedlikeholdsinnstilling. Hvis aktivert (<code>0</code> er deaktivert), vil enheter merket som <b>Ny Enhet</b> bli slettet hvis tiden deres for <b>Første økt</b> var eldre enn de angitte timene i denne innstilling. Bruk denne innstillingen hvis du vil automatisk slette <b>Nye Enheter</b> etter <code>X</code> timer.",
|
"HRS_TO_KEEP_NEWDEV_description": "Dette er en vedlikeholdsinnstilling. Hvis aktivert (<code>0</code> er deaktivert), vil enheter merket som <b>Ny Enhet</b> bli slettet hvis tiden deres for <b>Første økt</b> var eldre enn de angitte timene i denne innstilling. Bruk denne innstillingen hvis du vil automatisk slette <b>Nye Enheter</b> etter <code>X</code> timer.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Behold nye enheter for",
|
"HRS_TO_KEEP_NEWDEV_name": "Behold nye enheter for",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "Detaljer",
|
"HelpFAQ_Cat_Detail": "Detaljer",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "Hva betyr ",
|
"HelpFAQ_Cat_Detail_300_head": "Hva betyr ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "betyr en nettverksenhet (en enhet av typen AP, Gateway, Brannmur, Hypervisor, Powerline, Switch, WLAN, PLS, ruter, USB LAN-adapter, USB WIFI-adapter eller Internett). Egendefinerte typer kan legges til via <code>NETWORK_DEVICE_TYPES</code>-innstillingen.",
|
"HelpFAQ_Cat_Detail_300_text_a": "betyr en nettverksenhet (en enhet av typen AP, Gateway, Brannmur, Hypervisor, Powerline, Switch, WLAN, PLS, ruter, USB LAN-adapter, USB WIFI-adapter eller Internett). Egendefinerte typer kan legges til via <code>NETWORK_DEVICE_TYPES</code>-innstillingen.",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Laster...",
|
"Loading": "Laster...",
|
||||||
"Login_Box": "Skriv inn passordet ditt",
|
"Login_Box": "Skriv inn passordet ditt",
|
||||||
"Login_Default_PWD": "Standard passordet \"123456\" er fortsatt aktivt.",
|
"Login_Default_PWD": "Standard passordet \"123456\" er fortsatt aktivt.",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "Passord",
|
"Login_Psw-box": "Passord",
|
||||||
"Login_Psw_alert": "Passord varsling!",
|
"Login_Psw_alert": "Passord varsling!",
|
||||||
"Login_Psw_folder": "i config-mappen.",
|
"Login_Psw_folder": "i config-mappen.",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "Slett alle (filtre blir ignorert)",
|
"Plugins_DeleteAll": "Slett alle (filtre blir ignorert)",
|
||||||
"Plugins_Filters_Mac": "Mac filter",
|
"Plugins_Filters_Mac": "Mac filter",
|
||||||
"Plugins_History": "Hendelses historikk",
|
"Plugins_History": "Hendelses historikk",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
"Plugins_Objects": "Plugin-objekter",
|
"Plugins_Objects": "Plugin-objekter",
|
||||||
"Plugins_Out_of": "ut av",
|
"Plugins_Out_of": "ut av",
|
||||||
"Plugins_Unprocessed_Events": "Uprosesserte hendelser",
|
"Plugins_Unprocessed_Events": "Uprosesserte hendelser",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "uke",
|
"Presence_CalHead_week": "uke",
|
||||||
"Presence_CalHead_year": "år",
|
"Presence_CalHead_year": "år",
|
||||||
"Presence_CallHead_Devices": "Enheter",
|
"Presence_CallHead_Devices": "Enheter",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "Laster...",
|
"Presence_Loading": "Laster...",
|
||||||
"Presence_Shortcut_AllDevices": "Mine enheter",
|
"Presence_Shortcut_AllDevices": "Mine enheter",
|
||||||
"Presence_Shortcut_Archived": "Arkivert",
|
"Presence_Shortcut_Archived": "Arkivert",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "Overstyr verdi",
|
"Setting_Override": "Overstyr verdi",
|
||||||
"Setting_Override_Description": "Aktivering av dette alternativet vil overstyre en App som leveres standard-verdi med verdien som er spesifisert ovenfor.",
|
"Setting_Override_Description": "Aktivering av dette alternativet vil overstyre en App som leveres standard-verdi med verdien som er spesifisert ovenfor.",
|
||||||
"Settings_Metadata_Toggle": "Vis/skjul metadata for den gitte innstillingen.",
|
"Settings_Metadata_Toggle": "Vis/skjul metadata for den gitte innstillingen.",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
"Settings_device_Scanners_desync": "⚠ Enhetsskanning tidsplan er ikke synkronisert lenger.",
|
"Settings_device_Scanners_desync": "⚠ Enhetsskanning tidsplan er ikke synkronisert lenger.",
|
||||||
"Settings_device_Scanners_desync_popup": "Tidsplanene for enhetsskanning (<code>*_RUN_SCHD</code>) er ikke de samme. Dette vil føre til inkonsekvent enhet på online/offline varsler. Med mindre dette er ment, kan du bruke den samme tidsplanen for alle aktiverte <b> 🔍Enhets-skannere</b>.",
|
"Settings_device_Scanners_desync_popup": "Tidsplanene for enhetsskanning (<code>*_RUN_SCHD</code>) er ikke de samme. Dette vil føre til inkonsekvent enhet på online/offline varsler. Med mindre dette er ment, kan du bruke den samme tidsplanen for alle aktiverte <b> 🔍Enhets-skannere</b>.",
|
||||||
"Speedtest_Results": "Speedtest resultater",
|
"Speedtest_Results": "Speedtest resultater",
|
||||||
@@ -697,4 +717,4 @@
|
|||||||
"settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>",
|
"settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
"test_event_icon": "fa-vial-circle-check",
|
||||||
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
|
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Możesz określić własne zapytanie SQL które będzie generowało plik JSON i udostępnić je poprzez plik typu endpoint <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> </a>.",
|
"API_CUSTOM_SQL_description": "Możesz określić własne zapytanie SQL które będzie generowało plik JSON i udostępnić je poprzez plik typu endpoint <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> </a>.",
|
||||||
"API_CUSTOM_SQL_name": "Własny endpoint",
|
"API_CUSTOM_SQL_name": "Własny endpoint",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Zaprojektowany dla:",
|
"About_Design": "Zaprojektowany dla:",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Ulubione",
|
"Device_Shortcut_Favorites": "Ulubione",
|
||||||
"Device_Shortcut_NewDevices": "Nowe Urządzenia",
|
"Device_Shortcut_NewDevices": "Nowe Urządzenia",
|
||||||
"Device_Shortcut_OnlineChart": "Obecność urządzenia",
|
"Device_Shortcut_OnlineChart": "Obecność urządzenia",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Połączenia",
|
"Device_TableHead_Connected_Devices": "Połączenia",
|
||||||
"Device_TableHead_Favorite": "Ulubione",
|
"Device_TableHead_Favorite": "Ulubione",
|
||||||
"Device_TableHead_FirstSession": "Pierwsza Sesja",
|
"Device_TableHead_FirstSession": "Pierwsza Sesja",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "Właściciel",
|
"Device_TableHead_Owner": "Właściciel",
|
||||||
"Device_TableHead_Parent_MAC": "MAC rodzica węzła",
|
"Device_TableHead_Parent_MAC": "MAC rodzica węzła",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "ID wiersza",
|
"Device_TableHead_RowID": "ID wiersza",
|
||||||
"Device_TableHead_Rowid": "ID wiersza",
|
"Device_TableHead_Rowid": "ID wiersza",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "Status",
|
"Device_TableHead_Status": "Status",
|
||||||
"Device_TableHead_SyncHubNodeName": "Węzeł Synchronizacji",
|
"Device_TableHead_SyncHubNodeName": "Węzeł Synchronizacji",
|
||||||
"Device_TableHead_Type": "Typ",
|
"Device_TableHead_Type": "Typ",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Pokaż_wpisy_MENU",
|
"Events_Tablelenght": "Pokaż_wpisy_MENU",
|
||||||
"Events_Tablelenght_all": "Wszystkie",
|
"Events_Tablelenght_all": "Wszystkie",
|
||||||
"Events_Title": "Wydarzenia",
|
"Events_Title": "Wydarzenia",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "Akcja",
|
"Gen_Action": "Akcja",
|
||||||
"Gen_Add": "Dodaj",
|
"Gen_Add": "Dodaj",
|
||||||
"Gen_Add_All": "Dodaj wszystko",
|
"Gen_Add_All": "Dodaj wszystko",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "OK - Aktualizacja UI może chwile potrwać jeżeli wykonywany jest skan.",
|
"Gen_DataUpdatedUITakesTime": "OK - Aktualizacja UI może chwile potrwać jeżeli wykonywany jest skan.",
|
||||||
"Gen_Delete": "Usuń",
|
"Gen_Delete": "Usuń",
|
||||||
"Gen_DeleteAll": "Usuń wszystko",
|
"Gen_DeleteAll": "Usuń wszystko",
|
||||||
|
"Gen_Description": "",
|
||||||
"Gen_Error": "Błąd",
|
"Gen_Error": "Błąd",
|
||||||
"Gen_Filter": "Filtr",
|
"Gen_Filter": "Filtr",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "BŁĄD - BAZA DANYCH może być zablokowana - Sprawdź F12 narzędzia dewelopera -> Konsola lub spróbuj ponownie później.",
|
"Gen_LockedDB": "BŁĄD - BAZA DANYCH może być zablokowana - Sprawdź F12 narzędzia dewelopera -> Konsola lub spróbuj ponownie później.",
|
||||||
"Gen_Offline": "Wyłączone",
|
"Gen_Offline": "Wyłączone",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "To jest ustawienie konserwacyjne. Jeżeli uruchomione (<code>0</code> jest wyłączone), urządzenie oznaczone jako <b>Nowe Urządzenie</b> zostanie usunięte jeżeli czas <b>Pierwszej Sesji</b> jest starszy niż godzina podana w tym ustawieniu. Uzyj tego ustawienia jeżeli chcesz automatycznie usuwać <b>Nowe Urządzenia</b> po <code>X</code> godzinach.",
|
"HRS_TO_KEEP_NEWDEV_description": "To jest ustawienie konserwacyjne. Jeżeli uruchomione (<code>0</code> jest wyłączone), urządzenie oznaczone jako <b>Nowe Urządzenie</b> zostanie usunięte jeżeli czas <b>Pierwszej Sesji</b> jest starszy niż godzina podana w tym ustawieniu. Uzyj tego ustawienia jeżeli chcesz automatycznie usuwać <b>Nowe Urządzenia</b> po <code>X</code> godzinach.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Trzymaj nowe urządzenia przez",
|
"HRS_TO_KEEP_NEWDEV_name": "Trzymaj nowe urządzenia przez",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "Szczegóły",
|
"HelpFAQ_Cat_Detail": "Szczegóły",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "Co oznacza ",
|
"HelpFAQ_Cat_Detail_300_head": "Co oznacza ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "oznacza urządzenie sieciowe (urządzenie typu AP, Gateway, Zapora sieciowa, Hypervisor, Powerline, Switch, WLAN, PLC, Ruter, Adapter USB LAN, Adapter USB WIFI, oraz Internet). Własny typ może zostać dodany poprzez ustawienie <code>NETWORK_DEVICE_TYPE</code>.",
|
"HelpFAQ_Cat_Detail_300_text_a": "oznacza urządzenie sieciowe (urządzenie typu AP, Gateway, Zapora sieciowa, Hypervisor, Powerline, Switch, WLAN, PLC, Ruter, Adapter USB LAN, Adapter USB WIFI, oraz Internet). Własny typ może zostać dodany poprzez ustawienie <code>NETWORK_DEVICE_TYPE</code>.",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Wczytywanie...",
|
"Loading": "Wczytywanie...",
|
||||||
"Login_Box": "Wprowadź hasło",
|
"Login_Box": "Wprowadź hasło",
|
||||||
"Login_Default_PWD": "Podstawowe hasło \"123456\" jest aktywne.",
|
"Login_Default_PWD": "Podstawowe hasło \"123456\" jest aktywne.",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "Hasło",
|
"Login_Psw-box": "Hasło",
|
||||||
"Login_Psw_alert": "Alert HASŁA!",
|
"Login_Psw_alert": "Alert HASŁA!",
|
||||||
"Login_Psw_folder": "w folderze konfiguracji.",
|
"Login_Psw_folder": "w folderze konfiguracji.",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "Usuń wszystkie (filtry są ignorowane)",
|
"Plugins_DeleteAll": "Usuń wszystkie (filtry są ignorowane)",
|
||||||
"Plugins_Filters_Mac": "Filtr MAC",
|
"Plugins_Filters_Mac": "Filtr MAC",
|
||||||
"Plugins_History": "Historia Wydarzeń",
|
"Plugins_History": "Historia Wydarzeń",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
"Plugins_Objects": "Obiekty Wtyczek",
|
"Plugins_Objects": "Obiekty Wtyczek",
|
||||||
"Plugins_Out_of": "brakujące",
|
"Plugins_Out_of": "brakujące",
|
||||||
"Plugins_Unprocessed_Events": "Nieprzeprocesowane Wydarzenia",
|
"Plugins_Unprocessed_Events": "Nieprzeprocesowane Wydarzenia",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "tydzień",
|
"Presence_CalHead_week": "tydzień",
|
||||||
"Presence_CalHead_year": "rok",
|
"Presence_CalHead_year": "rok",
|
||||||
"Presence_CallHead_Devices": "Urządzenia",
|
"Presence_CallHead_Devices": "Urządzenia",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "Wczytywanie...",
|
"Presence_Loading": "Wczytywanie...",
|
||||||
"Presence_Shortcut_AllDevices": "Moje Urządzenia",
|
"Presence_Shortcut_AllDevices": "Moje Urządzenia",
|
||||||
"Presence_Shortcut_Archived": "Zarchiwizowane",
|
"Presence_Shortcut_Archived": "Zarchiwizowane",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "Nadpisz wartość",
|
"Setting_Override": "Nadpisz wartość",
|
||||||
"Setting_Override_Description": "Włączanie tej opcji nadpisze podstawową wartość na wartość podaną powyżej.",
|
"Setting_Override_Description": "Włączanie tej opcji nadpisze podstawową wartość na wartość podaną powyżej.",
|
||||||
"Settings_Metadata_Toggle": "Pokaż/Ukryj metadane dla podanego ustawienia.",
|
"Settings_Metadata_Toggle": "Pokaż/Ukryj metadane dla podanego ustawienia.",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
"Settings_device_Scanners_desync": "⚠ Harmonogramy skanowania urządzeń są niesynchronizowane.",
|
"Settings_device_Scanners_desync": "⚠ Harmonogramy skanowania urządzeń są niesynchronizowane.",
|
||||||
"Settings_device_Scanners_desync_popup": "Harmonogramy skanowania urządzeń (<code>*_RUN_SCHD</code>) nie są takie same. Powodować to będzie nierównomierne powiadomienia o urządzeniach włączynych/wyłączonych. Jeżeli nie jest to zamierzone to proszę włączyć ten sam harmonogram dla wszyskich <b>🔍Skanerów Urządzeń</b>.",
|
"Settings_device_Scanners_desync_popup": "Harmonogramy skanowania urządzeń (<code>*_RUN_SCHD</code>) nie są takie same. Powodować to będzie nierównomierne powiadomienia o urządzeniach włączynych/wyłączonych. Jeżeli nie jest to zamierzone to proszę włączyć ten sam harmonogram dla wszyskich <b>🔍Skanerów Urządzeń</b>.",
|
||||||
"Speedtest_Results": "Wyniki Testu Prędkości",
|
"Speedtest_Results": "Wyniki Testu Prędkości",
|
||||||
@@ -697,4 +717,4 @@
|
|||||||
"settings_update_item_warning": "Zaktualizuj poniższą wartość. Zachowaj ostrożność i postępuj zgodnie z poprzednim formatem. <b>Walidacja nie jest wykonywana.</b>",
|
"settings_update_item_warning": "Zaktualizuj poniższą wartość. Zachowaj ostrożność i postępuj zgodnie z poprzednim formatem. <b>Walidacja nie jest wykonywana.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
"test_event_icon": "fa-vial-circle-check",
|
||||||
"test_event_tooltip": "Zapisz zmiany zanim będziesz testować swoje ustawienia."
|
"test_event_tooltip": "Zapisz zmiany zanim będziesz testować swoje ustawienia."
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"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=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> endpoint do arquivo</a>.",
|
"API_CUSTOM_SQL_description": "Você pode especificar uma consulta SQL personalizada que irá gerar um arquivo JSON e, em seguida, expô-lo por meio do <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> endpoint do arquivo</a>.",
|
||||||
"API_CUSTOM_SQL_name": "Endpoint customizado",
|
"API_CUSTOM_SQL_name": "Endpoint customizado",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Desenvolvido por:",
|
"About_Design": "Desenvolvido por:",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Favoritos",
|
"Device_Shortcut_Favorites": "Favoritos",
|
||||||
"Device_Shortcut_NewDevices": "Novos dispositivos",
|
"Device_Shortcut_NewDevices": "Novos dispositivos",
|
||||||
"Device_Shortcut_OnlineChart": "Presença do dispositivo",
|
"Device_Shortcut_OnlineChart": "Presença do dispositivo",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Conexões",
|
"Device_TableHead_Connected_Devices": "Conexões",
|
||||||
"Device_TableHead_Favorite": "Favorito",
|
"Device_TableHead_Favorite": "Favorito",
|
||||||
"Device_TableHead_FirstSession": "Primeira sessão",
|
"Device_TableHead_FirstSession": "Primeira sessão",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "Proprietário",
|
"Device_TableHead_Owner": "Proprietário",
|
||||||
"Device_TableHead_Parent_MAC": "Nó pai MAC",
|
"Device_TableHead_Parent_MAC": "Nó pai MAC",
|
||||||
"Device_TableHead_Port": "Porta",
|
"Device_TableHead_Port": "Porta",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "ID da linha",
|
"Device_TableHead_RowID": "ID da linha",
|
||||||
"Device_TableHead_Rowid": "ID da linha",
|
"Device_TableHead_Rowid": "ID da linha",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "Status",
|
"Device_TableHead_Status": "Status",
|
||||||
"Device_TableHead_SyncHubNodeName": "Nó de sincronização",
|
"Device_TableHead_SyncHubNodeName": "Nó de sincronização",
|
||||||
"Device_TableHead_Type": "Tipo",
|
"Device_TableHead_Type": "Tipo",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Mostrar entradas do _MENU_",
|
"Events_Tablelenght": "Mostrar entradas do _MENU_",
|
||||||
"Events_Tablelenght_all": "Todos",
|
"Events_Tablelenght_all": "Todos",
|
||||||
"Events_Title": "Eventos",
|
"Events_Title": "Eventos",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "Ação",
|
"Gen_Action": "Ação",
|
||||||
"Gen_Add": "Adicionar",
|
"Gen_Add": "Adicionar",
|
||||||
"Gen_Add_All": "Adicionar todos",
|
"Gen_Add_All": "Adicionar todos",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "OK - Pode levar um tempo para a interface do usuário ser atualizada se uma verificação estiver em execução.",
|
"Gen_DataUpdatedUITakesTime": "OK - Pode levar um tempo para a interface do usuário ser atualizada se uma verificação estiver em execução.",
|
||||||
"Gen_Delete": "Excluir",
|
"Gen_Delete": "Excluir",
|
||||||
"Gen_DeleteAll": "Excluir todos",
|
"Gen_DeleteAll": "Excluir todos",
|
||||||
|
"Gen_Description": "",
|
||||||
"Gen_Error": "Erro",
|
"Gen_Error": "Erro",
|
||||||
"Gen_Filter": "Filtro",
|
"Gen_Filter": "Filtro",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "ERRO - O banco de dados pode estar bloqueado - Verifique F12 Ferramentas de desenvolvimento -> Console ou tente mais tarde.",
|
"Gen_LockedDB": "ERRO - O banco de dados pode estar bloqueado - Verifique F12 Ferramentas de desenvolvimento -> Console ou tente mais tarde.",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Esta é uma configuração de manutenção. Se habilitada (<code>0</code> is disabled), dispositivos marcados como <b>Novo Dispositivo</b> serão excluídos se o tempo de <b>Primeira Sessão</b> for mais antigo que as horas especificadas nesta configuração. Use esta configuração se quiser excluir automaticamente <b>Novos Dispositivos</b> após <code>X</code> horas.",
|
"HRS_TO_KEEP_NEWDEV_description": "Esta é uma configuração de manutenção. Se habilitada (<code>0</code> is disabled), dispositivos marcados como <b>Novo Dispositivo</b> serão excluídos se o tempo de <b>Primeira Sessão</b> for mais antigo que as horas especificadas nesta configuração. Use esta configuração se quiser excluir automaticamente <b>Novos Dispositivos</b> após <code>X</code> horas.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Manter novos dispositivos por",
|
"HRS_TO_KEEP_NEWDEV_name": "Manter novos dispositivos por",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "Detalhes",
|
"HelpFAQ_Cat_Detail": "Detalhes",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "O que significa ",
|
"HelpFAQ_Cat_Detail_300_head": "O que significa ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "Significa um dispositivo de rede (um dispositivo do tipo AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Roteador, Adaptador LAN USB, Adaptador Wi-Fi USB ou Internet). Tipos personalizados podem ser adicionados através da configuração <code>NETWORK_DEVICE_TYPES</code>.",
|
"HelpFAQ_Cat_Detail_300_text_a": "Significa um dispositivo de rede (um dispositivo do tipo AP, Gateway, Firewall, Hypervisor, Powerline, Switch, WLAN, PLC, Roteador, Adaptador LAN USB, Adaptador Wi-Fi USB ou Internet). Tipos personalizados podem ser adicionados através da configuração <code>NETWORK_DEVICE_TYPES</code>.",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "",
|
"Loading": "",
|
||||||
"Login_Box": "",
|
"Login_Box": "",
|
||||||
"Login_Default_PWD": "",
|
"Login_Default_PWD": "",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "",
|
"Login_Psw-box": "",
|
||||||
"Login_Psw_alert": "",
|
"Login_Psw_alert": "",
|
||||||
"Login_Psw_folder": "",
|
"Login_Psw_folder": "",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "",
|
"Plugins_DeleteAll": "",
|
||||||
"Plugins_Filters_Mac": "",
|
"Plugins_Filters_Mac": "",
|
||||||
"Plugins_History": "",
|
"Plugins_History": "",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
"Plugins_Objects": "",
|
"Plugins_Objects": "",
|
||||||
"Plugins_Out_of": "",
|
"Plugins_Out_of": "",
|
||||||
"Plugins_Unprocessed_Events": "",
|
"Plugins_Unprocessed_Events": "",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "",
|
"Presence_CalHead_week": "",
|
||||||
"Presence_CalHead_year": "",
|
"Presence_CalHead_year": "",
|
||||||
"Presence_CallHead_Devices": "",
|
"Presence_CallHead_Devices": "",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "",
|
"Presence_Loading": "",
|
||||||
"Presence_Shortcut_AllDevices": "",
|
"Presence_Shortcut_AllDevices": "",
|
||||||
"Presence_Shortcut_Archived": "",
|
"Presence_Shortcut_Archived": "",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "",
|
"Setting_Override": "",
|
||||||
"Setting_Override_Description": "",
|
"Setting_Override_Description": "",
|
||||||
"Settings_Metadata_Toggle": "",
|
"Settings_Metadata_Toggle": "",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
"Settings_device_Scanners_desync": "",
|
"Settings_device_Scanners_desync": "",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "",
|
"Speedtest_Results": "",
|
||||||
@@ -697,4 +717,4 @@
|
|||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
"test_event_icon": "",
|
||||||
"test_event_tooltip": ""
|
"test_event_tooltip": ""
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "Вы можете указать собственный SQL-запрос, который будет генерировать файл JSON, а затем предоставлять его через конечную точку файла <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
|
"API_CUSTOM_SQL_description": "Вы можете указать собственный SQL-запрос, который будет генерировать файл JSON, а затем предоставлять его через конечную точку файла <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
|
||||||
"API_CUSTOM_SQL_name": "Пользовательская конечная точка",
|
"API_CUSTOM_SQL_name": "Пользовательская конечная точка",
|
||||||
|
"API_TOKEN_description": "API-токен для защиты соединения. Вы можете сгенерировать его или ввести любое значение. Он отправляется в заголовке запроса. Используется в плагине <code>SYNC</code> и GraphQL сервере.",
|
||||||
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "Разработан:",
|
"About_Design": "Разработан:",
|
||||||
@@ -56,13 +58,13 @@
|
|||||||
"BackDevices_Restore_okay": "Восстановление выполнено успешно.",
|
"BackDevices_Restore_okay": "Восстановление выполнено успешно.",
|
||||||
"BackDevices_darkmode_disabled": "Темный режим отключен",
|
"BackDevices_darkmode_disabled": "Темный режим отключен",
|
||||||
"BackDevices_darkmode_enabled": "Темный режим включен",
|
"BackDevices_darkmode_enabled": "Темный режим включен",
|
||||||
"CLEAR_NEW_FLAG_description": "",
|
"CLEAR_NEW_FLAG_description": "Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, станут неотмеченными, если лимит времени, указанный в часах, превышает время их <b>первой сессии</b>.",
|
||||||
"CLEAR_NEW_FLAG_name": "",
|
"CLEAR_NEW_FLAG_name": "Удалить новый флаг",
|
||||||
"DAYS_TO_KEEP_EVENTS_description": "Это настройка обслуживания. Здесь указывается количество дней, в течение которых будут храниться записи о событиях. Все старые события будут периодически удаляться. Также применимо к истории событий плагина.",
|
"DAYS_TO_KEEP_EVENTS_description": "Это настройка обслуживания. Здесь указывается количество дней, в течение которых будут храниться записи о событиях. Все старые события будут периодически удаляться. Также применимо к истории событий плагина.",
|
||||||
"DAYS_TO_KEEP_EVENTS_name": "Удалить события старше",
|
"DAYS_TO_KEEP_EVENTS_name": "Удалить события старше",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Скопировать данные с устройства",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Скопировать данные с устройства",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Скопируйте данные с устройства из раскрывающегося списка. Все на этой странице будет перезаписано",
|
"DevDetail_Copy_Device_Tooltip": "Скопируйте данные с устройства из раскрывающегося списка. Все на этой странице будет перезаписано",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Оповещение о всех событиях",
|
"DevDetail_EveandAl_AlertAllEvents": "Оповещения о событиях",
|
||||||
"DevDetail_EveandAl_AlertDown": "Оповещение о доступности",
|
"DevDetail_EveandAl_AlertDown": "Оповещение о доступности",
|
||||||
"DevDetail_EveandAl_Archived": "Архив",
|
"DevDetail_EveandAl_Archived": "Архив",
|
||||||
"DevDetail_EveandAl_NewDevice": "Новое устройство",
|
"DevDetail_EveandAl_NewDevice": "Новое устройство",
|
||||||
@@ -71,7 +73,7 @@
|
|||||||
"DevDetail_EveandAl_ScanCycle": "Сканировать устройство",
|
"DevDetail_EveandAl_ScanCycle": "Сканировать устройство",
|
||||||
"DevDetail_EveandAl_ScanCycle_a": "Сканировать Устройство",
|
"DevDetail_EveandAl_ScanCycle_a": "Сканировать Устройство",
|
||||||
"DevDetail_EveandAl_ScanCycle_z": "Не сканировать устройство",
|
"DevDetail_EveandAl_ScanCycle_z": "Не сканировать устройство",
|
||||||
"DevDetail_EveandAl_Skip": "Пропустить повторные уведомления для",
|
"DevDetail_EveandAl_Skip": "Пропустить повторные уведомления",
|
||||||
"DevDetail_EveandAl_Title": "<i class=\"fa fa-bolt\"></i> Конфигурация событий и оповещений",
|
"DevDetail_EveandAl_Title": "<i class=\"fa fa-bolt\"></i> Конфигурация событий и оповещений",
|
||||||
"DevDetail_Events_CheckBox": "Скрыть события подключения",
|
"DevDetail_Events_CheckBox": "Скрыть события подключения",
|
||||||
"DevDetail_GoToNetworkNode": "Перейти на страницу Сеть данного узла.",
|
"DevDetail_GoToNetworkNode": "Перейти на страницу Сеть данного узла.",
|
||||||
@@ -116,7 +118,7 @@
|
|||||||
"DevDetail_Run_Actions_Tooltip": "Выполнить действие на текущем устройстве из раскрывающегося списка.",
|
"DevDetail_Run_Actions_Tooltip": "Выполнить действие на текущем устройстве из раскрывающегося списка.",
|
||||||
"DevDetail_SessionInfo_FirstSession": "Первый сеанс",
|
"DevDetail_SessionInfo_FirstSession": "Первый сеанс",
|
||||||
"DevDetail_SessionInfo_LastIP": "Последний IP",
|
"DevDetail_SessionInfo_LastIP": "Последний IP",
|
||||||
"DevDetail_SessionInfo_LastSession": "Последние в оффлайн",
|
"DevDetail_SessionInfo_LastSession": "Последний оффлайн",
|
||||||
"DevDetail_SessionInfo_StaticIP": "Статический IP",
|
"DevDetail_SessionInfo_StaticIP": "Статический IP",
|
||||||
"DevDetail_SessionInfo_Status": "Статус",
|
"DevDetail_SessionInfo_Status": "Статус",
|
||||||
"DevDetail_SessionInfo_Title": "<i class=\"fa fa-calendar\"></i> Информация о сеансе",
|
"DevDetail_SessionInfo_Title": "<i class=\"fa fa-calendar\"></i> Информация о сеансе",
|
||||||
@@ -196,7 +198,8 @@
|
|||||||
"Device_Shortcut_DownOnly": "Выключены",
|
"Device_Shortcut_DownOnly": "Выключены",
|
||||||
"Device_Shortcut_Favorites": "Избранные",
|
"Device_Shortcut_Favorites": "Избранные",
|
||||||
"Device_Shortcut_NewDevices": "Новые устройства",
|
"Device_Shortcut_NewDevices": "Новые устройства",
|
||||||
"Device_Shortcut_OnlineChart": "Присутствие устройства",
|
"Device_Shortcut_OnlineChart": "Присутствие устройств",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Соединения",
|
"Device_TableHead_Connected_Devices": "Соединения",
|
||||||
"Device_TableHead_Favorite": "Избранное",
|
"Device_TableHead_Favorite": "Избранное",
|
||||||
"Device_TableHead_FirstSession": "Первый сеанс",
|
"Device_TableHead_FirstSession": "Первый сеанс",
|
||||||
@@ -210,13 +213,15 @@
|
|||||||
"Device_TableHead_MAC": "Случайный MAC-адрес",
|
"Device_TableHead_MAC": "Случайный MAC-адрес",
|
||||||
"Device_TableHead_MAC_full": "Полный MAC-адрес",
|
"Device_TableHead_MAC_full": "Полный MAC-адрес",
|
||||||
"Device_TableHead_Name": "Имя",
|
"Device_TableHead_Name": "Имя",
|
||||||
"Device_TableHead_NetworkSite": "Сайт сети",
|
"Device_TableHead_NetworkSite": "Сайт устройства",
|
||||||
"Device_TableHead_Owner": "Владелец",
|
"Device_TableHead_Owner": "Владелец",
|
||||||
"Device_TableHead_Parent_MAC": "MAC род. узла",
|
"Device_TableHead_Parent_MAC": "MAC род. узла",
|
||||||
"Device_TableHead_Port": "Порт",
|
"Device_TableHead_Port": "Порт",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "ID строки",
|
"Device_TableHead_RowID": "ID строки",
|
||||||
"Device_TableHead_Rowid": "ID строки",
|
"Device_TableHead_Rowid": "ID строки",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "Исходный плагин",
|
||||||
"Device_TableHead_Status": "Статус",
|
"Device_TableHead_Status": "Статус",
|
||||||
"Device_TableHead_SyncHubNodeName": "Узел синхронизации",
|
"Device_TableHead_SyncHubNodeName": "Узел синхронизации",
|
||||||
"Device_TableHead_Type": "Тип",
|
"Device_TableHead_Type": "Тип",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "Показать _MENU_ записей",
|
"Events_Tablelenght": "Показать _MENU_ записей",
|
||||||
"Events_Tablelenght_all": "Все",
|
"Events_Tablelenght_all": "Все",
|
||||||
"Events_Title": "События",
|
"Events_Title": "События",
|
||||||
|
"GRAPHQL_PORT_description": "Номер порта сервера GraphQL.",
|
||||||
|
"GRAPHQL_PORT_name": "Порт GraphQL",
|
||||||
"Gen_Action": "Действия",
|
"Gen_Action": "Действия",
|
||||||
"Gen_Add": "Добавить",
|
"Gen_Add": "Добавить",
|
||||||
"Gen_Add_All": "Добавить все",
|
"Gen_Add_All": "Добавить все",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "ОК - Обновление UI может занять некоторое время, если сканирование выполняется.",
|
"Gen_DataUpdatedUITakesTime": "ОК - Обновление UI может занять некоторое время, если сканирование выполняется.",
|
||||||
"Gen_Delete": "Удалить",
|
"Gen_Delete": "Удалить",
|
||||||
"Gen_DeleteAll": "Удалить все",
|
"Gen_DeleteAll": "Удалить все",
|
||||||
|
"Gen_Description": "Описание",
|
||||||
"Gen_Error": "Ошибка",
|
"Gen_Error": "Ошибка",
|
||||||
"Gen_Filter": "Фильтр",
|
"Gen_Filter": "Фильтр",
|
||||||
|
"Gen_Generate": "Генерировать",
|
||||||
"Gen_LockedDB": "ОШИБКА - Возможно, база данных заблокирована. Проверьте инструменты разработчика F12 -> Консоль или повторите попытку позже.",
|
"Gen_LockedDB": "ОШИБКА - Возможно, база данных заблокирована. Проверьте инструменты разработчика F12 -> Консоль или повторите попытку позже.",
|
||||||
"Gen_Offline": "Оффлайн",
|
"Gen_Offline": "Оффлайн",
|
||||||
"Gen_Okay": "OK",
|
"Gen_Okay": "OK",
|
||||||
@@ -295,7 +304,7 @@
|
|||||||
"Gen_Save": "Сохранить",
|
"Gen_Save": "Сохранить",
|
||||||
"Gen_Saved": "Сохранено",
|
"Gen_Saved": "Сохранено",
|
||||||
"Gen_Search": "Поиск",
|
"Gen_Search": "Поиск",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_SelectToPreview": "Выберите для предварительного просмотра",
|
||||||
"Gen_Selected_Devices": "Выбранные устройства:",
|
"Gen_Selected_Devices": "Выбранные устройства:",
|
||||||
"Gen_Switch": "Переключить",
|
"Gen_Switch": "Переключить",
|
||||||
"Gen_Upd": "Успешное обновление",
|
"Gen_Upd": "Успешное обновление",
|
||||||
@@ -306,8 +315,10 @@
|
|||||||
"Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues",
|
"Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues",
|
||||||
"General_display_name": "Главное",
|
"General_display_name": "Главное",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Это настройка обслуживания. Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, будут удалены, если время их <b>Первого сеанса</b> было старше указанных в этой настройке часов. Используйте этот параметр, если вы хотите автоматически удалять <b>Новые устройства</b> через <code>X</code> часов.",
|
"HRS_TO_KEEP_NEWDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, будут удалены, если время их <b>Первого сеанса</b> было старше указанных в этой настройке часов. Используйте этот параметр, если вы хотите автоматически удалять <b>Новые устройства</b> через <code>X</code> часов.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Хранить новые устройства в течение",
|
"HRS_TO_KEEP_NEWDEV_name": "Удалить новые устройства после",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, которые находятся <b>в Offline</b> и их дата и время <b>последнего Offline</b> старше, чем часы, указанные в этом параметре. Используйте этот параметр, если вы хотите автоматически удалять <b>Offline устройства</b> после <code>X</code> часов отсутствия в сети.",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "Удалить устройства Offline после",
|
||||||
"HelpFAQ_Cat_Detail": "Подробности",
|
"HelpFAQ_Cat_Detail": "Подробности",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "Что значит ",
|
"HelpFAQ_Cat_Detail_300_head": "Что значит ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "означает сетевое устройство (типа AP, шлюз, межсетевой экран, гипервизор, Powerline, коммутатор, WLAN, PLC, маршрутизатор, USB-адаптер локальной сети, USB-адаптер Wi-Fi или Интернет). Пользовательские типы можно добавить с помощью параметра <code>NETWORK_DEVICE_TYPES</code>.",
|
"HelpFAQ_Cat_Detail_300_text_a": "означает сетевое устройство (типа AP, шлюз, межсетевой экран, гипервизор, Powerline, коммутатор, WLAN, PLC, маршрутизатор, USB-адаптер локальной сети, USB-адаптер Wi-Fi или Интернет). Пользовательские типы можно добавить с помощью параметра <code>NETWORK_DEVICE_TYPES</code>.",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Загрузка...",
|
"Loading": "Загрузка...",
|
||||||
"Login_Box": "Введите пароль",
|
"Login_Box": "Введите пароль",
|
||||||
"Login_Default_PWD": "Пароль по умолчанию «123456» все еще активен.",
|
"Login_Default_PWD": "Пароль по умолчанию «123456» все еще активен.",
|
||||||
|
"Login_Info": "Пароли устанавливаются через плагин Set Password. Если у вас возникли проблемы со входом в систему, проверьте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SEPWD документацию</a>.",
|
||||||
"Login_Psw-box": "Пароль",
|
"Login_Psw-box": "Пароль",
|
||||||
"Login_Psw_alert": "Предупреждение о пароле!",
|
"Login_Psw_alert": "Предупреждение о пароле!",
|
||||||
"Login_Psw_folder": "в папке конфигурации.",
|
"Login_Psw_folder": "в папке конфигурации.",
|
||||||
@@ -362,18 +374,18 @@
|
|||||||
"Login_Toggle_Alert_headline": "Предупреждение о пароле!",
|
"Login_Toggle_Alert_headline": "Предупреждение о пароле!",
|
||||||
"Login_Toggle_Info": "Информация о пароле",
|
"Login_Toggle_Info": "Информация о пароле",
|
||||||
"Login_Toggle_Info_headline": "Информация о пароле",
|
"Login_Toggle_Info_headline": "Информация о пароле",
|
||||||
"Maint_PurgeLog": "Журнал очистки",
|
"Maint_PurgeLog": "Очистить журнал",
|
||||||
"Maint_RestartServer": "Перезапустить сервер",
|
"Maint_RestartServer": "Перезапустить сервер",
|
||||||
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
||||||
"Maintenance_Running_Version": "Установленная версия",
|
"Maintenance_Running_Version": "Установленная версия",
|
||||||
"Maintenance_Status": "Статус",
|
"Maintenance_Status": "Статус",
|
||||||
"Maintenance_Title": "Инструменты обслуживания",
|
"Maintenance_Title": "Инструменты обслуживания",
|
||||||
"Maintenance_Tool_ExportCSV": "CSV Экспорт",
|
"Maintenance_Tool_ExportCSV": "Экспорт CSV",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "CSV Экспорт",
|
"Maintenance_Tool_ExportCSV_noti": "Экспорт CSV",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Вы уверены, что хотите создать файл CSV?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Вы уверены, что хотите создать файл CSV?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Создайте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Вы также можете открыть этот URL-адрес <code> URL Вашего NetAlertX/php/server/devices.php?action=ExportCSV</code> или включить плагин <a href=\"settings.php#CSVBCKP_header\">Резервное копирование в CSV</a>.",
|
"Maintenance_Tool_ExportCSV_text": "Создайте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Вы также можете открыть этот URL-адрес <code> URL Вашего NetAlertX/php/server/devices.php?action=ExportCSV</code> или включить плагин <a href=\"settings.php#CSVBCKP_header\">Резервное копирование в CSV</a>.",
|
||||||
"Maintenance_Tool_ImportCSV": "CSV Импорт",
|
"Maintenance_Tool_ImportCSV": "Импорт CSV",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "CSV Импорт",
|
"Maintenance_Tool_ImportCSV_noti": "Импорт CSV",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "Вы уверены, что хотите импортировать файл CSV? Это полностью <b>перезапишет</b> устройства в вашей базе данных.",
|
"Maintenance_Tool_ImportCSV_noti_text": "Вы уверены, что хотите импортировать файл CSV? Это полностью <b>перезапишет</b> устройства в вашей базе данных.",
|
||||||
"Maintenance_Tool_ImportCSV_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Импортируйте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Для этого поместите файл CSV с именем <b>devices.csv</b> в папку <b>/config</b>.",
|
"Maintenance_Tool_ImportCSV_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Импортируйте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Для этого поместите файл CSV с именем <b>devices.csv</b> в папку <b>/config</b>.",
|
||||||
"Maintenance_Tool_ImportPastedCSV": "Импорт CSV (вставка)",
|
"Maintenance_Tool_ImportPastedCSV": "Импорт CSV (вставка)",
|
||||||
@@ -400,7 +412,7 @@
|
|||||||
"Maintenance_Tool_del_alldev_noti": "Удалить устройства",
|
"Maintenance_Tool_del_alldev_noti": "Удалить устройства",
|
||||||
"Maintenance_Tool_del_alldev_noti_text": "Вы уверены, что хотите удалить все устройства?",
|
"Maintenance_Tool_del_alldev_noti_text": "Вы уверены, что хотите удалить все устройства?",
|
||||||
"Maintenance_Tool_del_alldev_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все устройства будут удалены из базы данных.",
|
"Maintenance_Tool_del_alldev_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все устройства будут удалены из базы данных.",
|
||||||
"Maintenance_Tool_del_allevents": "Удалить события (Сбросить присутствие)",
|
"Maintenance_Tool_del_allevents": "Удалить события (Сброс присутствия)",
|
||||||
"Maintenance_Tool_del_allevents30": "Удалить все события старше 30 дней",
|
"Maintenance_Tool_del_allevents30": "Удалить все события старше 30 дней",
|
||||||
"Maintenance_Tool_del_allevents30_noti": "Удалить события",
|
"Maintenance_Tool_del_allevents30_noti": "Удалить события",
|
||||||
"Maintenance_Tool_del_allevents30_noti_text": "Вы уверены, что хотите удалить все события старше 30 дней? Это сбрасывает состояние присутствия всех устройств.",
|
"Maintenance_Tool_del_allevents30_noti_text": "Вы уверены, что хотите удалить все события старше 30 дней? Это сбрасывает состояние присутствия всех устройств.",
|
||||||
@@ -408,14 +420,14 @@
|
|||||||
"Maintenance_Tool_del_allevents_noti": "Удалить события",
|
"Maintenance_Tool_del_allevents_noti": "Удалить события",
|
||||||
"Maintenance_Tool_del_allevents_noti_text": "Вы уверены, что хотите удалить все события? Это сбрасывает состояние присутствия всех устройств.",
|
"Maintenance_Tool_del_allevents_noti_text": "Вы уверены, что хотите удалить все события? Это сбрасывает состояние присутствия всех устройств.",
|
||||||
"Maintenance_Tool_del_allevents_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все события в базе данных будут удалены. В этот момент присутствие всех устройств будет сброшено. Это может привести к недействительным сеансам. Это означает, что устройства отображаются как «присутствующие», хотя они находятся в автономном режиме. Сканирование, когда рассматриваемое устройство находится в сети, решает проблему.",
|
"Maintenance_Tool_del_allevents_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все события в базе данных будут удалены. В этот момент присутствие всех устройств будет сброшено. Это может привести к недействительным сеансам. Это означает, что устройства отображаются как «присутствующие», хотя они находятся в автономном режиме. Сканирование, когда рассматриваемое устройство находится в сети, решает проблему.",
|
||||||
"Maintenance_Tool_del_empty_macs": "Удалить устройства с пустыми MAC-адресами",
|
"Maintenance_Tool_del_empty_macs": "Удалить устройства с пустыми MAC",
|
||||||
"Maintenance_Tool_del_empty_macs_noti": "Удалить устройства",
|
"Maintenance_Tool_del_empty_macs_noti": "Удалить устройства",
|
||||||
"Maintenance_Tool_del_empty_macs_noti_text": "Вы уверены, что хотите удалить все устройства с пустыми MAC-адресами?<br>(возможно, вы предпочитаете заархивировать их)",
|
"Maintenance_Tool_del_empty_macs_noti_text": "Вы уверены, что хотите удалить все устройства с пустыми MAC-адресами?<br>(возможно, вы предпочитаете заархивировать их)",
|
||||||
"Maintenance_Tool_del_empty_macs_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все устройства без MAC-адресов будут удалены из базы данных.",
|
"Maintenance_Tool_del_empty_macs_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все устройства без MAC-адресов будут удалены из базы данных.",
|
||||||
"Maintenance_Tool_del_selecteddev": "Удалить выбранные устройства",
|
"Maintenance_Tool_del_selecteddev": "Удалить выбранные устройства",
|
||||||
"Maintenance_Tool_del_selecteddev_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Выбранные устройства будут удалены из базы данных.",
|
"Maintenance_Tool_del_selecteddev_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Выбранные устройства будут удалены из базы данных.",
|
||||||
"Maintenance_Tool_del_unknowndev": "Удалить (неизвестные) устройства",
|
"Maintenance_Tool_del_unknowndev": "Удалить неизвест. устр-ва",
|
||||||
"Maintenance_Tool_del_unknowndev_noti": "Удалить (неизвестные) устройства",
|
"Maintenance_Tool_del_unknowndev_noti": "Удалить неизвест. устр-ва",
|
||||||
"Maintenance_Tool_del_unknowndev_noti_text": "Вы уверены, что хотите удалить все (неизвестные) и (имя не найдено) устройства?",
|
"Maintenance_Tool_del_unknowndev_noti_text": "Вы уверены, что хотите удалить все (неизвестные) и (имя не найдено) устройства?",
|
||||||
"Maintenance_Tool_del_unknowndev_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все названные устройства (неизвестные) будут удалены из базы данных.",
|
"Maintenance_Tool_del_unknowndev_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Удаление невозможно отменить. Все названные устройства (неизвестные) будут удалены из базы данных.",
|
||||||
"Maintenance_Tool_displayed_columns_text": "Измените видимость и порядок столбцов на странице <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Устройства</b></a>.",
|
"Maintenance_Tool_displayed_columns_text": "Измените видимость и порядок столбцов на странице <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Устройства</b></a>.",
|
||||||
@@ -473,7 +485,7 @@
|
|||||||
"Navigation_Notifications": "Уведомления",
|
"Navigation_Notifications": "Уведомления",
|
||||||
"Navigation_Plugins": "Плагины",
|
"Navigation_Plugins": "Плагины",
|
||||||
"Navigation_Presence": "Присутствие",
|
"Navigation_Presence": "Присутствие",
|
||||||
"Navigation_Report": "Отправить отчеты",
|
"Navigation_Report": "Отчеты",
|
||||||
"Navigation_Settings": "Настройки",
|
"Navigation_Settings": "Настройки",
|
||||||
"Navigation_SystemInfo": "О системе",
|
"Navigation_SystemInfo": "О системе",
|
||||||
"Navigation_Workflows": "Рабочие процессы",
|
"Navigation_Workflows": "Рабочие процессы",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "Удалить все (фильтры игнорируются)",
|
"Plugins_DeleteAll": "Удалить все (фильтры игнорируются)",
|
||||||
"Plugins_Filters_Mac": "Фильтр MAC-адреса",
|
"Plugins_Filters_Mac": "Фильтр MAC-адреса",
|
||||||
"Plugins_History": "История событий",
|
"Plugins_History": "История событий",
|
||||||
|
"Plugins_Obj_DeleteListed": "Удалить перечисленные объекты",
|
||||||
"Plugins_Objects": "Объекты плагина",
|
"Plugins_Objects": "Объекты плагина",
|
||||||
"Plugins_Out_of": "из",
|
"Plugins_Out_of": "из",
|
||||||
"Plugins_Unprocessed_Events": "Необработанные события",
|
"Plugins_Unprocessed_Events": "Необработанные события",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "неделя",
|
"Presence_CalHead_week": "неделя",
|
||||||
"Presence_CalHead_year": "год",
|
"Presence_CalHead_year": "год",
|
||||||
"Presence_CallHead_Devices": "Устройства",
|
"Presence_CallHead_Devices": "Устройства",
|
||||||
|
"Presence_Key_OnlineNow": "Сейчас в сети",
|
||||||
|
"Presence_Key_OnlineNow_desc": "Устройство, обнаруженное при последнем сканировании как подключенное к сети.",
|
||||||
|
"Presence_Key_OnlinePast": "В прошлом в сети",
|
||||||
|
"Presence_Key_OnlinePastMiss": "В прошлом в сети (несовпадение)",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "Устройство в прошлом было подключено к сети, но сейчас находится в автономном режиме, однако стартовый сеанс может отсутствовать или иметь противоречивые данные. (Возможно, это ошибка — отправьте PR, если знаете, как это исправить — здесь я немного запутался в коде)",
|
||||||
|
"Presence_Key_OnlinePast_desc": "Устройство раньше было в сети, но в настоящее время не в сети.",
|
||||||
"Presence_Loading": "Загрузка...",
|
"Presence_Loading": "Загрузка...",
|
||||||
"Presence_Shortcut_AllDevices": "Мои устройства",
|
"Presence_Shortcut_AllDevices": "Мои устройства",
|
||||||
"Presence_Shortcut_Archived": "Архив",
|
"Presence_Shortcut_Archived": "Архив",
|
||||||
@@ -558,13 +577,14 @@
|
|||||||
"REPORT_MAIL_name": "Включить эл. почту",
|
"REPORT_MAIL_name": "Включить эл. почту",
|
||||||
"REPORT_TITLE": "Отчет",
|
"REPORT_TITLE": "Отчет",
|
||||||
"RandomMAC_hover": "Автоматически обнаружено — указывает, рандомизирует ли устройство свой MAC-адрес.",
|
"RandomMAC_hover": "Автоматически обнаружено — указывает, рандомизирует ли устройство свой MAC-адрес.",
|
||||||
"Reports_Sent_Log": "Отправить журнал логов",
|
"Reports_Sent_Log": "Отправленные уведомления",
|
||||||
"SCAN_SUBNETS_description": "Большинство сетевых сканеров (ARP-SCAN, NMAP, NSLOOKUP, DIG, PHOLUS) полагаются на сканирование определенных сетевых интерфейсов и подсетей. Дополнительную информацию по этому параметру можно найти в <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, PHOLUS) полагаются на сканирование определенных сетевых интерфейсов и подсетей. Дополнительную информацию по этому параметру можно найти в <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_name": "",
|
"SCAN_SUBNETS_name": "Сети для сканирования",
|
||||||
"SYSTEM_TITLE": "Системная информация",
|
"SYSTEM_TITLE": "Системная информация",
|
||||||
"Setting_Override": "Переопределить значение",
|
"Setting_Override": "Переопределить значение",
|
||||||
"Setting_Override_Description": "Включение этой опции приведет к переопределению значения по умолчанию, предоставленного приложением, на значение, указанное выше.",
|
"Setting_Override_Description": "Включение этой опции приведет к переопределению значения по умолчанию, предоставленного приложением, на значение, указанное выше.",
|
||||||
"Settings_Metadata_Toggle": "Показать/скрыть метаданные для данного параметра.",
|
"Settings_Metadata_Toggle": "Показать/скрыть метаданные для данного параметра.",
|
||||||
|
"Settings_Show_Description": "Показать описание настройки.",
|
||||||
"Settings_device_Scanners_desync": "⚠ Расписания сканера устройств не синхронизированы.",
|
"Settings_device_Scanners_desync": "⚠ Расписания сканера устройств не синхронизированы.",
|
||||||
"Settings_device_Scanners_desync_popup": "Расписания сканеров устройств (<code>*_RUN_SCHD</code>) не совпадают. Это приведет к несогласованным онлайн/оффлайн уведомлениям устройства. Если это не предусмотрено, используйте одно и то же расписание для всех включенных <b>🔍Сканеров устройств</b>.",
|
"Settings_device_Scanners_desync_popup": "Расписания сканеров устройств (<code>*_RUN_SCHD</code>) не совпадают. Это приведет к несогласованным онлайн/оффлайн уведомлениям устройства. Если это не предусмотрено, используйте одно и то же расписание для всех включенных <b>🔍Сканеров устройств</b>.",
|
||||||
"Speedtest_Results": "Результаты теста скорости",
|
"Speedtest_Results": "Результаты теста скорости",
|
||||||
@@ -651,11 +671,11 @@
|
|||||||
"UI_ICONS_name": "Предопределенные значки",
|
"UI_ICONS_name": "Предопределенные значки",
|
||||||
"UI_LANG_description": "Выберите предпочтительный язык пользовательского интерфейса. Помогите перевести или предложите языки на онлайн-портале <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Выберите предпочтительный язык пользовательского интерфейса. Помогите перевести или предложите языки на онлайн-портале <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Язык интерфейса",
|
"UI_LANG_name": "Язык интерфейса",
|
||||||
"UI_MY_DEVICES_description": "Устройства, статусы которых должны отображаться в <b>Мои устройства</b> по умолчанию. (<code>CTRL + Click</code>, чтобы выбрать/отменить выбор)",
|
"UI_MY_DEVICES_description": "Устройства, статусы которых должны отображаться в стандартном представлении <b>Мои устройства</b>.",
|
||||||
"UI_MY_DEVICES_name": "Показать в «Мои устройства»",
|
"UI_MY_DEVICES_name": "Показать в «Мои устройства»",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Префиксы Mac, которые не следует помечать как случайные устройства. Введите, например, <code>52</code>, чтобы исключить устройства, начинающиеся с <code>52:xx:xx:xx:xx:xx</code>, из метки как устройства со случайным MAC-адресом.",
|
"UI_NOT_RANDOM_MAC_description": "Префиксы Mac, которые не следует помечать как случайные устройства. Введите, например, <code>52</code>, чтобы исключить устройства, начинающиеся с <code>52:xx:xx:xx:xx:xx</code>, из метки как устройства со случайным MAC-адресом.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "Не отмечать как случайные",
|
"UI_NOT_RANDOM_MAC_name": "Не отмечать как случайные",
|
||||||
"UI_PRESENCE_description": "Выберите, какие статусы должны отображаться на диаграмме <b>Присутствие устройства</b> · · на странице <a href=\"/devices.php\" target=\"_blank\">Устройства</a>. (<code>CTRL + Click</code>, чтобы выбрать/отменить выбор)",
|
"UI_PRESENCE_description": "Выберите, какие статусы должны отображаться в диаграмме <b>Присутствие устройств</b>- на странице <a href=\"/devices.php\" target=\"_blank\">Устройства</a>.",
|
||||||
"UI_PRESENCE_name": "Показать в диаграмме присутствия",
|
"UI_PRESENCE_name": "Показать в диаграмме присутствия",
|
||||||
"UI_REFRESH_description": "Введите количество секунд, по истечении которых пользовательский интерфейс перезагружается. Установите значение <code>0</code>, чтобы отключить.",
|
"UI_REFRESH_description": "Введите количество секунд, по истечении которых пользовательский интерфейс перезагружается. Установите значение <code>0</code>, чтобы отключить.",
|
||||||
"UI_REFRESH_name": "Автоматическое обновление интерфейса",
|
"UI_REFRESH_name": "Автоматическое обновление интерфейса",
|
||||||
@@ -664,7 +684,7 @@
|
|||||||
"devices_old": "Актуализируется...",
|
"devices_old": "Актуализируется...",
|
||||||
"general_event_description": "Событие, которое вы инициировали, может занять некоторое время, прежде чем фоновые процессы завершатся. Выполнение завершится, как только очередь выполнения, указанная ниже, опустеет (Проверьте <a href='/maintenance.php#tab_Logging'>журнал ошибок</a> при возникновении проблем). <br/> <br/>· · Очередь выполнения:",
|
"general_event_description": "Событие, которое вы инициировали, может занять некоторое время, прежде чем фоновые процессы завершатся. Выполнение завершится, как только очередь выполнения, указанная ниже, опустеет (Проверьте <a href='/maintenance.php#tab_Logging'>журнал ошибок</a> при возникновении проблем). <br/> <br/>· · Очередь выполнения:",
|
||||||
"general_event_title": "Выполнение специального события",
|
"general_event_title": "Выполнение специального события",
|
||||||
"report_guid": "Руководство по уведомлениям:",
|
"report_guid": "Идентификатор уведомления:",
|
||||||
"report_guid_missing": "Связанное уведомление не найдено. Между недавно отправленными уведомлениями и их доступностью существует небольшая задержка. Обновите страницу и кэшируйте ее через несколько секунд. Также возможно, что выбранное уведомление было удалено во время обслуживания, как указано в настройке <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Вместо этого отображается последнее уведомление. Отсутствующее уведомление имеет следующий GUID:",
|
"report_guid_missing": "Связанное уведомление не найдено. Между недавно отправленными уведомлениями и их доступностью существует небольшая задержка. Обновите страницу и кэшируйте ее через несколько секунд. Также возможно, что выбранное уведомление было удалено во время обслуживания, как указано в настройке <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Вместо этого отображается последнее уведомление. Отсутствующее уведомление имеет следующий GUID:",
|
||||||
"report_select_format": "Выбрать формат:",
|
"report_select_format": "Выбрать формат:",
|
||||||
"report_time": "Время уведомления:",
|
"report_time": "Время уведомления:",
|
||||||
@@ -697,4 +717,4 @@
|
|||||||
"settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>",
|
"settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
"test_event_icon": "fa-vial-circle-check",
|
||||||
"test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки."
|
"test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки."
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "",
|
"API_CUSTOM_SQL_description": "",
|
||||||
"API_CUSTOM_SQL_name": "",
|
"API_CUSTOM_SQL_name": "",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "",
|
"API_display_name": "",
|
||||||
"API_icon": "",
|
"API_icon": "",
|
||||||
"About_Design": "",
|
"About_Design": "",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "Favoriler",
|
"Device_Shortcut_Favorites": "Favoriler",
|
||||||
"Device_Shortcut_NewDevices": "Yeni Cİhazlar",
|
"Device_Shortcut_NewDevices": "Yeni Cİhazlar",
|
||||||
"Device_Shortcut_OnlineChart": "",
|
"Device_Shortcut_OnlineChart": "",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Bağlantılar",
|
"Device_TableHead_Connected_Devices": "Bağlantılar",
|
||||||
"Device_TableHead_Favorite": "",
|
"Device_TableHead_Favorite": "",
|
||||||
"Device_TableHead_FirstSession": "İlk Oturum",
|
"Device_TableHead_FirstSession": "İlk Oturum",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "",
|
"Device_TableHead_Owner": "",
|
||||||
"Device_TableHead_Parent_MAC": "",
|
"Device_TableHead_Parent_MAC": "",
|
||||||
"Device_TableHead_Port": "",
|
"Device_TableHead_Port": "",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "",
|
"Device_TableHead_RowID": "",
|
||||||
"Device_TableHead_Rowid": "",
|
"Device_TableHead_Rowid": "",
|
||||||
"Device_TableHead_SSID": "",
|
"Device_TableHead_SSID": "",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "Durum",
|
"Device_TableHead_Status": "Durum",
|
||||||
"Device_TableHead_SyncHubNodeName": "",
|
"Device_TableHead_SyncHubNodeName": "",
|
||||||
"Device_TableHead_Type": "",
|
"Device_TableHead_Type": "",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "",
|
"Events_Tablelenght": "",
|
||||||
"Events_Tablelenght_all": "",
|
"Events_Tablelenght_all": "",
|
||||||
"Events_Title": "",
|
"Events_Title": "",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "Komut",
|
"Gen_Action": "Komut",
|
||||||
"Gen_Add": "Ekle",
|
"Gen_Add": "Ekle",
|
||||||
"Gen_Add_All": "Tümünü ekle",
|
"Gen_Add_All": "Tümünü ekle",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "TAMAM - Eğer bir tarama çalışıyorsa arayüzün güncellenmesi biraz zaman alabilir",
|
"Gen_DataUpdatedUITakesTime": "TAMAM - Eğer bir tarama çalışıyorsa arayüzün güncellenmesi biraz zaman alabilir",
|
||||||
"Gen_Delete": "Sil",
|
"Gen_Delete": "Sil",
|
||||||
"Gen_DeleteAll": "Tümünü sil",
|
"Gen_DeleteAll": "Tümünü sil",
|
||||||
|
"Gen_Description": "",
|
||||||
"Gen_Error": "Hata",
|
"Gen_Error": "Hata",
|
||||||
"Gen_Filter": "Filtre",
|
"Gen_Filter": "Filtre",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "",
|
"Gen_LockedDB": "",
|
||||||
"Gen_Offline": "Çevrimdışı",
|
"Gen_Offline": "Çevrimdışı",
|
||||||
"Gen_Okay": "Tamam",
|
"Gen_Okay": "Tamam",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "",
|
"HRS_TO_KEEP_NEWDEV_description": "",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "",
|
"HRS_TO_KEEP_NEWDEV_name": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "Detaylar",
|
"HelpFAQ_Cat_Detail": "Detaylar",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "",
|
"HelpFAQ_Cat_Detail_300_head": "",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "",
|
"HelpFAQ_Cat_Detail_300_text_a": "",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "Yükleniyor...",
|
"Loading": "Yükleniyor...",
|
||||||
"Login_Box": "Şifrenizi giriniz",
|
"Login_Box": "Şifrenizi giriniz",
|
||||||
"Login_Default_PWD": "Varsayılan şifre \"123456\" hâlâ aktif.",
|
"Login_Default_PWD": "Varsayılan şifre \"123456\" hâlâ aktif.",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "Şİfre",
|
"Login_Psw-box": "Şİfre",
|
||||||
"Login_Psw_alert": "",
|
"Login_Psw_alert": "",
|
||||||
"Login_Psw_folder": "",
|
"Login_Psw_folder": "",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "",
|
"Plugins_DeleteAll": "",
|
||||||
"Plugins_Filters_Mac": "",
|
"Plugins_Filters_Mac": "",
|
||||||
"Plugins_History": "",
|
"Plugins_History": "",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
"Plugins_Objects": "",
|
"Plugins_Objects": "",
|
||||||
"Plugins_Out_of": "",
|
"Plugins_Out_of": "",
|
||||||
"Plugins_Unprocessed_Events": "",
|
"Plugins_Unprocessed_Events": "",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "hafta",
|
"Presence_CalHead_week": "hafta",
|
||||||
"Presence_CalHead_year": "yıl",
|
"Presence_CalHead_year": "yıl",
|
||||||
"Presence_CallHead_Devices": "Cihazlar",
|
"Presence_CallHead_Devices": "Cihazlar",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "Yükleniyor...",
|
"Presence_Loading": "Yükleniyor...",
|
||||||
"Presence_Shortcut_AllDevices": "Cihazlarım",
|
"Presence_Shortcut_AllDevices": "Cihazlarım",
|
||||||
"Presence_Shortcut_Archived": "",
|
"Presence_Shortcut_Archived": "",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "",
|
"Setting_Override": "",
|
||||||
"Setting_Override_Description": "",
|
"Setting_Override_Description": "",
|
||||||
"Settings_Metadata_Toggle": "",
|
"Settings_Metadata_Toggle": "",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
"Settings_device_Scanners_desync": "",
|
"Settings_device_Scanners_desync": "",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "",
|
"Speedtest_Results": "",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"API_CUSTOM_SQL_description": "您可以指定一个自定义 SQL 查询,它将生成一个 JSON 文件,然后通过 <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> 文件端点</a> 公开它。",
|
"API_CUSTOM_SQL_description": "您可以指定一个自定义 SQL 查询,它将生成一个 JSON 文件,然后通过 <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> 文件端点</a> 公开它。",
|
||||||
"API_CUSTOM_SQL_name": "自定义终点",
|
"API_CUSTOM_SQL_name": "自定义终点",
|
||||||
|
"API_TOKEN_description": "",
|
||||||
|
"API_TOKEN_name": "",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "设计用于:",
|
"About_Design": "设计用于:",
|
||||||
@@ -197,6 +199,7 @@
|
|||||||
"Device_Shortcut_Favorites": "收藏",
|
"Device_Shortcut_Favorites": "收藏",
|
||||||
"Device_Shortcut_NewDevices": "新设备",
|
"Device_Shortcut_NewDevices": "新设备",
|
||||||
"Device_Shortcut_OnlineChart": "设备统计",
|
"Device_Shortcut_OnlineChart": "设备统计",
|
||||||
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "链接",
|
"Device_TableHead_Connected_Devices": "链接",
|
||||||
"Device_TableHead_Favorite": "收藏",
|
"Device_TableHead_Favorite": "收藏",
|
||||||
"Device_TableHead_FirstSession": "加入",
|
"Device_TableHead_FirstSession": "加入",
|
||||||
@@ -214,9 +217,11 @@
|
|||||||
"Device_TableHead_Owner": "所有者",
|
"Device_TableHead_Owner": "所有者",
|
||||||
"Device_TableHead_Parent_MAC": "父节点",
|
"Device_TableHead_Parent_MAC": "父节点",
|
||||||
"Device_TableHead_Port": "端口",
|
"Device_TableHead_Port": "端口",
|
||||||
|
"Device_TableHead_PresentLastScan": "",
|
||||||
"Device_TableHead_RowID": "排行",
|
"Device_TableHead_RowID": "排行",
|
||||||
"Device_TableHead_Rowid": "排行",
|
"Device_TableHead_Rowid": "排行",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
|
"Device_TableHead_SourcePlugin": "",
|
||||||
"Device_TableHead_Status": "状态",
|
"Device_TableHead_Status": "状态",
|
||||||
"Device_TableHead_SyncHubNodeName": "同步节点",
|
"Device_TableHead_SyncHubNodeName": "同步节点",
|
||||||
"Device_TableHead_Type": "类型",
|
"Device_TableHead_Type": "类型",
|
||||||
@@ -269,6 +274,8 @@
|
|||||||
"Events_Tablelenght": "",
|
"Events_Tablelenght": "",
|
||||||
"Events_Tablelenght_all": "全部",
|
"Events_Tablelenght_all": "全部",
|
||||||
"Events_Title": "事件",
|
"Events_Title": "事件",
|
||||||
|
"GRAPHQL_PORT_description": "",
|
||||||
|
"GRAPHQL_PORT_name": "",
|
||||||
"Gen_Action": "动作",
|
"Gen_Action": "动作",
|
||||||
"Gen_Add": "增加",
|
"Gen_Add": "增加",
|
||||||
"Gen_Add_All": "全部添加",
|
"Gen_Add_All": "全部添加",
|
||||||
@@ -281,8 +288,10 @@
|
|||||||
"Gen_DataUpdatedUITakesTime": "好的 - 如果扫描正在运行,UI 可能需要一段时间才能更新。",
|
"Gen_DataUpdatedUITakesTime": "好的 - 如果扫描正在运行,UI 可能需要一段时间才能更新。",
|
||||||
"Gen_Delete": "删除",
|
"Gen_Delete": "删除",
|
||||||
"Gen_DeleteAll": "全部删除",
|
"Gen_DeleteAll": "全部删除",
|
||||||
|
"Gen_Description": "",
|
||||||
"Gen_Error": "错误",
|
"Gen_Error": "错误",
|
||||||
"Gen_Filter": "筛选",
|
"Gen_Filter": "筛选",
|
||||||
|
"Gen_Generate": "",
|
||||||
"Gen_LockedDB": "错误 - DB 可能被锁定 - 检查 F12 开发工具 -> 控制台或稍后重试。",
|
"Gen_LockedDB": "错误 - DB 可能被锁定 - 检查 F12 开发工具 -> 控制台或稍后重试。",
|
||||||
"Gen_Offline": "离线",
|
"Gen_Offline": "离线",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
@@ -308,6 +317,8 @@
|
|||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "这是一项维护设置。如果启用(<code>0</code> 为禁用),则标记为<b>新设备</b>的设备(如果其<b>首次会话</b>时间早于此设置中指定的小时数)将被删除。如果您想在 <code>X</code> 小时后自动删除<b>新设备</b>,请使用此设置。",
|
"HRS_TO_KEEP_NEWDEV_description": "这是一项维护设置。如果启用(<code>0</code> 为禁用),则标记为<b>新设备</b>的设备(如果其<b>首次会话</b>时间早于此设置中指定的小时数)将被删除。如果您想在 <code>X</code> 小时后自动删除<b>新设备</b>,请使用此设置。",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "保留新设备",
|
"HRS_TO_KEEP_NEWDEV_name": "保留新设备",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_description": "",
|
||||||
|
"HRS_TO_KEEP_OFFDEV_name": "",
|
||||||
"HelpFAQ_Cat_Detail": "详细",
|
"HelpFAQ_Cat_Detail": "详细",
|
||||||
"HelpFAQ_Cat_Detail_300_head": "含义 ",
|
"HelpFAQ_Cat_Detail_300_head": "含义 ",
|
||||||
"HelpFAQ_Cat_Detail_300_text_a": "表示网络设备(AP、网关、防火墙、虚拟机管理程序、电力线、交换机、WLAN、PLC、路由器、USB LAN 适配器、USB WIFI 适配器或 Internet 类型的设备)。可以通过 <code>NETWORK_DEVICE_TYPES</code> 设置添加自定义类型。",
|
"HelpFAQ_Cat_Detail_300_text_a": "表示网络设备(AP、网关、防火墙、虚拟机管理程序、电力线、交换机、WLAN、PLC、路由器、USB LAN 适配器、USB WIFI 适配器或 Internet 类型的设备)。可以通过 <code>NETWORK_DEVICE_TYPES</code> 设置添加自定义类型。",
|
||||||
@@ -351,6 +362,7 @@
|
|||||||
"Loading": "加载中...",
|
"Loading": "加载中...",
|
||||||
"Login_Box": "输入密码",
|
"Login_Box": "输入密码",
|
||||||
"Login_Default_PWD": "默认密码“123456”仍然有效。",
|
"Login_Default_PWD": "默认密码“123456”仍然有效。",
|
||||||
|
"Login_Info": "",
|
||||||
"Login_Psw-box": "密码",
|
"Login_Psw-box": "密码",
|
||||||
"Login_Psw_alert": "密码警报!",
|
"Login_Psw_alert": "密码警报!",
|
||||||
"Login_Psw_folder": "在配置文件夹中。",
|
"Login_Psw_folder": "在配置文件夹中。",
|
||||||
@@ -531,6 +543,7 @@
|
|||||||
"Plugins_DeleteAll": "全部删除(忽略过滤器)",
|
"Plugins_DeleteAll": "全部删除(忽略过滤器)",
|
||||||
"Plugins_Filters_Mac": "Mac 过滤器",
|
"Plugins_Filters_Mac": "Mac 过滤器",
|
||||||
"Plugins_History": "事件历史",
|
"Plugins_History": "事件历史",
|
||||||
|
"Plugins_Obj_DeleteListed": "",
|
||||||
"Plugins_Objects": "插件对象",
|
"Plugins_Objects": "插件对象",
|
||||||
"Plugins_Out_of": "",
|
"Plugins_Out_of": "",
|
||||||
"Plugins_Unprocessed_Events": "未处理的事件",
|
"Plugins_Unprocessed_Events": "未处理的事件",
|
||||||
@@ -542,6 +555,12 @@
|
|||||||
"Presence_CalHead_week": "星期",
|
"Presence_CalHead_week": "星期",
|
||||||
"Presence_CalHead_year": "年",
|
"Presence_CalHead_year": "年",
|
||||||
"Presence_CallHead_Devices": "设备",
|
"Presence_CallHead_Devices": "设备",
|
||||||
|
"Presence_Key_OnlineNow": "",
|
||||||
|
"Presence_Key_OnlineNow_desc": "",
|
||||||
|
"Presence_Key_OnlinePast": "",
|
||||||
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "加载中...",
|
"Presence_Loading": "加载中...",
|
||||||
"Presence_Shortcut_AllDevices": "我的设备",
|
"Presence_Shortcut_AllDevices": "我的设备",
|
||||||
"Presence_Shortcut_Archived": "已归档",
|
"Presence_Shortcut_Archived": "已归档",
|
||||||
@@ -565,6 +584,7 @@
|
|||||||
"Setting_Override": "覆盖值",
|
"Setting_Override": "覆盖值",
|
||||||
"Setting_Override_Description": "启用此选项将用上面指定的值覆盖应用程序提供的默认值。",
|
"Setting_Override_Description": "启用此选项将用上面指定的值覆盖应用程序提供的默认值。",
|
||||||
"Settings_Metadata_Toggle": "显示/隐藏给定设置的元数据。",
|
"Settings_Metadata_Toggle": "显示/隐藏给定设置的元数据。",
|
||||||
|
"Settings_Show_Description": "",
|
||||||
"Settings_device_Scanners_desync": "⚠ 设备扫描计划不同步。",
|
"Settings_device_Scanners_desync": "⚠ 设备扫描计划不同步。",
|
||||||
"Settings_device_Scanners_desync_popup": "设备扫描 (<code>*_RUN_SCHD</code>) 的时间表并不相同。这将导致设备在线/离线通知不一致。除非有意为之,否则请对所有启用的 <b>🔍设备扫描</b> 使用相同的时间表。",
|
"Settings_device_Scanners_desync_popup": "设备扫描 (<code>*_RUN_SCHD</code>) 的时间表并不相同。这将导致设备在线/离线通知不一致。除非有意为之,否则请对所有启用的 <b>🔍设备扫描</b> 使用相同的时间表。",
|
||||||
"Speedtest_Results": "Speedtest 结果",
|
"Speedtest_Results": "Speedtest 结果",
|
||||||
@@ -697,4 +717,4 @@
|
|||||||
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
|
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
|
||||||
"test_event_icon": "",
|
"test_event_icon": "",
|
||||||
"test_event_tooltip": "在测试设置之前,请先保存更改。"
|
"test_event_tooltip": "在测试设置之前,请先保存更改。"
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,10 @@
|
|||||||
<?php require 'php/templates/notification.php'; ?>
|
<?php
|
||||||
|
|
||||||
|
require 'php/templates/notification.php';
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
?>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,67 +1,83 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
|
// Constants
|
||||||
$isLogonPage = FALSE;
|
define('CONFIG_PATH', $_SERVER['DOCUMENT_ROOT'] . "/../config/app.conf");
|
||||||
|
define('COOKIE_SAVE_LOGIN_NAME', "NetAlertX_SaveLogin");
|
||||||
|
|
||||||
$CookieSaveLoginName = "NetAlertX_SaveLogin";
|
// Utility Functions
|
||||||
|
function getConfigLine($pattern, $config_lines) {
|
||||||
|
$matches = preg_grep($pattern, $config_lines);
|
||||||
|
return !empty($matches) ? explode("=", array_values($matches)[0]) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getConfigValue($pattern, $config_lines, $delimiter = "'") {
|
||||||
|
$line = preg_grep($pattern, $config_lines);
|
||||||
|
return !empty($line) ? explode($delimiter, array_values($line)[0])[1] : '';
|
||||||
|
}
|
||||||
|
|
||||||
if (strpos($url,'index.php') !== false) {
|
function redirect($url) {
|
||||||
$isLogonPage = TRUE;
|
header("Location: $url");
|
||||||
}
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
session_start();
|
// Initialization
|
||||||
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://';
|
||||||
|
$url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||||
|
|
||||||
if(array_search('action', $_REQUEST) != FALSE)
|
// Parse the URL and extract the path component
|
||||||
{
|
// error_log("-------------");
|
||||||
if ($_REQUEST['action'] == 'logout') {
|
$parsedUrl = parse_url($url, PHP_URL_PATH);
|
||||||
|
|
||||||
|
// Normalize the path: treat '/' (root) and '/index.php' as equivalent
|
||||||
|
$isLogonPage = ($parsedUrl === '/' || $parsedUrl === '/index.php');
|
||||||
|
|
||||||
|
$authHeader = apache_request_headers()['Authorization'] ?? '';
|
||||||
|
$sessionLogin = isset($_SESSION['login']) ? $_SESSION['login'] : 0;
|
||||||
|
|
||||||
|
// Start session if not already started
|
||||||
|
if (session_status() == PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle logout
|
||||||
|
if (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'logout') {
|
||||||
session_destroy();
|
session_destroy();
|
||||||
setcookie($CookieSaveLoginName, "", time() - 3600);
|
setcookie(COOKIE_SAVE_LOGIN_NAME, "", time() - 3600);
|
||||||
header('Location: index.php');
|
redirect('index.php');
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ##################################################
|
// Load configuration
|
||||||
// ## Login Processing start
|
if (!file_exists(CONFIG_PATH)) {
|
||||||
// ##################################################
|
die("Configuration file not found.");
|
||||||
$config_file = "../config/app.conf";
|
}
|
||||||
$config_file_lines = file($config_file);
|
$configLines = file(CONFIG_PATH);
|
||||||
$CookieSaveLoginName = "NetAlertX_SaveLogin";
|
|
||||||
|
|
||||||
// ###################################
|
// Handle web protection and password
|
||||||
// ## SETPWD_enable_password FALSE
|
$nax_WebProtection = strtolower(trim(getConfigLine('/^SETPWD_enable_password.*=/', $configLines)[1] ?? 'false'));
|
||||||
// ###################################
|
$nax_Password = getConfigValue('/^SETPWD_password.*=/', $configLines);
|
||||||
|
$api_token = getConfigValue('/^API_TOKEN.*=/', $configLines, "'");
|
||||||
|
|
||||||
$config_file_lines_bypass = array_values(preg_grep('/^SETPWD_enable_password.*=/', $config_file_lines));
|
$expectedToken = 'Bearer ' . $api_token;
|
||||||
$protection_line = explode("=", $config_file_lines_bypass[0]);
|
|
||||||
$Pia_WebProtection = strtolower(trim($protection_line[1]));
|
|
||||||
|
|
||||||
// ###################################
|
// Authentication Handling
|
||||||
// ## SETPWD_enable_password TRUE
|
if ($nax_WebProtection == 'true') {
|
||||||
// ###################################
|
if ($authHeader === $expectedToken) {
|
||||||
|
$_SESSION['login'] = 1; // User authenticated with bearer token
|
||||||
|
} elseif (!empty($authHeader)) {
|
||||||
|
echo "[Security] Incorrect Bearer Token";
|
||||||
|
}
|
||||||
|
|
||||||
$config_file_lines = array_values(preg_grep('/^SETPWD_password.*=/', $config_file_lines));
|
// Safely check if the session login exists before checking its value
|
||||||
$password_line = explode("'", $config_file_lines[0]);
|
$isLoggedIn = isset($_SESSION['login']) && $_SESSION['login'] == 1;
|
||||||
$Pia_Password = $password_line[1];
|
|
||||||
|
|
||||||
// active Session or valid cookie (cookie not extends)
|
|
||||||
if($Pia_WebProtection == 'true')
|
|
||||||
{
|
|
||||||
if(isset ($_SESSION["login"]) == FALSE )
|
|
||||||
{
|
|
||||||
$_SESSION["login"] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ($_SESSION["login"] == 1) || $isLogonPage || (( isset($_COOKIE[$CookieSaveLoginName]) && $Pia_Password == $_COOKIE[$CookieSaveLoginName ])))
|
|
||||||
{
|
|
||||||
//Logged in or stay on this page if we are on the index.php already
|
|
||||||
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// we need to redirect
|
|
||||||
header('Location: index.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Determine if the user should be redirected
|
||||||
|
if ($isLoggedIn || $isLogonPage || (isset($_COOKIE[COOKIE_SAVE_LOGIN_NAME]) && $nax_Password == $_COOKIE[COOKIE_SAVE_LOGIN_NAME])) {
|
||||||
|
// Logged in or stay on this page if we are on the index.php already
|
||||||
|
} else {
|
||||||
|
// We need to redirect
|
||||||
|
redirect('/index.php');
|
||||||
|
exit; // exit is needed to prevent authentication bypass
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -4,21 +4,18 @@
|
|||||||
// ## GUI settings processing start
|
// ## GUI settings processing start
|
||||||
// ###################################
|
// ###################################
|
||||||
|
|
||||||
if( isset($_COOKIE['UI_dark_mode']))
|
if( isset($_COOKIE['UI_theme']))
|
||||||
{
|
{
|
||||||
$ENABLED_DARKMODE = $_COOKIE['UI_dark_mode'] == "True";
|
$UI_THEME = $_COOKIE['UI_theme'];
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
$ENABLED_DARKMODE = False;
|
$UI_THEME = "Light";
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (glob("/app/db/setting_skin*") as $filename) {
|
$pia_skin_selected = 'skin-blue';
|
||||||
$pia_skin_selected = str_replace('setting_','',basename($filename));
|
|
||||||
}
|
|
||||||
if (isset($pia_skin_selected) == FALSE or (strlen($pia_skin_selected) == 0)) {$pia_skin_selected = 'skin-blue';}
|
|
||||||
|
|
||||||
// ###################################
|
// ###################################
|
||||||
// ## GUI settings processing end
|
// ## GUI settings processing end
|
||||||
// ###################################
|
// ###################################
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#---------------------------------------------------------------------------------#
|
#---------------------------------------------------------------------------------#
|
||||||
|
|
||||||
$filename = "/app/.VERSION";
|
$filename = "/app/.VERSION";
|
||||||
|
|
||||||
if(file_exists($filename)) {
|
if(file_exists($filename)) {
|
||||||
$fileContents = file_get_contents($filename);
|
$fileContents = file_get_contents($filename);
|
||||||
if(trim($fileContents) === 'Dev') {
|
if(trim($fileContents) === 'Dev') {
|
||||||
@@ -22,5 +23,6 @@ if(file_exists($filename)) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
echo date('H:i:s') . " - N/A";
|
echo date('H:i:s') . " - N/A";
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<!-- Page ------------------------------------------------------------------ -->
|
<!-- Page ------------------------------------------------------------------ -->
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper integrations-plugins">
|
||||||
|
|
||||||
<!-- Content header--------------------------------------------------------- -->
|
<!-- Content header--------------------------------------------------------- -->
|
||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 🔌 Plugins
|
# 🔌 Plugins
|
||||||
|
|
||||||
NetAlertX supports additional plugins to extend its functionality, each with its own settings and options. Plugins can be loaded via the General -> `LOADED_PLUGINS` setting by using Ctrl + Click. For custom plugin development, refer to the [Plugin development guide](/docs/PLUGINS_DEV.md).
|
NetAlertX supports additional plugins to extend its functionality, each with its own settings and options. Plugins can be loaded via the General -> `LOADED_PLUGINS` setting. For custom plugin development, refer to the [Plugin development guide](/docs/PLUGINS_DEV.md).
|
||||||
|
|
||||||
>[!NOTE]
|
>[!NOTE]
|
||||||
> Please check this [Plugins debugging guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_PLUGINS.md) and the corresponding Plugin documentation in the below table if you are facing issues.
|
> Please check this [Plugins debugging guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_PLUGINS.md) and the corresponding Plugin documentation in the below table if you are facing issues.
|
||||||
@@ -8,7 +8,7 @@ NetAlertX supports additional plugins to extend its functionality, each with its
|
|||||||
## ⚡ Quick start
|
## ⚡ Quick start
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting. Use `Ctrl + Click` to select/deselect.
|
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting.
|
||||||
|
|
||||||
1. Pick your `🔍 dev scanner` plugin (e.g. `ARPSCAN` or `NMAPDEV`), or import devices into the application with an `📥 importer` plugin. (See **✅Enabling plugins** below)
|
1. Pick your `🔍 dev scanner` plugin (e.g. `ARPSCAN` or `NMAPDEV`), or import devices into the application with an `📥 importer` plugin. (See **✅Enabling plugins** below)
|
||||||
2. Pick a `▶️ publisher` plugin, if you want to send notifications. If you don't see a publisher you'd like to use, look at the [📚_publisher_apprise](/front/plugins/_publisher_apprise/) plugin which is a proxy for over 80 notification services.
|
2. Pick a `▶️ publisher` plugin, if you want to send notifications. If you don't see a publisher you'd like to use, look at the [📚_publisher_apprise](/front/plugins/_publisher_apprise/) plugin which is a proxy for over 80 notification services.
|
||||||
@@ -16,7 +16,6 @@ NetAlertX supports additional plugins to extend its functionality, each with its
|
|||||||
4. Fine-tune [Notifications](/docs/NOTIFICATIONS.md)
|
4. Fine-tune [Notifications](/docs/NOTIFICATIONS.md)
|
||||||
5. [Backup your setup](/docs/BACKUPS.md)
|
5. [Backup your setup](/docs/BACKUPS.md)
|
||||||
6. Contribute and [Create custom plugins](/docs/PLUGINS_DEV.md)
|
6. Contribute and [Create custom plugins](/docs/PLUGINS_DEV.md)
|
||||||
7. Consider [donating](https://github.com/jokob-sk/NetAlertX?tab=readme-ov-file#-sponsors) to keep me going
|
|
||||||
|
|
||||||
|
|
||||||
## 📑 Available Plugins
|
## 📑 Available Plugins
|
||||||
@@ -28,6 +27,7 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
|
|||||||
|---------------|---------|--------------------------------------------|----------|----------|--------------------|---------------------------------------------------------------|
|
|---------------|---------|--------------------------------------------|----------|----------|--------------------|---------------------------------------------------------------|
|
||||||
| `APPRISE` | ▶️ | Apprise notification proxy | | | Script | [_publisher_apprise](/front/plugins/_publisher_apprise/) |
|
| `APPRISE` | ▶️ | Apprise notification proxy | | | Script | [_publisher_apprise](/front/plugins/_publisher_apprise/) |
|
||||||
| `ARPSCAN` | 🔍 | ARP-scan on current network | | | Script | [arp_scan](/front/plugins/arp_scan/) |
|
| `ARPSCAN` | 🔍 | ARP-scan on current network | | | Script | [arp_scan](/front/plugins/arp_scan/) |
|
||||||
|
| `AVAHISCAN` | ♻ | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](/front/plugins/avahi_scan/) |
|
||||||
| `CSVBCKP` | ⚙ | CSV devices backup | | | Script | [csv_backup](/front/plugins/csv_backup/) |
|
| `CSVBCKP` | ⚙ | CSV devices backup | | | Script | [csv_backup](/front/plugins/csv_backup/) |
|
||||||
| `DBCLNP` | ⚙ | Database cleanup | | Yes* | Script | [db_cleanup](/front/plugins/db_cleanup/) |
|
| `DBCLNP` | ⚙ | Database cleanup | | Yes* | Script | [db_cleanup](/front/plugins/db_cleanup/) |
|
||||||
| `DDNS` | ⚙ | DDNS update | | | Script | [ddns_update](/front/plugins/ddns_update/) |
|
| `DDNS` | ⚙ | DDNS update | | | Script | [ddns_update](/front/plugins/ddns_update/) |
|
||||||
@@ -70,13 +70,13 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
|
|||||||
## Plugin types
|
## Plugin types
|
||||||
|
|
||||||
|
|
||||||
| Plugin type | Icon | Description | When to run | Required | Data source [?](/docs/PLUGINS_DEV.md) |
|
| Plugin type | Icon | Description | When to run | Required | Data source [?](/docs/PLUGINS_DEV.md) |
|
||||||
|---------------|------|---------------------------------------------------------------|--------------------------|----|---------|
|
|---------------|------|----------------------------------------------------------------|--------------------------|----|---------|
|
||||||
| publisher | ▶️ | Sending notifications to services. | `on_notification` | ✖ | Script |
|
| publisher | ▶️ | Sending notifications to services. | `on_notification` | ✖ | Script |
|
||||||
| dev scanner | 🔍 | Create devices in the app, usually scanning the current network. | `schedule` | ✖ | Script / SQLite DB |
|
| dev scanner | 🔍 | Create devices in the app, manages online/offline device status. | `schedule` | ✖ | Script / SQLite DB |
|
||||||
| importer | 📥 | Importing devices from another service. | `schedule` | ✖ | Script / SQLite DB |
|
| importer | 📥 | Importing devices from another service. | `schedule` | ✖ | Script / SQLite DB |
|
||||||
| system | ⚙ | Providing core system functionality. | `schedule` / always on | ✖/✔ | Script / Template |
|
| system | ⚙ | Providing core system functionality. | `schedule` / always on | ✖/✔ | Script / Template |
|
||||||
| other | ♻ | Other scanners, e.g. for name resolution | misc | ✖ | Script / Template |
|
| other | ♻ | Other scanners, e.g. for name resolution | misc | ✖ | Script / Template |
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|||||||
@@ -259,9 +259,13 @@
|
|||||||
"function": "CMD",
|
"function": "CMD",
|
||||||
"type": {
|
"type": {
|
||||||
"dataType": "string",
|
"dataType": "string",
|
||||||
"element": "input",
|
"elements": [
|
||||||
"elementOptions": ["readonly"],
|
{
|
||||||
"transformers": []
|
"elementType": "input",
|
||||||
|
"elementOptions": [{ "readonly": "true" }],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"default_value": "python3 /app/front/plugins/<plugin folder>/rename_me.py",
|
"default_value": "python3 /app/front/plugins/<plugin folder>/rename_me.py",
|
||||||
"options": [],
|
"options": [],
|
||||||
@@ -309,6 +313,21 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"database_column_definitions": [
|
"database_column_definitions": [
|
||||||
|
{
|
||||||
|
"column": "Index",
|
||||||
|
"css_classes": "col-sm-2",
|
||||||
|
"show": true,
|
||||||
|
"type": "none",
|
||||||
|
"default_value": "",
|
||||||
|
"options": [],
|
||||||
|
"localized": ["name"],
|
||||||
|
"name": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "Index"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"column": "Object_PrimaryID",
|
"column": "Object_PrimaryID",
|
||||||
"mapped_to_column": "cur_MAC",
|
"mapped_to_column": "cur_MAC",
|
||||||
|
|||||||
@@ -33,19 +33,15 @@
|
|||||||
{
|
{
|
||||||
"column": "Index",
|
"column": "Index",
|
||||||
"css_classes": "col-sm-2",
|
"css_classes": "col-sm-2",
|
||||||
"show": false,
|
"show": true,
|
||||||
"type": "label",
|
"type": "none",
|
||||||
"default_value": "",
|
"default_value": "",
|
||||||
"options": [],
|
"options": [],
|
||||||
"localized": ["name"],
|
"localized": ["name"],
|
||||||
"name": [
|
"name": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "N/A"
|
"string": "Index"
|
||||||
},
|
|
||||||
{
|
|
||||||
"language_code": "es_es",
|
|
||||||
"string": "N/A"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -104,7 +100,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"column": "DateTimeCreated",
|
"column": "DateTimeCreated",
|
||||||
"css_classes": "col-sm-2",
|
"css_classes": "col-sm-3",
|
||||||
"show": true,
|
"show": true,
|
||||||
"type": "label",
|
"type": "label",
|
||||||
"default_value": "",
|
"default_value": "",
|
||||||
@@ -145,7 +141,7 @@
|
|||||||
"options": [
|
"options": [
|
||||||
{
|
{
|
||||||
"type": "eval",
|
"type": "eval",
|
||||||
"param": "`<a href='/report.php?guid=${value}'>${value}</a>`"
|
"param": "`<a href='/report.php?guid=${value}'>Link</a>`"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"localized": ["name"],
|
"localized": ["name"],
|
||||||
|
|||||||
@@ -33,19 +33,15 @@
|
|||||||
{
|
{
|
||||||
"column": "Index",
|
"column": "Index",
|
||||||
"css_classes": "col-sm-2",
|
"css_classes": "col-sm-2",
|
||||||
"show": false,
|
"show": true,
|
||||||
"type": "label",
|
"type": "none",
|
||||||
"default_value": "",
|
"default_value": "",
|
||||||
"options": [],
|
"options": [],
|
||||||
"localized": ["name"],
|
"localized": ["name"],
|
||||||
"name": [
|
"name": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "N/A"
|
"string": "Index"
|
||||||
},
|
|
||||||
{
|
|
||||||
"language_code": "es_es",
|
|
||||||
"string": "N/A"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from email.mime.multipart import MIMEMultipart
|
|||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.header import Header
|
from email.header import Header
|
||||||
from email.utils import parseaddr
|
from email.utils import parseaddr
|
||||||
|
from email.utils import formatdate
|
||||||
import smtplib
|
import smtplib
|
||||||
import socket
|
import socket
|
||||||
import ssl
|
import ssl
|
||||||
@@ -111,13 +112,15 @@ def send(pHTML, pText):
|
|||||||
mylog('debug', [f'[{pluginName}] SMTP_REPORT_TO: {hide_email(str(get_setting_value("SMTP_REPORT_TO")))} SMTP_USER: {hide_email(str(get_setting_value("SMTP_USER")))}'])
|
mylog('debug', [f'[{pluginName}] SMTP_REPORT_TO: {hide_email(str(get_setting_value("SMTP_REPORT_TO")))} SMTP_USER: {hide_email(str(get_setting_value("SMTP_USER")))}'])
|
||||||
|
|
||||||
|
|
||||||
subject, from_email, to_email, message_html, message_text = sanitize_email_content('Net AlertX Report', get_setting_value("SMTP_REPORT_FROM"), get_setting_value("SMTP_REPORT_TO"), pHTML, pText)
|
subject, from_email, to_email, message_html, message_text = sanitize_email_content('NetAlertX Report', get_setting_value("SMTP_REPORT_FROM"), get_setting_value("SMTP_REPORT_TO"), pHTML, pText)
|
||||||
|
|
||||||
# Compose email
|
# Compose email
|
||||||
msg = MIMEMultipart('alternative')
|
msg = MIMEMultipart('alternative')
|
||||||
msg['Subject'] = subject
|
msg['Subject'] = subject
|
||||||
msg['From'] = from_email
|
msg['From'] = from_email
|
||||||
msg['To'] = to_email
|
msg['To'] = to_email
|
||||||
|
msg['Date'] = formatdate(localtime=True)
|
||||||
|
|
||||||
msg.attach (MIMEText (message_text, 'plain'))
|
msg.attach (MIMEText (message_text, 'plain'))
|
||||||
msg.attach (MIMEText (message_html, 'html'))
|
msg.attach (MIMEText (message_html, 'html'))
|
||||||
|
|
||||||
|
|||||||
BIN
front/plugins/_publisher_mqtt/Deleting_MQTT_Plugin_Objects.png
Executable file
|
After Width: | Height: | Size: 142 KiB |