🔗 API - Endpoint /hix-*¶
Riferimento completo degli endpoint del pannello admin di HIX. Per i dettagli concettuali (sessione, cookie firmato, configurazione iniziale) vedi sistema/hix-admin.
Riepilogo¶
| Endpoint | Metodo | Auth | Funzione |
|---|---|---|---|
/hix-ping |
GET |
- | Health check pubblico |
/hix-slow |
GET |
- | Endpoint lento (3s) - debug latenza |
/hix-status |
GET |
✅ | Metriche in JSON |
/hix-monitor |
GET |
✅ | Dashboard HTML live |
/hix-index |
GET |
✅ | Lista HTML delle route registrate |
/hix-trace |
GET POST |
✅ | Stato trace/toggle per modulo |
/hix-cache-clear |
GET |
✅ | Pulisce la cache delle view compilate |
/hix-stop |
GET |
✅ | Shutdown graceful di HIX |
/hix-bench-start |
GET |
✅ | Reset metriche (bench) |
/hix-bench-stop |
GET |
✅ | Dump JSON del bench |
/hix-routes/add |
POST |
✅ | Aggiunge una route dinamica |
/hix-routes/delete |
POST |
✅ | Elimina una route per nome |
/hix-routes/reload |
GET |
✅ | Ricarica routes/*.json |
/hix-routes/list |
GET |
✅ | Lista HTML - solo route app |
/hix-routes/listall |
GET |
✅ | Lista HTML - tutte le route |
/hix-login |
GET POST |
- | Login admin |
/hix-logout |
GET |
- | Chiude la sessione admin |
/hix-setup |
GET POST |
- | Configurazione iniziale credenziali |
Auth = richiede
HIX_AdminCheck(oReq)prima di eseguire l'handler. Inenv=devl'auth è disabilitata automaticamente - tutti gli endpoint rispondono senza cookie. Inenv=prodè richiesto un cookiehix_adminvalido.
Endpoint pubblici¶
GET /hix-ping¶
Health check leggero - progettato per load balancer e monitoraggio esterno.
Risposta 200 OK (JSON):
GET /hix-slow¶
Come ping ma con hb_idleSleep(3). Utile per testare timeout del client,
load balancer, o proxy frontale.
Risposta 200 OK dopo 3 secondi:
Metriche e monitor¶
GET /hix-status¶
Dump dello stato del server (connessioni attive, richieste totali, errori, utilizzo pool,
alert di saturazione, ecc.) come JSON. Generato da HIX_MetricsJson().
Risposta 200 OK (estratto):
{
"uptime_s": 12345,
"requests": { "total": 9876, "errors": 12 },
"pool_http": { "workers": 64, "queue": 5, "alert": false },
"pool_ws": { "workers": 100, "active": 42 },
"pool_rest": { "sse": 3, "longpoll": 1 }
}
Vedi sistema/metriche per i dettagli completi dello schema.
GET /hix-monitor¶
Serve html/monitor.html - dashboard HTML che consuma /hix-status ogni
[monitor] interval_s secondi e renderizza grafici. Utile per l'ispezione visuale.
GET /hix-index¶
Pagina HTML self-contained con la lista di tutte le route registrate (nome, metodi, pattern, pulsante "Apri"). Utile per scoprire cosa ha il server senza accedere al codice.
Ogni riga mostra:
- Nome - nome logico (hix.status, users.list, ...)
- Metodi - badge colorati per metodo (GET, POST, ...)
- Pattern - pattern URL (/users/:id)
- Action - pulsante "Apri" se la route accetta GET
Trace¶
GET /hix-trace¶
Senza parametri: ritorna lo stato corrente di tutti i trace per modulo in JSON.
Con ?mod=<module>&on=<0|1>: abilita o disabilita il trace per quel
modulo e ritorna lo stato aggiornato.
| Query | Effetto |
|---|---|
?mod=worker_http&on=1 |
Abilita trace per il modulo worker_http |
?mod=worker_http&on=0 |
Disabilita trace per il modulo |
?mod=all&on=1 |
Abilita tutti i moduli |
?mod=all&on=0 |
Disabilita tutti |
Moduli disponibili: app, server, worker_http, worker_ws,
worker_otros, pool, pool_detector, metrics, config, socket,
monitor, response, logger, error.
WARN/ERROR/FATALsono sempre loggati, indipendentemente dal trace.
Cache¶
GET /hix-cache-clear¶
Elimina ricorsivamente la cache delle view compilate in .cached/views/ (file .hrb
e __*.prg). Utile dopo un deploy in cui i file .view.html cambiano ma
cache_disk = true mantiene i vecchi HRB.
Risposta 200 OK:
Non riguarda la cache RAM (
cache_ram); quella si invalida da sola permtime.
Bench¶
GET /hix-bench-start¶
Resetta tutti i counter del modulo metriche (HIX_MetricsReset()) e lascia
il server pronto per una nuova misurazione.
Risposta 200 OK:
GET /hix-bench-stop¶
Chiude il bench e ritorna un dump completo di HIX_MetricsJson().
Risposta 200 OK:
Shutdown graceful¶
GET /hix-stop¶
Marca il server per fermarsi (HIX_ServerRequestStop()), chiude il keep-alive della
request corrente, e lascia che i worker finiscano i task in esecuzione prima di uscire.
Risposta 200 OK:
Equivalente a un
Ctrl+Ccontrollato via HTTP. Il main loop esce quando ogni pool ha la coda vuota.
API di gestione dinamica delle route¶
Permette di aggiungere, eliminare e ricaricare route hot senza riavviare HIX.
Le route create da questa API sono volatili (perse al riavvio) a meno che non le salvi
in routes/*.json prima.
Riservato: i nomi con prefisso
hix.*sono di proprietà del sistema e non possono essere registrati tramite questa API (risponde400).
POST /hix-routes/add¶
Aggiunge una nuova route. Body JSON:
{
"name": "users.list",
"url": "/users",
"action": "/controllers/users/list.prg",
"method": "GET",
"middleware": "HIX_MwJwt",
"scope": ""
}
| Campo | Tipo | Obbligatorio | Note |
|---|---|---|---|
name |
string | ✅ | Non può iniziare con hix. |
url |
string | ✅ | Pattern URL (supporta :var). Alias: pattern |
action |
string | ✅ | Path al PRG/HRB/HTML da eseguire |
method |
string | ❌ | Default * (tutti). Separati da virgola: GET,POST |
middleware |
string | ❌ | MW separati da virgola |
scope |
string | ❌ | Metadata liberi (es., admin) |
Risposta 200 OK se aggiunta:
Risposta 409 Conflict se la route esiste già (nessuna sovrascrittura):
Risposta 400 Bad Request se il JSON non è valido o il nome è riservato:
POST /hix-routes/delete¶
Elimina una route per nome. Body JSON:
Risposta 200 OK:
Risposta 400 Bad Request se manca name:
GET /hix-routes/reload¶
Elimina tutte le route applicative (quelle che non sono hix.*) e ricarica quelle
definite in www/routes/*.json con HIX_LoadRoutes().
Risposta 200 OK:
Utile nei workflow di deploy: copi il nuovo routes/users.json sul server
e lanci /hix-routes/reload dalla tua pipeline.
GET /hix-routes/list¶
Pagina HTML con le route applicative (esclude le route di sistema hix.*). Colonne:
nome, metodi, pattern, middleware, action.
GET /hix-routes/listall¶
Come /hix-routes/list ma include tutte le route (sistema + applicative).
Autenticazione¶
GET /hix-login¶
Pagina HTML con il form di login (username + password). Self-contained - non usa CDN o asset esterni.
Accetta ?next=<url> per reindirizzare dopo un login riuscito (default:
/hix-status).
POST /hix-login¶
Processa il login. Body form-urlencoded:
| Campo | Tipo | Note |
|---|---|---|
user |
string | Username admin |
password |
string | Password in chiaro (hash MD5 sul server) |
next |
string | URL a cui reindirizzare dopo il login |
Se le credenziali sono valide:
- Emette hix_admin = <ts>:<sign> cookie firmato con oCfg:cAdminSecret,
valido per session.lifetime minuti.
- Reindirizza a next (o /hix-status se vuoto).
Se falliscono: risponde 401 Unauthorized con il form e un messaggio di errore.
GET /hix-logout¶
Cancella il cookie hix_admin (lo fa scadere immediatamente) e reindirizza a
/hix-login.
GET /hix-setup¶
Pagina HTML con il form per la creazione iniziale delle credenziali. Mostrata solo se
oCfg:cAdminUser o oCfg:cAdminPassword sono vuoti.
Se le credenziali esistono già: reindirizza a /hix-login.
POST /hix-setup¶
Crea le credenziali per la prima volta. Body form-urlencoded:
| Campo | Tipo | Validazione |
|---|---|---|
user |
string | Non vuoto |
password |
string | Lunghezza minima 6 |
password2 |
string | Deve corrispondere a password |
Se validano:
- Salva oCfg:cAdminUser = user
- Salva oCfg:cAdminPassword = MD5(password)
- Genera e salva oCfg:cAdminSecret = MD5(timestamp + user + password)
- Salva tutto in hix.json con oCfg:Generate()
- Reindirizza a /hix-login
Se ci sono errori: risponde 422 Unprocessable Entity con il form e il
messaggio di errore corrispondente.
Cookie di sessione admin hix_admin¶
Formato del valore del cookie:
Dove:
- unix_timestamp = momento in secondi in cui il cookie è stato emesso
- md5_sign = MD5(secret + "|" + unix_timestamp)
Verifica su ogni richiesta:
1. Tokenizza per :
2. Ricalcola MD5(secret + "|" + ts) e confronta con sign
3. Se nMinutes > 0: controlla che now - ts <= session.lifetime * 60
Se un passaggio fallisce → reindirizza a /hix-login?next=<current_path>.
La firma usa
cAdminSecretche deve essere conservato inhix.json. Se lo ruoti, tutte le sessioni admin attive diventano invalide.
Codici HTTP¶
| Codice | Quando |
|---|---|
200 OK |
Richiesta riuscita |
302 Found |
Redirect a /hix-login, /hix-setup, o next= |
400 Bad Request |
JSON non valido o nome route riservato (hix.*) |
401 Unauthorized |
Login fallito |
409 Conflict |
/hix-routes/add con nome già esistente |
422 Unprocessable |
/hix-setup con validazione fallita (password corta, ecc.) |
Ricette comuni¶
Ricaricare le route dopo un deploy¶
# 1. Carica il nuovo JSON
scp www/routes/users.json prod:/srv/hix/www/routes/
# 2. Ricarica
curl --cookie-jar /tmp/c.txt --cookie /tmp/c.txt \
-d 'user=admin&password=secret' \
https://myapp.com/hix-login
curl --cookie /tmp/c.txt https://myapp.com/hix-routes/reload
Abilitare il trace WebSocket al volo¶
Fermare HIX da uno script di deploy¶
curl --cookie /tmp/c.txt https://myapp.com/hix-stop
# Il server risponde {"status":"stopping"} ed esce dopo aver drenato le code.
Health check pubblico (no auth)¶
Errori comuni¶
302che reindirizza a/hix-setupe non arriva mai al pannello -hix.jsonhaadmin.usere/opasswordvuoti. Visita/hix-setupdal tuo browser per crearli.302che reindirizza a/hix-logincon cookie corretto - il cookie è scaduto (session.lifetimetrascorso) ocAdminSecretè cambiato.409 duplicatein/hix-routes/add- la route esiste già. Eliminala prima con/hix-routes/deleteo cambia il nome.400 reserved name- stai provando a registrarehix.qualcosa. Rinomina./hix-statusritorna HTML invece di JSON -admin.enabled = falseo non sei autenticato inenv = "prod"(ti reindirizza al login HTML).
Best practice¶
- In produzione, proteggi
/hix-*anche a livello di proxy (apache/nginx) con una allowlist di IP per minimizzare la superficie d'attacco. - Non registrare le tue route con prefisso
hix.*- è riservato e HIX le rifiuterà. - Le route create da
/hix-routes/addsono volatili: se vuoi che sopravvivano al riavvio, salvali inwww/routes/*.json. cAdminSecretè un segreto: non committarlo in git. Per ruotarlo, rigeneralo con/hix-setup(dopo aver cancellatouser/passworddahix.json).- Usa
/hix-cache-cleardopo qualsiasi deploy che tocca.view.htmlse haicache_disk = true. - Abilita i trace (
/hix-trace?mod=X&on=1) solo per il tempo necessario a diagnosticare - il costo di logging può essere alto nei moduli hot (
worker_http,socket).
Risorse correlate¶
- Configurazione
hix.json - Pannello Admin (overview)
- Metriche
- Logger
- Errori HTTP
- Trace