LLM device mapping, live pipeline status, apply & hide UI, Ninja↔TANSS write-back sync & full-service validation #3
Loading…
Reference in a new issue
No description provided.
Delete branch "litellm"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Übersicht
Dieses PR ergänzt das Pipeline-Tool um LLM-basiertes Device-Mapping für Ninja-Geräte ohne TANSS-ID, eine UI, um die vorgeschlagenen Mappings direkt anzuwenden oder Geräte zu verbergen, einen Live-Status (Progressbar + Timer) während der Pipeline-Ausführung, Write-back-Synchronisation (gelöste Mappings und Gerätedaten werden jetzt aktiv in beide Systeme zurückgeschrieben: Ninja-Custom-Fields, TANSS-Geräte) – sowie eine Full-Service-Vertragsvalidierung in Phase 2 (Headquarter-Auflösung und Policy-Check für Full-Service-Kunden).
Stand: 46 Dateien, +3528/−683 (
git diff main...litellm)Änderungen
LLM-Mapping (neu)
src/llm/connection.py: Neues LiteLLM-Modul, das für nicht-mappede Ninja-Geräte passende TANSS-Geräte vorschlägt (Confidence 0.0–1.0 + Begründung), inkl. striktem JSON-AntwortformatLLM_MAX_TOKENSsrc/phases/phase1_mapping.py: LLM-Mapping als Fallback in Phase 1; filtert Peripherie-Geräte und bereits referenzierte TANSS-Gerätellm_device_mapping)src/config.py+.env.example: neue LLM-Konfiguration (LLM_MODEL,LLM_API_KEY,LLM_API_BASE,LLM_MAX_TOKENS)Write-back & Synchronisation (Phase 1 & 3)
tanssidgeschrieben – neues IssueTANSS_ID_ADDEDteamvieweridvon TANSS → Ninja, wenn Ninja keinen Wert hatTEAMVIEWER_ID_MISMATCH-Issue entfällt)manufacturerId,osId,cpuTypeId,cpuFrequency– nur in leere TANSS-Felder, bestehende Werte werden nie überschriebensrc/tanss/devices.py: neuerpatchTanssDevice(unterscheidet PC- und Peripherie-Endpunkt) sowie gecachte Lookup-Tabellen für Hersteller/OS/CPU-Typen (Name → ID)TANSS_DEVICE_UPDATEDfür in TANSS geänderte GeräteTANSS-Datenbank (neu)
src/tanss/db.py: direkter MySQL-Zugriff auf die TANSS-Datenbank (SQLAlchemy) – Wartungsverträge werden jetzt ausvertrag/vertrag_zuweisungengelesen (getContractsForCompanyinsrc/tanss/contracts.py)src/tanss/login.py(Cookie-Login ins Ticketsystem) entfernt – Verträge kommen jetzt aus der DBsrc/config.py+.env.example: neueTANSS_DB_*-KonfigurationFull-Service-Vertragsvalidierung (Phase 2, neu)
src/tanss/companies.py: neuergetHeadQuarter– folgt derlinkedCompanyId-Kette rekursiv bis zur Muttergesellschaftsrc/tanss/contracts.py: neuerhasActiveFullServiceContract– prüft, ob das Headquarter einen aktiven „Full-Service Jahrespauschale"-Vertrag hatUNKNOWN_NINJA_POLICY_FOR_FULL_SERVICE_CONTRACTINCORRECT_NINJA_POLICY_FOR_FULL_SERVICE_CONTRACTvalidate_device_online_statusextrahiert;getContractsByStatusnimmt jetzt eine Vertragsliste statt einer Device-ID;getTanssCompaniesüberspringt Company-ID 0Live-Status & Pipeline
src/api/pipeline.py: Thread-safe_StatusHubmit Versionsnummern – Status-Updates werden jetzt an alle WebSocket-Clients gesendet (vorher wurden Messages über Clients verteilt); Clients, die während der Ausführung verbinden, erhalten einen Snapshot (running, elapsed, letzter Stand je Step, Fehler)fetch:ninja_devices…fetch:tanss_contracts) und Zählungen in den Phase-Meldungen (z. B. „Phase 1: Mapping 123 Ninja devices to TANSS…")src/pipeline.py:setFreshMode(True)wieder aktiviert (vorher nur TODO)src/cache.py: neuecached_count()– liest Cachingröße ohne Fetch zu triggern (sicher während eines Fresh-Runs)UI (
static/app.js,static/style.css,static/index.html)companyIdpasstlocalStoragepersistiert und vor dem ersten Paint gesetzt (kein Flash)API
PATCH /api/v1/ninja/device/{device_id}zum Setzen vontanssid/teamviewerid(src/api/devices.py,patchDeviceCustomFieldsinsrc/ninja/devices.py)/api/v1/states/invalid: neuemetadata-Sektion mit Entity-Zählungen (Ninja/TANSS devices, Orgs, Policies, Companies, Contracts)src/api/metadata.pyentfernt (Metadaten jetzt Teil des States-Endpunkts); OpenAPI-Metadaten (Titel/Beschreibung/Version) und Router-Tags (app,ninja)Validierung & States
TANSS_DEVICE_REFERENCED_MULTIPLE_TIMES(TANSS-Gerät wird von mehreren Ninja-Geräten referenziert) undTANSS_ID_ADDEDWITHOUT_COMPANY(TANSS-Gerät ohne Company,companyId == 0),UNKNOWN_NINJA_POLICY_FOR_FULL_SERVICE_CONTRACTundINCORRECT_NINJA_POLICY_FOR_FULL_SERVICE_CONTRACT(s. o.); Phase 2 entsprechend refaktoriertTANSS_DEVICE_UPDATEDllm_suggestionsundninja_devices(states.py,models.py)Sicherheit
src/config.pyentfernt – Werte kommen jetzt ausschließlich aus.envOps & Sonstiges
Dockerfile,.dockerignore, aktualisiertecompose.yaml,uv.lock.forgejo/workflows/container.yaml(Container-Build & Publish nach Merge nachmain)eintscheidungsbaum.drawio)TODO.txtmit Projekt-Notes/TODOsWIP: wipto LLM-based device mapping (Ninja→TANSS) with apply & hide UILLM-based device mapping (Ninja→TANSS) with apply & hide UIto LLM device mapping (Ninja→TANSS), apply & hide UI & live pipeline statusLLM device mapping (Ninja→TANSS), apply & hide UI & live pipeline statusto LLM device mapping, live pipeline status, apply & hide UI, and Ninja↔TANSS write-back syncLLM device mapping, live pipeline status, apply & hide UI, and Ninja↔TANSS write-back syncto LLM device mapping, live pipeline status, apply & hide UI, Ninja↔TANSS write-back sync & full-service validation