mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
Compare commits
15 Commits
a282d2ff08
...
v25.6.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fd8c2fbd9 | ||
|
|
a3dba96908 | ||
|
|
ae6be2f525 | ||
|
|
16a45c7826 | ||
|
|
5676b50d5d | ||
|
|
7940038728 | ||
|
|
1e13bf6629 | ||
|
|
7dcec16152 | ||
|
|
01f1893431 | ||
|
|
d51f79a154 | ||
|
|
4bc5c9c8ab | ||
|
|
d6260e6fb2 | ||
|
|
ce05ce240c | ||
|
|
10e8c08ce3 | ||
|
|
71a36f2fe6 |
@@ -18,7 +18,7 @@
|
|||||||
# SCAN_SUBNETS = [ '192.168.1.0/24 --interface=eth1', '192.168.1.0/24 --interface=eth0' ]
|
# SCAN_SUBNETS = [ '192.168.1.0/24 --interface=eth1', '192.168.1.0/24 --interface=eth0' ]
|
||||||
|
|
||||||
DISCOVER_PLUGINS=True
|
DISCOVER_PLUGINS=True
|
||||||
SCAN_SUBNETS=['192.168.1.0/24 --interface=eth0']
|
SCAN_SUBNETS=['--localnet']
|
||||||
TIMEZONE='Europe/Berlin'
|
TIMEZONE='Europe/Berlin'
|
||||||
LOADED_PLUGINS=['ARPSCAN','CSVBCKP','DBCLNP', 'DIGSCAN', 'INTRNT','MAINT','NEWDEV', 'NBTSCAN', 'NSLOOKUP','NTFPRCS', 'AVAHISCAN', 'SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS', 'UI']
|
LOADED_PLUGINS=['ARPSCAN','CSVBCKP','DBCLNP', 'DIGSCAN', 'INTRNT','MAINT','NEWDEV', 'NBTSCAN', 'NSLOOKUP','NTFPRCS', 'AVAHISCAN', 'SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS', 'UI']
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ services:
|
|||||||
- ${DEV_LOCATION}/front/plugins.php:/app/front/plugins.php
|
- ${DEV_LOCATION}/front/plugins.php:/app/front/plugins.php
|
||||||
- ${DEV_LOCATION}/front/pluginsCore.php:/app/front/pluginsCore.php
|
- ${DEV_LOCATION}/front/pluginsCore.php:/app/front/pluginsCore.php
|
||||||
- ${DEV_LOCATION}/front/index.php:/app/front/index.php
|
- ${DEV_LOCATION}/front/index.php:/app/front/index.php
|
||||||
|
- ${DEV_LOCATION}/front/initCheck.php:/app/front/initCheck.php
|
||||||
- ${DEV_LOCATION}/front/maintenance.php:/app/front/maintenance.php
|
- ${DEV_LOCATION}/front/maintenance.php:/app/front/maintenance.php
|
||||||
- ${DEV_LOCATION}/front/network.php:/app/front/network.php
|
- ${DEV_LOCATION}/front/network.php:/app/front/network.php
|
||||||
- ${DEV_LOCATION}/front/presence.php:/app/front/presence.php
|
- ${DEV_LOCATION}/front/presence.php:/app/front/presence.php
|
||||||
|
|||||||
@@ -1,42 +1,109 @@
|
|||||||
# ⚙ Initial Setup
|
# ⚡ Quick Start Guide
|
||||||
|
|
||||||
## 📁 Configuration Files
|
Get **NetAlertX** up and running in a few simple steps.
|
||||||
|
|
||||||
- On first run, the app generates a default `app.conf` and `app.db` if unavailable.
|
|
||||||
- Preferred method: Use the **Settings UI**.
|
|
||||||
- If the UI is inaccessible, manually edit [`app.conf`](https://github.com/jokob-sk/NetAlertX/tree/main/back) in `/app/config/`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🖥️ Setting Up Scanners
|
### 1. Configure Scanner Plugin(s)
|
||||||
|
|
||||||
- Define networks to scan by entering accessible subnets.
|
> [!TIP]
|
||||||
- Default plugin: **ARPSCAN** → Requires at least one valid subnet + interface in `SCAN_SUBNETS`.
|
> Enable additional plugins under **Settings → `LOADED_PLUGINS`**.
|
||||||
- 📖 [Subnet & VLAN setup guide](./SUBNETS.md) (for troubleshooting and advanced scenarios).
|
> Make sure to **save** your changes and **reload the page** to activate them.
|
||||||
|
> 
|
||||||
|
|
||||||
### 🔄 PiHole Sync
|
**Initial configuration**: `ARPSCAN`, `INTRNT`
|
||||||
- If using **PiHole**, devices can be synced automatically.
|
|
||||||
- 📖 [PiHole configuration guide](./PIHOLE_GUIDE.md).
|
|
||||||
|
|
||||||
### 📦 Bulk Import
|
> [!NOTE]
|
||||||
> [!NOTE]
|
> `ARPSCAN` and `INTRNT` scan the current network. You can complement them with other `🔍 dev scanner` plugins like `NMAPDEV`, or import devices using `📥 importer` plugins.
|
||||||
> You can bulk-import devices via the [CSV import method](./DEVICES_BULK_EDITING.md).
|
> See the [Subnet & VLAN Setup Guide](./SUBNETS.md) and [Remote Networks](./REMOTE_NETWORKS.md) for advanced configurations.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🌍 Community Guides
|
### 2. Choose a Publisher Plugin
|
||||||
|
|
||||||
- Various community-written configuration guides in **Chinese, Korean, German, French**.
|
**Initial configuration**: `SMTP`
|
||||||
- 📖 [Community Guides](./COMMUNITY_GUIDES.md)
|
|
||||||
|
|
||||||
> ⚠️ **Note:** These guides may be outdated. Always refer to the official documentation first.
|
> [!NOTE]
|
||||||
|
> Configure your SMTP settings or enable additional `▶️ publisher` plugins to send alerts.
|
||||||
|
> For more flexibility, try [📚 `_publisher_apprise`](/front/plugins/_publisher_apprise/), which supports over 80 notification services.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠️ Common Issues
|
### 3. Set Up a Network Topology Diagram
|
||||||
|
|
||||||
Before creating a new issue:
|

|
||||||
|
|
||||||
- Check if a similar issue was [already resolved](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed).
|
**Initial configuration**: The app auto-selects a root node (MAC `internet`) and attempts to identify other network devices by vendor or name.
|
||||||
- Review [common debugging tips](./DEBUG_TIPS.md).
|
|
||||||
- Check [Common Issues](./COMMON_ISSUES.md)
|
> [!NOTE]
|
||||||
|
> Visualize and manage your network using the [Network Guide](./NETWORK_TREE.md).
|
||||||
|
> Some plugins (e.g., `UNFIMP`) build the topology automatically, or you can use [Custom Workflows](./WORKFLOWS.md) to generate it based on your own rules.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Configure Notifications
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Initial configuration**: Notifies on `new_devices`, `down_devices`, and `events` as defined in `NTFPRCS_INCLUDED_SECTIONS`.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Notification settings support global, plugin-specific, and per-device rules.
|
||||||
|
> For fine-tuning, refer to the [Notification Guide](./NOTIFICATIONS.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. Set Up Workflows
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Initial configuration**: N/A
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Automate responses to device status changes, group management, topology updates, and more.
|
||||||
|
> See the [Workflows Guide](./WORKFLOWS.md) to simplify your network operations.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. Backup Your Configuration
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**Initial configuration**: The `CSVBCKP` plugin creates a daily backup to `/config/devices.csv`.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> For a complete backup strategy, follow the [Backup Guide](./BACKUPS.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. (Optional) Create Custom Plugins
|
||||||
|
|
||||||
|
[](https://youtu.be/cdbxlwiWhv8)
|
||||||
|
|
||||||
|
**Initial configuration**: N/A
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Build your own scanner, importer, or publisher plugin.
|
||||||
|
> See the [Plugin Development Guide](./PLUGINS_DEV.md) and included video tutorials.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Recommended Guides
|
||||||
|
|
||||||
|
* 📘 [PiHole Setup Guide](./PIHOLE_GUIDE.md)
|
||||||
|
* 📘 [CSV Import Method](./DEVICES_BULK_EDITING.md)
|
||||||
|
* 📘 [Community Guides (Chinese, Korean, German, French)](./COMMUNITY_GUIDES.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Troubleshooting & Help
|
||||||
|
|
||||||
|
Before opening a new issue:
|
||||||
|
|
||||||
|
* 📘 [Common Issues](./COMMON_ISSUES.md)
|
||||||
|
* 🧰 [Debugging Tips](./DEBUG_TIPS.md)
|
||||||
|
* ✅ [Browse resolved GitHub issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Let me know if you want a condensed README version, separate pages for each section, or UI copy based on this!
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Migration form PiAlert to NetAlertX
|
# Migration form PiAlert to NetAlertX
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Follow this guide only after you you downloaded and started NetAlert X at least once after previously using the PiAlert image.
|
> Follow this guide only after you you downloaded and started a version of NetAlertX prior to v25.6.7 (e.g. `docker pull ghcr.io/jokob-sk/netalertx:25.5.24`) at least once after previously using the PiAlert image. Later versions don't support migration and devices and settings will have to migrated manually, e.g. via [CSV import](./DEVICES_BULK_EDITING.md).
|
||||||
|
|
||||||
## STEPS:
|
## STEPS:
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
Name resolution in NetAlertX relies on multiple plugins to resolve device names from IP addresses. If you are seeing `(name not found)` as device names, follow these steps to diagnose and fix the issue.
|
Name resolution in NetAlertX relies on multiple plugins to resolve device names from IP addresses. If you are seeing `(name not found)` as device names, follow these steps to diagnose and fix the issue.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Before proceeding, make sure [Reverse DNS](./REVERSE_DNS.md) is enabled on your network.
|
||||||
|
> You can control how names are handled and cleaned using the `NEWDEV_NAME_CLEANUP_REGEX` setting.
|
||||||
|
> To auto-update Fully Qualified Domain Names (FQDN), enable the `REFRESH_FQDN` setting.
|
||||||
|
|
||||||
|
|
||||||
## Required Plugins
|
## Required Plugins
|
||||||
|
|
||||||
For best results, ensure the following name resolution plugins are enabled:
|
For best results, ensure the following name resolution plugins are enabled:
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
If you are running a DNS server, such as **AdGuard**, set up **Private reverse DNS servers** for a better name resolution on your network. Enabling this setting will enable NetAlertX to execute dig and nslookup commands to automatically resolve device names based on their IP addresses.
|
If you are running a DNS server, such as **AdGuard**, set up **Private reverse DNS servers** for a better name resolution on your network. Enabling this setting will enable NetAlertX to execute dig and nslookup commands to automatically resolve device names based on their IP addresses.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Before proceeding, ensure that [name resolution plugins](./NAME_RESOLUTION.md) are enabled.
|
||||||
|
> You can customize how names are cleaned using the `NEWDEV_NAME_CLEANUP_REGEX` setting.
|
||||||
|
> To auto-update Fully Qualified Domain Names (FQDN), enable the `REFRESH_FQDN` setting.
|
||||||
|
|
||||||
|
|
||||||
> Example 1: Reverse DNS `disabled`
|
> Example 1: Reverse DNS `disabled`
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# Docker Update Strategies to upgrade NetAlertX
|
# Docker Update Strategies to upgrade NetAlertX
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> For versions prior to `v25.6.7` upgrade to version `v25.5.24` first (`docker pull ghcr.io/jokob-sk/netalertx:25.5.24`) as later versions don't support a full upgrade. Alternatovelly, devices and settings can be migrated manually, e.g. via [CSV import](./DEVICES_BULK_EDITING.md).
|
||||||
|
|
||||||
This guide outlines approaches for updating Docker containers, usually when upgrading to a newer version of NetAlertX. Each method offers different benefits depending on the situation. Here are the methods:
|
This guide outlines approaches for updating Docker containers, usually when upgrading to a newer version of NetAlertX. Each method offers different benefits depending on the situation. Here are the methods:
|
||||||
|
|
||||||
- Manual: Direct commands to stop, remove, and rebuild containers.
|
- Manual: Direct commands to stop, remove, and rebuild containers.
|
||||||
|
|||||||
BIN
docs/img/NETWORK_TREE/Network_tree_details.png
Executable file
BIN
docs/img/NETWORK_TREE/Network_tree_details.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 93 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 71 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 8.0 KiB |
BIN
docs/img/netalertx_docs_old.png
Executable file
BIN
docs/img/netalertx_docs_old.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
@@ -695,6 +695,39 @@ body
|
|||||||
|
|
||||||
/* maintenance buttons */
|
/* maintenance buttons */
|
||||||
|
|
||||||
|
#file-check-list{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-checking .icon-wrap{
|
||||||
|
width: 200px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-checking .icon-wrap i{
|
||||||
|
position: absolute;
|
||||||
|
font-size: xx-large;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-checking .file-name-wrap{
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: flex;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-checking{
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.dbtools-button {
|
.dbtools-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 160px;
|
width: 160px;
|
||||||
@@ -842,6 +875,11 @@ height: 50px;
|
|||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#notifications .notification-buttons{
|
||||||
|
margin: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
#notificationData textarea{
|
#notificationData textarea{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
@@ -1418,6 +1456,11 @@ input[readonly] {
|
|||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.small-box:hover
|
||||||
|
{
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* Device details */
|
/* Device details */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
|
|||||||
@@ -768,8 +768,8 @@ function initializeDatatable (status) {
|
|||||||
{width: '30px', targets: [mapIndx(3), mapIndx(10), mapIndx(13), mapIndx(18)] },
|
{width: '30px', targets: [mapIndx(3), mapIndx(10), mapIndx(13), mapIndx(18)] },
|
||||||
{orderData: [mapIndx(12)], targets: mapIndx(8) },
|
{orderData: [mapIndx(12)], targets: mapIndx(8) },
|
||||||
|
|
||||||
// Device Name
|
// Device Name and FQDN
|
||||||
{targets: [mapIndx(0)],
|
{targets: [mapIndx(0), mapIndx(27)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
// console.log(cellData)
|
// console.log(cellData)
|
||||||
@@ -848,7 +848,7 @@ function initializeDatatable (status) {
|
|||||||
{targets: [mapIndx(26)],
|
{targets: [mapIndx(26)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
if (!emptyArr.includes(cellData)){
|
if (!emptyArr.includes(cellData)){
|
||||||
$(td).html (`<span>${renderCustomProps(cellData, rowData[mapIndx(11)])}<span>`);
|
$(td).html (`<span>${renderCustomProps(cellData, rowData[mapIndx(11)])}</span>`);
|
||||||
} else {
|
} else {
|
||||||
$(td).html ('');
|
$(td).html ('');
|
||||||
}
|
}
|
||||||
|
|||||||
52
front/initCheck.php
Executable file
52
front/initCheck.php
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// check if authenticated
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="py-5">
|
||||||
|
<div class="mt-4 text-center" id="check-status-plc" >
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<i class="fa-solid fa-spinner fa-spin text-secondary"></i> <?= lang('Maintenance_InitCheck_Checking');?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-4 text-center" id="check-status" style="display: none;">
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<i class="fa-solid fa-check text-success"></i> <?= lang('Maintenance_InitCheck_Success');?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="d-flex flex-wrap gap-2 w-100" id="file-check-list"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="text-center box box-secondary col-md-6">
|
||||||
|
<p class="text-muted"><?= lang('Maintenance_InitCheck_QuickSetupGuide');?></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 center text-center" >
|
||||||
|
<button type="button" class=" col-md-12 btn btn-default bg-green " onclick="retryCheck()"><?= lang('Maintenance_ReCheck');?></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function retryCheck() {
|
||||||
|
// re-set page
|
||||||
|
$('#file-check-list').empty();
|
||||||
|
$('#check-status').hide();
|
||||||
|
$('#check-status-plc').show();
|
||||||
|
// re-run check
|
||||||
|
checkAppInitializedJsonInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(() => {
|
||||||
|
checkAppInitializedJsonInit();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -113,7 +113,7 @@ function deleteAllCookies() {
|
|||||||
function cacheSettings()
|
function cacheSettings()
|
||||||
{
|
{
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if(!getCache('completedCalls').includes('cacheSettings'))
|
if(!getCache('cacheSettings_completed') === true)
|
||||||
{
|
{
|
||||||
$.get('php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(resSet) {
|
$.get('php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(resSet) {
|
||||||
|
|
||||||
@@ -211,8 +211,18 @@ function getSetting (key) {
|
|||||||
function cacheStrings() {
|
function cacheStrings() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
// Create a promise for each language
|
// Create a promise for each language (include en_us by default as fallback)
|
||||||
languagesToLoad = ['en_us', getLangCode()]
|
languagesToLoad = ['en_us']
|
||||||
|
|
||||||
|
additionalLanguage = getLangCode()
|
||||||
|
|
||||||
|
if(additionalLanguage != 'en_us')
|
||||||
|
{
|
||||||
|
languagesToLoad.push(additionalLanguage)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(languagesToLoad);
|
||||||
|
|
||||||
const languagePromises = languagesToLoad.map((language_code) => {
|
const languagePromises = languagesToLoad.map((language_code) => {
|
||||||
return new Promise((resolveLang, rejectLang) => {
|
return new Promise((resolveLang, rejectLang) => {
|
||||||
// Fetch core strings and translations
|
// Fetch core strings and translations
|
||||||
@@ -235,7 +245,7 @@ function cacheStrings() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Handle successful completion of language processing
|
// Handle successful completion of language processing
|
||||||
handleSuccess(`cacheStrings[${language_code}]`, resolveLang);
|
handleSuccess(`cacheStrings`, resolveLang);
|
||||||
})
|
})
|
||||||
.fail((pluginError) => {
|
.fail((pluginError) => {
|
||||||
// Handle failure in plugin strings fetching
|
// Handle failure in plugin strings fetching
|
||||||
@@ -356,9 +366,11 @@ function getLangCode() {
|
|||||||
|
|
||||||
function localizeTimestamp(result)
|
function localizeTimestamp(result)
|
||||||
{
|
{
|
||||||
|
|
||||||
// contains TZ in format Europe/Berlin
|
// contains TZ in format Europe/Berlin
|
||||||
tz = getSetting("TIMEZONE")
|
tz = getSetting("TIMEZONE")
|
||||||
|
|
||||||
|
// set default if not available or app still loading
|
||||||
|
tz == "" ? tz = 'Europe/Berlin' : tz = tz;
|
||||||
|
|
||||||
const date = new Date(result); // Assumes result is a timestamp or ISO string
|
const date = new Date(result); // Assumes result is a timestamp or ISO string
|
||||||
const formatter = new Intl.DateTimeFormat('default', {
|
const formatter = new Intl.DateTimeFormat('default', {
|
||||||
@@ -1366,8 +1378,8 @@ function restartBackend() {
|
|||||||
const sessionStorageKey = "myScriptExecuted_common_js";
|
const sessionStorageKey = "myScriptExecuted_common_js";
|
||||||
var completedCalls = []
|
var completedCalls = []
|
||||||
var completedCalls_final = ['cacheSettings', 'cacheStrings', 'cacheDevices'];
|
var completedCalls_final = ['cacheSettings', 'cacheStrings', 'cacheDevices'];
|
||||||
var completedCallsCount = 0;
|
var lang_completedCalls = 0;
|
||||||
var completedCallsCount_final;
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Clearing all the caches
|
// Clearing all the caches
|
||||||
@@ -1453,12 +1465,27 @@ async function isGraphQLServerRunning() {
|
|||||||
// 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() {
|
||||||
|
|
||||||
completedCalls = parseInt(getCache("completedCallsCount"));
|
lang_shouldBeCompletedCalls = getLangCode() == 'en_us' ? 1 : 2;
|
||||||
shouldBeCompletedCalls = getLangCode() == 'en_us' ? 3 : 4;
|
|
||||||
|
|
||||||
return (
|
// check if each ajax call completed succesfully
|
||||||
completedCalls >= shouldBeCompletedCalls
|
$.each(completedCalls_final, function(index, call_name){
|
||||||
);
|
|
||||||
|
if(getCache(call_name + "_completed") != "true")
|
||||||
|
{
|
||||||
|
console.log(`[isAppInitialized] AJAX call ${call_name} unsuccesful: ${getCache(call_name + "_completed")}`)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// check if all required languages chached
|
||||||
|
if(parseInt(getCache("cacheStringsCountCompleted")) != lang_shouldBeCompletedCalls)
|
||||||
|
{
|
||||||
|
console.log(`[isAppInitialized] AJAX call cacheStrings unsuccesful: ${getCache("cacheStringsCountCompleted")} out of ${lang_shouldBeCompletedCalls}`)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -1489,27 +1516,25 @@ 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) => {
|
||||||
console.log(`AJAX call successful: ${callName}`);
|
console.log(`AJAX call successful: ${callName}`);
|
||||||
// completedCalls.push(callName);
|
|
||||||
// setCache('completedCalls', mergeUniqueArrays(getCache('completedCalls').split(','), [callName]));
|
|
||||||
|
|
||||||
val = getCache('completedCallsCount');
|
if(callName.includes("cacheStrings"))
|
||||||
|
|
||||||
if(val == "")
|
|
||||||
{
|
{
|
||||||
val = 0;
|
completed_tmp = getCache("cacheStringsCountCompleted");
|
||||||
} else
|
completed_tmp == "" ? completed_tmp = 0 : completed_tmp = completed_tmp;
|
||||||
{
|
completed_tmp++;
|
||||||
val = parseInt(val)
|
setCache("cacheStringsCountCompleted", completed_tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
setCache('completedCallsCount', val + 1)
|
setCache(callName + "_completed", true)
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Function to handle failure of an AJAX call
|
// Function to handle failure of an AJAX call
|
||||||
const handleFailure = (callName, callback) => {
|
const handleFailure = (callName, callback) => {
|
||||||
console.error(`AJAX call ${callName} failed`);
|
msg = `AJAX call ${callName} failed`
|
||||||
|
console.error(msg);
|
||||||
// Implement retry logic here if needed
|
// Implement retry logic here if needed
|
||||||
|
// write_notification(msg, 'interrupt')
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -433,7 +433,7 @@ function initListInteractionOptions(element) {
|
|||||||
if (clickCounter === 1) {
|
if (clickCounter === 1) {
|
||||||
// Single-click action
|
// Single-click action
|
||||||
showModalFieldInput(
|
showModalFieldInput(
|
||||||
`<i class="fa-regular fa-pen-to-square"></i> ${getString(
|
`<i class="fa fa-pen-to-square"></i> ${getString(
|
||||||
"Gen_Update_Value"
|
"Gen_Update_Value"
|
||||||
)}`,
|
)}`,
|
||||||
getString("settings_update_item_warning"),
|
getString("settings_update_item_warning"),
|
||||||
|
|||||||
@@ -26,6 +26,134 @@ function lockDatabase(delay=20) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const requiredFiles = [
|
||||||
|
'app_state.json',
|
||||||
|
'plugins.json',
|
||||||
|
'table_devices.json',
|
||||||
|
'table_devices_filters.json',
|
||||||
|
'table_devices_tiles.json',
|
||||||
|
'table_notifications.json',
|
||||||
|
'table_online_history.json',
|
||||||
|
'table_appevents.json',
|
||||||
|
'table_custom_endpoint.json',
|
||||||
|
'table_events_pending_alert.json',
|
||||||
|
'table_plugins_events.json',
|
||||||
|
'table_plugins_history.json',
|
||||||
|
'table_plugins_language_strings.json',
|
||||||
|
'table_plugins_objects.json',
|
||||||
|
'table_settings.json',
|
||||||
|
'user_notifications.json'
|
||||||
|
];
|
||||||
|
|
||||||
|
const internalChecks = ['isAppInitialized', 'isGraphQLServerRunning'];
|
||||||
|
|
||||||
|
const fileStatus = {}; // Track file check results
|
||||||
|
|
||||||
|
function updateFileStatusUI(file, status) {
|
||||||
|
const item = $(`#file-${file.replace(/[^a-z0-9]/gi, '-')}`);
|
||||||
|
const icon = item.find('span.icon-wrap');
|
||||||
|
|
||||||
|
if (status === 'ok') {
|
||||||
|
icon.html('<i class="fa-solid fa-check "></i>');
|
||||||
|
} else if (status === 'fail') {
|
||||||
|
icon.html('<i class="fa-solid fa-xmark "></i>');
|
||||||
|
} else {
|
||||||
|
icon.html('<i class="fa-solid fa-spinner fa-spin text-secondary"></i>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function checkAppInitializedJson() {
|
||||||
|
requiredFiles.forEach(file => {
|
||||||
|
$.get('php/server/query_json.php', { file, nocache: Date.now() })
|
||||||
|
.done(() => {
|
||||||
|
if (fileStatus[file] !== 'ok') {
|
||||||
|
fileStatus[file] = 'ok';
|
||||||
|
updateFileStatusUI(file, 'ok');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.fail(() => {
|
||||||
|
fileStatus[file] = 'fail';
|
||||||
|
updateFileStatusUI(file, 'fail');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const allOk = requiredFiles.every(file => fileStatus[file] === 'ok');
|
||||||
|
|
||||||
|
if (allOk) {
|
||||||
|
checkInternalStatusAfterFiles();
|
||||||
|
} else {
|
||||||
|
setTimeout(checkAppInitializedJson, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function checkInternalStatusAfterFiles() {
|
||||||
|
const promises = [
|
||||||
|
waitForAppInitialized().then(() => {
|
||||||
|
fileStatus['isAppInitialized'] = 'ok';
|
||||||
|
updateFileStatusUI('isAppInitialized', 'ok');
|
||||||
|
}).catch(() => {
|
||||||
|
fileStatus['isAppInitialized'] = 'fail';
|
||||||
|
updateFileStatusUI('isAppInitialized', 'fail');
|
||||||
|
}),
|
||||||
|
|
||||||
|
waitForGraphQLServer().then(() => {
|
||||||
|
fileStatus['isGraphQLServerRunning'] = 'ok';
|
||||||
|
updateFileStatusUI('isGraphQLServerRunning', 'ok');
|
||||||
|
}).catch(() => {
|
||||||
|
fileStatus['isGraphQLServerRunning'] = 'fail';
|
||||||
|
updateFileStatusUI('isGraphQLServerRunning', 'fail');
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
Promise.allSettled(promises).then(() => {
|
||||||
|
const allPassed = internalChecks.every(key => fileStatus[key] === 'ok');
|
||||||
|
if (allPassed) {
|
||||||
|
$('#check-status').show();
|
||||||
|
$('#check-status-plc').hide();
|
||||||
|
} else {
|
||||||
|
setTimeout(checkInternalStatusAfterFiles, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function waitForAppInitialized() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (isAppInitialized()) {
|
||||||
|
resolve();
|
||||||
|
} else {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initial UI setup for all items
|
||||||
|
function checkAppInitializedJsonInit() {
|
||||||
|
const allItems = [...requiredFiles, ...internalChecks];
|
||||||
|
|
||||||
|
allItems.forEach(file => {
|
||||||
|
|
||||||
|
|
||||||
|
$('#file-check-list').append(`
|
||||||
|
<div class="panel panel-secondary col-xs-6 col-sm-4 col-md-3 col-lg-2 col-xxl-1 padding-5px">
|
||||||
|
<div class="file-checking border rounded p-2 d-flex flex-column justify-content-between h-100" id="file-${file.replace(/[^a-z0-9]/gi, '-')}">
|
||||||
|
<div class="d-flex align-items-center gap-2 mb-2">
|
||||||
|
<span class="file-name-wrap flex-grow-1 text-truncate" title="${file}">${file}</span>
|
||||||
|
<span class="icon-wrap align-items-center text-center"><i class="fa-solid fa-spinner fa-spin text-secondary"></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
fileStatus[file] = 'checking';
|
||||||
|
});
|
||||||
|
|
||||||
|
checkAppInitializedJson();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -200,9 +200,9 @@ function validateRegex(elem) {
|
|||||||
|
|
||||||
// Validate against regex
|
// Validate against regex
|
||||||
if (regex.test(value)) {
|
if (regex.test(value)) {
|
||||||
iconSpan.html("<i class='fa-regular fa-check'></i>");
|
iconSpan.html("<i class='fa fa-check'></i>");
|
||||||
} else {
|
} else {
|
||||||
iconSpan.html("<i class='fa-regular fa-xmark'></i>");
|
iconSpan.html("<i class='fa fa-xmark'></i>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ $db->close();
|
|||||||
<div class="box" id="Maintain-Status">
|
<div class="box" id="Maintain-Status">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
<h3 class="box-title">
|
<h3 class="box-title">
|
||||||
<i class="fa fa-display"></i></i>
|
<i class="fa fa-display"></i>
|
||||||
<?= lang('Maintenance_Status');?>
|
<?= lang('Maintenance_Status');?>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,7 +59,7 @@ $db->close();
|
|||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_version');?>
|
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_version');?>
|
||||||
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/VERSIONS.md" target="_blank"> <span><i class="fa fa-circle-question"></i></a><span>
|
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/VERSIONS.md" target="_blank"> <span><i class="fa fa-circle-question"></i></a></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table_cell">
|
<div class="db_info_table_cell">
|
||||||
<div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
|
<div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
|
||||||
@@ -111,7 +111,7 @@ $db->close();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="nav-tabs-custom">
|
<div class="nav-tabs-custom">
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a id="tab_DBTools_id" href="#tab_DBTools" data-toggle="tab">
|
<a id="tab_DBTools_id" href="#tab_DBTools" data-toggle="tab">
|
||||||
<i class="fa fa-toolbox"></i>
|
<i class="fa fa-toolbox"></i>
|
||||||
@@ -136,7 +136,13 @@ $db->close();
|
|||||||
<?= lang('Device_MultiEdit');?>
|
<?= lang('Device_MultiEdit');?>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li>
|
||||||
|
<a id="tab_initCheck_id" href="#tab_initCheck" data-toggle="tab">
|
||||||
|
<i class="fa-solid fa-check"></i>
|
||||||
|
<?= lang('Maintenance_InitCheck');?>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane active" id="tab_DBTools">
|
<div class="tab-pane active" id="tab_DBTools">
|
||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
@@ -178,6 +184,8 @@ $db->close();
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- ---------------------------Backup restore -------------------------------------------- -->
|
||||||
<div class="tab-pane" id="tab_BackupRestore">
|
<div class="tab-pane" id="tab_BackupRestore">
|
||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
@@ -245,11 +253,11 @@ $db->close();
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
|
|
||||||
<div id="logsPlc"></div>
|
<div id="logsPlc"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ---------------------------Bulk edit -------------------------------------------- -->
|
<!-- ---------------------------Bulk edit -------------------------------------------- -->
|
||||||
<div class="tab-pane" id="tab_multiEdit">
|
<div class="tab-pane" id="tab_multiEdit">
|
||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
@@ -260,35 +268,53 @@ $db->close();
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- ---------------------------Init check -------------------------------------------- -->
|
||||||
|
<div class="tab-pane" id="tab_initCheck">
|
||||||
|
<div class="db_info_table">
|
||||||
|
<div class="box box-solid">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require 'initCheck.php';
|
||||||
|
?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- ------------------------------------------------------------------------------ -->
|
<!-- ------------------------------------------------------------------------------ -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="box-body" style="text-align: center;">
|
<div class="box-body " style="text-align: center;">
|
||||||
<h5 class="text-aqua" style="font-size: 16px;">
|
<h5 class="text-aqua" style="font-size: 16px;">
|
||||||
<span id="lastCommit">
|
<span id="lastCommit">
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
<span id="lastDockerUpdate">
|
<span id="lastDockerUpdate">
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</h5>
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- /.content -->
|
||||||
|
<?php
|
||||||
|
require 'php/templates/footer.php';
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- /.content-wrapper -->
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- /.content -->
|
|
||||||
<?php
|
|
||||||
require 'php/templates/footer.php';
|
|
||||||
?>
|
|
||||||
</div>
|
|
||||||
<!-- /.content-wrapper -->
|
|
||||||
|
|
||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
|||||||
@@ -64,10 +64,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script defer>
|
<script defer>
|
||||||
|
|
||||||
|
|||||||
@@ -125,8 +125,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<br>
|
|
||||||
<div id="assignedDevices" class="box-body no-padding">
|
<div id="assignedDevices" class="box-body no-padding">
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h3>
|
<h3>
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<!-- To the right -->
|
<!-- To the right -->
|
||||||
<div class="pull-right no-hidden-xs">
|
<div class="pull-right no-hidden-xs">
|
||||||
| <a href="https://gurubase.io/g/netalertx" class="pointer" target="_blank" title="Ask AI"><i class="fa-regular fa-comment-dots fa-flip-horizontal"></i></a>
|
| <a href="https://gurubase.io/g/netalertx" class="pointer" target="_blank" title="Ask AI"><i class="fa fa-comment-dots fa-flip-horizontal"></i></a>
|
||||||
| <a href="https://jokob-sk.github.io/NetAlertX/" class="pointer" target="_blank" title="Documentation"><i class="fa fa-book"></i></a>
|
| <a href="https://jokob-sk.github.io/NetAlertX/" class="pointer" target="_blank" title="Documentation"><i class="fa fa-book"></i></a>
|
||||||
| <a href="https://github.com/jokob-sk/NetAlertX/issues" class="pointer" target="_blank"><i class="fa fa-bug" title="Report a bug"></i></a>
|
| <a href="https://github.com/jokob-sk/NetAlertX/issues" class="pointer" target="_blank"><i class="fa fa-bug" title="Report a bug"></i></a>
|
||||||
| <a href="https://discord.com/invite/NczTUTWyRr" class="pointer" target="_blank"><i class="fa-brands fa-discord" title="Join Discord"></i></a>
|
| <a href="https://discord.com/invite/NczTUTWyRr" class="pointer" target="_blank"><i class="fa-brands fa-discord" title="Join Discord"></i></a>
|
||||||
|
|||||||
@@ -357,6 +357,9 @@
|
|||||||
<li>
|
<li>
|
||||||
<a href="maintenance.php#tab_multiEdit" onclick="initializeTabs()"> <?= lang("Device_MultiEdit");?> </a>
|
<a href="maintenance.php#tab_multiEdit" onclick="initializeTabs()"> <?= lang("Device_MultiEdit");?> </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="maintenance.php#tab_initCheck" onclick="initializeTabs()"> <?= lang("Maintenance_InitCheck");?> </a>
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "",
|
"Maint_PurgeLog": "",
|
||||||
"Maint_RestartServer": "",
|
"Maint_RestartServer": "",
|
||||||
"Maint_Restart_Server_noti_text": "",
|
"Maint_Restart_Server_noti_text": "",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "",
|
"Maintenance_Running_Version": "",
|
||||||
"Maintenance_Status": "",
|
"Maintenance_Status": "",
|
||||||
"Maintenance_Title": "",
|
"Maintenance_Title": "",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Registre de purga",
|
"Maint_PurgeLog": "Registre de purga",
|
||||||
"Maint_RestartServer": "Reinici del servidor",
|
"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.",
|
"Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Versió instal·lada",
|
"Maintenance_Running_Version": "Versió instal·lada",
|
||||||
"Maintenance_Status": "Estat",
|
"Maintenance_Status": "Estat",
|
||||||
"Maintenance_Title": "Eines de manteniment",
|
"Maintenance_Title": "Eines de manteniment",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "",
|
"Maint_PurgeLog": "",
|
||||||
"Maint_RestartServer": "",
|
"Maint_RestartServer": "",
|
||||||
"Maint_Restart_Server_noti_text": "",
|
"Maint_Restart_Server_noti_text": "",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "",
|
"Maintenance_Running_Version": "",
|
||||||
"Maintenance_Status": "",
|
"Maintenance_Status": "",
|
||||||
"Maintenance_Title": "",
|
"Maintenance_Title": "",
|
||||||
|
|||||||
@@ -385,6 +385,11 @@
|
|||||||
"Maint_PurgeLog": "Protokoll bereinigen",
|
"Maint_PurgeLog": "Protokoll bereinigen",
|
||||||
"Maint_RestartServer": "Server neu starten",
|
"Maint_RestartServer": "Server neu starten",
|
||||||
"Maint_Restart_Server_noti_text": "Soll der Backend-Server wirklich neu gestartet werden? Das könnte Instabilitäten verursachen. Vorher ein Backup erstellen. <br/><br/>Hinweis: Das kann einige Minuten dauern.",
|
"Maint_Restart_Server_noti_text": "Soll der Backend-Server wirklich neu gestartet werden? Das könnte Instabilitäten verursachen. Vorher ein Backup erstellen. <br/><br/>Hinweis: Das kann einige Minuten dauern.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Installierte Version",
|
"Maintenance_Running_Version": "Installierte Version",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Wartungswerkzeuge",
|
"Maintenance_Title": "Wartungswerkzeuge",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Purge log",
|
"Maint_PurgeLog": "Purge log",
|
||||||
"Maint_RestartServer": "Restart server",
|
"Maint_RestartServer": "Restart server",
|
||||||
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
||||||
|
"Maintenance_InitCheck": "Init Check",
|
||||||
|
"Maintenance_InitCheck_Checking": "Checking...",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
||||||
|
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
||||||
|
"Maintenance_ReCheck": "Retry Check",
|
||||||
"Maintenance_Running_Version": "Installed version",
|
"Maintenance_Running_Version": "Installed version",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Maintenance tools",
|
"Maintenance_Title": "Maintenance tools",
|
||||||
|
|||||||
@@ -383,6 +383,11 @@
|
|||||||
"Maint_PurgeLog": "Purgar los registros",
|
"Maint_PurgeLog": "Purgar los registros",
|
||||||
"Maint_RestartServer": "Restablecer el servidor",
|
"Maint_RestartServer": "Restablecer el servidor",
|
||||||
"Maint_Restart_Server_noti_text": "¿Estás seguro de que desea reiniciar el servidor backend? Esto puede causar inconsistencia en la aplicación. Primero haga una copia de seguridad de su configuración.<br/> <br/> Nota: Esto puede tardar unos minutos.",
|
"Maint_Restart_Server_noti_text": "¿Estás seguro de que desea reiniciar el servidor backend? Esto puede causar inconsistencia en la aplicación. Primero haga una copia de seguridad de su configuración.<br/> <br/> Nota: Esto puede tardar unos minutos.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Versión instalada",
|
"Maintenance_Running_Version": "Versión instalada",
|
||||||
"Maintenance_Status": "Situación",
|
"Maintenance_Status": "Situación",
|
||||||
"Maintenance_Title": "Herramientas de mantenimiento",
|
"Maintenance_Title": "Herramientas de mantenimiento",
|
||||||
|
|||||||
5
front/php/templates/language/fr_fr.json
Normal file → Executable file
5
front/php/templates/language/fr_fr.json
Normal file → Executable file
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Nettoyer les logs",
|
"Maint_PurgeLog": "Nettoyer les logs",
|
||||||
"Maint_RestartServer": "Relancer le serveur",
|
"Maint_RestartServer": "Relancer le serveur",
|
||||||
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end ? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque : cela peut prendre quelques minutes.",
|
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end ? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque : cela peut prendre quelques minutes.",
|
||||||
|
"Maintenance_InitCheck": "Vérification initiale",
|
||||||
|
"Maintenance_InitCheck_Checking": "Vérification...",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.",
|
||||||
|
"Maintenance_InitCheck_Success": "Application initialisée avec succès !",
|
||||||
|
"Maintenance_ReCheck": "Relancer la vérification",
|
||||||
"Maintenance_Running_Version": "Version installée",
|
"Maintenance_Running_Version": "Version installée",
|
||||||
"Maintenance_Status": "État",
|
"Maintenance_Status": "État",
|
||||||
"Maintenance_Title": "Outils de maintenance",
|
"Maintenance_Title": "Outils de maintenance",
|
||||||
|
|||||||
13
front/php/templates/language/it_it.json
Executable file → Normal file
13
front/php/templates/language/it_it.json
Executable file → Normal file
@@ -211,7 +211,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Avviso disconnessione",
|
"Device_TableHead_AlertDown": "Avviso disconnessione",
|
||||||
"Device_TableHead_Connected_Devices": "Connessioni",
|
"Device_TableHead_Connected_Devices": "Connessioni",
|
||||||
"Device_TableHead_CustomProps": "Proprietà/Azioni",
|
"Device_TableHead_CustomProps": "Proprietà/Azioni",
|
||||||
"Device_TableHead_FQDN": "",
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Preferito",
|
"Device_TableHead_Favorite": "Preferito",
|
||||||
"Device_TableHead_FirstSession": "Prima sessione",
|
"Device_TableHead_FirstSession": "Prima sessione",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Elimina log",
|
"Maint_PurgeLog": "Elimina log",
|
||||||
"Maint_RestartServer": "Riavvia server",
|
"Maint_RestartServer": "Riavvia server",
|
||||||
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
|
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
|
||||||
|
"Maintenance_InitCheck": "Controllo iniziale",
|
||||||
|
"Maintenance_InitCheck_Checking": "Controllo in corso...",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.",
|
||||||
|
"Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!",
|
||||||
|
"Maintenance_ReCheck": "Riprova controllo",
|
||||||
"Maintenance_Running_Version": "Versione installata",
|
"Maintenance_Running_Version": "Versione installata",
|
||||||
"Maintenance_Status": "Stato",
|
"Maintenance_Status": "Stato",
|
||||||
"Maintenance_Title": "Strumenti di manutenzione",
|
"Maintenance_Title": "Strumenti di manutenzione",
|
||||||
@@ -560,8 +565,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Preferiti",
|
"Presence_Shortcut_Favorites": "Preferiti",
|
||||||
"Presence_Shortcut_NewDevices": "Nuovi dispositivi",
|
"Presence_Shortcut_NewDevices": "Nuovi dispositivi",
|
||||||
"Presence_Title": "Presenza per dispositivo",
|
"Presence_Title": "Presenza per dispositivo",
|
||||||
"REFRESH_FQDN_description": "",
|
"REFRESH_FQDN_description": "Esegue nuovamente la scansione di tutti i dispositivi e aggiorna il loro nome di dominio completo (FQDN). Se disabilitato, vengono scansionati solo i dispositivi senza nome noto per migliorare le prestazioni. In questo caso, l'FQDN viene aggiornato solo durante la rilevazione iniziale del dispositivo.",
|
||||||
"REFRESH_FQDN_name": "",
|
"REFRESH_FQDN_name": "Aggiorna FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Questo URL viene utilizzato come base per generare collegamenti nei report HTML (ad esempio: e-mail). Inserisci l'URL completo che inizia con <code>http://</code> incluso il numero di porta (nessuna barra finale <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Questo URL viene utilizzato come base per generare collegamenti nei report HTML (ad esempio: e-mail). Inserisci l'URL completo che inizia con <code>http://</code> incluso il numero di porta (nessuna barra finale <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "URL NetAlertX",
|
"REPORT_DASHBOARD_URL_name": "URL NetAlertX",
|
||||||
"REPORT_ERROR": "La pagina che stai cercando è momentaneamente non disponibile, riprova tra qualche secondo",
|
"REPORT_ERROR": "La pagina che stai cercando è momentaneamente non disponibile, riprova tra qualche secondo",
|
||||||
@@ -745,4 +750,4 @@
|
|||||||
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>",
|
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
"test_event_icon": "fa-vial-circle-check",
|
||||||
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
|
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "",
|
"Maint_PurgeLog": "",
|
||||||
"Maint_RestartServer": "",
|
"Maint_RestartServer": "",
|
||||||
"Maint_Restart_Server_noti_text": "",
|
"Maint_Restart_Server_noti_text": "",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Installert versjon",
|
"Maintenance_Running_Version": "Installert versjon",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Vedlikeholdsverktøy",
|
"Maintenance_Title": "Vedlikeholdsverktøy",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Wyczyść Logi",
|
"Maint_PurgeLog": "Wyczyść Logi",
|
||||||
"Maint_RestartServer": "Zrestartuj serwer",
|
"Maint_RestartServer": "Zrestartuj serwer",
|
||||||
"Maint_Restart_Server_noti_text": "Jesteś pewien, że chcesz zrestartować serwer backend? Może spowodować to niespujności w aplikacji. Najpierw utwórz backup konfiguracji. <br/> <br/> Uwaga: Może to zająć kilkla minut.",
|
"Maint_Restart_Server_noti_text": "Jesteś pewien, że chcesz zrestartować serwer backend? Może spowodować to niespujności w aplikacji. Najpierw utwórz backup konfiguracji. <br/> <br/> Uwaga: Może to zająć kilkla minut.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Zainstalowana wersja",
|
"Maintenance_Running_Version": "Zainstalowana wersja",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Narzędzia konserwacyjne",
|
"Maintenance_Title": "Narzędzia konserwacyjne",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Limpar o registo",
|
"Maint_PurgeLog": "Limpar o registo",
|
||||||
"Maint_RestartServer": "Reiniciar o servidor",
|
"Maint_RestartServer": "Reiniciar o servidor",
|
||||||
"Maint_Restart_Server_noti_text": "Tem certeza de que deseja reiniciar o servidor backend? Isso pode causar inconsistência no aplicativo. Faça backup da sua configuração primeiro. <br/> <br/> Nota: Isso pode levar alguns minutos.",
|
"Maint_Restart_Server_noti_text": "Tem certeza de que deseja reiniciar o servidor backend? Isso pode causar inconsistência no aplicativo. Faça backup da sua configuração primeiro. <br/> <br/> Nota: Isso pode levar alguns minutos.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Versão instalada",
|
"Maintenance_Running_Version": "Versão instalada",
|
||||||
"Maintenance_Status": "Situação",
|
"Maintenance_Status": "Situação",
|
||||||
"Maintenance_Title": "Ferramentas de manutenção",
|
"Maintenance_Title": "Ferramentas de manutenção",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Очистить журнал",
|
"Maint_PurgeLog": "Очистить журнал",
|
||||||
"Maint_RestartServer": "Перезапустить сервер",
|
"Maint_RestartServer": "Перезапустить сервер",
|
||||||
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Установленная версия",
|
"Maintenance_Running_Version": "Установленная версия",
|
||||||
"Maintenance_Status": "Статус",
|
"Maintenance_Status": "Статус",
|
||||||
"Maintenance_Title": "Инструменты обслуживания",
|
"Maintenance_Title": "Инструменты обслуживания",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Kayıtları Sil",
|
"Maint_PurgeLog": "Kayıtları Sil",
|
||||||
"Maint_RestartServer": "Sunucuyu Yeniden Başlat",
|
"Maint_RestartServer": "Sunucuyu Yeniden Başlat",
|
||||||
"Maint_Restart_Server_noti_text": "Arka uç sunucusunu yeniden başlatmak istediğinizden emin misiniz? Bu, uygulama tutarsızlıklarına yol açabilir. Önce yapılandırmanızı yedekleyin. <br/> <br/> Not: Bu işlem birkaç dakika sürebilir.",
|
"Maint_Restart_Server_noti_text": "Arka uç sunucusunu yeniden başlatmak istediğinizden emin misiniz? Bu, uygulama tutarsızlıklarına yol açabilir. Önce yapılandırmanızı yedekleyin. <br/> <br/> Not: Bu işlem birkaç dakika sürebilir.",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "Yüklenmiş sürüm",
|
"Maintenance_Running_Version": "Yüklenmiş sürüm",
|
||||||
"Maintenance_Status": "Durum",
|
"Maintenance_Status": "Durum",
|
||||||
"Maintenance_Title": "Bakım Araçları",
|
"Maintenance_Title": "Bakım Araçları",
|
||||||
|
|||||||
5
front/php/templates/language/uk_ua.json
Normal file → Executable file
5
front/php/templates/language/uk_ua.json
Normal file → Executable file
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Журнал очищення",
|
"Maint_PurgeLog": "Журнал очищення",
|
||||||
"Maint_RestartServer": "Перезапустіть сервер",
|
"Maint_RestartServer": "Перезапустіть сервер",
|
||||||
"Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.",
|
"Maint_Restart_Server_noti_text": "Ви впевнені, що бажаєте перезапустити внутрішній сервер? Це може спричинити неузгодженість програми. Спершу створіть резервну копію налаштувань. <br/> <br/> Примітка. Це може зайняти кілька хвилин.",
|
||||||
|
"Maintenance_InitCheck": "Перевірка ініціалізації",
|
||||||
|
"Maintenance_InitCheck_Checking": "Перевірка...",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "Переконайтеся, що ви дотримувалися інструкцій у <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">короткому посібнику з налаштування</a>.",
|
||||||
|
"Maintenance_InitCheck_Success": "Застосунок успішно ініціалізовано!",
|
||||||
|
"Maintenance_ReCheck": "Повторна спроба перевірки",
|
||||||
"Maintenance_Running_Version": "Встановлена версія",
|
"Maintenance_Running_Version": "Встановлена версія",
|
||||||
"Maintenance_Status": "Статус",
|
"Maintenance_Status": "Статус",
|
||||||
"Maintenance_Title": "Інструменти обслуговування",
|
"Maintenance_Title": "Інструменти обслуговування",
|
||||||
|
|||||||
@@ -359,6 +359,11 @@
|
|||||||
"Maint_PurgeLog": "清除日志",
|
"Maint_PurgeLog": "清除日志",
|
||||||
"Maint_RestartServer": "重启服务器",
|
"Maint_RestartServer": "重启服务器",
|
||||||
"Maint_Restart_Server_noti_text": "您确定要重新启动后端服务器吗?这可能会导致应用程序不一致。请先备份您的设置。<br/> <br/> 注意:这可能需要几分钟。",
|
"Maint_Restart_Server_noti_text": "您确定要重新启动后端服务器吗?这可能会导致应用程序不一致。请先备份您的设置。<br/> <br/> 注意:这可能需要几分钟。",
|
||||||
|
"Maintenance_InitCheck": "",
|
||||||
|
"Maintenance_InitCheck_Checking": "",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "",
|
||||||
|
"Maintenance_ReCheck": "",
|
||||||
"Maintenance_Running_Version": "安装版本",
|
"Maintenance_Running_Version": "安装版本",
|
||||||
"Maintenance_Status": "状态",
|
"Maintenance_Status": "状态",
|
||||||
"Maintenance_Title": "维护工具",
|
"Maintenance_Title": "维护工具",
|
||||||
|
|||||||
@@ -195,7 +195,7 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default_value": "0 2 * * 3",
|
"default_value": "0 2 * * *",
|
||||||
"options": [],
|
"options": [],
|
||||||
"localized": [
|
"localized": [
|
||||||
"name",
|
"name",
|
||||||
@@ -297,7 +297,7 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default_value": false,
|
"default_value": true,
|
||||||
"options": [],
|
"options": [],
|
||||||
"localized": [
|
"localized": [
|
||||||
"name",
|
"name",
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
|
|||||||
|
|
||||||
enabledHtml = `
|
enabledHtml = `
|
||||||
<div class="enabled-disabled-icon">
|
<div class="enabled-disabled-icon">
|
||||||
<i class="fa-regular fa-${onOff}"></i>
|
<i class="fa fa-${onOff}"></i>
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,7 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
|
|||||||
let pluginHtml = `
|
let pluginHtml = `
|
||||||
<div class="row table_row docs">
|
<div class="row table_row docs">
|
||||||
<div class="table_cell bold">
|
<div class="table_cell bold">
|
||||||
<i class="fa-regular fa-book fa-sm"></i>
|
<i class="fa fa-book fa-sm"></i>
|
||||||
${getString(prefix+'_description')}
|
${getString(prefix+'_description')}
|
||||||
<a href="https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/${getPluginCodeName(pluginsData, prefix)}" target="_blank">
|
<a href="https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/${getPluginCodeName(pluginsData, prefix)}" target="_blank">
|
||||||
${getString('Gen_ReadDocs')}
|
${getString('Gen_ReadDocs')}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ require 'php/templates/header.php';
|
|||||||
|
|
||||||
<div id="notifications" class="content-wrapper">
|
<div id="notifications" class="content-wrapper">
|
||||||
<section class="content">
|
<section class="content">
|
||||||
<div class="box box-gray col-xs-12" >
|
<div class="notification-box box box-gray col-xs-12" >
|
||||||
<div class="box-header">
|
<div class="box-header">
|
||||||
<h3 class="box-title text-aqua"><?= lang('Notifications_All');?></h3>
|
<h3 class="box-title text-aqua"><?= lang('Notifications_All');?></h3>
|
||||||
</div>
|
</div>
|
||||||
@@ -33,9 +33,10 @@ require 'php/templates/header.php';
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<div class="notification-buttons">
|
||||||
<button id="clearNotificationsBtn" class="btn btn-danger"><?= lang("Gen_DeleteAll");?></button>
|
<button id="clearNotificationsBtn" class="btn btn-danger"><?= lang("Gen_DeleteAll");?></button>
|
||||||
<button id="notificationsMarkAllRead" class="btn btn-default"><?= lang("Notifications_Mark_All_Read");?></button>
|
<button id="notificationsMarkAllRead" class="btn btn-default"><?= lang("Notifications_Mark_All_Read");?></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
let workflows = [];
|
let workflows = [];
|
||||||
|
|
||||||
let fieldOptions = [
|
let fieldOptions = [
|
||||||
"devName", "devOwner", "devType", "devVendor", "devFavorite",
|
"devName", "devMac", "devOwner", "devType", "devVendor", "devFavorite",
|
||||||
"devGroup", "devComments", "devFirstConnection", "devLastConnection",
|
"devGroup", "devComments", "devFirstConnection", "devLastConnection",
|
||||||
"devLastIP", "devStaticIP", "devScan", "devLogEvents", "devAlertEvents",
|
"devLastIP", "devStaticIP", "devScan", "devLogEvents", "devAlertEvents",
|
||||||
"devAlertDown", "devSkipRepeated", "devLastNotification", "devPresentLastScan",
|
"devAlertDown", "devSkipRepeated", "devLastNotification", "devPresentLastScan",
|
||||||
@@ -144,7 +144,7 @@ function generateWorkflowUI(wf, wfIndex) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
let $wfEnabledIcon = $("<i>", {
|
let $wfEnabledIcon = $("<i>", {
|
||||||
class: `alignRight fa-regular ${wfEnabled ? "fa-dot-circle" : "fa-circle" }`
|
class: `alignRight fa ${wfEnabled ? "fa-dot-circle" : "fa-circle" }`
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ from initialise import importConfigs
|
|||||||
from database import DB
|
from database import DB
|
||||||
from messaging.reporting import get_notifications
|
from messaging.reporting import get_notifications
|
||||||
from models.notification_instance import NotificationInstance
|
from models.notification_instance import NotificationInstance
|
||||||
|
from models.user_events_queue_instance import UserEventsQueueInstance
|
||||||
from plugin import plugin_manager
|
from plugin import plugin_manager
|
||||||
from scan.device_handling import update_devices_names
|
from scan.device_handling import update_devices_names
|
||||||
from workflows.manager import WorkflowManager
|
from workflows.manager import WorkflowManager
|
||||||
@@ -221,6 +222,15 @@ def main ():
|
|||||||
updateState("Workflows: End")
|
updateState("Workflows: End")
|
||||||
|
|
||||||
|
|
||||||
|
# check if devices list needs updating
|
||||||
|
userUpdatedDevices = UserEventsQueueInstance().has_update_devices()
|
||||||
|
|
||||||
|
mylog('debug', [f'[Plugins] Should I update API (userUpdatedDevices): {userUpdatedDevices}'])
|
||||||
|
|
||||||
|
if userUpdatedDevices:
|
||||||
|
|
||||||
|
update_api(db, all_plugins, True, ["devices"], userUpdatedDevices)
|
||||||
|
|
||||||
#loop
|
#loop
|
||||||
time.sleep(5) # wait for N seconds
|
time.sleep(5) # wait for N seconds
|
||||||
|
|
||||||
|
|||||||
@@ -562,7 +562,10 @@ def execute_plugin(db, all_plugins, plugin ):
|
|||||||
endpoints = ["plugins_events","plugins_objects", "plugins_history", "appevents"]
|
endpoints = ["plugins_events","plugins_objects", "plugins_history", "appevents"]
|
||||||
|
|
||||||
# check if we need to update devices api endpoint as well to prevent long user waits on Loading...
|
# check if we need to update devices api endpoint as well to prevent long user waits on Loading...
|
||||||
userUpdatedDevices = UserEventsQueueInstance().has_update_devices
|
userUpdatedDevices = UserEventsQueueInstance().has_update_devices()
|
||||||
|
|
||||||
|
mylog('verbose', [f'[Plugins] Should I update API (userUpdatedDevices): {userUpdatedDevices}'])
|
||||||
|
|
||||||
if userUpdatedDevices:
|
if userUpdatedDevices:
|
||||||
endpoints += ["devices"]
|
endpoints += ["devices"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user