Compare commits
204 Commits
v25.5.24
...
09fd345528
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
09fd345528 | ||
|
|
edfba9f1bc | ||
|
|
bb844ceac4 | ||
|
|
c6f3b60671 | ||
|
|
3178a65e72 | ||
|
|
aedfb4e5dd | ||
|
|
e0dcc191c7 | ||
|
|
c80e6d3474 | ||
|
|
46cd4887a3 | ||
|
|
bfbf70cf1a | ||
|
|
61de54bc34 | ||
|
|
e27af88690 | ||
|
|
393c3fd3b6 | ||
|
|
0e53aef9ea | ||
|
|
8a742b0ec0 | ||
|
|
b17b70a91f | ||
|
|
6f536f9952 | ||
|
|
034caf965a | ||
|
|
6322e3f4cf | ||
|
|
6b78adb702 | ||
|
|
6e8c931bf3 | ||
|
|
b80fe44c08 | ||
|
|
0921773666 | ||
|
|
13e960f5cb | ||
|
|
094583b8f6 | ||
|
|
fd7ec5d2cf | ||
|
|
370659f461 | ||
|
|
1f853a8bb1 | ||
|
|
b93c3b6093 | ||
|
|
6145fff2fd | ||
|
|
48687dc6dd | ||
|
|
4591cc87e2 | ||
|
|
67491615c0 | ||
|
|
fadf64450b | ||
|
|
34bb7bb93f | ||
|
|
67f8401dce | ||
|
|
f9fb711881 | ||
|
|
26c35a01f3 | ||
|
|
9538842fcb | ||
|
|
8ca31ab049 | ||
|
|
b19c9b5eb6 | ||
|
|
896ead0bb8 | ||
|
|
9835381186 | ||
|
|
d49ced8942 | ||
|
|
9a01263d70 | ||
|
|
7980554924 | ||
|
|
8949bcb567 | ||
|
|
ac90bb702e | ||
|
|
088c913ede | ||
|
|
7554a7f246 | ||
|
|
31e5c9fe96 | ||
|
|
e21c1771c7 | ||
|
|
502a331754 | ||
|
|
6203c3c257 | ||
|
|
c7d9ef97ee | ||
|
|
608fc5bbd0 | ||
|
|
dbf7104dd0 | ||
|
|
1f26de4b76 | ||
|
|
ad43e4a2b2 | ||
|
|
171feda4fe | ||
|
|
e5a4e07b8b | ||
|
|
44a5600108 | ||
|
|
d059c5c584 | ||
|
|
523ff8e877 | ||
|
|
ba9115bac1 | ||
|
|
11f6f50748 | ||
|
|
d85c52bceb | ||
|
|
9cf1d7b461 | ||
|
|
e7a2a53d18 | ||
|
|
1ffdfc17fb | ||
|
|
190c6fb007 | ||
|
|
0cd806fb74 | ||
|
|
9f55471f0f | ||
|
|
4add27e83c | ||
|
|
7a3ab14fca | ||
|
|
589af685ac | ||
|
|
8cb861df6c | ||
|
|
5ebda7eb1a | ||
|
|
e3bbd509c3 | ||
|
|
65acca5380 | ||
|
|
e1d4a80e57 | ||
|
|
08f1db2641 | ||
|
|
d78b0b3929 | ||
|
|
14f376cacb | ||
|
|
8ccbc12024 | ||
|
|
c646c36f4f | ||
|
|
d5a5e7bcf9 | ||
|
|
73f6e6d785 | ||
|
|
87b36562cc | ||
|
|
7406b6688d | ||
|
|
f58dd121d5 | ||
|
|
443b10a990 | ||
|
|
e8e48a2cc4 | ||
|
|
94edcee382 | ||
|
|
737a53a589 | ||
|
|
85bff56bd5 | ||
|
|
0f149098a3 | ||
|
|
13b5b145e4 | ||
|
|
a050beea72 | ||
|
|
3952e8dd91 | ||
|
|
68f3c02eb9 | ||
|
|
b4c2703cbb | ||
|
|
cb4fda1786 | ||
|
|
058b17fcbc | ||
|
|
9bfdc7209b | ||
|
|
1a44e84112 | ||
|
|
b722fcbe6e | ||
|
|
d1d26409fc | ||
|
|
fef1e17935 | ||
|
|
5a3782c9f1 | ||
|
|
27e9472ce1 | ||
|
|
23a0a98b4f | ||
|
|
e724c22941 | ||
|
|
27d69ff5ed | ||
|
|
cb2cce5326 | ||
|
|
e790ca2257 | ||
|
|
70a0f9260a | ||
|
|
23003aa82f | ||
|
|
cc51391d14 | ||
|
|
9242a8f55d | ||
|
|
6b32190acd | ||
|
|
69834c7771 | ||
|
|
3513fc9617 | ||
|
|
1348987f08 | ||
|
|
b31dff2815 | ||
|
|
3483d833a0 | ||
|
|
ddad1468d9 | ||
|
|
f20fc8e123 | ||
|
|
3bffb2d8f5 | ||
|
|
0bd4a7b8dd | ||
|
|
69d79dbd7c | ||
|
|
31806c707f | ||
|
|
2a4198c2c8 | ||
|
|
cecfe60bac | ||
|
|
ef42eb1fef | ||
|
|
1e2be52371 | ||
|
|
0034e49c1a | ||
|
|
350412be33 | ||
|
|
c9312719ea | ||
|
|
3010bbf1df | ||
|
|
59d5f1053f | ||
|
|
ae81b86e78 | ||
|
|
1f80a7d8ca | ||
|
|
047797daf2 | ||
|
|
f62e0513f9 | ||
|
|
b7471fd91c | ||
|
|
0e8f8a09cb | ||
|
|
8cc85a3203 | ||
|
|
8f41d71ac4 | ||
|
|
470d362ab4 | ||
|
|
a342f73f68 | ||
|
|
05842ab4a0 | ||
|
|
b54d95e5af | ||
|
|
202dcf16b9 | ||
|
|
153383343b | ||
|
|
6f138d95ca | ||
|
|
e3bbb0afff | ||
|
|
8e05e5739b | ||
|
|
7a2c4942bf | ||
|
|
95189a9d4b | ||
|
|
ded15aa628 | ||
|
|
b1d74dcfea | ||
|
|
f4db748eae | ||
|
|
b797713b2d | ||
|
|
69cf4057ac | ||
|
|
a1d5341840 | ||
|
|
8b1e705a96 | ||
|
|
dff63b74f5 | ||
|
|
f709c97602 | ||
|
|
0b2a722218 | ||
|
|
168275343c | ||
|
|
05335df9bf | ||
|
|
de2e924aa2 | ||
|
|
6fd8c2fbd9 | ||
|
|
a3dba96908 | ||
|
|
ae6be2f525 | ||
|
|
16a45c7826 | ||
|
|
5676b50d5d | ||
|
|
7940038728 | ||
|
|
1e13bf6629 | ||
|
|
7dcec16152 | ||
|
|
01f1893431 | ||
|
|
d51f79a154 | ||
|
|
4bc5c9c8ab | ||
|
|
d6260e6fb2 | ||
|
|
ce05ce240c | ||
|
|
10e8c08ce3 | ||
|
|
71a36f2fe6 | ||
|
|
a282d2ff08 | ||
|
|
f3aeaa6344 | ||
|
|
503027c06e | ||
|
|
8d58224a95 | ||
|
|
415394fce2 | ||
|
|
7826139a7c | ||
|
|
75fc11f008 | ||
|
|
7fa76346b4 | ||
|
|
b4addd9630 | ||
|
|
d6af3363ed | ||
|
|
f4a3717859 | ||
|
|
692070de21 | ||
|
|
5dcfb37c4b | ||
|
|
941e838c74 | ||
|
|
481e236faf | ||
|
|
06ec6884a4 |
1
FUNDING.yml → .github/FUNDING.yml
vendored
@@ -1,2 +1,3 @@
|
|||||||
github: jokob-sk
|
github: jokob-sk
|
||||||
patreon: 84385063
|
patreon: 84385063
|
||||||
|
buy_me_a_coffee: jokobsk
|
||||||
56
.github/ISSUE_TEMPLATE/documentation-feedback.yml
vendored
Executable file
@@ -0,0 +1,56 @@
|
|||||||
|
name: Documentation Feedback 📝
|
||||||
|
description: Suggest improvements, clarify inconsistencies, or report issues related to the documentation.
|
||||||
|
labels: ['documentation 📚']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please search to see if an open or closed issue already exists for the documentation change you're suggesting.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What document or section does this relate to?
|
||||||
|
description: |
|
||||||
|
Please include a link to the file and section, if applicable. Be specific about what part of the documentation you are referencing.
|
||||||
|
placeholder: e.g. https://github.com/jokob-sk/NetAlertX/blob/main/docs/FRONTEND_DEVELOPMENT.md
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the issue
|
||||||
|
description: A clear and concise explanation of the issue or inconsistency you found in the documentation.
|
||||||
|
placeholder: e.g. The linked file is referred to as "Contributor Guidelines" but only covers frontend topics.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Your suggestion or proposed solution
|
||||||
|
description: Suggest how the documentation could be improved, clarified, or reorganized.
|
||||||
|
placeholder: e.g. Combine frontend and backend development into a single CONTRIBUTING.md file with common sections to reduce fragmentation.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: What type of issue is this?
|
||||||
|
options:
|
||||||
|
- label: Missing information
|
||||||
|
- label: Inaccurate or outdated information
|
||||||
|
- label: Unclear or confusing content
|
||||||
|
- label: Structure or organization improvements
|
||||||
|
- label: Other (explain in issue)
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: |
|
||||||
|
Additional context, references, screenshots, or related issues. You can also mention if you’re willing to help implement the suggestion.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Can I help implement this? 👩💻👨💻
|
||||||
|
description: The maintainer can provide guidance and review your changes.
|
||||||
|
options:
|
||||||
|
- label: "Yes, I’d like to help implement the improvement"
|
||||||
|
- label: "No, I’m just suggesting the idea"
|
||||||
33
.github/ISSUE_TEMPLATE/enhancement-request.yml
vendored
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Enhancement Request
|
||||||
|
description: Propose an improvement to an existing feature or UX behavior.
|
||||||
|
labels: ['enhancement ♻️']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
options:
|
||||||
|
- label: I have searched existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What is the enhancement?
|
||||||
|
description: Describe the change or optimization you’d like to see to an existing feature.
|
||||||
|
placeholder: e.g. Make scan intervals configurable from UI instead of just `app.conf`
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What problem does this solve or improve?
|
||||||
|
description: Describe why this change would improve user experience or project maintainability.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or examples
|
||||||
|
description: |
|
||||||
|
Screenshots? Comparisons? Reference repos?
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Are you willing to help implement this?
|
||||||
|
options:
|
||||||
|
- label: "Yes"
|
||||||
|
- label: "No"
|
||||||
37
.github/ISSUE_TEMPLATE/refactor-codequality-request.yml
vendored
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Refactor / Code Quality Request ♻️
|
||||||
|
description: Suggest improvements to code structure, style, or maintainability.
|
||||||
|
labels: ['enhancement ♻️']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please check if a similar request already exists.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What part of the code needs refactoring or improvement?
|
||||||
|
description: Specify files, modules, or components.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the proposed changes
|
||||||
|
description: Explain the refactoring or quality improvements you suggest.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Why is this improvement needed?
|
||||||
|
description: Benefits such as maintainability, readability, performance, or scalability.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or examples
|
||||||
|
description: Any relevant links, references, or related issues.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Can you help implement this change?
|
||||||
|
options:
|
||||||
|
- label: Yes
|
||||||
|
- label: No
|
||||||
28
.github/ISSUE_TEMPLATE/security-report.yml
vendored
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
name: Security Report 🔐
|
||||||
|
description: Report a security vulnerability or concern privately.
|
||||||
|
labels: ['security 🔐']
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
**Important:** For security reasons, please do **not** post sensitive security issues publicly in the issue tracker.
|
||||||
|
Instead, send details to our security contact email: [jokob@duck.com](mailto:jokob@duck.com).
|
||||||
|
|
||||||
|
We appreciate your responsible disclosure.
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Brief summary (non-sensitive)
|
||||||
|
description: Provide a non-sensitive overview of the security issue.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or references
|
||||||
|
description: Any other information or related reports.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Have you sent this report via email to the security contact?
|
||||||
|
options:
|
||||||
|
- label: Yes, I have sent the details to jokob@duck.com
|
||||||
|
required: true
|
||||||
|
- label: Not yet, I will send it after opening this issue
|
||||||
36
.github/ISSUE_TEMPLATE/translation-request.yml
vendored
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
name: Translation / Localization Request 🌐
|
||||||
|
description: Suggest adding or improving translations or localization support.
|
||||||
|
labels: ['enhancement 🌐']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Have you checked for existing translation efforts or related issues?
|
||||||
|
options:
|
||||||
|
- label: I have searched existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Language(s) involved
|
||||||
|
description: Specify the language(s) this request pertains to.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the translation or localization improvement
|
||||||
|
description: Examples include adding new language support, fixing translation errors, or improving formatting.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Why is this important for the project or users?
|
||||||
|
description: Describe the benefits or target audience.
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or references
|
||||||
|
description: Link to files, previous translation PRs, or external resources.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Can you help with translation or review?
|
||||||
|
options:
|
||||||
|
- label: Yes
|
||||||
|
- label: No
|
||||||
53
.github/PULL_REQUEST_TEMPLATE/code-pr-template.md
vendored
Executable file
@@ -0,0 +1,53 @@
|
|||||||
|
## 📌 Description
|
||||||
|
|
||||||
|
<!-- Provide a brief description of the changes you're introducing. Be clear and concise. -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Related Issues
|
||||||
|
|
||||||
|
<!-- Reference any related issues (e.g., closes #123, fixes #456) -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Type of Change
|
||||||
|
|
||||||
|
Please check the relevant option(s):
|
||||||
|
|
||||||
|
- [ ] 🐛 Bug fix
|
||||||
|
- [ ] ✨ New feature
|
||||||
|
- [ ] ♻️ Code refactor
|
||||||
|
- [ ] 📚 Documentation update
|
||||||
|
- [ ] 🧪 Test addition or change
|
||||||
|
- [ ] 🔧 Build/config update
|
||||||
|
- [ ] 🚀 Performance improvement
|
||||||
|
- [ ] 🔨 CI/CD or automation
|
||||||
|
- [ ] 🧹 Cleanup / chore
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📷 Screenshots or Logs (if applicable)
|
||||||
|
|
||||||
|
<!-- Add screenshots, terminal output, logs, or anything that helps understand your change -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Testing Steps
|
||||||
|
|
||||||
|
<!-- Describe how the change was tested. Manual steps, test cases, or automated test runs -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Checklist
|
||||||
|
|
||||||
|
- [ ] I have read the [Contribution Guidelines](../../CONTRIBUTING)
|
||||||
|
- [ ] I have tested my changes locally
|
||||||
|
- [ ] I have updated relevant documentation (if applicable)
|
||||||
|
- [ ] I have verified my changes do not break existing behavior
|
||||||
|
- [ ] I am willing to respond to requested changes and feedback
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🙋 Additional Notes
|
||||||
|
|
||||||
|
<!-- Anything else you want reviewers to know? Future follow-ups? Questions? -->
|
||||||
37
.github/PULL_REQUEST_TEMPLATE/docs-pr-template.md
vendored
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
## 📚 Documentation Update
|
||||||
|
|
||||||
|
<!-- Describe the purpose of this PR in one or two sentences. Example: "This PR updates the contributor guidelines by merging frontend and backend sections." -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 What’s Changed?
|
||||||
|
|
||||||
|
<!-- Briefly outline what parts of the documentation were added, changed, removed, or reorganized -->
|
||||||
|
|
||||||
|
- Combined frontend and backend development guidelines into a single file
|
||||||
|
- Updated `mkdocs.yml` to reflect new structure
|
||||||
|
- Added clarification on contribution process
|
||||||
|
- Fixed outdated links in sidebar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Related Issue(s)
|
||||||
|
|
||||||
|
<!-- Link to related issues, discussions, or context (e.g., closes #123) -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Checklist
|
||||||
|
|
||||||
|
- [ ] I followed the formatting/style of existing documentation
|
||||||
|
- [ ] I have read the [Contribution Guidelines](../../CONTRIBUTING)
|
||||||
|
- [ ] I updated `mkdocs.yml` if necessary
|
||||||
|
- [ ] I verified links and references still work
|
||||||
|
- [ ] I checked that my changes improve clarity, structure, or accuracy
|
||||||
|
- [ ] I'm open to feedback and suggestions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🙋 Additional Notes
|
||||||
|
|
||||||
|
<!-- Optional: Include anything you want reviewers to be aware of -->
|
||||||
2
.github/tweet.md
vendored
@@ -1,2 +0,0 @@
|
|||||||
🎉 New release: ** v25.4.14 - Styling, Workflows and other fixes ** is live! 🚀
|
|
||||||
Check it out here: https://github.com/jokob-sk/NetAlertX/releases/tag/v25.4.14
|
|
||||||
16
.github/workflows/code_checks.yml
vendored
@@ -17,14 +17,22 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Check for absolute path URLs
|
- name: Check for incorrect absolute '/php/' URLs in frontend code
|
||||||
run: |
|
run: |
|
||||||
if grep -r -E "\burl:\s*['\"]\/php" --include=\*.{js,php} .; then
|
echo "🔍 Checking for incorrect absolute '/php/' URLs (should be 'php/' or './php/')..."
|
||||||
echo "❌ Found absolute path URLs starting with '/php/'. Please use relative paths."
|
|
||||||
|
MATCHES=$(grep -rE "['\"]\/php\/" --include=\*.{js,php,html} ./front | grep -E "\.get|\.post|\.ajax|fetch|url\s*:") || true
|
||||||
|
|
||||||
|
if [ -n "$MATCHES" ]; then
|
||||||
|
echo "$MATCHES"
|
||||||
|
echo "❌ Found incorrectly absolute '/php/' URLs. Use 'php/' or './php/' for relative paths."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
echo "✅ No absolute path URLs found."
|
echo "✅ No bad '/php/' URLs found."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- name: Check Python syntax
|
- name: Check Python syntax
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
37
.github/workflows/social_post_on_release.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: 📧 Twitter and Discord Posts
|
name: 📧 Social Posts
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
@@ -16,38 +16,3 @@ jobs:
|
|||||||
-d '{"content": "🎉 New release: **${{ github.event.release.name }}** is live! 🚀\nCheck it out here: ${{ github.event.release.html_url }}"}' \
|
-d '{"content": "🎉 New release: **${{ github.event.release.name }}** is live! 🚀\nCheck it out here: ${{ github.event.release.html_url }}"}' \
|
||||||
${{ secrets.DISCORD_WEBHOOK_URL }}
|
${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||||
|
|
||||||
post-twitter:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Wait for 15 minutes
|
|
||||||
run: sleep 900 # 15 minutes delay
|
|
||||||
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set Git config
|
|
||||||
run: |
|
|
||||||
git config --global user.email "github-actions@github.com"
|
|
||||||
git config --global user.name "GitHub Actions"
|
|
||||||
|
|
||||||
- name: Create tweet file
|
|
||||||
run: |
|
|
||||||
echo "🎉 New release: **${{ github.event.release.name }}** is live! 🚀" > .github/tweet.md
|
|
||||||
echo "Check it out here: ${{ github.event.release.html_url }}" >> .github/tweet.md
|
|
||||||
git add .github/tweet.md
|
|
||||||
git commit -m "Add release tweet for ${{ github.event.release.name }}"
|
|
||||||
|
|
||||||
- name: Push changes
|
|
||||||
run: |
|
|
||||||
git push https://github.com/${{ github.repository }}.git HEAD:main
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Tweet
|
|
||||||
uses: twitter-together/action@v3
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
|
|
||||||
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
|
|
||||||
TWITTER_API_KEY: ${{ secrets.TWITTER_API_KEY }}
|
|
||||||
TWITTER_API_SECRET_KEY: ${{ secrets.TWITTER_API_SECRET_KEY }}
|
|
||||||
|
|||||||
137
CODE_OF_CONDUCT.md
Executable file
@@ -0,0 +1,137 @@
|
|||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
- Demonstrating empathy and kindness toward other people
|
||||||
|
- Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
- Giving and gracefully accepting constructive feedback
|
||||||
|
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
- Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
- The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
|
any kind
|
||||||
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
- Public or private harassment
|
||||||
|
- Publishing others' private information, such as a physical or email address,
|
||||||
|
without their explicit permission
|
||||||
|
- Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official email address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at <jokob@duck.com>.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Ethical Use Clause (Project-Specific)
|
||||||
|
|
||||||
|
While NetAlertX is a tool designed to empower users with greater insight into their own networks, we expect and encourage all users to use this software **ethically and legally**.
|
||||||
|
|
||||||
|
- Do not use this software to scan or monitor networks without **explicit authorization**.
|
||||||
|
- Respect privacy, consent, and data protection laws applicable in your jurisdiction.
|
||||||
|
- Any use of NetAlertX for malicious surveillance, stalking, or unauthorized access is explicitly discouraged and may be grounds for removal from the community and revocation of support.
|
||||||
|
|
||||||
|
We reserve the right to take appropriate action to uphold the ethical integrity of this project.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the
|
||||||
|
[Contributor Covenant](https://www.contributor-covenant.org/), version 2.1,
|
||||||
|
available at
|
||||||
|
<https://www.contributor-covenant.org/version/2/1/code_of_conduct/>.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/inclusion).
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
<https://www.contributor-covenant.org/faq/>. Translations are available at
|
||||||
|
<https://www.contributor-covenant.org/translations/>.
|
||||||
55
CONTRIBUTING
@@ -1,14 +1,53 @@
|
|||||||
# Contributing to this project
|
# 🤝 Contributing to NetAlertX
|
||||||
|
|
||||||
## Issues, bugs, feature requests
|
First off, **thank you** for taking the time to contribute! NetAlertX is built and improved with the help of passionate people like you.
|
||||||
|
|
||||||
The issue tracker is the preferred channel for bug reports, features requests and submitting pull requests.
|
---
|
||||||
|
|
||||||
Before submitting a new issue please spend a couple of minutes on research:
|
## 📂 Issues, Bugs, and Feature Requests
|
||||||
|
|
||||||
* Check [🛑 Common issues](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#common-issues)
|
Please use the [GitHub Issue Tracker](https://github.com/jokob-sk/NetAlertX/issues) for:
|
||||||
* Check [💡 Closed issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed) if a similar issue was solved in the past.
|
- Bug reports 🐞
|
||||||
|
- Feature requests 💡
|
||||||
|
- Documentation feedback 📖
|
||||||
|
|
||||||
## Pull-requests (PRs)
|
Before opening a new issue:
|
||||||
|
- 🛑 [Check Common Issues & Debug Tips](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#common-issues)
|
||||||
|
- 🔍 [Search Closed Issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
If you submit a PR please do check that your changes are backward compatible with existing installations. Existing features should be always preserved.
|
---
|
||||||
|
|
||||||
|
## 🚀 Submitting Pull Requests (PRs)
|
||||||
|
|
||||||
|
We welcome PRs to improve the code, docs, or UI!
|
||||||
|
|
||||||
|
Please:
|
||||||
|
- Ensure **backward compatibility** with existing installations
|
||||||
|
- Preserve existing features unless a breaking change is intentional and discussed
|
||||||
|
- Follow existing **code style and structure**
|
||||||
|
- Provide a clear title and description for your PR
|
||||||
|
- If relevant, add or update tests and documentation
|
||||||
|
- For plugins, refer to the [Plugin Dev Guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌟 First-Time Contributors
|
||||||
|
|
||||||
|
New to open source? Check out these resources:
|
||||||
|
- [How to Fork and Submit a PR](https://opensource.guide/how-to-contribute/)
|
||||||
|
- Ask questions or get support in our [Discord](https://discord.gg/NczTUTWyRr)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Code of Conduct
|
||||||
|
|
||||||
|
By participating, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md), which ensures a respectful and welcoming community.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📬 Contact
|
||||||
|
|
||||||
|
If you have more in-depth questions or want to discuss contributing in other ways, feel free to reach out at:
|
||||||
|
📧 [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX%20Contribution)
|
||||||
|
|
||||||
|
We appreciate every contribution, big or small! 💙
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.21 AS builder
|
FROM alpine:3.22 AS builder
|
||||||
|
|
||||||
ARG INSTALL_DIR=/app
|
ARG INSTALL_DIR=/app
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ RUN pip install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask tplin
|
|||||||
RUN cat ${INSTALL_DIR}/install/freebox_certificate.pem >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem
|
RUN cat ${INSTALL_DIR}/install/freebox_certificate.pem >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem
|
||||||
|
|
||||||
# second stage
|
# second stage
|
||||||
FROM alpine:3.21 AS runner
|
FROM alpine:3.22 AS runner
|
||||||
|
|
||||||
ARG INSTALL_DIR=/app
|
ARG INSTALL_DIR=/app
|
||||||
|
|
||||||
|
|||||||
80
README.md
@@ -8,6 +8,42 @@
|
|||||||
|
|
||||||
Get visibility of what's going on on your WIFI/LAN network and enable presence detection of important devices. Schedule scans for devices, port changes and get alerts if unknown devices or changes are found. Write your own [Plugin](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) with auto-generated UI and in-build notification system. Build out and easily maintain your network source of truth (NSoT).
|
Get visibility of what's going on on your WIFI/LAN network and enable presence detection of important devices. Schedule scans for devices, port changes and get alerts if unknown devices or changes are found. Write your own [Plugin](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) with auto-generated UI and in-build notification system. Build out and easily maintain your network source of truth (NSoT).
|
||||||
|
|
||||||
|
## 📋 Table of Contents
|
||||||
|
|
||||||
|
- [Features](#-features)
|
||||||
|
- [Documentation](#-documentation)
|
||||||
|
- [Quick Start](#-quick-start)
|
||||||
|
- [Alternative Apps](#-other-alternative-apps)
|
||||||
|
- [Security & Privacy](#-security--privacy)
|
||||||
|
- [FAQ](#-faq)
|
||||||
|
- [Known Issues](#-known-issues)
|
||||||
|
- [Donations](#-donations)
|
||||||
|
- [Contributors](#-contributors)
|
||||||
|
- [Translations](#-translations)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
Start NetAlertX in seconds with Docker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d --rm --network=host \
|
||||||
|
-v local_path/config:/app/config \
|
||||||
|
-v local_path/db:/app/db \
|
||||||
|
--mount type=tmpfs,target=/app/api \
|
||||||
|
-e PUID=200 -e PGID=300 \
|
||||||
|
-e TZ=Europe/Berlin \
|
||||||
|
-e PORT=20211 \
|
||||||
|
ghcr.io/jokob-sk/netalertx:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/).
|
||||||
|
|
||||||
|
For Home Assistant users: [Click here to add NetAlertX](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
|
||||||
|
|
||||||
|
For other install methods, check the [installation docs](#-documentation)
|
||||||
|
|
||||||
|
|
||||||
| [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
| [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
||||||
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
||||||
@@ -30,7 +66,7 @@ Get visibility of what's going on on your WIFI/LAN network and enable presence d
|
|||||||
|
|
||||||
### Scanners
|
### Scanners
|
||||||
|
|
||||||
The app scans your network for **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Discovery & scan methods include: **arp-scan**, **Pi-hole - DB import**, **Pi-hole - DHCP leases import**, **Generic DHCP leases import**, **UNIFI controller import**, **SNMP-enabled router import**. Check the [Plugins](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) docs for a full lits of avaliable plugins.
|
The app scans your network for **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Discovery & scan methods include: **arp-scan**, **Pi-hole - DB import**, **Pi-hole - DHCP leases import**, **Generic DHCP leases import**, **UNIFI controller import**, **SNMP-enabled router import**. Check the [Plugins](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) docs for a full list of avaliable plugins.
|
||||||
|
|
||||||
### Notification gateways
|
### Notification gateways
|
||||||
|
|
||||||
@@ -59,6 +95,46 @@ Supported browsers: Chrome, Firefox
|
|||||||
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
|
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
|
||||||
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
||||||
|
|
||||||
|
...or explore all the [documentation here](https://jokob-sk.github.io/NetAlertX/).
|
||||||
|
|
||||||
|
## 🔐 Security & Privacy
|
||||||
|
|
||||||
|
NetAlertX scans your local network and can store metadata about connected devices. By default, all data is stored **locally**. No information is sent to external services unless you explicitly configure notifications or integrations.
|
||||||
|
|
||||||
|
To further secure your installation:
|
||||||
|
- Run it behind a reverse proxy with authentication
|
||||||
|
- Use firewalls to restrict access to the web UI
|
||||||
|
- Regularly update to the latest version for security patches
|
||||||
|
|
||||||
|
See [Security Best Practices](https://github.com/jokob-sk/NetAlertX/security) for more details.
|
||||||
|
|
||||||
|
|
||||||
|
## ❓ FAQ
|
||||||
|
|
||||||
|
**Q: Why don’t I see any devices?**
|
||||||
|
A: Ensure the container has proper network access (e.g., use `--network host` on Linux). Also check that your scan method is properly configured in the UI.
|
||||||
|
|
||||||
|
**Q: Does this work on Wi-Fi-only devices like Raspberry Pi?**
|
||||||
|
A: Yes, but some scanners (e.g. ARP) work best on Ethernet. For Wi-Fi, try SNMP, DHCP, or Pi-hole import.
|
||||||
|
|
||||||
|
**Q: Will this send any data to the internet?**
|
||||||
|
A: No. All scans and data remain local, unless you set up cloud-based notifications.
|
||||||
|
|
||||||
|
**Q: Can I use this without Docker?**
|
||||||
|
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md).
|
||||||
|
|
||||||
|
**Q: Where is the data stored?**
|
||||||
|
A: In the `/config` and `/db` folders, mapped in Docker. Back up these folders regularly.
|
||||||
|
|
||||||
|
|
||||||
|
## 🐞 Known Issues
|
||||||
|
|
||||||
|
- Some scanners (e.g. ARP) may not detect devices on different subnets. See the [Remote networks guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md) for workarounds.
|
||||||
|
- Wi-Fi-only networks may require alternate scanners for accurate detection.
|
||||||
|
- Notification throttling may be needed for large networks to prevent spam.
|
||||||
|
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
|
||||||
|
|
||||||
|
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions and consult [the official documentation](https://jokob-sk.github.io/NetAlertX/).
|
||||||
|
|
||||||
## 📃 Everything else
|
## 📃 Everything else
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
@@ -113,7 +189,6 @@ Proudly using [Weblate](https://hosted.weblate.org/projects/pialert/). Help out
|
|||||||
> GPL 3.0 | [Read more here](LICENSE.txt) | Source of the [animated GIF (Loading Animation)](https://commons.wikimedia.org/wiki/File:Loading_Animation.gif) | Source of the [selfhosted Fonts](https://github.com/adobe-fonts/source-sans)
|
> GPL 3.0 | [Read more here](LICENSE.txt) | Source of the [animated GIF (Loading Animation)](https://commons.wikimedia.org/wiki/File:Loading_Animation.gif) | Source of the [selfhosted Fonts](https://github.com/adobe-fonts/source-sans)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
[main]: ./docs/img/devices_split.png "Main screen"
|
[main]: ./docs/img/devices_split.png "Main screen"
|
||||||
[device_details]: ./docs/img/device_details.png "Screen 1"
|
[device_details]: ./docs/img/device_details.png "Screen 1"
|
||||||
@@ -131,4 +206,3 @@ Proudly using [Weblate](https://hosted.weblate.org/projects/pialert/). Help out
|
|||||||
[main_dark]: /docs/img/1_devices_dark.jpg "Main screen dark"
|
[main_dark]: /docs/img/1_devices_dark.jpg "Main screen dark"
|
||||||
[maintain_dark]: /docs/img/5_maintain.jpg "Maintain screen dark"
|
[maintain_dark]: /docs/img/5_maintain.jpg "Maintain screen dark"
|
||||||
[follow_star]: /docs/img/Follow_Releases_and_Star.gif "Follow and Star"
|
[follow_star]: /docs/img/Follow_Releases_and_Star.gif "Follow and Star"
|
||||||
|
|
||||||
|
|||||||
@@ -18,18 +18,20 @@
|
|||||||
# 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', 'INTRNT','MAINT','NEWDEV','NSLOOKUP','NTFPRCS', 'AVAHISCAN', 'SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS', 'UI']
|
LOADED_PLUGINS=['ARPSCAN', 'AVAHISCAN', 'CSVBCKP','DBCLNP', 'DIGSCAN', 'INTRNT', 'MAINT', 'NEWDEV', 'NBTSCAN', 'NSLOOKUP','NTFPRCS', 'SETPWD', 'SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS', 'UI']
|
||||||
|
|
||||||
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!
|
||||||
REPORT_DASHBOARD_URL='http://netalertx'
|
REPORT_DASHBOARD_URL='http://127.0.0.1'
|
||||||
|
|
||||||
# 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'
|
||||||
NSLOOKUP_RUN='before_name_updates'
|
NSLOOKUP_RUN='before_name_updates'
|
||||||
|
AVAHISCAN_RUN='before_name_updates'
|
||||||
|
NBTSCAN_RUN='before_name_updates'
|
||||||
|
|
||||||
# Email
|
# Email
|
||||||
#-------------------------------------
|
#-------------------------------------
|
||||||
|
|||||||
BIN
back/app.db
BIN
back/app_clean.db
Executable file
BIN
back/app_old.db
Executable file
@@ -23,11 +23,11 @@ services:
|
|||||||
# - ${DEV_LOCATION}/api:/app/api
|
# - ${DEV_LOCATION}/api:/app/api
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp1.leases:/mnt/dhcp1.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp1.leases:/mnt/dhcp1.leases # test data for DCPLSS plugin
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp2.leases:/mnt/dhcp2.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp2.leases:/mnt/dhcp2.leases # test data for DCPLSS plugin
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_full.leases:/etc/pihole/dhcp.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_full.leases:/etc/pihole/dhcp.leases # test data for DCPLSS plugin
|
||||||
- ${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 # test data for DCPLSS plugin
|
||||||
- ${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 # test data for PIHOLE plugin
|
||||||
- ${DEV_LOCATION}/mkdocs.yml:/app/mkdocs.yml
|
- ${DEV_LOCATION}/mkdocs.yml:/app/mkdocs.yml
|
||||||
- ${DEV_LOCATION}/docs:/app/docs
|
- ${DEV_LOCATION}/docs:/app/docs
|
||||||
- ${DEV_LOCATION}/server:/app/server
|
- ${DEV_LOCATION}/server:/app/server
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ query GetDevices($options: PageQueryOptionsInput) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
See also: [Debugging GraphQL issues](./DEBUG_GRAPHQL.md)
|
||||||
|
|
||||||
### `curl` Command
|
### `curl` Command
|
||||||
|
|
||||||
You can use the following `curl` command to execute the query.
|
You can use the following `curl` command to execute the query.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
Use the official installation guides at first and use community content as supplementary material. Open an issue or PR if you'd like to add your link to the list 🙏 (Ordered by last update time)
|
Use the official installation guides at first and use community content as supplementary material. Open an issue or PR if you'd like to add your link to the list 🙏 (Ordered by last update time)
|
||||||
|
|
||||||
|
- ▶ [Discover & Monitor Your Network with This Self-Hosted Open Source Tool - Lawrence Systems](https://www.youtube.com/watch?v=R3b5cxLZMpo) (June 2025)
|
||||||
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
|
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
|
||||||
- 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently)
|
- 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently)
|
||||||
- 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/)
|
- 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/)
|
||||||
|
|||||||
@@ -38,6 +38,9 @@
|
|||||||
| `devSyncHubNode` | The NetAlertX node ID used for synchronization between NetAlertX instances. | `node_1` |
|
| `devSyncHubNode` | The NetAlertX node ID used for synchronization between NetAlertX instances. | `node_1` |
|
||||||
| `devSourcePlugin` | Source plugin that discovered the device. | `ARPSCAN` |
|
| `devSourcePlugin` | Source plugin that discovered the device. | `ARPSCAN` |
|
||||||
| `devCustomProps` | [Custom properties](./CUSTOM_PROPERTIES.md) related to the device. The value is a base64-encoded JSON object. | `PHN2ZyB...` |
|
| `devCustomProps` | [Custom properties](./CUSTOM_PROPERTIES.md) related to the device. The value is a base64-encoded JSON object. | `PHN2ZyB...` |
|
||||||
|
| `devFQDN` | Fully qualified domain name. | `raspberrypi.local` |
|
||||||
|
| `devParentRelType` | The type of relationship between the current device and it's parent node. By default, selecting `nic` will hide it from lists. | `nic` |
|
||||||
|
| `devReqNicsOnline` | If all NICs are required to be online to mark teh current device online. | `0` |
|
||||||
|
|
||||||
|
|
||||||
To understand how values of these fields influuence application behavior, such as Notifications or Network topology, see also:
|
To understand how values of these fields influuence application behavior, such as Notifications or Network topology, see also:
|
||||||
|
|||||||
64
docs/DEBUG_GRAPHQL.md
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
# Debugging GraphQL server issues
|
||||||
|
|
||||||
|
The GraphQL server is an API middle layer, running on it's own port specified by `GRAPHQL_PORT`, to retrieve and show the data in the UI. It can also be used to retrieve data for custom third party integarions. Check the [API documentation](./API.md) for details.
|
||||||
|
|
||||||
|
The most common issue is that the GraphQL server doesn't start properly, usually due to a **port conflict**. If you are running multiple NetAlertX instances, make sure to use **unique ports** by changing the `GRAPHQL_PORT` setting. The default is `20212`.
|
||||||
|
|
||||||
|
## How to update the `GRAPHQL_PORT` in case of issues
|
||||||
|
|
||||||
|
As a first troubleshooting step try changing the default `GRAPHQL_PORT` setting. Please remember NetAlertX is running on the host so any application uising the same port will cause issues.
|
||||||
|
|
||||||
|
### Updating the setting via the Settings UI
|
||||||
|
|
||||||
|
Ideally use the Settings UI to update the setting under General -> Core -> GraphQL port:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You might need to temporarily stop other applications or NetAlertX instances causing conflicts to update the setting. The `API_TOKEN` is used to authenticate any API calls, including GraphQL requests.
|
||||||
|
|
||||||
|
### Updating the `app.conf` file
|
||||||
|
|
||||||
|
If the UI is not accessible, you can directly edit the `app.conf` file in your `/config` folder:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Using a docker variable
|
||||||
|
|
||||||
|
All application settings can also be initialized via the `APP_CONF_OVERRIDE` docker env variable.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
...
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
- PORT=20213
|
||||||
|
- APP_CONF_OVERRIDE={"GRAPHQL_PORT":"20214"}
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to check the GraphQL server is running?
|
||||||
|
|
||||||
|
There are several ways to check if the GraphQL server is running.
|
||||||
|
|
||||||
|
### Init Check
|
||||||
|
|
||||||
|
You can navigate to Maintenance -> Init Check to see if `isGraphQLServerRunning` is ticked:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Checking the Logs
|
||||||
|
|
||||||
|
You can navigate to Maintenance -> Logs and search for `graphql` to see if it started correctly and serving requests:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Inspecting the Browser console
|
||||||
|
|
||||||
|
In your browser open the dev console (usually F12) and navigate to the Network tab where you can filter GraphQL requests (e.g., reload the Devices page).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You can then inspect any of the POST requests by opening them in a new tab.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ Check the the HTTP response of the failing backend call by following these steps
|
|||||||
- Copy the URL causing the error and enter it in the address bar of your browser directly and hit enter. The copied URLs could look something like this (notice the query strings at the end):
|
- Copy the URL causing the error and enter it in the address bar of your browser directly and hit enter. The copied URLs could look something like this (notice the query strings at the end):
|
||||||
- `http://<NetAlertX URL>:20211/api/table_devices.json?nocache=1704141103121`
|
- `http://<NetAlertX URL>:20211/api/table_devices.json?nocache=1704141103121`
|
||||||
- `http://<NetAlertX URL>:20211/php/server/devices.php?action=getDevicesTotals`
|
- `http://<NetAlertX URL>:20211/php/server/devices.php?action=getDevicesTotals`
|
||||||
- `http://<NetAlertX URL>:20211/php/server/devices.php?action=getDevicesList&status=all`
|
|
||||||
|
|
||||||
- Post the error response in the existing issue thread on GitHub or create a new issue and include the redacted response of the failing query.
|
- Post the error response in the existing issue thread on GitHub or create a new issue and include the redacted response of the failing query.
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,13 @@ This set of settings allows you to group Devices under different views. The Arch
|
|||||||
|
|
||||||
## Status Colors
|
## Status Colors
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
1. Online (Green) = A device that is no longer marked as a "New Device"
|
1. 🔌 Online (Green) = A device that is no longer marked as a "New Device".
|
||||||
2. New (Green) = A newly discovered device that is online and is still "ticked" as a "New Device"
|
2. 🔌 New (Green) = A newly discovered device that is online and is still marked as a "New Device".
|
||||||
3. New (Grey) = Same as No.2 but device is now offline.
|
3. ✖ New (Grey) = Same as No.2 but device is now offline.
|
||||||
|
4. ✖ Offline (Grey) = A device that was not detected online in the last scan.
|
||||||
|
5. ⚠ Down (Red) = A device that has "Alert Down" marked and has been offline for the time set in the Setting `NTFPRCS_alert_down_time`.
|
||||||
|
|
||||||
|
|
||||||
|
See also [Notification guide](./NOTIFICATIONS.md).
|
||||||
78
docs/FIX_OFFLINE_DETECTION.md
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
# Troubleshooting: Devices Show Offline When They Are Online
|
||||||
|
|
||||||
|
In some network setups, certain devices may intermittently appear as **offline** in NetAlertX, even though they are connected and responsive. This issue is often more noticeable with devices that have **higher IP addresses** within the subnet.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> Network presence graph showing increased drop outs before enabling additional `ICMP` scans and continuous online presence after following this guide. This graph shows a sudden spike in drop outs probably caused by a device software update.
|
||||||
|
> 
|
||||||
|
|
||||||
|
## Symptoms
|
||||||
|
|
||||||
|
* Devices sporadically show as offline in the presence timeline.
|
||||||
|
* This behavior often affects devices with higher IPs (e.g., `192.168.1.240+`).
|
||||||
|
* Presence data appears inconsistent or unreliable despite the device being online.
|
||||||
|
|
||||||
|
## Cause
|
||||||
|
|
||||||
|
This issue is typically related to scanning limitations:
|
||||||
|
|
||||||
|
* **ARP scan timeouts** may prevent full subnet coverage.
|
||||||
|
* **Sole reliance on ARP** can result in missed detections:
|
||||||
|
|
||||||
|
* Some devices (like iPhones) suppress or reject frequent ARP requests.
|
||||||
|
* ARP responses may be blocked or delayed due to power-saving features or OS behavior.
|
||||||
|
|
||||||
|
* **Scanning frequency conflicts**, where devices ignore repeated scans within a short period.
|
||||||
|
|
||||||
|
## Recommended Fixes
|
||||||
|
|
||||||
|
To improve presence accuracy and reduce false offline states:
|
||||||
|
|
||||||
|
### ✅ Increase ARP Scan Timeout
|
||||||
|
|
||||||
|
Extend the ARP scanner timeout to ensure full subnet coverage:
|
||||||
|
|
||||||
|
```env
|
||||||
|
ARPSCAN_RUN_TIMEOUT=360
|
||||||
|
```
|
||||||
|
|
||||||
|
> Adjust based on your network size and device count.
|
||||||
|
|
||||||
|
### ✅ Add ICMP (Ping) Scanning
|
||||||
|
|
||||||
|
Enable the `ICMP` scan plugin to complement ARP detection. ICMP is often more reliable for detecting active hosts, especially when ARP fails.
|
||||||
|
|
||||||
|
### ✅ Use Multiple Detection Methods
|
||||||
|
|
||||||
|
A combined approach greatly improves detection robustness:
|
||||||
|
|
||||||
|
* `ARPSCAN` (default)
|
||||||
|
* `ICMP` (ping)
|
||||||
|
* `NMAPDEV` (nmap)
|
||||||
|
|
||||||
|
This hybrid strategy increases reliability, especially for down detection and alerting. See [other plugins](./PLUGINS.md) that might be compatible with your setup. See benefits and drawbacks of individual scan methods in their respective docs.
|
||||||
|
|
||||||
|
## Results
|
||||||
|
|
||||||
|
After increasing the ARP timeout and adding ICMP scanning (on select IP ranges), users typically report:
|
||||||
|
|
||||||
|
* More consistent presence graphs
|
||||||
|
* Fewer false offline events
|
||||||
|
* Better coverage across all IP ranges
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
| Setting | Recommendation |
|
||||||
|
| --------------------- | --------------------------------------------- |
|
||||||
|
| `ARPSCAN_RUN_TIMEOUT` | Increase to ensure scans reach all IPs |
|
||||||
|
| `ICMP` Scan | Enable to detect devices ARP might miss |
|
||||||
|
| Multi-method Scanning | Use a mix of ARP, ICMP, and NMAP-based methods |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Tip:** Each environment is unique. Consider fine-tuning scan settings based on your network size, device behavior, and desired detection accuracy.
|
||||||
|
|
||||||
|
Let us know in the [NetAlertX Discussions](https://github.com/jokob-sk/NetAlertX/discussions) if you have further feedback or edge cases.
|
||||||
|
|
||||||
|
See also [Remote Networks](./REMOTE_NETWORKS.md) for more advanced setups.
|
||||||
@@ -5,7 +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 🙂
|
> 🙏 Looking for maintainers for this installation method 🙂 Curent community volunteers:
|
||||||
|
> - [slammingprogramming](https://github.com/slammingprogramming)
|
||||||
>
|
>
|
||||||
> 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**.
|
||||||
|
|||||||
@@ -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]
|
||||||
> You can bulk-import devices via the [CSV import method](./DEVICES_BULK_EDITING.md).
|
> `ARPSCAN` and `INTRNT` scan the current network. You can complement them with other `🔍 dev scanner` plugins like `NMAPDEV`, or import devices using `📥 importer` plugins.
|
||||||
|
> 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:
|
||||||
@@ -9,6 +15,7 @@ For best results, ensure the following name resolution plugins are enabled:
|
|||||||
- **AVAHISCAN** – Uses mDNS/Avahi to resolve local network names.
|
- **AVAHISCAN** – Uses mDNS/Avahi to resolve local network names.
|
||||||
- **NBTSCAN** – Queries NetBIOS to find device names.
|
- **NBTSCAN** – Queries NetBIOS to find device names.
|
||||||
- **NSLOOKUP** – Performs standard DNS lookups.
|
- **NSLOOKUP** – Performs standard DNS lookups.
|
||||||
|
- **DIGSCAN** – Performs Name Resolution with the Dig utility (DNS).
|
||||||
|
|
||||||
You can check which plugins are active in your _Settings_ section and enable any that are missing.
|
You can check which plugins are active in your _Settings_ section and enable any that are missing.
|
||||||
|
|
||||||
|
|||||||
@@ -85,8 +85,8 @@ services:
|
|||||||
# (Optional) Useful for debugging setup issues
|
# (Optional) Useful for debugging setup issues
|
||||||
- local/path/logs:/app/log
|
- local/path/logs:/app/log
|
||||||
# (API: OPTION 1) Store temporary files in memory (recommended for performance)
|
# (API: OPTION 1) Store temporary files in memory (recommended for performance)
|
||||||
- type: tmpfs # ◀
|
- type: tmpfs # ◀ 🔺
|
||||||
target: /app/api # ◀
|
target: /app/api # ◀ 🔺
|
||||||
# (API: OPTION 2) Store API data on disk (useful for debugging)
|
# (API: OPTION 2) Store API data on disk (useful for debugging)
|
||||||
# - local/path/api:/app/api
|
# - local/path/api:/app/api
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ NetAlertX supports additional plugins to extend its functionality, each with its
|
|||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting. You need to save the settings for the new plugins to load (cache/page reload may be necessary).
|
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting. You need to save the settings for the new plugins to load (cache/page reload may be necessary).
|
||||||
> 
|
> 
|
||||||
|
|
||||||
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.
|
||||||
@@ -56,6 +56,7 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
|
|||||||
| `DDNS` | ⚙ | DDNS update | | | Script | [ddns_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ddns_update/) |
|
| `DDNS` | ⚙ | DDNS update | | | Script | [ddns_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ddns_update/) |
|
||||||
| `DHCPLSS` | 🔍/📥/🆎| Import devices from DHCP leases | | | Script | [dhcp_leases](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_leases/) |
|
| `DHCPLSS` | 🔍/📥/🆎| Import devices from DHCP leases | | | Script | [dhcp_leases](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_leases/) |
|
||||||
| `DHCPSRVS` | ♻ | DHCP servers | | | Script | [dhcp_servers](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_servers/) |
|
| `DHCPSRVS` | ♻ | DHCP servers | | | Script | [dhcp_servers](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_servers/) |
|
||||||
|
| `DIGSCAN` | 🆎 | Dig (DNS) Name resolution | | | Script | [dig_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dig_scan/) |
|
||||||
| `FREEBOX` | 🔍/♻/🆎| Pull data and names from Freebox/Iliadbox | | | Script | [freebox](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/freebox/) |
|
| `FREEBOX` | 🔍/♻/🆎| Pull data and names from Freebox/Iliadbox | | | Script | [freebox](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/freebox/) |
|
||||||
| `ICMP` | ♻ | ICMP (ping) status checker | | | Script | [icmp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/icmp_scan/) |
|
| `ICMP` | ♻ | ICMP (ping) status checker | | | Script | [icmp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/icmp_scan/) |
|
||||||
| `INTRNT` | 🔍 | Internet IP scanner | | | Script | [internet_ip](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_ip/) |
|
| `INTRNT` | 🔍 | Internet IP scanner | | | Script | [internet_ip](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_ip/) |
|
||||||
@@ -71,8 +72,8 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
|
|||||||
| `NSLOOKUP` | 🆎 | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nslookup_scan/) |
|
| `NSLOOKUP` | 🆎 | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nslookup_scan/) |
|
||||||
| `NTFPRCS` | ⚙ | Notification processing | | Yes | Template | [notification_processing](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/notification_processing/)|
|
| `NTFPRCS` | ⚙ | Notification processing | | Yes | Template | [notification_processing](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/notification_processing/)|
|
||||||
| `NTFY` | ▶️ | NTFY notifications | | | Script | [_publisher_ntfy](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_ntfy/) |
|
| `NTFY` | ▶️ | NTFY notifications | | | Script | [_publisher_ntfy](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_ntfy/) |
|
||||||
| `OMDSDN` | 📥/🆎 | OMADA TP-Link import | 🖧 🔄 | | Script | [omada_sdn_imp](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_imp/) |
|
| `OMDSDN` | 📥/🆎 ❌ | UNMAINTAINED use `OMDSDNOPENAPI` | 🖧 🔄 | | Script | [omada_sdn_imp](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_imp/) |
|
||||||
| `OMDSDNOPENAPI`| 📥/🆎 | OMADA TP-Link import via OpenAPI | 🖧 | | Script | [omada_sdn_openapi](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_openapi/) |
|
| `OMDSDNOPENAPI`| 📥/🆎 | OMADA TP-Link import via OpenAPI | 🖧 | | Script | [omada_sdn_openapi](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_openapi/) |
|
||||||
| `PIHOLE` | 🔍/🆎/📥| Pi-hole device import & sync | | | SQLite DB | [pihole_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/pihole_scan/) |
|
| `PIHOLE` | 🔍/🆎/📥| Pi-hole device import & sync | | | SQLite DB | [pihole_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/pihole_scan/) |
|
||||||
| `PUSHSAFER` | ▶️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushsafer/) |
|
| `PUSHSAFER` | ▶️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushsafer/) |
|
||||||
| `PUSHOVER` | ▶️ | Pushover notifications | | | Script | [_publisher_pushover](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushover/) |
|
| `PUSHOVER` | ▶️ | Pushover notifications | | | Script | [_publisher_pushover](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushover/) |
|
||||||
@@ -90,7 +91,7 @@ Device-detecting plugins insert values into the `CurrentScan` database table. T
|
|||||||
|
|
||||||
|
|
||||||
> \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed.
|
> \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed.
|
||||||
> ❌ marked for removal
|
> ❌ marked for removal/unmaintained - looking for help
|
||||||
> ⌚It's recommended to use the same schedule interval for all plugins responsible for discovering new devices.
|
> ⌚It's recommended to use the same schedule interval for all plugins responsible for discovering new devices.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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`
|
||||||
>
|
>
|
||||||
|
|||||||
107
docs/SECURITY.md
@@ -1,29 +1,102 @@
|
|||||||
# Securing your NetAlertX instance
|
## 🧭 Responsibility Disclaimer
|
||||||
|
|
||||||
NetAlertX is an execution framework. In order to run scanners and plugins, the application has to have access to privileged system resources. It is not recommended to expose NetAlertX to the internet without taking basic security precautions. It is highly recommended to use a VPN to access the application and to set up a password for the web interface before exposing the UI online.
|
NetAlertX provides powerful tools for network scanning, presence detection, and automation. However, **it is up to you—the deployer—to ensure that your instance is properly secured**.
|
||||||
|
|
||||||
## VPN
|
This includes (but is not limited to):
|
||||||
|
- Controlling who has access to the UI and API
|
||||||
|
- Following network and container security best practices
|
||||||
|
- Running NetAlertX only on networks where you have legal authorization
|
||||||
|
- Keeping your deployment up to date with the latest patches
|
||||||
|
|
||||||
VPNs allow you to securely access your NetAlertX instance from remote locations without exposing it to the internet. A VPN encrypts your connection and prevents unauthorized access.
|
> NetAlertX is not responsible for misuse, misconfiguration, or unsecure deployments. Always test and secure your setup before exposing it to the outside world.
|
||||||
|
|
||||||
### Tailscale as an Alternative
|
# 🔐 Securing Your NetAlertX Instance
|
||||||
|
|
||||||
If setting up a traditional VPN is not ideal, you can use [Tailscale](https://tailscale.com/) as an easy alternative. Tailscale creates a secure, encrypted connection between your devices without complex configuration. Since NetAlertX is designed to be run on private networks, Tailscale can provide a simple way to securely connect to your instance from anywhere.
|
NetAlertX is a powerful network scanning and automation framework. With that power comes responsibility. **It is your responsibility to secure your deployment**, especially if you're running it outside a trusted local environment.
|
||||||
|
|
||||||
## Setting a Password
|
---
|
||||||
|
|
||||||
By default, NetAlertX does not enforce authentication, but it is highly recommended to set a password before exposing the web interface.
|
## ⚠️ TL;DR – Key Security Recommendations
|
||||||
|
|
||||||
Configure `SETPWD_enable_password` to `true` and enter your password in `SETPWD_password`. When enabled, a login dialog is displayed. If facing issues, you can always disable the login by setting `SETPWD_enable_password=false` in your `app.conf` file.
|
- ✅ **NEVER expose NetAlertX directly to the internet without protection**
|
||||||
|
- ✅ Use a **VPN or Tailscale** to access remotely
|
||||||
|
- ✅ Enable **password protection** for the web UI
|
||||||
|
- ✅ Harden your container environment (e.g., no unnecessary privileges)
|
||||||
|
- ✅ Use **firewalls and IP whitelisting**
|
||||||
|
- ✅ Keep the software **updated**
|
||||||
|
- ✅ Limit the scope of **plugins and API keys**
|
||||||
|
|
||||||
- The default password is `123456`.
|
---
|
||||||
- Passwords are stored as SHA256 hashes for security.
|
|
||||||
|
|
||||||
## Additional Security Measures
|
## 🔗 Access Control with VPN (or Tailscale)
|
||||||
|
|
||||||
- **Firewall Rules**: Ensure that only trusted IPs can access the NetAlertX instance.
|
NetAlertX is designed to be run on **private LANs**, not the open internet.
|
||||||
- **Limit Plugin Permissions**: Only enable the plugins necessary for your setup.
|
|
||||||
- **Keep Software Updated**: Regularly update NetAlertX to receive the latest security patches.
|
|
||||||
- **Use Read-Only API Keys**: If exposing APIs, limit privileges with read-only keys where applicable.
|
|
||||||
|
|
||||||
By following these security recommendations, you can help protect your NetAlertX instance from unauthorized access and potential misuse.
|
**Recommended**: Use a VPN to access NetAlertX from remote locations.
|
||||||
|
|
||||||
|
### ✅ Tailscale (Easy VPN Alternative)
|
||||||
|
|
||||||
|
Tailscale sets up a private mesh network between your devices. It's fast to configure and ideal for NetAlertX.
|
||||||
|
👉 [Get started with Tailscale](https://tailscale.com/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔑 Web UI Password Protection
|
||||||
|
|
||||||
|
By default, NetAlertX does **not** require login. Before exposing the UI in any way:
|
||||||
|
|
||||||
|
1. Enable password protection:
|
||||||
|
```ini
|
||||||
|
SETPWD_enable_password=true
|
||||||
|
SETPWD_password=your_secure_password
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Passwords are stored as SHA256 hashes
|
||||||
|
|
||||||
|
3. Default password (if not changed): 123456 — change it ASAP!
|
||||||
|
|
||||||
|
|
||||||
|
> To disable authenticated login, set `SETPWD_enable_password=false` in `app.conf`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔥 Additional Security Measures
|
||||||
|
|
||||||
|
- **Firewall / Network Rules**
|
||||||
|
Restrict UI/API access to trusted IPs only.
|
||||||
|
|
||||||
|
- **Limit Docker Capabilities**
|
||||||
|
Avoid `--privileged`. Use `--cap-add=NET_RAW` and others **only if required** by your scan method.
|
||||||
|
|
||||||
|
- **Keep NetAlertX Updated**
|
||||||
|
Regular updates contain bug fixes and security patches.
|
||||||
|
|
||||||
|
- **Plugin Permissions**
|
||||||
|
Disable unused plugins. Only install from trusted sources.
|
||||||
|
|
||||||
|
- **Use Read-Only API Keys**
|
||||||
|
When integrating NetAlertX with other tools, scope keys tightly.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧱 Docker Hardening Tips
|
||||||
|
|
||||||
|
- Use `read-only` mount options where possible (`:ro`)
|
||||||
|
- Avoid running as `root` unless absolutely necessary
|
||||||
|
- Consider using `docker scan` or other container image vulnerability scanners
|
||||||
|
- Run with `--network host` **only on trusted networks** and only if needed for ARP-based scans
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📣 Responsible Disclosure
|
||||||
|
|
||||||
|
If you discover a vulnerability or security concern, please report it **privately** to:
|
||||||
|
|
||||||
|
📧 [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX%20Security%20Disclosure)
|
||||||
|
|
||||||
|
We take security seriously and will work to patch confirmed issues promptly. Your help in responsible disclosure is appreciated!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
By following these recommendations, you can ensure your NetAlertX deployment is both powerful **and** secure.
|
||||||
65
docs/SMTP.md
@@ -1,6 +1,49 @@
|
|||||||
# 📧 SMTP guides
|
# 📧 SMTP server guides
|
||||||
|
|
||||||
## Using the GMX SMTP server
|
The SMTP plugin supports any SMTP server. Here are some commonly used services to help speed up your configuration.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> If you are using a self hosted SMTP server ssh into the container and verify (e.g. via ping) that your server is reachable from within the NetAlertX container. See also how to ssh into the container if you are running it as a [Home Assistant](./HOME_ASSISTANT.md) addon.
|
||||||
|
|
||||||
|
## Gmail
|
||||||
|
|
||||||
|
1. Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
|
||||||
|
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
|
||||||
|
|
||||||
|
2. Specify the following settings:
|
||||||
|
|
||||||
|
```python
|
||||||
|
SMTP_RUN='on_notification'
|
||||||
|
SMTP_SKIP_TLS=True
|
||||||
|
SMTP_FORCE_SSL=True
|
||||||
|
SMTP_PORT=465
|
||||||
|
SMTP_SERVER='smtp.gmail.com'
|
||||||
|
SMTP_PASS='16-digit passcode from google'
|
||||||
|
SMTP_REPORT_TO='some_target_email@gmail.com'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Brevo
|
||||||
|
|
||||||
|
Brevo allows for 300 free emails per day as of time of writing.
|
||||||
|
|
||||||
|
1. Create an account on Brevo: https://www.brevo.com/free-smtp-server/
|
||||||
|
2. Click your name -> SMTP & API
|
||||||
|
3. Click Generate a new SMTP key
|
||||||
|
4. Save the details and fill in the NetAlertX settings as below.
|
||||||
|
|
||||||
|
```python
|
||||||
|
SMTP_SERVER='smtp-relay.brevo.com'
|
||||||
|
SMTP_PORT=587
|
||||||
|
SMTP_SKIP_LOGIN=False
|
||||||
|
SMTP_USER='user@email.com'
|
||||||
|
SMTP_PASS='xsmtpsib-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx'
|
||||||
|
SMTP_SKIP_TLS=False
|
||||||
|
SMTP_FORCE_SSL=False
|
||||||
|
SMTP_REPORT_TO='some_target_email@gmail.com'
|
||||||
|
SMTP_REPORT_FROM='NetAlertX <user@email.com>'
|
||||||
|
```
|
||||||
|
|
||||||
|
## GMX
|
||||||
|
|
||||||
1. Go to your GMX account https://account.gmx.com
|
1. Go to your GMX account https://account.gmx.com
|
||||||
2. Under Security Options enable 2FA (Two-factor authentication)
|
2. Under Security Options enable 2FA (Two-factor authentication)
|
||||||
@@ -21,21 +64,3 @@
|
|||||||
SMTP_REPORT_TO='some_target_email@gmail.com'
|
SMTP_REPORT_TO='some_target_email@gmail.com'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Using the Gmail SMTP server
|
|
||||||
|
|
||||||
1. Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
|
|
||||||
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
|
|
||||||
|
|
||||||
2. Specify the following settings:
|
|
||||||
|
|
||||||
```python
|
|
||||||
SMTP_RUN='on_notification'
|
|
||||||
SMTP_SKIP_TLS=True
|
|
||||||
SMTP_FORCE_SSL=True
|
|
||||||
SMTP_PORT=465
|
|
||||||
SMTP_SERVER='smtp.gmail.com'
|
|
||||||
SMTP_PASS='16-digit passcode from google'
|
|
||||||
SMTP_REPORT_TO='some_target_email@gmail.com'
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
# 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. Alternatively, 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.
|
||||||
- Dockcheck: Semi-automated with more control, suited for bulk updates.
|
- Dockcheck: Semi-automated with more control, suited for bulk updates.
|
||||||
- Watchtower: Fully automated, runs continuously to check and update containers.
|
- Watchtower: Fully automated, runs continuously to check and update containers.
|
||||||
|
- Portainer: Manual with UI.
|
||||||
|
|
||||||
You can choose any approach that fits your workflow.
|
You can choose any approach that fits your workflow.
|
||||||
|
|
||||||
@@ -104,10 +108,42 @@ docker run -d \
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 4. Portainer controlled image
|
||||||
|
|
||||||
|
This assumes you're using Portainer to manage Docker (or Docker Swarm) and want to pull the latest version of an image and redeploy the container.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> * Portainer does **not auto-update** containers. For automation, use **Watchtower** or similar tools.
|
||||||
|
> * Make sure you have the [persistent volumes mounted or backups ready](BACKUPS.md) before recreating.
|
||||||
|
|
||||||
|
### 4.1 Steps to Update an Image in Portainer (Standalone Docker)
|
||||||
|
|
||||||
|
1. **Login to Portainer.**
|
||||||
|
2. Go to **"Containers"** in the left sidebar.
|
||||||
|
3. Find the container you want to update, click its name.
|
||||||
|
4. Click **"Recreate"** (top right).
|
||||||
|
5. **Tick**: _Pull latest image_ (this ensures Portainer fetches the newest version from Docker Hub or your registry).
|
||||||
|
6. Click **"Recreate"** again.
|
||||||
|
7. Wait for the container to be stopped, removed, and recreated with the updated image.
|
||||||
|
|
||||||
|
### 4.2 For Docker Swarm Services
|
||||||
|
|
||||||
|
If you're using Docker Swarm (under **"Stacks"** or **"Services"**):
|
||||||
|
|
||||||
|
1. Go to **"Stacks"**.
|
||||||
|
2. Select the stack managing the container.
|
||||||
|
3. Click **"Editor"** (or "Update the Stack").
|
||||||
|
4. Add a version tag or use `:latest` if your image tag is `latest` (not recommended for production).
|
||||||
|
5. Click **"Update the Stack"**. ⚠ Portainer will not pull the new image unless the tag changes OR the stack is forced to recreate.
|
||||||
|
6. If image tag hasn't changed, go to **"Services"**, find the service, and click **"Force Update"**.
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
- Manual: Ideal for individual or critical updates.
|
| Method | Type | Pros | Cons |
|
||||||
- Dockcheck: Suitable for controlled, mass updates.
|
|------------|--------------|----------------------------------|------------------------------|
|
||||||
- Watchtower: Fully automated, best for continuous deployment setups.
|
| Manual | CLI | Full control, no dependencies | Tedious for many containers |
|
||||||
|
| Dockcheck | CLI Script | Great for batch updates | Needs setup, semi-automated |
|
||||||
|
| Watchtower | Daemonized | Fully automated updates | Less control, version drift |
|
||||||
|
| Portainer | UI | Easy via web interface | No auto-updates |
|
||||||
|
|
||||||
These approaches allow you to maintain flexibility in how you update Docker containers, depending on the urgency and scale of the update.
|
These approaches allow you to maintain flexibility in how you update Docker containers, depending on the urgency and scale of the update.
|
||||||
|
|||||||
@@ -22,4 +22,4 @@ For a comparison, this is how the UI looks like if you are on the latest stable
|
|||||||
|
|
||||||
## Implementation details
|
## Implementation details
|
||||||
|
|
||||||
During build a [/app/front/buildtimestamp.txt](https://github.com/jokob-sk/NetAlertX/blob/092797e75ccfa8359444ad149e727358ac4da05f/Dockerfile#L44) file is created. The app then periodically checks if a new release is available with a newer timestamp in GitHub's rest-based JSON endpoint (check the `def isNewVersion():` method for details).
|
During build a [/app/front/buildtimestamp.txt](https://github.com/jokob-sk/NetAlertX/blob/092797e75ccfa8359444ad149e727358ac4da05f/Dockerfile#L44) file is created. The app then periodically checks if a new release is available with a newer timestamp in GitHub's rest-based JSON endpoint (check the `def isNewVersion:` method for details).
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
### Create a simple n8n workflow
|
### Create a simple n8n workflow
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
|
||||||
|
|
||||||
N8N can be used for more advanced conditional notification use cases. For example, you want only to get notified if two out of a specified list of devices is down. Or you can use other plugins to process the notifiations further. The below is a simple example of sending an email on a webhook.
|
N8N can be used for more advanced conditional notification use cases. For example, you want only to get notified if two out of a specified list of devices is down. Or you can use other plugins to process the notifiations further. The below is a simple example of sending an email on a webhook.
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# Webhook Secrets
|
# Webhook Secrets
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
|
||||||
|
|
||||||
## How does the signing work?
|
## How does the signing work?
|
||||||
|
|
||||||
NetAlertX will use the configured secret to create a hash signature of the request body. This SHA256-HMAC signature will appear in the `X-Webhook-Signature` header of each request to the webhook target URL. You can use the value of this header to validate the request was sent by NetAlertX.
|
NetAlertX will use the configured secret to create a hash signature of the request body. This SHA256-HMAC signature will appear in the `X-Webhook-Signature` header of each request to the webhook target URL. You can use the value of this header to validate the request was sent by NetAlertX.
|
||||||
|
|||||||
@@ -63,68 +63,8 @@ You can include multiple actions that should execute once the conditions are met
|
|||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
Below you can find a couple of configuration examples.
|
You can find a couple of configuration examples in [Workflow Examples](WORKFLOW_EXAMPLES.md).
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Example 1: Assign Device to Network Node Based on IP
|
|
||||||
|
|
||||||
This workflow assigns newly added devices with IP addresses in the `192.168.1.*` range to the device with the MAC address `6c:6d:6d:6c:6c:6c`.
|
|
||||||
|
|
||||||
### Trigger:
|
|
||||||
- **Object Type**: `Devices`
|
|
||||||
- **Event Type**: `insert`
|
|
||||||
|
|
||||||
### Conditions:
|
|
||||||
- **Logic**: `AND`
|
|
||||||
- `Field`: `devLastIP`
|
|
||||||
- `Operator`: `contains`
|
|
||||||
- `Value`: `192.168.1.`
|
|
||||||
|
|
||||||
This condition ensures that the workflow only applies to devices with an IP address in the `192.168.1.*` range.
|
|
||||||
|
|
||||||
### Actions:
|
|
||||||
- **Action Type**: `update_field`
|
|
||||||
- **Field**: `devNetworkNode`
|
|
||||||
- **Value**: `6c:6d:6d:6c:6c:6c`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Example 2: Mark Device as Not New and Delete If from Google Vendor
|
|
||||||
|
|
||||||
This workflow automates the process of marking Google devices as not new and deleting them if they meet the criteria.
|
|
||||||
|
|
||||||
### Trigger:
|
|
||||||
- **Object Type**: `Devices`
|
|
||||||
- **Event Type**: `update`
|
|
||||||
|
|
||||||
### Conditions:
|
|
||||||
- **Logic**: `AND`
|
|
||||||
- `Field`: `devVendor`
|
|
||||||
- `Operator`: `contains`
|
|
||||||
- `Value`: `Google`
|
|
||||||
|
|
||||||
This condition checks if the device's vendor is `Google`.
|
|
||||||
|
|
||||||
- **Logic**: `AND`
|
|
||||||
- `Field`: `devIsNew`
|
|
||||||
- `Operator`: `equals`
|
|
||||||
- `Value`: `1`
|
|
||||||
|
|
||||||
This ensures the workflow applies only to new devices.
|
|
||||||
|
|
||||||
### Actions:
|
|
||||||
1. **Action Type**: `update_field`
|
|
||||||
- **Field**: `devIsNew`
|
|
||||||
- **Value**: `0`
|
|
||||||
|
|
||||||
This action marks the device as no longer new.
|
|
||||||
|
|
||||||
2. **Action Type**: `delete_device`
|
|
||||||
|
|
||||||
This action deletes the device after it is marked as not new.
|
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Share your workflows in [Discord](https://discord.com/invite/NczTUTWyRr) or [GitHub Discussions](https://github.com/jokob-sk/NetAlertX/discussions).
|
> Share your workflows in [Discord](https://discord.com/invite/NczTUTWyRr) or [GitHub Discussions](https://github.com/jokob-sk/NetAlertX/discussions).
|
||||||
|
|||||||
185
docs/WORKFLOW_EXAMPLES.md
Executable file
@@ -0,0 +1,185 @@
|
|||||||
|
# Workflow examples
|
||||||
|
|
||||||
|
Workflows in NetAlertX automate actions based on real-time events and conditions. Below are practical examples that demonstrate how to build automation using triggers, conditions, and actions.
|
||||||
|
|
||||||
|
## Example 1: Un-archive devices if detected online
|
||||||
|
|
||||||
|
This workflow automatically unarchives a device if it was previously archived but has now been detected as online.
|
||||||
|
|
||||||
|
### 📋 Use Case
|
||||||
|
|
||||||
|
Sometimes devices are manually archived (e.g., no longer expected on the network), but they reappear unexpectedly. This workflow reverses the archive status when such devices are detected during a scan.
|
||||||
|
|
||||||
|
### ⚙️ Workflow Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Un-archive devices if detected online",
|
||||||
|
"trigger": {
|
||||||
|
"object_type": "Devices",
|
||||||
|
"event_type": "update"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"logic": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "devIsArchived",
|
||||||
|
"operator": "equals",
|
||||||
|
"value": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "devPresentLastScan",
|
||||||
|
"operator": "equals",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "update_field",
|
||||||
|
"field": "devIsArchived",
|
||||||
|
"value": "0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled": "Yes"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔍 Explanation
|
||||||
|
|
||||||
|
- Trigger: Listens for updates to device records.
|
||||||
|
- Conditions:
|
||||||
|
- `devIsArchived` is `1` (archived).
|
||||||
|
- `devPresentLastScan` is `1` (device was detected in the latest scan).
|
||||||
|
- Action: Updates the device to set `devIsArchived` to `0` (unarchived).
|
||||||
|
|
||||||
|
### ✅ Result
|
||||||
|
|
||||||
|
Whenever a previously archived device shows up during a network scan, it will be automatically unarchived — allowing it to reappear in your device lists and dashboards.
|
||||||
|
|
||||||
|
|
||||||
|
Here is your updated version of **Example 2** and **Example 3**, fully aligned with the format and structure of **Example 1** for consistency and professionalism:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example 2: Assign Device to Network Node Based on IP
|
||||||
|
|
||||||
|
This workflow assigns newly added devices with IP addresses in the `192.168.1.*` range to a specific network node with MAC address `6c:6d:6d:6c:6c:6c`.
|
||||||
|
|
||||||
|
### 📋 Use Case
|
||||||
|
|
||||||
|
When new devices join your network, assigning them to the correct network node is important for accurate topology and grouping. This workflow ensures devices in a specific subnet are automatically linked to the intended node.
|
||||||
|
|
||||||
|
### ⚙️ Workflow Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Assign Device to Network Node Based on IP",
|
||||||
|
"trigger": {
|
||||||
|
"object_type": "Devices",
|
||||||
|
"event_type": "insert"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"logic": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "devLastIP",
|
||||||
|
"operator": "contains",
|
||||||
|
"value": "192.168.1."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "update_field",
|
||||||
|
"field": "devNetworkNode",
|
||||||
|
"value": "6c:6d:6d:6c:6c:6c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled": "Yes"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔍 Explanation
|
||||||
|
|
||||||
|
* **Trigger**: Activates when a new device is added.
|
||||||
|
* **Condition**:
|
||||||
|
|
||||||
|
* `devLastIP` contains `192.168.1.` (matches subnet).
|
||||||
|
* **Action**:
|
||||||
|
|
||||||
|
* Sets `devNetworkNode` to the specified MAC address.
|
||||||
|
|
||||||
|
### ✅ Result
|
||||||
|
|
||||||
|
New devices with IPs in the `192.168.1.*` subnet are automatically assigned to the correct network node, streamlining device organization and reducing manual work.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example 3: Mark Device as Not New and Delete If from Google Vendor
|
||||||
|
|
||||||
|
This workflow automatically marks newly detected Google devices as not new and deletes them immediately.
|
||||||
|
|
||||||
|
### 📋 Use Case
|
||||||
|
|
||||||
|
You may want to automatically clear out newly detected Google devices (such as Chromecast or Google Home) if they’re not needed in your device database. This workflow handles that clean-up automatically.
|
||||||
|
|
||||||
|
### ⚙️ Workflow Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Mark Device as Not New and Delete If from Google Vendor",
|
||||||
|
"trigger": {
|
||||||
|
"object_type": "Devices",
|
||||||
|
"event_type": "update"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"logic": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "devVendor",
|
||||||
|
"operator": "contains",
|
||||||
|
"value": "Google"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "devIsNew",
|
||||||
|
"operator": "equals",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "update_field",
|
||||||
|
"field": "devIsNew",
|
||||||
|
"value": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "delete_device"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled": "Yes"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔍 Explanation
|
||||||
|
|
||||||
|
* **Trigger**: Runs on device updates.
|
||||||
|
* **Conditions**:
|
||||||
|
|
||||||
|
* Vendor contains `Google`.
|
||||||
|
* Device is marked as new (`devIsNew` is `1`).
|
||||||
|
* **Actions**:
|
||||||
|
|
||||||
|
1. Set `devIsNew` to `0` (mark as not new).
|
||||||
|
2. Delete the device.
|
||||||
|
|
||||||
|
### ✅ Result
|
||||||
|
|
||||||
|
Any newly detected Google devices are cleaned up instantly — first marked as not new, then deleted — helping you avoid clutter in your device records.
|
||||||
BIN
docs/img/DEBUG_GRAPHQL/Init_check.png
Executable file
|
After Width: | Height: | Size: 135 KiB |
BIN
docs/img/DEBUG_GRAPHQL/app_conf_graphql_port.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/img/DEBUG_GRAPHQL/dev_console_graphql_json.png
Executable file
|
After Width: | Height: | Size: 32 KiB |
BIN
docs/img/DEBUG_GRAPHQL/graphql_running_logs.png
Executable file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/img/DEBUG_GRAPHQL/graphql_settings_port_token.png
Executable file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/img/DEBUG_GRAPHQL/network_graphql.png
Executable file
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
BIN
docs/img/DEVICE_MANAGEMENT/device_management_status_colors.png
Executable file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/img/FIX_OFFLINE_DETECTION/presence_graph_before_after.png
Executable file
|
After Width: | Height: | Size: 486 KiB |
BIN
docs/img/NETWORK_TREE/Network_tree_details.png
Executable file
|
After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 71 KiB |
BIN
docs/img/PLUGINS/enable_plugin.gif
Executable file
|
After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 8.0 KiB |
BIN
docs/img/netalertx_docs_old.png
Executable file
|
After Width: | Height: | Size: 7.5 KiB |
@@ -19,7 +19,7 @@ showSpinner()
|
|||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
// Load JSON data from the provided URL
|
// Load JSON data from the provided URL
|
||||||
$.getJSON('/php/server/query_json.php?file=table_appevents.json', function(data) {
|
$.getJSON('php/server/query_json.php?file=table_appevents.json', function(data) {
|
||||||
// Process the JSON data and generate UI dynamically
|
// Process the JSON data and generate UI dynamically
|
||||||
processData(data)
|
processData(data)
|
||||||
|
|
||||||
|
|||||||
@@ -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%;
|
||||||
}
|
}
|
||||||
@@ -1098,7 +1136,7 @@ height: 50px;
|
|||||||
input[readonly] {
|
input[readonly] {
|
||||||
/* Apply styles to the readonly input */
|
/* Apply styles to the readonly input */
|
||||||
background-color: #646566 !important;
|
background-color: #646566 !important;
|
||||||
color: #000;
|
color: #e6e6e6;
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1361,7 +1399,8 @@ input[readonly] {
|
|||||||
cursor: -webkit-grab;
|
cursor: -webkit-grab;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice
|
#settingsPage .select2-container--default .select2-selection--multiple .select2-selection__choice,
|
||||||
|
#maintenancePage .select2-container--default .select2-selection--multiple .select2-selection__choice
|
||||||
{
|
{
|
||||||
background-color:#258744 !important;
|
background-color:#258744 !important;
|
||||||
}
|
}
|
||||||
@@ -1375,6 +1414,15 @@ input[readonly] {
|
|||||||
background-color:#606060 !important;
|
background-color:#606060 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple,
|
||||||
|
.select2-container--default .select2-selection--single
|
||||||
|
{
|
||||||
|
border-radius: 0px !important;
|
||||||
|
border-color: #d2d6de !important;
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.helpIconSmallTopRight{
|
.helpIconSmallTopRight{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
font-size: x-small;
|
font-size: x-small;
|
||||||
@@ -1418,6 +1466,11 @@ input[readonly] {
|
|||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.small-box:hover
|
||||||
|
{
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* Device details */
|
/* Device details */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
@@ -1496,6 +1549,93 @@ input[readonly] {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--default .select2-selection--multiple .select2-selection__choice a
|
||||||
|
{
|
||||||
|
color: #FFF0E0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .iconPreview svg
|
||||||
|
{
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--default .select2-selection--multiple .select2-selection__choice
|
||||||
|
{
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--disabled
|
||||||
|
{
|
||||||
|
background-color: #606060;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--default .select2-selection--multiple .select2-selection__choice span
|
||||||
|
{
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-selection
|
||||||
|
{
|
||||||
|
width: initial;
|
||||||
|
display: inline-block;
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove the default Select2 chevron (the down arrow) */
|
||||||
|
.select2-container .select2-selection__arrow b {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add custom icon */
|
||||||
|
.select2-container .select2-selection__arrow::after {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
content: "\f078"; /* fa-chevron-down */
|
||||||
|
font-weight: 700;
|
||||||
|
position: absolute;
|
||||||
|
top: 75%;
|
||||||
|
left: 30%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .form-control
|
||||||
|
{
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-selection--single .custom-chip
|
||||||
|
{
|
||||||
|
margin-top: 11px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered,
|
||||||
|
.select2-container--default .select2-selection--single, .select2-selection .select2-selection--single
|
||||||
|
{
|
||||||
|
padding: 0px 0px;
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .select2-container--default .select2-selection--single .select2-selection__rendered, */
|
||||||
|
.select2-container--default .select2-selection--single
|
||||||
|
{
|
||||||
|
/* color:initial !important; */
|
||||||
|
background-color:initial !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container
|
||||||
|
{
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container .selection
|
||||||
|
{
|
||||||
|
width: 100% !important;
|
||||||
|
display: inline-grid;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* MODAL popups */
|
/* MODAL popups */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
@@ -1577,6 +1717,43 @@ input[readonly] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#hover-box
|
||||||
|
{
|
||||||
|
background-color: #ffffff;;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box .iconPreview
|
||||||
|
{
|
||||||
|
padding: 0px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box .devName
|
||||||
|
{
|
||||||
|
font-size: larger;
|
||||||
|
display: contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box b
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box .line
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box span
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
max-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
#networkTree .netCollapse
|
#networkTree .netCollapse
|
||||||
{
|
{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -1586,7 +1763,7 @@ input[readonly] {
|
|||||||
#networkTree .highlightedNode
|
#networkTree .highlightedNode
|
||||||
{
|
{
|
||||||
/* border: solid; */
|
/* border: solid; */
|
||||||
border-color:cyan;
|
border-color:#3c8dbc;
|
||||||
}
|
}
|
||||||
#networkTree .netStatus-Off-line i,
|
#networkTree .netStatus-Off-line i,
|
||||||
#networkTree .netStatus-Off-line svg
|
#networkTree .netStatus-Off-line svg
|
||||||
@@ -1692,7 +1869,7 @@ input[readonly] {
|
|||||||
.plugin-content #tabs-content-location
|
.plugin-content #tabs-content-location
|
||||||
{
|
{
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
/* padding-top: 0; */
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.integrations-plugins .content
|
.integrations-plugins .content
|
||||||
|
|||||||
@@ -722,7 +722,7 @@ input[type="password"]::-webkit-caps-lock-indicator {
|
|||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
}
|
}
|
||||||
.small-box:hover .icon {
|
.small-box:hover .icon {
|
||||||
font-size: 3.74em;
|
font-size: 3em;
|
||||||
}
|
}
|
||||||
.small-box .icon {
|
.small-box .icon {
|
||||||
top: 0.01em;
|
top: 0.01em;
|
||||||
|
|||||||
@@ -724,7 +724,7 @@
|
|||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
}
|
}
|
||||||
.small-box:hover .icon {
|
.small-box:hover .icon {
|
||||||
font-size: 3.74em;
|
font-size: 3em;
|
||||||
}
|
}
|
||||||
.small-box .icon {
|
.small-box .icon {
|
||||||
top: 0.01em;
|
top: 0.01em;
|
||||||
@@ -734,6 +734,35 @@
|
|||||||
background-color: #000 !important;
|
background-color: #000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single {
|
||||||
|
color: initial !important;
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chevron color */
|
||||||
|
.select2-container .select2-selection__arrow::after {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chevron color */
|
||||||
|
.select2-selection .select2-selection--single {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple, .select2-container--default .select2-selection--single {
|
||||||
|
border-color: #3d444b !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered .custom-chip
|
||||||
|
{
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box
|
||||||
|
{
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.callout code {
|
.callout code {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row" id="deviceDetailsEdit">
|
||||||
<div class="box-body form-horizontal">
|
<div class="box-body form-horizontal">
|
||||||
<form id="edit-form">
|
<form id="edit-form">
|
||||||
<!-- Form fields will be appended here -->
|
<!-- Form fields will be appended here -->
|
||||||
@@ -63,14 +63,14 @@
|
|||||||
|
|
||||||
// some race condition, need to implement delay
|
// some race condition, need to implement delay
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
$.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
|
$.get('php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
|
||||||
|
|
||||||
settingsData = res["data"];
|
settingsData = res["data"];
|
||||||
|
|
||||||
// columns to hide
|
// columns to hide
|
||||||
hiddenFields = ["NEWDEV_devScan", "NEWDEV_devPresentLastScan" ]
|
hiddenFields = ["NEWDEV_devScan", "NEWDEV_devPresentLastScan" ]
|
||||||
// columns to disable - conditional depending if a new dummy device is created
|
// columns to disable/readonly - conditional depending if a new dummy device is created
|
||||||
disabledFields = mac == "new" ? ["NEWDEV_devLastNotification", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection"] : ["NEWDEV_devLastNotification", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devMac", "NEWDEV_devLastIP", "NEWDEV_devSyncHubNode" ];
|
disabledFields = mac == "new" ? ["NEWDEV_devLastNotification", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection"] : ["NEWDEV_devLastNotification", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devMac", "NEWDEV_devLastIP", "NEWDEV_devSyncHubNode", "NEWDEV_devFQDN" ];
|
||||||
|
|
||||||
// Grouping of fields into categories with associated documentation links
|
// Grouping of fields into categories with associated documentation links
|
||||||
const fieldGroups = {
|
const fieldGroups = {
|
||||||
@@ -82,19 +82,10 @@
|
|||||||
inputGroupClasses: "field-group main-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group main-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
inputClasses: "col-sm-8 col-xs-12 input-group"
|
inputClasses: "col-sm-8 col-xs-12 input-group"
|
||||||
},
|
|
||||||
// Group for session information
|
|
||||||
DevDetail_SessionInfo_Title: {
|
|
||||||
data: ["devStatus", "devLastConnection", "devFirstConnection"],
|
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/SESSION_INFO.md",
|
|
||||||
iconClass: "fa fa-calendar",
|
|
||||||
inputGroupClasses: "field-group session-group col-lg-4 col-sm-6 col-xs-12",
|
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
|
||||||
inputClasses: "col-sm-8 col-xs-12 input-group"
|
|
||||||
},
|
},
|
||||||
// Group for event and alert settings
|
// Group for event and alert settings
|
||||||
DevDetail_EveandAl_Title: {
|
DevDetail_EveandAl_Title: {
|
||||||
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated"],
|
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated", "devReqNicsOnline", "devChildrenNicsDynamic"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md",
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md",
|
||||||
iconClass: "fa fa-bell",
|
iconClass: "fa fa-bell",
|
||||||
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
@@ -103,7 +94,7 @@
|
|||||||
},
|
},
|
||||||
// Group for network details
|
// Group for network details
|
||||||
DevDetail_MainInfo_Network_Title: {
|
DevDetail_MainInfo_Network_Title: {
|
||||||
data: ["devParentMAC", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
data: ["devParentMAC", "devParentRelType", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
||||||
iconClass: "fa fa-network-wired",
|
iconClass: "fa fa-network-wired",
|
||||||
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
@@ -119,6 +110,24 @@
|
|||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
inputClasses: "col-sm-8 col-xs-12 input-group"
|
inputClasses: "col-sm-8 col-xs-12 input-group"
|
||||||
},
|
},
|
||||||
|
// Group for session information
|
||||||
|
DevDetail_SessionInfo_Title: {
|
||||||
|
data: ["devStatus", "devLastConnection", "devFirstConnection", "devFQDN"],
|
||||||
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/SESSION_INFO.md",
|
||||||
|
iconClass: "fa fa-calendar",
|
||||||
|
inputGroupClasses: "field-group session-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
|
inputClasses: "col-sm-8 col-xs-12 input-group"
|
||||||
|
},
|
||||||
|
// Group for Children.
|
||||||
|
DevDetail_Children_Title: {
|
||||||
|
data: ["devChildrenDynamic"],
|
||||||
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md",
|
||||||
|
iconClass: "fa fa-list",
|
||||||
|
inputGroupClasses: "field-group cutprop-group col-lg-12 col-sm-12 col-xs-12",
|
||||||
|
labelClasses: "col-sm-12 col-xs-12 control-label",
|
||||||
|
inputClasses: "col-sm-12 col-xs-12 input-group"
|
||||||
|
},
|
||||||
// Group for Custom properties.
|
// Group for Custom properties.
|
||||||
DevDetail_CustomProperties_Title: {
|
DevDetail_CustomProperties_Title: {
|
||||||
data: ["devCustomProps"],
|
data: ["devCustomProps"],
|
||||||
@@ -167,6 +176,7 @@
|
|||||||
// Get the field data (replace 'NEWDEV_' prefix from the key)
|
// Get the field data (replace 'NEWDEV_' prefix from the key)
|
||||||
fieldData = deviceData[setting.setKey.replace('NEWDEV_', '')]
|
fieldData = deviceData[setting.setKey.replace('NEWDEV_', '')]
|
||||||
fieldData = fieldData == null ? "" : fieldData;
|
fieldData = fieldData == null ? "" : fieldData;
|
||||||
|
fieldOptionsOverride = null;
|
||||||
|
|
||||||
// console.log(setting.setKey);
|
// console.log(setting.setKey);
|
||||||
// console.log(fieldData);
|
// console.log(fieldData);
|
||||||
@@ -208,6 +218,20 @@
|
|||||||
</span>`;
|
</span>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handle devChildrenDynamic or NEWDEV_devChildrenNicsDynamic - selected values and options are the same
|
||||||
|
if (
|
||||||
|
Array.isArray(fieldData) &&
|
||||||
|
(setting.setKey == "NEWDEV_devChildrenDynamic" ||
|
||||||
|
setting.setKey == "NEWDEV_devChildrenNicsDynamic" )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
fieldDataNew = []
|
||||||
|
fieldData.forEach(child => {
|
||||||
|
fieldDataNew.push(child.devMac)
|
||||||
|
})
|
||||||
|
fieldData = fieldDataNew;
|
||||||
|
fieldOptionsOverride = fieldDataNew;
|
||||||
|
}
|
||||||
|
|
||||||
// Generate the input field HTML
|
// Generate the input field HTML
|
||||||
const inputFormHtml = `<div class="form-group col-xs-12">
|
const inputFormHtml = `<div class="form-group col-xs-12">
|
||||||
@@ -219,7 +243,7 @@
|
|||||||
</i>
|
</i>
|
||||||
</label>
|
</label>
|
||||||
<div class="${obj.inputClasses}">
|
<div class="${obj.inputClasses}">
|
||||||
${generateFormHtml(settingsData, setting, fieldData.toString(), null, null)}
|
${generateFormHtml(settingsData, setting, fieldData.toString(), fieldOptionsOverride, null)}
|
||||||
${inlineControl}
|
${inlineControl}
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
@@ -380,6 +404,8 @@
|
|||||||
alertevents: ($('#NEWDEV_devAlertEvents')[0].checked * 1),
|
alertevents: ($('#NEWDEV_devAlertEvents')[0].checked * 1),
|
||||||
alertdown: ($('#NEWDEV_devAlertDown')[0].checked * 1),
|
alertdown: ($('#NEWDEV_devAlertDown')[0].checked * 1),
|
||||||
skiprepeated: $('#NEWDEV_devSkipRepeated').val().split(' ')[0],
|
skiprepeated: $('#NEWDEV_devSkipRepeated').val().split(' ')[0],
|
||||||
|
relType: $('#NEWDEV_devParentRelType').val().replace(/'/g, ""),
|
||||||
|
reqNics: ($('#NEWDEV_devReqNicsOnline')[0].checked * 1),
|
||||||
newdevice: ($('#NEWDEV_devIsNew')[0].checked * 1),
|
newdevice: ($('#NEWDEV_devIsNew')[0].checked * 1),
|
||||||
archived: ($('#NEWDEV_devIsArchived')[0].checked * 1),
|
archived: ($('#NEWDEV_devIsArchived')[0].checked * 1),
|
||||||
devFirstConnection: ($('#NEWDEV_devFirstConnection').val()),
|
devFirstConnection: ($('#NEWDEV_devFirstConnection').val()),
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<?= lang("DevDetail_Tab_Tools_Internet_Info_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Internet_Info_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="internetinfo()">
|
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="internetinfo()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Internet_Info_Start") ?></button>
|
<?= lang("DevDetail_Tab_Tools_Internet_Info_Start") ?></button>
|
||||||
<br>
|
<br>
|
||||||
@@ -33,13 +33,13 @@
|
|||||||
<?= lang("DevDetail_Copy_Device_Tooltip") ?>
|
<?= lang("DevDetail_Copy_Device_Tooltip") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<select class="form-control"
|
<select class="form-control"
|
||||||
title="<?= lang('DevDetail_Copy_Device_Tooltip');?>"
|
title="<?= lang('DevDetail_Copy_Device_Tooltip');?>"
|
||||||
id="txtCopyFromDevice" >
|
id="txtCopyFromDevice" >
|
||||||
<option value="lemp_loading" id="lemp_loading">Loading</option>
|
<option value="lemp_loading" id="lemp_loading">Loading</option>
|
||||||
</select>
|
</select>
|
||||||
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="()">
|
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto; margin-top:10px;" onclick="copyFromDevice()">
|
||||||
<?= lang("BackDevDetail_Copy_Title") ?></button>
|
<?= lang("BackDevDetail_Copy_Title") ?></button>
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<?= lang("DevDetail_Tools_WOL_noti_text") ?>
|
<?= lang("DevDetail_Tools_WOL_noti_text") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="wakeonlan()">
|
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="wakeonlan()">
|
||||||
<?= lang("DevDetail_Tools_WOL_noti") ?></button>
|
<?= lang("DevDetail_Tools_WOL_noti") ?></button>
|
||||||
<br>
|
<br>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
<?= lang("DevDetail_button_DeleteEvents_Warning") ?>
|
<?= lang("DevDetail_button_DeleteEvents_Warning") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-default pa-btn pa-btn-delete"
|
class="btn btn-default pa-btn pa-btn-delete"
|
||||||
style="margin-left:0px;"
|
style="margin-left:0px;"
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
<?= lang("DevDetail_CustomProps_reset_info") ?>
|
<?= lang("DevDetail_CustomProps_reset_info") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-default pa-btn pa-btn-delete"
|
class="btn btn-default pa-btn pa-btn-delete"
|
||||||
style="margin-left:0px;"
|
style="margin-left:0px;"
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
<?= lang("DevDetail_Tab_Tools_Speedtest_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Speedtest_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="speedtestcli" class="btn btn-primary pa-btn" style="margin: auto;" onclick="speedtestcli()">
|
<button type="button" id="speedtestcli" class="btn btn-primary pa-btn" style="margin: auto;" onclick="speedtestcli()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Speedtest_Start") ?></button>
|
<?= lang("DevDetail_Tab_Tools_Speedtest_Start") ?></button>
|
||||||
<br>
|
<br>
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
<h5 class="">
|
<h5 class="">
|
||||||
<?= lang("DevDetail_Tab_Tools_Traceroute_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Traceroute_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="traceroute" class="btn btn-primary pa-btn" style="margin: auto;" onclick="traceroute()">
|
<button type="button" id="traceroute" class="btn btn-primary pa-btn" style="margin: auto;" onclick="traceroute()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Traceroute_Start") ?>
|
<?= lang("DevDetail_Tab_Tools_Traceroute_Start") ?>
|
||||||
</button>
|
</button>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<h5 class="">
|
<h5 class="">
|
||||||
<?= lang("DevDetail_Tab_Tools_Nslookup_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Nslookup_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="nslookup" class="btn btn-primary pa-btn" style="margin: auto;" onclick="nslookup()">
|
<button type="button" id="nslookup" class="btn btn-primary pa-btn" style="margin: auto;" onclick="nslookup()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Nslookup_Start") ?>
|
<?= lang("DevDetail_Tab_Tools_Nslookup_Start") ?>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -538,7 +538,10 @@ function mapColumnIndexToFieldName(index, tableColumnVisible) {
|
|||||||
"devSourcePlugin",
|
"devSourcePlugin",
|
||||||
"devPresentLastScan",
|
"devPresentLastScan",
|
||||||
"devAlertDown",
|
"devAlertDown",
|
||||||
"devCustomProps"
|
"devCustomProps",
|
||||||
|
"devFQDN",
|
||||||
|
"devParentRelType",
|
||||||
|
"devReqNicsOnline"
|
||||||
];
|
];
|
||||||
|
|
||||||
// console.log("OrderBy: " + columnNames[tableColumnOrder[index]]);
|
// console.log("OrderBy: " + columnNames[tableColumnOrder[index]]);
|
||||||
@@ -648,6 +651,9 @@ function initializeDatatable (status) {
|
|||||||
devParentChildrenCount
|
devParentChildrenCount
|
||||||
devIpLong
|
devIpLong
|
||||||
devCustomProps
|
devCustomProps
|
||||||
|
devFQDN
|
||||||
|
devParentRelType
|
||||||
|
devReqNicsOnline
|
||||||
}
|
}
|
||||||
count
|
count
|
||||||
}
|
}
|
||||||
@@ -722,7 +728,10 @@ function initializeDatatable (status) {
|
|||||||
device.devSourcePlugin || "",
|
device.devSourcePlugin || "",
|
||||||
device.devPresentLastScan || "",
|
device.devPresentLastScan || "",
|
||||||
device.devAlertDown || "",
|
device.devAlertDown || "",
|
||||||
device.devCustomProps || ""
|
device.devCustomProps || "",
|
||||||
|
device.devFQDN || "",
|
||||||
|
device.devParentRelType || "",
|
||||||
|
device.devReqNicsOnline || 0
|
||||||
];
|
];
|
||||||
|
|
||||||
const newRow = [];
|
const newRow = [];
|
||||||
@@ -760,13 +769,13 @@ function initializeDatatable (status) {
|
|||||||
{visible: false, targets: tableColumnHide },
|
{visible: false, targets: tableColumnHide },
|
||||||
{className: 'text-center', targets: [mapIndx(4), mapIndx(9), mapIndx(10), mapIndx(15), mapIndx(18)] },
|
{className: 'text-center', targets: [mapIndx(4), mapIndx(9), mapIndx(10), mapIndx(15), mapIndx(18)] },
|
||||||
{className: 'iconColumn text-center', targets: [mapIndx(3)]},
|
{className: 'iconColumn text-center', targets: [mapIndx(3)]},
|
||||||
{width: '80px', targets: [mapIndx(6), mapIndx(7), mapIndx(15)] },
|
{width: '80px', targets: [mapIndx(6), mapIndx(7), mapIndx(15), mapIndx(27)] },
|
||||||
{width: '85px', targets: [mapIndx(9)] },
|
{width: '85px', targets: [mapIndx(9)] },
|
||||||
{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)
|
||||||
@@ -845,7 +854,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 ('');
|
||||||
}
|
}
|
||||||
@@ -890,25 +899,14 @@ function initializeDatatable (status) {
|
|||||||
tmp_devPresentLastScan = rowData[mapIndx(24)]
|
tmp_devPresentLastScan = rowData[mapIndx(24)]
|
||||||
tmp_devAlertDown = rowData[mapIndx(25)]
|
tmp_devAlertDown = rowData[mapIndx(25)]
|
||||||
|
|
||||||
if (tmp_devPresentLastScan == 1)
|
const badge = getStatusBadgeParts(
|
||||||
{
|
rowData[mapIndx(24)], // tmp_devPresentLastScan
|
||||||
css = "green text-white statusOnline"
|
rowData[mapIndx(25)], // tmp_devAlertDown
|
||||||
icon = '<i class="fa-solid fa-plug"></i>'
|
rowData[mapIndx(11)], // MAC
|
||||||
} else if (tmp_devPresentLastScan != 1 && tmp_devAlertDown == 1)
|
cellData // optional text
|
||||||
{
|
);
|
||||||
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>`);
|
$(td).html (`<a href="${badge.url}" class="badge ${badge.cssClass}">${badge.iconHtml} ${badge.text}</a>`);
|
||||||
} },
|
} },
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,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"]) && $nax_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;
|
||||||
@@ -37,7 +37,7 @@ if (isset ($_POST["loginpassword"]) && $nax_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]) && $nax_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;
|
||||||
@@ -53,7 +53,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 ($nax_Password == '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92')
|
if ($nax_Password === '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92')
|
||||||
{
|
{
|
||||||
$login_info = lang('Login_Default_PWD');
|
$login_info = lang('Login_Default_PWD');
|
||||||
$login_mode = 'danger';
|
$login_mode = 'danger';
|
||||||
|
|||||||
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,10 +366,12 @@ 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', {
|
||||||
timeZone: tz,
|
timeZone: tz,
|
||||||
@@ -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')
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ function versionUpdateUI(){
|
|||||||
// Checks if a new version is available via the global app_state.json
|
// Checks if a new version is available via the global app_state.json
|
||||||
function checkIfNewVersionAvailable()
|
function checkIfNewVersionAvailable()
|
||||||
{
|
{
|
||||||
$.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
$.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
||||||
|
|
||||||
// console.log(appState["isNewVersionChecked"])
|
// console.log(appState["isNewVersionChecked"])
|
||||||
// console.log(appState["isNewVersion"])
|
// console.log(appState["isNewVersion"])
|
||||||
|
|||||||
@@ -363,8 +363,6 @@ function removeAllOptions(element) {
|
|||||||
function selectAll(element) {
|
function selectAll(element) {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
|
|
||||||
// Get the <select> element with the class 'deviceSelector'
|
|
||||||
// var selectElement = $('.deviceSelector select');
|
|
||||||
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
||||||
|
|
||||||
// Iterate over each option within the select element
|
// Iterate over each option within the select element
|
||||||
@@ -381,8 +379,6 @@ function selectAll(element) {
|
|||||||
// UN-Select All
|
// UN-Select All
|
||||||
function unselectAll(element) {
|
function unselectAll(element) {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
// Get the <select> element with the class 'deviceSelector'
|
|
||||||
// var selectElement = $('.deviceSelector select');
|
|
||||||
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
||||||
|
|
||||||
// Iterate over each option within the select element
|
// Iterate over each option within the select element
|
||||||
@@ -399,8 +395,7 @@ function unselectAll(element) {
|
|||||||
// Trigger change to open up the dropdown filed
|
// Trigger change to open up the dropdown filed
|
||||||
function selectChange(element) {
|
function selectChange(element) {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
// Get the <select> element with the class 'deviceSelector'
|
|
||||||
// var selectElement = $('.deviceSelector select');
|
|
||||||
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
||||||
|
|
||||||
selectElement.parent().find("input").focus().click();
|
selectElement.parent().find("input").focus().click();
|
||||||
@@ -433,7 +428,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"),
|
||||||
@@ -624,6 +619,7 @@ function generateOptionsOrSetOptions(
|
|||||||
// console.log( setKey);
|
// console.log( setKey);
|
||||||
|
|
||||||
// NOTE {value} options to replace with a setting or SQL value are handled in the cacheSettings() function
|
// NOTE {value} options to replace with a setting or SQL value are handled in the cacheSettings() function
|
||||||
|
// obj.push({ id: item, name: item })
|
||||||
options = arrayToObject(createArray(overrideOptions ? overrideOptions : getSettingOptions(setKey)))
|
options = arrayToObject(createArray(overrideOptions ? overrideOptions : getSettingOptions(setKey)))
|
||||||
|
|
||||||
|
|
||||||
@@ -689,6 +685,13 @@ function reverseTransformers(val, transformers) {
|
|||||||
// retrieve string
|
// retrieve string
|
||||||
val = getString(val);
|
val = getString(val);
|
||||||
break;
|
break;
|
||||||
|
case "deviceChip":
|
||||||
|
mac = val // value is mac
|
||||||
|
val = `${getDevDataByMac(mac, "devName")}`
|
||||||
|
break;
|
||||||
|
case "deviceRelType":
|
||||||
|
val = val; // nothing to do
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.warn(`Unknown transformer: ${transformer}`);
|
console.warn(`Unknown transformer: ${transformer}`);
|
||||||
}
|
}
|
||||||
@@ -822,6 +825,8 @@ function arrayToObject(array) {
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Processor to generate options
|
// Processor to generate options
|
||||||
|
// options - available options
|
||||||
|
// valuesArray - values = selected options
|
||||||
function generateOptions(options, valuesArray, targetField, transformers, placeholder) {
|
function generateOptions(options, valuesArray, targetField, transformers, placeholder) {
|
||||||
var optionsHtml = "";
|
var optionsHtml = "";
|
||||||
|
|
||||||
@@ -829,7 +834,6 @@ function generateOptions(options, valuesArray, targetField, transformers, placeh
|
|||||||
selectedArray = []
|
selectedArray = []
|
||||||
cssClass = ""
|
cssClass = ""
|
||||||
|
|
||||||
|
|
||||||
// determine if options or values are used in the listing
|
// determine if options or values are used in the listing
|
||||||
if (valuesArray.length > 0 && options.length > 0){
|
if (valuesArray.length > 0 && options.length > 0){
|
||||||
|
|
||||||
@@ -848,7 +852,6 @@ function generateOptions(options, valuesArray, targetField, transformers, placeh
|
|||||||
resultArray = options;
|
resultArray = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Create a map to track the index of each item in valuesArray
|
// Create a map to track the index of each item in valuesArray
|
||||||
const orderMap = new Map(valuesArray.map((item, index) => [item, index]));
|
const orderMap = new Map(valuesArray.map((item, index) => [item, index]));
|
||||||
|
|
||||||
@@ -1007,10 +1010,12 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
class="form-control ${addCss} ${cssClasses}"
|
class="form-control ${addCss} ${cssClasses}"
|
||||||
name="${setKey}"
|
name="${setKey}"
|
||||||
id="${setKey}"
|
id="${setKey}"
|
||||||
|
my-transformers=${transformers}
|
||||||
my-customparams="${customParams}"
|
my-customparams="${customParams}"
|
||||||
my-customid="${customId}"
|
my-customid="${customId}"
|
||||||
my-originalSetKey="${originalSetKey}"
|
my-originalSetKey="${originalSetKey}"
|
||||||
${multi}>
|
${multi}
|
||||||
|
${readOnly ? "disabled" : ""}>
|
||||||
<option value="" id="${setKey + "_temp_"}"></option>
|
<option value="" id="${setKey + "_temp_"}"></option>
|
||||||
</select>`;
|
</select>`;
|
||||||
|
|
||||||
@@ -1188,22 +1193,46 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
|
|
||||||
const eventsList = createArray(set['setEvents']);
|
const eventsList = createArray(set['setEvents']);
|
||||||
// inline buttons events
|
// inline buttons events
|
||||||
|
if (eventsList.length > 0) {
|
||||||
|
eventsList.forEach(event => {
|
||||||
|
let eventIcon = "fa-play";
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case "add_icon":
|
||||||
|
case "add_option":
|
||||||
|
eventIcon = "fa-square-plus";
|
||||||
|
break;
|
||||||
|
case "copy_icons":
|
||||||
|
eventIcon = "fa-copy";
|
||||||
|
break;
|
||||||
|
case "go_to_device":
|
||||||
|
eventIcon = "fa-square-up-right";
|
||||||
|
break;
|
||||||
|
case "go_to_node":
|
||||||
|
eventIcon = "fa-network-wired";
|
||||||
|
break;
|
||||||
|
case "run":
|
||||||
|
eventIcon = "fa-play";
|
||||||
|
break;
|
||||||
|
case "test":
|
||||||
|
eventIcon = "fa-vial-circle-check";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
eventIcon = "fa-play";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (eventsList.length > 0) {
|
eventsHtml += `<span class="input-group-addon pointer"
|
||||||
eventsList.forEach(event => {
|
id="${`${event}_${setKey}`}"
|
||||||
|
data-myparam-setkey="${setKey}"
|
||||||
eventsHtml += `<span class="input-group-addon pointer"
|
data-myparam="${setKey}"
|
||||||
id="${`${event}_${setKey}`}"
|
data-myparam-plugin="${setKey.split('_')[0] || ''}"
|
||||||
data-myparam-setkey="${setKey}"
|
data-myevent="${event}"
|
||||||
data-myparam="${setKey}"
|
onclick="execute_settingEvent(this)">
|
||||||
data-myparam-plugin="${setKey.split('_')[0] || ''}"
|
<i title="${getString(event + "_event_tooltip")}" class="fa ${eventIcon}"></i>
|
||||||
data-myevent="${event}"
|
</span>`;
|
||||||
onclick="execute_settingEvent(this)">
|
});
|
||||||
<i title="${getString(event + "_event_tooltip")}" class="fa ${getString(event + "_event_icon")}"></i>
|
}
|
||||||
</span>`;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Combine and return the final HTML
|
// Combine and return the final HTML
|
||||||
return inputHtml + eventsHtml;
|
return inputHtml + eventsHtml;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -128,9 +128,6 @@ function getRandomBytes(elem, length) {
|
|||||||
targetElement.val(formattedHex);
|
targetElement.val(formattedHex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// Updates the icon preview
|
// Updates the icon preview
|
||||||
function updateAllIconPreviews() {
|
function updateAllIconPreviews() {
|
||||||
@@ -200,9 +197,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>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,6 +339,7 @@ function execute_settingEvent(element) {
|
|||||||
feSetKey = $(element).attr('data-myparam-setkey');
|
feSetKey = $(element).attr('data-myparam-setkey');
|
||||||
feParam = $(element).attr('data-myparam');
|
feParam = $(element).attr('data-myparam');
|
||||||
feSourceId = $(element).attr('id');
|
feSourceId = $(element).attr('id');
|
||||||
|
feValue = $("#"+feSetKey).val();
|
||||||
|
|
||||||
if (["test", "run"].includes(feEvent)) {
|
if (["test", "run"].includes(feEvent)) {
|
||||||
// Calls a backend function to add a front-end event (specified by the attributes 'data-myevent' and 'data-myparam-plugin' on the passed element) to an execution queue
|
// Calls a backend function to add a front-end event (specified by the attributes 'data-myevent' and 'data-myparam-plugin' on the passed element) to an execution queue
|
||||||
@@ -394,9 +392,12 @@ function execute_settingEvent(element) {
|
|||||||
getString('Gen_Okay'),
|
getString('Gen_Okay'),
|
||||||
'overwriteIconType'
|
'overwriteIconType'
|
||||||
);
|
);
|
||||||
|
} else if (["go_to_device"].includes(feEvent)) {
|
||||||
|
|
||||||
|
goToDevice(feValue);
|
||||||
} else if (["go_to_node"].includes(feEvent)) {
|
} else if (["go_to_node"].includes(feEvent)) {
|
||||||
|
|
||||||
goToNetworkNode('NEWDEV_devParentMAC');
|
goToNetworkNode(feValue);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
console.warn(`🔺Not implemented: ${feEvent}`)
|
console.warn(`🔺Not implemented: ${feEvent}`)
|
||||||
@@ -408,13 +409,25 @@ function execute_settingEvent(element) {
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Go to the correct network node in the Network section
|
// Go to the correct network node in the Network section
|
||||||
function goToNetworkNode(dropdownId)
|
function goToNetworkNode(mac)
|
||||||
{
|
{
|
||||||
setCache('activeNetworkTab', $('#'+dropdownId).val().replaceAll(":","_")+'_id');
|
setCache('activeNetworkTab', mac.replaceAll(":","_")+'_id');
|
||||||
window.location.href = './network.php';
|
window.location.href = './network.php';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Go to the device
|
||||||
|
function goToDevice(mac, newtab = false) {
|
||||||
|
const url = './deviceDetails.php?mac=' + encodeURIComponent(mac);
|
||||||
|
|
||||||
|
if (newtab) {
|
||||||
|
window.open(url, '_blank');
|
||||||
|
} else {
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
// Updating the execution queue in in modal pop-up
|
// Updating the execution queue in in modal pop-up
|
||||||
@@ -574,19 +587,9 @@ function showIconSelection() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Device_TableHead_Owner",
|
|
||||||
// "Device_TableHead_Type",
|
|
||||||
// "Device_TableHead_Group",
|
|
||||||
// "Device_TableHead_Status",
|
|
||||||
// "Device_TableHead_Location",
|
|
||||||
// "Device_TableHead_Vendor",
|
|
||||||
// "Device_TableHead_SyncHubNodeName",
|
|
||||||
// "Device_TableHead_NetworkSite",
|
|
||||||
// "Device_TableHead_SSID",
|
|
||||||
// "Device_TableHead_SourcePlugin"
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Get teh correct db column code name based on table header title string
|
// Get the correct db column code name based on table header title string
|
||||||
function getColumnNameFromLangString(headStringKey) {
|
function getColumnNameFromLangString(headStringKey) {
|
||||||
columnNameMap = {
|
columnNameMap = {
|
||||||
"Device_TableHead_Name": "devName",
|
"Device_TableHead_Name": "devName",
|
||||||
@@ -621,6 +624,87 @@ function getColumnNameFromLangString(headStringKey) {
|
|||||||
return columnNameMap[headStringKey] || "";
|
return columnNameMap[headStringKey] || "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Generating the device status chip
|
||||||
|
function getStatusBadgeParts(tmp_devPresentLastScan, tmp_devAlertDown, macAddress, statusText = '') {
|
||||||
|
let css = 'bg-gray text-white statusUnknown';
|
||||||
|
let icon = '<i class="fa-solid fa-question"></i>';
|
||||||
|
let status = 'unknown';
|
||||||
|
let cssText = '';
|
||||||
|
|
||||||
|
if (tmp_devPresentLastScan == 1) {
|
||||||
|
css = 'bg-green text-white statusOnline';
|
||||||
|
cssText = 'text-green';
|
||||||
|
icon = '<i class="fa-solid fa-plug"></i>';
|
||||||
|
status = 'online';
|
||||||
|
} else if (tmp_devAlertDown == 1) {
|
||||||
|
css = 'bg-red text-white statusDown';
|
||||||
|
cssText = 'text-red';
|
||||||
|
icon = '<i class="fa-solid fa-triangle-exclamation"></i>';
|
||||||
|
status = 'down';
|
||||||
|
} else if (tmp_devPresentLastScan != 1) {
|
||||||
|
css = 'bg-gray text-white statusOffline';
|
||||||
|
cssText = 'text-gray50';
|
||||||
|
icon = '<i class="fa-solid fa-xmark"></i>';
|
||||||
|
status = 'offline';
|
||||||
|
}
|
||||||
|
|
||||||
|
const cleanedText = statusText.replace(/-/g, '');
|
||||||
|
const url = `deviceDetails.php?mac=${encodeURIComponent(macAddress)}`;
|
||||||
|
|
||||||
|
return {
|
||||||
|
cssClass: css,
|
||||||
|
cssText: cssText,
|
||||||
|
iconHtml: icon,
|
||||||
|
mac: macAddress,
|
||||||
|
text: cleanedText,
|
||||||
|
status: status,
|
||||||
|
url: url
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Getting the color and css class for device relationships
|
||||||
|
function getRelationshipConf(relType) {
|
||||||
|
let cssClass = '';
|
||||||
|
let color = '';
|
||||||
|
|
||||||
|
// --color-aqua: #00c0ef;
|
||||||
|
// --color-blue: #0060df;
|
||||||
|
// --color-green: #00a65a;
|
||||||
|
// --color-yellow: #f39c12;
|
||||||
|
// --color-red: #dd4b39;
|
||||||
|
|
||||||
|
switch (relType) {
|
||||||
|
|
||||||
|
case "child":
|
||||||
|
color = "#f39c12"; // yellow
|
||||||
|
cssClass = "text-yellow";
|
||||||
|
break;
|
||||||
|
case "nic":
|
||||||
|
color = "#dd4b39"; // red
|
||||||
|
cssClass = "text-red";
|
||||||
|
break;
|
||||||
|
case "virtual":
|
||||||
|
color = "#0060df"; // blue
|
||||||
|
cssClass = "text-blue";
|
||||||
|
break;
|
||||||
|
case "logical":
|
||||||
|
color = "#00a65a"; // green
|
||||||
|
cssClass = "text-green";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
color = "#5B5B66"; // grey
|
||||||
|
cssClass = "text-light-grey";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
cssClass: cssClass,
|
||||||
|
color: color
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// initialize
|
// initialize
|
||||||
@@ -637,14 +721,87 @@ function initSelect2() {
|
|||||||
// prepare HTML DOM before initializing the frotend
|
// prepare HTML DOM before initializing the frotend
|
||||||
initDeviceSelectors(devicesListAll_JSON)
|
initDeviceSelectors(devicesListAll_JSON)
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
//Initialize Select2 Elements and make them sortable
|
//Initialize Select2 Elements and make them sortable
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
// Iterate over each Select2 dropdown
|
// Iterate over each Select2 dropdown
|
||||||
$('.select2').each(function() {
|
$('.select2').each(function() {
|
||||||
var selectEl = $(this).select2();
|
// handle Device chips, if my-transformers="deviceChip"
|
||||||
|
if($(this).attr("my-transformers") == "deviceChip")
|
||||||
|
{
|
||||||
|
var selectEl = $(this).select2({
|
||||||
|
templateSelection: function (data, container) {
|
||||||
|
if (!data.id) return data.text; // default for placeholder etc.
|
||||||
|
|
||||||
|
const device = getDevDataByMac(data.id);
|
||||||
|
|
||||||
|
const badge = getStatusBadgeParts(
|
||||||
|
device.devPresentLastScan,
|
||||||
|
device.devAlertDown,
|
||||||
|
device.devMac
|
||||||
|
)
|
||||||
|
|
||||||
|
$(container).addClass(badge.cssClass);
|
||||||
|
|
||||||
|
// Custom HTML
|
||||||
|
const html = $(`
|
||||||
|
<a href="${badge.url}" target="_blank">
|
||||||
|
<span class="custom-chip hover-node-info"
|
||||||
|
data-name="${device.devName}"
|
||||||
|
data-ip="${device.devLastIP}"
|
||||||
|
data-mac="${device.devMac}"
|
||||||
|
data-vendor="${device.devVendor}"
|
||||||
|
data-lastseen="${device.devLastConnection}"
|
||||||
|
data-relationship="${device.devParentRelType}"
|
||||||
|
data-status="${device.devStatus}"
|
||||||
|
data-present="${device.devPresentLastScan}"
|
||||||
|
data-alert="${device.devAlertDown}"
|
||||||
|
data-icon="${device.devIcon}"
|
||||||
|
>
|
||||||
|
<span class="iconPreview">${atob(device.devIcon)}</span>
|
||||||
|
${data.text}
|
||||||
|
<span>
|
||||||
|
(${badge.iconHtml})
|
||||||
|
</span
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
`);
|
||||||
|
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
escapeMarkup: function (m) {
|
||||||
|
return m; // Allow HTML
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if($(this).attr("my-transformers") == "deviceRelType") // handling dropdown for relationships
|
||||||
|
{
|
||||||
|
var selectEl = $(this).select2({
|
||||||
|
minimumResultsForSearch: Infinity,
|
||||||
|
templateSelection: function (data, container) {
|
||||||
|
if (!data.id) return data.text; // default for placeholder etc.
|
||||||
|
|
||||||
|
const relConf = getRelationshipConf(data.text);
|
||||||
|
|
||||||
|
// Custom HTML
|
||||||
|
const html = $(`
|
||||||
|
<span class="custom-chip ${relConf.cssClass}" >
|
||||||
|
${data.text}
|
||||||
|
</span>
|
||||||
|
`);
|
||||||
|
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
escapeMarkup: function (m) {
|
||||||
|
return m; // Allow HTML
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else // default handling - default template
|
||||||
|
{
|
||||||
|
var selectEl = $(this).select2();
|
||||||
|
}
|
||||||
|
|
||||||
// Apply sortable functionality to the dropdown's dropdown-container
|
// Apply sortable functionality to the dropdown's dropdown-container
|
||||||
selectEl.next().children().children().children().sortable({
|
selectEl.next().children().children().children().sortable({
|
||||||
@@ -675,13 +832,131 @@ function initSelect2() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------
|
||||||
|
// Display device info on hover (attach only once)
|
||||||
|
function initHoverNodeInfo() {
|
||||||
|
if ($('#hover-box').length === 0) {
|
||||||
|
$('<div id="hover-box"></div>').appendTo('body').hide().css({
|
||||||
|
position: 'absolute',
|
||||||
|
zIndex: 9999,
|
||||||
|
border: '1px solid #ccc',
|
||||||
|
borderRadius: '8px',
|
||||||
|
padding: '10px',
|
||||||
|
boxShadow: '0 4px 12px rgba(0,0,0,0.15)',
|
||||||
|
minWidth: '200px',
|
||||||
|
maxWidth: '300px',
|
||||||
|
fontSize: '14px',
|
||||||
|
pointerEvents: 'none',
|
||||||
|
backgroundColor: '#fff'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if handlers already attached to prevent flickering
|
||||||
|
if (initHoverNodeInfo._handlersAttached) return;
|
||||||
|
initHoverNodeInfo._handlersAttached = true;
|
||||||
|
|
||||||
|
let hoverTimeout = null;
|
||||||
|
let lastTarget = null;
|
||||||
|
|
||||||
|
// remove title as it's replaced by the hover-box
|
||||||
|
$(document).on('mouseover', '.hover-node-info', function () {
|
||||||
|
this.removeAttribute('title');
|
||||||
|
|
||||||
|
$(this).attr("title", ""); // remove title as it's replaced by the hover-box
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mouseenter', '.hover-node-info', function (e) {
|
||||||
|
const $el = $(this);
|
||||||
|
lastTarget = this;
|
||||||
|
|
||||||
|
// use timeout to prevent a quick hover and exit toi flash a card when navigating to a target node with your mouse
|
||||||
|
clearTimeout(hoverTimeout);
|
||||||
|
|
||||||
|
hoverTimeout = setTimeout(() => {
|
||||||
|
if (lastTarget !== this) return;
|
||||||
|
|
||||||
|
const icon = $el.data('icon');
|
||||||
|
const name = $el.data('name') || 'Unknown';
|
||||||
|
const ip = $el.data('ip') || 'N/A';
|
||||||
|
const mac = $el.data('mac') || 'N/A';
|
||||||
|
const vendor = $el.data('vendor') || 'Unknown';
|
||||||
|
const lastseen = $el.data('lastseen') || 'Unknown';
|
||||||
|
const relationship = $el.data('relationship') || 'Unknown';
|
||||||
|
const badge = getStatusBadgeParts( $el.data('present'), $el.data('alert'), $el.data('mac'))
|
||||||
|
const status =`<span class="badge ${badge.cssClass}">${badge.iconHtml} ${badge.status}</span>`
|
||||||
|
|
||||||
|
const html = `
|
||||||
|
<div>
|
||||||
|
<b> <div class="iconPreview">${atob(icon)}</div> </b><b class="devName"> ${name}</b><br>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<div class="line">
|
||||||
|
<b>Status:</b> <span>${status}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>IP:</b> <span>${ip}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>MAC:</b> <span>${mac}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Vendor:</b> <span>${vendor}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Last seen:</b> <span>${lastseen}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Relationship:</b> <span class="${getRelationshipConf(relationship).cssClass}">${relationship}</span>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#hover-box').html(html).fadeIn(150);
|
||||||
|
}, 300);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mousemove', '.hover-node-info', function (e) {
|
||||||
|
const hoverBox = $('#hover-box');
|
||||||
|
const boxWidth = hoverBox.outerWidth();
|
||||||
|
const boxHeight = hoverBox.outerHeight();
|
||||||
|
const padding = 15;
|
||||||
|
|
||||||
|
const winWidth = $(window).width();
|
||||||
|
const winHeight = $(window).height();
|
||||||
|
|
||||||
|
let left = e.pageX + padding;
|
||||||
|
let top = e.pageY + padding;
|
||||||
|
|
||||||
|
// Position leftward if close to right edge
|
||||||
|
if (e.pageX + boxWidth + padding > winWidth) {
|
||||||
|
left = e.pageX - boxWidth - padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Position upward if close to bottom edge
|
||||||
|
if (e.pageY + boxHeight + padding > winHeight) {
|
||||||
|
top = e.pageY - boxHeight - padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
hoverBox.css({ top: top + 'px', left: left + 'px' });
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mouseleave', '.hover-node-info', function () {
|
||||||
|
clearTimeout(hoverTimeout);
|
||||||
|
lastTarget = null;
|
||||||
|
$('#hover-box').fadeOut(100);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// init functions after dom loaded
|
// init functions after dom loaded
|
||||||
window.addEventListener("load", function() {
|
window.addEventListener("load", function() {
|
||||||
// try to initialize
|
// try to initialize
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
initSelect2()
|
initSelect2();
|
||||||
|
initHoverNodeInfo();
|
||||||
// initializeiCheck();
|
// initializeiCheck();
|
||||||
}, 1000);
|
}, 500);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
@@ -246,10 +254,10 @@ $db->close();
|
|||||||
</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,14 +268,28 @@ $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">
|
||||||
|
|
||||||
@@ -275,20 +297,24 @@ $db->close();
|
|||||||
<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>
|
||||||
|
|
||||||
@@ -77,11 +73,11 @@
|
|||||||
|
|
||||||
// some race condition, need to implement delay
|
// some race condition, need to implement delay
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
$.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
|
$.get('php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
|
||||||
|
|
||||||
settingsData = res["data"];
|
settingsData = res["data"];
|
||||||
|
|
||||||
excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devScan", "NEWDEV_devPresentLastScan", "NEWDEV_devCustomProps" ]
|
excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devScan", "NEWDEV_devPresentLastScan", "NEWDEV_devCustomProps", "NEWDEV_devChildrenNicsDynamic", "NEWDEV_devChildrenDynamic" ]
|
||||||
|
|
||||||
const relevantColumns = settingsData.filter(set =>
|
const relevantColumns = settingsData.filter(set =>
|
||||||
set.setGroup === "NEWDEV" &&
|
set.setGroup === "NEWDEV" &&
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
<section class="content networkTable">
|
<section class="content networkTable">
|
||||||
<?php
|
<?php
|
||||||
// Create top-level node (network devices) tabs
|
// Create top-level node (network devices) tabs
|
||||||
function createDeviceTabs($node_mac, $node_name, $node_status, $node_type, $node_ports_count, $icon, $activetab) {
|
function createDeviceTabs($node_mac, $node_name, $node_status, $node_type, $node_ports_count, $icon, $node_alert, $activetab) {
|
||||||
|
|
||||||
// prepare string with port number in brackets if available
|
// prepare string with port number in brackets if available
|
||||||
$str_port = "";
|
$str_port = "";
|
||||||
@@ -37,10 +37,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// online/offline status circle (red/green)
|
// online/offline status circle (red/green)
|
||||||
$icon_style = "";
|
$icon_class = "";
|
||||||
if($node_status == 0) // 1 means online, 0 offline
|
if($node_status == 0 && $node_alert == 1) // 1 means online, 0 offline
|
||||||
{
|
{
|
||||||
$icon_style = "style=\"color:var(--color-red);\"";
|
$icon_class = " text-red";
|
||||||
|
} elseif ($node_status == 1) {
|
||||||
|
$icon_class = " text-green";
|
||||||
|
} elseif ($node_status == 0) {
|
||||||
|
$icon_class = " text-gray50";
|
||||||
}
|
}
|
||||||
|
|
||||||
$decoded_icon = base64_decode($icon);
|
$decoded_icon = base64_decode($icon);
|
||||||
@@ -48,7 +52,7 @@
|
|||||||
$str_tab_header = '<li class="networkNodeTabHeaders '.$activetab.' " >
|
$str_tab_header = '<li class="networkNodeTabHeaders '.$activetab.' " >
|
||||||
|
|
||||||
<a href="#'.$idFromMac.'" data-mytabmac="'.$node_mac.'" id="'.$idFromMac.'_id" data-toggle="tab" title="'.$node_name.' ">' // _id is added so it doesn't conflict with AdminLTE tab behavior
|
<a href="#'.$idFromMac.'" data-mytabmac="'.$node_mac.'" id="'.$idFromMac.'_id" data-toggle="tab" title="'.$node_name.' ">' // _id is added so it doesn't conflict with AdminLTE tab behavior
|
||||||
.'<div class="icon" '.$icon_style.'>'.$decoded_icon.' </div> <span class="node-name">'.$node_name.'</span>' .$str_port.
|
.'<div class="icon '.$icon_class.'" >'.$decoded_icon.' </div> <span class="node-name">'.$node_name.'</span>' .$str_port.
|
||||||
'</a>
|
'</a>
|
||||||
</li>';
|
</li>';
|
||||||
|
|
||||||
@@ -126,7 +130,6 @@
|
|||||||
</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>
|
||||||
@@ -164,7 +167,7 @@
|
|||||||
devType as type,
|
devType as type,
|
||||||
devLastIP as last_ip,
|
devLastIP as last_ip,
|
||||||
(select devType from Devices a where devMac = "'.$node_mac.'") as node_type
|
(select devType from Devices a where devMac = "'.$node_mac.'") as node_type
|
||||||
FROM Devices WHERE devParentMAC = "'.$node_mac.'" order by port, name asc';
|
FROM Devices WHERE devParentMAC = "'.$node_mac.'" and devIsArchived = 0 order by port, name asc';
|
||||||
|
|
||||||
global $db;
|
global $db;
|
||||||
$func_result = $db->query($func_sql);
|
$func_result = $db->query($func_sql);
|
||||||
@@ -270,7 +273,7 @@
|
|||||||
|
|
||||||
$networkDeviceTypes = str_replace("]", "",(str_replace("[", "", getSettingValue("NETWORK_DEVICE_TYPES"))));
|
$networkDeviceTypes = str_replace("]", "",(str_replace("[", "", getSettingValue("NETWORK_DEVICE_TYPES"))));
|
||||||
|
|
||||||
$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, node_alert
|
||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT a.devName as node_name,
|
SELECT a.devName as node_name,
|
||||||
@@ -278,9 +281,11 @@
|
|||||||
a.devPresentLastScan as online,
|
a.devPresentLastScan as online,
|
||||||
a.devType as node_type,
|
a.devType as node_type,
|
||||||
a.devParentMAC as parent_mac,
|
a.devParentMAC as parent_mac,
|
||||||
a.devIcon as node_icon
|
a.devIcon as node_icon,
|
||||||
|
a.devAlertDown as node_alert
|
||||||
FROM Devices a
|
FROM Devices a
|
||||||
WHERE a.devType in (".$networkDeviceTypes.")
|
WHERE a.devType in (".$networkDeviceTypes.")
|
||||||
|
AND devIsArchived = 0
|
||||||
) t1
|
) t1
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
(
|
(
|
||||||
@@ -304,7 +309,9 @@
|
|||||||
'node_type' => $row['node_type'],
|
'node_type' => $row['node_type'],
|
||||||
'parent_mac' => $row['parent_mac'],
|
'parent_mac' => $row['parent_mac'],
|
||||||
'node_icon' => $row['node_icon'],
|
'node_icon' => $row['node_icon'],
|
||||||
'node_ports_count' => $row['node_ports_count']);
|
'node_ports_count' => $row['node_ports_count'],
|
||||||
|
'node_alert' => $row['node_alert']
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Control no rows
|
// Control no rows
|
||||||
@@ -323,6 +330,7 @@
|
|||||||
$row['node_type'],
|
$row['node_type'],
|
||||||
$row['node_ports_count'],
|
$row['node_ports_count'],
|
||||||
$row['node_icon'],
|
$row['node_icon'],
|
||||||
|
$row['node_alert'],
|
||||||
$activetab);
|
$activetab);
|
||||||
|
|
||||||
$activetab = ""; // reset active tab indicator, only the first tab is active
|
$activetab = ""; // reset active tab indicator, only the first tab is active
|
||||||
@@ -364,6 +372,7 @@
|
|||||||
WHERE devParentMAC IS NULL
|
WHERE devParentMAC IS NULL
|
||||||
OR devParentMAC IN ("", " ", "undefined", "null")
|
OR devParentMAC IN ("", " ", "undefined", "null")
|
||||||
AND devMac NOT LIKE "%internet%"
|
AND devMac NOT LIKE "%internet%"
|
||||||
|
AND devIsArchived = 0
|
||||||
ORDER BY name ASC;';
|
ORDER BY name ASC;';
|
||||||
|
|
||||||
global $db;
|
global $db;
|
||||||
@@ -462,12 +471,19 @@
|
|||||||
<script src="lib/treeviz/bundle.js"></script>
|
<script src="lib/treeviz/bundle.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script defer>
|
<script defer>
|
||||||
$.get('php/server/devices.php?action=getDevicesList&status=all&forceDefaultOrder', function(data) {
|
const apiUrl = `php/server/dbHelper.php?action=read&rawSql=${btoa(encodeURIComponent(
|
||||||
|
`select *, CASE WHEN devAlertDown !=0 AND devPresentLastScan=0 THEN "Down"
|
||||||
|
WHEN devPresentLastScan=1 THEN "On-line"
|
||||||
|
ELSE "Off-line" END as devStatus
|
||||||
|
from Devices`))}`;
|
||||||
|
|
||||||
|
$.get(apiUrl, function (data) {
|
||||||
|
|
||||||
rawData = JSON.parse (data)
|
rawData = JSON.parse (data)
|
||||||
|
|
||||||
|
console.log(rawData);
|
||||||
|
|
||||||
if(rawData["data"] == "")
|
if(rawData["data"] == "")
|
||||||
{
|
{
|
||||||
showModalOK (getString('Gen_Warning'), getString('Network_NoDevices'))
|
showModalOK (getString('Gen_Warning'), getString('Network_NoDevices'))
|
||||||
@@ -477,38 +493,26 @@
|
|||||||
|
|
||||||
orderTopologyBy = createArray(getSetting("UI_TOPOLOGY_ORDER"))
|
orderTopologyBy = createArray(getSetting("UI_TOPOLOGY_ORDER"))
|
||||||
|
|
||||||
devicesListnew = rawData["data"].map(item => {
|
devicesListnew = rawData.sort((a, b) => {
|
||||||
return {
|
|
||||||
"name": item[0],
|
|
||||||
"type": item[2],
|
|
||||||
"icon": item[3],
|
|
||||||
"mac": item[11],
|
|
||||||
"parentMac": item[14],
|
|
||||||
"rowid": item[13],
|
|
||||||
"status": item[10],
|
|
||||||
"childrenQty": item[15],
|
|
||||||
"port": item[18]
|
|
||||||
};
|
|
||||||
}).sort((a, b) => {
|
|
||||||
// Helper to safely parse port into an integer; invalid ports become Infinity for sorting
|
// Helper to safely parse port into an integer; invalid ports become Infinity for sorting
|
||||||
const parsePort = (port) => {
|
const parsePort = (devParentPort) => {
|
||||||
const parsed = parseInt(port, 10);
|
const parsed = parseInt(devParentPort, 10);
|
||||||
return isNaN(parsed) ? Infinity : parsed;
|
return isNaN(parsed) ? Infinity : parsed;
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (orderTopologyBy[0]) {
|
switch (orderTopologyBy[0]) {
|
||||||
case "Name":
|
case "Name":
|
||||||
// First sort by name alphabetically
|
// First sort by name alphabetically
|
||||||
const nameCompare = a.name.localeCompare(b.name);
|
const nameCompare = a.devName.localeCompare(b.devName);
|
||||||
if (nameCompare !== 0) {
|
if (nameCompare !== 0) {
|
||||||
return nameCompare;
|
return nameCompare;
|
||||||
}
|
}
|
||||||
// If names are the same, sort by port numerically
|
// If names are the same, sort by port numerically
|
||||||
return parsePort(a.port) - parsePort(b.port);
|
return parsePort(a.devParentPort) - parsePort(b.devParentPort);
|
||||||
|
|
||||||
case "Port":
|
case "Port":
|
||||||
// Sort by port numerically
|
// Sort by port numerically
|
||||||
return parsePort(a.port) - parsePort(b.port);
|
return parsePort(a.devParentPort) - parsePort(b.devParentPort);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Default: Sort by rowid (as a fallback)
|
// Default: Sort by rowid (as a fallback)
|
||||||
@@ -543,9 +547,6 @@ var hiddenMacs = []; // hidden children
|
|||||||
var hiddenChildren = [];
|
var hiddenChildren = [];
|
||||||
var deviceListGlobal = null;
|
var deviceListGlobal = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Recursively get children nodes and build a tree
|
// Recursively get children nodes and build a tree
|
||||||
function getChildren(node, list, path, visited = [])
|
function getChildren(node, list, path, visited = [])
|
||||||
@@ -553,23 +554,23 @@ function getChildren(node, list, path, visited = [])
|
|||||||
var children = [];
|
var children = [];
|
||||||
|
|
||||||
// Check for infinite recursion by seeing if the node has been visited before
|
// Check for infinite recursion by seeing if the node has been visited before
|
||||||
if (visited.includes(node.mac.toLowerCase())) {
|
if (visited.includes(node.devMac.toLowerCase())) {
|
||||||
console.error("Infinite recursion detected at node:", node.mac);
|
console.error("Infinite recursion detected at node:", node.devMac);
|
||||||
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')
|
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 };
|
return { error: "Infinite recursion detected", node: node.devMac };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add current node to visited list
|
// Add current node to visited list
|
||||||
visited.push(node.mac.toLowerCase());
|
visited.push(node.devMac.toLowerCase());
|
||||||
|
|
||||||
// Loop through all items to find children of the current node
|
// Loop through all items to find children of the current node
|
||||||
for (var i in list) {
|
for (var i in list) {
|
||||||
if (list[i].parentMac.toLowerCase() == node.mac.toLowerCase() && !hiddenMacs.includes(list[i].parentMac)) {
|
if (list[i].devParentMAC.toLowerCase() == node.devMac.toLowerCase() && !hiddenMacs.includes(list[i].devParentMAC)) {
|
||||||
|
|
||||||
visibleNodesCount++;
|
visibleNodesCount++;
|
||||||
|
|
||||||
// Process children recursively, passing a copy of the visited list
|
// Process children recursively, passing a copy of the visited list
|
||||||
children.push(getChildren(list[i], list, path + ((path == "") ? "" : '|') + list[i].parentMac, visited));
|
children.push(getChildren(list[i], list, path + ((path == "") ? "" : '|') + list[i].devParentMAC, visited));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,17 +582,23 @@ function getChildren(node, list, path, visited = [])
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: node.name,
|
name: node.devName,
|
||||||
path: path,
|
path: path,
|
||||||
mac: node.mac,
|
mac: node.devMac,
|
||||||
port: node.port,
|
port: node.devParentPort,
|
||||||
id: node.mac,
|
id: node.devMac,
|
||||||
parentMac: node.parentMac,
|
parentMac: node.devParentMAC,
|
||||||
icon: node.icon,
|
icon: node.devIcon,
|
||||||
type: node.type,
|
type: node.devType,
|
||||||
status: node.status,
|
vendor: node.devVendor,
|
||||||
hasChildren: children.length > 0 || hiddenMacs.includes(node.mac),
|
lastseen: node.devLastConnection,
|
||||||
hiddenChildren: hiddenMacs.includes(node.mac),
|
ip: node.devLastIP,
|
||||||
|
status: node.devStatus,
|
||||||
|
presentLastScan: node.devPresentLastScan,
|
||||||
|
alertDown: node.devAlertDown,
|
||||||
|
hasChildren: children.length > 0 || hiddenMacs.includes(node.devMac),
|
||||||
|
relType: node.devParentRelType,
|
||||||
|
hiddenChildren: hiddenMacs.includes(node.devMac),
|
||||||
qty: children.length,
|
qty: children.length,
|
||||||
children: children
|
children: children
|
||||||
};
|
};
|
||||||
@@ -602,7 +609,7 @@ function getHierarchy()
|
|||||||
{
|
{
|
||||||
for(i in deviceListGlobal)
|
for(i in deviceListGlobal)
|
||||||
{
|
{
|
||||||
if(deviceListGlobal[i].mac == 'Internet')
|
if(deviceListGlobal[i].devMac == 'Internet')
|
||||||
{
|
{
|
||||||
return (getChildren(deviceListGlobal[i], deviceListGlobal, ''))
|
return (getChildren(deviceListGlobal[i], deviceListGlobal, ''))
|
||||||
break;
|
break;
|
||||||
@@ -610,56 +617,6 @@ function getHierarchy()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
function getFlatData() {
|
|
||||||
var result = [];
|
|
||||||
var leafNodesCount = 0;
|
|
||||||
var parentNodesCount = 0;
|
|
||||||
var visibleNodesCount = 0;
|
|
||||||
|
|
||||||
for (let node of deviceListGlobal) {
|
|
||||||
let path = "";
|
|
||||||
let childrenCount = 0;
|
|
||||||
|
|
||||||
// count children of this node
|
|
||||||
for (let nodeTmp of deviceListGlobal) {
|
|
||||||
if (nodeTmp.parentMac === node.mac) {
|
|
||||||
childrenCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// store parent and leaf node count
|
|
||||||
if (childrenCount === 0) {
|
|
||||||
leafNodesCount++;
|
|
||||||
} else {
|
|
||||||
parentNodesCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hiddenMacs.includes(node.parentMac)) {
|
|
||||||
if (!((node.parentMac == "") && node.mac != "Internet")) { // skip leaf nodes without father that are not the root
|
|
||||||
visibleNodesCount++;
|
|
||||||
|
|
||||||
result.push({
|
|
||||||
name: node.name,
|
|
||||||
path: path,
|
|
||||||
mac: node.mac, // Replacing "mac" with "id"
|
|
||||||
parentMac: node.mac == "Internet" ? "" : node.parentMac, // Replacing "parentMac" with "father"
|
|
||||||
port: node.port,
|
|
||||||
icon: node.icon,
|
|
||||||
type: node.type,
|
|
||||||
status: node.status,
|
|
||||||
hasChildren: childrenCount > 0 || hiddenMacs.includes(node.mac),
|
|
||||||
hiddenChildren: hiddenMacs.includes(node.mac),
|
|
||||||
qty: childrenCount,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
function toggleSubTree(parentMac, treePath)
|
function toggleSubTree(parentMac, treePath)
|
||||||
{
|
{
|
||||||
@@ -696,6 +653,7 @@ function handleNodeClick(el)
|
|||||||
{
|
{
|
||||||
const targetTabMAC = $(el).attr("data-mytreemacmain");
|
const targetTabMAC = $(el).attr("data-mytreemacmain");
|
||||||
|
|
||||||
|
// handle network node
|
||||||
var targetTab = $(`a[data-mytabmac="${targetTabMAC}"]`);
|
var targetTab = $(`a[data-mytabmac="${targetTabMAC}"]`);
|
||||||
|
|
||||||
if (targetTab.length) {
|
if (targetTab.length) {
|
||||||
@@ -706,6 +664,10 @@ function handleNodeClick(el)
|
|||||||
$('html, body').animate({
|
$('html, body').animate({
|
||||||
scrollTop: targetTab.offset().top - 50
|
scrollTop: targetTab.offset().top - 50
|
||||||
}, 500); // Adjust the duration as needed
|
}, 500); // Adjust the duration as needed
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
// handle regular device - open in new tab
|
||||||
|
goToDevice($(el).data("mac"), true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -738,7 +700,7 @@ function initTree(myHierarchy)
|
|||||||
|
|
||||||
emSize = pxToEm((treeAreaHeight/(leafNodesCount)).toFixed(2));
|
emSize = pxToEm((treeAreaHeight/(leafNodesCount)).toFixed(2));
|
||||||
|
|
||||||
let screenWidthEm = pxToEm($('.networkTable').width());
|
let screenWidthEm = pxToEm($('.networkTable').width()-15);
|
||||||
|
|
||||||
// init the drawing area size
|
// init the drawing area size
|
||||||
$("#networkTree").attr('style', `height:${treeAreaHeight}px; width:${emToPx(screenWidthEm)}px`)
|
$("#networkTree").attr('style', `height:${treeAreaHeight}px; width:${emToPx(screenWidthEm)}px`)
|
||||||
@@ -801,17 +763,26 @@ function initTree(myHierarchy)
|
|||||||
highlightedCss = nodeData.data.mac == selectedNodeMac ?
|
highlightedCss = nodeData.data.mac == selectedNodeMac ?
|
||||||
" highlightedNode" : "";
|
" highlightedNode" : "";
|
||||||
|
|
||||||
// css indicating online/offline status
|
const badgeConf = getStatusBadgeParts(nodeData.data.presentLastScan, nodeData.data.alertDown, nodeData.data.mac, statusText = '')
|
||||||
statusCss = ` netStatus-${nodeData.data.status}`;
|
|
||||||
|
|
||||||
return result = `<div
|
return result = `<div
|
||||||
class="node-inner box ${nodeData.data.hasChildren ? "pointer":""} ${statusCss} ${highlightedCss}"
|
class="node-inner hover-node-info box pointer ${highlightedCss}"
|
||||||
data-mytreemacmain="${nodeData.data.mac}"
|
data-mytreemacmain="${nodeData.data.mac}"
|
||||||
style="height:${nodeHeightPx}px;font-size:${nodeHeightPx-5}px;"
|
style="height:${nodeHeightPx}px;font-size:${nodeHeightPx-5}px;"
|
||||||
onclick="handleNodeClick(this)"
|
onclick="handleNodeClick(this)"
|
||||||
|
data-name="${nodeData.data.name}"
|
||||||
|
data-ip="${nodeData.data.ip}"
|
||||||
|
data-mac="${nodeData.data.mac}"
|
||||||
|
data-vendor="${nodeData.data.vendor}"
|
||||||
|
data-lastseen="${nodeData.data.lastseen}"
|
||||||
|
data-relationship="${nodeData.data.relType}"
|
||||||
|
data-status="${nodeData.data.status}"
|
||||||
|
data-present="${nodeData.data.presentLastScan}"
|
||||||
|
data-alert="${nodeData.data.alertDown}"
|
||||||
|
data-icon="${nodeData.data.icon}"
|
||||||
>
|
>
|
||||||
<div class="netNodeText">
|
<div class="netNodeText">
|
||||||
<strong>${devicePort} ${deviceIcon}
|
<strong><span class="${badgeConf.cssText}">${devicePort} ${deviceIcon}</span>
|
||||||
<span class="spanNetworkTree anonymizeDev" style="width:${nodeWidthPx-50}px">${nodeData.data.name}</span>
|
<span class="spanNetworkTree anonymizeDev" style="width:${nodeWidthPx-50}px">${nodeData.data.name}</span>
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
@@ -826,12 +797,18 @@ function initTree(myHierarchy)
|
|||||||
isHorizontal : true,
|
isHorizontal : true,
|
||||||
hasZoom: true,
|
hasZoom: true,
|
||||||
hasPan: true,
|
hasPan: true,
|
||||||
marginLeft: '15',
|
marginLeft: '10',
|
||||||
|
marginRight: '10',
|
||||||
idKey: "mac",
|
idKey: "mac",
|
||||||
hasFlatData: false,
|
hasFlatData: false,
|
||||||
relationnalField: "children",
|
relationnalField: "children",
|
||||||
linkWidth: (nodeData) => 3,
|
linkWidth: (nodeData) => 3,
|
||||||
linkColor: (nodeData) => "#ffcc80"
|
linkColor: (nodeData) => {
|
||||||
|
|
||||||
|
relConf = getRelationshipConf(nodeData.data.relType)
|
||||||
|
|
||||||
|
return relConf.color;
|
||||||
|
}
|
||||||
// onNodeClick: (nodeData) => handleNodeClick(nodeData),
|
// onNodeClick: (nodeData) => handleNodeClick(nodeData),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
|
|
||||||
function initOnlineHistoryGraph() {
|
function initOnlineHistoryGraph() {
|
||||||
$.get('/php/server/query_json.php', { file: 'table_online_history.json', nocache: Date.now() }, function(res) {
|
$.get('php/server/query_json.php', { file: 'table_online_history.json', nocache: Date.now() }, function(res) {
|
||||||
// Extracting data from the JSON response
|
// Extracting data from the JSON response
|
||||||
var timeStamps = [];
|
var timeStamps = [];
|
||||||
var onlineCounts = [];
|
var onlineCounts = [];
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset ($_REQUEST['rawSql'])) {
|
if (isset ($_REQUEST['rawSql'])) {
|
||||||
$rawSql = urldecode(base64_decode($_REQUEST['rawSql']));
|
$rawSql = urldecode(base64_decode($_REQUEST['rawSql'])); // base64 encoded SQL
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset ($_REQUEST['dbtable'])) {
|
if (isset ($_REQUEST['dbtable'])) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
||||||
$action = $_REQUEST['action'];
|
$action = $_REQUEST['action'];
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
case 'getServerDeviceData': getServerDeviceData(); break;
|
case 'getServerDeviceData': getServerDeviceData(); break;
|
||||||
case 'setDeviceData': setDeviceData(); break;
|
case 'setDeviceData': setDeviceData(); break;
|
||||||
case 'deleteDevice': deleteDevice(); break;
|
case 'deleteDevice': deleteDevice(); break;
|
||||||
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break;
|
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break;
|
||||||
@@ -45,8 +45,7 @@
|
|||||||
case 'ImportCSV': ImportCSV(); break;
|
case 'ImportCSV': ImportCSV(); break;
|
||||||
|
|
||||||
case 'getDevicesTotals': getDevicesTotals(); break;
|
case 'getDevicesTotals': getDevicesTotals(); break;
|
||||||
case 'getDevicesList': getDevicesList(); break;
|
case 'getDevicesListCalendar': getDevicesListCalendar(); break; //todo: slowly deprecate this
|
||||||
case 'getDevicesListCalendar': getDevicesListCalendar(); break;
|
|
||||||
|
|
||||||
case 'updateNetworkLeaf': updateNetworkLeaf(); break;
|
case 'updateNetworkLeaf': updateNetworkLeaf(); break;
|
||||||
case 'overwriteIconType': overwriteIconType(); break;
|
case 'overwriteIconType': overwriteIconType(); break;
|
||||||
@@ -92,6 +91,8 @@ function getServerDeviceData() {
|
|||||||
"devLogEvents" => 0,
|
"devLogEvents" => 0,
|
||||||
"devAlertEvents" => 0,
|
"devAlertEvents" => 0,
|
||||||
"devAlertDown" => 0,
|
"devAlertDown" => 0,
|
||||||
|
"devParentRelType" => "default",
|
||||||
|
"devReqNicsOnline" => 0,
|
||||||
"devSkipRepeated" => 0,
|
"devSkipRepeated" => 0,
|
||||||
"devLastNotification" => "",
|
"devLastNotification" => "",
|
||||||
"devPresentLastScan" => 0,
|
"devPresentLastScan" => 0,
|
||||||
@@ -112,7 +113,8 @@ function getServerDeviceData() {
|
|||||||
"devSessions" => 0,
|
"devSessions" => 0,
|
||||||
"devEvents" => 0,
|
"devEvents" => 0,
|
||||||
"devDownAlerts" => 0,
|
"devDownAlerts" => 0,
|
||||||
"devPresenceHours" => 0
|
"devPresenceHours" => 0,
|
||||||
|
"devFQDN" => ""
|
||||||
];
|
];
|
||||||
echo json_encode($deviceData);
|
echo json_encode($deviceData);
|
||||||
return;
|
return;
|
||||||
@@ -138,6 +140,30 @@ function getServerDeviceData() {
|
|||||||
|
|
||||||
$deviceData['devIsRandomMAC'] = isRandomMAC($mac);
|
$deviceData['devIsRandomMAC'] = isRandomMAC($mac);
|
||||||
|
|
||||||
|
// devChildrenDynamic
|
||||||
|
$sql = 'SELECT rowid, * FROM Devices WHERE devParentMAC = "' . $mac . '" order by devPresentLastScan DESC';
|
||||||
|
$result = $db->query($sql);
|
||||||
|
|
||||||
|
$children = [];
|
||||||
|
if ($result) {
|
||||||
|
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||||
|
$children[] = $row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$deviceData['devChildrenDynamic'] = $children;
|
||||||
|
|
||||||
|
// devChildrenNicsDynamic
|
||||||
|
$sql = 'SELECT rowid, * FROM Devices WHERE devParentMAC = "' . $mac . '" and devParentRelType = "nic" order by devPresentLastScan DESC';
|
||||||
|
$result = $db->query($sql);
|
||||||
|
|
||||||
|
$childrenNics = [];
|
||||||
|
if ($result) {
|
||||||
|
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||||
|
$childrenNics[] = $row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$deviceData['devChildrenNicsDynamic'] = $childrenNics;
|
||||||
|
|
||||||
// Count Totals
|
// Count Totals
|
||||||
$condition = ' WHERE eve_MAC="'. $mac .'" AND eve_DateTime >= '. $periodDate;
|
$condition = ' WHERE eve_MAC="'. $mac .'" AND eve_DateTime >= '. $periodDate;
|
||||||
|
|
||||||
@@ -210,6 +236,8 @@ function setDeviceData() {
|
|||||||
$scancycle = quotes($_POST['scancycle']);
|
$scancycle = quotes($_POST['scancycle']);
|
||||||
$alertevents = quotes($_POST['alertevents']);
|
$alertevents = quotes($_POST['alertevents']);
|
||||||
$alertdown = quotes($_POST['alertdown']);
|
$alertdown = quotes($_POST['alertdown']);
|
||||||
|
$relType = quotes($_POST['relType']);
|
||||||
|
$reqNics = quotes($_POST['reqNics']);
|
||||||
$skiprepeated = quotes($_POST['skiprepeated']);
|
$skiprepeated = quotes($_POST['skiprepeated']);
|
||||||
$newdevice = quotes($_POST['newdevice']);
|
$newdevice = quotes($_POST['newdevice']);
|
||||||
$archived = quotes($_POST['archived']);
|
$archived = quotes($_POST['archived']);
|
||||||
@@ -241,6 +269,8 @@ function setDeviceData() {
|
|||||||
devScan = '$scancycle',
|
devScan = '$scancycle',
|
||||||
devAlertEvents = '$alertevents',
|
devAlertEvents = '$alertevents',
|
||||||
devAlertDown = '$alertdown',
|
devAlertDown = '$alertdown',
|
||||||
|
devParentRelType = '$relType',
|
||||||
|
devReqNicsOnline = '$reqNics',
|
||||||
devSkipRepeated = '$skiprepeated',
|
devSkipRepeated = '$skiprepeated',
|
||||||
devIsNew = '$newdevice',
|
devIsNew = '$newdevice',
|
||||||
devIsArchived = '$archived',
|
devIsArchived = '$archived',
|
||||||
@@ -266,6 +296,8 @@ function setDeviceData() {
|
|||||||
devScan,
|
devScan,
|
||||||
devAlertEvents,
|
devAlertEvents,
|
||||||
devAlertDown,
|
devAlertDown,
|
||||||
|
devParentRelType,
|
||||||
|
devReqNicsOnline,
|
||||||
devSkipRepeated,
|
devSkipRepeated,
|
||||||
devIsNew,
|
devIsNew,
|
||||||
devIsArchived,
|
devIsArchived,
|
||||||
@@ -294,6 +326,8 @@ function setDeviceData() {
|
|||||||
'$scancycle',
|
'$scancycle',
|
||||||
'$alertevents',
|
'$alertevents',
|
||||||
'$alertdown',
|
'$alertdown',
|
||||||
|
'$relType',
|
||||||
|
'$reqNics',
|
||||||
'$skiprepeated',
|
'$skiprepeated',
|
||||||
'$newdevice',
|
'$newdevice',
|
||||||
'$archived',
|
'$archived',
|
||||||
@@ -743,143 +777,6 @@ function getDevicesTotals() {
|
|||||||
echo ($resultJSON);
|
echo ($resultJSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Query the List of devices in a determined Status
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getDevicesList() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
$forceDefaultOrder = FALSE;
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['forceDefaultOrder']) )
|
|
||||||
{
|
|
||||||
$forceDefaultOrder = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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(
|
|
||||||
array("devName", 0, 0),
|
|
||||||
array("devOwner", 1, 1),
|
|
||||||
array("devType", 2, 2),
|
|
||||||
array("devIcon", 3, 3),
|
|
||||||
array("devFavorite", 4, 4),
|
|
||||||
array("devGroup", 5, 5),
|
|
||||||
array("devFirstConnection", 6, 6),
|
|
||||||
array("devLastConnection", 7, 7),
|
|
||||||
array("devLastIP", 8, 8),
|
|
||||||
array("devMac", 9, 9),
|
|
||||||
array("devStatus", 10, 10),
|
|
||||||
array("devMac_full", 11, 11),
|
|
||||||
array("devLastIP_orderable", 12, 12),
|
|
||||||
array("rowid", 13, 13),
|
|
||||||
array("devParentMAC", 14, 14),
|
|
||||||
array("connected_devices", 15, 15),
|
|
||||||
array("devLocation", 16, 16),
|
|
||||||
array("devVendor", 17, 17),
|
|
||||||
array("devParentPort", 18, 18),
|
|
||||||
array("devGUID", 19, 19),
|
|
||||||
array("devSyncHubNode", 20, 20),
|
|
||||||
array("devSite", 21, 21),
|
|
||||||
array("devSSID", 22, 22),
|
|
||||||
array("devSourcePlugin", 23, 23)
|
|
||||||
);
|
|
||||||
|
|
||||||
if($forceDefaultOrder == FALSE)
|
|
||||||
{
|
|
||||||
// get device columns order
|
|
||||||
$sql = 'SELECT par_Value FROM Parameters where par_ID = "Front_Devices_Columns_Order"';
|
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
|
||||||
|
|
||||||
if($row != NULL && count($row) == 1)
|
|
||||||
{
|
|
||||||
// ordered columns setting from the maintenance page
|
|
||||||
$orderedColumns = createArray($row[0]);
|
|
||||||
|
|
||||||
// init ordered columns
|
|
||||||
for($i = 0; $i < count($orderedColumns); $i++) {
|
|
||||||
|
|
||||||
$columnOrderMapping[$i][2] = $orderedColumns[$i];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SQL
|
|
||||||
$condition = getDeviceCondition ($_REQUEST['status']);
|
|
||||||
|
|
||||||
$sql = 'SELECT * FROM (
|
|
||||||
SELECT rowid, *, CASE
|
|
||||||
WHEN t1.devAlertDown !=0 AND t1.devPresentLastScan=0 THEN "Down"
|
|
||||||
WHEN t1.devIsNew=1 THEN "New"
|
|
||||||
WHEN t1.devPresentLastScan=1 THEN "On-line"
|
|
||||||
ELSE "Off-line" END AS devStatus
|
|
||||||
FROM Devices t1 '.$condition.') t3
|
|
||||||
LEFT JOIN
|
|
||||||
(
|
|
||||||
SELECT devParentMAC as devParentMAC_t2, devMac as devMac_t2,
|
|
||||||
count() as connected_devices
|
|
||||||
FROM Devices b
|
|
||||||
WHERE b.devParentMAC NOT NULL group by b.devParentMAC
|
|
||||||
) t2
|
|
||||||
ON (t3.devMac = t2.devParentMAC_t2);';
|
|
||||||
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// arrays of rows
|
|
||||||
$tableData = array();
|
|
||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
|
||||||
|
|
||||||
$defaultOrder = array (
|
|
||||||
$row['devName'],
|
|
||||||
$row['devOwner'],
|
|
||||||
handleNull($row['devType']),
|
|
||||||
handleNull($row['devIcon'], "PGkgY2xhc3M9J2ZhIGZhLWxhcHRvcCc+PC9pPg=="), // laptop icon
|
|
||||||
$row['devFavorite'],
|
|
||||||
$row['devGroup'],
|
|
||||||
// ----
|
|
||||||
formatDate ($row['devFirstConnection']),
|
|
||||||
formatDate ($row['devLastConnection']),
|
|
||||||
$row['devLastIP'],
|
|
||||||
( isRandomMAC($row['devMac']) ),
|
|
||||||
$row['devStatus'],
|
|
||||||
$row['devMac'], // MAC (hidden)
|
|
||||||
formatIPlong ($row['devLastIP']), // IP orderable
|
|
||||||
$row['rowid'], // Rowid (hidden)
|
|
||||||
handleNull($row['devParentMAC']),
|
|
||||||
handleNull($row['connected_devices']),
|
|
||||||
handleNull($row['devLocation']),
|
|
||||||
handleNull($row['devVendor']),
|
|
||||||
handleNull($row['devParentPort']),
|
|
||||||
handleNull($row['devGUID']),
|
|
||||||
handleNull($row['devSyncHubNode']),
|
|
||||||
handleNull($row['devSite']),
|
|
||||||
handleNull($row['devSSID']),
|
|
||||||
handleNull($row['devSourcePlugin'])
|
|
||||||
);
|
|
||||||
|
|
||||||
$newOrder = array();
|
|
||||||
|
|
||||||
// reorder columns based on user settings
|
|
||||||
for($index = 0; $index < count($columnOrderMapping); $index++)
|
|
||||||
{
|
|
||||||
array_push($newOrder, $defaultOrder[$columnOrderMapping[$index][2]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$tableData['data'][] = $newOrder;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Control no rows
|
|
||||||
if (empty($tableData['data'])) {
|
|
||||||
$tableData['data'] = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return json
|
|
||||||
echo (json_encode ($tableData));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Determine if Random MAC
|
// Determine if Random MAC
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -586,7 +586,10 @@ function getDevicesColumns(){
|
|||||||
"devSite",
|
"devSite",
|
||||||
"devSSID",
|
"devSSID",
|
||||||
"devSourcePlugin",
|
"devSourcePlugin",
|
||||||
"devCustomProps"
|
"devCustomProps",
|
||||||
|
"devFQDN",
|
||||||
|
"devParentRelType",
|
||||||
|
"devReqNicsOnline"
|
||||||
];
|
];
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ $config_file_lines = array_values(preg_grep('/^SETPWD_password.*=/', $config_fil
|
|||||||
$password_line = explode("'", $config_file_lines[0]);
|
$password_line = explode("'", $config_file_lines[0]);
|
||||||
$nax_Password = $password_line[1];
|
$nax_Password = $password_line[1];
|
||||||
|
|
||||||
if (isset($_COOKIE[$CookieSaveLoginName]) && $nax_Password == $_COOKIE[$CookieSaveLoginName]) {
|
if (isset($_COOKIE[$CookieSaveLoginName]) && $nax_Password === $_COOKIE[$CookieSaveLoginName]) {
|
||||||
$isAuthenticated = true;
|
$isAuthenticated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
// Updates the backend application state/status in the header
|
// Updates the backend application state/status in the header
|
||||||
function updateState(){
|
function updateState(){
|
||||||
$.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
$.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
|
||||||
|
|
||||||
document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', '');
|
document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', '');
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@
|
|||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
<!-- Layout Boxed Yellow -->
|
<!-- Layout Boxed Yellow -->
|
||||||
|
|
||||||
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> sidebar-mini" onLoad="update_servertime();" >
|
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> theme-<?php echo $UI_THEME;?> sidebar-mini" onLoad="update_servertime();" >
|
||||||
<!-- Site wrapper -->
|
<!-- Site wrapper -->
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
|
|
||||||
@@ -297,6 +297,9 @@
|
|||||||
<li>
|
<li>
|
||||||
<a href="devices.php#archived" onclick="forceLoadUrl('devices.php#archived')" > <?= lang("Device_Shortcut_Archived");?> </a>
|
<a href="devices.php#archived" onclick="forceLoadUrl('devices.php#archived')" > <?= lang("Device_Shortcut_Archived");?> </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="devices.php#all" onclick="forceLoadUrl('devices.php#all_nodes')" > <?= lang("Device_Shortcut_AllNodes");?> </a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@@ -357,6 +360,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>
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
|
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
|
||||||
"DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Descobreix els plugins",
|
"DISCOVER_PLUGINS_name": "Descobreix els plugins",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalls des del dispositiu",
|
"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_Copy_Device_Tooltip": "Copiar detalls del dispositius des de la llista desplegable. Tot el d'aquesta pàgina es sobre-escriurà",
|
||||||
"DevDetail_CustomProperties_Title": "Propietats personalitzades",
|
"DevDetail_CustomProperties_Title": "Propietats personalitzades",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipus",
|
"DevDetail_MainInfo_Type": "Tipus",
|
||||||
"DevDetail_MainInfo_Vendor": "Venedor",
|
"DevDetail_MainInfo_Vendor": "Venedor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Seleccioneu el dispositiu de xarxa al qual aquest dispositiu està connectat, per poder omplir l'arbre de xarxa.",
|
"DevDetail_Network_Node_hover": "Seleccioneu el dispositiu de xarxa al qual aquest dispositiu està connectat, per poder omplir l'arbre de xarxa.",
|
||||||
"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_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": "Escaneig manual Nmap",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Atenció. Si feu clic a això s'aplicarà el valor de l'esquerra a tots els dispositius seleccionats a dalt.",
|
"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_Searchbox": "Cerca",
|
||||||
"Device_Shortcut_AllDevices": "Els meus dispositius",
|
"Device_Shortcut_AllDevices": "Els meus dispositius",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arxivat",
|
"Device_Shortcut_Archived": "Arxivat",
|
||||||
"Device_Shortcut_Connected": "Connectat",
|
"Device_Shortcut_Connected": "Connectat",
|
||||||
"Device_Shortcut_Devices": "Dispositius",
|
"Device_Shortcut_Devices": "Dispositius",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Cancel·lar alerta",
|
"Device_TableHead_AlertDown": "Cancel·lar alerta",
|
||||||
"Device_TableHead_Connected_Devices": "Connexions",
|
"Device_TableHead_Connected_Devices": "Connexions",
|
||||||
"Device_TableHead_CustomProps": "Props / Accions",
|
"Device_TableHead_CustomProps": "Props / Accions",
|
||||||
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Favorit",
|
"Device_TableHead_Favorite": "Favorit",
|
||||||
"Device_TableHead_FirstSession": "Primera Sessió",
|
"Device_TableHead_FirstSession": "Primera Sessió",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nom",
|
"Device_TableHead_Name": "Nom",
|
||||||
"Device_TableHead_NetworkSite": "Network Site",
|
"Device_TableHead_NetworkSite": "Network Site",
|
||||||
"Device_TableHead_Owner": "Propietari",
|
"Device_TableHead_Owner": "Propietari",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Node pare de xarxa",
|
"Device_TableHead_Parent_MAC": "Node pare de xarxa",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Presència",
|
"Device_TableHead_PresentLastScan": "Presència",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "ID de fila",
|
"Device_TableHead_RowID": "ID de fila",
|
||||||
"Device_TableHead_Rowid": "ID de fila",
|
"Device_TableHead_Rowid": "ID de fila",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -358,6 +364,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": "Init Check",
|
||||||
|
"Maintenance_InitCheck_Checking": "Comprovant…",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "Assegureu-vos de seguir la guia <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"> de configuració ràpida</a>.",
|
||||||
|
"Maintenance_InitCheck_Success": "Aplicació inicialitzada amb èxit!",
|
||||||
|
"Maintenance_ReCheck": "Tornar a comprovar",
|
||||||
"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",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favorits",
|
"Presence_Shortcut_Favorites": "Favorits",
|
||||||
"Presence_Shortcut_NewDevices": "Nous dispositius",
|
"Presence_Shortcut_NewDevices": "Nous dispositius",
|
||||||
"Presence_Title": "Detecció de dispositius",
|
"Presence_Title": "Detecció de dispositius",
|
||||||
|
"REFRESH_FQDN_description": "Re-escaneja tots dispositius i refresca el seu (FQDN). Si està desactivat, nomes s'escanegen els noms coneguts per fer-ho més ràpid. En aquest cas, FQDN s'actualitza només durant descoberta inicial de dispositius.",
|
||||||
|
"REFRESH_FQDN_name": "Refresc FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "URL NetAlertX",
|
"REPORT_DASHBOARD_URL_name": "URL NetAlertX",
|
||||||
"REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics",
|
"REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "Disparador(Trigger)",
|
"WF_Trigger": "Disparador(Trigger)",
|
||||||
"WF_Trigger_event_type": "Tipus d'esdeveniment",
|
"WF_Trigger_event_type": "Tipus d'esdeveniment",
|
||||||
"WF_Trigger_type": "Tipus de disparador",
|
"WF_Trigger_type": "Tipus de disparador",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Afegir nova icona",
|
"add_icon_event_tooltip": "Afegir nova icona",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Afegir nou valor",
|
"add_option_event_tooltip": "Afegir nou valor",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu",
|
"copy_icons_event_tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu",
|
||||||
"devices_old": "Refrescant...",
|
"devices_old": "Refrescant...",
|
||||||
"general_event_description": "L'esdeveniment que has desencadenat pot trigar un temps fins que acabin els processos de fons. L'execució acabarà una cop buida la cua d'execució (Comprova el registre d'errors <a href='/maintenance.php#tab_Logging'></a> si hi ha problemes). <br/> <br/> Cua d'execució:",
|
"general_event_description": "L'esdeveniment que has desencadenat pot trigar un temps fins que acabin els processos de fons. L'execució acabarà una cop buida la cua d'execució (Comprova el registre d'errors <a href='/maintenance.php#tab_Logging'></a> si hi ha problemes). <br/> <br/> Cua d'execució:",
|
||||||
"general_event_title": "Execució d'un esdeveniment ad-hoc",
|
"general_event_title": "Execució d'un esdeveniment ad-hoc",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
|
||||||
"go_to_node_event_tooltip": "Navegació a la pàgina de la Xarxa del node donat",
|
"go_to_node_event_tooltip": "Navegació a la pàgina de la Xarxa del node donat",
|
||||||
"new_version_available": "Ja està disponible una nova versió.",
|
"new_version_available": "Ja està disponible una nova versió.",
|
||||||
"report_guid": "Notificació guid:",
|
"report_guid": "Notificació guid:",
|
||||||
"report_guid_missing": "No s'ha trobat la notificació enllaçada. Hi ha un petit retard entre les notificacions enviades recentment i que estiguin disponibles. Refresqui la pàgina i la memòria cau d'aquí uns segons. També és possible que la notificació seleccionada s'hagi esborrat durant el manteniment tal com s'especifica a la configuració <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>L'última notificació es mostra en el seu lloc. La notificació perduda té el següent GUID:",
|
"report_guid_missing": "No s'ha trobat la notificació enllaçada. Hi ha un petit retard entre les notificacions enviades recentment i que estiguin disponibles. Refresqui la pàgina i la memòria cau d'aquí uns segons. També és possible que la notificació seleccionada s'hagi esborrat durant el manteniment tal com s'especifica a la configuració <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>L'última notificació es mostra en el seu lloc. La notificació perduda té el següent GUID:",
|
||||||
"report_select_format": "Seleccioneu Format:",
|
"report_select_format": "Seleccioneu Format:",
|
||||||
"report_time": "Data de recepció:",
|
"report_time": "Data de recepció:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Habiliteu la configuració i deseu els canvis al principi abans d'executar-lo.",
|
"run_event_tooltip": "Habiliteu la configuració i deseu els canvis al principi abans d'executar-lo.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Nucli",
|
"settings_core_label": "Nucli",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
|
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
|
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
|
||||||
}
|
}
|
||||||
@@ -5,11 +5,11 @@
|
|||||||
"API_TOKEN_name": "API token",
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "",
|
"About_Design": "Designováno pro:",
|
||||||
"About_Exit": "",
|
"About_Exit": "Odhlásit",
|
||||||
"About_Title": "",
|
"About_Title": "Scanner síťové bezpečnosti a framework pro upozornění",
|
||||||
"AppEvents_AppEventProcessed": "Zpracováno",
|
"AppEvents_AppEventProcessed": "Zpracováno",
|
||||||
"AppEvents_DateTimeCreated": "Zalogováno",
|
"AppEvents_DateTimeCreated": "Objeveno",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "",
|
"AppEvents_GUID": "",
|
||||||
"AppEvents_Helper1": "",
|
"AppEvents_Helper1": "",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "",
|
"DAYS_TO_KEEP_EVENTS_name": "",
|
||||||
"DISCOVER_PLUGINS_description": "",
|
"DISCOVER_PLUGINS_description": "",
|
||||||
"DISCOVER_PLUGINS_name": "",
|
"DISCOVER_PLUGINS_name": "",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "",
|
"DevDetail_Copy_Device_Title": "",
|
||||||
"DevDetail_Copy_Device_Tooltip": "",
|
"DevDetail_Copy_Device_Tooltip": "",
|
||||||
"DevDetail_CustomProperties_Title": "",
|
"DevDetail_CustomProperties_Title": "",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "",
|
"DevDetail_MainInfo_Type": "",
|
||||||
"DevDetail_MainInfo_Vendor": "",
|
"DevDetail_MainInfo_Vendor": "",
|
||||||
"DevDetail_MainInfo_mac": "",
|
"DevDetail_MainInfo_mac": "",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "",
|
"DevDetail_Network_Node_hover": "",
|
||||||
"DevDetail_Network_Port_hover": "",
|
"DevDetail_Network_Port_hover": "",
|
||||||
"DevDetail_Nmap_Scans": "",
|
"DevDetail_Nmap_Scans": "",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "",
|
"Device_MultiEdit_Tooltip": "",
|
||||||
"Device_Searchbox": "",
|
"Device_Searchbox": "",
|
||||||
"Device_Shortcut_AllDevices": "",
|
"Device_Shortcut_AllDevices": "",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "",
|
"Device_Shortcut_Archived": "",
|
||||||
"Device_Shortcut_Connected": "",
|
"Device_Shortcut_Connected": "",
|
||||||
"Device_Shortcut_Devices": "",
|
"Device_Shortcut_Devices": "",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "",
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "",
|
"Device_TableHead_Connected_Devices": "",
|
||||||
"Device_TableHead_CustomProps": "",
|
"Device_TableHead_CustomProps": "",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"Device_TableHead_Favorite": "",
|
"Device_TableHead_Favorite": "",
|
||||||
"Device_TableHead_FirstSession": "",
|
"Device_TableHead_FirstSession": "",
|
||||||
"Device_TableHead_GUID": "",
|
"Device_TableHead_GUID": "",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "",
|
"Device_TableHead_Name": "",
|
||||||
"Device_TableHead_NetworkSite": "",
|
"Device_TableHead_NetworkSite": "",
|
||||||
"Device_TableHead_Owner": "",
|
"Device_TableHead_Owner": "",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "",
|
"Device_TableHead_Parent_MAC": "",
|
||||||
"Device_TableHead_Port": "",
|
"Device_TableHead_Port": "",
|
||||||
"Device_TableHead_PresentLastScan": "",
|
"Device_TableHead_PresentLastScan": "",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "",
|
"Device_TableHead_RowID": "",
|
||||||
"Device_TableHead_Rowid": "",
|
"Device_TableHead_Rowid": "",
|
||||||
"Device_TableHead_SSID": "",
|
"Device_TableHead_SSID": "",
|
||||||
@@ -288,45 +294,45 @@
|
|||||||
"Gen_Action": "",
|
"Gen_Action": "",
|
||||||
"Gen_Add": "",
|
"Gen_Add": "",
|
||||||
"Gen_AddDevice": "",
|
"Gen_AddDevice": "",
|
||||||
"Gen_Add_All": "",
|
"Gen_Add_All": "Přidat vše",
|
||||||
"Gen_All_Devices": "",
|
"Gen_All_Devices": "Všechna zařízení",
|
||||||
"Gen_AreYouSure": "",
|
"Gen_AreYouSure": "Jste si jistý?",
|
||||||
"Gen_Backup": "",
|
"Gen_Backup": "Spustit zálohování",
|
||||||
"Gen_Cancel": "",
|
"Gen_Cancel": "Zrušit",
|
||||||
"Gen_Change": "",
|
"Gen_Change": "Změnit",
|
||||||
"Gen_Copy": "",
|
"Gen_Copy": "Spustit",
|
||||||
"Gen_DataUpdatedUITakesTime": "",
|
"Gen_DataUpdatedUITakesTime": "OK - může zabrat chvíli aktualizovat rozhraní, pokud běží scan.",
|
||||||
"Gen_Delete": "",
|
"Gen_Delete": "Smazat",
|
||||||
"Gen_DeleteAll": "",
|
"Gen_DeleteAll": "Smazat vše",
|
||||||
"Gen_Description": "",
|
"Gen_Description": "Popis",
|
||||||
"Gen_Error": "",
|
"Gen_Error": "Chyba",
|
||||||
"Gen_Filter": "",
|
"Gen_Filter": "Filtr",
|
||||||
"Gen_Generate": "",
|
"Gen_Generate": "Vygenerovat",
|
||||||
"Gen_LockedDB": "",
|
"Gen_LockedDB": "CHYBA - Databáze je možná zamčená - Zkontrolujte F12 -> Nástroje pro vývojáře -> Konzole. nebo to zkuste později.",
|
||||||
"Gen_Offline": "",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "",
|
"Gen_Online": "Online",
|
||||||
"Gen_Purge": "",
|
"Gen_Purge": "Vyčistit",
|
||||||
"Gen_ReadDocs": "",
|
"Gen_ReadDocs": "Přečíst více v dokumentaci.",
|
||||||
"Gen_Remove_All": "",
|
"Gen_Remove_All": "Odstranit vše",
|
||||||
"Gen_Remove_Last": "",
|
"Gen_Remove_Last": "Odstranit poslední",
|
||||||
"Gen_Reset": "",
|
"Gen_Reset": "Vyresetovat",
|
||||||
"Gen_Restore": "",
|
"Gen_Restore": "Spustit obnovu",
|
||||||
"Gen_Run": "",
|
"Gen_Run": "Spustit",
|
||||||
"Gen_Save": "",
|
"Gen_Save": "Uložit",
|
||||||
"Gen_Saved": "",
|
"Gen_Saved": "Uloženo",
|
||||||
"Gen_Search": "",
|
"Gen_Search": "Hledat",
|
||||||
"Gen_Select": "",
|
"Gen_Select": "Vybrat",
|
||||||
"Gen_SelectIcon": "",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_SelectToPreview": "Vybrat na náhled",
|
||||||
"Gen_Selected_Devices": "",
|
"Gen_Selected_Devices": "Vybraná zařízení:",
|
||||||
"Gen_Switch": "",
|
"Gen_Switch": "Přepnout",
|
||||||
"Gen_Upd": "",
|
"Gen_Upd": "Úspěšně aktualizováno",
|
||||||
"Gen_Upd_Fail": "",
|
"Gen_Upd_Fail": "Aktualizace se nezdařila",
|
||||||
"Gen_Update": "",
|
"Gen_Update": "Aktualizovat",
|
||||||
"Gen_Update_Value": "",
|
"Gen_Update_Value": "Aktualizovat hodnotu",
|
||||||
"Gen_ValidIcon": "",
|
"Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
|
||||||
"Gen_Warning": "",
|
"Gen_Warning": "Upozornění",
|
||||||
"Gen_Work_In_Progress": "",
|
"Gen_Work_In_Progress": "",
|
||||||
"Gen_create_new_device": "",
|
"Gen_create_new_device": "",
|
||||||
"Gen_create_new_device_info": "",
|
"Gen_create_new_device_info": "",
|
||||||
@@ -358,6 +364,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": "",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "",
|
"Presence_Shortcut_Favorites": "",
|
||||||
"Presence_Shortcut_NewDevices": "",
|
"Presence_Shortcut_NewDevices": "",
|
||||||
"Presence_Title": "",
|
"Presence_Title": "",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_DASHBOARD_URL_description": "",
|
"REPORT_DASHBOARD_URL_description": "",
|
||||||
"REPORT_DASHBOARD_URL_name": "",
|
"REPORT_DASHBOARD_URL_name": "",
|
||||||
"REPORT_ERROR": "",
|
"REPORT_ERROR": "",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
"add_icon_event_tooltip": "Přidat novou ikonu",
|
||||||
"add_icon_event_tooltip": "",
|
"add_option_event_tooltip": "Přidat novou hodnotu",
|
||||||
"add_option_event_icon": "",
|
"copy_icons_event_tooltip": "Přepiš ikony všech zařízení za stejný typ zařízení",
|
||||||
"add_option_event_tooltip": "",
|
"devices_old": "Obnovuji…",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
|
||||||
"devices_old": "",
|
|
||||||
"general_event_description": "",
|
"general_event_description": "",
|
||||||
"general_event_title": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "",
|
"report_select_format": "",
|
||||||
"report_time": "",
|
"report_time": "",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "",
|
"run_event_tooltip": "",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "",
|
"settings_core_label": "",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "",
|
"settings_system_label": "",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": ""
|
"test_event_tooltip": ""
|
||||||
}
|
}
|
||||||
53
front/php/templates/language/de_de.json
Normal file → Executable file
@@ -17,7 +17,7 @@
|
|||||||
"About_Exit": "Abmelden",
|
"About_Exit": "Abmelden",
|
||||||
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
|
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
|
||||||
"AppEvents_AppEventProcessed": "Verarbeitet",
|
"AppEvents_AppEventProcessed": "Verarbeitet",
|
||||||
"AppEvents_DateTimeCreated": "Protokolliert",
|
"AppEvents_DateTimeCreated": "Entdeckt am",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "Anwendungsereignis-GUID",
|
"AppEvents_GUID": "Anwendungsereignis-GUID",
|
||||||
"AppEvents_Helper1": "Helfer 1",
|
"AppEvents_Helper1": "Helfer 1",
|
||||||
@@ -78,6 +78,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Ereignisse löschen, die älter sind als",
|
"DAYS_TO_KEEP_EVENTS_name": "Ereignisse löschen, die älter sind als",
|
||||||
"DISCOVER_PLUGINS_description": "Deaktiviere diese Option, um Initialisierung und Speichern der Einstellungen zu beschleunigen. Wenn es deaktiviert ist, werden keine neuen Plugins gefunden und es können keine manuell hinzugefügt werden.",
|
"DISCOVER_PLUGINS_description": "Deaktiviere diese Option, um Initialisierung und Speichern der Einstellungen zu beschleunigen. Wenn es deaktiviert ist, werden keine neuen Plugins gefunden und es können keine manuell hinzugefügt werden.",
|
||||||
"DISCOVER_PLUGINS_name": "Entdecke Erweiterungen",
|
"DISCOVER_PLUGINS_name": "Entdecke Erweiterungen",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Details von Gerät kopieren",
|
"DevDetail_Copy_Device_Title": "Details von Gerät kopieren",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Details vom Gerät aus der Dropdown-Liste kopieren. Alles auf dieser Seite wird überschrieben",
|
"DevDetail_Copy_Device_Tooltip": "Details vom Gerät aus der Dropdown-Liste kopieren. Alles auf dieser Seite wird überschrieben",
|
||||||
"DevDetail_CustomProperties_Title": "Benutzerdefinierte Eigenschaften",
|
"DevDetail_CustomProperties_Title": "Benutzerdefinierte Eigenschaften",
|
||||||
@@ -98,7 +99,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.",
|
"DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.",
|
||||||
"DevDetail_Icon": "Icon",
|
"DevDetail_Icon": "Icon",
|
||||||
"DevDetail_Icon_Descr": "Geben Sie einen Font Awesome Icon-Namen ohne das Präfix „fa-“ ein oder die vollständige Klasse, z. B.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Geben Sie einen Font Awesome Icon-Namen ohne das Präfix „fa-“ ein oder die vollständige Klasse, z. B.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Laden ...",
|
"DevDetail_Loading": "Laden …",
|
||||||
"DevDetail_MainInfo_Comments": "Notiz",
|
"DevDetail_MainInfo_Comments": "Notiz",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorit",
|
"DevDetail_MainInfo_Favorite": "Favorit",
|
||||||
"DevDetail_MainInfo_Group": "Gruppe",
|
"DevDetail_MainInfo_Group": "Gruppe",
|
||||||
@@ -114,6 +115,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Typ",
|
"DevDetail_MainInfo_Type": "Typ",
|
||||||
"DevDetail_MainInfo_Vendor": "Hersteller",
|
"DevDetail_MainInfo_Vendor": "Hersteller",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"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": "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_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",
|
||||||
@@ -212,6 +214,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Achtung! Beim Drücken werden alle Werte auf die oben ausgewählten Geräte übertragen.",
|
"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_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Archiviert",
|
"Device_Shortcut_Archived": "Archiviert",
|
||||||
"Device_Shortcut_Connected": "Verbunden",
|
"Device_Shortcut_Connected": "Verbunden",
|
||||||
"Device_Shortcut_Devices": "Geräte",
|
"Device_Shortcut_Devices": "Geräte",
|
||||||
@@ -223,6 +226,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Alarm aus",
|
"Device_TableHead_AlertDown": "Alarm aus",
|
||||||
"Device_TableHead_Connected_Devices": "Verbindungen",
|
"Device_TableHead_Connected_Devices": "Verbindungen",
|
||||||
"Device_TableHead_CustomProps": "Eigenschaften / Aktionen",
|
"Device_TableHead_CustomProps": "Eigenschaften / Aktionen",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"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",
|
||||||
@@ -237,9 +241,11 @@
|
|||||||
"Device_TableHead_Name": "Name",
|
"Device_TableHead_Name": "Name",
|
||||||
"Device_TableHead_NetworkSite": "Netzwerkseite",
|
"Device_TableHead_NetworkSite": "Netzwerkseite",
|
||||||
"Device_TableHead_Owner": "Eigentümer",
|
"Device_TableHead_Owner": "Eigentümer",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Übergeordneter Netzwerkknoten",
|
"Device_TableHead_Parent_MAC": "Übergeordneter Netzwerkknoten",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Anwesenheit",
|
"Device_TableHead_PresentLastScan": "Anwesenheit",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"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",
|
||||||
@@ -262,7 +268,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
|
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Laden...",
|
"Events_Loading": "Laden …",
|
||||||
"Events_Periodselect_All": "Alle Ereignisse",
|
"Events_Periodselect_All": "Alle Ereignisse",
|
||||||
"Events_Periodselect_LastMonth": "Letzter Monat",
|
"Events_Periodselect_LastMonth": "Letzter Monat",
|
||||||
"Events_Periodselect_LastWeek": "Letzte Woche",
|
"Events_Periodselect_LastWeek": "Letzte Woche",
|
||||||
@@ -352,7 +358,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Geladene Plugins",
|
"LOADED_PLUGINS_name": "Geladene Plugins",
|
||||||
"LOG_LEVEL_description": "Diese Einstellung aktiviert die erweiterte Protokollierung. Nützlich fürs Debuggen von in die Datenbank geschriebenen Events.",
|
"LOG_LEVEL_description": "Diese Einstellung aktiviert die erweiterte Protokollierung. Nützlich fürs Debuggen von in die Datenbank geschriebenen Events.",
|
||||||
"LOG_LEVEL_name": "Erweiterte Protokollierung",
|
"LOG_LEVEL_name": "Erweiterte Protokollierung",
|
||||||
"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_Info": "",
|
||||||
@@ -384,24 +390,29 @@
|
|||||||
"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": "Prüfen …",
|
||||||
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
|
"Maintenance_InitCheck_Success": "Anwendung erfolgreich initialisiert!",
|
||||||
|
"Maintenance_ReCheck": "Prüfung wiederholen",
|
||||||
"Maintenance_Running_Version": "Installierte Version",
|
"Maintenance_Running_Version": "Installierte Version",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Wartungswerkzeuge",
|
"Maintenance_Title": "Wartungswerkzeuge",
|
||||||
"Maintenance_Tool_DownloadConfig": "Einstellungen exportieren",
|
"Maintenance_Tool_DownloadConfig": "Einstellungen exportieren",
|
||||||
"Maintenance_Tool_DownloadConfig_text": "",
|
"Maintenance_Tool_DownloadConfig_text": "Download eines Voll-Backup deiner Einstellungen. Konfiguration gespeichert in <code>app.conf</code> Datei.",
|
||||||
"Maintenance_Tool_DownloadWorkflows": "",
|
"Maintenance_Tool_DownloadWorkflows": "Workflows Export",
|
||||||
"Maintenance_Tool_DownloadWorkflows_text": "",
|
"Maintenance_Tool_DownloadWorkflows_text": "Download eines Voll-Backups deiner Worksflows. Gespeichert in <code>workflows.json</code> Datei.",
|
||||||
"Maintenance_Tool_ExportCSV": "CSV Export",
|
"Maintenance_Tool_ExportCSV": "Export Geräte (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "CSV Export",
|
"Maintenance_Tool_ExportCSV_noti": "Geräte Export (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei erstellen wollen?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei erstellen wollen?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Generiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Dies kann auch durch das Besuchen der URL <code>your NetAlertX url/php/server/devices.php?action=ExportCSV</code> oder durch Aktivieren des <a href=\"settings.php#CSVBCKP_header\">CSV-Backups</a> ausgelöst werden.",
|
"Maintenance_Tool_ExportCSV_text": "Generiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Dies kann auch durch das Besuchen der URL <code>your NetAlertX url/php/server/devices.php?action=ExportCSV</code> oder durch Aktivieren des <a href=\"settings.php#CSVBCKP_header\">CSV-Backups</a> ausgelöst werden.",
|
||||||
"Maintenance_Tool_ImportCSV": "CSV Import",
|
"Maintenance_Tool_ImportCSV": "Geräte Import (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "CSV Import",
|
"Maintenance_Tool_ImportCSV_noti": "Geräte Import (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei importieren wollen? Dies wird <b>alle Geräte in der Datenbank überschreiben</b>.",
|
"Maintenance_Tool_ImportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei importieren wollen? Dies wird alle Geräte in der Datenbank <b>überschreiben</b>.",
|
||||||
"Maintenance_Tool_ImportCSV_text": "Machen Sie ein Backup, bevor Sie diese Funktion nutzen. Importiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Um dies zu tun platziere die <b>devices.csv</b> benannte CSV-Datei in deinen <b>/config</b> Ordner.",
|
"Maintenance_Tool_ImportCSV_text": "Mache ein Backup, bevor Du diese Funktion nutzt. Importiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Um dies zu tun platziere die <b>devices.csv</b> benannte CSV-Datei in deinen <b>/config</b> Ordner.",
|
||||||
"Maintenance_Tool_ImportConfig_noti": "",
|
"Maintenance_Tool_ImportConfig_noti": "Einstellungen importieren (app.conf)",
|
||||||
"Maintenance_Tool_ImportPastedCSV": "CSV-Import (Einfügen)",
|
"Maintenance_Tool_ImportPastedCSV": "Geräte importieren (csv) (einfügen)",
|
||||||
"Maintenance_Tool_ImportPastedCSV_noti_text": "",
|
"Maintenance_Tool_ImportPastedCSV_noti_text": "Bist Du dir sicher, dass Du die eingefügte CSV importieren willst? Es werden alle Geräte in deiner Datenbank <b>überschrieben</b>.",
|
||||||
"Maintenance_Tool_ImportPastedCSV_text": "",
|
"Maintenance_Tool_ImportPastedCSV_text": "",
|
||||||
"Maintenance_Tool_ImportPastedConfig": "",
|
"Maintenance_Tool_ImportPastedConfig": "",
|
||||||
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
|
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
|
||||||
@@ -591,7 +602,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "",
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "",
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
"Presence_Key_OnlinePast_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",
|
||||||
"Presence_Shortcut_Connected": "Verbunden",
|
"Presence_Shortcut_Connected": "Verbunden",
|
||||||
@@ -600,6 +611,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favoriten",
|
"Presence_Shortcut_Favorites": "Favoriten",
|
||||||
"Presence_Shortcut_NewDevices": "Neue Geräte",
|
"Presence_Shortcut_NewDevices": "Neue Geräte",
|
||||||
"Presence_Title": "Anwesenheit pro Gerät",
|
"Presence_Title": "Anwesenheit pro Gerät",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_APPRISE_description": "Enable sending notifications via <a target=\"_blank\" href=\"https://hub.docker.com/r/caronc/apprise\">Apprise</a>.",
|
"REPORT_APPRISE_description": "Enable sending notifications via <a target=\"_blank\" href=\"https://hub.docker.com/r/caronc/apprise\">Apprise</a>.",
|
||||||
"REPORT_APPRISE_name": "Enable Apprise",
|
"REPORT_APPRISE_name": "Enable Apprise",
|
||||||
"REPORT_DASHBOARD_URL_description": "Diese URL wird als Basis fürs Erstellen von Links in E-Mails genutzt. Geben Sie die gesamte URL startend mit <code>http://</code> inklusive der genutzten Portnummer ein (keinen nachfolgenden Schrägstrich <code>/</code> nutzen).",
|
"REPORT_DASHBOARD_URL_description": "Diese URL wird als Basis fürs Erstellen von Links in E-Mails genutzt. Geben Sie die gesamte URL startend mit <code>http://</code> inklusive der genutzten Portnummer ein (keinen nachfolgenden Schrägstrich <code>/</code> nutzen).",
|
||||||
@@ -777,23 +790,18 @@
|
|||||||
"WF_Trigger_type": "Auslösertyp",
|
"WF_Trigger_type": "Auslösertyp",
|
||||||
"Webhooks_display_name": "Webhooks",
|
"Webhooks_display_name": "Webhooks",
|
||||||
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "Neues Symbol hinzufügen",
|
"add_icon_event_tooltip": "Neues Symbol hinzufügen",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "Neuen Wert hinzufügen",
|
"add_option_event_tooltip": "Neuen Wert hinzufügen",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "Icons aller Geräte mit demselben Gerätetyp überschreiben",
|
"copy_icons_event_tooltip": "Icons aller Geräte mit demselben Gerätetyp überschreiben",
|
||||||
"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": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "Es ist eine neue Version verfügbar.",
|
"new_version_available": "Es ist eine neue Version verfügbar.",
|
||||||
"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": "",
|
|
||||||
"run_event_tooltip": "Aktiviere die Einstellung und speichere deine Änderungen, bevor du sie ausführst.",
|
"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",
|
||||||
@@ -821,6 +829,5 @@
|
|||||||
"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": "",
|
|
||||||
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
|
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Sign out",
|
"About_Exit": "Sign out",
|
||||||
"About_Title": "Network security scanner & notification framework",
|
"About_Title": "Network security scanner & notification framework",
|
||||||
"AppEvents_AppEventProcessed": "Processed",
|
"AppEvents_AppEventProcessed": "Processed",
|
||||||
"AppEvents_DateTimeCreated": "Logged",
|
"AppEvents_DateTimeCreated": "Discovered On",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "Application Event GUID",
|
"AppEvents_GUID": "Application Event GUID",
|
||||||
"AppEvents_Helper1": "Helper 1",
|
"AppEvents_Helper1": "Helper 1",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Delete events older than",
|
"DAYS_TO_KEEP_EVENTS_name": "Delete events older than",
|
||||||
"DISCOVER_PLUGINS_description": "Disable this option to speed up initialization and settings saving. When disabled, plugins are not discovered, and you cannot add new plugins to the <code>LOADED_PLUGINS</code> setting.",
|
"DISCOVER_PLUGINS_description": "Disable this option to speed up initialization and settings saving. When disabled, plugins are not discovered, and you cannot add new plugins to the <code>LOADED_PLUGINS</code> setting.",
|
||||||
"DISCOVER_PLUGINS_name": "Discover plugins",
|
"DISCOVER_PLUGINS_name": "Discover plugins",
|
||||||
|
"DevDetail_Children_Title": "Children Relationships",
|
||||||
"DevDetail_Copy_Device_Title": "Copy details from device",
|
"DevDetail_Copy_Device_Title": "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_CustomProperties_Title": "Custom Properties",
|
"DevDetail_CustomProperties_Title": "Custom Properties",
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
||||||
"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": "Enter a font awesome icon name without the fa- prefix or with complete class, e.g.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Loading...",
|
"DevDetail_Loading": "Loading…",
|
||||||
"DevDetail_MainInfo_Comments": "Comments",
|
"DevDetail_MainInfo_Comments": "Comments",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorite",
|
"DevDetail_MainInfo_Favorite": "Favorite",
|
||||||
"DevDetail_MainInfo_Group": "Group",
|
"DevDetail_MainInfo_Group": "Group",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Type",
|
"DevDetail_MainInfo_Type": "Type",
|
||||||
"DevDetail_MainInfo_Vendor": "Vendor",
|
"DevDetail_MainInfo_Vendor": "Vendor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Open children node",
|
||||||
"DevDetail_Network_Node_hover": "Select the parent network device the current device is connected to, to populate the Network tree.",
|
"DevDetail_Network_Node_hover": "Select the parent network device the current device is connected to, to populate the Network tree.",
|
||||||
"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": "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_Nmap_Scans": "Manual Nmap Scans",
|
"DevDetail_Nmap_Scans": "Manual Nmap Scans",
|
||||||
@@ -177,7 +179,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Send WoL command to ",
|
"DevDetail_Tools_WOL": "Send WoL command to ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/VLAN of NetAlertX, the target device will not respond.",
|
"DevDetail_Tools_WOL_noti_text": "The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/VLAN of NetAlertX, the target device will not respond.",
|
||||||
"DevDetail_Type_hover": "The Type of the device. 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": "The Type of the device. 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": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Add new Icon",
|
"DevDetail_button_AddIcon": "Add new Icon",
|
||||||
@@ -194,12 +196,13 @@
|
|||||||
"DevDetail_button_Save": "Save",
|
"DevDetail_button_Save": "Save",
|
||||||
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
||||||
"Device_MultiEdit": "Multi-edit",
|
"Device_MultiEdit": "Multi-edit",
|
||||||
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>.",
|
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
|
||||||
"Device_MultiEdit_Fields": "Edit fields:",
|
"Device_MultiEdit_Fields": "Edit fields:",
|
||||||
"Device_MultiEdit_MassActions": "Mass actions:",
|
"Device_MultiEdit_MassActions": "Mass actions:",
|
||||||
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
|
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
|
||||||
"Device_Searchbox": "Search",
|
"Device_Searchbox": "Search",
|
||||||
"Device_Shortcut_AllDevices": "My Devices",
|
"Device_Shortcut_AllDevices": "My Devices",
|
||||||
|
"Device_Shortcut_AllNodes": "All Nodes",
|
||||||
"Device_Shortcut_Archived": "Archived",
|
"Device_Shortcut_Archived": "Archived",
|
||||||
"Device_Shortcut_Connected": "Connected",
|
"Device_Shortcut_Connected": "Connected",
|
||||||
"Device_Shortcut_Devices": "Devices",
|
"Device_Shortcut_Devices": "Devices",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Alert Down",
|
"Device_TableHead_AlertDown": "Alert Down",
|
||||||
"Device_TableHead_Connected_Devices": "Connections",
|
"Device_TableHead_Connected_Devices": "Connections",
|
||||||
"Device_TableHead_CustomProps": "Props / Actions",
|
"Device_TableHead_CustomProps": "Props / Actions",
|
||||||
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Favorite",
|
"Device_TableHead_Favorite": "Favorite",
|
||||||
"Device_TableHead_FirstSession": "First Session",
|
"Device_TableHead_FirstSession": "First Session",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Name",
|
"Device_TableHead_Name": "Name",
|
||||||
"Device_TableHead_NetworkSite": "Network Site",
|
"Device_TableHead_NetworkSite": "Network Site",
|
||||||
"Device_TableHead_Owner": "Owner",
|
"Device_TableHead_Owner": "Owner",
|
||||||
|
"Device_TableHead_ParentRelType": "Relationship Type",
|
||||||
"Device_TableHead_Parent_MAC": "Parent network node",
|
"Device_TableHead_Parent_MAC": "Parent network node",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Presence",
|
"Device_TableHead_PresentLastScan": "Presence",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Require NICs Online",
|
||||||
"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",
|
||||||
@@ -250,7 +256,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Encryption key",
|
"ENCRYPTION_KEY_name": "Encryption key",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Loading...",
|
"Events_Loading": "Loading…",
|
||||||
"Events_Periodselect_All": "All Info",
|
"Events_Periodselect_All": "All Info",
|
||||||
"Events_Periodselect_LastMonth": "Last Month",
|
"Events_Periodselect_LastMonth": "Last Month",
|
||||||
"Events_Periodselect_LastWeek": "Last Week",
|
"Events_Periodselect_LastWeek": "Last Week",
|
||||||
@@ -340,7 +346,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Loaded plugins",
|
"LOADED_PLUGINS_name": "Loaded plugins",
|
||||||
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
|
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
|
||||||
"LOG_LEVEL_name": "Print additional logging",
|
"LOG_LEVEL_name": "Print additional logging",
|
||||||
"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_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.",
|
||||||
@@ -358,6 +364,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",
|
||||||
@@ -440,7 +451,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "UI Settings",
|
"Maintenance_Tools_Tab_UISettings": "UI Settings",
|
||||||
"Maintenance_arp_status": "Scan Status",
|
"Maintenance_arp_status": "Scan Status",
|
||||||
"Maintenance_arp_status_off": "is currently disabled",
|
"Maintenance_arp_status_off": "is currently disabled",
|
||||||
"Maintenance_arp_status_on": "scan(s) currently running",
|
"Maintenance_arp_status_on": "scanning in progress",
|
||||||
"Maintenance_built_on": "Built on",
|
"Maintenance_built_on": "Built on",
|
||||||
"Maintenance_current_version": "You are up-to-date. Check out what <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">I am working on</a>.",
|
"Maintenance_current_version": "You are up-to-date. Check out what <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">I am working on</a>.",
|
||||||
"Maintenance_database_backup": "DB Backups",
|
"Maintenance_database_backup": "DB Backups",
|
||||||
@@ -550,7 +561,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "Past online (miss-match)",
|
"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_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_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",
|
||||||
"Presence_Shortcut_Connected": "Connected",
|
"Presence_Shortcut_Connected": "Connected",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favorites",
|
"Presence_Shortcut_Favorites": "Favorites",
|
||||||
"Presence_Shortcut_NewDevices": "New Devices",
|
"Presence_Shortcut_NewDevices": "New Devices",
|
||||||
"Presence_Title": "Presence by Device",
|
"Presence_Title": "Presence by Device",
|
||||||
|
"REFRESH_FQDN_description": "Rescans all devices and refreshes their Fully Qualified Domain Name (FQDN). If disabled, only devices without a known name are scanned to improve performance. In this case, FQDN is updated only during initial device discovery.",
|
||||||
|
"REFRESH_FQDN_name": "Refresh FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "This URL is used as the base for generating links in HTML reports (e.g.: emails). Enter full URL starting with <code>http://</code> including the port number (no trailing slash <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "This URL is used as the base for generating links in HTML reports (e.g.: emails). Enter full URL starting with <code>http://</code> including the port number (no trailing slash <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
||||||
"REPORT_ERROR": "The page you are looking for is temporarily unavailable, please try again after a few seconds",
|
"REPORT_ERROR": "The page you are looking for is temporarily unavailable, please try again after a few seconds",
|
||||||
@@ -696,23 +709,19 @@
|
|||||||
"WF_Trigger": "Trigger",
|
"WF_Trigger": "Trigger",
|
||||||
"WF_Trigger_event_type": "Event type",
|
"WF_Trigger_event_type": "Event type",
|
||||||
"WF_Trigger_type": "Trigger type",
|
"WF_Trigger_type": "Trigger type",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Add new icon",
|
"add_icon_event_tooltip": "Add new icon",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Add new value",
|
"add_option_event_tooltip": "Add new value",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Overwrite icons of all devices with the same device type",
|
"copy_icons_event_tooltip": "Overwrite icons of all devices with the same device type",
|
||||||
"devices_old": "Refreshing...",
|
"devices_old": "Refreshing…",
|
||||||
"general_event_description": "The event you have triggered might take a while until background processes finish. The execution ended once the below execution queue empties (Check the <a href='/maintenance.php#tab_Logging'>error log</a> if you encounter issues). <br/> <br/> Execution queue:",
|
"general_event_description": "The event you have triggered might take a while until background processes finish. The execution ended once the below execution queue empties (Check the <a href='/maintenance.php#tab_Logging'>error log</a> if you encounter issues). <br/> <br/> Execution queue:",
|
||||||
"general_event_title": "Executing an ad-hoc event",
|
"general_event_title": "Executing an ad-hoc event",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
|
||||||
"go_to_node_event_tooltip": "Navigate to the Network page of the given node",
|
"go_to_node_event_tooltip": "Navigate to the Network page of the given node",
|
||||||
|
"go_to_device_event_tooltip": "Navigate to the Device",
|
||||||
"new_version_available": "A new version is available.",
|
"new_version_available": "A new version is available.",
|
||||||
"report_guid": "Notification guid:",
|
"report_guid": "Notification guid:",
|
||||||
"report_guid_missing": "Linked notification not found. There is a small delay between recently sent notifications and them being available. Referesh your page and cache after a few seconds. It's also possible the selected notification have been deleted during maintenance as specified in the <code>DBCLNP_NOTIFI_HIST</code> setting. <br/> <br/>The latest notification is displayed instead. The missing notification has the following GUID:",
|
"report_guid_missing": "Linked notification not found. There is a small delay between recently sent notifications and them being available. Referesh your page and cache after a few seconds. It's also possible the selected notification have been deleted during maintenance as specified in the <code>DBCLNP_NOTIFI_HIST</code> setting. <br/> <br/>The latest notification is displayed instead. The missing notification has the following GUID:",
|
||||||
"report_select_format": "Select Format:",
|
"report_select_format": "Select Format:",
|
||||||
"report_time": "Notification time:",
|
"report_time": "Notification time:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Enable the setting and save your changes at first before you run it.",
|
"run_event_tooltip": "Enable the setting and save your changes at first before you run it.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Core",
|
"settings_core_label": "Core",
|
||||||
@@ -727,7 +736,7 @@
|
|||||||
"settings_imported_label": "Settings imported",
|
"settings_imported_label": "Settings imported",
|
||||||
"settings_missing": "Not all settings loaded! High load on the database or app startup sequence. Click the 🔄 reload button in the top.",
|
"settings_missing": "Not all settings loaded! High load on the database or app startup sequence. Click the 🔄 reload button in the top.",
|
||||||
"settings_missing_block": "Error: Settings not loaded correctly. Click the reload button 🔄 at the top, alternatively, check the browser log for details (F12).",
|
"settings_missing_block": "Error: Settings not loaded correctly. Click the reload button 🔄 at the top, alternatively, check the browser log for details (F12).",
|
||||||
"settings_old": "Importing settings and re-initializing...",
|
"settings_old": "Importing settings and re-initializing…",
|
||||||
"settings_other_scanners": "Other, non-device scanner plugins that are currently enabled.",
|
"settings_other_scanners": "Other, non-device scanner plugins that are currently enabled.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Other scanners",
|
"settings_other_scanners_label": "Other scanners",
|
||||||
@@ -736,10 +745,9 @@
|
|||||||
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
||||||
"settings_publishers_label": "Publishers",
|
"settings_publishers_label": "Publishers",
|
||||||
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
||||||
"settings_saved": "<br/>Settings saved. <br/> Reloading... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Settings saved. <br/> Reloading… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
|
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Save your changes at first before you test your settings."
|
"test_event_tooltip": "Save your changes at first before you test your settings."
|
||||||
}
|
}
|
||||||
@@ -76,6 +76,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Eliminar eventos anteriores a",
|
"DAYS_TO_KEEP_EVENTS_name": "Eliminar eventos anteriores a",
|
||||||
"DISCOVER_PLUGINS_description": "Desactive esta opción para acelerar la inicialización y el ahorro de ajustes. Cuando está desactivado, los plugins no se descubren y no puede añadir nuevos plugins a la configuración <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Desactive esta opción para acelerar la inicialización y el ahorro de ajustes. Cuando está desactivado, los plugins no se descubren y no puede añadir nuevos plugins a la configuración <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Descubrir plugins",
|
"DISCOVER_PLUGINS_name": "Descubrir plugins",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Copiar detalles del dispositivo",
|
"DevDetail_Copy_Device_Title": "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_CustomProperties_Title": "Propiedades personalizadas",
|
"DevDetail_CustomProperties_Title": "Propiedades personalizadas",
|
||||||
@@ -112,6 +113,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipo",
|
"DevDetail_MainInfo_Type": "Tipo",
|
||||||
"DevDetail_MainInfo_Vendor": "Proveedor",
|
"DevDetail_MainInfo_Vendor": "Proveedor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Seleccione el dispositivo de red principal al que está conectado el dispositivo actual para completar el árbol de Red.",
|
"DevDetail_Network_Node_hover": "Seleccione el dispositivo de red principal al que está conectado el dispositivo actual para completar el árbol de Red.",
|
||||||
"DevDetail_Network_Port_hover": "El puerto al que está conectado este dispositivo en el dispositivo de red principal. Si se deja vacío, se muestra un icono de wifi en el árbol de Red.",
|
"DevDetail_Network_Port_hover": "El puerto al que está conectado este dispositivo en el dispositivo de red principal. Si se deja vacío, se muestra un icono de wifi en el árbol de Red.",
|
||||||
"DevDetail_Nmap_Scans": "Escaneos de Nmap",
|
"DevDetail_Nmap_Scans": "Escaneos de Nmap",
|
||||||
@@ -210,6 +212,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Cuidado. Al hacer clic se aplicará el valor de la izquierda a todos los dispositivos seleccionados anteriormente.",
|
"Device_MultiEdit_Tooltip": "Cuidado. Al hacer clic se aplicará el valor de la izquierda a todos los dispositivos seleccionados anteriormente.",
|
||||||
"Device_Searchbox": "Búsqueda",
|
"Device_Searchbox": "Búsqueda",
|
||||||
"Device_Shortcut_AllDevices": "Mis dispositivos",
|
"Device_Shortcut_AllDevices": "Mis dispositivos",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Archivado(s)",
|
"Device_Shortcut_Archived": "Archivado(s)",
|
||||||
"Device_Shortcut_Connected": "Conectado(s)",
|
"Device_Shortcut_Connected": "Conectado(s)",
|
||||||
"Device_Shortcut_Devices": "Dispositivos",
|
"Device_Shortcut_Devices": "Dispositivos",
|
||||||
@@ -221,6 +224,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Alerta desactivada",
|
"Device_TableHead_AlertDown": "Alerta desactivada",
|
||||||
"Device_TableHead_Connected_Devices": "Conexiones",
|
"Device_TableHead_Connected_Devices": "Conexiones",
|
||||||
"Device_TableHead_CustomProps": "Propiedades / Acciones",
|
"Device_TableHead_CustomProps": "Propiedades / Acciones",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"Device_TableHead_Favorite": "Favorito",
|
"Device_TableHead_Favorite": "Favorito",
|
||||||
"Device_TableHead_FirstSession": "1ra. sesión",
|
"Device_TableHead_FirstSession": "1ra. sesión",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -235,9 +239,11 @@
|
|||||||
"Device_TableHead_Name": "Nombre",
|
"Device_TableHead_Name": "Nombre",
|
||||||
"Device_TableHead_NetworkSite": "Lugar de la red",
|
"Device_TableHead_NetworkSite": "Lugar de la red",
|
||||||
"Device_TableHead_Owner": "Propietario",
|
"Device_TableHead_Owner": "Propietario",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Nodo principal de la red",
|
"Device_TableHead_Parent_MAC": "Nodo principal de la red",
|
||||||
"Device_TableHead_Port": "Puerto",
|
"Device_TableHead_Port": "Puerto",
|
||||||
"Device_TableHead_PresentLastScan": "Historial",
|
"Device_TableHead_PresentLastScan": "Historial",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "ID de fila",
|
"Device_TableHead_RowID": "ID de fila",
|
||||||
"Device_TableHead_Rowid": "ID de fila",
|
"Device_TableHead_Rowid": "ID de fila",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -382,6 +388,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",
|
||||||
@@ -598,6 +609,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favorito(s)",
|
"Presence_Shortcut_Favorites": "Favorito(s)",
|
||||||
"Presence_Shortcut_NewDevices": "Nuevo(s)",
|
"Presence_Shortcut_NewDevices": "Nuevo(s)",
|
||||||
"Presence_Title": "Historial por dispositivo",
|
"Presence_Title": "Historial por dispositivo",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_APPRISE_description": "Habilitar el envío de notificaciones a través de <a target=\"_blank\" href=\"https://hub.docker.com/r/caronc/apprise\">Apprise</a>.",
|
"REPORT_APPRISE_description": "Habilitar el envío de notificaciones a través de <a target=\"_blank\" href=\"https://hub.docker.com/r/caronc/apprise\">Apprise</a>.",
|
||||||
"REPORT_APPRISE_name": "Habilitar Apprise",
|
"REPORT_APPRISE_name": "Habilitar Apprise",
|
||||||
"REPORT_DASHBOARD_URL_description": "Esta URL se utiliza como base para generar enlaces en los correos electrónicos. Ingrese la URL completa que comienza con <code>http://</code>, incluido el número de puerto (sin barra inclinada al final <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Esta URL se utiliza como base para generar enlaces en los correos electrónicos. Ingrese la URL completa que comienza con <code>http://</code>, incluido el número de puerto (sin barra inclinada al final <code>/</code>).",
|
||||||
@@ -775,23 +788,18 @@
|
|||||||
"Webhooks_display_name": "Webhooks",
|
"Webhooks_display_name": "Webhooks",
|
||||||
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
||||||
"Webhooks_settings_group": "<i class=\"fa fa-circle-nodes\"></i> Webhooks",
|
"Webhooks_settings_group": "<i class=\"fa fa-circle-nodes\"></i> Webhooks",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Agregar nuevo icono",
|
"add_icon_event_tooltip": "Agregar nuevo icono",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Añadir nuevo valor",
|
"add_option_event_tooltip": "Añadir nuevo valor",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Sobrescribir los iconos de todos los dispositivos con el mismo tipo de dispositivo",
|
"copy_icons_event_tooltip": "Sobrescribir los iconos de todos los dispositivos con el mismo tipo de dispositivo",
|
||||||
"devices_old": "Volviendo a actualizar....",
|
"devices_old": "Volviendo a actualizar....",
|
||||||
"general_event_description": "El evento que ha activado puede tardar un poco hasta que finalicen los procesos en segundo plano. La ejecución finalizó una vez que se vacía la cola de ejecución a continuación (consulte el <a href='/maintenance.php#tab_Logging'>registro de errores</a> si encuentra problemas). <br/> <br/> Cola de ejecución:",
|
"general_event_description": "El evento que ha activado puede tardar un poco hasta que finalicen los procesos en segundo plano. La ejecución finalizó una vez que se vacía la cola de ejecución a continuación (consulte el <a href='/maintenance.php#tab_Logging'>registro de errores</a> si encuentra problemas). <br/> <br/> Cola de ejecución:",
|
||||||
"general_event_title": "Ejecutar un evento ad-hoc",
|
"general_event_title": "Ejecutar un evento ad-hoc",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
|
||||||
"go_to_node_event_tooltip": "Vaya a la página de Red del nodo indicado",
|
"go_to_node_event_tooltip": "Vaya a la página de Red del nodo indicado",
|
||||||
"new_version_available": "Una nueva versión está disponible.",
|
"new_version_available": "Una nueva versión está disponible.",
|
||||||
"report_guid": "Guía de las notificaciones:",
|
"report_guid": "Guía de las notificaciones:",
|
||||||
"report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración <code>de DBCLNP_NOTIFI_HIST</code>. <br/> <br/>En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:",
|
"report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración <code>de DBCLNP_NOTIFI_HIST</code>. <br/> <br/>En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:",
|
||||||
"report_select_format": "Selecciona el formato:",
|
"report_select_format": "Selecciona el formato:",
|
||||||
"report_time": "Hora de la notificación:",
|
"report_time": "Hora de la notificación:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Activa el ajuste y guarda tus cambios antes de ejecutarlo.",
|
"run_event_tooltip": "Activa el ajuste y guarda tus cambios antes de ejecutarlo.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Núcleo",
|
"settings_core_label": "Núcleo",
|
||||||
@@ -819,6 +827,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>",
|
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
|
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Se déconnecter",
|
"About_Exit": "Se déconnecter",
|
||||||
"About_Title": "Analyse de la sécurité du réseau et cadre de notification",
|
"About_Title": "Analyse de la sécurité du réseau et cadre de notification",
|
||||||
"AppEvents_AppEventProcessed": "Traité(s)",
|
"AppEvents_AppEventProcessed": "Traité(s)",
|
||||||
"AppEvents_DateTimeCreated": "Connecté",
|
"AppEvents_DateTimeCreated": "Découvert le",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "GUID d’événements de l'application",
|
"AppEvents_GUID": "GUID d’événements de l'application",
|
||||||
"AppEvents_Helper1": "Assistant 1",
|
"AppEvents_Helper1": "Assistant 1",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
|
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
|
||||||
"DISCOVER_PLUGINS_description": "Désactivez cette option pour accélérer le démarrage et l'enregistrement de paramètres. Quand elle est désactivée, les plugins ne sont pas découverts, et vous ne pouvez près ajouter de nouveaux plugins au paramètre <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Désactivez cette option pour accélérer le démarrage et l'enregistrement de paramètres. Quand elle est désactivée, les plugins ne sont pas découverts, et vous ne pouvez près ajouter de nouveaux plugins au paramètre <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Découvrir des plugins",
|
"DISCOVER_PLUGINS_name": "Découvrir des plugins",
|
||||||
|
"DevDetail_Children_Title": "Relations avec les éléments inférieurs",
|
||||||
"DevDetail_Copy_Device_Title": "Copier les détails de l'appareil",
|
"DevDetail_Copy_Device_Title": "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_CustomProperties_Title": "Champs personnalisés",
|
"DevDetail_CustomProperties_Title": "Champs personnalisés",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Type",
|
"DevDetail_MainInfo_Type": "Type",
|
||||||
"DevDetail_MainInfo_Vendor": "Fabricant",
|
"DevDetail_MainInfo_Vendor": "Fabricant",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Ouvrir le noeud de l'élément inférieur",
|
||||||
"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 manuels via Nmap",
|
"DevDetail_Nmap_Scans": "Scans manuels via Nmap",
|
||||||
@@ -194,12 +196,13 @@
|
|||||||
"DevDetail_button_Save": "Enregistrer",
|
"DevDetail_button_Save": "Enregistrer",
|
||||||
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
|
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
|
||||||
"Device_MultiEdit": "Édition multiple",
|
"Device_MultiEdit": "Édition multiple",
|
||||||
"Device_MultiEdit_Backup": "Attention, renseigner des valeurs non cohérentes ci-dessous peut bloquer votre paramétrage. Veillez à faire une sauvegarde de votre base de données ou de la configuration de vos appareils en premier lieu (<a href=\"php/server/devices.php?action=ExportCSV\">clisuer ici pour la télécharger <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Renseignez-vous sur comment remettre les appareils depuis ce fichier via la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">documentation des sauvegardes</a>.",
|
"Device_MultiEdit_Backup": "Attention, renseigner des valeurs non cohérentes ci-dessous peut bloquer votre paramétrage. Veillez à faire une sauvegarde de votre base de données ou de la configuration de vos appareils en premier lieu (<a href=\"php/server/devices.php?action=ExportCSV\">clisuer ici pour la télécharger <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Renseignez-vous sur comment remettre les appareils depuis ce fichier via la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">documentation des sauvegardes</a>. Afin d'enregistrer les changements, cliquer sur l'icône <b>Sauvegarder<i class=\"fa-solid fa-save\"></i></b> sur chaque champ que vous voulez mettre à jour.",
|
||||||
"Device_MultiEdit_Fields": "Champs modifiables :",
|
"Device_MultiEdit_Fields": "Champs modifiables :",
|
||||||
"Device_MultiEdit_MassActions": "Actions en masse :",
|
"Device_MultiEdit_MassActions": "Actions en masse :",
|
||||||
"Device_MultiEdit_Tooltip": "Attention. Ceci va appliquer la valeur de gauche à tous les appareils sélectionnés au-dessus.",
|
"Device_MultiEdit_Tooltip": "Attention. Ceci va appliquer la valeur de gauche à tous les appareils sélectionnés au-dessus.",
|
||||||
"Device_Searchbox": "Rechercher",
|
"Device_Searchbox": "Rechercher",
|
||||||
"Device_Shortcut_AllDevices": "Mes appareils",
|
"Device_Shortcut_AllDevices": "Mes appareils",
|
||||||
|
"Device_Shortcut_AllNodes": "Tous les nœuds",
|
||||||
"Device_Shortcut_Archived": "Archivés",
|
"Device_Shortcut_Archived": "Archivés",
|
||||||
"Device_Shortcut_Connected": "Connectés",
|
"Device_Shortcut_Connected": "Connectés",
|
||||||
"Device_Shortcut_Devices": "Appareils",
|
"Device_Shortcut_Devices": "Appareils",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Alerter si En panne",
|
"Device_TableHead_AlertDown": "Alerter si En panne",
|
||||||
"Device_TableHead_Connected_Devices": "Connexions",
|
"Device_TableHead_Connected_Devices": "Connexions",
|
||||||
"Device_TableHead_CustomProps": "Champs / Actions",
|
"Device_TableHead_CustomProps": "Champs / Actions",
|
||||||
|
"Device_TableHead_FQDN": "Nom de domaine FQDN",
|
||||||
"Device_TableHead_Favorite": "Favori",
|
"Device_TableHead_Favorite": "Favori",
|
||||||
"Device_TableHead_FirstSession": "Première session",
|
"Device_TableHead_FirstSession": "Première session",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nom",
|
"Device_TableHead_Name": "Nom",
|
||||||
"Device_TableHead_NetworkSite": "Site Réseau",
|
"Device_TableHead_NetworkSite": "Site Réseau",
|
||||||
"Device_TableHead_Owner": "Propriétaire",
|
"Device_TableHead_Owner": "Propriétaire",
|
||||||
|
"Device_TableHead_ParentRelType": "Type de relation",
|
||||||
"Device_TableHead_Parent_MAC": "Nœud réseau principal",
|
"Device_TableHead_Parent_MAC": "Nœud réseau principal",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Présence",
|
"Device_TableHead_PresentLastScan": "Présence",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Nécessite que l'interface réseau (NIC) soit connectée",
|
||||||
"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",
|
||||||
@@ -340,7 +346,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Plugins chargés",
|
"LOADED_PLUGINS_name": "Plugins chargés",
|
||||||
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
|
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
|
||||||
"LOG_LEVEL_name": "Afficher des journaux de log additionnels",
|
"LOG_LEVEL_name": "Afficher des journaux de log additionnels",
|
||||||
"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_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.",
|
||||||
@@ -358,6 +364,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",
|
||||||
@@ -440,7 +451,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Paramètres de l'interface",
|
"Maintenance_Tools_Tab_UISettings": "Paramètres de l'interface",
|
||||||
"Maintenance_arp_status": "État du scan",
|
"Maintenance_arp_status": "État du scan",
|
||||||
"Maintenance_arp_status_off": "est actuellement désactivé",
|
"Maintenance_arp_status_off": "est actuellement désactivé",
|
||||||
"Maintenance_arp_status_on": "scan(s) actuellement en cours",
|
"Maintenance_arp_status_on": "scan en cours",
|
||||||
"Maintenance_built_on": "Construit sur",
|
"Maintenance_built_on": "Construit sur",
|
||||||
"Maintenance_current_version": "Vous êtes à jour. Découvrez sur quoi <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">je travaille</a>.",
|
"Maintenance_current_version": "Vous êtes à jour. Découvrez sur quoi <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">je travaille</a>.",
|
||||||
"Maintenance_database_backup": "Sauvegardes de base de données",
|
"Maintenance_database_backup": "Sauvegardes de base de données",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favoris",
|
"Presence_Shortcut_Favorites": "Favoris",
|
||||||
"Presence_Shortcut_NewDevices": "Nouveaux appareils",
|
"Presence_Shortcut_NewDevices": "Nouveaux appareils",
|
||||||
"Presence_Title": "Présence par appareil",
|
"Presence_Title": "Présence par appareil",
|
||||||
|
"REFRESH_FQDN_description": "Rescanne tous les appareils et met à jour leur nom de domaine complètement qualifié (FQDN). Si désactivé, seul les appareils sans nom connu sont scannés, pour améliorer les performances. Dans ce cas, les noms de domaine FQDN sont mis à jour uniquement durant la découverte initiale des appareils.",
|
||||||
|
"REFRESH_FQDN_name": "Rafraîchir les noms de domaine FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Cette URL est utilisée comme base pour générer les liens des rapports HTML (par ex. les courriels). Renseignez l'adresse complète, commençant par <code>http://</code> et incluznt le numero de port (sans slash <code>/</code> à la fin).",
|
"REPORT_DASHBOARD_URL_description": "Cette URL est utilisée comme base pour générer les liens des rapports HTML (par ex. les courriels). Renseignez l'adresse complète, commençant par <code>http://</code> et incluznt le numero de port (sans slash <code>/</code> à la fin).",
|
||||||
"REPORT_DASHBOARD_URL_name": "URL de NetAlertX",
|
"REPORT_DASHBOARD_URL_name": "URL de NetAlertX",
|
||||||
"REPORT_ERROR": "La page que vous cherchez est temporairement indisponible. Merci de réessayer dans quelques secondes",
|
"REPORT_ERROR": "La page que vous cherchez est temporairement indisponible. Merci de réessayer dans quelques secondes",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "Déclencheur",
|
"WF_Trigger": "Déclencheur",
|
||||||
"WF_Trigger_event_type": "Type d'événement",
|
"WF_Trigger_event_type": "Type d'événement",
|
||||||
"WF_Trigger_type": "Type de déclencheur",
|
"WF_Trigger_type": "Type de déclencheur",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Ajouter une nouvelle icône",
|
"add_icon_event_tooltip": "Ajouter une nouvelle icône",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Ajouter une nouvelle valeur",
|
"add_option_event_tooltip": "Ajouter une nouvelle valeur",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Remplace les icônes de tous les appareils du même type",
|
"copy_icons_event_tooltip": "Remplace les icônes de tous les appareils du même type",
|
||||||
"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",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
|
||||||
"go_to_node_event_tooltip": "Aller vers la page Réseau du nœud concerné",
|
"go_to_node_event_tooltip": "Aller vers la page Réseau du nœud concerné",
|
||||||
"new_version_available": "Une nouvelle version est disponible.",
|
"new_version_available": "Une nouvelle version est disponible.",
|
||||||
"report_guid": "GUID de la notification :",
|
"report_guid": "GUID de la notification :",
|
||||||
"report_guid_missing": "La notification associée n'a pas été trouvée. Un petit délai existe entre l'envoi d'une notification et sa disponibilité réelle pour affichage. Rafraichissez la page et votre cache après quelques secondes. Il est aussi possible que la notification sélectionnée ait été supprimée durant une opération de maintenance, comme renseigné dans le paramètre <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/> La dernière notification est affichée à sa place. La notification manquante dispose du GUID suivant :",
|
"report_guid_missing": "La notification associée n'a pas été trouvée. Un petit délai existe entre l'envoi d'une notification et sa disponibilité réelle pour affichage. Rafraichissez la page et votre cache après quelques secondes. Il est aussi possible que la notification sélectionnée ait été supprimée durant une opération de maintenance, comme renseigné dans le paramètre <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/> La dernière notification est affichée à sa place. La notification manquante dispose du GUID suivant :",
|
||||||
"report_select_format": "Sélectionner un format :",
|
"report_select_format": "Sélectionner un format :",
|
||||||
"report_time": "Heure de la notification :",
|
"report_time": "Heure de la notification :",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Activez le paramètre et enregistrez vos changements avant de le lancer.",
|
"run_event_tooltip": "Activez le paramètre et enregistrez vos changements avant de le lancer.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Principal",
|
"settings_core_label": "Principal",
|
||||||
@@ -727,7 +735,7 @@
|
|||||||
"settings_imported_label": "Paramètres importés",
|
"settings_imported_label": "Paramètres importés",
|
||||||
"settings_missing": "Tous les paramètres n'ont pas été chargés ! La base de données est trop sollicitée, ou bien la séquence de démarrage de l'application est trop lourde. Cliquez sur le bouton de rafraîchissement 🔄 en haut.",
|
"settings_missing": "Tous les paramètres n'ont pas été chargés ! La base de données est trop sollicitée, ou bien la séquence de démarrage de l'application est trop lourde. Cliquez sur le bouton de rafraîchissement 🔄 en haut.",
|
||||||
"settings_missing_block": "Erreur : les paramètres ne sont pas correctement chargés. Cliquer sur le bouton de rafraîchissement 🔄 en haut ; sinon, vous pouvez vérifier les journaux du navigateur pour plus de détails (F12).",
|
"settings_missing_block": "Erreur : les paramètres ne sont pas correctement chargés. Cliquer sur le bouton de rafraîchissement 🔄 en haut ; sinon, vous pouvez vérifier les journaux du navigateur pour plus de détails (F12).",
|
||||||
"settings_old": "Importation des paramètres et réinitialisation...",
|
"settings_old": "Importation des paramètres et réinitialisation…",
|
||||||
"settings_other_scanners": "Autres plugins activés, hors scanners d'appareils.",
|
"settings_other_scanners": "Autres plugins activés, hors scanners d'appareils.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Autres scanners",
|
"settings_other_scanners_label": "Autres scanners",
|
||||||
@@ -740,6 +748,6 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Système",
|
"settings_system_label": "Système",
|
||||||
"settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. <b>Il n'y a pas de pas de contrôle.</b>",
|
"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_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."
|
"go_to_device_event_tooltip": "Naviguer vers cet appareil"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Esci",
|
"About_Exit": "Esci",
|
||||||
"About_Title": "Scanner di sicurezza di rete e framework di notifica",
|
"About_Title": "Scanner di sicurezza di rete e framework di notifica",
|
||||||
"AppEvents_AppEventProcessed": "Elaborato",
|
"AppEvents_AppEventProcessed": "Elaborato",
|
||||||
"AppEvents_DateTimeCreated": "Loggato",
|
"AppEvents_DateTimeCreated": "Scoperto il",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "GUID evento applicazione",
|
"AppEvents_GUID": "GUID evento applicazione",
|
||||||
"AppEvents_Helper1": "Aiutante 1",
|
"AppEvents_Helper1": "Aiutante 1",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Elimina eventi più vecchi di",
|
"DAYS_TO_KEEP_EVENTS_name": "Elimina eventi più vecchi di",
|
||||||
"DISCOVER_PLUGINS_description": "Disattiva questa opzione per velocizzare l'inizializzazione e il salvataggio delle impostazioni. Quando è disattivata, i plugin non vengono scoperti e non puoi aggiungere nuovi plugin all'impostazione <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Disattiva questa opzione per velocizzare l'inizializzazione e il salvataggio delle impostazioni. Quando è disattivata, i plugin non vengono scoperti e non puoi aggiungere nuovi plugin all'impostazione <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Scopri i plugin",
|
"DISCOVER_PLUGINS_name": "Scopri i plugin",
|
||||||
|
"DevDetail_Children_Title": "Relazioni tra figli",
|
||||||
"DevDetail_Copy_Device_Title": "Copia dettagli dal dispositivo",
|
"DevDetail_Copy_Device_Title": "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_CustomProperties_Title": "Proprietà personalizzate",
|
"DevDetail_CustomProperties_Title": "Proprietà personalizzate",
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Passa alla pagina Rete del nodo specificato.",
|
"DevDetail_GoToNetworkNode": "Passa alla pagina Rete del nodo specificato.",
|
||||||
"DevDetail_Icon": "Icona",
|
"DevDetail_Icon": "Icona",
|
||||||
"DevDetail_Icon_Descr": "Inserisci il nome di un'icona Font Awesome senza il prefisso fa- o con la classe completa, es.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Inserisci il nome di un'icona Font Awesome senza il prefisso fa- o con la classe completa, es.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Caricamento...",
|
"DevDetail_Loading": "Caricamento…",
|
||||||
"DevDetail_MainInfo_Comments": "Commenti",
|
"DevDetail_MainInfo_Comments": "Commenti",
|
||||||
"DevDetail_MainInfo_Favorite": "Preferito",
|
"DevDetail_MainInfo_Favorite": "Preferito",
|
||||||
"DevDetail_MainInfo_Group": "Gruppo",
|
"DevDetail_MainInfo_Group": "Gruppo",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipo",
|
"DevDetail_MainInfo_Type": "Tipo",
|
||||||
"DevDetail_MainInfo_Vendor": "Produttore",
|
"DevDetail_MainInfo_Vendor": "Produttore",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Apri nodo figlio",
|
||||||
"DevDetail_Network_Node_hover": "Seleziona il dispositivo di rete principale a cui è connesso il dispositivo corrente per popolare la struttura di rete.",
|
"DevDetail_Network_Node_hover": "Seleziona il dispositivo di rete principale a cui è connesso il dispositivo corrente per popolare la struttura di rete.",
|
||||||
"DevDetail_Network_Port_hover": "La porta a cui è connesso questo dispositivo sul dispositivo di rete principale. Se lasciato vuoto, verrà visualizzata un'icona Wi-Fi nella struttura di rete.",
|
"DevDetail_Network_Port_hover": "La porta a cui è connesso questo dispositivo sul dispositivo di rete principale. Se lasciato vuoto, verrà visualizzata un'icona Wi-Fi nella struttura di rete.",
|
||||||
"DevDetail_Nmap_Scans": "Scansioni Nmap manuali",
|
"DevDetail_Nmap_Scans": "Scansioni Nmap manuali",
|
||||||
@@ -177,7 +179,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Invia comando WoL a ",
|
"DevDetail_Tools_WOL": "Invia comando WoL a ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "Il comando Wake-on-LAN viene inviato all'indirizzo di broadcast. Se la destinazione non si trova nella sottorete/VLAN di NetAlertX, il dispositivo di destinazione non risponderà.",
|
"DevDetail_Tools_WOL_noti_text": "Il comando Wake-on-LAN viene inviato all'indirizzo di broadcast. Se la destinazione non si trova nella sottorete/VLAN di NetAlertX, il dispositivo di destinazione non risponderà.",
|
||||||
"DevDetail_Type_hover": "Il tipo del dispositivo. Se selezioni uno dei dispositivi di rete predefiniti (ad esempio: AP, Firewall, Router, Switch...) verranno visualizzati nella struttura di rete come possibili nodi della rete principale.",
|
"DevDetail_Type_hover": "Il tipo del dispositivo. Se selezioni uno dei dispositivi di rete predefiniti (ad esempio: AP, Firewall, Router, Switch…) verranno visualizzati nella struttura di rete come possibili nodi della rete principale.",
|
||||||
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
|
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Aggiungi nuova icona",
|
"DevDetail_button_AddIcon": "Aggiungi nuova icona",
|
||||||
@@ -194,12 +196,13 @@
|
|||||||
"DevDetail_button_Save": "Salva",
|
"DevDetail_button_Save": "Salva",
|
||||||
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
|
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
|
||||||
"Device_MultiEdit": "Modifica multipla",
|
"Device_MultiEdit": "Modifica multipla",
|
||||||
"Device_MultiEdit_Backup": "Attento, l'inserimento di valori errati di seguito interromperà la configurazione. Effettua prima il backup del database o della configurazione dei dispositivi (<a href=\"php/server/devices.php?action=ExportCSV\">fai clic per scaricare <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leggi come ripristinare i dispositivi da questo file nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Documentazione di backup</a>.",
|
"Device_MultiEdit_Backup": "Attento, l'inserimento di valori errati di seguito interromperà la configurazione. Effettua prima il backup del database o della configurazione dei dispositivi (<a href=\"php/server/devices.php?action=ExportCSV\">fai clic per scaricare <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leggi come ripristinare i dispositivi da questo file nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Documentazione di backup</a>. Per applicare le modifiche, fai clic sull'icona <b>Salva<i class=\"fa-solid fa-save\"></i></b> su ogni campo che desideri aggiornare.",
|
||||||
"Device_MultiEdit_Fields": "Modifica campi:",
|
"Device_MultiEdit_Fields": "Modifica campi:",
|
||||||
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
||||||
"Device_MultiEdit_Tooltip": "Attento. Facendo clic verrà applicato il valore sulla sinistra a tutti i dispositivi selezionati sopra.",
|
"Device_MultiEdit_Tooltip": "Attento. Facendo clic verrà applicato il valore sulla sinistra a tutti i dispositivi selezionati sopra.",
|
||||||
"Device_Searchbox": "Cerca",
|
"Device_Searchbox": "Cerca",
|
||||||
"Device_Shortcut_AllDevices": "Miei dispositivi",
|
"Device_Shortcut_AllDevices": "Miei dispositivi",
|
||||||
|
"Device_Shortcut_AllNodes": "Tutti i nodi",
|
||||||
"Device_Shortcut_Archived": "Archiviati",
|
"Device_Shortcut_Archived": "Archiviati",
|
||||||
"Device_Shortcut_Connected": "Connessi",
|
"Device_Shortcut_Connected": "Connessi",
|
||||||
"Device_Shortcut_Devices": "Dispositivi",
|
"Device_Shortcut_Devices": "Dispositivi",
|
||||||
@@ -211,6 +214,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": "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",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nome",
|
"Device_TableHead_Name": "Nome",
|
||||||
"Device_TableHead_NetworkSite": "Sito di rete",
|
"Device_TableHead_NetworkSite": "Sito di rete",
|
||||||
"Device_TableHead_Owner": "Proprietario",
|
"Device_TableHead_Owner": "Proprietario",
|
||||||
|
"Device_TableHead_ParentRelType": "Tipo di relazione",
|
||||||
"Device_TableHead_Parent_MAC": "Nodo di rete principale",
|
"Device_TableHead_Parent_MAC": "Nodo di rete principale",
|
||||||
"Device_TableHead_Port": "Porta",
|
"Device_TableHead_Port": "Porta",
|
||||||
"Device_TableHead_PresentLastScan": "Presenza",
|
"Device_TableHead_PresentLastScan": "Presenza",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Richiedi NIC online",
|
||||||
"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",
|
||||||
@@ -250,7 +256,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Chiave di crittografia",
|
"ENCRYPTION_KEY_name": "Chiave di crittografia",
|
||||||
"Email_display_name": "E-mail",
|
"Email_display_name": "E-mail",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Caricamento...",
|
"Events_Loading": "Caricamento…",
|
||||||
"Events_Periodselect_All": "Tutte le info",
|
"Events_Periodselect_All": "Tutte le info",
|
||||||
"Events_Periodselect_LastMonth": "Ultimo mese",
|
"Events_Periodselect_LastMonth": "Ultimo mese",
|
||||||
"Events_Periodselect_LastWeek": "Ultima settimana",
|
"Events_Periodselect_LastWeek": "Ultima settimana",
|
||||||
@@ -340,7 +346,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Plugin caricati",
|
"LOADED_PLUGINS_name": "Plugin caricati",
|
||||||
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
|
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
|
||||||
"LOG_LEVEL_name": "Stampa log aggiuntivo",
|
"LOG_LEVEL_name": "Stampa log aggiuntivo",
|
||||||
"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_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.",
|
||||||
@@ -358,6 +364,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",
|
||||||
@@ -440,7 +451,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Impostazioni UI",
|
"Maintenance_Tools_Tab_UISettings": "Impostazioni UI",
|
||||||
"Maintenance_arp_status": "Stato scansione",
|
"Maintenance_arp_status": "Stato scansione",
|
||||||
"Maintenance_arp_status_off": "è attualmente disabilitato",
|
"Maintenance_arp_status_off": "è attualmente disabilitato",
|
||||||
"Maintenance_arp_status_on": "scansioni attualmente in esecuzione",
|
"Maintenance_arp_status_on": "scansione in corso",
|
||||||
"Maintenance_built_on": "Rilasciato il",
|
"Maintenance_built_on": "Rilasciato il",
|
||||||
"Maintenance_current_version": "Sei aggiornato. Scopri <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">a cosa sto lavorando</a>.",
|
"Maintenance_current_version": "Sei aggiornato. Scopri <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">a cosa sto lavorando</a>.",
|
||||||
"Maintenance_database_backup": "Backup DB",
|
"Maintenance_database_backup": "Backup DB",
|
||||||
@@ -550,7 +561,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "Online in passato (non corrispondente)",
|
"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_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_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",
|
||||||
"Presence_Shortcut_Connected": "Connessi",
|
"Presence_Shortcut_Connected": "Connessi",
|
||||||
@@ -559,6 +570,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": "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": "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",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "Trigger",
|
"WF_Trigger": "Trigger",
|
||||||
"WF_Trigger_event_type": "Tipo evento",
|
"WF_Trigger_event_type": "Tipo evento",
|
||||||
"WF_Trigger_type": "Tipo di trigger",
|
"WF_Trigger_type": "Tipo di trigger",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Aggiungi nuova icona",
|
"add_icon_event_tooltip": "Aggiungi nuova icona",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Aggiungi nuovo valore",
|
"add_option_event_tooltip": "Aggiungi nuovo valore",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Sovrascrivi le icone di tutti i dispositivi con lo stesso tipo di dispositivo",
|
"copy_icons_event_tooltip": "Sovrascrivi le icone di tutti i dispositivi con lo stesso tipo di dispositivo",
|
||||||
"devices_old": "Aggiornamento...",
|
"devices_old": "Aggiornamento…",
|
||||||
"general_event_description": "L'evento che hai attivato potrebbe richiedere del tempo prima che i processi in background vengano completati. L'esecuzione è terminata una volta che la coda di esecuzione sottostante si è svuotata (controlla il <a href='/maintenance.php#tab_Logging'>log degli errori</a> se riscontri problemi). <br/> <br/> Coda di esecuzione:",
|
"general_event_description": "L'evento che hai attivato potrebbe richiedere del tempo prima che i processi in background vengano completati. L'esecuzione è terminata una volta che la coda di esecuzione sottostante si è svuotata (controlla il <a href='/maintenance.php#tab_Logging'>log degli errori</a> se riscontri problemi). <br/> <br/> Coda di esecuzione:",
|
||||||
"general_event_title": "Esecuzione di un evento ad-hoc",
|
"general_event_title": "Esecuzione di un evento ad-hoc",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
|
||||||
"go_to_node_event_tooltip": "Passa alla pagina Rete del nodo specificato",
|
"go_to_node_event_tooltip": "Passa alla pagina Rete del nodo specificato",
|
||||||
"new_version_available": "È disponibile una nuova versione.",
|
"new_version_available": "È disponibile una nuova versione.",
|
||||||
"report_guid": "GUID notifica:",
|
"report_guid": "GUID notifica:",
|
||||||
"report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:",
|
"report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:",
|
||||||
"report_select_format": "Seleziona formato:",
|
"report_select_format": "Seleziona formato:",
|
||||||
"report_time": "Orario notifica:",
|
"report_time": "Orario notifica:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Abilita l'impostazione e salva le modifiche prima di eseguirla.",
|
"run_event_tooltip": "Abilita l'impostazione e salva le modifiche prima di eseguirla.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Core",
|
"settings_core_label": "Core",
|
||||||
@@ -727,7 +735,7 @@
|
|||||||
"settings_imported_label": "Impostazioni importate",
|
"settings_imported_label": "Impostazioni importate",
|
||||||
"settings_missing": "Non tutte le impostazioni sono state caricate! Carico elevato sul database o sulla sequenza di avvio dell'app. Fai clic sul pulsante 🔄 ricarica in alto.",
|
"settings_missing": "Non tutte le impostazioni sono state caricate! Carico elevato sul database o sulla sequenza di avvio dell'app. Fai clic sul pulsante 🔄 ricarica in alto.",
|
||||||
"settings_missing_block": "Errore: impostazioni non caricate correttamente. Fai clic sul pulsante di ricarica 🔄 in alto, in alternativa, controlla il registro del browser per i dettagli (F12).",
|
"settings_missing_block": "Errore: impostazioni non caricate correttamente. Fai clic sul pulsante di ricarica 🔄 in alto, in alternativa, controlla il registro del browser per i dettagli (F12).",
|
||||||
"settings_old": "Importazione impostazioni e riavvio in corso...",
|
"settings_old": "Importazione impostazioni e riavvio in corso…",
|
||||||
"settings_other_scanners": "Altri plugin, non scanner per dispositivi, che sono attualmente abilitati.",
|
"settings_other_scanners": "Altri plugin, non scanner per dispositivi, che sono attualmente abilitati.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Altri scanner",
|
"settings_other_scanners_label": "Altri scanner",
|
||||||
@@ -736,10 +744,10 @@
|
|||||||
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Editori",
|
"settings_publishers_label": "Editori",
|
||||||
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
|
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
|
||||||
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso... <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso… <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
"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_tooltip": "Salva le modifiche prima di provare le nuove impostazioni.",
|
||||||
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
|
"go_to_device_event_tooltip": "Naviga al dispositivo"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Slett hendelser eldre enn",
|
"DAYS_TO_KEEP_EVENTS_name": "Slett hendelser eldre enn",
|
||||||
"DISCOVER_PLUGINS_description": "",
|
"DISCOVER_PLUGINS_description": "",
|
||||||
"DISCOVER_PLUGINS_name": "",
|
"DISCOVER_PLUGINS_name": "",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Kopier detaljer fra enhet",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Kopier detaljer fra enhet",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Kopier detaljer fra enheten via nedtrekks menyen. Alt på denne siden vil bli overskrevet",
|
"DevDetail_Copy_Device_Tooltip": "Kopier detaljer fra enheten via nedtrekks menyen. Alt på denne siden vil bli overskrevet",
|
||||||
"DevDetail_CustomProperties_Title": "",
|
"DevDetail_CustomProperties_Title": "",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Type",
|
"DevDetail_MainInfo_Type": "Type",
|
||||||
"DevDetail_MainInfo_Vendor": "Leverandør",
|
"DevDetail_MainInfo_Vendor": "Leverandør",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Velg overordnet nettverksenhet til enheten som er tilkoblet, for å fylle nettverkstreet.",
|
"DevDetail_Network_Node_hover": "Velg overordnet nettverksenhet til enheten som er tilkoblet, for å fylle nettverkstreet.",
|
||||||
"DevDetail_Network_Port_hover": "Porten denne enheten er koblet til på overordnet nettverksenhet. Hvis den er tom, vises et wifi-ikon i nettverkstreet i stedet.",
|
"DevDetail_Network_Port_hover": "Porten denne enheten er koblet til på overordnet nettverksenhet. Hvis den er tom, vises et wifi-ikon i nettverkstreet i stedet.",
|
||||||
"DevDetail_Nmap_Scans": "Manuelle Nmap-skanninger",
|
"DevDetail_Nmap_Scans": "Manuelle Nmap-skanninger",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Forsiktig. Ved å klikke på denne vil verdien til venstre brukes på alle enhetene som er valgt ovenfor.",
|
"Device_MultiEdit_Tooltip": "Forsiktig. Ved å klikke på denne vil verdien til venstre brukes på alle enhetene som er valgt ovenfor.",
|
||||||
"Device_Searchbox": "Søk",
|
"Device_Searchbox": "Søk",
|
||||||
"Device_Shortcut_AllDevices": "Mine Enheter",
|
"Device_Shortcut_AllDevices": "Mine Enheter",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arkivert",
|
"Device_Shortcut_Archived": "Arkivert",
|
||||||
"Device_Shortcut_Connected": "Tilkoblet",
|
"Device_Shortcut_Connected": "Tilkoblet",
|
||||||
"Device_Shortcut_Devices": "Enheter",
|
"Device_Shortcut_Devices": "Enheter",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "",
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "Tilkoblinger",
|
"Device_TableHead_Connected_Devices": "Tilkoblinger",
|
||||||
"Device_TableHead_CustomProps": "",
|
"Device_TableHead_CustomProps": "",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"Device_TableHead_Favorite": "Favoritt",
|
"Device_TableHead_Favorite": "Favoritt",
|
||||||
"Device_TableHead_FirstSession": "Første Økt",
|
"Device_TableHead_FirstSession": "Første Økt",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Navn",
|
"Device_TableHead_Name": "Navn",
|
||||||
"Device_TableHead_NetworkSite": "",
|
"Device_TableHead_NetworkSite": "",
|
||||||
"Device_TableHead_Owner": "Eier",
|
"Device_TableHead_Owner": "Eier",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"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_PresentLastScan": "",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"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": "",
|
||||||
@@ -358,6 +364,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",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favoritter",
|
"Presence_Shortcut_Favorites": "Favoritter",
|
||||||
"Presence_Shortcut_NewDevices": "Nye enheter",
|
"Presence_Shortcut_NewDevices": "Nye enheter",
|
||||||
"Presence_Title": "Tilstedeværelse etter enhet",
|
"Presence_Title": "Tilstedeværelse etter enhet",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_DASHBOARD_URL_description": "Denne URL-en brukes som base for å generere lenker i HTML-rapporter (f.eks.: E -post). Skriv inn full URL som starter med <code>http://</code> inkludert portnummeret (ingen etterfølgende slash <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Denne URL-en brukes som base for å generere lenker i HTML-rapporter (f.eks.: E -post). Skriv inn full URL som starter med <code>http://</code> inkludert portnummeret (ingen etterfølgende slash <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
||||||
"REPORT_ERROR": "Siden du leter etter er midlertidig utilgjengelig, prøv igjen etter noen sekunder",
|
"REPORT_ERROR": "Siden du leter etter er midlertidig utilgjengelig, prøv igjen etter noen sekunder",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "",
|
"add_icon_event_tooltip": "",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "",
|
"add_option_event_tooltip": "",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
"copy_icons_event_tooltip": "",
|
||||||
"devices_old": "Oppdaterer...",
|
"devices_old": "Oppdaterer...",
|
||||||
"general_event_description": "Hendelsen du har utløst kan ta en stund til før bakgrunnsprosesser er ferdig. Utførelsen ble avsluttet når utførelseskøen nedenfor tømmes (sjekk <a href='/maintenance.php#tab_Logging'>Feillogg</a> Hvis du møter problemer). <br/> <br/> Utførelseskø:",
|
"general_event_description": "Hendelsen du har utløst kan ta en stund til før bakgrunnsprosesser er ferdig. Utførelsen ble avsluttet når utførelseskøen nedenfor tømmes (sjekk <a href='/maintenance.php#tab_Logging'>Feillogg</a> Hvis du møter problemer). <br/> <br/> Utførelseskø:",
|
||||||
"general_event_title": "Utfører en ad-hoc hendelse",
|
"general_event_title": "Utfører en ad-hoc hendelse",
|
||||||
"go_to_node_event_icon": "",
|
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "Notifikasjons GUID:",
|
"report_guid": "Notifikasjons GUID:",
|
||||||
"report_guid_missing": "Koblet notifikasjon ikke funnet. Det er en liten forsinkelse mellom nylig sendt notifikasjoner og at de er tilgjengelige. Oppdater siden din og hurtigbufferen etter noen sekunder. Det er også mulig den valgte notifikasjonen er slettet under vedlikehold som spesifisert i <code>DBCLNP_NOTIFI_HIST</code> innstillingen. <br/> <br/> Den siste notifikasjonen vises i stedet. Den manglende notifikasjonen har følgende GUID:",
|
"report_guid_missing": "Koblet notifikasjon ikke funnet. Det er en liten forsinkelse mellom nylig sendt notifikasjoner og at de er tilgjengelige. Oppdater siden din og hurtigbufferen etter noen sekunder. Det er også mulig den valgte notifikasjonen er slettet under vedlikehold som spesifisert i <code>DBCLNP_NOTIFI_HIST</code> innstillingen. <br/> <br/> Den siste notifikasjonen vises i stedet. Den manglende notifikasjonen har følgende GUID:",
|
||||||
"report_select_format": "Velg format:",
|
"report_select_format": "Velg format:",
|
||||||
"report_time": "Notifikasjonstid:",
|
"report_time": "Notifikasjonstid:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Aktiver innstillingen og lagre endringene først før du kjører den.",
|
"run_event_tooltip": "Aktiver innstillingen og lagre endringene først før du kjører den.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Core",
|
"settings_core_label": "Core",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"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_tooltip": "Lagre endringene først, før du tester innstillingene dine."
|
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
|
||||||
}
|
}
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Excluir eventos mais antigos que",
|
"DAYS_TO_KEEP_EVENTS_name": "Excluir eventos mais antigos que",
|
||||||
"DISCOVER_PLUGINS_description": "Desative esta opção para acelerar a inicialização e a gravação de definições. Quando desativada, os plug-ins não são descobertos e não é possível adicionar novos plug-ins à definição<code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Desative esta opção para acelerar a inicialização e a gravação de definições. Quando desativada, os plug-ins não são descobertos e não é possível adicionar novos plug-ins à definição<code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Descobrir plugins",
|
"DISCOVER_PLUGINS_name": "Descobrir plugins",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Copiar detalhes do dispositivo",
|
"DevDetail_Copy_Device_Title": "Copiar detalhes do dispositivo",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copiar detalhes do dispositivo a partir da lista pendente. Tudo o que se encontra nesta página será substituído",
|
"DevDetail_Copy_Device_Tooltip": "Copiar detalhes do dispositivo a partir da lista pendente. Tudo o que se encontra nesta página será substituído",
|
||||||
"DevDetail_CustomProperties_Title": "Propriedades personalizadas",
|
"DevDetail_CustomProperties_Title": "Propriedades personalizadas",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipo",
|
"DevDetail_MainInfo_Type": "Tipo",
|
||||||
"DevDetail_MainInfo_Vendor": "Vendedor",
|
"DevDetail_MainInfo_Vendor": "Vendedor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Selecione o dispositivo de rede principal ao qual o dispositivo atual está conectado, para preencher a árvore Rede.",
|
"DevDetail_Network_Node_hover": "Selecione o dispositivo de rede principal ao qual o dispositivo atual está conectado, para preencher a árvore Rede.",
|
||||||
"DevDetail_Network_Port_hover": "A porta a que este dispositivo está ligado no dispositivo de rede principal. Se for deixado vazio, é apresentado um ícone wifi na árvore Rede.",
|
"DevDetail_Network_Port_hover": "A porta a que este dispositivo está ligado no dispositivo de rede principal. Se for deixado vazio, é apresentado um ícone wifi na árvore Rede.",
|
||||||
"DevDetail_Nmap_Scans": "Varreduras manuais do Nmap",
|
"DevDetail_Nmap_Scans": "Varreduras manuais do Nmap",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Cuidadoso. Clicar aqui aplicará o valor à esquerda a todos os dispositivos selecionados acima.",
|
"Device_MultiEdit_Tooltip": "Cuidadoso. Clicar aqui aplicará o valor à esquerda a todos os dispositivos selecionados acima.",
|
||||||
"Device_Searchbox": "Procurar",
|
"Device_Searchbox": "Procurar",
|
||||||
"Device_Shortcut_AllDevices": "Meus dispositivos",
|
"Device_Shortcut_AllDevices": "Meus dispositivos",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arquivado",
|
"Device_Shortcut_Archived": "Arquivado",
|
||||||
"Device_Shortcut_Connected": "Conectado",
|
"Device_Shortcut_Connected": "Conectado",
|
||||||
"Device_Shortcut_Devices": "Dispositivos",
|
"Device_Shortcut_Devices": "Dispositivos",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Alerta em baixo",
|
"Device_TableHead_AlertDown": "Alerta em baixo",
|
||||||
"Device_TableHead_Connected_Devices": "Conexões",
|
"Device_TableHead_Connected_Devices": "Conexões",
|
||||||
"Device_TableHead_CustomProps": "",
|
"Device_TableHead_CustomProps": "",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"Device_TableHead_Favorite": "Favorito",
|
"Device_TableHead_Favorite": "Favorito",
|
||||||
"Device_TableHead_FirstSession": "Primeira sessão",
|
"Device_TableHead_FirstSession": "Primeira sessão",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nome",
|
"Device_TableHead_Name": "Nome",
|
||||||
"Device_TableHead_NetworkSite": "Site da rede",
|
"Device_TableHead_NetworkSite": "Site da rede",
|
||||||
"Device_TableHead_Owner": "Proprietário",
|
"Device_TableHead_Owner": "Proprietário",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"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": "Presente",
|
"Device_TableHead_PresentLastScan": "Presente",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"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",
|
||||||
@@ -358,6 +364,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",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "",
|
"Presence_Shortcut_Favorites": "",
|
||||||
"Presence_Shortcut_NewDevices": "",
|
"Presence_Shortcut_NewDevices": "",
|
||||||
"Presence_Title": "",
|
"Presence_Title": "",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_DASHBOARD_URL_description": "",
|
"REPORT_DASHBOARD_URL_description": "",
|
||||||
"REPORT_DASHBOARD_URL_name": "",
|
"REPORT_DASHBOARD_URL_name": "",
|
||||||
"REPORT_ERROR": "",
|
"REPORT_ERROR": "",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "",
|
"add_icon_event_tooltip": "",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "",
|
"add_option_event_tooltip": "",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
"copy_icons_event_tooltip": "",
|
||||||
"devices_old": "",
|
"devices_old": "",
|
||||||
"general_event_description": "",
|
"general_event_description": "",
|
||||||
"general_event_title": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "",
|
"report_select_format": "",
|
||||||
"report_time": "",
|
"report_time": "",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "",
|
"run_event_tooltip": "",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "",
|
"settings_core_label": "",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "",
|
"settings_system_label": "",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": "Guarde as alterações antes de testar as definições."
|
"test_event_tooltip": "Guarde as alterações antes de testar as definições."
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Зарегистрироваться",
|
"About_Exit": "Зарегистрироваться",
|
||||||
"About_Title": "Сетевой сканер и система уведомлений",
|
"About_Title": "Сетевой сканер и система уведомлений",
|
||||||
"AppEvents_AppEventProcessed": "Обработанный",
|
"AppEvents_AppEventProcessed": "Обработанный",
|
||||||
"AppEvents_DateTimeCreated": "Журнал",
|
"AppEvents_DateTimeCreated": "Обнаружено",
|
||||||
"AppEvents_Extra": "Дополнительно",
|
"AppEvents_Extra": "Дополнительно",
|
||||||
"AppEvents_GUID": "GUID события приложения",
|
"AppEvents_GUID": "GUID события приложения",
|
||||||
"AppEvents_Helper1": "Помощник 1",
|
"AppEvents_Helper1": "Помощник 1",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Удалить события старше",
|
"DAYS_TO_KEEP_EVENTS_name": "Удалить события старше",
|
||||||
"DISCOVER_PLUGINS_description": "Отключите эту опцию, чтобы ускорить инициализацию и сохранение настроек. При отключении этой опции плагины не обнаруживаются, и вы не можете добавлять новые плагины в параметр <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Отключите эту опцию, чтобы ускорить инициализацию и сохранение настроек. При отключении этой опции плагины не обнаруживаются, и вы не можете добавлять новые плагины в параметр <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Обзор плагинов",
|
"DISCOVER_PLUGINS_name": "Обзор плагинов",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Скопировать данные с устройства",
|
"DevDetail_Copy_Device_Title": "Скопировать данные с устройства",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Скопируйте данные с устройства из раскрывающегося списка. Все на этой странице будет перезаписано",
|
"DevDetail_Copy_Device_Tooltip": "Скопируйте данные с устройства из раскрывающегося списка. Все на этой странице будет перезаписано",
|
||||||
"DevDetail_CustomProperties_Title": "Пользовательские свойства",
|
"DevDetail_CustomProperties_Title": "Пользовательские свойства",
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Перейти на страницу Сеть данного узла.",
|
"DevDetail_GoToNetworkNode": "Перейти на страницу Сеть данного узла.",
|
||||||
"DevDetail_Icon": "Значок",
|
"DevDetail_Icon": "Значок",
|
||||||
"DevDetail_Icon_Descr": "Введите имя значка Font Awesome без префикса fa- или с полным классом, например: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Введите имя значка Font Awesome без префикса fa- или с полным классом, например: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Загрузка...",
|
"DevDetail_Loading": "Загрузка…",
|
||||||
"DevDetail_MainInfo_Comments": "Комментарии",
|
"DevDetail_MainInfo_Comments": "Комментарии",
|
||||||
"DevDetail_MainInfo_Favorite": "Избранное",
|
"DevDetail_MainInfo_Favorite": "Избранное",
|
||||||
"DevDetail_MainInfo_Group": "Группа",
|
"DevDetail_MainInfo_Group": "Группа",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Тип",
|
"DevDetail_MainInfo_Type": "Тип",
|
||||||
"DevDetail_MainInfo_Vendor": "Поставщик",
|
"DevDetail_MainInfo_Vendor": "Поставщик",
|
||||||
"DevDetail_MainInfo_mac": "MAC адрес",
|
"DevDetail_MainInfo_mac": "MAC адрес",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Выберите родительское сетевое устройство, к которому подключено текущее устройство, чтобы заполнить дерево сети.",
|
"DevDetail_Network_Node_hover": "Выберите родительское сетевое устройство, к которому подключено текущее устройство, чтобы заполнить дерево сети.",
|
||||||
"DevDetail_Network_Port_hover": "Порт, к которому подключено это устройство на родительском сетевом устройстве. Если оставить пустым, в дереве сети отобразится значок Wi-Fi.",
|
"DevDetail_Network_Port_hover": "Порт, к которому подключено это устройство на родительском сетевом устройстве. Если оставить пустым, в дереве сети отобразится значок Wi-Fi.",
|
||||||
"DevDetail_Nmap_Scans": "Ручные сканеры Nmap",
|
"DevDetail_Nmap_Scans": "Ручные сканеры Nmap",
|
||||||
@@ -194,12 +196,13 @@
|
|||||||
"DevDetail_button_Save": "Сохранить",
|
"DevDetail_button_Save": "Сохранить",
|
||||||
"DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.",
|
"DeviceEdit_ValidMacIp": "Введите действительный <b>Mac</b> и <b>IP</b> адрес.",
|
||||||
"Device_MultiEdit": "Мультиредакт",
|
"Device_MultiEdit": "Мультиредакт",
|
||||||
"Device_MultiEdit_Backup": "Будьте осторожны: ввод неправильных значений ниже приведет к поломке вашей настройки. Сначала сделайте резервную копию базы данных или конфигурации устройств (<a href=\"php/server/devices.php?action=ExportCSV\">нажмите для загрузки <i class=\"fa-solid fa-download fa-bounce\"></i></a>). О том, как восстановить Устройства из этого файла, читайте в разделе <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Документация о резервном копировании</a>.",
|
"Device_MultiEdit_Backup": "Будьте осторожны: ввод неправильных значений ниже приведет к поломке вашей настройки. Сначала сделайте резервную копию базы данных или конфигурации устройств (<a href=\"php/server/devices.php?action=ExportCSV\">нажмите для загрузки <i class=\"fa-solid fa-download fa-bounce\"></i></a>). О том, как восстановить Устройства из этого файла, читайте в разделе <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Документация о резервном копировании</a>. Чтобы применить свои изменения, нажмите на значок <b> Сохранить <i class = \"fa-solid fa-save\"> </i> </b> в каждом поле, которое вы хотите обновить.",
|
||||||
"Device_MultiEdit_Fields": "Редактировать поля:",
|
"Device_MultiEdit_Fields": "Редактировать поля:",
|
||||||
"Device_MultiEdit_MassActions": "Массовые действия:",
|
"Device_MultiEdit_MassActions": "Массовые действия:",
|
||||||
"Device_MultiEdit_Tooltip": "Осторожно. При нажатии на эту кнопку значение слева будет применено ко всем устройствам, выбранным выше.",
|
"Device_MultiEdit_Tooltip": "Осторожно. При нажатии на эту кнопку значение слева будет применено ко всем устройствам, выбранным выше.",
|
||||||
"Device_Searchbox": "Поиск",
|
"Device_Searchbox": "Поиск",
|
||||||
"Device_Shortcut_AllDevices": "Мои устройства",
|
"Device_Shortcut_AllDevices": "Мои устройства",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Архив",
|
"Device_Shortcut_Archived": "Архив",
|
||||||
"Device_Shortcut_Connected": "Подключенные",
|
"Device_Shortcut_Connected": "Подключенные",
|
||||||
"Device_Shortcut_Devices": "Устройства",
|
"Device_Shortcut_Devices": "Устройства",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Оповещение о сост. ВЫКЛ",
|
"Device_TableHead_AlertDown": "Оповещение о сост. ВЫКЛ",
|
||||||
"Device_TableHead_Connected_Devices": "Соединения",
|
"Device_TableHead_Connected_Devices": "Соединения",
|
||||||
"Device_TableHead_CustomProps": "Свойства / Действия",
|
"Device_TableHead_CustomProps": "Свойства / Действия",
|
||||||
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Избранное",
|
"Device_TableHead_Favorite": "Избранное",
|
||||||
"Device_TableHead_FirstSession": "Первый сеанс",
|
"Device_TableHead_FirstSession": "Первый сеанс",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Имя",
|
"Device_TableHead_Name": "Имя",
|
||||||
"Device_TableHead_NetworkSite": "Сайт устройства",
|
"Device_TableHead_NetworkSite": "Сайт устройства",
|
||||||
"Device_TableHead_Owner": "Владелец",
|
"Device_TableHead_Owner": "Владелец",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Родительский узел сети",
|
"Device_TableHead_Parent_MAC": "Родительский узел сети",
|
||||||
"Device_TableHead_Port": "Порт",
|
"Device_TableHead_Port": "Порт",
|
||||||
"Device_TableHead_PresentLastScan": "Присутствие",
|
"Device_TableHead_PresentLastScan": "Присутствие",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "ID строки",
|
"Device_TableHead_RowID": "ID строки",
|
||||||
"Device_TableHead_Rowid": "ID строки",
|
"Device_TableHead_Rowid": "ID строки",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -250,7 +256,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Ключ шифрования",
|
"ENCRYPTION_KEY_name": "Ключ шифрования",
|
||||||
"Email_display_name": "Эл. почта",
|
"Email_display_name": "Эл. почта",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Загрузка...",
|
"Events_Loading": "Загрузка…",
|
||||||
"Events_Periodselect_All": "Вся информация",
|
"Events_Periodselect_All": "Вся информация",
|
||||||
"Events_Periodselect_LastMonth": "Последний месяц",
|
"Events_Periodselect_LastMonth": "Последний месяц",
|
||||||
"Events_Periodselect_LastWeek": "Последняя неделя",
|
"Events_Periodselect_LastWeek": "Последняя неделя",
|
||||||
@@ -340,7 +346,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Загруженные плагины",
|
"LOADED_PLUGINS_name": "Загруженные плагины",
|
||||||
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
|
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
|
||||||
"LOG_LEVEL_name": "Распечатать дополнительный журнал",
|
"LOG_LEVEL_name": "Распечатать дополнительный журнал",
|
||||||
"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_Info": "Пароли устанавливаются через плагин Set Password. Если у вас возникли проблемы со входом в систему, проверьте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SEPWD документацию</a>.",
|
||||||
@@ -358,6 +364,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": "Инструменты обслуживания",
|
||||||
@@ -440,7 +451,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Интерфейс",
|
"Maintenance_Tools_Tab_UISettings": "Интерфейс",
|
||||||
"Maintenance_arp_status": "Состояние сканирования",
|
"Maintenance_arp_status": "Состояние сканирования",
|
||||||
"Maintenance_arp_status_off": "в настоящее время отключен",
|
"Maintenance_arp_status_off": "в настоящее время отключен",
|
||||||
"Maintenance_arp_status_on": "сканирование, выполняется в данный момент",
|
"Maintenance_arp_status_on": "выполняется сканирование",
|
||||||
"Maintenance_built_on": "Сборка от",
|
"Maintenance_built_on": "Сборка от",
|
||||||
"Maintenance_current_version": "Вы в курсе событий. Узнайте, над чем <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я работаю</a>.",
|
"Maintenance_current_version": "Вы в курсе событий. Узнайте, над чем <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я работаю</a>.",
|
||||||
"Maintenance_database_backup": "Резервные копии БД",
|
"Maintenance_database_backup": "Резервные копии БД",
|
||||||
@@ -550,7 +561,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "В прошлом в сети (несовпадение)",
|
"Presence_Key_OnlinePastMiss": "В прошлом в сети (несовпадение)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Устройство в прошлом было подключено к сети, но сейчас находится в автономном режиме, однако стартовый сеанс может отсутствовать или иметь противоречивые данные. (Возможно, это ошибка — отправьте PR, если знаете, как это исправить — здесь я немного запутался в коде)",
|
"Presence_Key_OnlinePastMiss_desc": "Устройство в прошлом было подключено к сети, но сейчас находится в автономном режиме, однако стартовый сеанс может отсутствовать или иметь противоречивые данные. (Возможно, это ошибка — отправьте PR, если знаете, как это исправить — здесь я немного запутался в коде)",
|
||||||
"Presence_Key_OnlinePast_desc": "Устройство раньше было в сети, но в настоящее время не в сети.",
|
"Presence_Key_OnlinePast_desc": "Устройство раньше было в сети, но в настоящее время не в сети.",
|
||||||
"Presence_Loading": "Загрузка...",
|
"Presence_Loading": "Загрузка…",
|
||||||
"Presence_Shortcut_AllDevices": "Мои устройства",
|
"Presence_Shortcut_AllDevices": "Мои устройства",
|
||||||
"Presence_Shortcut_Archived": "Архив",
|
"Presence_Shortcut_Archived": "Архив",
|
||||||
"Presence_Shortcut_Connected": "Подключенные",
|
"Presence_Shortcut_Connected": "Подключенные",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Избранные",
|
"Presence_Shortcut_Favorites": "Избранные",
|
||||||
"Presence_Shortcut_NewDevices": "Новые устройства",
|
"Presence_Shortcut_NewDevices": "Новые устройства",
|
||||||
"Presence_Title": "Присутствие по устройству",
|
"Presence_Title": "Присутствие по устройству",
|
||||||
|
"REFRESH_FQDN_description": "Повторное сканирование всех устройств и обновление их полного доменного имени (FQDN). Если эта функция отключена, то для повышения производительности сканируются только устройства без известного имени. В этом случае FQDN обновляется только при первоначальном обнаружении устройства.",
|
||||||
|
"REFRESH_FQDN_name": "Обновить FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Этот URL-адрес используется в качестве основы для создания ссылок в отчетах HTML (например, в электронных письмах). Введите полный URL-адрес, начинающийся с <code>http://</code>, включая номер порта (без косой черты <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Этот URL-адрес используется в качестве основы для создания ссылок в отчетах HTML (например, в электронных письмах). Введите полный URL-адрес, начинающийся с <code>http://</code>, включая номер порта (без косой черты <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
||||||
"REPORT_ERROR": "Страница, которую вы ищете, временно недоступна, повторите попытку через несколько секунд",
|
"REPORT_ERROR": "Страница, которую вы ищете, временно недоступна, повторите попытку через несколько секунд",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "Триггер",
|
"WF_Trigger": "Триггер",
|
||||||
"WF_Trigger_event_type": "Тип события",
|
"WF_Trigger_event_type": "Тип события",
|
||||||
"WF_Trigger_type": "Тип триггера",
|
"WF_Trigger_type": "Тип триггера",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Добавить новую иконку",
|
"add_icon_event_tooltip": "Добавить новую иконку",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Добавить новое значение",
|
"add_option_event_tooltip": "Добавить новое значение",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Заменить иконки всех устройств с одним и тем же типом устройства",
|
"copy_icons_event_tooltip": "Заменить иконки всех устройств с одним и тем же типом устройства",
|
||||||
"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": "Выполнение специального события",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
|
||||||
"go_to_node_event_tooltip": "Переход на страницу \"Сеть\" данного узла",
|
"go_to_node_event_tooltip": "Переход на страницу \"Сеть\" данного узла",
|
||||||
"new_version_available": "Доступна новая версия.",
|
"new_version_available": "Доступна новая версия.",
|
||||||
"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": "Время уведомления:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Включите настройку и сначала сохраните изменения, прежде чем запускать ее.",
|
"run_event_tooltip": "Включите настройку и сначала сохраните изменения, прежде чем запускать ее.",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Основные",
|
"settings_core_label": "Основные",
|
||||||
@@ -727,7 +735,7 @@
|
|||||||
"settings_imported_label": "Настройки импортированы",
|
"settings_imported_label": "Настройки импортированы",
|
||||||
"settings_missing": "Не все настройки загружены! Высокая нагрузка на базу данных или последовательность запуска приложения. Нажмите кнопку 🔄 перезагрузить вверху.",
|
"settings_missing": "Не все настройки загружены! Высокая нагрузка на базу данных или последовательность запуска приложения. Нажмите кнопку 🔄 перезагрузить вверху.",
|
||||||
"settings_missing_block": "Ошибка: Настройки загружены неправильно. Нажмите кнопку перезагрузки 🔄 вверху или проверьте журнал браузера для получения подробной информации (F12).",
|
"settings_missing_block": "Ошибка: Настройки загружены неправильно. Нажмите кнопку перезагрузки 🔄 вверху или проверьте журнал браузера для получения подробной информации (F12).",
|
||||||
"settings_old": "Импорт настроек и повторная инициализация...",
|
"settings_old": "Импорт настроек и повторная инициализация…",
|
||||||
"settings_other_scanners": "Другие плагины сканера, не относящиеся к устройствам, которые в настоящее время включены.",
|
"settings_other_scanners": "Другие плагины сканера, не относящиеся к устройствам, которые в настоящее время включены.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Другие сканеры",
|
"settings_other_scanners_label": "Другие сканеры",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Система",
|
"settings_system_label": "Система",
|
||||||
"settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>",
|
"settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. <b>Проверка не выполняется.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки."
|
"test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Şu tarihten eski olayları sil",
|
"DAYS_TO_KEEP_EVENTS_name": "Şu tarihten eski olayları sil",
|
||||||
"DISCOVER_PLUGINS_description": "Bu seçeneği devre dışı bırakmak, başlatma süresini ve ayarların kaydedilmesini hızlandırır. Devre dışı bırakıldığında, eklentiler keşfedilmez ve <code>LOADED_PLUGINS</code> ayarına yeni eklentiler eklenemez.",
|
"DISCOVER_PLUGINS_description": "Bu seçeneği devre dışı bırakmak, başlatma süresini ve ayarların kaydedilmesini hızlandırır. Devre dışı bırakıldığında, eklentiler keşfedilmez ve <code>LOADED_PLUGINS</code> ayarına yeni eklentiler eklenemez.",
|
||||||
"DISCOVER_PLUGINS_name": "Eklentileri keşfet",
|
"DISCOVER_PLUGINS_name": "Eklentileri keşfet",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Cihazdan detayları kopyala",
|
"DevDetail_Copy_Device_Title": "Cihazdan detayları kopyala",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Aşağıdaki açılır listeden cihazın detaylarını kopyalayın. Bu sayfadaki her şey üzerine yazılacaktır",
|
"DevDetail_Copy_Device_Tooltip": "Aşağıdaki açılır listeden cihazın detaylarını kopyalayın. Bu sayfadaki her şey üzerine yazılacaktır",
|
||||||
"DevDetail_CustomProperties_Title": "Özelleştirilmiş Özellikler",
|
"DevDetail_CustomProperties_Title": "Özelleştirilmiş Özellikler",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tür",
|
"DevDetail_MainInfo_Type": "Tür",
|
||||||
"DevDetail_MainInfo_Vendor": "Üretici",
|
"DevDetail_MainInfo_Vendor": "Üretici",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Cihazın bağlı olduğu üst ağ cihazını seçerek Ağ ağacının doldurulmasını sağlayın.",
|
"DevDetail_Network_Node_hover": "Cihazın bağlı olduğu üst ağ cihazını seçerek Ağ ağacının doldurulmasını sağlayın.",
|
||||||
"DevDetail_Network_Port_hover": "Bu cihazın, üst ağ cihazı üzerindeki bağlı olduğu port. Boş bırakılırsa, Ağ ağacında bir Wi-Fi simgesi görüntülenir.",
|
"DevDetail_Network_Port_hover": "Bu cihazın, üst ağ cihazı üzerindeki bağlı olduğu port. Boş bırakılırsa, Ağ ağacında bir Wi-Fi simgesi görüntülenir.",
|
||||||
"DevDetail_Nmap_Scans": "Manuel Nmap Taramaları",
|
"DevDetail_Nmap_Scans": "Manuel Nmap Taramaları",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Dikkat. Buna tıklamak, soldaki değeri yukarıda seçilen tüm cihazlara uygulayacaktır.",
|
"Device_MultiEdit_Tooltip": "Dikkat. Buna tıklamak, soldaki değeri yukarıda seçilen tüm cihazlara uygulayacaktır.",
|
||||||
"Device_Searchbox": "Arama",
|
"Device_Searchbox": "Arama",
|
||||||
"Device_Shortcut_AllDevices": "Cihazlarım",
|
"Device_Shortcut_AllDevices": "Cihazlarım",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arşivlenmiş",
|
"Device_Shortcut_Archived": "Arşivlenmiş",
|
||||||
"Device_Shortcut_Connected": "Bağlandı",
|
"Device_Shortcut_Connected": "Bağlandı",
|
||||||
"Device_Shortcut_Devices": "Cihazlar",
|
"Device_Shortcut_Devices": "Cihazlar",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Çalışmama Alarmı",
|
"Device_TableHead_AlertDown": "Çalışmama Alarmı",
|
||||||
"Device_TableHead_Connected_Devices": "Bağlantılar",
|
"Device_TableHead_Connected_Devices": "Bağlantılar",
|
||||||
"Device_TableHead_CustomProps": "Özellikler / Eylemler",
|
"Device_TableHead_CustomProps": "Özellikler / Eylemler",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"Device_TableHead_Favorite": "Favori",
|
"Device_TableHead_Favorite": "Favori",
|
||||||
"Device_TableHead_FirstSession": "İlk Oturum",
|
"Device_TableHead_FirstSession": "İlk Oturum",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "İsim",
|
"Device_TableHead_Name": "İsim",
|
||||||
"Device_TableHead_NetworkSite": "Ağ Alanı",
|
"Device_TableHead_NetworkSite": "Ağ Alanı",
|
||||||
"Device_TableHead_Owner": "Kurucu",
|
"Device_TableHead_Owner": "Kurucu",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Üst ağ düğümü",
|
"Device_TableHead_Parent_MAC": "Üst ağ düğümü",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Varlık",
|
"Device_TableHead_PresentLastScan": "Varlık",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "Satır ID",
|
"Device_TableHead_RowID": "Satır ID",
|
||||||
"Device_TableHead_Rowid": "Satır ID",
|
"Device_TableHead_Rowid": "Satır ID",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -358,6 +364,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ı",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favoriler",
|
"Presence_Shortcut_Favorites": "Favoriler",
|
||||||
"Presence_Shortcut_NewDevices": "Yeni Cihazlar",
|
"Presence_Shortcut_NewDevices": "Yeni Cihazlar",
|
||||||
"Presence_Title": "",
|
"Presence_Title": "",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_DASHBOARD_URL_description": "",
|
"REPORT_DASHBOARD_URL_description": "",
|
||||||
"REPORT_DASHBOARD_URL_name": "",
|
"REPORT_DASHBOARD_URL_name": "",
|
||||||
"REPORT_ERROR": "",
|
"REPORT_ERROR": "",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "",
|
"add_icon_event_tooltip": "",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "",
|
"add_option_event_tooltip": "",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
"copy_icons_event_tooltip": "",
|
||||||
"devices_old": "Yenileniyor...",
|
"devices_old": "Yenileniyor...",
|
||||||
"general_event_description": "",
|
"general_event_description": "",
|
||||||
"general_event_title": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "",
|
"report_select_format": "",
|
||||||
"report_time": "Bildirim zamanı:",
|
"report_time": "Bildirim zamanı:",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "",
|
"run_event_tooltip": "",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "",
|
"settings_core_label": "",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "Sistem",
|
"settings_system_label": "Sistem",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": ""
|
"test_event_tooltip": ""
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Вийти",
|
"About_Exit": "Вийти",
|
||||||
"About_Title": "Сканер безпеки мережі та структура сповіщень",
|
"About_Title": "Сканер безпеки мережі та структура сповіщень",
|
||||||
"AppEvents_AppEventProcessed": "Оброблено",
|
"AppEvents_AppEventProcessed": "Оброблено",
|
||||||
"AppEvents_DateTimeCreated": "Зареєстровано",
|
"AppEvents_DateTimeCreated": "Виявлено",
|
||||||
"AppEvents_Extra": "Екстра",
|
"AppEvents_Extra": "Екстра",
|
||||||
"AppEvents_GUID": "GUID події програми",
|
"AppEvents_GUID": "GUID події програми",
|
||||||
"AppEvents_Helper1": "Помічник 1",
|
"AppEvents_Helper1": "Помічник 1",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Видалити події, старші за",
|
"DAYS_TO_KEEP_EVENTS_name": "Видалити події, старші за",
|
||||||
"DISCOVER_PLUGINS_description": "Вимкніть цю опцію, щоб прискорити ініціалізацію та збереження налаштувань. Якщо вимкнено, плагіни не виявляються, і ви не можете додавати нові плагіни до параметра <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Вимкніть цю опцію, щоб прискорити ініціалізацію та збереження налаштувань. Якщо вимкнено, плагіни не виявляються, і ви не можете додавати нові плагіни до параметра <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Відкрийте для себе плагіни",
|
"DISCOVER_PLUGINS_name": "Відкрийте для себе плагіни",
|
||||||
|
"DevDetail_Children_Title": "Стосунки з дітьми",
|
||||||
"DevDetail_Copy_Device_Title": "Скопіюйте деталі з пристрою",
|
"DevDetail_Copy_Device_Title": "Скопіюйте деталі з пристрою",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Скопіюйте деталі пристрою зі спадного списку. Усе на цій сторінці буде перезаписано",
|
"DevDetail_Copy_Device_Tooltip": "Скопіюйте деталі пристрою зі спадного списку. Усе на цій сторінці буде перезаписано",
|
||||||
"DevDetail_CustomProperties_Title": "Спеціальні властивості",
|
"DevDetail_CustomProperties_Title": "Спеціальні властивості",
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Перейдіть на сторінку Мережа даного вузла.",
|
"DevDetail_GoToNetworkNode": "Перейдіть на сторінку Мережа даного вузла.",
|
||||||
"DevDetail_Icon": "значок",
|
"DevDetail_Icon": "значок",
|
||||||
"DevDetail_Icon_Descr": "Введіть чудову назву значка шрифту без префікса fa- або з повним класом, наприклад: fa fa-бренди fa-яблуко.",
|
"DevDetail_Icon_Descr": "Введіть чудову назву значка шрифту без префікса fa- або з повним класом, наприклад: fa fa-бренди fa-яблуко.",
|
||||||
"DevDetail_Loading": "Завантаження...",
|
"DevDetail_Loading": "Завантаження…",
|
||||||
"DevDetail_MainInfo_Comments": "Коментарі",
|
"DevDetail_MainInfo_Comments": "Коментарі",
|
||||||
"DevDetail_MainInfo_Favorite": "улюблений",
|
"DevDetail_MainInfo_Favorite": "улюблений",
|
||||||
"DevDetail_MainInfo_Group": "Група",
|
"DevDetail_MainInfo_Group": "Група",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Тип",
|
"DevDetail_MainInfo_Type": "Тип",
|
||||||
"DevDetail_MainInfo_Vendor": "Продавець",
|
"DevDetail_MainInfo_Vendor": "Продавець",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Відкрити дочірній вузол",
|
||||||
"DevDetail_Network_Node_hover": "Виберіть батьківський мережевий пристрій, до якого підключено поточний пристрій, щоб заповнити дерево мережі.",
|
"DevDetail_Network_Node_hover": "Виберіть батьківський мережевий пристрій, до якого підключено поточний пристрій, щоб заповнити дерево мережі.",
|
||||||
"DevDetail_Network_Port_hover": "Порт, до якого підключено цей пристрій на батьківському мережевому пристрої. Якщо залишити пустим, у дереві мережі відобразиться значок Wi-Fi.",
|
"DevDetail_Network_Port_hover": "Порт, до якого підключено цей пристрій на батьківському мережевому пристрої. Якщо залишити пустим, у дереві мережі відобразиться значок Wi-Fi.",
|
||||||
"DevDetail_Nmap_Scans": "Сканування Nmap вручну",
|
"DevDetail_Nmap_Scans": "Сканування Nmap вручну",
|
||||||
@@ -177,7 +179,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Надіслати команду WoL до ",
|
"DevDetail_Tools_WOL": "Надіслати команду WoL до ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on -LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on -LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "Команда Wake-on-LAN надсилається на широкомовну адресу. Якщо ціль не входить до підмережі/VLAN NetAlertX, цільовий пристрій не відповідатиме.",
|
"DevDetail_Tools_WOL_noti_text": "Команда Wake-on-LAN надсилається на широкомовну адресу. Якщо ціль не входить до підмережі/VLAN NetAlertX, цільовий пристрій не відповідатиме.",
|
||||||
"DevDetail_Type_hover": "Тип пристрою. Якщо вибрати будь-який із попередньо визначених мережевих пристроїв (наприклад, точку доступу, брандмауер, маршрутизатор, комутатор...), вони відображатимуться в конфігурації дерева мережі як можливий головний вузол мережі..",
|
"DevDetail_Type_hover": "Тип пристрою. Якщо ви оберете будь-який із попередньо визначених мережевих пристроїв (наприклад: точка доступу, брандмауер, маршрутизатор, комутатор…), вони відображатимуться в конфігурації дерева мережі як можливі батьківські вузли мережі.",
|
||||||
"DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.",
|
"DevDetail_Vendor_hover": "Постачальник має бути автоматично визначений. Ви можете перезаписати або додати власне значення.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on- LAN",
|
||||||
"DevDetail_button_AddIcon": "Додати новий значок",
|
"DevDetail_button_AddIcon": "Додати новий значок",
|
||||||
@@ -194,12 +196,13 @@
|
|||||||
"DevDetail_button_Save": "зберегти",
|
"DevDetail_button_Save": "зберегти",
|
||||||
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
|
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
|
||||||
"Device_MultiEdit": "Мультиредагування",
|
"Device_MultiEdit": "Мультиредагування",
|
||||||
"Device_MultiEdit_Backup": "Обережно, введення неправильних значень нижче порушить налаштування. Спершу створіть резервну копію вашої бази даних або конфігурації пристроїв (<a href=\"php/server/devices.php?action=ExportCSV\">натисніть, щоб завантажити <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Прочитайте, як відновити пристрої з цього файлу, у <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Документація резервних копій</a>.",
|
"Device_MultiEdit_Backup": "Обережно, введення неправильних значень нижче призведе до порушення роботи налаштувань. Спочатку створіть резервну копію бази даних або конфігурації пристроїв (<a href=\"php/server/devices.php?action=ExportCSV\">натисніть, щоб завантажити <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Прочитайте, як відновити пристрої з цього файлу, у <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">документації щодо резервних копій</a>. Щоб застосувати зміни, натисніть значок <b>Зберегти<i class=\"fa-solid fa-save\"></i></b> у кожному полі, яке потрібно оновити.",
|
||||||
"Device_MultiEdit_Fields": "Редагувати поля:",
|
"Device_MultiEdit_Fields": "Редагувати поля:",
|
||||||
"Device_MultiEdit_MassActions": "Масові акції:",
|
"Device_MultiEdit_MassActions": "Масові акції:",
|
||||||
"Device_MultiEdit_Tooltip": "Обережно. Якщо натиснути це, значення зліва буде застосовано до всіх пристроїв, вибраних вище.",
|
"Device_MultiEdit_Tooltip": "Обережно. Якщо натиснути це, значення зліва буде застосовано до всіх пристроїв, вибраних вище.",
|
||||||
"Device_Searchbox": "Пошук",
|
"Device_Searchbox": "Пошук",
|
||||||
"Device_Shortcut_AllDevices": "Мої пристрої",
|
"Device_Shortcut_AllDevices": "Мої пристрої",
|
||||||
|
"Device_Shortcut_AllNodes": "Усі вузли",
|
||||||
"Device_Shortcut_Archived": "Архівовано",
|
"Device_Shortcut_Archived": "Архівовано",
|
||||||
"Device_Shortcut_Connected": "Підключено",
|
"Device_Shortcut_Connected": "Підключено",
|
||||||
"Device_Shortcut_Devices": "Пристрої",
|
"Device_Shortcut_Devices": "Пристрої",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Сповіщення вниз",
|
"Device_TableHead_AlertDown": "Сповіщення вниз",
|
||||||
"Device_TableHead_Connected_Devices": "Зв'язки",
|
"Device_TableHead_Connected_Devices": "Зв'язки",
|
||||||
"Device_TableHead_CustomProps": "Реквізит / дії",
|
"Device_TableHead_CustomProps": "Реквізит / дії",
|
||||||
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "улюблений",
|
"Device_TableHead_Favorite": "улюблений",
|
||||||
"Device_TableHead_FirstSession": "Перша сесія",
|
"Device_TableHead_FirstSession": "Перша сесія",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Ім'я",
|
"Device_TableHead_Name": "Ім'я",
|
||||||
"Device_TableHead_NetworkSite": "Мережевий сайт",
|
"Device_TableHead_NetworkSite": "Мережевий сайт",
|
||||||
"Device_TableHead_Owner": "Власник",
|
"Device_TableHead_Owner": "Власник",
|
||||||
|
"Device_TableHead_ParentRelType": "Тип зв'язку",
|
||||||
"Device_TableHead_Parent_MAC": "Узел родительской сети",
|
"Device_TableHead_Parent_MAC": "Узел родительской сети",
|
||||||
"Device_TableHead_Port": "Порт",
|
"Device_TableHead_Port": "Порт",
|
||||||
"Device_TableHead_PresentLastScan": "Присутність",
|
"Device_TableHead_PresentLastScan": "Присутність",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Вимагати мережевих карт онлайн",
|
||||||
"Device_TableHead_RowID": "ID рядка",
|
"Device_TableHead_RowID": "ID рядка",
|
||||||
"Device_TableHead_Rowid": "ID рядка",
|
"Device_TableHead_Rowid": "ID рядка",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -250,7 +256,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Ключ шифрування",
|
"ENCRYPTION_KEY_name": "Ключ шифрування",
|
||||||
"Email_display_name": "Електронна пошта",
|
"Email_display_name": "Електронна пошта",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Завантаження...",
|
"Events_Loading": "Завантаження…",
|
||||||
"Events_Periodselect_All": "Вся інформація",
|
"Events_Periodselect_All": "Вся інформація",
|
||||||
"Events_Periodselect_LastMonth": "Останній місяць",
|
"Events_Periodselect_LastMonth": "Останній місяць",
|
||||||
"Events_Periodselect_LastWeek": "Минулий тиждень",
|
"Events_Periodselect_LastWeek": "Минулий тиждень",
|
||||||
@@ -340,7 +346,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Завантажені плагіни",
|
"LOADED_PLUGINS_name": "Завантажені плагіни",
|
||||||
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
|
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
|
||||||
"LOG_LEVEL_name": "Друк додаткового протоколювання",
|
"LOG_LEVEL_name": "Друк додаткового протоколювання",
|
||||||
"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\">документи SETPWD</a>, якщо у вас виникли проблеми з входом.",
|
"Login_Info": "Паролі встановлюються за допомогою плагіна Set Password. Перегляньте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">документи SETPWD</a>, якщо у вас виникли проблеми з входом.",
|
||||||
@@ -358,6 +364,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": "Інструменти обслуговування",
|
||||||
@@ -440,7 +451,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Налаштування інтерфейсу користувача",
|
"Maintenance_Tools_Tab_UISettings": "Налаштування інтерфейсу користувача",
|
||||||
"Maintenance_arp_status": "Статус сканування",
|
"Maintenance_arp_status": "Статус сканування",
|
||||||
"Maintenance_arp_status_off": "наразі вимкнено",
|
"Maintenance_arp_status_off": "наразі вимкнено",
|
||||||
"Maintenance_arp_status_on": "сканування, що зараз виконується",
|
"Maintenance_arp_status_on": "триває сканування",
|
||||||
"Maintenance_built_on": "Побудований на",
|
"Maintenance_built_on": "Побудований на",
|
||||||
"Maintenance_current_version": "Ви в курсі подій. Перегляньте, над чим <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я працюю</a>.",
|
"Maintenance_current_version": "Ви в курсі подій. Перегляньте, над чим <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">я працюю</a>.",
|
||||||
"Maintenance_database_backup": "Резервне копіювання DB",
|
"Maintenance_database_backup": "Резервне копіювання DB",
|
||||||
@@ -550,7 +561,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "Минулий онлайн (пропущений матч)",
|
"Presence_Key_OnlinePastMiss": "Минулий онлайн (пропущений матч)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Пристрій був онлайн, але зараз офлайн, але початковий сеанс може бути відсутнім або містить суперечливі дані. (може бути помилка - будь ласка, надішліть PR, якщо ви знаєте, як це виправити - я трохи загубився в коді тут)",
|
"Presence_Key_OnlinePastMiss_desc": "Пристрій був онлайн, але зараз офлайн, але початковий сеанс може бути відсутнім або містить суперечливі дані. (може бути помилка - будь ласка, надішліть PR, якщо ви знаєте, як це виправити - я трохи загубився в коді тут)",
|
||||||
"Presence_Key_OnlinePast_desc": "Пристрій був онлайн, але зараз офлайн.",
|
"Presence_Key_OnlinePast_desc": "Пристрій був онлайн, але зараз офлайн.",
|
||||||
"Presence_Loading": "Завантаження...",
|
"Presence_Loading": "Завантаження…",
|
||||||
"Presence_Shortcut_AllDevices": "Мої пристрої",
|
"Presence_Shortcut_AllDevices": "Мої пристрої",
|
||||||
"Presence_Shortcut_Archived": "Архівовано",
|
"Presence_Shortcut_Archived": "Архівовано",
|
||||||
"Presence_Shortcut_Connected": "Підключено",
|
"Presence_Shortcut_Connected": "Підключено",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Вибране",
|
"Presence_Shortcut_Favorites": "Вибране",
|
||||||
"Presence_Shortcut_NewDevices": "Нові пристрої",
|
"Presence_Shortcut_NewDevices": "Нові пристрої",
|
||||||
"Presence_Title": "Присутність за пристроєм",
|
"Presence_Title": "Присутність за пристроєм",
|
||||||
|
"REFRESH_FQDN_description": "Повторно сканує всі пристрої та оновлює їхнє повністю кваліфіковане доменне ім'я (FQDN). Якщо вимкнено, для покращення продуктивності скануються лише пристрої без відомого імені. У цьому випадку повне доменне ім'я (FQDN) оновлюється лише під час початкового виявлення пристрою.",
|
||||||
|
"REFRESH_FQDN_name": "Оновити FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Ця URL-адреса використовується як основа для створення посилань у звітах HTML (наприклад, електронних листах). Введіть повну URL-адресу, починаючи з <code>http://</code>, включаючи номер порту (без скісної риски <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Ця URL-адреса використовується як основа для створення посилань у звітах HTML (наприклад, електронних листах). Введіть повну URL-адресу, починаючи з <code>http://</code>, включаючи номер порту (без скісної риски <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "URL-адреса NetAlertX",
|
"REPORT_DASHBOARD_URL_name": "URL-адреса NetAlertX",
|
||||||
"REPORT_ERROR": "Сторінка, яку ви шукаєте, тимчасово недоступна, спробуйте ще раз через кілька секунд",
|
"REPORT_ERROR": "Сторінка, яку ви шукаєте, тимчасово недоступна, спробуйте ще раз через кілька секунд",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "Тригер",
|
"WF_Trigger": "Тригер",
|
||||||
"WF_Trigger_event_type": "Тип події",
|
"WF_Trigger_event_type": "Тип події",
|
||||||
"WF_Trigger_type": "Тип тригера",
|
"WF_Trigger_type": "Тип тригера",
|
||||||
"add_icon_event_icon": "фа-квадрат-плюс",
|
|
||||||
"add_icon_event_tooltip": "додати новий значок",
|
"add_icon_event_tooltip": "додати новий значок",
|
||||||
"add_option_event_icon": "фа-квадрат-плюс",
|
|
||||||
"add_option_event_tooltip": "Додати нове значення",
|
"add_option_event_tooltip": "Додати нове значення",
|
||||||
"copy_icons_event_icon": "фа-копія",
|
|
||||||
"copy_icons_event_tooltip": "Перезаписати піктограми всіх пристроїв одним типом пристрою",
|
"copy_icons_event_tooltip": "Перезаписати піктограми всіх пристроїв одним типом пристрою",
|
||||||
"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": "Виконання спеціальної події",
|
||||||
"go_to_node_event_icon": "fa-квадрат-вгору-вправо",
|
|
||||||
"go_to_node_event_tooltip": "Перейдіть на сторінку Мережа даного вузла",
|
"go_to_node_event_tooltip": "Перейдіть на сторінку Мережа даного вузла",
|
||||||
"new_version_available": "Доступна нова версія.",
|
"new_version_available": "Доступна нова версія.",
|
||||||
"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": "Час сповіщення:",
|
||||||
"run_event_icon": "fa- play",
|
|
||||||
"run_event_tooltip": "Увімкніть налаштування та збережіть зміни, перш ніж запускати його.",
|
"run_event_tooltip": "Увімкніть налаштування та збережіть зміни, перш ніж запускати його.",
|
||||||
"settings_core_icon": "фа-твердий фа-самоцвіт",
|
"settings_core_icon": "фа-твердий фа-самоцвіт",
|
||||||
"settings_core_label": "Ядро",
|
"settings_core_label": "Ядро",
|
||||||
@@ -727,7 +735,7 @@
|
|||||||
"settings_imported_label": "Налаштування імпортовано",
|
"settings_imported_label": "Налаштування імпортовано",
|
||||||
"settings_missing": "Не всі налаштування завантажено! Високе навантаження на базу даних або послідовність запуску програми. Натисніть кнопку 🔄 перезавантажити вгорі.",
|
"settings_missing": "Не всі налаштування завантажено! Високе навантаження на базу даних або послідовність запуску програми. Натисніть кнопку 🔄 перезавантажити вгорі.",
|
||||||
"settings_missing_block": "Помилка: налаштування не завантажено належним чином. Натисніть кнопку перезавантаження 🔄 вгорі або подробиці перевірте в журналі браузера (F12).",
|
"settings_missing_block": "Помилка: налаштування не завантажено належним чином. Натисніть кнопку перезавантаження 🔄 вгорі або подробиці перевірте в журналі браузера (F12).",
|
||||||
"settings_old": "Імпорт налаштувань і повторна ініціалізація...",
|
"settings_old": "Імпорт налаштувань та повторна ініціалізація…",
|
||||||
"settings_other_scanners": "Інші наразі ввімкнені плагіни сканера, не пов’язані з пристроєм.",
|
"settings_other_scanners": "Інші наразі ввімкнені плагіни сканера, не пов’язані з пристроєм.",
|
||||||
"settings_other_scanners_icon": "fa -solid fa-recycle",
|
"settings_other_scanners_icon": "fa -solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Інші сканери",
|
"settings_other_scanners_label": "Інші сканери",
|
||||||
@@ -736,10 +744,10 @@
|
|||||||
"settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Завантажте більше видавців за допомогою параметра <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Видавці",
|
"settings_publishers_label": "Видавці",
|
||||||
"settings_readonly": "Неможливо ЧИТАТИ або ЗАПИСАТИ <code>app.conf</code>. Спробуйте перезапустити контейнер і прочитайте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">документацію щодо дозволів на файли</a>",
|
"settings_readonly": "Неможливо ЧИТАТИ або ЗАПИСАТИ <code>app.conf</code>. Спробуйте перезапустити контейнер і прочитайте <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">документацію щодо дозволів на файли</a>",
|
||||||
"settings_saved": "<br/>Налаштування збережено. <br/> Перезавантаження... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Налаштування збережено. <br/> Перезавантаження… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "фа-твердий фа-передача",
|
"settings_system_icon": "фа-твердий фа-передача",
|
||||||
"settings_system_label": "Система",
|
"settings_system_label": "Система",
|
||||||
"settings_update_item_warning": "Оновіть значення нижче. Слідкуйте за попереднім форматом. <b>Перевірка не виконана.</b>",
|
"settings_update_item_warning": "Оновіть значення нижче. Слідкуйте за попереднім форматом. <b>Перевірка не виконана.</b>",
|
||||||
"test_event_icon": "fa-vial-circle- check",
|
"test_event_tooltip": "Перш ніж перевіряти налаштування, збережіть зміни.",
|
||||||
"test_event_tooltip": "Перш ніж перевіряти налаштування, збережіть зміни."
|
"go_to_device_event_tooltip": "Перейдіть до пристрою"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,16 +59,17 @@
|
|||||||
"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>New Device</b> 标记将自动取消。",
|
||||||
"CLEAR_NEW_FLAG_name": "",
|
"CLEAR_NEW_FLAG_name": "清除新标记",
|
||||||
"CustProps_cant_remove": "",
|
"CustProps_cant_remove": "无法移除,至少需要保留一个属性。",
|
||||||
"DAYS_TO_KEEP_EVENTS_description": "这是维护设置。它指定将保留的事件条目的天数。所有较旧的事件将被定期删除。也适用于插件事件历史记录。",
|
"DAYS_TO_KEEP_EVENTS_description": "这是维护设置。它指定将保留的事件条目的天数。所有较旧的事件将被定期删除。也适用于插件事件历史记录。",
|
||||||
"DAYS_TO_KEEP_EVENTS_name": "删除早于",
|
"DAYS_TO_KEEP_EVENTS_name": "删除早于",
|
||||||
"DISCOVER_PLUGINS_description": "",
|
"DISCOVER_PLUGINS_description": "禁用此选项可加快初始化和设置保存的速度。当禁用时,插件不会被发现,并且您无法将新插件添加到 <code>LOADED_PLUGINS</code>设置中。",
|
||||||
"DISCOVER_PLUGINS_name": "",
|
"DISCOVER_PLUGINS_name": "",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"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_CustomProperties_Title": "",
|
"DevDetail_CustomProperties_Title": "自定义属性",
|
||||||
"DevDetail_CustomProps_reset_info": "",
|
"DevDetail_CustomProps_reset_info": "",
|
||||||
"DevDetail_DisplayFields_Title": "",
|
"DevDetail_DisplayFields_Title": "",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "提醒所有事件",
|
"DevDetail_EveandAl_AlertAllEvents": "提醒所有事件",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "类型",
|
"DevDetail_MainInfo_Type": "类型",
|
||||||
"DevDetail_MainInfo_Vendor": "制造商",
|
"DevDetail_MainInfo_Vendor": "制造商",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "选择当前设备连接到的父网络设备,以填充网络树。",
|
"DevDetail_Network_Node_hover": "选择当前设备连接到的父网络设备,以填充网络树。",
|
||||||
"DevDetail_Network_Port_hover": "此设备连接到父网络设备上的端口。如果留空,则网络树中会显示一个 wifi 图标。",
|
"DevDetail_Network_Port_hover": "此设备连接到父网络设备上的端口。如果留空,则网络树中会显示一个 wifi 图标。",
|
||||||
"DevDetail_Nmap_Scans": "手动 Nmap 扫描",
|
"DevDetail_Nmap_Scans": "手动 Nmap 扫描",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "小心。 单击此按钮会将左侧的值应用到上面选择的所有设备。",
|
"Device_MultiEdit_Tooltip": "小心。 单击此按钮会将左侧的值应用到上面选择的所有设备。",
|
||||||
"Device_Searchbox": "搜索",
|
"Device_Searchbox": "搜索",
|
||||||
"Device_Shortcut_AllDevices": "我的设备",
|
"Device_Shortcut_AllDevices": "我的设备",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "已存档",
|
"Device_Shortcut_Archived": "已存档",
|
||||||
"Device_Shortcut_Connected": "在线设备",
|
"Device_Shortcut_Connected": "在线设备",
|
||||||
"Device_Shortcut_Devices": "设备管理",
|
"Device_Shortcut_Devices": "设备管理",
|
||||||
@@ -211,6 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "",
|
"Device_TableHead_AlertDown": "",
|
||||||
"Device_TableHead_Connected_Devices": "链接",
|
"Device_TableHead_Connected_Devices": "链接",
|
||||||
"Device_TableHead_CustomProps": "",
|
"Device_TableHead_CustomProps": "",
|
||||||
|
"Device_TableHead_FQDN": "",
|
||||||
"Device_TableHead_Favorite": "收藏",
|
"Device_TableHead_Favorite": "收藏",
|
||||||
"Device_TableHead_FirstSession": "加入",
|
"Device_TableHead_FirstSession": "加入",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -225,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "名字",
|
"Device_TableHead_Name": "名字",
|
||||||
"Device_TableHead_NetworkSite": "网络站点",
|
"Device_TableHead_NetworkSite": "网络站点",
|
||||||
"Device_TableHead_Owner": "所有者",
|
"Device_TableHead_Owner": "所有者",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "父节点",
|
"Device_TableHead_Parent_MAC": "父节点",
|
||||||
"Device_TableHead_Port": "端口",
|
"Device_TableHead_Port": "端口",
|
||||||
"Device_TableHead_PresentLastScan": "",
|
"Device_TableHead_PresentLastScan": "",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "排行",
|
"Device_TableHead_RowID": "排行",
|
||||||
"Device_TableHead_Rowid": "排行",
|
"Device_TableHead_Rowid": "排行",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -358,6 +364,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": "维护工具",
|
||||||
@@ -559,6 +570,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "收藏夹",
|
"Presence_Shortcut_Favorites": "收藏夹",
|
||||||
"Presence_Shortcut_NewDevices": "新设备",
|
"Presence_Shortcut_NewDevices": "新设备",
|
||||||
"Presence_Title": "按设备显示状态",
|
"Presence_Title": "按设备显示状态",
|
||||||
|
"REFRESH_FQDN_description": "",
|
||||||
|
"REFRESH_FQDN_name": "",
|
||||||
"REPORT_DASHBOARD_URL_description": "此 URL 用作生成 HTML 报告(例如电子邮件)中链接的基础。输入以 <code>http://</code> 开头的完整 URL,包括端口号(无尾部斜杠 <code>/</code>)。",
|
"REPORT_DASHBOARD_URL_description": "此 URL 用作生成 HTML 报告(例如电子邮件)中链接的基础。输入以 <code>http://</code> 开头的完整 URL,包括端口号(无尾部斜杠 <code>/</code>)。",
|
||||||
"REPORT_DASHBOARD_URL_name": "NetAlertX 网址",
|
"REPORT_DASHBOARD_URL_name": "NetAlertX 网址",
|
||||||
"REPORT_ERROR": "您正在浏览的页面暂时不可用,请稍后重试",
|
"REPORT_ERROR": "您正在浏览的页面暂时不可用,请稍后重试",
|
||||||
@@ -696,23 +709,18 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "",
|
"add_icon_event_tooltip": "",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "",
|
"add_option_event_tooltip": "",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
"copy_icons_event_tooltip": "",
|
||||||
"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": "执行自组织网络事件",
|
||||||
"go_to_node_event_icon": "",
|
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "通知guid:",
|
"report_guid": "通知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": "通知时间:",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "在运行之前,请先启用设置并保存更改。",
|
"run_event_tooltip": "在运行之前,请先启用设置并保存更改。",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "核",
|
"settings_core_label": "核",
|
||||||
@@ -740,6 +748,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "系统",
|
"settings_system_label": "系统",
|
||||||
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
|
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。<b>未执行验证。</b>",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": "在测试设置之前,请先保存更改。"
|
"test_event_tooltip": "在测试设置之前,请先保存更改。"
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ if ($nax_WebProtection == 'true') {
|
|||||||
$isLoggedIn = isset($_SESSION['login']) && $_SESSION['login'] == 1;
|
$isLoggedIn = isset($_SESSION['login']) && $_SESSION['login'] == 1;
|
||||||
|
|
||||||
// Determine if the user should be redirected
|
// Determine if the user should be redirected
|
||||||
if ($isLoggedIn || $isLogonPage || (isset($_COOKIE[COOKIE_SAVE_LOGIN_NAME]) && $nax_Password == $_COOKIE[COOKIE_SAVE_LOGIN_NAME])) {
|
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
|
// Logged in or stay on this page if we are on the index.php already
|
||||||
} else {
|
} else {
|
||||||
// We need to redirect
|
// We need to redirect
|
||||||
|
|||||||
@@ -11,3 +11,31 @@ You need to bring your own separate Apprise instance to use this publisher gatew
|
|||||||
- Go to settings and fill in relevant details.
|
- Go to settings and fill in relevant details.
|
||||||
- Use the Apprise container's URL in the `APPRISE_HOST` setting.
|
- Use the Apprise container's URL in the `APPRISE_HOST` setting.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Telegram
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### Troubleshooting
|
||||||
|
|
||||||
|
1. Replace `<bottoken>` and `<chatid>` with your values.
|
||||||
|
|
||||||
|
2. Test telegram notification in browser
|
||||||
|
|
||||||
|
```
|
||||||
|
https://api.telegram.org/bot<bottoken>/sendMessage?chat_id=<chatid>&text=%40%40TEXT%40%40
|
||||||
|
```
|
||||||
|
3. Test apprise notification in console (replace `192.168.1.2:9999` with your apprise ip and port)
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -X POST -d '{"urls":"tgram://<bottoken>/<chatid>","body":"test body from curl","title":"test title from curl"}' -H "Content-Type: application/json" "http://192.168.1.2:9999/notify/"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Test from the docker apprise container console
|
||||||
|
```
|
||||||
|
apprise -vv -t "Test Message from apprise console" -b "Test Message from apprise console" \
|
||||||
|
tgram://<bottoken>/<chatid>/
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
front/plugins/_publisher_apprise/apprise_telegram.png
Executable file
|
After Width: | Height: | Size: 103 KiB |
@@ -66,14 +66,13 @@ def main():
|
|||||||
new_notifications = notifications.getNew()
|
new_notifications = notifications.getNew()
|
||||||
|
|
||||||
# mylog('verbose', [f'[{pluginName}] new_notifications: ', new_notifications])
|
# mylog('verbose', [f'[{pluginName}] new_notifications: ', new_notifications])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_SERVER: ', get_setting_value("SMTP_SERVER")])
|
mylog('verbose', [f'[{pluginName}] SMTP_SERVER: ', get_setting_value("SMTP_SERVER")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_PORT: ', get_setting_value("SMTP_PORT")])
|
mylog('verbose', [f'[{pluginName}] SMTP_PORT: ', get_setting_value("SMTP_PORT")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_SKIP_LOGIN: ', get_setting_value("SMTP_SKIP_LOGIN")])
|
mylog('verbose', [f'[{pluginName}] SMTP_SKIP_LOGIN: ', get_setting_value("SMTP_SKIP_LOGIN")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_USER: ', get_setting_value("SMTP_USER")])
|
# mylog('verbose', [f'[{pluginName}] SMTP_USER: ', get_setting_value("SMTP_USER")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")])
|
# mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")])
|
||||||
|
mylog('verbose', [f'[{pluginName}] SMTP_SKIP_TLS: ', get_setting_value("SMTP_SKIP_TLS")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_SKIP_TLS: ', get_setting_value("SMTP_SKIP_TLS")])
|
mylog('verbose', [f'[{pluginName}] SMTP_FORCE_SSL: ', get_setting_value("SMTP_FORCE_SSL")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_FORCE_SSL: ', get_setting_value("SMTP_FORCE_SSL")])
|
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")])
|
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_FROM: ', get_setting_value("SMTP_REPORT_FROM")])
|
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_FROM: ', get_setting_value("SMTP_REPORT_FROM")])
|
||||||
|
|
||||||
|
|||||||
@@ -527,6 +527,34 @@
|
|||||||
"string": "All NTFY messages have a priority, which defines how urgently your phone notifies you. On Android, you can set custom notification sounds and vibration patterns on your phone to map to these priorities (see <a href=\"https://docs.ntfy.sh/subscribe/phone/\">Android config</a>)."
|
"string": "All NTFY messages have a priority, which defines how urgently your phone notifies you. On Android, you can set custom notification sounds and vibration patterns on your phone to map to these priorities (see <a href=\"https://docs.ntfy.sh/subscribe/phone/\">Android config</a>)."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "VERIFY_SSL",
|
||||||
|
"type": {
|
||||||
|
"dataType": "boolean",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"elementType": "input",
|
||||||
|
"elementOptions": [{ "type": "checkbox" }],
|
||||||
|
"transformers": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_value": true,
|
||||||
|
"options": [],
|
||||||
|
"localized": ["name", "description"],
|
||||||
|
"name": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "Verify SSL"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": [
|
||||||
|
{
|
||||||
|
"language_code": "en_us",
|
||||||
|
"string": "Enable TLS support. Disable if you are using a self-signed certificate."
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||