4.0 KiB
4.0 KiB
MEMORY.md - Stato del Plugin UrBackup
Ultima modifica: 28/05/2026
Performance - Asset Definition vs Computer
Problema
Gli Asset Definition custom (GLPI 11) sono 2-5x più lenti dei Computer nativi nel caricamento del tab UrBackup.
Causa
L'overhead è in GLPI 11 core, non nel plugin:
Asset::__construct()— itera 30+ Capacity classi per ogni istanzaAsset::post_getFromDB()— decodifica JSON custom fields e li processaeval()autoloading — le classi concrete sono definite viaeval()a runtime
Ottimizzazioni applicate
AssetTab.php::loadApiData()— letto$item->fields['name']direttamente invece di chiamareServerAsset::getAssetName()che faceva una secondagetFromDB()ridondanteAssetTab.php::startBackup(),saveInternetMode(),saveDefaultDirs(),showServerLinkedBlock()— stesso pattern,$item->fields['name']al posto digetAssetName()Server.php::showMissingClientsTab()— batch loading IP e gruppi:batchLoadIps()(1 query per itemtype vs 1 per riga) +batchLoadGroups()(1 query per itemtype vs 1 per riga)
Architettura
src/Capacity/UrBackupCapacity.php— registraAssetTabviaCommonGLPI::registerStandardTab()inonClassBootstrap()setup.php— registra capacità, CSS, JS, hooksrc/AssetTab.php— display tab content + tab interni (Stato/Azioni/Info-Log)src/ServerAsset.php— gestione collegamenti asset-serversrc/Config.php— itemtype enabled checksrc/UrbackupApiClient.php— client API con caching in-memory (per istanza) e sessionesrc/LocationHelper.php— risoluzione location radicesrc/Server.php— CRUD server, tab missing clients, form
Asset Tab Interni
- 3 sub-tab: Stato, Azioni (solo UPDATE/CREATE), Info/Log
- CSS: tab con tonalità di grigio differenti (scuro/medio/chiaro)
- Caricamento dati API con caching sessione 30s
- Dati caricati: status, settings, authkey, backup recenti (10), log (50)
Cache
UrbackupApiClient: cache in-memory pergetStatus()egetClientSettings()AssetTab::loadApiData(): cache sessione 30s (chiave: server_id + client_name)- API timeout: 30s, connect timeout: 5s
Bugfix: Campi API username/password non visibili in nuova installazione
Problema
In una nuova installazione del plugin, i campi "API username" e "API password" non venivano renderizzati come input — si vedeva solo la label ma non il campo editabile.
Cause (2 bug distinti)
src/Server.php:436—$canUpdatecontrollava soloSession::haveRight(self::$rightname, UPDATE). In fase di creazione di un nuovo server, l'utente ha diritto CREATE ma non necessariamente UPDATE, quindi il campo non veniva mostrato.src/Profile.php:73-77—installRights()usava$_SESSION['glpiactiveprofile']['id']per assegnare i diritti completi al profilo corrente. In installazione via CLI (php bin/console glpi:plugin:install), non c'è sessione, quindi$profiles_id = 0e nessun profilo riceveva i diritti completi.
Fix applicati
Server.php::showFormFields()— Sostituito$canUpdatecon$canEdit: per nuovi server ($ID <= 0) usaCREATE, per server esistenti usaUPDATE.Profile.php::installRights()— In assenza di sessione attiva (CLI), cerca il profilo "Super-Admin" tramite query diretta e gli assegna tutti i diritti.
Versione
- 0.7.0
0.7.0 — Pulizia, sicurezza e DB cleanup
- CSRF hardening:
Session::checkCSRF()aggiunto suasset.form.php,server.form.php,server_test.ajax.php,config.form.php - File deprecati rimossi: 12 file (composer copy, AGENTS_OLD.MD, js/, ajax/, front/test/view, FIX_PERMISSIONS.sh, removed/)
- Dead code rimosso: 3 Controller, 1 Command, 4 template Twig
- DB migration: DROP
glpi_plugin_urbackup_profileseglpi_plugin_urbackup_assettypes; add indexlocation_activesu servers; adddate_creation/date_modsu serverassets - SQL schema pulito: Rimosse tabelle legacy dall'empty.sql
- PHP lint warnings: Rimosse
use Html;euse Search;superflue - README.md creato