Initialer Import des AssetManagers

This commit is contained in:
2026-08-02 21:28:50 +00:00
commit ed72ce8821
256 changed files with 26361 additions and 0 deletions
+31
View File
@@ -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
+11
View File
@@ -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
+12
View File
@@ -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
View File
@@ -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
+5
View File
@@ -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
+11
View File
@@ -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"
}
+11
View File
@@ -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"
}
+26
View File
@@ -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
View File
@@ -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
View File
@@ -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.
+12
View File
@@ -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."
+112
View File
@@ -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
View File
@@ -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.
+182
View File
@@ -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.
+37
View File
@@ -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.
+14
View File
@@ -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
+6
View File
@@ -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.
+6
View File
@@ -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.
+22
View File
@@ -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.
+18
View File
@@ -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.
+15
View File
@@ -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
+11
View File
@@ -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.
+11
View File
@@ -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.
+26
View File
@@ -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
+29
View File
@@ -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.
+14
View File
@@ -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.
+32
View File
@@ -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.
+26
View File
@@ -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.
+16
View File
@@ -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
+13
View File
@@ -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.
+33
View File
@@ -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.
+21
View File
@@ -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.
+24
View File
@@ -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.
+29
View File
@@ -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.
+11
View File
@@ -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.
+39
View File
@@ -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.
+38
View File
@@ -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
+46
View File
@@ -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
+51
View File
@@ -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
+70
View File
@@ -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
+51
View File
@@ -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
+44
View File
@@ -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
+14
View File
@@ -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.
+11
View File
@@ -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.
+10
View File
@@ -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.
+13
View File
@@ -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.
+24
View File
@@ -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.
+15
View File
@@ -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.
+12
View File
@@ -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.
+13
View File
@@ -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.
+8
View File
@@ -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.
+8
View File
@@ -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.
+18
View File
@@ -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.
+11
View File
@@ -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.
+7
View File
@@ -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
+12
View File
@@ -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.
+16
View File
@@ -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
+15
View File
@@ -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.
+19
View File
@@ -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.
+15
View File
@@ -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.
+17
View File
@@ -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.
+35
View File
@@ -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.
+36
View File
@@ -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.
+22
View File
@@ -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
+25
View File
@@ -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
+16
View File
@@ -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.
+13
View File
@@ -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.
+17
View File
@@ -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.
+16
View File
@@ -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.
+19
View File
@@ -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.
+21
View File
@@ -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.
+31
View File
@@ -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.
+26
View File
@@ -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
+6
View File
@@ -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.
+28
View File
@@ -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.
+30
View File
@@ -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.
+33
View File
@@ -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.
+33
View File
@@ -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.
+25
View File
@@ -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.
+15
View File
@@ -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.
+61
View File
@@ -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
+61
View File
@@ -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
+52
View File
@@ -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.
+49
View File
@@ -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
+39
View File
@@ -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
+45
View File
@@ -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
+52
View File
@@ -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
+42
View File
@@ -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
+46
View File
@@ -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
+44
View File
@@ -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
+53
View File
@@ -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
+58
View File
@@ -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
+69
View File
@@ -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
+18
View File
@@ -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.
+53
View File
@@ -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.
+27
View File
@@ -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.
+34
View File
@@ -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.
+44
View File
@@ -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.
+48
View File
@@ -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.
+45
View File
@@ -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