PDA

View Full Version : Monitorare lo stato di una macchina da remoto


HRBF
11-07-2011, 11:23
Buongiorno a tutti, ho la necessità di sviluppare un piccolo software (il linguaggio di programmazione non è ancora stato deciso) per monitorare lo stato di più macchine collegate tra loro in rete locale. La rete è composta da un server e n client sui quali è in esecuzione un'applicazione. Lo scopo è quello di creare un programmino (che risiede sul server) con un'interfaccia grafica che comunichi lo stato dei client: acceso/spento, la macchina "5" ha problemi, la macchina "1" è bloccata, la macchina "6" funziona regolarmente ecc....
Ciò che volevo porre alla vostra attenzione è questo: lasciando perdere i test sull'hardware, quindi concentrandoci esclusivamente sul software, quali sono i test da fare per verificare se una macchina funziona regolarmente, se è bloccata, insomma come si può verificare lo stato di salute di una macchina senza fare nessun tipo di test sull'hardware?
I client hanno il compito di far girare una certa applicazione, quindi un test sarà sicuramente la verifica di tale processo attivo.
Qualcuno ha qualche suggerimento? Qualsiasi idea sarà di aiuto!

Grazie.

ingframin
11-07-2011, 11:28
Che macchine sono? Che problemi possono avere? Che sensori hanno a bordo?
Che processore? Che software? Hai accesso diretto tramite socket o hai bisogno di usare driver tipo VISA o IVI-C?
Altrimenti alla cieca e' impossibile risponderti

WarDuck
11-07-2011, 12:30
Io svilupperei un programmino client-server.

Ogni PC avrà il lato server, che è semplicemente un processo che si mette in attesa di messaggi su una data porta (UDP va bene).

Quando arriva una richiesta dal client (che sarà il tuo monitor remoto) il server controllerà se il processo che ti interessa è attivo o meno.

Quindi metterà la risposta in un pacchetto, un semplice 0 o 1 e lo invierà al client che segnerà opportunamente la cosa.

Puoi impostare un breve timeout sulla comunicazione (5-10 secondi vanno bene su rete locale) così che trascorso quel tempo se il client non avrà ricevuto una risposta segnerà la cosa come "macchina spenta".

Se la macchina è bloccata, nel senso che il SO è freezato, non hai modo di distinguere questa situazione da quella che avresti nel caso di una macchina spenta.

Probabilmente puoi derivare la cosa a partire da altre condizioni al contorno (ad esempio se sai che tutte le macchine verranno spente all'ora X e una di queste non ti risponde, allora puoi suppore che sia freezata), ma non credo sia molto utile.

HRBF
11-07-2011, 13:05
Che macchine sono? Che problemi possono avere? Che sensori hanno a bordo?
Che processore? Che software? Hai accesso diretto tramite socket o hai bisogno di usare driver tipo VISA o IVI-C?
Altrimenti alla cieca e' impossibile risponderti

Ciao, i client sono dei comuni PC con sistema operativo Windows XP, processore intel i7 (non conosco il modello esatto) scheda grafica ATI HD 5770. Scheda madre ASUS (anche qui non conosco il modello ma se necessario posso controllare). Non ci sono particolari sensori a bordo se non quelli "standard" di cui è dotato l'hardware e ho accesso diretto tramite socket.

L'unico compito dei client è eseguire un'applicazione grafica sviluppata in C++ con le DirectX9, per cui i problemi che si possono verificare sono legati all'esecuzione di tale applicazione. Quelli che mi vengono in mente sono: crash dell'applicazione, di un driver, sistema operativo. Quello che mi interessa e che chiedo a voi, è sapere quali informazioni sono ottenibili attraverso il sistema operativo per conoscere se la macchina e l'applicazione funzionano regolarmente e in che modo posso ottenere tali informazioni. Ad esempio monitorando il processo relativo all'applicazione si può sapere se sta girando correttamente, se è bloccata ecc...ma riguardo allo stato della macchina c'è un modo per sapere se è in buono stato, se è bloccata ecc..?

Potrebbe essere interessante monitorare la temperatura della macchina in quanto l'applicazione grafica deve girare per circa 8 ore al giorno e il surriscaldamento è sicuramente uno dei problemi che può presentarsi. E' possibile ottenere l'informazione della temperatura tramite il sistema operativo o è necessario interrogare direttamente i sensori?

Grazie!

HRBF
11-07-2011, 13:32
Io svilupperei un programmino client-server.

Ogni PC avrà il lato server, che è semplicemente un processo che si mette in attesa di messaggi su una data porta (UDP va bene).

Quando arriva una richiesta dal client (che sarà il tuo monitor remoto) il server controllerà se il processo che ti interessa è attivo o meno.

Quindi metterà la risposta in un pacchetto, un semplice 0 o 1 e lo invierà al client che segnerà opportunamente la cosa.

Puoi impostare un breve timeout sulla comunicazione (5-10 secondi vanno bene su rete locale) così che trascorso quel tempo se il client non avrà ricevuto una risposta segnerà la cosa come "macchina spenta".

Se la macchina è bloccata, nel senso che il SO è freezato, non hai modo di distinguere questa situazione da quella che avresti nel caso di una macchina spenta.

Probabilmente puoi derivare la cosa a partire da altre condizioni al contorno (ad esempio se sai che tutte le macchine verranno spente all'ora X e una di queste non ti risponde, allora puoi suppore che sia freezata), ma non credo sia molto utile.

Ciao ti ringrazio per la risposta.

Quindi secondo te quali sono gli stati che ha senso rilevare?

Sicuramente, se il SO non è bloccato, è possibile rilevare lo stato dell'applicazione monitorando il relativo processo.

WarDuck
11-07-2011, 15:01
Rilevare un crash del driver la vedo più difficile, bisogna vedere quanto sia grave e se il SO è in grado di reggere la botta.

I recenti drivers hanno una funzione di recovery che potrebbe rendere difficile monitorare la cosa da remoto (sicuramente l'applicazione ne risentirebbe).

Chiaramente se freeza non puoi saperlo da remoto, per cui ti appare come spenta.

Se invece ottieni una schermata blu tipicamente il PC si riavvia quindi potresti in qualche modo condividere la cartella dei dump per avere dettagli più approfonditi e capire se è crashato, quando come e perché.
In questo caso il programma server deve riuscire a distinguere se il sistema è stato spento correttamente o meno.

Per accedere ai sensori immagino tu abbia due possibilità: cercare eventuali librerie di terze parti che fanno il lavoro sporco per te, oppure accedervi direttamente (immagino scrivendo codice assembly).

Ricapitolando hai le seguenti possibilità:

Il server risponde "01": pc ed applicazione correttamente funzionanti
Il server risponde "00": applicazione non funzionante (potrebbe esserci stato un crash applicativo)

Il server non risponde: macchina freezata, spenta o in fase di riavvio

Il server risponde "10": pc acceso, applicazione non funzionante e un flag segnala che ci potrebbe essere stata perdita di lavoro a causa di un riavvio imprevisto ( una volta ricevuto il codice lo stato ritorna "00").

Il server risponde "11": pc acceso, applicazione funzionante, un flag segnala che ci sono stati degli errori di recente (a questo punto una volta che ha segnalato la cosa ritorna nello stato "01").