Translate repository documentation and reorganize version history
This commit is contained in:
+2
-2
@@ -4,8 +4,8 @@
|
|||||||
"organization": "Jusaro systems",
|
"organization": "Jusaro systems",
|
||||||
"contact": "",
|
"contact": "",
|
||||||
"website": "",
|
"website": "",
|
||||||
"repository": "",
|
"repository": "https://git.jusaro.de/Roland/Assetmanager.git",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"copyright": "Copyright © 2026 Roland Reich",
|
"copyright": "Copyright © 2026 Roland Reich",
|
||||||
"description": "Assetmanagement mit optionaler MeshCentral-Integration über MeshCtrl"
|
"description": "Asset management with optional MeshCentral integration through MeshCtrl"
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-14
@@ -1,19 +1,19 @@
|
|||||||
# Mitwirken am AssetManager
|
# Contributing to AssetManager
|
||||||
|
|
||||||
Beiträge, Fehlerberichte und Forks sind willkommen.
|
Contributions, bug reports, and forks are welcome.
|
||||||
|
|
||||||
## Pull Requests
|
## Pull requests
|
||||||
|
|
||||||
- Ein Pull Request ist ein Vorschlag. Die Projektpflege entscheidet, ob, wann und in welcher Form er aufgenommen wird.
|
- A pull request is a proposal. The maintainer decides whether, when, and in which form it is included.
|
||||||
- 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.
|
- By intentionally submitting a contribution, you confirm that you are authorized to publish it and that it may be licensed under the Apache License 2.0.
|
||||||
- Kopiere keinen fremden Quellcode, keine Grafiken und keine Texte ohne nachweisbar kompatible Lizenz und erforderliche Urheber- oder Lizenzhinweise.
|
- Do not copy third-party source code, graphics, or text without a demonstrably compatible license and all required copyright or license notices.
|
||||||
- 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.
|
- Mention other products in public source code, comments, release notes, and documentation only when documenting an actual integration, dependency, or required compatibility. Pure product comparisons do not belong in the public source tree.
|
||||||
- Änderungen sollen möglichst auf den betroffenen Bereich begrenzt sein und bestehende Funktionen nicht ohne sachlichen Grund verändern.
|
- Keep changes focused on the affected area and avoid modifying existing functionality without a valid technical reason.
|
||||||
- Neue sichtbare Texte müssen vollständig in das vorhandene Übersetzungssystem aufgenommen werden.
|
- Add every new user-visible string to the existing translation system for all supported languages.
|
||||||
- Neue oder geänderte Oberflächen müssen mit dem bestehenden Hell- und Darkmode funktionieren.
|
- New or changed user interfaces must work in both light and dark mode.
|
||||||
- Aktualisiere bei einem Release `VERSION`, `app/version.py`, README und den passenden Versionshinweis.
|
- For a release, update `VERSION`, `app/version.py`, `README.md`, and the corresponding file under `docs/version-history/`.
|
||||||
|
|
||||||
## Vor dem Einreichen
|
## Before submitting
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python tools/check_public_release.py
|
python tools/check_public_release.py
|
||||||
@@ -21,6 +21,6 @@ python tools/check_translations.py
|
|||||||
python tools/validate_release.py
|
python tools/validate_release.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Drittkomponenten
|
## Third-party components
|
||||||
|
|
||||||
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.
|
Review every new dependency for license compatibility, provenance, maintenance status, and security risks. Update `THIRD_PARTY_NOTICES.md` and preserve all required license or NOTICE files in distributed products.
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
# AssetManager 0.5.5.27
|
# AssetManager 0.5.5.28
|
||||||
|
|
||||||
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.
|
AssetManager is a self-hosted web application for managing IT equipment and other organizational assets. The project is released under the **Apache License 2.0** and may be used, modified, and redistributed for private and commercial purposes.
|
||||||
|
|
||||||
## Funktionsumfang
|
## Features
|
||||||
|
|
||||||
- frei konfigurierbare Asset-Kategorien, Felder und Statuswerte
|
- configurable asset categories, fields, and status values
|
||||||
- Assetlisten, Detailansichten, Historie, Ausgabe und Rückgabe
|
- asset lists, detail views, history, assignment, and return workflows
|
||||||
- Excel-Import und -Export, Sammeländerungen, Zusammenführen und Baumansicht
|
- Excel import and export, bulk changes, duplicate merging, and tree views
|
||||||
- Hardware- und Softwareinventur
|
- hardware and software inventory
|
||||||
- Jobdefinitionen und Jobausführung mit Status, Callback, Wiederholung und Protokollen
|
- job definitions and job execution with status tracking, callbacks, retries, and logs
|
||||||
- lokale Benutzerverwaltung und optionale LDAP-Anmeldung
|
- local user management and optional LDAP authentication
|
||||||
- geschütztes lokales Notfallkonto auch bei aktiviertem LDAP
|
- protected local emergency administrator even when LDAP is enabled
|
||||||
- Rollen, Sichtbarkeitsregeln, Übersetzungen, Darkmode und anpassbare Darstellung
|
- roles, visibility rules, translations, dark mode, and configurable appearance
|
||||||
- integrierte Sicherungs- und Wiederherstellungsfunktionen
|
- integrated backup and restore functions
|
||||||
- optionale MeshCentral-Anbindung über die MeshCtrl-Kommandozeilenschnittstelle
|
- optional MeshCentral integration through the MeshCtrl command-line interface
|
||||||
|
|
||||||
## MeshCentral-Integration
|
## 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.
|
The integration is optional. AssetManager uses MeshCtrl for supported device queries and remote jobs. It does not access the MeshCentral database directly. MeshCentral and MeshCtrl are independent third-party projects and are not part of this repository; they are installed as dependencies during the Docker build.
|
||||||
|
|
||||||
## Voraussetzungen
|
## Requirements
|
||||||
|
|
||||||
- Docker Engine mit Docker Compose
|
- Docker Engine with Docker Compose
|
||||||
- ein für den Server geeigneter DNS-Name und HTTPS-Reverse-Proxy werden für produktive Installationen empfohlen
|
- a suitable DNS name and HTTPS reverse proxy are recommended for production installations
|
||||||
- optional eine erreichbare MeshCentral-Instanz
|
- optionally, a reachable MeshCentral instance
|
||||||
- optional LDAP/Active Directory
|
- optionally, LDAP or Active Directory
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ Die Integration ist optional. AssetManager verwendet MeshCtrl für unterstützte
|
|||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
|
||||||
Ändere in `.env` mindestens:
|
Set at least these values in `.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
POSTGRES_PASSWORD=CHANGE_ME
|
POSTGRES_PASSWORD=CHANGE_ME
|
||||||
@@ -41,33 +41,33 @@ LOCAL_ADMIN_USERNAME=emergency-admin
|
|||||||
LOCAL_ADMIN_PASSWORD=CHANGE_ME_MIN_12_CHARS
|
LOCAL_ADMIN_PASSWORD=CHANGE_ME_MIN_12_CHARS
|
||||||
```
|
```
|
||||||
|
|
||||||
Danach:
|
Then start the application:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
Standardmäßig ist die Anwendung unter Port `8088` erreichbar.
|
By default, the application is available on port `8088`.
|
||||||
|
|
||||||
## Persistente Daten
|
## Persistent data
|
||||||
|
|
||||||
Die Laufzeitdaten werden über Bind-Mounts unter `data/` gespeichert:
|
Runtime data is stored in bind mounts below `data/`:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
data/
|
data/
|
||||||
├── config/ Anwendungskonfiguration
|
├── config/ application configuration
|
||||||
├── postgres/ PostgreSQL-Datenbank
|
├── postgres/ PostgreSQL database
|
||||||
├── uploads/ hochgeladene Dateien
|
├── uploads/ uploaded files
|
||||||
├── logs/ Protokolle und Diagnosedaten
|
├── logs/ logs and diagnostics
|
||||||
├── backups/ Anwendungssicherungen
|
├── backups/ application backups
|
||||||
└── scripts/ bereitgestellte Skripte
|
└── scripts/ deployed scripts
|
||||||
```
|
```
|
||||||
|
|
||||||
Diese Inhalte sowie `.env` enthalten möglicherweise Zugangsdaten oder personenbezogene beziehungsweise betriebliche Daten und dürfen nicht in ein öffentliches Repository aufgenommen werden.
|
These directories and `.env` may contain credentials, personal data, or internal operational data and must not be committed to a public repository.
|
||||||
|
|
||||||
## Aktualisierung
|
## Updating
|
||||||
|
|
||||||
Vor einer Aktualisierung immer `.env` und den gesamten Ordner `data/` sichern. Danach den neuen Quellstand über den bestehenden Projektordner kopieren und ausführen:
|
Always back up `.env` and the complete `data/` directory before updating. Copy the new `assetmanager/` directory over the existing project directory and run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose down
|
docker compose down
|
||||||
@@ -75,17 +75,19 @@ docker compose up -d --build
|
|||||||
docker compose logs --tail=100 -f
|
docker compose logs --tail=100 -f
|
||||||
```
|
```
|
||||||
|
|
||||||
## Öffentlichen Quellstand erzeugen
|
Detailed release notes are stored in [`docs/version-history/`](docs/version-history/README.md).
|
||||||
|
|
||||||
Der Exporter erstellt ein bereinigtes ZIP mit genau einem Hauptordner `assetmanager/`:
|
## Creating a sanitized public source archive
|
||||||
|
|
||||||
|
The exporter creates a sanitized ZIP archive with exactly one top-level directory named `assetmanager/`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python tools/create_github_source.py
|
python tools/create_github_source.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Vor dem Export prüft das Skript unter anderem Versionen, Lizenzangaben, vertrauliche Laufzeitdateien und unerwünschte Produktvergleiche.
|
Before exporting, the script validates versions, license metadata, sensitive runtime files, and unwanted product-comparison references.
|
||||||
|
|
||||||
## Prüfungen
|
## Validation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python tools/check_public_release.py
|
python tools/check_public_release.py
|
||||||
@@ -93,20 +95,28 @@ python tools/check_translations.py
|
|||||||
python tools/validate_release.py
|
python tools/validate_release.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Drittkomponenten
|
## Documentation
|
||||||
|
|
||||||
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.
|
- [Client communication and software deployment architecture](docs/architecture/SOFTWARE-CLIENT-ARCHITECTURE.md)
|
||||||
|
- [Version history](docs/version-history/README.md)
|
||||||
|
- [Contributing](CONTRIBUTING.md)
|
||||||
|
- [Security policy](SECURITY.md)
|
||||||
|
- [Third-party notices](THIRD_PARTY_NOTICES.md)
|
||||||
|
|
||||||
## Mitwirken
|
## Third-party components
|
||||||
|
|
||||||
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.
|
Direct dependencies and their license types are listed in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). During the Docker build, license files from the installed Python and Node.js packages are collected under `/app/THIRD_PARTY_LICENSES/`.
|
||||||
|
|
||||||
## Sicherheit
|
## Contributing
|
||||||
|
|
||||||
Sicherheitsprobleme bitte nicht mit vertraulichen Details in einer öffentlichen Issue melden. Siehe [SECURITY.md](SECURITY.md).
|
Contributions and forks are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md). A submission is a proposal and does not create an obligation to include it in the official project.
|
||||||
|
|
||||||
## Lizenz
|
## Security
|
||||||
|
|
||||||
|
Do not disclose credentials or exploitable details in a public issue. See [SECURITY.md](SECURITY.md).
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
Copyright © 2026 Roland Reich
|
Copyright © 2026 Roland Reich
|
||||||
|
|
||||||
Lizenziert unter der Apache License, Version 2.0. Der vollständige Lizenztext befindet sich in [LICENSE.txt](LICENSE.txt).
|
Licensed under the Apache License, Version 2.0. See [LICENSE.txt](LICENSE.txt) for the complete license text.
|
||||||
|
|||||||
+13
-13
@@ -1,21 +1,21 @@
|
|||||||
# Sicherheitsrichtlinie
|
# Security policy
|
||||||
|
|
||||||
## Unterstützte Version
|
## Supported version
|
||||||
|
|
||||||
Sicherheitskorrekturen werden grundsätzlich für den aktuellen veröffentlichten Stand vorgesehen. Ältere Versionen sollten vor einer detaillierten Fehleranalyse zunächst aktualisiert werden.
|
Security fixes are generally prepared for the current released version. Update older installations before requesting a detailed analysis whenever possible.
|
||||||
|
|
||||||
## Schwachstellen melden
|
## Reporting a vulnerability
|
||||||
|
|
||||||
Bitte veröffentliche keine Zugangsdaten, Tokens, personenbezogenen Daten, internen Adressen oder ausnutzbaren Details in einer öffentlichen GitHub-Issue.
|
Do not publish credentials, tokens, personal data, internal addresses, or exploitable details in a public 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.
|
Use the repository's private security-reporting feature when available. Otherwise, use the private contact listed in the repository and disclose only the information required to reproduce the issue.
|
||||||
|
|
||||||
Eine Meldung sollte enthalten:
|
A report should include:
|
||||||
|
|
||||||
- betroffene Version
|
- affected version
|
||||||
- betroffene Funktion
|
- affected function
|
||||||
- nachvollziehbare Reproduktionsschritte
|
- reproducible steps
|
||||||
- mögliche Auswirkungen
|
- potential impact
|
||||||
- vorhandene Protokollauszüge ohne Geheimnisse
|
- relevant log excerpts with all secrets removed
|
||||||
|
|
||||||
Tests dürfen nur an Systemen durchgeführt werden, für die eine ausdrückliche Berechtigung besteht.
|
Only test systems for which you have explicit authorization.
|
||||||
|
|||||||
@@ -1,182 +0,0 @@
|
|||||||
# 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.
|
|
||||||
+25
-25
@@ -1,37 +1,37 @@
|
|||||||
# Drittkomponenten und Lizenzhinweise
|
# Third-party components and license notices
|
||||||
|
|
||||||
AssetManager wird unter der Apache License 2.0 veröffentlicht. Die folgenden Komponenten sind eigenständige Drittprojekte und unterliegen ihren jeweiligen Lizenzen.
|
AssetManager is released under the Apache License 2.0. The following components are independent third-party projects and are governed by their respective licenses.
|
||||||
|
|
||||||
## Direkt verwendete Komponenten
|
## Directly used components
|
||||||
|
|
||||||
| Komponente | Verwendung | Lizenz laut Upstream |
|
| Component | Use | Upstream license |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| FastAPI | Web framework | MIT |
|
| FastAPI | Web framework | MIT |
|
||||||
| Uvicorn | ASGI-Server | BSD-3-Clause |
|
| Uvicorn | ASGI server | BSD-3-Clause |
|
||||||
| SQLAlchemy | Datenbankabstraktion | MIT |
|
| SQLAlchemy | Database abstraction | MIT |
|
||||||
| Psycopg / psycopg-binary | PostgreSQL-Treiber | LGPL-3.0-only |
|
| Psycopg / psycopg-binary | PostgreSQL driver | LGPL-3.0-only |
|
||||||
| Jinja | HTML-Templates | BSD-3-Clause |
|
| Jinja | HTML templates | BSD-3-Clause |
|
||||||
| python-multipart | Formular- und Upload-Verarbeitung | Apache-2.0 |
|
| python-multipart | Form and upload processing | Apache-2.0 |
|
||||||
| pydantic-settings | Konfiguration aus Umgebungsvariablen | MIT |
|
| pydantic-settings | Environment-based configuration | MIT |
|
||||||
| itsdangerous | Signierte Sitzungsdaten | BSD-3-Clause |
|
| itsdangerous | Signed session data | BSD-3-Clause |
|
||||||
| ldap3 | optionale LDAP-Anbindung | LGPL-3.0-or-later |
|
| ldap3 | Optional LDAP integration | LGPL-3.0-or-later |
|
||||||
| Passlib | Passwort-Hashing | BSD-artige Lizenz; enthält zusätzliche Hinweise für eingebundene Bestandteile |
|
| Passlib | Password hashing | BSD-style license; includes additional notices for bundled components |
|
||||||
| bcrypt | durch `passlib[bcrypt]` verwendete Hashing-Bibliothek | Apache-2.0 |
|
| bcrypt | Hashing library used by `passlib[bcrypt]` | Apache-2.0 |
|
||||||
| openpyxl | Excel-Import und -Export | MIT |
|
| openpyxl | Excel import and export | MIT |
|
||||||
| MeshCentral / MeshCtrl | optionale Integration und Remote-Aufträge | Apache-2.0 |
|
| MeshCentral / MeshCtrl | Optional integration and remote jobs | Apache-2.0 |
|
||||||
| PostgreSQL Container-Image | Datenbankdienst | enthält PostgreSQL und weitere Betriebssystempakete mit eigenen Lizenzen |
|
| PostgreSQL container image | Database service | Contains PostgreSQL and operating-system packages under their own licenses |
|
||||||
| Python Container-Image | Laufzeitbasis | enthält Python und Betriebssystempakete mit eigenen Lizenzen |
|
| Python container image | Runtime base | Contains Python and operating-system packages under their own licenses |
|
||||||
|
|
||||||
## Transitive Abhängigkeiten
|
## Transitive dependencies
|
||||||
|
|
||||||
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.
|
Extras such as `uvicorn[standard]`, `psycopg[binary]`, and `passlib[bcrypt]` install additional packages. Node.js packages may also bring transitive dependencies. The license texts of the versions actually built and distributed are authoritative.
|
||||||
|
|
||||||
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.
|
The Docker build therefore runs `tools/export_dependency_licenses.py`. Discovered license, NOTICE, COPYING, and copyright files are collected under `/app/THIRD_PARTY_LICENSES/` in the image. Preserve this directory when distributing a built image or offline package.
|
||||||
|
|
||||||
## Keine Rechteübertragung an Drittprojekten
|
## No transfer of third-party rights
|
||||||
|
|
||||||
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.
|
Product names and trademarks belong to their respective owners. Their mention only describes technical use or integration and does not imply affiliation, endorsement, or certification.
|
||||||
|
|
||||||
## Prüfung bei Änderungen
|
## Review when dependencies change
|
||||||
|
|
||||||
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.
|
Review license terms and required notices whenever a dependency is added or updated. Automatically collected metadata does not replace review of the original license texts.
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# 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.
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# AssetManager v0.5.0.7
|
|
||||||
|
|
||||||
## MeshCentral Presence Service
|
|
||||||
|
|
||||||
Diese Version ergänzt einen eigenständigen Online-Status für Assets mit
|
|
||||||
MeshCentral Node-ID.
|
|
||||||
|
|
||||||
Neue Assetfelder:
|
|
||||||
|
|
||||||
- `mesh_online`
|
|
||||||
- `mesh_online_state`
|
|
||||||
- `mesh_presence_updated_at`
|
|
||||||
- `mesh_last_online_at`
|
|
||||||
- `mesh_presence_source`
|
|
||||||
|
|
||||||
Assets ohne `mesh_node_id` werden nicht bei MeshCentral abgefragt und erhalten
|
|
||||||
keinen künstlichen Offline-Status.
|
|
||||||
|
|
||||||
## Statusermittlung
|
|
||||||
|
|
||||||
Der Presence-Service verwendet dieselbe MeshCentral-Konfiguration und dieselben
|
|
||||||
Zugangsdaten wie die bestehende Synchronisierung.
|
|
||||||
|
|
||||||
- MeshCentral-Geräteliste wird standardmäßig alle 30 Sekunden abgefragt.
|
|
||||||
- `conn > 0` wird als online interpretiert.
|
|
||||||
- `conn = 0` wird als offline interpretiert.
|
|
||||||
- nicht eindeutig zuordenbare Zustände bleiben `unknown`.
|
|
||||||
- nur erfolgreich gelesene Abfragen ändern den gespeicherten Status.
|
|
||||||
|
|
||||||
Die Browseroberfläche liest ausschließlich den gespeicherten Status aus der
|
|
||||||
AssetManager-Datenbank und aktualisiert sichtbare Anzeigen alle fünf Sekunden.
|
|
||||||
Dadurch entsteht keine zusätzliche MeshCentral-Abfrage pro Browser oder Asset.
|
|
||||||
|
|
||||||
## Live-Anzeige
|
|
||||||
|
|
||||||
Der Online-Status erscheint:
|
|
||||||
|
|
||||||
- auf der Asset-Detailseite
|
|
||||||
- im Geräteinventar mit letzter Aktualisierung und letzter Online-Sichtung
|
|
||||||
- als eigene Spalte in der Assetliste
|
|
||||||
|
|
||||||
## Manuelle Softwareinventur
|
|
||||||
|
|
||||||
Die manuelle Softwareinventur wurde nicht verändert. Der Button bleibt
|
|
||||||
dauerhaft verfügbar und startet den Auftrag weiterhin unmittelbar. Der neue
|
|
||||||
Presence-Service blockiert, verzögert oder ersetzt keine manuell gestartete
|
|
||||||
Inventur.
|
|
||||||
|
|
||||||
## Ausblick
|
|
||||||
|
|
||||||
Der gespeicherte Presence-Status bildet die Grundlage für einen späteren
|
|
||||||
Dispatcher, der geplante oder wartende Aufträge erst bei einem Online-Signal
|
|
||||||
versendet. Diese Warteschlangenlogik ist in dieser Version bewusst noch nicht
|
|
||||||
aktiviert.
|
|
||||||
|
|
||||||
Bestehende Callback-, Software-, Backup-, MeshCentral-Synchronisierungs-,
|
|
||||||
Tabellen- und Themefunktionen wurden nicht verändert.
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
# AssetManager v0.5.0.8
|
|
||||||
|
|
||||||
## Spaltenverwaltung im Darkmode
|
|
||||||
|
|
||||||
Das Kontextmenü per Rechtsklick auf einen Spaltentitel und der Dialog zur
|
|
||||||
Spaltenverwaltung verwenden nun die Darkmode-Farben für Hintergrund, Text,
|
|
||||||
Rahmen, Hoverzustände und Schatten.
|
|
||||||
|
|
||||||
## Job-Aktion
|
|
||||||
|
|
||||||
`software_jobs` besitzt nun das neue Feld `action`. Bestehende Jobs erhalten
|
|
||||||
durch die Migration den Standardwert `run`. Die Softwareinventur erzeugt
|
|
||||||
weiterhin direkt ausführbare Jobs mit:
|
|
||||||
|
|
||||||
- Paket/Jobtyp: Softwareinventur
|
|
||||||
- Aktion: `run`
|
|
||||||
- Parameter: jobbezogenes JSON
|
|
||||||
|
|
||||||
Die Datenstruktur ist damit für spätere Aktionen wie `install`, `uninstall`
|
|
||||||
und `update` vorbereitet, ohne die Paketlogik in dieser Version vorwegzunehmen.
|
|
||||||
|
|
||||||
## Softwareinventur für markierte Assets
|
|
||||||
|
|
||||||
Administratoren können in der Assetliste mehrere sichtbare Assets markieren
|
|
||||||
und über „Softwareinventur starten“ für jedes Asset einen eigenen Job erzeugen.
|
|
||||||
|
|
||||||
- Ein Asset kann beliebig viele Jobs besitzen.
|
|
||||||
- Es gibt keine Ein-Job-pro-Asset-Beschränkung.
|
|
||||||
- Assets ohne MeshCentral Node-ID oder ohne unterstützte Plattform werden
|
|
||||||
übersprungen.
|
|
||||||
- Nach Abschluss zeigt eine Meldung die Anzahl erzeugter und übersprungener
|
|
||||||
Jobs.
|
|
||||||
- Die bestehende manuelle Softwareinventur auf der Assetseite bleibt
|
|
||||||
unverändert erhalten.
|
|
||||||
|
|
||||||
Noch nicht enthalten: automatisches Warten auf Online-Status, Paketaktionen
|
|
||||||
install/uninstall/update und Job-Workflows.
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
# AssetManager v0.5.0.9
|
|
||||||
|
|
||||||
## Korrektur der Sammelroute
|
|
||||||
|
|
||||||
Die bisherige Route unter `/assets/bulk-jobs/software-inventory` konnte von
|
|
||||||
FastAPI als dynamische Asset-ID interpretiert werden. Dadurch entstand beim
|
|
||||||
Aufruf der Fehler, dass `bulk-jobs` nicht als Integer gelesen werden konnte.
|
|
||||||
|
|
||||||
Die Sammelroute lautet nun eindeutig:
|
|
||||||
|
|
||||||
POST /jobs/bulk-create
|
|
||||||
|
|
||||||
Sie kollidiert nicht mehr mit `/assets/{asset_id}`.
|
|
||||||
|
|
||||||
## Allgemeine Job-Auswahl in der Assetliste
|
|
||||||
|
|
||||||
Der feste Button „Softwareinventur starten“ wurde ersetzt durch:
|
|
||||||
|
|
||||||
- Auswahlfeld „Job-Art“
|
|
||||||
- Button „Job starten“
|
|
||||||
|
|
||||||
Aktuell steht als Job-Art zur Verfügung:
|
|
||||||
|
|
||||||
- Softwareinventur
|
|
||||||
|
|
||||||
Die Oberfläche und die Backendroute sind bereits so aufgebaut, dass später
|
|
||||||
weitere Job-Arten ergänzt werden können, ohne die Sammelbedienung erneut
|
|
||||||
umzubauen.
|
|
||||||
|
|
||||||
Pro markiertem Asset wird weiterhin ein eigenständiger Job erzeugt. Mehrere
|
|
||||||
Jobs pro Asset sind weiterhin ausdrücklich erlaubt.
|
|
||||||
|
|
||||||
## Abgrenzung dieses Entwicklungsschritts
|
|
||||||
|
|
||||||
Diese Version ergänzt noch keine neuen Paketaktionen. Die bestehende
|
|
||||||
Softwareinventur verwendet weiterhin:
|
|
||||||
|
|
||||||
- Job-Art: Softwareinventur
|
|
||||||
- Aktion: run
|
|
||||||
- Parameter: {}
|
|
||||||
|
|
||||||
`install`, `uninstall`, `update` und paketabhängige Parameter folgen in
|
|
||||||
späteren, kleinen Entwicklungsschritten.
|
|
||||||
|
|
||||||
Die direkte manuelle Softwareinventur auf der Asset-Detailseite bleibt
|
|
||||||
unverändert verfügbar.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# AssetManager v0.5.1.0 – Allgemeines Jobmodell
|
|
||||||
|
|
||||||
Diese Version erweitert ausschließlich das bestehende Jobfundament.
|
|
||||||
|
|
||||||
## Neue Jobfelder
|
|
||||||
- Job-Art (`job_type`)
|
|
||||||
- Aktion (`action`, bereits vorhanden)
|
|
||||||
- Priorität (`priority`)
|
|
||||||
- Parameter als JSON (`parameters`, bereits vorhanden)
|
|
||||||
- Ergebnisdaten als JSON (`result_data`)
|
|
||||||
- Anzahl Versuche (`attempt_count`)
|
|
||||||
- Maximale Versuche (`max_attempts`)
|
|
||||||
- Geplanter Zeitpunkt (`scheduled_at`)
|
|
||||||
- Ersteller (`created_by`, bereits vorhanden)
|
|
||||||
- Start-, Sende- und Endzeitpunkte (bereits vorhanden)
|
|
||||||
|
|
||||||
Bestehende Softwareinventur-Jobs werden automatisch als `software_inventory` mit Priorität 100 eingeordnet.
|
|
||||||
|
|
||||||
## Oberfläche
|
|
||||||
Die zentrale Jobliste, die Asset-Softwareseite und die Jobdetails zeigen nun Job-Art, Aktion und Priorität. Die Detailseite zeigt zusätzlich Parameter, Ergebnisdaten, Ersteller, Planung und Versuche.
|
|
||||||
|
|
||||||
## Kompatibilität
|
|
||||||
- Neue primäre Detailroute: `/jobs/{job_id}`
|
|
||||||
- Alte Route `/software/jobs/{job_id}` bleibt als Weiterleitung erhalten.
|
|
||||||
- Die Softwareinventur und Sammelausführung bleiben funktional unverändert.
|
|
||||||
- Noch keine neuen Jobarten, Softwarepakete oder Dispatcher-Funktion.
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# AssetManager v0.5.1.1
|
|
||||||
|
|
||||||
## Lokale Zeitanzeige bei UTC-Speicherung
|
|
||||||
|
|
||||||
- Datenbank, APIs und Logdateien bleiben in UTC.
|
|
||||||
- Sichtbare Zeitstempel werden zentral im Browser in dessen lokale Zeitzone umgerechnet.
|
|
||||||
- Die Umrechnung berücksichtigt automatisch Sommer- und Winterzeit.
|
|
||||||
- Tabellen behalten den UTC-Wert für eine korrekte Sortierung.
|
|
||||||
- Der originale UTC-Wert und die erkannte Browser-Zeitzone stehen als Tooltip zur Verfügung.
|
|
||||||
- Dynamisch aktualisierte Jobzeiten, Presence-Zeiten und MeshCentral-Live-Logs werden ebenfalls umgerechnet.
|
|
||||||
- Sichtbare Zeitstempel im Software-Debuglog werden lokalisiert; die Datei auf dem Server bleibt unverändert UTC.
|
|
||||||
|
|
||||||
## Abgedeckte Bereiche
|
|
||||||
|
|
||||||
- Joblisten und Jobdetails
|
|
||||||
- Softwareinventur und Softwareübersichten
|
|
||||||
- Assetdetails und Presence-Anzeige
|
|
||||||
- MeshCentral-Synchronisationsläufe und Live-Log
|
|
||||||
- Benutzerprofil und Benutzerverwaltung
|
|
||||||
- Sicherungsübersicht
|
|
||||||
|
|
||||||
Es ist keine Änderung der Server- oder Container-Zeitzone erforderlich.
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# AssetManager v0.5.1.2
|
|
||||||
|
|
||||||
## Jobs erneut starten
|
|
||||||
|
|
||||||
- Bestehende Jobs können aus der zentralen Jobliste, der Asset-Softwareseite und der Jobdetailseite erneut gestartet werden.
|
|
||||||
- Es wird kein neuer Jobdatensatz erzeugt; die Job-ID bleibt erhalten.
|
|
||||||
- Für jeden Neustart wird ein neuer Callback-Token erzeugt. Alte Callback-Tokens werden dadurch ungültig.
|
|
||||||
- Laufzeitfelder und Ergebnisse des vorherigen Versuchs werden zurückgesetzt.
|
|
||||||
- Der Versuchszähler wird beim erneuten Sendeversuch erhöht.
|
|
||||||
- Aktive Jobs in den Zuständen `sending` oder `running` können nicht parallel erneut gestartet werden.
|
|
||||||
|
|
||||||
## Jobverlauf
|
|
||||||
|
|
||||||
Die neue Tabelle `job_events` dokumentiert unter anderem:
|
|
||||||
|
|
||||||
- Erstellung
|
|
||||||
- manuellen Neustart
|
|
||||||
- Sendeversuch
|
|
||||||
- MeshCtrl-Ergebnis
|
|
||||||
- Callback
|
|
||||||
- Fehler
|
|
||||||
|
|
||||||
Der Verlauf wird auf der Jobdetailseite angezeigt. Bestehende ältere Jobs besitzen naturgemäß erst ab diesem Update Verlaufsereignisse.
|
|
||||||
|
|
||||||
## Unverändert
|
|
||||||
|
|
||||||
Konfiguration, Daten, Uploads, Logs, Backups und die Laufzeitdatei APPINFO.json werden nicht ausgeliefert oder überschrieben.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# AssetManager v0.5.1.3
|
|
||||||
|
|
||||||
- Plattform wird direkt in jedem Software-Inventareintrag gespeichert.
|
|
||||||
- Vorhandene Einträge werden beim Update anhand des letzten Softwarejobs nachgepflegt.
|
|
||||||
- Plattform ist in Asset-Softwareliste, Installationsreport und Zusammenfassung sichtbar und filterbar.
|
|
||||||
- Einzelne, mehrere oder alle aktuell sichtbaren Inventareinträge können markiert und gelöscht werden.
|
|
||||||
- Löschen entfernt ausschließlich Inventardaten und deinstalliert keine Software.
|
|
||||||
- Die nächste Inventur legt tatsächlich vorhandene Einträge wieder an.
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
AssetManager 0.5.1.4
|
|
||||||
====================
|
|
||||||
|
|
||||||
Assetliste
|
|
||||||
----------
|
|
||||||
- Der Button „Inhalt neu laden“ ersetzt nicht mehr das komplette tbody-Element.
|
|
||||||
- Filter, Sortierung und bestehende Tabellen-Eventhandler bleiben dadurch aktiv.
|
|
||||||
- Markierungen werden nach dem Nachladen korrekt zurückgesetzt.
|
|
||||||
- Auswahlzähler und Aktionsbuttons werden nach dem Reload neu berechnet.
|
|
||||||
- „Alle markieren“ funktioniert nach dem Reload wieder für die sichtbaren Zeilen.
|
|
||||||
- Der Asset-Zähler wird gezielt über die Klasse asset-total aktualisiert.
|
|
||||||
|
|
||||||
Backups und Systeminformationen
|
|
||||||
-------------------------------
|
|
||||||
- Docker-Compose verwendet für Backups standardmäßig ./data/backups:/data/backups.
|
|
||||||
- Beim Start wird das Backupverzeichnis auf Existenz und Schreibbarkeit geprüft.
|
|
||||||
- Der tatsächlich verwendete Backup-Pfad und der erkannte Mount-Status werden protokolliert.
|
|
||||||
- Unter Einstellungen → Systeminformationen werden jetzt angezeigt:
|
|
||||||
- PostgreSQL-Verbindungsstatus
|
|
||||||
- Konfigurationsverzeichnis
|
|
||||||
- Uploadverzeichnis
|
|
||||||
- Logverzeichnis
|
|
||||||
- Backupverzeichnis
|
|
||||||
- Schreibbarkeit des Backupverzeichnisses
|
|
||||||
- Erkennung eines eigenen Docker-Mounts
|
|
||||||
- letztes Backup
|
|
||||||
- Anzahl vorhandener Backups
|
|
||||||
- belegter Backup-Speicher
|
|
||||||
|
|
||||||
Hinweis
|
|
||||||
-------
|
|
||||||
Die Anwendung kann nur den Containerpfad und den Mount-Status erkennen. Der konkrete Hostpfad wird weiterhin durch die docker-compose.yml festgelegt.
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
AssetManager v0.5.1.5
|
|
||||||
========================
|
|
||||||
|
|
||||||
Kategorien: Sammelbearbeitung
|
|
||||||
- Markierte Kategorien können über „Feld ändern“ gemeinsam bearbeitet werden.
|
|
||||||
- Änderbar sind Beschreibung und Kategoriebild.
|
|
||||||
- Der Kategoriename kann bei genau einer markierten Kategorie geändert werden.
|
|
||||||
- Felder können ausdrücklich geleert werden.
|
|
||||||
- „Alle markieren“ berücksichtigt nur aktuell sichtbare/gefilterte Kategorien.
|
|
||||||
- Auswahlzähler und Aktionsbuttons werden konsistent aktualisiert.
|
|
||||||
- Serverseitige Prüfung von Auswahl, Feld, Pflichtwerten und eindeutigen Kategorienamen.
|
|
||||||
- Alle neuen sichtbaren Texte wurden in Deutsch und Englisch in das Übersetzungssystem aufgenommen.
|
|
||||||
|
|
||||||
Hinweis zur Tabellenstruktur
|
|
||||||
- Aktuell bestehen eigenständige Verwaltungslisten für Assets, Kategorien und Benutzer.
|
|
||||||
- Hersteller, Lieferanten, Standorte, Gruppen und Lizenztypen waren Zukunftsbeispiele und sind in dieser Version nicht als eigene Tabellen eingeführt.
|
|
||||||
- Die Benutzerverwaltung bleibt wegen ihrer komplexen Berechtigungsformulare vorerst unverändert.
|
|
||||||
|
|
||||||
Update
|
|
||||||
- Persistente Konfigurations-, Daten-, Upload-, Log- und Backup-Verzeichnisse nicht überschreiben.
|
|
||||||
- Container nach Austausch der Programmdateien neu erstellen/starten.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
AssetManager v0.5.1.6
|
|
||||||
========================
|
|
||||||
|
|
||||||
Fehlerkorrektur: optionale Zahlenfelder in Formularen
|
|
||||||
- Leere HTML-Zahlenfelder werden jetzt serverseitig zuverlässig als NULL behandelt.
|
|
||||||
- Das Feld „Breite in Listen (Pixel)“ kann leer bleiben, ohne dass FastAPI mit einem int_parsing-Fehler abbricht.
|
|
||||||
- Erstellen und Bearbeiten von Felddefinitionen verwenden dieselbe zentrale Konvertierung.
|
|
||||||
- Gültige Werte werden weiterhin auf den erlaubten Bereich von 40 bis 800 Pixel begrenzt.
|
|
||||||
- Ungültige, nichtnumerische Werte führen zu einer kontrollierten HTTP-400-Meldung statt zu einer technischen 422-Pydantic-Antwort.
|
|
||||||
|
|
||||||
Ursache
|
|
||||||
- Browser übertragen ein leeres <input type="number"> als leere Zeichenfolge.
|
|
||||||
- Der bisherige Parameter int | None wurde von FastAPI bereits vor dem Aufruf der Route validiert; eine leere Zeichenfolge ist dabei weder Integer noch NULL.
|
|
||||||
- Der Fehler stand nicht in direktem Zusammenhang mit dem Entfernen des Hakens „Standard-Feld“. Beim Speichern wurde lediglich das gesamte Formular einschließlich des leeren Feldes list_width übertragen.
|
|
||||||
|
|
||||||
Update
|
|
||||||
- Persistente Konfigurations-, Daten-, Upload-, Log- und Backup-Verzeichnisse nicht überschreiben.
|
|
||||||
- Container nach Austausch der Programmdateien neu erstellen/starten.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
AssetManager v0.5.1.7
|
|
||||||
|
|
||||||
- Neue Massenaktion „Felder verwalten“ in der Kategorienliste
|
|
||||||
- Felder in mehreren Kategorien gleichzeitig hinzufügen/aktivieren
|
|
||||||
- Felder in mehreren Kategorien gleichzeitig entfernen/deaktivieren
|
|
||||||
- Pflichtfeld- und Listenanzeige-Einstellungen gemeinsam ändern
|
|
||||||
- Komplette Feldkonfiguration einer Vorlagenkategorie übernehmen
|
|
||||||
- Assetdaten bleiben beim Entfernen oder Übernehmen erhalten
|
|
||||||
- Das Namensfeld bleibt geschützt und kann nicht entfernt werden
|
|
||||||
- Allgemeine Tabellenlogik wurde nicht verändert
|
|
||||||
- Alle neuen sichtbaren Texte sind in Deutsch und Englisch übersetzt
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
AssetManager v0.5.2.0 – Asset-Sichtbarkeit und Mitarbeiterprofil
|
|
||||||
|
|
||||||
Neu:
|
|
||||||
- Mehrfach auswählbare Sichtbarkeitsregeln je Benutzer: eigene Geräte, eigene Abteilung, eigener Standort, alle Geräte.
|
|
||||||
- Bestehende MeshCentral-Gruppen bleiben erhalten und werden mit allen Sichtbarkeitsregeln per ODER verknüpft.
|
|
||||||
- Mitarbeiterprofil mit Abteilung und Standort in der Benutzerverwaltung.
|
|
||||||
- Eigene Geräte werden über den Benutzernamen im Assetfeld „Zugeordnet“ erkannt.
|
|
||||||
- Zentrale Zugriffsfunktion schützt Assetlisten, Detailansichten und darauf aufbauende Softwareansichten.
|
|
||||||
- Benutzer ohne aktive Regel und ohne MeshCentral-Gruppe sehen keine Assets.
|
|
||||||
- Administratoren sehen weiterhin alle Assets.
|
|
||||||
- Neue Datenbankfelder werden automatisch per Lightweight-Migration ergänzt.
|
|
||||||
- Alle sichtbaren neuen Texte sind in Deutsch und Englisch übersetzt.
|
|
||||||
|
|
||||||
Hinweis:
|
|
||||||
Nach einer Rechteänderung muss sich der betroffene Benutzer einmal ab- und wieder anmelden, damit die Sitzung die neuen Regeln übernimmt.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
AssetManager v0.5.2.1
|
|
||||||
|
|
||||||
Bugfix Einstellungen:
|
|
||||||
- Darstellung und LDAP/Authentifizierung konnten nicht geöffnet werden.
|
|
||||||
- Ursache: Das gemeinsame Template settings.html rendert alle Einstellungsbereiche. Die Laufzeitvariable system_storage wurde jedoch nur für die Seite Systeminformationen bereitgestellt.
|
|
||||||
- system_storage wird nun für alle Einstellungsrouten bereitgestellt.
|
|
||||||
- Die Systeminformationen bleiben weiterhin nur im Bereich System sichtbar.
|
|
||||||
- Keine Änderung an Datenbank, Berechtigungsmodell oder Tabellenlogik.
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
AssetManager 0.5.2.2
|
|
||||||
====================
|
|
||||||
|
|
||||||
Presence-Status korrigiert und vereinheitlicht:
|
|
||||||
- Online: MeshCentral meldet aktuell eine aktive Verbindung.
|
|
||||||
- Offline: aktuell nicht verbunden, aber ein historischer Zeitpunkt "Zuletzt gesehen" ist vorhanden.
|
|
||||||
- Unbekannt: keine aktive Verbindung und noch kein historischer Verbindungszeitpunkt vorhanden.
|
|
||||||
- MeshCentral-Zeitfelder werden robust aus unterschiedlichen CLI-JSON-Varianten gelesen.
|
|
||||||
- Der vollständige MeshCentral-Sync setzt "Zuletzt gesehen" nicht mehr pauschal auf die Synczeit.
|
|
||||||
- Assetliste und Detailansicht zeigen konsistente Live-Statuswerte und "Zuletzt gesehen".
|
|
||||||
- Erweiterte Debug-Protokollierung für Node-ID, Livezustand, letzte Verbindung, Adresse und abgeleiteten Status.
|
|
||||||
|
|
||||||
Bestehende Konfigurationen, Daten, Uploads, Logs und Sicherungen bleiben erhalten.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
AssetManager 0.5.3.0
|
|
||||||
|
|
||||||
- Administratorbereich „Jobdefinitionen“
|
|
||||||
- Skriptquellen Inline, gemountetes Verzeichnis und UNC-Pfad
|
|
||||||
- Interpreter PowerShell, CMD/Batch, Bash und Python
|
|
||||||
- Validierungs-/Testfunktion ohne produktive Ausführung
|
|
||||||
- automatische Revisionen bei Änderungen
|
|
||||||
- Softwareinventur als bearbeitbare System-Jobdefinitionen für Windows und Linux
|
|
||||||
- persistenter Skript-Mount ./data/scripts:/scripts
|
|
||||||
|
|
||||||
Bestehende Konfigurationen, Daten, Uploads, Logs und Sicherungen bleiben erhalten.
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user