# Limristem Monitor

Limristem Monitor e un monitor di servizi HTTP/TCP/UDP con dashboard web, storico uptime e notifiche. In questa cartella trovi:

- `monitor.py`: processo principale del monitor
- `config.json`: configurazione di esempio
- `install.sh`: installazione automatica come servizio systemd

## Requisiti

- Linux con `systemd`
- `python3`
- permessi `root` per l'installazione
- `openssl` opzionale ma consigliato, per generare automaticamente un certificato HTTPS iniziale

`monitor.py` usa solo librerie standard Python, quindi non serve `pip install`.

## Installazione rapida

Esegui questi comandi dalla cartella che contiene tutti i file del progetto:

```bash
chmod +x install.sh
sudo ./install.sh
```

Lo script:

1. installa `monitor.py` in `/opt/limristem-monitor`
2. copia `config.json` come esempio in `/opt/limristem-monitor/config.json.example`
3. crea `/opt/limristem-monitor/config.json` solo se non esiste gia
4. crea un utente di sistema `limristem-monitor`
5. crea le directory per certificati e storico runtime
6. genera un certificato master self-signed se manca
7. crea e abilita `limristem-monitor.service`
8. avvia il servizio subito e lo imposta all'avvio automatico del sistema

## Dove finiscono i file

- Codice applicazione: `/opt/limristem-monitor/monitor.py`
- Config attivo: `/opt/limristem-monitor/config.json`
- Config di esempio: `/opt/limristem-monitor/config.json.example`
- Certificati: `/opt/limristem-monitor/certs`
- Dati runtime e storico: `/opt/limristem-monitor/history`
- Unita systemd: `/etc/systemd/system/limristem-monitor.service`

## Gestione del servizio

Una volta installato, puoi gestire Limristem Monitor con i normali comandi `systemctl`:

```bash
sudo systemctl status limristem-monitor
sudo systemctl start limristem-monitor
sudo systemctl stop limristem-monitor
sudo systemctl restart limristem-monitor
sudo systemctl enable limristem-monitor
sudo systemctl disable limristem-monitor
```

Per vedere i log in tempo reale:

```bash
sudo journalctl -u limristem-monitor -f
```

Il servizio e configurato con `Restart=always`, quindi systemd lo riavvia automaticamente se il processo si ferma.

## Configurazione

Il servizio legge il file di configurazione da:

```text
/opt/limristem-monitor/config.json
```

La configurazione di esempio viene salvata anche in:

```text
/opt/limristem-monitor/config.json.example
```

Dopo ogni modifica al file di configurazione:

```bash
sudo systemctl restart limristem-monitor
```

Per gli host `http` e `https` puoi anche definire:

- `path`: percorso da controllare, default `/`
- `http_headers`: dizionario opzionale di header HTTP aggiuntivi o in override

Limristem Monitor invia gia di default header web piu compatibili per ridurre problemi con CDN, WAF o server che chiudono le connessioni troppo aggressive verso client non-browser. Se un sito richiede un `Host` specifico o altri header custom, puoi aggiungerli nella singola voce host, ad esempio:

```json
{
  "id": "cliente_portale",
  "name": "Portale Cliente",
  "type": "https",
  "target": "203.0.113.10",
  "port": 443,
  "path": "/health",
  "http_headers": {
    "Host": "portale.cliente.it"
  }
}
```

## HTTPS e certificati

Durante l'installazione, se non esistono gia:

- `/opt/limristem-monitor/certs/master.crt`
- `/opt/limristem-monitor/certs/master.key`

lo script prova a generarli con `openssl`.

Se vuoi usare certificati reali:

1. copia i file certificato/chiave nelle posizioni desiderate
2. aggiorna i campi `settings.master_ssl_cert` e `settings.master_ssl_key` in `/opt/limristem-monitor/config.json`
3. se usi certificati per siti specifici, aggiorna anche `sites[].ssl_cert` e `sites[].ssl_key`
4. riavvia il servizio

Il listener HTTPS ricarica periodicamente i certificati in memoria senza riavviare la porta di ascolto. Inoltre le connessioni TLS incomplete o lente vengono chiuse con timeout dedicato, cosi un client problematico non blocca piu l'intero servizio HTTPS.

Se i certificati sono dentro `/opt/limristem-monitor/certs`, rieseguire `sudo ./install.sh` riallinea automaticamente proprietario e permessi per il servizio `limristem-monitor`.

### Errore `Permission denied` sui certificati

Se nei log vedi un messaggio come:

```text
❌ Errore certificato Master: [Errno 13] Permission denied
```

di solito significa che l'utente del servizio (`limristem-monitor`) non puo leggere uno dei file SSL. Se usi i path standard, puoi correggere cosi:

```bash
sudo chown root:limristem-monitor /opt/limristem-monitor/certs
sudo chmod 750 /opt/limristem-monitor/certs
sudo chown root:limristem-monitor /opt/limristem-monitor/certs/*.crt /opt/limristem-monitor/certs/*.key
sudo chmod 640 /opt/limristem-monitor/certs/*.crt /opt/limristem-monitor/certs/*.key
sudo systemctl restart limristem-monitor
```

Se invece usi certificati in un'altra cartella, assicurati che directory e file siano leggibili dall'utente o gruppo `limristem-monitor`.

## Aggiornamento

Per aggiornare il codice:

1. sostituisci i file nella tua cartella locale
2. riesegui `sudo ./install.sh`

Lo script aggiorna il codice e il file di esempio, ma non sovrascrive `/opt/limristem-monitor/config.json` se esiste gia.

---

## 📄 Licenza

Questo software è distribuito sotto i termini della licenza **Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**.

Sei libero di:
* **Condividere** — riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare questo materiale con ogni mezzo e formato.
* **Modificare** — remixare, trasformare il materiale e basarti su di esso per le tue opere.

Alle seguenti condizioni:
* **Attribuzione** — Devi riconoscere una menzione di paternità adeguata, fornire un link alla licenza e indicare se sono state effettuate delle modifiche.
* **Non Commerciale** — Non puoi utilizzare il materiale per scopi commerciali o di lucro.

Vedi il testo completo della licenza nel file [LICENSE](file:///home/dev/www/monitor/LICENSE) o su [Creative Commons](https://creativecommons.org/licenses/by-nc/4.0/).

