Initialer Import des AssetManagers
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
.git
|
||||
.github
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
__pycache__
|
||||
*.py[cod]
|
||||
.venv
|
||||
venv
|
||||
.pytest_cache
|
||||
.mypy_cache
|
||||
.ruff_cache
|
||||
dist
|
||||
*.zip
|
||||
*.tar
|
||||
*.tar.gz
|
||||
*.db
|
||||
*.sqlite*
|
||||
*.log
|
||||
data/postgres
|
||||
data/config/config.json
|
||||
data/config/APPINFO.json
|
||||
data/uploads
|
||||
data/logs
|
||||
data/backups
|
||||
data/backup
|
||||
data/scripts
|
||||
app/static/uploads/*
|
||||
!app/static/uploads/.gitkeep
|
||||
app/main_old.py
|
||||
PRUEFEN-0.5.5.5.sh
|
||||
@@ -0,0 +1,11 @@
|
||||
APP_PORT=8088
|
||||
POSTGRES_DB=assetmanager
|
||||
POSTGRES_USER=assetmanager
|
||||
POSTGRES_PASSWORD=CHANGE_ME
|
||||
SESSION_SECRET=CHANGE_ME_LONG_RANDOM
|
||||
MESHCENTRAL_PASSWORD=
|
||||
LDAP_BIND_PASSWORD=
|
||||
LOCAL_ADMIN_USERNAME=emergency-admin
|
||||
LOCAL_ADMIN_PASSWORD=CHANGE_ME_MIN_12_CHARS
|
||||
BACKUP_INTERVAL_HOURS=8
|
||||
BACKUP_RETENTION_DAYS=3
|
||||
@@ -0,0 +1,12 @@
|
||||
* text=auto eol=lf
|
||||
*.cmd text eol=crlf
|
||||
*.bat text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.webp binary
|
||||
*.xlsx binary
|
||||
*.zip binary
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
# Secrets and local configuration
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
.public-release-local-patterns
|
||||
data/config/config.json
|
||||
data/config/APPINFO.json
|
||||
|
||||
# Runtime and user data
|
||||
data/postgres/*
|
||||
!data/postgres/.gitkeep
|
||||
data/uploads/*
|
||||
!data/uploads/.gitkeep
|
||||
data/logs/*
|
||||
!data/logs/.gitkeep
|
||||
data/backups/*
|
||||
!data/backups/.gitkeep
|
||||
data/backup/*
|
||||
!data/backup/.gitkeep
|
||||
data/scripts/*
|
||||
!data/scripts/.gitkeep
|
||||
app/static/uploads/*
|
||||
!app/static/uploads/.gitkeep
|
||||
|
||||
# Databases, logs, backups and generated files
|
||||
*.db
|
||||
*.sqlite
|
||||
*.sqlite3
|
||||
*.log
|
||||
*.bak
|
||||
*.backup
|
||||
*.tar
|
||||
*.tar.gz
|
||||
*.zip
|
||||
dist/
|
||||
THIRD_PARTY_LICENSES/
|
||||
|
||||
# Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
.pytest_cache/
|
||||
.mypy_cache/
|
||||
.ruff_cache/
|
||||
.venv/
|
||||
venv/
|
||||
|
||||
# IDE and operating system
|
||||
.vscode/
|
||||
.idea/
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
@@ -0,0 +1,5 @@
|
||||
# One private literal per line, case-insensitive.
|
||||
# Copy this file to .public-release-local-patterns and add organization names,
|
||||
# internal DNS suffixes, account names and hostnames used in your environment.
|
||||
internal-company-name
|
||||
internal-account-name
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "AssetManager",
|
||||
"author": "",
|
||||
"organization": "",
|
||||
"contact": "",
|
||||
"website": "",
|
||||
"repository": "",
|
||||
"license": "Apache-2.0",
|
||||
"copyright": "",
|
||||
"description": "Asset management with optional MeshCentral integration through MeshCtrl"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "AssetManager",
|
||||
"author": "Roland Reich",
|
||||
"organization": "Jusaro systems",
|
||||
"contact": "",
|
||||
"website": "",
|
||||
"repository": "",
|
||||
"license": "Apache-2.0",
|
||||
"copyright": "Copyright © 2026 Roland Reich",
|
||||
"description": "Assetmanagement mit optionaler MeshCentral-Integration über MeshCtrl"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
# Mitwirken am AssetManager
|
||||
|
||||
Beiträge, Fehlerberichte und Forks sind willkommen.
|
||||
|
||||
## Pull Requests
|
||||
|
||||
- Ein Pull Request ist ein Vorschlag. Die Projektpflege entscheidet, ob, wann und in welcher Form er aufgenommen wird.
|
||||
- Durch das bewusste Einreichen eines Beitrags bestätigst du, dass du zur Veröffentlichung berechtigt bist und der Beitrag unter der Apache License 2.0 lizenziert werden darf.
|
||||
- Kopiere keinen fremden Quellcode, keine Grafiken und keine Texte ohne nachweisbar kompatible Lizenz und erforderliche Urheber- oder Lizenzhinweise.
|
||||
- Nenne andere Produkte in öffentlichem Programmcode, Kommentaren, Versionshinweisen und Dokumentationen nur, wenn eine tatsächliche technische Integration, Abhängigkeit oder erforderliche Kompatibilität beschrieben wird. Reine Vergleiche mit anderen Produkten gehören nicht in den veröffentlichten Quellstand.
|
||||
- Änderungen sollen möglichst auf den betroffenen Bereich begrenzt sein und bestehende Funktionen nicht ohne sachlichen Grund verändern.
|
||||
- Neue sichtbare Texte müssen vollständig in das vorhandene Übersetzungssystem aufgenommen werden.
|
||||
- Neue oder geänderte Oberflächen müssen mit dem bestehenden Hell- und Darkmode funktionieren.
|
||||
- Aktualisiere bei einem Release `VERSION`, `app/version.py`, README und den passenden Versionshinweis.
|
||||
|
||||
## Vor dem Einreichen
|
||||
|
||||
```bash
|
||||
python tools/check_public_release.py
|
||||
python tools/check_translations.py
|
||||
python tools/validate_release.py
|
||||
```
|
||||
|
||||
## Drittkomponenten
|
||||
|
||||
Neue Abhängigkeiten müssen vor Aufnahme auf Lizenzkompatibilität, Herkunft, Wartungszustand und Sicherheitsrisiken geprüft werden. Ergänze `THIRD_PARTY_NOTICES.md` und stelle sicher, dass erforderliche Lizenz- oder NOTICE-Dateien im ausgelieferten Produkt erhalten bleiben.
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
LABEL org.opencontainers.image.title="AssetManager" \
|
||||
org.opencontainers.image.description="Self-hosted asset management with optional MeshCentral integration" \
|
||||
org.opencontainers.image.authors="Roland Reich" \
|
||||
org.opencontainers.image.licenses="Apache-2.0"
|
||||
|
||||
WORKDIR /opt/meshcentral
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends nodejs npm ca-certificates postgresql-client \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& npm install --omit=dev meshcentral
|
||||
|
||||
WORKDIR /app
|
||||
COPY requirements.txt .
|
||||
COPY tools/export_dependency_licenses.py /tmp/export_dependency_licenses.py
|
||||
RUN pip install --no-cache-dir -r requirements.txt \
|
||||
&& python /tmp/export_dependency_licenses.py \
|
||||
--output /app/THIRD_PARTY_LICENSES \
|
||||
--node-modules /opt/meshcentral/node_modules \
|
||||
&& rm /tmp/export_dependency_licenses.py
|
||||
|
||||
COPY app ./app
|
||||
COPY VERSION APPINFO.json LICENSE.txt THIRD_PARTY_NOTICES.md ./
|
||||
RUN mkdir -p /app/app/static/uploads /app/config /app/data/logs/sync /app/data/logs/diagnostics /data/backups
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
|
||||
CMD ["python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/api/software-callback/health', timeout=3).read()"]
|
||||
|
||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
ROOT="${1:-/srv/docker/assetmanager}"
|
||||
cd "$ROOT"
|
||||
echo "VERSION: $(cat VERSION)"
|
||||
grep -n 'APP_VERSION = "0.5.5.5"' app/version.py
|
||||
grep -n 'powershell -ExecutionPolicy Bypass -File' app/software_control.py
|
||||
if sed -n '/def _launch_uploaded_script/,/return _run_meshctrl/p' app/software_control.py | grep -q "action=.*--powershell"; then
|
||||
echo "FEHLER: _launch_uploaded_script enthält --powershell" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Dateien auf dem Host sind korrekt."
|
||||
@@ -0,0 +1,112 @@
|
||||
# AssetManager 0.5.5.27
|
||||
|
||||
AssetManager ist eine selbst gehostete Webanwendung zur Verwaltung von IT- und sonstigen Betriebsmitteln. Das Projekt wird unter der **Apache License 2.0** veröffentlicht und darf privat sowie kommerziell genutzt, verändert und weitergegeben werden.
|
||||
|
||||
## Funktionsumfang
|
||||
|
||||
- frei konfigurierbare Asset-Kategorien, Felder und Statuswerte
|
||||
- Assetlisten, Detailansichten, Historie, Ausgabe und Rückgabe
|
||||
- Excel-Import und -Export, Sammeländerungen, Zusammenführen und Baumansicht
|
||||
- Hardware- und Softwareinventur
|
||||
- Jobdefinitionen und Jobausführung mit Status, Callback, Wiederholung und Protokollen
|
||||
- lokale Benutzerverwaltung und optionale LDAP-Anmeldung
|
||||
- geschütztes lokales Notfallkonto auch bei aktiviertem LDAP
|
||||
- Rollen, Sichtbarkeitsregeln, Übersetzungen, Darkmode und anpassbare Darstellung
|
||||
- integrierte Sicherungs- und Wiederherstellungsfunktionen
|
||||
- optionale MeshCentral-Anbindung über die MeshCtrl-Kommandozeilenschnittstelle
|
||||
|
||||
## MeshCentral-Integration
|
||||
|
||||
Die Integration ist optional. AssetManager verwendet MeshCtrl für unterstützte Geräteabfragen und Remote-Aufträge. Es erfolgt kein direkter Zugriff auf die MeshCentral-Datenbank. MeshCentral und MeshCtrl sind eigenständige Drittprojekte und nicht Bestandteil dieses Repositorys; sie werden beim Docker-Build als Abhängigkeit installiert.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Docker Engine mit Docker Compose
|
||||
- ein für den Server geeigneter DNS-Name und HTTPS-Reverse-Proxy werden für produktive Installationen empfohlen
|
||||
- optional eine erreichbare MeshCentral-Instanz
|
||||
- optional LDAP/Active Directory
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Ändere in `.env` mindestens:
|
||||
|
||||
```env
|
||||
POSTGRES_PASSWORD=CHANGE_ME
|
||||
SESSION_SECRET=CHANGE_ME_LONG_RANDOM
|
||||
LOCAL_ADMIN_USERNAME=emergency-admin
|
||||
LOCAL_ADMIN_PASSWORD=CHANGE_ME_MIN_12_CHARS
|
||||
```
|
||||
|
||||
Danach:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Standardmäßig ist die Anwendung unter Port `8088` erreichbar.
|
||||
|
||||
## Persistente Daten
|
||||
|
||||
Die Laufzeitdaten werden über Bind-Mounts unter `data/` gespeichert:
|
||||
|
||||
```text
|
||||
data/
|
||||
├── config/ Anwendungskonfiguration
|
||||
├── postgres/ PostgreSQL-Datenbank
|
||||
├── uploads/ hochgeladene Dateien
|
||||
├── logs/ Protokolle und Diagnosedaten
|
||||
├── backups/ Anwendungssicherungen
|
||||
└── scripts/ bereitgestellte Skripte
|
||||
```
|
||||
|
||||
Diese Inhalte sowie `.env` enthalten möglicherweise Zugangsdaten oder personenbezogene beziehungsweise betriebliche Daten und dürfen nicht in ein öffentliches Repository aufgenommen werden.
|
||||
|
||||
## Aktualisierung
|
||||
|
||||
Vor einer Aktualisierung immer `.env` und den gesamten Ordner `data/` sichern. Danach den neuen Quellstand über den bestehenden Projektordner kopieren und ausführen:
|
||||
|
||||
```bash
|
||||
docker compose down
|
||||
docker compose up -d --build
|
||||
docker compose logs --tail=100 -f
|
||||
```
|
||||
|
||||
## Öffentlichen Quellstand erzeugen
|
||||
|
||||
Der Exporter erstellt ein bereinigtes ZIP mit genau einem Hauptordner `assetmanager/`:
|
||||
|
||||
```bash
|
||||
python tools/create_github_source.py
|
||||
```
|
||||
|
||||
Vor dem Export prüft das Skript unter anderem Versionen, Lizenzangaben, vertrauliche Laufzeitdateien und unerwünschte Produktvergleiche.
|
||||
|
||||
## Prüfungen
|
||||
|
||||
```bash
|
||||
python tools/check_public_release.py
|
||||
python tools/check_translations.py
|
||||
python tools/validate_release.py
|
||||
```
|
||||
|
||||
## Drittkomponenten
|
||||
|
||||
Die direkten Abhängigkeiten und ihre Lizenztypen sind in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) aufgeführt. Beim Docker-Build werden zusätzlich die Lizenzdateien der tatsächlich installierten Python- und Node.js-Pakete unter `/app/THIRD_PARTY_LICENSES/` gesammelt.
|
||||
|
||||
## Mitwirken
|
||||
|
||||
Beiträge und Forks sind willkommen. Hinweise zur Einreichung stehen in [CONTRIBUTING.md](CONTRIBUTING.md). Eine Einreichung ist ein Vorschlag; es besteht kein Anspruch auf Aufnahme in das offizielle Projekt.
|
||||
|
||||
## Sicherheit
|
||||
|
||||
Sicherheitsprobleme bitte nicht mit vertraulichen Details in einer öffentlichen Issue melden. Siehe [SECURITY.md](SECURITY.md).
|
||||
|
||||
## Lizenz
|
||||
|
||||
Copyright © 2026 Roland Reich
|
||||
|
||||
Lizenziert unter der Apache License, Version 2.0. Der vollständige Lizenztext befindet sich in [LICENSE.txt](LICENSE.txt).
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
# Sicherheitsrichtlinie
|
||||
|
||||
## Unterstützte Version
|
||||
|
||||
Sicherheitskorrekturen werden grundsätzlich für den aktuellen veröffentlichten Stand vorgesehen. Ältere Versionen sollten vor einer detaillierten Fehleranalyse zunächst aktualisiert werden.
|
||||
|
||||
## Schwachstellen melden
|
||||
|
||||
Bitte veröffentliche keine Zugangsdaten, Tokens, personenbezogenen Daten, internen Adressen oder ausnutzbaren Details in einer öffentlichen GitHub-Issue.
|
||||
|
||||
Nutze nach Möglichkeit die private Sicherheitsmeldung des GitHub-Repositorys. Falls diese Funktion nicht aktiviert ist, verwende den im Repository hinterlegten privaten Kontakt und gib nur die zur Reproduktion notwendigen Informationen weiter.
|
||||
|
||||
Eine Meldung sollte enthalten:
|
||||
|
||||
- betroffene Version
|
||||
- betroffene Funktion
|
||||
- nachvollziehbare Reproduktionsschritte
|
||||
- mögliche Auswirkungen
|
||||
- vorhandene Protokollauszüge ohne Geheimnisse
|
||||
|
||||
Tests dürfen nur an Systemen durchgeführt werden, für die eine ausdrückliche Berechtigung besteht.
|
||||
@@ -0,0 +1,182 @@
|
||||
# Vorschlag: Client-Kommunikation und spätere Softwareverteilung
|
||||
|
||||
## Zielbild
|
||||
|
||||
Ein kleiner Windows-Client („AssetManager Agent“) läuft auf jedem verwalteten
|
||||
Rechner. Das Netlogon-/GPO-Startskript installiert oder aktualisiert nur diesen
|
||||
Agenten. Die eigentlichen Inventur- und Softwareaufträge werden anschließend
|
||||
über eine abgesicherte HTTPS-API gesteuert.
|
||||
|
||||
## Warum nicht jeden Befehl direkt im Netlogon-Skript ausführen?
|
||||
|
||||
Ein Startskript ist gut für Bootstrap und Reparatur, aber ungeeignet für eine
|
||||
dauerhafte Auftragssteuerung:
|
||||
|
||||
- Benutzer- und Computerstart verzögern sich.
|
||||
- Rückmeldungen und Wiederholungen sind schwer nachzuvollziehen.
|
||||
- Ein Netzlaufwerk oder DC kann beim Start noch nicht erreichbar sein.
|
||||
- Softwareinstallationen benötigen Status, Timeout, Exitcode und Neustartlogik.
|
||||
- Passwörter oder globale API-Schlüssel dürfen nicht im Skript stehen.
|
||||
|
||||
## Empfohlene Komponenten
|
||||
|
||||
### 1. Bootstrap per GPO/Netlogon
|
||||
|
||||
Das bestehende Startskript:
|
||||
|
||||
1. legt `C:\ProgramData\AssetManager\agent` an,
|
||||
2. lädt eine signierte Agent-Version von einer internen HTTPS-Adresse,
|
||||
3. installiert einen Windows-Dienst,
|
||||
4. schreibt nur Server-URL und eine einmalige Registrierungskennung,
|
||||
5. startet den Dienst.
|
||||
|
||||
### 2. Geräteidentität
|
||||
|
||||
Beim ersten Start registriert sich der Agent mit:
|
||||
|
||||
- Computername,
|
||||
- AD-Domäne,
|
||||
- BIOS-Seriennummer,
|
||||
- Windows MachineGuid,
|
||||
- optional MeshCentral Node-ID.
|
||||
|
||||
Der Server erstellt danach ein gerätespezifisches Token. Dieses Token wird
|
||||
lokal mit Windows-DPAPI geschützt. Kein gemeinsamer API-Schlüssel für alle
|
||||
Clients.
|
||||
|
||||
### 3. Agent-Polling
|
||||
|
||||
Der Client fragt beispielsweise alle 5 Minuten per HTTPS ab:
|
||||
|
||||
`GET /api/agent/v1/jobs/next`
|
||||
|
||||
Antwort bei keinem Auftrag:
|
||||
|
||||
```json
|
||||
{"job": null, "next_poll_seconds": 300}
|
||||
```
|
||||
|
||||
Antwort bei einem Auftrag:
|
||||
|
||||
```json
|
||||
{
|
||||
"job": {
|
||||
"id": 4711,
|
||||
"type": "software_inventory",
|
||||
"expires_at": "2026-07-22T23:00:00Z",
|
||||
"payload": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Der Client bestätigt zuerst die Übernahme und meldet später Ergebnis,
|
||||
Exitcode, Logauszug und Zeitstempel zurück.
|
||||
|
||||
### 4. Softwareinventur
|
||||
|
||||
Erste Funktion des Agenten:
|
||||
|
||||
- installierte MSI-Programme aus 32- und 64-Bit-Registry auslesen,
|
||||
- optional AppX-Pakete,
|
||||
- Name, Version, Hersteller, Installationsdatum und UninstallString erfassen,
|
||||
- Ergebnis komprimiert an AssetManager senden,
|
||||
- serverseitig pro Asset versioniert speichern.
|
||||
|
||||
Nicht `Win32_Product` verwenden, da diese WMI-Klasse MSI-Reparaturen auslösen
|
||||
und sehr langsam sein kann.
|
||||
|
||||
### 5. Softwarekatalog für spätere Verteilung
|
||||
|
||||
Serverseitige Tabellen:
|
||||
|
||||
- `software_packages`
|
||||
- `software_package_versions`
|
||||
- `software_jobs`
|
||||
- `software_job_results`
|
||||
- `agent_devices`
|
||||
- `agent_tokens`
|
||||
- `agent_inventory_runs`
|
||||
|
||||
Ein Softwarepaket enthält:
|
||||
|
||||
- Name und Version,
|
||||
- Installationsquelle,
|
||||
- SHA-256-Hash,
|
||||
- Installationsbefehl,
|
||||
- Deinstallationsbefehl,
|
||||
- Erkennungsregel,
|
||||
- erlaubte Exitcodes,
|
||||
- Neustartverhalten,
|
||||
- Timeout,
|
||||
- Zielarchitektur.
|
||||
|
||||
### 6. Installationsquelle
|
||||
|
||||
Pakete können zunächst weiter auf dem DC liegen, zum Beispiel:
|
||||
|
||||
`\\fileserver\software\packages\ExampleApp\1.0\`
|
||||
|
||||
Der Auftrag enthält aber nicht beliebigen PowerShell-Code, sondern verweist
|
||||
auf eine freigegebene Paketdefinition. Der Agent prüft:
|
||||
|
||||
1. Paket ist serverseitig freigegeben,
|
||||
2. Quelle liegt in einem erlaubten UNC-Basispfad,
|
||||
3. Datei-Hash stimmt,
|
||||
4. Installationsbefehl entspricht der Paketdefinition.
|
||||
|
||||
Langfristig ist ein interner HTTPS-Paketdownload robuster als UNC, weil er
|
||||
ohne Maschinenzugriff auf die Freigabe funktioniert und leichter protokolliert
|
||||
werden kann.
|
||||
|
||||
### 7. Sicherheitsregeln
|
||||
|
||||
- ausschließlich HTTPS mit intern vertrauenswürdigem Zertifikat,
|
||||
- pro Gerät eigenes widerrufbares Token,
|
||||
- Jobs serverseitig signieren oder über authentisierte TLS-Verbindung liefern,
|
||||
- keine freie Shell-/PowerShell-Eingabe über die Weboberfläche,
|
||||
- Befehle nur aus fest definierten Jobtypen,
|
||||
- Paketdateien mit SHA-256 prüfen,
|
||||
- vollständiges Auditlog,
|
||||
- Rollen/Berechtigungen für Freigabe und Ausführung,
|
||||
- maximale Joblaufzeit und Wiederholungsgrenze,
|
||||
- Agent nur als SYSTEM, wenn der konkrete Job dies benötigt.
|
||||
|
||||
## Sinnvolle Ausbaustufen
|
||||
|
||||
### Phase 1 – Inventur
|
||||
|
||||
- Agent registrieren
|
||||
- Heartbeat und letzter Kontakt
|
||||
- Betriebssystem- und Softwareinventur
|
||||
- Anzeige im Assetdetail
|
||||
- manueller Inventurauftrag
|
||||
|
||||
### Phase 2 – Auftragsmodell
|
||||
|
||||
- generische Jobwarteschlange
|
||||
- Status: pending, claimed, running, success, failed, expired
|
||||
- Exitcodes, Logs, Timeout und Wiederholung
|
||||
- Live-Anzeige im AssetManager
|
||||
|
||||
### Phase 3 – Softwarekatalog
|
||||
|
||||
- Paketdefinitionen
|
||||
- Erkennungsregeln
|
||||
- Installation und Deinstallation
|
||||
- Einzelgerät und Gerätegruppe
|
||||
- Wartungsfenster
|
||||
|
||||
### Phase 4 – Rollout-Sicherheit
|
||||
|
||||
- Pilotgruppen
|
||||
- Genehmigungsworkflow
|
||||
- gestaffelte Verteilung
|
||||
- Abbruch bei Fehlerquote
|
||||
- Neustartkoordination
|
||||
|
||||
## Empfehlung für den nächsten Entwicklungsschritt
|
||||
|
||||
Zuerst nur Phase 1 umsetzen. Der Agent sollte noch keine beliebigen Befehle
|
||||
ausführen. Wenn Registrierung, Heartbeat und Softwareinventur stabil laufen,
|
||||
kann dieselbe gesicherte Kommunikation für die Jobwarteschlange und später
|
||||
die Softwareverteilung verwendet werden.
|
||||
@@ -0,0 +1,37 @@
|
||||
# Drittkomponenten und Lizenzhinweise
|
||||
|
||||
AssetManager wird unter der Apache License 2.0 veröffentlicht. Die folgenden Komponenten sind eigenständige Drittprojekte und unterliegen ihren jeweiligen Lizenzen.
|
||||
|
||||
## Direkt verwendete Komponenten
|
||||
|
||||
| Komponente | Verwendung | Lizenz laut Upstream |
|
||||
|---|---|---|
|
||||
| FastAPI | Webframework | MIT |
|
||||
| Uvicorn | ASGI-Server | BSD-3-Clause |
|
||||
| SQLAlchemy | Datenbankabstraktion | MIT |
|
||||
| Psycopg / psycopg-binary | PostgreSQL-Treiber | LGPL-3.0-only |
|
||||
| Jinja | HTML-Templates | BSD-3-Clause |
|
||||
| python-multipart | Formular- und Upload-Verarbeitung | Apache-2.0 |
|
||||
| pydantic-settings | Konfiguration aus Umgebungsvariablen | MIT |
|
||||
| itsdangerous | Signierte Sitzungsdaten | BSD-3-Clause |
|
||||
| ldap3 | optionale LDAP-Anbindung | LGPL-3.0-or-later |
|
||||
| Passlib | Passwort-Hashing | BSD-artige Lizenz; enthält zusätzliche Hinweise für eingebundene Bestandteile |
|
||||
| bcrypt | durch `passlib[bcrypt]` verwendete Hashing-Bibliothek | Apache-2.0 |
|
||||
| openpyxl | Excel-Import und -Export | MIT |
|
||||
| MeshCentral / MeshCtrl | optionale Integration und Remote-Aufträge | Apache-2.0 |
|
||||
| PostgreSQL Container-Image | Datenbankdienst | enthält PostgreSQL und weitere Betriebssystempakete mit eigenen Lizenzen |
|
||||
| Python Container-Image | Laufzeitbasis | enthält Python und Betriebssystempakete mit eigenen Lizenzen |
|
||||
|
||||
## Transitive Abhängigkeiten
|
||||
|
||||
Extras wie `uvicorn[standard]`, `psycopg[binary]` und `passlib[bcrypt]` installieren zusätzliche Pakete. Auch Node.js-Pakete können weitere Abhängigkeiten mitbringen. Maßgeblich sind immer die Lizenztexte der tatsächlich gebauten und ausgelieferten Versionen.
|
||||
|
||||
Der Docker-Build führt deshalb `tools/export_dependency_licenses.py` aus. Die gefundenen Lizenz-, NOTICE-, COPYING- und Copyright-Dateien werden im Image unter `/app/THIRD_PARTY_LICENSES/` abgelegt. Dieser Ordner sollte bei einer Weitergabe eines gebauten Images oder Offline-Pakets erhalten bleiben.
|
||||
|
||||
## Keine Rechteübertragung an Drittprojekten
|
||||
|
||||
Produktnamen und Marken der Drittprojekte gehören ihren jeweiligen Inhabern. Die Nennung beschreibt ausschließlich die technische Verwendung oder Integration und bedeutet keine Zugehörigkeit, Unterstützung oder Zertifizierung durch diese Projekte.
|
||||
|
||||
## Prüfung bei Änderungen
|
||||
|
||||
Bei jeder neuen oder aktualisierten Abhängigkeit müssen Lizenz und erforderliche Hinweise erneut geprüft werden. Automatisch gesammelte Metadaten ersetzen keine Prüfung der Original-Lizenztexte.
|
||||
@@ -0,0 +1,14 @@
|
||||
AssetManager 0.2.6.1 – MeshCentral Detailimport korrigiert
|
||||
|
||||
Änderung:
|
||||
- ListDevices --details liefert Datensätze in der Form {"node": {...}, "sys": {...}, "net": {...}}.
|
||||
- Die Node-ID wird nun korrekt aus node._id gelesen.
|
||||
- Hardware-, Netzwerk- und Systemfelder werden aus der Detailstruktur übernommen.
|
||||
- Getestet gegen eine reale MeshCtrl-Datei mit 60 Geräten: 60/60 Node-IDs erkannt.
|
||||
|
||||
Nicht enthalten und daher nicht überschrieben:
|
||||
- .env
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Logs
|
||||
@@ -0,0 +1,6 @@
|
||||
AssetManager 0.2.7.1
|
||||
|
||||
- Dashboard-Tabelle „Zuletzt geändert“ verwendet jetzt die unter „In Liste“ aktivierten Kategoriefelder.
|
||||
- Die ungefilterte Assetliste verwendet ebenfalls die konfigurierten Listenspalten statt vier fest codierter Spalten.
|
||||
- Gefilterte Assetlisten behalten die konfigurierte Reihenfolge der Kategoriefelder bei.
|
||||
- .env und data/config/config.json sind nicht Bestandteil dieses Updates.
|
||||
@@ -0,0 +1,6 @@
|
||||
AssetManager 0.2.7.2
|
||||
|
||||
- Assetname bleibt in jeder Assetliste sichtbar und ist immer mit der Detailansicht verlinkt.
|
||||
- Falls das Feld Bezeichnung in der Kategorie nicht als Listenfeld aktiviert ist, wird es automatisch als erste Link-Spalte ergänzt.
|
||||
- Der Hauptinhalt nutzt die gesamte verfügbare Browserbreite.
|
||||
- .env und data/config/config.json sind nicht Bestandteil dieses Updates.
|
||||
@@ -0,0 +1,22 @@
|
||||
AssetManager Update 0.2.7
|
||||
|
||||
Enthalten:
|
||||
- neue MeshCentral-Felder: Datentraeger, GPU, TPM, RAM-Module, Virenschutz, Gruppe
|
||||
- MAC-Adresse aus dem aktiven IPv4-Netzwerkeintrag
|
||||
- robuste Kategorie-Feldspeicherung ohne UniqueConstraint-Fehler
|
||||
- verständliche Fehlermeldungen bei doppelten eindeutigen Asset-Werten
|
||||
- konfigurierbare Listenspalten über Kategorie -> In Liste
|
||||
- Spaltenreihenfolge per Drag-and-drop, Speicherung im Browser
|
||||
|
||||
Nicht enthalten und wird nicht überschrieben:
|
||||
- .env
|
||||
- data/config/config.json
|
||||
- docker-compose.yml
|
||||
- Datenbank, Uploads und Logs
|
||||
|
||||
Installation:
|
||||
1. Inhalt über das bestehende Projekt kopieren.
|
||||
2. docker compose down
|
||||
3. docker compose build --no-cache app
|
||||
4. docker compose up -d
|
||||
5. MeshCentral-Synchronisierung erneut starten.
|
||||
@@ -0,0 +1,18 @@
|
||||
AssetManager 0.2.8
|
||||
|
||||
Enthalten:
|
||||
- Beim Anlegen und Bearbeiten werden nur aktive Felder der gewählten Kategorie angezeigt.
|
||||
- Kategorie-Wechsel in der Bearbeitungsansicht lädt die Feldkonfiguration der Zielkategorie.
|
||||
- Separate Tabelle asset_history für manuelle Änderungen und MeshCentral-Synchronisierungen.
|
||||
- Historienansicht je Asset mit Feld, altem Wert und neuem Wert.
|
||||
- Enthält-Filter über jeder Spalte in Tabellen.
|
||||
- Sortierung durch Klick auf Tabellenüberschriften.
|
||||
- Excel-Export der Assetliste und der Asset-Historie.
|
||||
|
||||
Nicht enthalten:
|
||||
- .env
|
||||
- data/config/config.json
|
||||
- docker-compose.yml
|
||||
- Datenbank, Uploads oder Logs
|
||||
|
||||
Benutzerverwaltung/LDAP wird bewusst in einem separaten Update umgesetzt.
|
||||
@@ -0,0 +1,15 @@
|
||||
AssetManager v0.2.9.1
|
||||
=====================
|
||||
|
||||
Korrekturen:
|
||||
- Speichern eines duplizierten Assets sendet nun ausdrücklich an POST /assets/new.
|
||||
- Browserfehler werden nicht mehr als rohe JSON-Seite angezeigt.
|
||||
- HTTP- und Anwendungsfehler werden nach data/logs/errors.log geschrieben.
|
||||
- Fehlermeldungen erscheinen als automatisch ausblendender Hinweis oben rechts.
|
||||
- API-/JSON-Anfragen behalten weiterhin JSON-Antworten.
|
||||
|
||||
Nicht enthalten und nicht überschrieben:
|
||||
- .env
|
||||
- data/config/config.json
|
||||
- docker-compose.yml
|
||||
- Datenbankdaten, Uploads oder Logs
|
||||
@@ -0,0 +1,11 @@
|
||||
AssetManager 0.2.9
|
||||
|
||||
- Sortierung korrigiert: Es wird jetzt zuverlässig nach der angeklickten Spalte sortiert.
|
||||
- Tabellenköpfe und Filterzeile bleiben beim Scrollen sichtbar.
|
||||
- Aktionsspalte mit Ausgeben/Zurücknehmen, Duplizieren und Löschen.
|
||||
- Duplizieren öffnet einen neuen Datensatz mit übernommenen Werten; eindeutige IDs werden geleert.
|
||||
- Status ist ein pflegbares Dropdown mit Standardwerten Aktiv, Defekt, im Lager, Ausgegeben und Verschrottet.
|
||||
- Neues Datumsfeld assigned_on / Ausgegeben am.
|
||||
- Ausgeben setzt Status und aktuelles Datum; Zurücknehmen setzt Status auf im Lager und leert Zuordnung/Ausgabedatum.
|
||||
- Aktionen werden in der Asset-Historie protokolliert.
|
||||
- .env und data/config/config.json sind nicht enthalten.
|
||||
@@ -0,0 +1,11 @@
|
||||
AssetManager v0.3.0
|
||||
|
||||
- Sortierung nach der tatsächlich angeklickten Spalte korrigiert.
|
||||
- Robuste Sortierung für Text, reine Zahlen sowie ISO- und deutsche Datumswerte.
|
||||
- Breite Tabellen bleiben responsiv und erhalten bei Bedarf horizontale Scrollbalken.
|
||||
- Einstellungen-Seite für Anwendungstitel, Firmenname und Firmenlogo.
|
||||
- Branding wird in Titelzeile und Browser-Titel verwendet.
|
||||
- Benutzer-Dropdown rechts in der Navigation vorbereitet.
|
||||
- Authentifizierungsmodus in der Config vorbereitet (Standard: none).
|
||||
|
||||
Die vorhandene config.json wird nicht im ZIP ausgeliefert. Änderungen über die GUI werden gezielt in den Abschnitten general/authentication gespeichert; andere Config-Bereiche bleiben erhalten.
|
||||
@@ -0,0 +1,26 @@
|
||||
AssetManager v0.3.1
|
||||
|
||||
Enthalten:
|
||||
- Firmenname wird neben dem Anwendungstitel angezeigt.
|
||||
- IPv4-Adressen werden oktettweise sortiert.
|
||||
- Benutzerverwaltung mit lokalen Konten.
|
||||
- Anmeldung/Abmeldung und Profilseite.
|
||||
- LDAP-/Active-Directory-Anmeldung.
|
||||
- LDAP-Benutzer werden nach erfolgreicher erster Anmeldung lokal angelegt/aktualisiert.
|
||||
- Benutzername wird bei manuellen Asset-Änderungen in der Historie gespeichert.
|
||||
- Noch keine Berechtigungsprüfung: Die Anmeldung schränkt die Anwendung in dieser Version nicht ein.
|
||||
|
||||
Konfiguration:
|
||||
- Anmeldemodus und LDAP-Daten werden unter Einstellungen gepflegt.
|
||||
- LDAP-Bind-Passwort bleibt in der Umgebung, standardmäßig:
|
||||
LDAP_BIND_PASSWORD=...
|
||||
- Für produktive Sitzungen empfohlen:
|
||||
SESSION_SECRET=<lange-zufällige-Zeichenfolge>
|
||||
|
||||
Nicht enthalten:
|
||||
- .env
|
||||
- data/config/config.json
|
||||
- config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Logs
|
||||
@@ -0,0 +1,29 @@
|
||||
# AssetManager v0.3.10.0
|
||||
|
||||
## Übersetzungen
|
||||
- Fehlende deutsche und englische Schlüssel für Assetliste, Kategorien,
|
||||
Excel-Import, Favicon, Spaltensteuerung, Datensatzzähler und LDAP ergänzt.
|
||||
- LDAP-Suchseite vollständig zweisprachig neu bereitgestellt.
|
||||
- Dynamische Zähler und Schaltflächen verwenden weiterhin die gewählte Sprache.
|
||||
|
||||
## Info-Dialog und Versionsnummer
|
||||
- Fragezeichen-Schaltfläche im Kopfbereich.
|
||||
- Dialog zeigt Version, Autor, Organisation, Kontakt, Webseite, Repository,
|
||||
Lizenz und Copyright.
|
||||
- Alle Angaben außer der Version werden unter Einstellungen gepflegt.
|
||||
- Die Version wird ausschließlich aus der Datei `VERSION` gelesen.
|
||||
- Aktuelle Version: 0.3.10.0.
|
||||
|
||||
## Scrollleiste
|
||||
- Horizontale Scrollleisten der Assetliste auf 20 Pixel vergrößert.
|
||||
- Größerer, kontrastreicher Scrollgriff.
|
||||
|
||||
## Softwareverteilung
|
||||
- `SOFTWARE-CLIENT-ARCHITECTURE.md` beschreibt den vorbereitenden Aufbau für
|
||||
Agent, Inventur, Jobwarteschlange und spätere Softwareverteilung.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung durchgeführt.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- VERSION-Datei und ZIP-Wurzel geprüft.
|
||||
- Kein produktiver Docker-/PostgreSQL-Lauf durchgeführt.
|
||||
@@ -0,0 +1,14 @@
|
||||
# AssetManager v0.3.11.0
|
||||
|
||||
Erste MeshCentral-basierte Softwareinventur:
|
||||
- kein zusätzlicher Agent
|
||||
- MeshCtrl RunCommand über vorhandenen MeshCentral-Agenten
|
||||
- HTTPS-Callback mit pro Job zufälligem, gehasht gespeichertem und zeitlich begrenztem Token
|
||||
- Inline-Befehle; keine Inventurskripte werden lokal abgelegt
|
||||
- Windows-, Linux- und macOS-Inventur
|
||||
- Android wird erkannt, aber mangels vergleichbarem RunCommand-Kanal sicher abgelehnt
|
||||
- lokale fortgeschriebene Client-Logdatei und Übertragung des Job-Logabschnitts per Callback
|
||||
- separate Tabelle installed_software und Anzeige je Asset
|
||||
- Grundtabellen für Softwarepakete, gerätebezogene Parameter und Jobs
|
||||
|
||||
Nur Syntax und Paketstruktur geprüft. Nicht mit echtem MeshCentral, Clients oder PostgreSQL produktiv getestet.
|
||||
@@ -0,0 +1,32 @@
|
||||
# AssetManager v0.3.12.0
|
||||
|
||||
## Softwareinventur starten
|
||||
- Der vorhandene Ablauf bleibt:
|
||||
Asset öffnen → Software → Software-Inventur starten.
|
||||
- Jobs sind zusätzlich unter Software in der Hauptnavigation sichtbar.
|
||||
|
||||
## Excel-Testimport
|
||||
- Zweiter Button „Test-Import“.
|
||||
- Verwendet dieselbe Import-, Validierungs- und Zeilenausgabelogik.
|
||||
- Nach der Verarbeitung wird die vollständige Datenbanktransaktion zurückgerollt.
|
||||
- Ergebnis zeigt dieselben Zähler, Fehler und Meldungen wie ein echter Import.
|
||||
|
||||
## Versionsanzeige
|
||||
- Zusätzliche eingebettete Version in `app/version.py`.
|
||||
- `VERSION` wird weiterhin bevorzugt.
|
||||
- Fehlt die Root-Datei im Docker-Image, erscheint nicht mehr „unknown“.
|
||||
|
||||
## Duplikatsuche in der Assetliste
|
||||
- Neuer Button „Duplikate suchen“.
|
||||
- Auswahl eines aktuell sichtbaren Tabellenfeldes.
|
||||
- Auswertung berücksichtigt die aktuell gesetzten Tabellenfilter.
|
||||
- Leere Werte und Groß-/Kleinschreibung sind konfigurierbar.
|
||||
- Nur die gefundenen Dubletten bleiben in der Liste sichtbar.
|
||||
- Dublettenfilter kann wieder aufgehoben werden.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung durchgeführt.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- JavaScript-Datei strukturell geprüft.
|
||||
- ZIP-Wurzel `assetmanager/` geprüft.
|
||||
- Kein produktiver Docker-/PostgreSQL-/MeshCentral-Test durchgeführt.
|
||||
@@ -0,0 +1,26 @@
|
||||
# AssetManager v0.3.12.1
|
||||
|
||||
## Duplikatsuche
|
||||
- JavaScript-Fehler `table is not defined` behoben.
|
||||
- Asset-Auswahl, Tabellenfilter und Duplikatsuche können wieder initialisiert werden.
|
||||
|
||||
## MeshCentral-Feldregeln
|
||||
- Datenbankwerte sind jetzt die dauerhafte Quelle der Wahrheit.
|
||||
- Startup-Seeding legt nur fehlende Standard-Mappings an.
|
||||
- Bestehende Werte für Quelle, Transform, Aktivierung, Priorität und
|
||||
`update_rule` („wer gewinnt“) werden nicht mehr überschrieben.
|
||||
- Legacy-Werte aus config.json werden nur bei fehlender Datenbankkonfiguration übernommen.
|
||||
|
||||
## Softwareinventur-Diagnose
|
||||
- Öffentlicher, schreibgeschützter Health-Endpunkt:
|
||||
`/api/software-callback/health`
|
||||
- Softwarejob zeigt den lokal erwarteten Logpfad.
|
||||
- Der tatsächlich an MeshCtrl übergebene Inline-Befehl kann für einen
|
||||
manuellen Test kopiert werden.
|
||||
- Windows-Clientlog protokolliert den Callback-Versuch und Callback-Fehler ausführlicher.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung durchgeführt.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- ZIP-Struktur geprüft.
|
||||
- Kein realer MeshCentral-/Callback-/PostgreSQL-Test durchgeführt.
|
||||
@@ -0,0 +1,16 @@
|
||||
# AssetManager v0.3.13.0
|
||||
|
||||
- Markierte Duplikate können zusammengeführt werden.
|
||||
- Reihenfolge per Drag-and-drop.
|
||||
- Oberstes Asset bleibt bestehen.
|
||||
- Leere Werte werden aus nachfolgenden Assets ergänzt.
|
||||
- Vorschau vor dem endgültigen Speichern.
|
||||
- Custom Fields, Historie, Softwarejobs, installierte Software und Kind-Assets werden übernommen.
|
||||
- Technische Bulk-Formulare sind ausgeblendet und erzeugen keinen Leerraum mehr.
|
||||
- v0.4.0.0 bleibt für das neue Software-Subsystem reserviert.
|
||||
|
||||
Validierung:
|
||||
- Python-Syntax geprüft
|
||||
- Jinja2-Templates geprüft
|
||||
- ZIP-Struktur geprüft
|
||||
- nicht produktiv gegen PostgreSQL/Docker getestet
|
||||
@@ -0,0 +1,13 @@
|
||||
# AssetManager v0.3.13.1
|
||||
|
||||
## Korrekturen
|
||||
- Der Button „Duplikate zusammenführen“ wird ab zwei sichtbaren, markierten Assets aktiviert.
|
||||
- Die Anzahl der markierten Assets wird im Button angezeigt.
|
||||
- Kategorie-Filter können mehrzeilig umbrechen, ohne aus dem Button herauszuragen.
|
||||
- Kategorie-Karten auf der Übersicht begrenzen und umbrechen lange Bezeichnungen innerhalb der Karte.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntax geprüft.
|
||||
- Jinja2-Templates syntaktisch geladen.
|
||||
- ZIP-Wurzel assetmanager/ geprüft.
|
||||
- Kein Docker-/Browser-/PostgreSQL-Laufzeittest durchgeführt.
|
||||
@@ -0,0 +1,33 @@
|
||||
# AssetManager v0.3.14.0 – Bedienung & Oberfläche
|
||||
|
||||
## Navigation
|
||||
- Neue linke Hauptnavigation.
|
||||
- Einklappbar auf eine schmale Symbolleiste.
|
||||
- Zustand wird im Browser gespeichert.
|
||||
- Einstellungen öffnen beim Mouseover ein alphabetisch sortiertes Untermenü.
|
||||
- Einstellungsseiten besitzen zusätzlich eine eigene linke Unternavigation.
|
||||
|
||||
## Systeminformationen
|
||||
- Neue Datei APPINFO.json im Projektstamm.
|
||||
- VERSION bleibt separat.
|
||||
- Autor, Organisation, Kontakt, Website, Repository, Lizenz und Copyright sind nur lesbar.
|
||||
- Info-Dialog und Systeminformationsseite lesen dieselbe Datei.
|
||||
- LICENSE.txt dokumentiert den aktuellen Lizenzstatus.
|
||||
|
||||
## Einstellungsbereiche
|
||||
- Anzeige
|
||||
- Asset-Felder
|
||||
- Authentifizierung
|
||||
- Benutzer
|
||||
- Kategorien
|
||||
- MeshCentral
|
||||
- Statuswerte
|
||||
- Systeminformationen
|
||||
- Übersetzungen
|
||||
|
||||
## Validierung
|
||||
- Python-Syntax geprüft.
|
||||
- Jinja2-Templates syntaktisch geladen.
|
||||
- APPINFO.json als JSON geprüft.
|
||||
- ZIP-Wurzel assetmanager/ geprüft.
|
||||
- Kein Docker-, Browser- oder PostgreSQL-Laufzeittest durchgeführt.
|
||||
@@ -0,0 +1,21 @@
|
||||
# AssetManager v0.3.14.1 – Korrekturen Navigation und Einstellungen
|
||||
|
||||
## Behoben
|
||||
- Kein zweites Einstellungsmenü mehr innerhalb der Einstellungsseite.
|
||||
- `/settings/fields` wird nicht mehr vom dynamischen Einstellungsrouting abgefangen.
|
||||
- „Felder“ öffnet wieder die vollständige Feldverwaltung.
|
||||
- „MeshCentral“ öffnet wieder die vollständige MeshCentral-Seite unter `/sync/meshcentral`.
|
||||
- „Benutzeranmeldung“ wurde im Menü in „LDAP“ umbenannt.
|
||||
- Import / Export ist als eigener Einstellungsbereich vorhanden.
|
||||
- Sicherung ist als eigener Einstellungsbereich sichtbar.
|
||||
|
||||
## Hinweis Sicherung
|
||||
Die vollständige Backup-Funktion bleibt wie geplant für v0.3.15.0 reserviert.
|
||||
In v0.3.14.1 wird der Menüpunkt bereits angezeigt und beschreibt den vorgesehenen Umfang.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntax geprüft.
|
||||
- Alle geänderten Jinja2-Templates syntaktisch geladen.
|
||||
- Relevante Routen statisch geprüft.
|
||||
- ZIP-Wurzel `assetmanager/` geprüft.
|
||||
- Kein Docker-, Browser- oder PostgreSQL-Laufzeittest durchgeführt.
|
||||
@@ -0,0 +1,24 @@
|
||||
# AssetManager v0.3.14.2
|
||||
|
||||
## Benutzerverwaltung
|
||||
- Der Button „Anmeldeeinstellungen“ öffnet jetzt `/settings/authentication` (LDAP).
|
||||
- Kompatibilitätskorrektur funktioniert auch mit einer älteren, lokal vorhandenen `users.html`.
|
||||
|
||||
## Systeminformationen
|
||||
- `APPINFO.json` wird nicht mehr im Update-ZIP ausgeliefert.
|
||||
- Neue Vorlage: `APPINFO.example.json`.
|
||||
- Produktive Datei: `/app/data/config/APPINFO.json`.
|
||||
- Optional kann `APPINFO_PATH` einen anderen Pfad festlegen.
|
||||
- Eine vorhandene alte Datei unter `/app/APPINFO.json`, `/app/app/APPINFO.json` oder `/APPINFO.json` wird einmalig in den persistenten Pfad kopiert, sofern dort noch keine Datei besteht.
|
||||
- Updates überschreiben die persistente Datei nicht.
|
||||
|
||||
## Aktivierung von Änderungen
|
||||
- APPINFO wird bei jeder Seitenanforderung neu gelesen.
|
||||
- Nach dem Speichern genügt normalerweise ein Neuladen der Seite; ein Container-Neustart ist nicht erforderlich.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntax geprüft.
|
||||
- Jinja2-Basistemplate syntaktisch geladen.
|
||||
- ZIP enthält keine `APPINFO.json`.
|
||||
- ZIP-Wurzel `assetmanager/` geprüft.
|
||||
- Kein Docker-, Browser- oder PostgreSQL-Laufzeittest durchgeführt.
|
||||
@@ -0,0 +1,29 @@
|
||||
# AssetManager v0.3.14.3
|
||||
|
||||
## APPINFO – tatsächliche Ursache behoben
|
||||
- Docker mountet `./data/config` nach `/app/config`.
|
||||
- v0.3.14.2 suchte irrtümlich unter `/app/data/config/APPINFO.json`.
|
||||
- Die produktive Datei wird jetzt unter `/app/config/APPINFO.json` gelesen.
|
||||
- `APPINFO_PATH=/app/config/APPINFO.json` ist im Docker Compose explizit gesetzt.
|
||||
- Der bisherige falsche Pfad bleibt als einmalige Migrationsquelle erhalten.
|
||||
- Die Einstellungsseite zeigt den tatsächlich verwendeten Pfad an.
|
||||
- Das Update enthält keine produktive `APPINFO.json`, nur `APPINFO.example.json`.
|
||||
|
||||
## Benutzerverwaltung
|
||||
- Der Quelllink „Anmeldeeinstellungen“ wurde direkt in `users.html` auf
|
||||
`/settings/authentication` geändert.
|
||||
|
||||
## Update-Schutz
|
||||
Nicht im ZIP enthalten:
|
||||
- `.env`
|
||||
- `APPINFO.json`
|
||||
- `data/config/config.json`
|
||||
- PostgreSQL-Daten
|
||||
- Backups, Uploads und Logs
|
||||
|
||||
## Validierung
|
||||
- Python-Syntax geprüft.
|
||||
- Geänderte Jinja2-Templates syntaktisch geladen.
|
||||
- Docker-Compose-YAML textuell auf APPINFO_PATH geprüft.
|
||||
- ZIP-Wurzel `assetmanager/` geprüft.
|
||||
- Kein echter Docker-/Browser-Laufzeittest durchgeführt.
|
||||
@@ -0,0 +1,11 @@
|
||||
# AssetManager v0.3.14.4
|
||||
|
||||
- Sidebar state is applied before first paint; no expand/collapse flash on navigation.
|
||||
- Asset table stays hidden only during its first initialization and appears in its final column layout.
|
||||
- Removed the global DOM MutationObserver from list-tools and costly per-row computed-style checks.
|
||||
- Language and user menus are right aligned again.
|
||||
- Asset page has one Import / Export button and links to the combined page.
|
||||
- Duplicate workflow, Import/Export, system information and the main MeshCentral configuration/mapping texts use i18n keys.
|
||||
- Existing persistent files and data are not included in this update ZIP.
|
||||
|
||||
Static validation only; no Docker/browser runtime test.
|
||||
@@ -0,0 +1,39 @@
|
||||
# AssetManager v0.3.14.5
|
||||
|
||||
## Ruhiger Aufbau der Assetseite
|
||||
- Die Assetseite wird während der Initialisierung vollständig verborgen.
|
||||
- Statt sichtbarer Zwischenzustände erscheint ein dezenter Ladehinweis.
|
||||
- Erst nach Tabellenaufbau, Spaltenreihenfolge, Spaltensichtbarkeit,
|
||||
Filterwiederherstellung und Datensatzzählung wird die fertige Seite angezeigt.
|
||||
- Eine Zeitüberschreitung von fünf Sekunden verhindert, dass die Seite bei einem
|
||||
unerwarteten JavaScript-Fehler dauerhaft verborgen bleibt.
|
||||
|
||||
## Performance
|
||||
- Der globale MutationObserver für gespeicherte Tabellenzustände wurde entfernt.
|
||||
- Gespeicherte Filter werden gesammelt eingesetzt.
|
||||
- Danach erfolgt nur noch ein einziger Filterdurchlauf statt je eines
|
||||
vollständigen Durchlaufs pro gespeicherter Spalte.
|
||||
- Tabellenmodule melden ihren Abschluss explizit an einen zentralen
|
||||
Initialisierungskoordinator.
|
||||
- Layout- und Scrollbalkenberechnungen laufen vor dem sichtbaren Einblenden ab.
|
||||
|
||||
## Übersetzungen
|
||||
- Der Ladehinweis nutzt Übersetzungsschlüssel.
|
||||
- Deutsche und englische Standardtexte wurden ergänzt.
|
||||
|
||||
## Update-Schutz
|
||||
Nicht im Update enthalten:
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- PostgreSQL-Daten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
|
||||
## Validierung
|
||||
- Python-Syntax geprüft.
|
||||
- Jinja2-Templates syntaktisch geladen.
|
||||
- JavaScript-Dateien mit Node.js syntaktisch geprüft, sofern Node.js verfügbar.
|
||||
- ZIP-Wurzel assetmanager/ geprüft.
|
||||
- Kein vollständiger Docker-/Browser-Laufzeittest durchgeführt.
|
||||
@@ -0,0 +1,38 @@
|
||||
# AssetManager v0.3.14.6
|
||||
|
||||
## Diagnose der Assetseiten-Initialisierung
|
||||
|
||||
Die Browser-Debugkonsole protokolliert jetzt:
|
||||
|
||||
- Startzeit der Assetseiten-Initialisierung
|
||||
- Anzahl der bereits serverseitig gelieferten Datensätze
|
||||
- jedes empfangene Fertig-Ereignis
|
||||
- Status aller fünf Initialisierungsmodule
|
||||
- fehlende Fertig-Marker
|
||||
- Zeitpunkt und Grund der Seiteneinblendung
|
||||
- Wartezeit auf Webfonts
|
||||
- Dauer der abschließenden Renderframes
|
||||
- Navigation Timing einschließlich TTFB und HTML-Empfang
|
||||
- langsame JavaScript-, CSS- und sonstige Ressourcen ab 50 ms
|
||||
- lange Aufgaben auf dem Browser-Hauptthread
|
||||
- deutliche Warnung, falls der 5-Sekunden-Fallback ausgelöst wird
|
||||
|
||||
## Verwendung
|
||||
|
||||
1. Browser-Entwicklertools mit F12 öffnen.
|
||||
2. Registerkarte „Konsole“ öffnen.
|
||||
3. Assetseite neu laden.
|
||||
4. Nach Meldungen mit `[AssetManager][Assets]` filtern.
|
||||
5. Den vollständigen Konsolenblock kopieren.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- PostgreSQL-Daten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,46 @@
|
||||
# AssetManager v0.3.14.7
|
||||
|
||||
## Erweiterte Browser-Performance-Diagnose
|
||||
|
||||
Die Assetseite protokolliert nun zusätzlich die Laufzeiten einzelner Module und
|
||||
Callbacks in der Browserkonsole:
|
||||
|
||||
- browser-state: Wiederherstellung gespeicherter Filter
|
||||
- table-tools: Modulinitialisierung, Filtern und Sortieren
|
||||
- list-tools: Datensatzzähler und MutationObserver
|
||||
- asset-columns: Initialisierung, Spaltensichtbarkeit, Scrollbalkensynchronisierung,
|
||||
ResizeObserver und MutationObserver
|
||||
- Zusammenfassung der langsamsten Vorgänge nach dem Laden
|
||||
|
||||
Meldungen lassen sich nach folgendem Präfix filtern:
|
||||
|
||||
[AssetManager][Performance]
|
||||
|
||||
Vorgänge ab 50 ms erscheinen als Warnung. Layoutnahe Vorgänge wie
|
||||
Scrollbalken- und Observer-Callbacks werden bereits ab 20 ms hervorgehoben.
|
||||
|
||||
## Korrektur
|
||||
|
||||
Der 5-Sekunden-Sicherheitstimer wird nun sofort beendet, sobald die Assetseite
|
||||
erfolgreich eingeblendet wurde. Dadurch erscheint nach fünf Sekunden keine
|
||||
irreführende Fallback-Meldung mehr.
|
||||
|
||||
## Test
|
||||
|
||||
1. F12 öffnen.
|
||||
2. Konsole auswählen.
|
||||
3. Nach `AssetManager` filtern.
|
||||
4. Assetseite mit Strg+F5 neu laden.
|
||||
5. Den Block `Zusammenfassung – langsamste Vorgänge` sowie Warnungen kopieren.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- PostgreSQL-Daten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,51 @@
|
||||
# AssetManager v0.3.14.8
|
||||
|
||||
## Erweiterte Layout- und Reflow-Diagnose
|
||||
|
||||
Die Assetseite misst nun zusätzlich:
|
||||
|
||||
- einzelne Layout-Lesezugriffe auf `table.scrollWidth`
|
||||
- einzelne Layout-Lesezugriffe auf `scroll.clientWidth`
|
||||
- Schreibzugriffe für Breite und Sichtbarkeit der oberen Scrollleiste
|
||||
- Herkunft jedes Scrollleisten-Abgleichs:
|
||||
- Initialisierung
|
||||
- ResizeObserver
|
||||
- MutationObserver
|
||||
- vollständige Dauer von `applyHidden`
|
||||
- vollständige Dauer von `syncTopScrollbar`
|
||||
- vollständige Dauer der Observer-Callbacks
|
||||
- Chrome-Performance-Messungen über `performance.mark()` und
|
||||
`performance.measure()`
|
||||
- Paint-Ereignisse
|
||||
- Long Animation Frames inklusive Script-Zuordnung und
|
||||
`forcedStyleAndLayoutDuration`, sofern der Browser diese API unterstützt
|
||||
|
||||
Alle Messungen von `asset-columns.js` werden jetzt auch in der abschließenden
|
||||
Tabelle „Zusammenfassung – langsamste Vorgänge“ berücksichtigt.
|
||||
|
||||
## Konsolenfilter
|
||||
|
||||
[AssetManager][Performance]
|
||||
[AssetManager][Assets]
|
||||
|
||||
Besonders relevant sind:
|
||||
|
||||
- `asset-columns:layout-read:table.scrollWidth`
|
||||
- `asset-columns:layout-read:scroll.clientWidth`
|
||||
- `asset-columns:syncTopScrollbar`
|
||||
- `asset-columns:applyHidden`
|
||||
- `Long Animation Frame`
|
||||
- `forced_style_layout_ms`
|
||||
- `Chrome Performance-Messungen`
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- PostgreSQL-Daten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,70 @@
|
||||
# AssetManager v0.3.15.0
|
||||
|
||||
## Performance-Refactoring der Assetliste
|
||||
|
||||
Die Diagnose aus v0.3.14.8 zeigte zwei konkrete Ursachen:
|
||||
|
||||
- `innerText` in den Tabellenwerkzeugen erzwang Layoutberechnungen.
|
||||
- `table.scrollWidth` löste bei der breiten Assettabelle einen teuren Reflow aus.
|
||||
|
||||
Diese Bereiche wurden grundlegend überarbeitet.
|
||||
|
||||
### Tabellenlayout
|
||||
|
||||
- Die Assettabelle verwendet jetzt `table-layout: fixed`.
|
||||
- Jede Datenspalte erhält eine feste Breite.
|
||||
- Ohne konfigurierte Listenbreite gelten sinnvolle Standardbreiten:
|
||||
- Bezeichnung: 220 px
|
||||
- andere Datenfelder: 180 px
|
||||
- Lange Inhalte vergrößern die Tabelle nicht mehr, sondern werden abgeschnitten
|
||||
und mit Auslassungspunkten dargestellt.
|
||||
|
||||
### Spaltenverwaltung
|
||||
|
||||
- Ausgeblendete Spalten werden über eine einzige dynamische CSS-Regel gesteuert.
|
||||
- Es werden nicht mehr tausende einzelne Tabellenzellen per JavaScript verändert.
|
||||
- Die Tabellenbreite wird aus den bekannten Spaltenbreiten berechnet.
|
||||
- `table.scrollWidth` wird nicht mehr verwendet.
|
||||
- `ResizeObserver` und `MutationObserver` der Spaltenverwaltung wurden entfernt.
|
||||
- Die obere Scrollleiste wird nur noch initial, nach einer Spaltenänderung und
|
||||
bei einer echten Änderung der Fenstergröße aktualisiert.
|
||||
|
||||
### Filter und Sortierung
|
||||
|
||||
- `innerText` wurde durch `textContent` ersetzt, damit Filter und Sortierung
|
||||
keine erzwungene Layoutberechnung auslösen.
|
||||
- Filterwerte werden einmalig zwischengespeichert.
|
||||
- Ein Filterdurchlauf durchsucht den vorbereiteten Cache statt jedes Mal alle
|
||||
Zellen erneut über DOM-Abfragen zu lesen.
|
||||
- Der DOM-Status einer Zeile wird nur geändert, wenn sich ihre Sichtbarkeit
|
||||
tatsächlich ändert.
|
||||
- Sortierte Zeilen werden gesammelt über ein `DocumentFragment` eingesetzt.
|
||||
|
||||
### Spaltenreihenfolge
|
||||
|
||||
- Gespeicherte Spaltenreihenfolgen werden zeilenweise gesammelt angewendet.
|
||||
- Dadurch entstehen deutlich weniger einzelne DOM-Operationen.
|
||||
|
||||
### Diagnosecode
|
||||
|
||||
- Die ausführliche Performance-Diagnose aus v0.3.14.8 wurde wieder entfernt.
|
||||
- Der koordinierte, flackerfreie Seitenaufbau bleibt erhalten.
|
||||
|
||||
## Hinweis
|
||||
|
||||
Virtuelles Rendering wurde bewusst noch nicht aktiviert, da es Auswahl,
|
||||
Sortierung, Filter, Duplikatsuche und den dynamischen Inhaltsreload tiefgreifend
|
||||
verändern würde. Die jetzt umgesetzten Optimierungen beseitigen zunächst die
|
||||
nachgewiesenen Reflow-Ursachen ohne Funktionsverlust.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- PostgreSQL-Daten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,51 @@
|
||||
# AssetManager v0.3.15.1
|
||||
|
||||
## Behoben: vertikales Scrollen
|
||||
|
||||
- Die problematischen CSS-Containment-Regeln aus v0.3.15.0 wurden entfernt.
|
||||
- Der Tabellenbereich verwendet wieder normales `overflow: auto`.
|
||||
- `min-height: 0` verhindert, dass ein übergeordneter Flex- oder Grid-Container
|
||||
den vertikalen Scrollbereich blockiert.
|
||||
- Ein schlanker `ResizeObserver` aktualisiert ausschließlich die obere
|
||||
horizontale Scrollleiste bei echten Breitenänderungen.
|
||||
|
||||
## Behoben: Filterfelder waren um eine Spalte verschoben
|
||||
|
||||
In v0.3.15.0 konnten die Filterfelder nach dem Anwenden der gespeicherten
|
||||
Spaltenreihenfolge nicht mehr eindeutig ihrer Spalte zugeordnet werden.
|
||||
|
||||
Ursache war die Verwendung eines veränderlichen `cellIndex` beim Umsortieren
|
||||
der Filterzeile. Während die Zellen verschoben wurden, änderten sich diese
|
||||
Indizes bereits.
|
||||
|
||||
Die Korrektur:
|
||||
|
||||
- Jedes Filterfeld besitzt jetzt eine dauerhafte interne Zuordnung.
|
||||
- Datenfilter werden ausschließlich über `data-field` mit ihrer Datenspalte
|
||||
verbunden.
|
||||
- Auswahl- und Aktionsspalten erhalten stabile interne Schlüssel.
|
||||
- Die Filterzeile wird nach einer Spaltenänderung vollständig anhand dieser
|
||||
festen Zuordnungen neu aufgebaut.
|
||||
- Filterwerte lesen niemals mehr versehentlich die benachbarte Spalte.
|
||||
|
||||
## Beibehaltene Optimierungen
|
||||
|
||||
- `table-layout: fixed`
|
||||
- feste Spaltenbreiten
|
||||
- `textContent` statt `innerText`
|
||||
- zwischengespeicherte Filterwerte
|
||||
- CSS-basierte Spaltensichtbarkeit
|
||||
- `DocumentFragment` für Sortierung und Spaltenreihenfolge
|
||||
- keine Verwendung von `table.scrollWidth`
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- PostgreSQL-Daten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,44 @@
|
||||
# AssetManager v0.3.15.2
|
||||
|
||||
## Behoben: Assetliste lässt sich wieder vertikal scrollen
|
||||
|
||||
Die Korrektur aus v0.3.15.1 war unvollständig. Der eigentliche Grund war der
|
||||
in v0.3.14 eingeführte Sidebar-Aufbau:
|
||||
|
||||
body
|
||||
-> app-shell
|
||||
-> app-content
|
||||
-> asset-list-page
|
||||
-> asset-table-scroll
|
||||
|
||||
Die ältere Scroll-Konfiguration stammte noch aus der Zeit vor `app-shell`.
|
||||
Dadurch fehlte eine durchgängige Kombination aus `min-height: 0`, Flex-Höhe
|
||||
und `overflow`, sodass der Tabellencontainer keine nutzbare Scrollhöhe erhielt.
|
||||
|
||||
v0.3.15.2 behebt dies vollständig:
|
||||
|
||||
- Die Assetseite erhält eine eigene Body-Klasse.
|
||||
- `body`, `app-shell`, `app-content` und `asset-list-page` bilden jetzt eine
|
||||
durchgängige Flex-/Höhenkette.
|
||||
- Nur `asset-table-scroll` übernimmt auf Desktop-Systemen das vertikale
|
||||
Scrollen.
|
||||
- Der Tabellenbereich erhält eine echte Resthöhe über `flex: 1`.
|
||||
- Die alte Containment-Regel wird auf der Assetseite ausdrücklich deaktiviert.
|
||||
- Auf schmalen Bildschirmen bleibt normales Seiten-Scrolling erhalten.
|
||||
|
||||
## Ebenfalls enthalten
|
||||
|
||||
- Die in v0.3.15.1 korrigierte Zuordnung der Filterfelder zu ihren Spalten.
|
||||
- Alle Tabellen-Performanceoptimierungen aus v0.3.15.0.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht überschrieben werden:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,14 @@
|
||||
AssetManager v0.3.3
|
||||
|
||||
Neu:
|
||||
- Rollenmodell: Nur Administratoren dürfen Assets, Kategorien, Statuswerte, Benutzer, Einstellungen und MeshCentral-Synchronisation ändern.
|
||||
- Nicht-Administratoren erhalten reinen Lesezugriff und sehen nur Assets aus den ihnen zugewiesenen MeshCentral-Gruppen.
|
||||
- Gruppenzuweisung in der Benutzerverwaltung; vorhandene Gruppen werden aus der Asset-Datenbank angeboten.
|
||||
- Statuswerte für „Ausgeben“ und „Zurücknehmen“ frei konfigurierbar.
|
||||
- Beim Ausgeben werden Name und Datum in einem Dialog abgefragt; aktuelles Datum ist vorbelegt.
|
||||
- LDAP-Benutzersuche in den LDAP-Einstellungen.
|
||||
- Datenbankmigrationen ergänzen die neuen Felder automatisch.
|
||||
|
||||
Hinweise:
|
||||
- Nach einer Änderung der Benutzerrechte muss sich der Benutzer neu anmelden.
|
||||
- Dieses Update enthält keine .env, keine config.json, keine docker-compose.yml, keine Uploads, Logs oder Datenbankdaten.
|
||||
@@ -0,0 +1,11 @@
|
||||
AssetManager v0.3.4.7
|
||||
|
||||
- MeshCentral-Kategoriezuordnung verwendet stabile Kategorie-IDs statt Kategorienamen.
|
||||
- Konfigurierbare Fallback-Kategorie, Standard-ID 1.
|
||||
- Konfigurierbares Mapping der MeshCentral-Gerätetypen 1 bis 8 auf AssetManager-Kategorien.
|
||||
- Bestehende Assets behalten ihre Kategorie.
|
||||
- Neue Geräte verwenden Mapping oder Fallback.
|
||||
- Ungültige Mapping-Kategorien brechen die Synchronisierung nicht mehr ab.
|
||||
- Einstellungen und Synchronisierungsseite zeigen die Zuordnung an.
|
||||
|
||||
Keine .env, config.json, docker-compose.yml, Datenbankdaten, Uploads oder Logs enthalten.
|
||||
@@ -0,0 +1,10 @@
|
||||
AssetManager v0.3.4
|
||||
|
||||
- Hierarchische Gerätezuordnung über übergeordnetes Gerät
|
||||
- Grafische Baustruktur mit Bild, Name, IP, Standort und Raum
|
||||
- Filter nach Wurzelgerät, Kategorie und Namensbestandteil
|
||||
- Neues Feld Raumnummer
|
||||
- Import-Dubletten: Inventarnummer global eindeutig, leere Werte erlaubt; Seriennummer nur zusammen mit Hersteller
|
||||
- Schutz vor Kreisbeziehungen in der Hierarchie
|
||||
|
||||
Nicht enthalten: .env, docker-compose.yml, config.json, Daten, Uploads oder Logs.
|
||||
@@ -0,0 +1,13 @@
|
||||
AssetManager 0.3.5.1 - Hotfix Diagramme nach Anmeldung
|
||||
|
||||
Behoben:
|
||||
- Jinja2-Fehler "builtin_function_or_method object is not iterable"
|
||||
- Ursache war die Kollision des Dictionary-Schlüssels "items" mit der Python-Methode dict.items
|
||||
|
||||
Installation:
|
||||
1. ZIP im Verzeichnis oberhalb von assetmanager entpacken.
|
||||
2. Container neu starten bzw. neu bauen.
|
||||
3. Browser mit Strg+F5 aktualisieren.
|
||||
|
||||
Dieses Paket enthält ausschließlich die korrigierte Diagrammvorlage und diese Update-Datei.
|
||||
Keine Konfiguration, Datenbankdaten, Uploads oder Logs werden überschrieben.
|
||||
@@ -0,0 +1,24 @@
|
||||
AssetManager 0.3.5 – konfigurierbare Diagramme
|
||||
|
||||
Neu:
|
||||
- Menüpunkt „Diagramme“ für alle berechtigten Benutzer
|
||||
- Admin-Verwaltung zum Erstellen, Bearbeiten und Löschen von Diagrammen
|
||||
- Diagrammtypen: Donut, Kuchen, Balken, gestapelte Balken
|
||||
- Gruppierung nach Kategorie, Status, Betriebssystem, Hersteller, Modell,
|
||||
Standort, Raumnummer, Abteilung, MeshCentral-Gruppe, Antivirus oder TPM-Version
|
||||
- Optionale zweite Gruppierung für gestapelte Balken
|
||||
- Anzeige ausgewählter Diagramme auf der Übersicht
|
||||
- Berechtigungen werden berücksichtigt: Nicht-Admins sehen nur Auswertungen der
|
||||
MeshCentral-Gruppen, für die sie freigeschaltet sind
|
||||
- Standarddiagramme werden beim ersten Öffnen automatisch angelegt
|
||||
|
||||
Installation:
|
||||
1. ZIP im Verzeichnis oberhalb von assetmanager entpacken.
|
||||
2. Container neu bauen und starten:
|
||||
cd /srv/docker/assetmanager
|
||||
docker compose down
|
||||
docker compose up -d --build
|
||||
3. Browser mit Strg+F5 aktualisieren.
|
||||
|
||||
Die neue Tabelle chart_definitions wird automatisch angelegt.
|
||||
Konfigurationsdateien, .env, Datenbankdaten, Uploads und Logs sind nicht im Paket enthalten.
|
||||
@@ -0,0 +1,15 @@
|
||||
AssetManager 0.3.6.2
|
||||
|
||||
Neu:
|
||||
- Benutzer können in der Benutzerverwaltung gelöscht werden.
|
||||
- Schutz vor Löschen des aktuell angemeldeten Benutzers.
|
||||
- Schutz vor Löschen des letzten aktiven Administrators.
|
||||
- Mehrfachauswahl in der Asset-Tabelle inklusive „Alle markieren“.
|
||||
- Massenaktion „Daten ändern“ für gemeinsame Felder der ausgewählten Gerätekategorien.
|
||||
- Massenaktion „Markierte löschen“.
|
||||
- Jede Massenänderung wird in der Asset-Historie protokolliert.
|
||||
|
||||
Sicherheit:
|
||||
Inventarnummer, Seriennummer, MeshCentral Node-ID und übergeordnetes Gerät sind von Massenänderungen ausgeschlossen.
|
||||
|
||||
Das Update enthält keine .env, config.json, Datenbankdaten, Uploads oder Logs.
|
||||
@@ -0,0 +1,12 @@
|
||||
AssetManager 0.3.6.3
|
||||
|
||||
Änderungen:
|
||||
- Übergeordnetes Gerät (parent_asset_id) ist in der Massenänderung verfügbar.
|
||||
- Auswahl des übergeordneten Geräts erfolgt über ein Dropdown.
|
||||
- Schutz vor Selbstzuordnung und zyklischen Baumstrukturen.
|
||||
- LDAP-Ergebnisliste besitzt Checkboxen und eine Aktion zum Speichern ausgewählter Benutzer.
|
||||
- Bereits vorhandene Benutzer werden nicht erneut auswählbar angeboten.
|
||||
- Leere LDAP-Suche zeigt alle aktiven AD-Benutzer.
|
||||
- LDAP-Suche unterstützt * als Wildcard.
|
||||
|
||||
Dieses Update enthält keine Konfiguration, .env, Datenbankdaten, Uploads oder Logs.
|
||||
@@ -0,0 +1,13 @@
|
||||
AssetManager 0.3.6 – Diagramm-Werte zusammenfassen
|
||||
|
||||
Neu:
|
||||
- Diagramme können Rohwerte automatisch zusammenfassen.
|
||||
- Betriebssysteme werden z. B. zu Windows 11, Windows 10, Windows Server, Ubuntu usw. gruppiert.
|
||||
- Eigene Zuordnungen sind pro Diagramm möglich: Suchtext => Anzeigename.
|
||||
- Die Originalwerte der Assets werden nicht verändert.
|
||||
- Das bestehende Standarddiagramm „Betriebssysteme“ wird automatisch auf Zusammenfassung umgestellt.
|
||||
|
||||
Installation:
|
||||
1. ZIP im Verzeichnis oberhalb von assetmanager entpacken.
|
||||
2. Container neu bauen/starten.
|
||||
3. Browser mit Strg+F5 aktualisieren.
|
||||
@@ -0,0 +1,8 @@
|
||||
AssetManager 0.3.7.10
|
||||
|
||||
- Sprachwechsel auf der Login-Seite verwendet die Session-Sprache, solange noch kein Benutzer angemeldet ist.
|
||||
- /profile/language ist vor der Anmeldung ausdrücklich freigegeben.
|
||||
- Vor der Anmeldung wird die Sprache nur in der Session gespeichert, nicht in einem Benutzerkonto.
|
||||
- Korrekte englische und deutsche Login-Texte werden beim Start geprüft und repariert.
|
||||
- Toastmeldungen erscheinen unten rechts und überdecken damit nicht mehr die Navigations- und Aktionsschaltflächen oben rechts.
|
||||
- Keine Konfigurations-, Daten-, Upload- oder Logdateien enthalten.
|
||||
@@ -0,0 +1,8 @@
|
||||
AssetManager 0.3.7.3
|
||||
|
||||
Korrektur der Reihenfolge im Bereich Einstellungen > Darstellung:
|
||||
- Firmenlogo auswählen
|
||||
- vorhandene Logo-Vorschau und Option "Logo entfernen"
|
||||
- Standardsprache
|
||||
|
||||
Es werden keine Konfigurations-, Datenbank-, Upload- oder Logdateien überschrieben.
|
||||
@@ -0,0 +1,18 @@
|
||||
AssetManager 0.3.7.4
|
||||
|
||||
Kumulative Korrektur auf Basis der vom Benutzer bereitgestellten 0.3.7.3-Dateien.
|
||||
|
||||
Änderungen:
|
||||
- Sprachmenü mit dunkelblauem Hintergrund und gut lesbarer weißer Schrift.
|
||||
- Schaltfläche "Alle löschen" aus den Assetlisten entfernt.
|
||||
- Neue Asset-Spalte mesh_mtype (Integer), automatische Migration und Index.
|
||||
- MeshCentral-Sync speichert node.mtype; nur falls nicht vorhanden, wird für das bestehende Kategorienmapping weiterhin node.icon verwendet.
|
||||
- mesh_mtype wird im Assetdetail immer schreibgeschützt angezeigt.
|
||||
- Kategorie-Felddefinitionen besitzen nun die Eigenschaft readonly.
|
||||
- mesh_node_id und mesh_mtype sind immer readonly.
|
||||
- Readonly-Felder werden bei manueller Anlage, Bearbeitung, Excel-Import und Massenänderung nicht verändert.
|
||||
- Neuer Admin-Button "Mesh Debug" im Assetdetail.
|
||||
- Der Debug-Aufruf startet eine aktuelle MeshCentral-Synchronisierung, gibt das gespeicherte Roh-JSON als JSON-Antwort zurück, schreibt es in die Browserkonsole und speichert eine Datei unter /app/data/logs/mesh-debug/.
|
||||
- Der Browser stellt das Ergebnis zusätzlich unter window.meshDebugData bereit.
|
||||
|
||||
Enthält keine .env, config.json, Datenbankdaten, Uploads oder sonstige persistente Daten.
|
||||
@@ -0,0 +1,11 @@
|
||||
AssetManager 0.3.7.5
|
||||
|
||||
- Weitere feste Oberflächentexte auf Übersetzungsschlüssel umgestellt:
|
||||
Dashboard, Assetliste, Asset tree, Charts, Kategorien, Statuswerte,
|
||||
MeshCentral-Synchronisierung und Einstellungen.
|
||||
- Neue englische und deutsche Übersetzungseinträge werden beim Start ergänzt.
|
||||
- Profilansicht responsiv korrigiert; Bereiche stehen sauber nebeneinander
|
||||
und auf kleineren Bildschirmen untereinander.
|
||||
- Sprachdropdown bleibt dunkel und kontrastreich lesbar.
|
||||
|
||||
Keine .env, config.json, Datenbankdaten, Uploads oder Logs enthalten.
|
||||
@@ -0,0 +1,7 @@
|
||||
AssetManager 0.3.7.6
|
||||
|
||||
- User management fully translated
|
||||
- Translation filter layout fixed
|
||||
- Language switching is allowed before sign-in and stored in the session only
|
||||
- Asset table and dashboard field headings use field translation keys
|
||||
- Profile layout made reliably responsive
|
||||
@@ -0,0 +1,12 @@
|
||||
AssetManager 0.3.7.7
|
||||
|
||||
- Login page translated via i18n keys.
|
||||
- Language switching remains available before login and is stored only in the session until authentication.
|
||||
- Translation management can add custom translation keys directly.
|
||||
- Custom translations can be selected with checkboxes and deleted in bulk.
|
||||
- Built-in translation keys are protected from deletion because they are required by the application.
|
||||
- Translation filter layout corrected.
|
||||
- Table headings in all included table templates use translation keys, including dynamic asset fields.
|
||||
- Mesh debug requires re-entry of the current user's password.
|
||||
- Local users are verified against the local password hash; LDAP users are verified against LDAP.
|
||||
- Mesh debug password is sent only in the POST request and is not stored.
|
||||
@@ -0,0 +1,16 @@
|
||||
AssetManager 0.3.7.8
|
||||
|
||||
Änderungen:
|
||||
- Benutzerprofil linksbündig ausgerichtet.
|
||||
- Benutzerinformationen und Sprache stehen auf großen Bildschirmen nebeneinander.
|
||||
- Unter 900 px werden die Bereiche responsiv untereinander dargestellt.
|
||||
- Mehrfachwerte aus MeshCentral werden mit sichtbaren Trennlinien bzw. Zeilenumbrüchen gespeichert.
|
||||
- Arbeitsspeichermodule und Datenträger erhalten eine deutliche Trennlinie.
|
||||
- Mehrere GPU- und Antivirus-Einträge werden jeweils in separaten Zeilen gespeichert.
|
||||
- Mehrzeilige Assetwerte werden in der Detailansicht mit erhaltenen Zeilenumbrüchen angezeigt.
|
||||
|
||||
Enthaltene Dateien:
|
||||
- app/templates/profile.html
|
||||
- app/templates/asset_detail.html
|
||||
- app/static/css/app.css
|
||||
- app/meshcentral.py
|
||||
@@ -0,0 +1,15 @@
|
||||
AssetManager 0.3.7 - Internationalization foundation
|
||||
|
||||
Stable rollback reference: 0.3.6.3 (German-only UI).
|
||||
|
||||
New:
|
||||
- English source/fallback language and German translation
|
||||
- Per-user language setting
|
||||
- Immediate language switch in navigation and profile
|
||||
- Language persists in database and session
|
||||
- Translation management under Settings > Translations
|
||||
- XLSX translation export/import
|
||||
- Missing-translation filter and direct editing
|
||||
- Existing users keep German; new users use configured default language (English by default)
|
||||
|
||||
No .env, config.json, database data, uploads or logs are included.
|
||||
@@ -0,0 +1,19 @@
|
||||
AssetManager 0.3.8.0 - Central field catalog and MeshCentral GUI configuration
|
||||
|
||||
IMPORTANT:
|
||||
- Stable rollback version before this structural migration: 0.3.7.10
|
||||
- Create a PostgreSQL/database backup before first start.
|
||||
- Do not copy .env, config.json, data, uploads or logs from this ZIP.
|
||||
|
||||
New database objects:
|
||||
- field_definitions
|
||||
- asset_field_values
|
||||
- mesh_field_mappings (prepared for future database-backed mappings)
|
||||
- category_fields.field_definition_id
|
||||
|
||||
Design:
|
||||
- System fields remain physical columns in assets.
|
||||
- User-created fields are type-aware values in asset_field_values. No ALTER TABLE assets is needed.
|
||||
- Categories only control active/required/show-in-list/sort order.
|
||||
- Labels, descriptions, types and read-only properties are central.
|
||||
- MeshCentral connection, sync behavior, update rules and source-path mappings are editable in the web UI.
|
||||
@@ -0,0 +1,15 @@
|
||||
AssetManager 0.3.8.1 - MeshCentral field mapping correction
|
||||
|
||||
Changes:
|
||||
- mesh_field_mappings is now the database-backed source of truth.
|
||||
- Existing config.json field mappings are imported once into the database.
|
||||
- Default MeshCentral source paths are seeded automatically when missing.
|
||||
- Added update_rule column through the lightweight migration.
|
||||
- Multiple-value mode, separator, enabled state and update rule are persisted.
|
||||
- Synchronization reads enabled mappings directly from PostgreSQL.
|
||||
- Browser now reports non-JSON backend responses instead of only JSON.parse errors.
|
||||
|
||||
Important:
|
||||
- .env, config.json, database data, uploads and logs are not included.
|
||||
- The rollback version before this structural change remains 0.3.7.10.
|
||||
- Create a PostgreSQL backup before installation.
|
||||
@@ -0,0 +1,17 @@
|
||||
AssetManager 0.3.8.2 – vollständige MeshCentral-Mapping-Reparatur
|
||||
|
||||
Wesentliche Änderungen:
|
||||
- Alle bisherigen MeshCentral-Felder werden als aktivierte System-Mappings in PostgreSQL angelegt/repariert.
|
||||
- IP, MAC, RAM, Datenträger, GPU und Antivirus verwenden konfigurierbare Spezial-Transformationen.
|
||||
- Die Synchronisierung liest Assetwerte ausschließlich aus mesh_field_mappings; die alte parallele Hardcode-Zuordnung wurde entfernt.
|
||||
- Alte field_rules aus config.json werden beim ersten Start in die System-Mappings übernommen.
|
||||
- Eigene Mapping-Regeln können in der MeshCentral-Seite angelegt, bearbeitet, deaktiviert und gelöscht werden.
|
||||
- System-Mappings können bearbeitet/deaktiviert, aber nicht gelöscht werden.
|
||||
- Source Paths unterstützen Punktnotation, [] für Listen und | für alternative Pfade.
|
||||
- MeshCentral-Verbindung, Verhalten und Mappings sind auf der Seite klar getrennt.
|
||||
- Ein Klartextkennwort aus Altversionen wird beim nächsten Speichern der Verbindung aus config.json entfernt. Das Kennwort bleibt in .env.
|
||||
|
||||
Nicht überschreiben:
|
||||
.env, config.json, data/config/config.json, Datenbank-/Daten-Volumes, Uploads und Logs.
|
||||
|
||||
Rollback: v0.3.7.10.
|
||||
@@ -0,0 +1,35 @@
|
||||
AssetManager v0.3.8.3 – dynamische MeshCentral-Feldsynchronisierung
|
||||
===================================================================
|
||||
|
||||
Korrekturen:
|
||||
- Feste SYNC_FIELDS-Liste vollständig entfernt.
|
||||
- Ausschließlich aktivierte Einträge aus mesh_field_mappings bestimmen die Synchronisierung.
|
||||
- Systemfelder werden dynamisch über field_definitions und die Asset-Spalten geschrieben.
|
||||
- Custom-Felder werden dynamisch in asset_field_values gespeichert.
|
||||
- Neue Mappings auf bestehende System- oder Custom-Felder funktionieren ohne Codeänderung.
|
||||
- Update-Regeln fill_empty, meshcentral_wins und local_wins gelten für beide Feldarten.
|
||||
- Pro tatsächlich angewendetem Mapping erscheint eine Debug-Zeile im Live-Protokoll.
|
||||
- Unbekannte/inaktive Zielfelder und fehlende Systemspalten werden verständlich protokolliert.
|
||||
- mesh_mtype wurde im ORM-Modell ergänzt; die vorhandene Migration bleibt kompatibel.
|
||||
- Neue Assets werden vor dem Schreiben von Custom-Feldern geflusht, damit asset_id korrekt gesetzt ist.
|
||||
|
||||
Installation:
|
||||
1. Datenbank sichern.
|
||||
2. ZIP im bestehenden AssetManager-Verzeichnis entpacken.
|
||||
3. Vorhandene .env, config.json, Daten, Uploads und Logs nicht ersetzen.
|
||||
4. docker compose down
|
||||
5. docker compose up -d --build
|
||||
6. docker compose logs --tail=200 app
|
||||
|
||||
Prüfung:
|
||||
- Auf der MeshCentral-Seite nur die gewünschten Mapping-Regeln aktivieren.
|
||||
- Für Teständerungen Update-Regel "MeshCentral gewinnt" verwenden.
|
||||
- Im Live-Protokoll nach "Mapping '<feld>' angewendet" suchen.
|
||||
|
||||
Getestet:
|
||||
- Python-Syntax aller App-Module.
|
||||
- Isolierter SQLite-Lauf mit einem Systemfeld (notes), mesh_mtype und einem Custom-Feld.
|
||||
- Derselbe RAM-Quellpfad wurde erfolgreich gleichzeitig in notes und in ein Custom-Feld geschrieben.
|
||||
|
||||
Nicht durchgeführt:
|
||||
- Kein Produktivtest gegen die reale PostgreSQL-/MeshCentral-Installation des Anwenders.
|
||||
@@ -0,0 +1,36 @@
|
||||
AssetManager v0.3.8.4
|
||||
=====================
|
||||
|
||||
Änderungen
|
||||
----------
|
||||
1. Kategorie in der Massenänderung
|
||||
- "Daten ändern" bietet jetzt das Feld "Kategorie" an.
|
||||
- Die ausgewählten Assets können gemeinsam in eine andere Kategorie verschoben werden.
|
||||
- Die Änderung wird in der Asset-Historie protokolliert.
|
||||
|
||||
2. Kategorie in Excel-Importvorlage und Import
|
||||
- Die Importvorlage enthält die Spalte "Kategorie".
|
||||
- Pro Zeile kann der Kategoriename oder die numerische Kategorie-ID angegeben werden.
|
||||
- Bleibt die Zelle leer, wird die im Importdialog ausgewählte Kategorie verwendet.
|
||||
- Unbekannte Kategorien werden zeilenbezogen als Fehler gemeldet.
|
||||
|
||||
3. Auswahl bei gefilterten Tabellen
|
||||
- "Alle markieren" berücksichtigt nur aktuell sichtbare Tabellenzeilen.
|
||||
- Durch einen Filter ausgeblendete Zeilen werden automatisch abgewählt.
|
||||
- Datenänderung und Löschen erhalten ausschließlich sichtbare, markierte IDs.
|
||||
|
||||
4. Sprachabhängige Sortierung
|
||||
- Aktive Statuswerte werden alphabetisch gemäß Benutzersprache sortiert.
|
||||
- Kategorien und Geräte in den neuen/angepassten Dropdowns werden ebenfalls sprachabhängig sortiert.
|
||||
- Für Deutsch werden Umlaute bei der Sortierung wie ae/oe/ue behandelt.
|
||||
|
||||
Installation
|
||||
------------
|
||||
Dieses Update setzt v0.3.8.3 voraus.
|
||||
Vorhandene .env-, config.json-, Datenbank-, Upload- und Logdaten sind nicht im ZIP enthalten.
|
||||
|
||||
unzip -o assetmanager-v0.3.8.4-bulk-category-filter-selection-sorting.zip
|
||||
cd assetmanager
|
||||
docker compose up -d --build
|
||||
|
||||
Danach Browser-Cache mit Strg+F5 aktualisieren.
|
||||
@@ -0,0 +1,22 @@
|
||||
AssetManager 0.3.8.5
|
||||
====================
|
||||
|
||||
Änderungen:
|
||||
- Fehlenden Import `from typing import Any` dauerhaft übernommen.
|
||||
- Sprach-/Benutzermenü: lesbare Schriftfarbe `color:#222` und kompakte Formulare im Dropdown.
|
||||
- Strg+S speichert das aktuell sichtbare Formular über dessen Speichern-Schaltfläche.
|
||||
- Neue Benutzeroption im Profil: dauerhafte Browserspeicherung.
|
||||
- Tabellenfilter werden je Tabelle und Benutzerbrowser gespeichert.
|
||||
- Bei aktivierter Option erfolgt die Speicherung in localStorage und bleibt nach dem Schließen des Browsers erhalten.
|
||||
- Bei deaktivierter Option wird sessionStorage verwendet; der Zustand bleibt innerhalb des geöffneten Browser-Tabs erhalten.
|
||||
- Die Spaltenreihenfolge der Asset-Tabelle verwendet dieselbe Speichereinstellung.
|
||||
|
||||
Datenbankmigration:
|
||||
- users.persist_browser_state BOOLEAN DEFAULT FALSE
|
||||
|
||||
Nicht enthalten/überschrieben:
|
||||
- .env
|
||||
- config.json und data/config/config.json
|
||||
- Datenbank-/PostgreSQL-Volumes
|
||||
- Uploads
|
||||
- Logs
|
||||
@@ -0,0 +1,25 @@
|
||||
AssetManager v0.3.8.6
|
||||
|
||||
Änderungen:
|
||||
- Toast-Position pro Benutzer einstellbar: links/mitte/rechts, oben/unten.
|
||||
- Toast-Anzeigedauer pro Benutzer von 1 bis 120 Sekunden einstellbar.
|
||||
- Der Button und der Endpunkt „Alles löschen“ wurden entfernt.
|
||||
- Diagramme können über die Verwaltungsseite eingesehen und bearbeitet werden.
|
||||
- Standarddiagramme sind bearbeitbar, aber gegen Löschen geschützt.
|
||||
- Diagramme können dupliziert werden.
|
||||
- Pro Diagramm können mehrere Statuswerte ausgeschlossen werden.
|
||||
- Der Statusfilter wird sowohl auf der Diagrammseite als auch auf dem Dashboard angewendet.
|
||||
- Enthält weiterhin die Korrekturen aus v0.3.8.5 (Any-Import, Sprachmenü, Strg+S und Browserzustand).
|
||||
|
||||
Automatische Datenbankergänzungen:
|
||||
- users.toast_position
|
||||
- users.toast_duration_seconds
|
||||
- chart_definitions.excluded_statuses
|
||||
- chart_definitions.is_system
|
||||
|
||||
Nicht enthalten/überschrieben:
|
||||
- .env
|
||||
- config.json
|
||||
- Datenbank- und Daten-Volumes
|
||||
- Uploads
|
||||
- Logs
|
||||
@@ -0,0 +1,16 @@
|
||||
AssetManager v0.3.9.0 – MeshCentral Geräteinventar
|
||||
|
||||
Neu:
|
||||
- Hardwareinventar wird bei jeder MeshCentral-Synchronisierung als JSON-Snapshot gespeichert.
|
||||
- Softwareinventar wird gespeichert, sofern die MeshCentral-Antwort ein Softwaresegment enthält.
|
||||
- Vollständige Rohdaten bleiben zusätzlich in mesh_source_data erhalten.
|
||||
- Neue Geräteansicht mit Tabs Hardware, Software, MeshCentral JSON und Synchronisierung.
|
||||
- Aufklappbare Baumdarstellung für beliebig verschachtelte Hardwaredaten.
|
||||
- Filterbare Softwaretabelle.
|
||||
- Download des vollständigen Geräteinventars als JSON.
|
||||
- Automatische Datenbankerweiterung um mesh_hardware_data, mesh_software_data und mesh_inventory_updated_at.
|
||||
|
||||
Hinweis:
|
||||
Die aktuelle MeshCentral ListDevices-details-Ausgabe enthält Hardwaredaten, aber je nach Agent/Server-Version keine installierte Software. In diesem Fall zeigt der Software-Tab einen entsprechenden Hinweis. Sobald MeshCentral ein Softwaresegment liefert, wird es ohne weitere Datenbankänderung übernommen.
|
||||
|
||||
Dieses Update enthält keine .env, config.json, Datenbank-, Upload- oder Logdateien.
|
||||
@@ -0,0 +1,13 @@
|
||||
AssetManager v0.3.9.1
|
||||
=======================
|
||||
|
||||
Änderungen:
|
||||
- Schriftfarbe der Geräteinventar-Registerkarten explizit auf Schwarz gesetzt.
|
||||
- Farbige Symbole für Hardware-Hauptsektionen und Unterbereiche ergänzt.
|
||||
- Globales Feld „Eigenes CSS“ in den Einstellungen ergänzt.
|
||||
- Das gespeicherte Custom CSS wird über /custom.css nach app.css geladen und kann Standardregeln überschreiben.
|
||||
- Custom CSS wird in general.custom_css der bestehenden config.json gespeichert.
|
||||
|
||||
Hinweis:
|
||||
- .env, config.json, Datenbank-, Upload- und Logdateien sind nicht im Update enthalten.
|
||||
- Das Paket wurde syntaktisch und über Jinja-Template-Laden geprüft, aber nicht gegen die produktive PostgreSQL-/Docker-Umgebung getestet.
|
||||
@@ -0,0 +1,17 @@
|
||||
AssetManager v0.3.9.2 – erweitertes MeshCentral-Geräteinventar
|
||||
|
||||
Änderungen:
|
||||
- Hardwareinventar wird aus mehreren MeshCentral-JSON-Bereichen aufgebaut, nicht nur aus sys.hardware.
|
||||
- Netzwerkadapter aus net.netif2 inklusive IPv4, IPv6, MAC, Gateway, Netzmaske, Status, Typ, DNS-Suffix und Schnittstellenindex.
|
||||
- Loopback-Adapter werden in der normalen Inventaransicht ausgeblendet.
|
||||
- Sicherheitsbereich mit deduplizierten Antivirus-Produkten, Windows-Sicherheitscenter und Defender-Status.
|
||||
- Bereiche für Systemübersicht, BIOS/UEFI, Mainboard, CPU, RAM, Datenträger/Volumes, Grafik, TPM, Betriebssystemdetails sowie MeshCentral-/Laufzeitdaten.
|
||||
- Unbekannte zusätzliche Hardwarebereiche bleiben unter „Weitere Hardwaredaten“ sichtbar.
|
||||
- Bereits gespeicherte Rohdaten werden in der Detailansicht als Fallback sofort aufbereitet; eine neue Synchronisierung schreibt den neuen Snapshot dauerhaft.
|
||||
- Deutsche Abschnittsnamen erhalten passende Symbole im Inventarbaum.
|
||||
|
||||
Hinweise:
|
||||
- mesh_source_data bleibt unverändert als vollständiges Roh-JSON erhalten.
|
||||
- Keine .env-, config.json-, Datenbank-, Upload- oder Logdateien enthalten.
|
||||
- Python-Syntax, Jinja-Templates und die Aufbereitung anhand des bereitgestellten vollständigen MeshCentral-Datensatzes wurden geprüft.
|
||||
- Kein produktiver Docker-/PostgreSQL-Test durchgeführt.
|
||||
@@ -0,0 +1,16 @@
|
||||
AssetManager v0.3.9.3 – übersetzbares Geräteinventar und kompakter Hardwarebaum
|
||||
|
||||
Änderungen:
|
||||
- Geräteinventar verwendet für alle neu aufbereiteten Hauptsegmente und bekannten Eigenschaften sprachneutrale i18n-Schlüssel.
|
||||
- Deutsche und englische Übersetzungen für Inventar, Netzwerk, Sicherheit, Laufzeit, Tabs und Meldungen ergänzt.
|
||||
- Bestehende Rohdaten werden beim Öffnen erneut aufbereitet, damit ältere deutsch beschriftete Snapshots ohne erneute Synchronisierung aktualisiert werden.
|
||||
- Hardwarebaum ist beim ersten Öffnen vollständig zugeklappt; nur die Hauptsegmente stehen untereinander.
|
||||
- Auf-/Zuklappzustand wird über das vorhandene Browser-State-System je Asset gespeichert.
|
||||
- Letzte Erweiterungen in Diagrammverwaltung, Diagrammformular, Custom CSS und relevanten Einstellungen auf i18n-Nutzung umgestellt.
|
||||
- Netzwerkdaten inklusive IPv4/IPv6, Gateway, Netzmaske und MAC bleiben enthalten.
|
||||
|
||||
Validierung:
|
||||
- Python-Syntaxprüfung erfolgreich.
|
||||
- Alle Jinja2-Templates geladen.
|
||||
- Inventaraufbereitung mit dem bereitgestellten vollständigen MeshCentral-JSON getestet.
|
||||
- Kein produktiver Docker-/PostgreSQL-Test durchgeführt.
|
||||
@@ -0,0 +1,19 @@
|
||||
# AssetManager v0.3.9.4
|
||||
|
||||
## Excel-Import und -Export über Asset-ID
|
||||
|
||||
- Die interne `Asset.id` wird im Asset-Export als erste Spalte `Asset-ID` ausgegeben.
|
||||
- Die Excel-Importvorlage enthält ebenfalls als erste Spalte `Asset-ID`.
|
||||
- Zeilen mit Asset-ID aktualisieren ausschließlich den vorhandenen Datensatz mit dieser ID.
|
||||
- Zeilen ohne Asset-ID legen immer ein neues Asset an.
|
||||
- Eine unbekannte oder ungültige Asset-ID erzeugt einen Zeilenfehler; es wird kein neues Asset angelegt.
|
||||
- Bei Updates werden nur ausgefüllte Excel-Zellen übernommen.
|
||||
- Leere Excel-Zellen löschen oder überschreiben keine vorhandenen Werte.
|
||||
- Eine bestehende Kategorie wird nur geändert, wenn in der Zeile ausdrücklich eine Kategorie angegeben ist.
|
||||
- Der Asset-Detail-Template-Hotfix aus v0.3.9.3.1 ist enthalten.
|
||||
|
||||
## Validierung
|
||||
|
||||
- Python-Syntaxprüfung durchgeführt.
|
||||
- ZIP-Struktur geprüft.
|
||||
- Kein produktiver Test gegen die bestehende PostgreSQL-Datenbank durchgeführt.
|
||||
@@ -0,0 +1,21 @@
|
||||
# AssetManager v0.3.9.5
|
||||
|
||||
## Excel-Import unabhängig von Kategoriefeldern
|
||||
|
||||
- Standardmäßig werden alle global bekannten Felder importiert, die im Feldkatalog:
|
||||
- aktiv sind,
|
||||
- für Excel-Import freigegeben sind,
|
||||
- nicht schreibgeschützt sind.
|
||||
- Die Felder müssen in der Zielkategorie nicht aktiv oder sichtbar sein.
|
||||
- Neue Option im Importdialog: `Import only active fields`
|
||||
- Die Option ist standardmäßig deaktiviert.
|
||||
- Ist sie aktiviert, werden nur die aktiven Felder der jeweiligen Kategorie importiert.
|
||||
- Systemfelder und dynamische benutzerdefinierte Felder werden unterstützt.
|
||||
- Leere Excel-Zellen überschreiben weiterhin keine bestehenden Werte.
|
||||
- Die Importvorlage enthält alle global importierbaren Felder.
|
||||
|
||||
## Validierung
|
||||
|
||||
- Python-Syntaxprüfung erfolgreich.
|
||||
- ZIP-Struktur geprüft.
|
||||
- Kein produktiver Import gegen die bestehende PostgreSQL-Datenbank durchgeführt.
|
||||
@@ -0,0 +1,31 @@
|
||||
# AssetManager v0.3.9.6.1
|
||||
|
||||
## Assetliste
|
||||
- Serverseitige Seitennavigation wieder entfernt.
|
||||
- Die komplette Assetliste wird wieder auf einer Seite geladen.
|
||||
- Tabellenfilter durchsuchen dadurch wieder alle Assets.
|
||||
- Die Query-Optimierungen aus v0.3.9.6 bleiben erhalten:
|
||||
- selectinload für Kategorienfelder
|
||||
- Kategorie pro Asset mit joinedload
|
||||
- Sortierung in PostgreSQL
|
||||
- keine wiederholte Mitladung der Kategorienfelder je Asset
|
||||
|
||||
## Datumsfelder
|
||||
- Excel-Datumswerte werden anhand der Felddefinition normalisiert.
|
||||
- Felder vom Typ date werden als YYYY-MM-DD gespeichert.
|
||||
- Felder vom Typ datetime werden als YYYY-MM-DDTHH:MM gespeichert.
|
||||
- Der Bearbeitungsdialog formatiert alte Zeitstempel korrekt für HTML-Datumsfelder.
|
||||
- Beim Start werden ältere Werte wie YYYY-MM-DD 00:00:00 in den Systemfeldern
|
||||
purchase_date, warranty_until und assigned_on auf YYYY-MM-DD korrigiert.
|
||||
|
||||
## Ursache
|
||||
OpenPyXL liest formatierte Excel-Datumszellen häufig als Python-datetime.
|
||||
Die bisherige Importfunktion speicherte daraus YYYY-MM-DD 00:00:00.
|
||||
Die Detailansicht konnte diesen Text anzeigen, ein HTML-input type=date akzeptiert
|
||||
jedoch ausschließlich YYYY-MM-DD und erschien deshalb leer.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung erfolgreich.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- ZIP-Struktur geprüft.
|
||||
- Kein produktiver Lauf gegen die bestehende PostgreSQL-Datenbank durchgeführt.
|
||||
@@ -0,0 +1,26 @@
|
||||
# AssetManager v0.3.9.6.2
|
||||
|
||||
Hotfix für den Startfehler:
|
||||
|
||||
NameError: name '_html_field_value' is not defined
|
||||
|
||||
Ursache:
|
||||
Die Jinja2-Hilfsfunktion wurde als Template-Global registriert, bevor ihre
|
||||
Python-Funktion definiert war.
|
||||
|
||||
Korrektur:
|
||||
Die Registrierung erfolgt jetzt unmittelbar nach der Funktionsdefinition.
|
||||
|
||||
Alle Änderungen aus v0.3.9.6.1 bleiben enthalten:
|
||||
- vollständige Assetliste ohne Pagination
|
||||
- optimierte Datenbankabfragen
|
||||
- Datumsnormalisierung für Excel-Import
|
||||
- Anzeige alter Datumswerte im Bearbeitungsformular
|
||||
- automatische Reparatur älterer Datumsstrings beim Start
|
||||
|
||||
Validierung:
|
||||
- Reihenfolge von Definition und Registrierung geprüft
|
||||
- Python-Syntaxprüfung erfolgreich
|
||||
- Jinja2-Templates syntaktisch geprüft
|
||||
- ZIP-Struktur geprüft
|
||||
- kein produktiver Docker-/PostgreSQL-Lauf durchgeführt
|
||||
@@ -0,0 +1,6 @@
|
||||
v0.3.9.6.3
|
||||
|
||||
- Standardsortierung der Assetliste immer nach Bezeichnung (alphabetisch).
|
||||
- Neuer Button 'Inhalt neu laden'.
|
||||
- Lädt die Asset-Tabelle per AJAX neu, ohne die komplette Seite zu aktualisieren.
|
||||
- Filter, Scrollposition und Browserzustand bleiben erhalten.
|
||||
@@ -0,0 +1,28 @@
|
||||
# AssetManager v0.3.9.6
|
||||
|
||||
## Excel-Importergebnis
|
||||
- Ausgabe je Excel-Zeile mit Excel-Zeilennummer, Asset-ID, Aktion und Begründung.
|
||||
- Übersprungene Zeilen zeigen ausdrücklich, dass keine Änderungen festgestellt wurden.
|
||||
- Fehler und Neuanlagen erscheinen ebenfalls zeilenweise.
|
||||
|
||||
## Performance der Assetliste
|
||||
- Serverseitige Seitennavigation.
|
||||
- Standard: 100 Assets pro Seite; zulässig 25 bis 250.
|
||||
- SQL LIMIT/OFFSET statt Laden aller Assets.
|
||||
- Kategorienfelder werden mit selectinload geladen.
|
||||
- Assets laden nur die Kategorie, nicht erneut alle Kategorienfelder.
|
||||
- Sortierung erfolgt in PostgreSQL ohne Beachtung der Groß-/Kleinschreibung.
|
||||
- Kategorie-Assetzahlen werden aggregiert statt über N+1-Lazy-Loads ermittelt.
|
||||
|
||||
## Standardfelder
|
||||
- Neues Merkmal `is_default` an Felddefinitionen.
|
||||
- In den Feldeinstellungen kann ein Feld als Standardfeld markiert werden.
|
||||
- Kategorienliste enthält Auswahl-Checkboxen.
|
||||
- Aktion `Standardfelder aktivieren` aktiviert alle markierten Standardfelder in den ausgewählten Kategorien.
|
||||
- Die Migration markiert die bisherigen DEFAULT_FIELDS initial als Standardfelder.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung durchgeführt.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- ZIP-Struktur geprüft.
|
||||
- Kein produktiver Lauf gegen die bestehende PostgreSQL-Datenbank durchgeführt.
|
||||
@@ -0,0 +1,30 @@
|
||||
# AssetManager v0.3.9.7
|
||||
|
||||
## Standardfelder
|
||||
- Die Aktion „Standardfelder aktivieren“ setzt jetzt zusätzlich
|
||||
`show_in_list = True`.
|
||||
- Bereits vorhandene Standardfelder werden ebenfalls für die Listenanzeige
|
||||
aktiviert.
|
||||
- Neu angelegte Feldzuordnungen sind sofort aktiv und in der Liste sichtbar.
|
||||
|
||||
## Datensatzanzeige
|
||||
- Jede Tabelle mit der Klasse `data-table` erhält oben rechts eine Anzeige:
|
||||
„Angezeigt: X von Y Datensätzen“.
|
||||
- Ausgeblendete Zeilen durch Such- und Spaltenfilter werden berücksichtigt.
|
||||
- Die Anzeige aktualisiert sich bei Filtereingaben und Tabellenänderungen.
|
||||
|
||||
## Assetliste
|
||||
- Neuer direkter Bearbeiten-Button ✎ in jeder Zeile.
|
||||
|
||||
## Scrollverhalten
|
||||
- Seiten mit einer `sticky-table` verwenden auf Desktop nur noch den
|
||||
Tabellenbereich als vertikale Scrollfläche.
|
||||
- Die äußere Browserseite scrollt auf diesen Listenseiten nicht zusätzlich.
|
||||
- Für kleinere Bildschirme bleibt ein responsiver Rückfall erhalten.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung erfolgreich.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- JavaScript-Datei strukturell geprüft.
|
||||
- ZIP-Wurzel `assetmanager/` geprüft.
|
||||
- Kein produktiver Docker-/PostgreSQL-Lauf durchgeführt.
|
||||
@@ -0,0 +1,33 @@
|
||||
# AssetManager v0.3.9.8
|
||||
|
||||
## Browser-Tab-Logo / Favicon
|
||||
- Neues Uploadfeld in Einstellungen → Allgemein.
|
||||
- Upload funktioniert analog zum vorhandenen Firmenlogo.
|
||||
- Unterstützte Formate: PNG, JPG, JPEG, WEBP und GIF.
|
||||
- Vorhandenes Favicon kann angezeigt, ersetzt und entfernt werden.
|
||||
- Wenn kein eigenes Favicon gesetzt ist, wird das Firmenlogo als Fallback genutzt.
|
||||
|
||||
## Übersetzungen
|
||||
- Neue und bestehende Texte der Assetliste wieder über `t()` ausgegeben.
|
||||
- Datensatzanzeige erhält lokalisierte Texte aus dem Template.
|
||||
- Dynamische Schaltflächen behalten die Sprache auch bei Zähleränderungen.
|
||||
|
||||
## Kategorienliste
|
||||
- Ungültige verschachtelte Formulare entfernt.
|
||||
- Gerade Tabellenlinien im Aktionsbereich wiederhergestellt.
|
||||
- Neue Spalten: Felder gesamt, aktive Felder, in Liste sichtbare Felder.
|
||||
- Aktive Attribute werden als kompakte Chips dargestellt.
|
||||
- Blau markierte Chips sind zusätzlich in der Assetliste sichtbar.
|
||||
|
||||
## Assetliste
|
||||
- Bearbeiten-Symbol mit eigener CSS-Klasse und robustem HTML-Zeichen korrigiert.
|
||||
- Tabellenzellen verwenden wieder normale Tabellengeometrie.
|
||||
|
||||
## Scrollverhalten
|
||||
- Single-Scroll-Modus wird ausschließlich auf Seiten mit `#asset-table` aktiviert.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung erfolgreich.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- ZIP-Wurzel `assetmanager/` geprüft.
|
||||
- Kein produktiver Docker-/PostgreSQL-Lauf durchgeführt.
|
||||
@@ -0,0 +1,33 @@
|
||||
# AssetManager v0.3.9.9
|
||||
|
||||
## Horizontales Scrollen
|
||||
- Oberhalb der Assettabelle gibt es eine zweite, stets erreichbare horizontale
|
||||
Scrollleiste.
|
||||
- Obere und untere Scrollleiste werden synchronisiert.
|
||||
- Die Tabelle kann weiterhin vertikal innerhalb des Tabellenbereichs scrollen.
|
||||
|
||||
## Spalten ein-/ausblenden
|
||||
- Neuer Button „Spalten“ in der Assetliste.
|
||||
- Rechtsklick auf eine Tabellenüberschrift öffnet ein Kontextmenü.
|
||||
- Einzelne Spalten können ausgeblendet werden.
|
||||
- Im Spaltendialog können ausgeblendete Spalten wieder eingeblendet werden.
|
||||
- Auswahl wird benutzerspezifisch im Browser gespeichert.
|
||||
- „Alle einblenden“ und „Zurücksetzen“ sind vorhanden.
|
||||
|
||||
## Spaltenbreite
|
||||
- Felddefinitionen besitzen die neue optionale Einstellung
|
||||
„Breite in Listen (Pixel)“.
|
||||
- Zulässiger Bereich: 40 bis 800 Pixel.
|
||||
- Leer bedeutet automatische Breite.
|
||||
- Lange Inhalte in fest begrenzten Spalten werden mit Auslassungspunkten
|
||||
dargestellt.
|
||||
|
||||
## Datenbank
|
||||
- Neue nullable Spalte `field_definitions.list_width`.
|
||||
- Lightweight-Migration ergänzt die Spalte automatisch.
|
||||
|
||||
## Validierung
|
||||
- Python-Syntaxprüfung durchgeführt.
|
||||
- Jinja2-Templates syntaktisch geprüft.
|
||||
- ZIP-Struktur geprüft.
|
||||
- Kein produktiver Docker-/PostgreSQL-Lauf durchgeführt.
|
||||
@@ -0,0 +1,25 @@
|
||||
# AssetManager v0.4.0.0
|
||||
|
||||
## Backup-System
|
||||
|
||||
- Neuer produktiver Bereich unter Einstellungen > Sicherung.
|
||||
- Manuelle Sicherung per Schaltfläche.
|
||||
- Automatische Sicherung alle 8 Stunden.
|
||||
- Automatische Löschung von Sicherungen, die älter als 3 Tage sind.
|
||||
- Ablage unter `/data/backups`.
|
||||
- PostgreSQL-Dump im Custom-Format.
|
||||
- Sicherung von `config.json`, `APPINFO.json` und Upload-Dateien.
|
||||
- Download, Upload und Löschen vorhandener Sicherungen.
|
||||
- Wiederherstellung nach Eingabe von `RESTORE`.
|
||||
- Automatische Sicherheitssicherung unmittelbar vor jeder Wiederherstellung.
|
||||
- Vollständig deutsch/englisch übersetzbare Oberfläche.
|
||||
|
||||
## Docker
|
||||
|
||||
Das App-Image enthält nun `postgresql-client` für `pg_dump` und `pg_restore`.
|
||||
Der Hostpfad `/data/backups` wird nach `/data/backups` in den Container eingebunden.
|
||||
|
||||
## Datenschutz und Update-Schutz
|
||||
|
||||
Die Datei `.env` und Umgebungsvariablen werden nicht in Sicherungen aufgenommen.
|
||||
Das Update-ZIP enthält keine Laufzeitdaten, Backups, Uploads, Logs oder Datenbankdateien.
|
||||
@@ -0,0 +1,15 @@
|
||||
# AssetManager v0.4.0.1
|
||||
|
||||
## Backup
|
||||
- Fehler `NoneType object has no attribute get` beim manuellen Backup behoben.
|
||||
- Benutzername wird nun sicher über die bestehende Session-Hilfsfunktion ermittelt.
|
||||
- Backup-Seite als übersichtliche Karten- und Tabellenansicht überarbeitet.
|
||||
- Neue Status-, Hilfe- und Erfolgstexte vollständig in Deutsch und Englisch übersetzt.
|
||||
|
||||
## Asset-Dialog
|
||||
- Raumnummer und übergeordnetes Gerät werden nicht mehr doppelt angezeigt.
|
||||
- Beide Felder bleiben an ihrer konfigurierten Position und vollständig bearbeitbar.
|
||||
- Bild-Beschriftung in das Übersetzungssystem aufgenommen.
|
||||
|
||||
## Update-Schutz
|
||||
Nicht enthalten bzw. nicht überschrieben: .env, APPINFO.json, data/config/config.json, Datenbankdaten, Uploads, Backups und Logs.
|
||||
@@ -0,0 +1,61 @@
|
||||
# AssetManager v0.4.0.10
|
||||
|
||||
## Dark-Mode-Nacharbeiten
|
||||
|
||||
### Einstellungen und Bereichsränder
|
||||
|
||||
Weiße Ränder und Flächen in Einstellungsbereichen wurden entfernt.
|
||||
|
||||
Diese Elemente verwenden jetzt:
|
||||
|
||||
- `Inhaltsflächen` für den Hintergrund
|
||||
- `Rahmenfarbe` für Umrandungen
|
||||
- `Textfarbe` für Beschriftungen
|
||||
|
||||
Damit werden die betroffenen Bereiche über die vorhandenen
|
||||
Darstellungseinstellungen gesteuert.
|
||||
|
||||
### Sprachmenü
|
||||
|
||||
Nicht ausgewählte Sprachen waren im Dark Mode erst beim Überfahren mit der
|
||||
Maus sichtbar.
|
||||
|
||||
Korrigiert wurden:
|
||||
|
||||
- Hintergrund des Menüs
|
||||
- Textfarbe aller Einträge
|
||||
- Hover-Zustand
|
||||
- aktiver Spracheintrag
|
||||
- Rahmenfarbe
|
||||
|
||||
### Assetbaum
|
||||
|
||||
Korrigiert wurden:
|
||||
|
||||
- Kategorienamen im Dark Mode
|
||||
- Legenden und Feldbeschriftungen
|
||||
- Hintergrund und Text des Schalters zum Ausblenden einzelner Geräte
|
||||
- Hover- und Auswahlzustände der Kategorien
|
||||
|
||||
### Farbzuordnung
|
||||
|
||||
Die betroffenen Elemente verwenden jetzt konsequent:
|
||||
|
||||
- `Inhaltsflächen`
|
||||
- `Rahmenfarbe`
|
||||
- `Textfarbe`
|
||||
- `Primärfarbe`
|
||||
|
||||
Es wurde kein zusätzliches Farbmerkmal eingeführt.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,61 @@
|
||||
# AssetManager v0.4.0.11
|
||||
|
||||
## Dark Mode auf weiteren Seiten vervollständigt
|
||||
|
||||
Die verbleibenden fest codierten hellen Flächen wurden für den Dark Mode
|
||||
übersteuert.
|
||||
|
||||
Korrigiert wurden insbesondere:
|
||||
|
||||
- MeshCentral-Synchronisierung
|
||||
- Statistik-Karten
|
||||
- Verbindungsformular
|
||||
- Live-Protokoll
|
||||
- Statushinweise
|
||||
- Statuswerte
|
||||
- Formularhintergrund
|
||||
- Eingabefelder
|
||||
- Tabellenbereich
|
||||
- Sicherungen
|
||||
- Übersichtskarten
|
||||
- automatische Sicherung
|
||||
- Upload-Bereich
|
||||
- Dateiauswahl
|
||||
- Backup-Tabelle
|
||||
- Kategorien
|
||||
- Tabellenflächen
|
||||
- Aktionsformulare
|
||||
- Attribut-Badges
|
||||
- Übersetzungen
|
||||
- Filterbereich
|
||||
- Auswahlbereich
|
||||
- Textfelder
|
||||
- Benutzerverwaltung
|
||||
- Anlageformular
|
||||
- Benutzerformulare
|
||||
- Gruppen- und Rechtebereiche
|
||||
- Beschriftungen und Checkboxen
|
||||
|
||||
## Farbzuordnung
|
||||
|
||||
Die korrigierten Flächen orientieren sich weiterhin an:
|
||||
|
||||
- Inhaltsflächen
|
||||
- Rahmenfarbe
|
||||
- Textfarbe
|
||||
- Primärfarbe
|
||||
|
||||
Spezielle Dark-Mode-Abstufungen werden nur verwendet, um Formulare,
|
||||
Tabellenköpfe und eingebettete Bereiche visuell voneinander zu trennen.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,52 @@
|
||||
# AssetManager v0.4.0.12
|
||||
|
||||
## Ladeanzeige an Hell- und Dunkelmodus angepasst
|
||||
|
||||
Der Ladebereich der Assetliste verwendet jetzt ein echtes Bildschirm-Overlay.
|
||||
|
||||
### Heller Modus
|
||||
|
||||
- halbtransparenter heller Hintergrund
|
||||
- Inhaltsfläche und Rahmenfarbe aus der Darstellungskonfiguration
|
||||
- Spinner in Primärfarbe
|
||||
|
||||
### Dunkler Modus
|
||||
|
||||
- dunkler halbtransparenter Bildschirmhintergrund
|
||||
- dunkle Dialogfläche
|
||||
- helle Beschriftungen
|
||||
- dunkler Rahmen
|
||||
- Spinner in Primärfarbe
|
||||
- stärkere, zum Dark Mode passende Schattenwirkung
|
||||
|
||||
## Weitere Dialoge und Fortschrittsanzeigen
|
||||
|
||||
Zusätzlich wurden vereinheitlicht:
|
||||
|
||||
- native Dialogfenster
|
||||
- Dialog-Hintergründe
|
||||
- HTML-Fortschrittsanzeigen
|
||||
- allgemeine Fortschrittsleisten
|
||||
|
||||
Diese Elemente verwenden nun ebenfalls:
|
||||
|
||||
- Inhaltsflächen
|
||||
- Rahmenfarbe
|
||||
- Textfarbe
|
||||
- Primärfarbe
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
|
||||
Mit dieser Version ist der Theme-/Dark-Mode-Ausbau für die 0.4-Reihe
|
||||
abgeschlossen. Der nächste Entwicklungsschritt startet mit v0.5.0.0 und der
|
||||
Softwareinventarisierung.
|
||||
@@ -0,0 +1,49 @@
|
||||
# AssetManager v0.4.0.13
|
||||
|
||||
## Scrollbars an Hell- und Dunkelmodus angepasst
|
||||
|
||||
Die Scrollbars wurden systemweit vereinheitlicht.
|
||||
|
||||
Betroffen sind unter anderem:
|
||||
|
||||
- Assettabelle
|
||||
- obere horizontale Scrollleiste der Assettabelle
|
||||
- Verwaltungstabellen
|
||||
- Baumansicht
|
||||
- Kategorienauswahl im Assetbaum
|
||||
- Dialoge
|
||||
- Protokollbereiche
|
||||
- Textfelder
|
||||
- Dropdown-Menüs
|
||||
- sonstige scrollbare Bereiche
|
||||
|
||||
## Dark Mode
|
||||
|
||||
- dunkler Scrollbar-Hintergrund
|
||||
- kontrastreicher graublauer Scrollgriff
|
||||
- hellerer Hover-Zustand
|
||||
- aktiver Zustand in Primärfarbe
|
||||
- dunkle Scrollbar-Ecken
|
||||
|
||||
## Heller Modus
|
||||
|
||||
- heller Scrollbar-Hintergrund
|
||||
- mittelgrauer Scrollgriff
|
||||
- dunklerer Hover-Zustand
|
||||
|
||||
## Browserunterstützung
|
||||
|
||||
- Firefox über `scrollbar-color` und `scrollbar-width`
|
||||
- Chromium, Edge und Safari über `::-webkit-scrollbar`
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,39 @@
|
||||
# AssetManager v0.4.0.14
|
||||
|
||||
## Gespeicherte Tabellenfilter beim Zurücksetzen bereinigt
|
||||
|
||||
Der Button „Filter zurücksetzen“ im gelben Filterhinweis leert jetzt nicht
|
||||
nur die sichtbaren Filterfelder, sondern entfernt zusätzlich den dazugehörigen
|
||||
gespeicherten Browserzustand.
|
||||
|
||||
Damit gilt jetzt für beide Wege dasselbe Verhalten:
|
||||
|
||||
- Filter manuell im Filterfeld löschen
|
||||
- Filter über den gelben Hinweis zurücksetzen
|
||||
|
||||
Nach dem Zurücksetzen:
|
||||
|
||||
- sind alle Filterfelder leer
|
||||
- verschwindet die gelbe Markierung
|
||||
- verschwindet der Filterhinweis
|
||||
- werden wieder alle Datensätze angezeigt
|
||||
- bleibt die Tabelle auch nach einem Refresh ungefiltert
|
||||
|
||||
## Technische Änderung
|
||||
|
||||
Programmgesteuerte Änderungen an Eingabefeldern lösen im Browser keine
|
||||
`input`- oder `change`-Ereignisse aus. Deshalb sendet der zentrale
|
||||
Filter-Reset jetzt ein eigenes Ereignis. Die Browser-State-Verwaltung entfernt
|
||||
daraufhin gezielt den gespeicherten Filterzustand der betroffenen Tabelle.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,45 @@
|
||||
# AssetManager v0.4.0.2
|
||||
|
||||
## Behoben: übergeordnetes Gerät speichern
|
||||
|
||||
`parent_asset_id` wurde beim Bearbeiten zunächst durch die allgemeine
|
||||
Formularverarbeitung als Text gesetzt. Die anschließende Datenbankabfrage
|
||||
verglich deshalb eine Integer-ID mit einem VARCHAR-Wert.
|
||||
|
||||
- `parent_asset_id` wird nicht mehr durch den allgemeinen Feld-Loop verarbeitet.
|
||||
- Das Feld wird ausschließlich durch die typisierte Spezialverarbeitung gesetzt.
|
||||
- Bestehende Werte werden vor Datenbankabfragen defensiv in Integer umgewandelt.
|
||||
- `room_number` wird ebenfalls nur noch durch seine Spezialverarbeitung gesetzt.
|
||||
|
||||
## Behoben: Filter in den übrigen Tabellen
|
||||
|
||||
Tabellen ohne `data-field`-Attribute konnten seit der Tabellenoptimierung keine
|
||||
Zellwerte mehr ihrem Filter zuordnen.
|
||||
|
||||
- Normale Tabellen verwenden nun einen stabilen ursprünglichen Spaltenindex.
|
||||
- Assettabellen verwenden weiterhin die performante `data-field`-Zuordnung.
|
||||
- Sortierung und Filter bleiben auch nach DOM-Änderungen korrekt verbunden.
|
||||
- Betroffen sind unter anderem Felder, Kategorien, Übersetzungen und Benutzer.
|
||||
|
||||
## Behoben: vertikales Scrollen in Verwaltungstabellen
|
||||
|
||||
Die großen Verwaltungstabellen besitzen wieder einen eigenen vertikalen und
|
||||
horizontalen Scrollbereich mit fixierter Kopf- und Filterzeile.
|
||||
|
||||
## Behoben: Raum doppelt in der Asset-Detailansicht
|
||||
|
||||
`room_number` und `parent_asset_id` werden aus der allgemeinen Feldanzeige
|
||||
ausgeschlossen und nur noch über ihre ausdrücklich übersetzten Spezialzeilen
|
||||
ausgegeben.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,52 @@
|
||||
# AssetManager v0.4.0.3
|
||||
|
||||
## Assetbaum: Kategorienfilter überarbeitet
|
||||
|
||||
- übersichtliche Karten statt zusammengedrängter Standard-Checkboxen
|
||||
- responsive Spalten
|
||||
- klarer ausgewählter Zustand
|
||||
- besserer Abstand und besser lesbare Kategorienamen
|
||||
- eigener Scrollbereich nur innerhalb der Kategorienauswahl
|
||||
|
||||
Es wurden keine neuen fest codierten sichtbaren Texte eingeführt.
|
||||
|
||||
## Verwaltungstabellen: nur noch ein vertikaler Scrollbereich
|
||||
|
||||
Felder, Kategorien, Übersetzungen und Benutzerverwaltung verwenden jetzt das
|
||||
Browserfenster als einzigen vertikalen Scrollbereich. Die Tabellencontainer
|
||||
scrollen nur noch horizontal, falls die Tabelle breiter als die Seite ist.
|
||||
|
||||
Damit entfallen ineinander verschachtelte vertikale Scrollbereiche und
|
||||
unsichtbare innere Scrollbalken.
|
||||
|
||||
## Filter für editierbare Tabellen
|
||||
|
||||
Die Filterlogik liest jetzt zusätzlich die aktuellen Werte aus:
|
||||
|
||||
- Textfeldern
|
||||
- Zahlenfeldern
|
||||
- Textbereichen
|
||||
- Auswahllisten
|
||||
- Checkboxen
|
||||
- Optionsfeldern
|
||||
|
||||
Dadurch funktionieren die Filter nun auch in:
|
||||
|
||||
- MeshCentral-Feld-Mappings
|
||||
- Status-Werten
|
||||
- weiteren Tabellen mit direkt bearbeitbaren Zellen
|
||||
|
||||
Nach Änderungen in einem Eingabefeld wird der Filtercache automatisch
|
||||
aktualisiert.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,42 @@
|
||||
# AssetManager v0.4.0.4
|
||||
|
||||
## Tabellenfilter vollständig getrennt
|
||||
|
||||
Die Assetliste behält ihre optimierte Tabellen-Engine.
|
||||
|
||||
Alle übrigen Tabellen verwenden jetzt eine eigene, einfache und robuste
|
||||
Filter- und Sortierlogik:
|
||||
|
||||
- keine Filter-Caches
|
||||
- keine Asset-Spaltenereignisse
|
||||
- keine Zuordnung über verschiebbare Spalten
|
||||
- Filterung ausschließlich anhand der festen Spaltenposition
|
||||
- Filterzeilen liegen ausschließlich im Tabellenkopf
|
||||
- nur Datenzeilen im `tbody` können ausgeblendet werden
|
||||
- Suchfelder bleiben immer sichtbar und können jederzeit geleert werden
|
||||
- bearbeitbare Werte in Inputs, Selects, Textareas, Checkboxen und
|
||||
Radiobuttons werden direkt gelesen
|
||||
|
||||
Damit werden insbesondere MeshCentral-Feld-Mappings, Status-Werte, Felder,
|
||||
Kategorien, Übersetzungen und Benutzerverwaltung zuverlässig gefiltert.
|
||||
|
||||
## Assetbaum-Filter neu angeordnet
|
||||
|
||||
- Oberster Knoten, Namensfilter, Einzelschalter und Aktionen stehen oben.
|
||||
- Der Kategorienfilter befindet sich darunter über die gesamte verfügbare Breite.
|
||||
- Die Option zum Ausblenden einzelner Geräte wird als klarer Schalter dargestellt.
|
||||
- Responsive Darstellung für kleinere Bildschirmbreiten.
|
||||
- Keine neuen fest codierten sichtbaren Texte; vorhandene Übersetzungsschlüssel
|
||||
werden weiterverwendet.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,46 @@
|
||||
# AssetManager v0.4.0.5
|
||||
|
||||
## Einheitliche Tabellenlogik
|
||||
|
||||
Die getrennte Filter-Engine aus v0.4.0.4 wurde vollständig entfernt.
|
||||
|
||||
Alle Tabellen verwenden jetzt dasselbe stabile Prinzip wie die Assetliste:
|
||||
|
||||
- jede Spalte besitzt eine dauerhafte interne Feldkennung
|
||||
- Assetspalten verwenden ihre vorhandenen `data-field`-Kennungen
|
||||
- normale Tabellen erhalten automatisch synthetische Kennungen
|
||||
- jede Datenzelle wird eindeutig ihrer Kopfspalte zugeordnet
|
||||
- Filter lesen Zellwerte live und nicht aus einem veralteten Cache
|
||||
- Eingabefelder, Selects, Textareas, Checkboxen und Radiobuttons werden
|
||||
gemeinsam mit sichtbarem Zelltext ausgewertet
|
||||
- nur Zeilen im Tabellenkörper können ausgeblendet werden
|
||||
- die Filterzeile befindet sich ausschließlich im Tabellenkopf und bleibt
|
||||
immer sichtbar
|
||||
- Browser-wiederhergestellte Filterwerte werden nach dem Laden erneut angewendet
|
||||
|
||||
## MeshCentral-Feld-Mappings
|
||||
|
||||
Ein Filter wie `Computer` im Zielfeld findet nun unter anderem
|
||||
`Computername (hostname) – System`, weil sowohl der aktuelle Select-Wert als
|
||||
auch der sichtbare Text der gewählten Option durchsucht werden.
|
||||
|
||||
## Tabellenkopf nach dem Filtern
|
||||
|
||||
Die fehlerhaften Sticky-Abstände der Verwaltungstabellen wurden entfernt.
|
||||
Dadurch werden Kopf- und Filterzeile nach dem Filtern oder Neuladen nicht mehr
|
||||
abgeschnitten.
|
||||
|
||||
Die Assetliste behält ihre fixierte Kopf- und Filterzeile innerhalb ihres
|
||||
eigenen Scrollcontainers.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,44 @@
|
||||
# AssetManager v0.4.0.6
|
||||
|
||||
## MeshCentral-Feld-Mappings: Select-Filter korrigiert
|
||||
|
||||
Die Spalten `Zielfeld` und `Transformation` verwenden Select-Felder.
|
||||
|
||||
Die Filterauswertung wurde erweitert:
|
||||
|
||||
- Selects werden über `tagName` statt über einen JavaScript-Klassentest erkannt.
|
||||
- Es werden sowohl der technische Select-Wert als auch der sichtbare Text der
|
||||
ausgewählten Option ausgewertet.
|
||||
- Die beiden Mapping-Zellen erhalten zusätzlich einen serverseitig erzeugten
|
||||
`data-filter-value`.
|
||||
- Ein Filter wie `Computer` findet damit zuverlässig
|
||||
`Computername (hostname) – System`.
|
||||
- Transformationswerte wie `string`, `number`, `date` oder weitere definierte
|
||||
Optionen werden zuverlässig gefiltert.
|
||||
|
||||
## Assetliste: Inhalt neu laden bei geänderter Spaltenreihenfolge
|
||||
|
||||
Beim Nachladen wurde bisher nur der Tabellenkörper ersetzt. Der neue
|
||||
Tabellenkörper kam in der ursprünglichen Server-Reihenfolge, während der
|
||||
Tabellenkopf in der benutzerdefinierten Reihenfolge blieb.
|
||||
|
||||
Vor dem Einsetzen des neuen Tabellenkörpers werden jetzt:
|
||||
|
||||
1. die aktuell sichtbaren Kopfspalten in ihrer vorhandenen Reihenfolge gelesen,
|
||||
2. sämtliche neuen Datenzeilen anhand ihrer `data-field`-Kennung umsortiert,
|
||||
3. erst danach der bisherige Tabellenkörper ersetzt.
|
||||
|
||||
Damit stimmen Überschriften und Inhalte nach `Inhalt neu laden` weiterhin
|
||||
überein.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,53 @@
|
||||
# AssetManager v0.4.0.7
|
||||
|
||||
## Assetliste: Spaltenverschiebung wiederhergestellt
|
||||
|
||||
Die gemeinsame Tabellenlogik hatte in v0.4.0.5 und v0.4.0.6 auch der
|
||||
Auswahl- und Aktionsspalte künstliche `data-field`-Kennungen gegeben.
|
||||
|
||||
Dadurch wurden diese festen Spalten irrtümlich wie verschiebbare Assetspalten
|
||||
behandelt. Das führte zu:
|
||||
|
||||
- verschwindenden Spaltenüberschriften,
|
||||
- beschädigter Spaltenreihenfolge,
|
||||
- falscher Darstellung nach `Inhalt neu laden`.
|
||||
|
||||
Korrektur:
|
||||
|
||||
- Nur normale Verwaltungstabellen erhalten künstliche Feldkennungen.
|
||||
- Die Assetliste verwendet ausschließlich ihre echten Feldkennungen.
|
||||
- Auswahl- und Aktionsspalte bleiben feste, nicht verschiebbare Spalten.
|
||||
- Filter für feste Spalten verwenden bei Bedarf nur den ursprünglichen Index.
|
||||
- Nach dem Nachladen werden Spaltenbreiten und Sichtbarkeit erneut angewendet.
|
||||
|
||||
Bereits beschädigte gespeicherte Spaltenfolgen werden beim nächsten Laden
|
||||
automatisch bereinigt, weil unbekannte künstliche Kennungen verworfen werden.
|
||||
|
||||
## MeshCentral-Mappings: Select-Filter korrigiert
|
||||
|
||||
Der Zelltext eines HTML-Selects enthält technisch die Texte aller Optionen,
|
||||
nicht nur die aktuell ausgewählte Option.
|
||||
|
||||
Dadurch galt beispielsweise `Computer` für jede Zeile als Treffer, weil
|
||||
`Computername` in jedem Zielfeld-Select als mögliche Option enthalten war.
|
||||
|
||||
Die Filterauswertung verwendet jetzt ausschließlich:
|
||||
|
||||
- den tatsächlichen Select-Wert,
|
||||
- den Text der aktuell ausgewählten Option,
|
||||
- ausdrücklich gesetzte Filterwerte,
|
||||
- sichtbaren Text außerhalb des Select-Feldes.
|
||||
|
||||
Nicht ausgewählte Select-Optionen werden nicht mehr durchsucht.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,58 @@
|
||||
# AssetManager v0.4.0.8
|
||||
|
||||
## Aktive Tabellenfilter deutlich sichtbar
|
||||
|
||||
Für alle Tabellen wurde eine gemeinsame visuelle Filteranzeige ergänzt.
|
||||
|
||||
### Filterfelder
|
||||
|
||||
Sobald in einem Spaltenfilter ein Wert steht:
|
||||
|
||||
- erhält das Eingabefeld einen gelben Hintergrund,
|
||||
- wird der Rahmen farblich hervorgehoben,
|
||||
- wird auch die zugehörige Filterzelle markiert.
|
||||
|
||||
Dadurch sind aktive und vom Browser wiederhergestellte Filter sofort sichtbar.
|
||||
|
||||
### Filterstatus an der Tabelle
|
||||
|
||||
Bei mindestens einem aktiven Filter erscheint direkt oberhalb der Tabelle eine
|
||||
Statusleiste mit:
|
||||
|
||||
- Anzahl aktiver Filter,
|
||||
- Anzahl sichtbarer Datensätze,
|
||||
- Gesamtzahl der Datensätze,
|
||||
- Schaltfläche zum Zurücksetzen aller Filter dieser Tabelle.
|
||||
|
||||
Ohne aktive Filter bleibt die Statusleiste ausgeblendet.
|
||||
|
||||
### Übersetzungen
|
||||
|
||||
Alle neuen sichtbaren Texte wurden in das bestehende Übersetzungssystem
|
||||
aufgenommen:
|
||||
|
||||
- `lists.filter_active`
|
||||
- `lists.filters_active`
|
||||
- `lists.filter_status`
|
||||
- `lists.clear_filters`
|
||||
|
||||
Deutsch und Englisch sind vollständig enthalten.
|
||||
|
||||
## Nächster Entwicklungsschritt
|
||||
|
||||
Als nächster Funktionsblock ist die Software-Inventarisierung vorgesehen.
|
||||
Sie soll als erster vollständiger Job-/Callback-Workflow dienen und damit die
|
||||
technische Grundlage für spätere Softwareverteilung und weitere Clientaktionen
|
||||
bilden.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,69 @@
|
||||
# AssetManager v0.4.0.9
|
||||
|
||||
## Konfigurierbare Systemfarben
|
||||
|
||||
Unter `Einstellungen → Darstellung` steht eine neue Sektion
|
||||
`Systemfarben` zur Verfügung.
|
||||
|
||||
Konfigurierbar sind:
|
||||
|
||||
- Primärfarbe
|
||||
- Primärfarbe bei Auswahl
|
||||
- Farbe der Kopfzeile
|
||||
- Navigationsfarbe
|
||||
- Seitenhintergrund
|
||||
- Inhaltsflächen
|
||||
- Textfarbe
|
||||
- Rahmenfarbe
|
||||
- Erfolgsfarbe
|
||||
- Warnfarbe
|
||||
- Fehlerfarbe
|
||||
|
||||
Die Eingaben erfolgen über Farbwähler. Eine Vorschau wird beim Ändern sofort
|
||||
aktualisiert. Über `Farben zurücksetzen` können die Standardwerte wieder in
|
||||
die Eingabefelder übernommen werden.
|
||||
|
||||
Die Werte werden in `config.json` unter `general.colors` gespeichert.
|
||||
|
||||
## Heller und dunkler Darstellungsmodus
|
||||
|
||||
Jeder angemeldete Benutzer besitzt nun eine eigene Einstellung:
|
||||
|
||||
- Hell
|
||||
- Dunkel
|
||||
|
||||
Die Einstellung wird in der Benutzerdatenbank gespeichert und bei jeder
|
||||
Anmeldung in die Sitzung übernommen.
|
||||
|
||||
Umschalten ist möglich:
|
||||
|
||||
- direkt in der oberen Navigationsleiste,
|
||||
- im Profil über eine grafische Auswahl.
|
||||
|
||||
Unter `Einstellungen → Darstellung` kann zusätzlich der Standardmodus für
|
||||
nicht angemeldete Benutzer bzw. neue Sitzungen festgelegt werden.
|
||||
|
||||
## Datenbankmigration
|
||||
|
||||
Die Benutzertabelle erhält automatisch die Spalte:
|
||||
|
||||
theme_mode VARCHAR(20) DEFAULT 'light'
|
||||
|
||||
Es ist kein manueller SQL-Befehl notwendig.
|
||||
|
||||
## Übersetzungen
|
||||
|
||||
Alle neuen sichtbaren Texte wurden vollständig in Deutsch und Englisch in das
|
||||
bestehende Übersetzungssystem aufgenommen.
|
||||
|
||||
## Update-Schutz
|
||||
|
||||
Nicht enthalten bzw. nicht überschrieben:
|
||||
|
||||
- .env
|
||||
- APPINFO.json
|
||||
- data/config/config.json
|
||||
- Datenbankdaten
|
||||
- Uploads
|
||||
- Backups
|
||||
- Logs
|
||||
@@ -0,0 +1,18 @@
|
||||
# AssetManager v0.5.0.0
|
||||
|
||||
- Job- und Callback-Grundlage aktiviert
|
||||
- Navigation „Software und Aufträge“
|
||||
- Softwarepaket- und Auftragsübersicht
|
||||
- sichere, zeitlich begrenzte Callback-Tokens
|
||||
- Live-Status, Timeout-Erkennung und Diagnose
|
||||
- erste Softwareinventur für Windows, Linux und macOS
|
||||
- alle neuen sichtbaren Texte Deutsch/Englisch übersetzt
|
||||
|
||||
Backup-Fehler:
|
||||
`unknown` entstand, weil nur feste VERSION-Dateien im Container geprüft wurden.
|
||||
Jetzt wird auf APP_VERSION zurückgefallen. Neue Backups enthalten zusätzlich
|
||||
eine VERSION-Datei; alte Archive werden auf VERSION und APPINFO geprüft.
|
||||
Enthält ein altes Backup keine Versionsinformation, ist diese nicht eindeutig
|
||||
nachträglich ermittelbar und wird entsprechend angezeigt.
|
||||
|
||||
Geschützte Dateien/Daten werden nicht überschrieben.
|
||||
@@ -0,0 +1,53 @@
|
||||
# AssetManager v0.5.0.1
|
||||
|
||||
## Software-Einstellungsseite
|
||||
|
||||
Neu unter Einstellungen → Software:
|
||||
|
||||
- Callback-Basisadresse für HTTP und HTTPS
|
||||
- Vorschau des daraus erzeugten Health-Endpunkts
|
||||
- Gültigkeitsdauer des Callback-Tokens
|
||||
- Zeitlimit des Verbindungstests
|
||||
- optionale TLS-Zertifikatsprüfung beim Test
|
||||
- aktivierbares Callback-Debugprotokoll
|
||||
- maximale Anzahl gespeicherter Protokollzeilen
|
||||
- Live-Protokollfenster mit automatischer Aktualisierung
|
||||
- Protokoll löschen
|
||||
- Callback-Verbindung direkt testen
|
||||
|
||||
Der Verbindungstest protokolliert:
|
||||
|
||||
- verwendete Basis- und Health-Adresse
|
||||
- Schema, Host und Port
|
||||
- DNS-Auflösung
|
||||
- Zeitlimit und TLS-Prüfung
|
||||
- HTTP-Status
|
||||
- Content-Type
|
||||
- Antwortinhalt
|
||||
- detaillierte Verbindungsfehler
|
||||
|
||||
Empfangene Job-Callbacks werden ebenfalls ohne Token und ohne Softwareinhalt
|
||||
im Diagnoseprotokoll vermerkt.
|
||||
|
||||
## Backup-Darstellung
|
||||
|
||||
Die Backupseite und ihre Tabelle verwenden nun die komplette verfügbare
|
||||
Breite. Die Tabellenhülle scrollt nur noch horizontal, wenn der Browser
|
||||
tatsächlich zu schmal ist. Die Backupfunktion selbst wurde nicht verändert.
|
||||
|
||||
## Kompatibilität
|
||||
|
||||
Die bisherige Callback-Adresse aus `general.callback_base_url` wird weiterhin
|
||||
als Rückfall gelesen. Beim Speichern der neuen Seite wird nur der neue
|
||||
Konfigurationsabschnitt `software` ergänzt.
|
||||
|
||||
## Schutz bestehender Funktionen
|
||||
|
||||
Bestehende Backup-, MeshCentral-, Tabellen-, Theme- und Jobfunktionen wurden
|
||||
nicht strukturell verändert. Die neue Funktionalität ist additiv eingebunden.
|
||||
|
||||
Alle neuen sichtbaren Texte sind auf Deutsch und Englisch im bestehenden
|
||||
Übersetzungssystem enthalten.
|
||||
|
||||
Nicht überschrieben: .env, APPINFO.json, config.json, Datenbank, Uploads,
|
||||
Backups und Logs.
|
||||
@@ -0,0 +1,27 @@
|
||||
# AssetManager v0.5.0.2
|
||||
|
||||
## Korrektur der Auftragsstatus-Race-Condition
|
||||
|
||||
Der Client konnte die Softwareinventur erfolgreich abschließen und der
|
||||
AssetManager konnte den Callback mit HTTP 200 annehmen. Trotzdem blieb der
|
||||
Auftrag anschließend auf „Gesendet; Callback ausstehend“.
|
||||
|
||||
Ursache:
|
||||
|
||||
MeshCtrl wartet auf das Ende des Befehls auf dem Client. Der Client sendete
|
||||
den erfolgreichen Callback bereits, während der MeshCtrl-Prozess auf dem
|
||||
AssetManager noch lief. Nach Rückkehr von MeshCtrl setzte dessen Thread den
|
||||
bereits erfolgreichen Auftrag erneut pauschal auf „Gesendet“.
|
||||
|
||||
Korrektur:
|
||||
|
||||
- MeshCtrl-Diagnoseausgaben werden getrennt vom Auftragsstatus gespeichert.
|
||||
- Ein bereits eingegangener oder abgeschlossener Callback wird nicht mehr
|
||||
überschrieben.
|
||||
- Die Statusänderung erfolgt als bedingtes Datenbank-Update und schließt
|
||||
dadurch auch das kleine Zeitfenster zwischen Prüfung und Speicherung.
|
||||
- Die Statusmeldung spricht neutral von „Callback“ statt fälschlich immer von
|
||||
„HTTPS-Callback“, da HTTP und HTTPS unterstützt werden.
|
||||
|
||||
Es wurden keine bestehenden Callback-Endpunkte, Inventurskripte,
|
||||
Einstellungen, Tabellen, Themes oder Backupfunktionen verändert.
|
||||
@@ -0,0 +1,34 @@
|
||||
# AssetManager v0.5.0.3
|
||||
|
||||
## Callback-JSON korrigiert
|
||||
|
||||
Die Windows-PowerShell übergab den durch `ConvertTo-Json` erzeugten Text als
|
||||
PowerShell-String an `Invoke-RestMethod`. Unter Windows PowerShell 5.1 kann
|
||||
dieser Request-Body als UTF-16 übertragen werden, obwohl nur
|
||||
`application/json` angegeben ist. Der AssetManager erwartete UTF-8 und meldete
|
||||
deshalb „Ungültiges JSON“.
|
||||
|
||||
Korrektur auf dem Client:
|
||||
|
||||
- JSON wird ausdrücklich in UTF-8-Bytes umgewandelt.
|
||||
- Content-Type enthält jetzt `charset=utf-8`.
|
||||
- Die Protokollmeldung verwendet neutral „Callback“ statt „HTTPS callback“.
|
||||
|
||||
Zusätzliche Absicherung auf dem Server:
|
||||
|
||||
- vollständiger Request-Body wird vor dem Parsen gelesen
|
||||
- UTF-8-BOM, UTF-16 LE und UTF-16 BE werden erkannt
|
||||
- der erkannte Zeichensatz wird protokolliert
|
||||
- vollständiger Callback-Body erscheint im Software-Debugprotokoll
|
||||
- bei einem Parserfehler erscheint der komplette Body zusätzlich im Job-Log
|
||||
- Verarbeitungsschritte und Datenbank-Commit werden einzeln protokolliert
|
||||
|
||||
## Diagnoseoberfläche
|
||||
|
||||
- Job-ID als eigene Spalte in der Auftragsübersicht
|
||||
- Job-ID in der Auftragsdetailansicht
|
||||
- „Log kopieren“ im Software-Debugprotokoll
|
||||
- „Log kopieren“ für Client-, MeshCtrl-Standard- und MeshCtrl-Fehlerausgabe
|
||||
|
||||
Bestehende Backup-, MeshCentral-, Theme-, Tabellen- und Einstellungsfunktionen
|
||||
wurden nicht verändert.
|
||||
@@ -0,0 +1,44 @@
|
||||
# AssetManager v0.5.0.4
|
||||
|
||||
## Softwareliste pro Asset
|
||||
|
||||
Die vom Callback gespeicherten Softwareeinträge werden als Softwareliste des
|
||||
jeweiligen Assets dargestellt.
|
||||
|
||||
Die Aktion unterscheidet jetzt zwischen:
|
||||
|
||||
- „Softwareliste initialisieren“, wenn noch keine Einträge vorhanden sind
|
||||
- „Softwareinventur aktualisieren“, sobald eine Inventur gespeichert wurde
|
||||
|
||||
Zusätzlich wird die Anzahl der gespeicherten Einträge sichtbar angezeigt.
|
||||
Bei leerer Liste erscheint ein eigener Initialisierungshinweis.
|
||||
|
||||
Die Inventur übernimmt weiterhin bewusst alle vom Client gemeldeten Einträge.
|
||||
Es werden in dieser Version noch keine Windows-, Microsoft- oder sonstigen
|
||||
Standardkomponenten ausgeschlossen.
|
||||
|
||||
## Ausschlussregeln vorbereitet
|
||||
|
||||
Auf der Software-Einstellungsseite ist der künftige Bereich für Regeln nach:
|
||||
|
||||
- Softwarename
|
||||
- Hersteller
|
||||
- Suchmuster bzw. regulärem Ausdruck
|
||||
|
||||
bereits sichtbar gekennzeichnet. Die Regeln sind noch nicht aktiv, damit die
|
||||
erste vollständige Datengrundlage unverändert aufgebaut werden kann.
|
||||
|
||||
## Log kopieren korrigiert
|
||||
|
||||
`navigator.clipboard` ist bei einer normalen HTTP-Adresse häufig nicht
|
||||
verfügbar, weil die Clipboard-API einen sicheren Browserkontext verlangt.
|
||||
|
||||
Der Kopiervorgang verwendet nun:
|
||||
|
||||
1. die moderne Clipboard-API bei HTTPS bzw. sicherem Kontext
|
||||
2. einen kompatiblen Fallback über ein temporäres Textfeld bei HTTP
|
||||
|
||||
Die Schaltfläche zeigt anschließend „Kopiert“ oder „Kopieren fehlgeschlagen“.
|
||||
|
||||
Bestehende Callback-, Datenbank-, MeshCentral-, Backup- und Themefunktionen
|
||||
wurden nicht verändert.
|
||||
@@ -0,0 +1,48 @@
|
||||
# AssetManager v0.5.0.5
|
||||
|
||||
## Softwareliste im tatsächlichen Asset-Inventar
|
||||
|
||||
Die gespeicherte Callback-Inventur wird nun im vorhandenen Bereich
|
||||
„Geräteinventar → Software“ angezeigt. Dieser Bereich hatte vorher nur das
|
||||
Softwaresegment der allgemeinen MeshCentral-Detailabfrage verwendet und konnte
|
||||
die neue Tabelle `installed_software` deshalb nicht sehen.
|
||||
|
||||
Im Software-Tab stehen jetzt:
|
||||
|
||||
- Button „Softwareliste initialisieren“, wenn noch keine Liste vorhanden ist
|
||||
- danach „Softwareinventur aktualisieren“
|
||||
- Anzahl der gespeicherten Einträge
|
||||
- letzter Auftrag mit Job-ID und Status
|
||||
- letzte Inventur
|
||||
- Tabelle mit Name, Version, Hersteller, Architektur, Installationsdatum und
|
||||
letzter Sichtung
|
||||
- Filterung und Sortierung über die bestehenden Tabellenwerkzeuge
|
||||
|
||||
Nach dem Start einer Inventur wird wieder das Asset geöffnet und der
|
||||
Software-Tab automatisch ausgewählt.
|
||||
|
||||
## Zentrale Softwareübersicht
|
||||
|
||||
Der Navigationspunkt „Software und Aufträge“ enthält jetzt:
|
||||
|
||||
1. Alle Softwareinstallationen
|
||||
- eine Zeile je Software und Asset
|
||||
- Link zum jeweiligen Asset
|
||||
- Spaltenfilter und Sortierung
|
||||
|
||||
2. Kumulierte Softwareliste
|
||||
- Gruppierung nach Softwarename und Hersteller
|
||||
- vorhandene Versionen
|
||||
- Anzahl unterschiedlicher Versionen
|
||||
- Anzahl betroffener Assets
|
||||
- Anzahl der Einträge
|
||||
- letzte Sichtung
|
||||
|
||||
3. Letzte Softwareaufträge
|
||||
- bestehende Jobübersicht mit Job-ID und Status
|
||||
|
||||
Die Inventur übernimmt weiterhin alle Einträge. Ausschlussregeln bleiben
|
||||
vorbereitet, aber noch deaktiviert.
|
||||
|
||||
Bestehende Callback-, Backup-, MeshCentral-, Theme- und Datenbankfunktionen
|
||||
wurden nicht verändert.
|
||||
@@ -0,0 +1,45 @@
|
||||
# AssetManager v0.5.0.6
|
||||
|
||||
## Softwaretabellen auf eigenen Seiten
|
||||
|
||||
Die zentrale Softwareübersicht ist jetzt kompakt und verlinkt auf:
|
||||
|
||||
- `/software/installations`
|
||||
Detaillierte Liste aller Softwareinstallationen über alle Assets.
|
||||
|
||||
- `/software/summary`
|
||||
Kumulierte Softwareliste mit Versionen und Häufigkeiten.
|
||||
|
||||
Die Auftragsübersicht bleibt auf der zentralen Softwareseite.
|
||||
|
||||
## Numerische Filteroperatoren
|
||||
|
||||
Ausschließlich die numerischen Spalten der kumulierten Softwareliste
|
||||
unterstützen jetzt:
|
||||
|
||||
- `< 2`
|
||||
- `<= 5`
|
||||
- `> 10`
|
||||
- `>= 3`
|
||||
- `= 1`
|
||||
- `1..5`
|
||||
- `1-5`
|
||||
- `zwischen 1 und 5`
|
||||
- `between 1 and 5`
|
||||
|
||||
Die Erweiterung ist opt-in über `data-numeric-filter="1"` und verändert das
|
||||
Verhalten bestehender Tabellen und Textfilter nicht.
|
||||
|
||||
## Darkmode
|
||||
|
||||
Korrigiert wurden:
|
||||
|
||||
- Toastmeldungen einschließlich Erfolgs-, Warn- und Fehlervarianten
|
||||
- Schließen-Schaltfläche der Toasts
|
||||
- Überschriften im Geräteinventar
|
||||
- Inventar-Tabs
|
||||
- Softwarebereich im Geräteinventar
|
||||
- leere Inventurzustände
|
||||
|
||||
Bestehende Callback-, Inventur-, Backup-, MeshCentral- und Datenbankfunktionen
|
||||
wurden nicht verändert.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user