de.bsvrz.sys.dcf77.ntp.realclient
Class NTPinfoPoller

java.lang.Object
  extended by java.lang.Thread
      extended by de.bsvrz.sys.dcf77.ntp.realclient.NTPinfoPoller
All Implemented Interfaces:
java.lang.Runnable

public class NTPinfoPoller
extends java.lang.Thread

Liest zyklisch die aktuelle NTP Server Info mit ntpq -p; Aenderungen werden dem RealNTPClient gemeldet

Author:
ChriestenJ

Nested Class Summary
(package private)  class NTPinfoPoller.NtpServerInfo
          private Klasse zur Speicherung der gelesenen Serverinformation
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
private  de.bsvrz.sys.funclib.debug.Debug _debug
           
private  int JITTER
           
private  java.lang.String m_cmd
          Kommando zur Abfrage der NTP Info.
private  java.lang.Boolean m_erstesMal
          Fuer wait-Zyklus.
private  int m_failCount
          Zaehler Lesefehler.
private  NTPinfoPoller.NtpServerInfo m_lastNtpServerInfo
          die zuletzt gelesene ServerInforamtion
private  long m_oschwelle
          offset nur Protokollieren, wenn betragsmäßig grösser negativ: immer protokollieren
private  RealNTPClient m_realNTPClient
          Klasse, die das Interface implementiert.
private  java.lang.Boolean m_shutDown
           
private  long m_zyklusCount
          Anzahl bisheriger Zyklen.
private  long m_zyklusCountMax
          Maximale Zyklusanzahl.
private  long m_zyklusZeit
          Zeitdauer zwischen 2 NTP ServerInfo Abfragen in sec
private  int OFFSET
           
private  int REACH
           
private  int REFID
           
private  int REMOTE
          Hilfvariablen zur Ausgabeinterpretation
private  int ST
           
private  int WHEN
           
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
NTPinfoPoller(java.lang.String cmd, RealNTPClient realNTPClient, long zyklusZeit, long zyklusCountMax, long oschwelle)
          Konstruktor
 
Method Summary
private  void checkNewServerInfo()
          Hauptoutine der Klasse.
private  DataAspZustand cpNtpServerInfo2DataAspZustand(NTPinfoPoller.NtpServerInfo ntpServerInfo)
          Hilffunktion: Konvertiert ntpServerInfo in eine Instanz des Typs DataAspZustand
private  void destroyProcess(java.lang.Process p)
          zerstort p und gibt dessen resourcen frei
static void main(java.lang.String[] args)
          Testroutine fuer das lokale Modul.
 void myClose(java.io.Closeable c)
          schliesst das uebergebene closable.
private  java.lang.Boolean mywait()
          Wrapper Funktion fuer wait() beim ersten Aufruf nach Obejtkinstanziierung wird nicht gewartet Wenn der Thread beendet werden soll, liefert die Routine false, ansonsten true
private  void parseInfo(java.lang.String cmdInfo, NTPinfoPoller.NtpServerInfo ntpServerInfo)
          Interpretiert cmdInfo (Ausgabe von ntpq -p)
private  void parseInfoLine(java.lang.String line, NTPinfoPoller.NtpServerInfo ntpServerInfo)
          Interpretiert eine Zeile des Kommandos (ntpq -p)
private  int readData(java.lang.String cmd, NTPinfoPoller.NtpServerInfo ntpServerInfo)
          Startet das uebergebene Kommando (ntpq -p), interpretiert dessen Ausgabe und stellt es in der Instanz ntpServerInfo zur Verfügung.
 void run()
          Liest zyklisch die Zeitserver Informationen in einer Endlosschleife.
 void set_shutDown()
          Beendet den Thread dieser Instanz
private  java.lang.Boolean warteBereit(java.io.BufferedReader br1, java.io.BufferedReader br2)
          Wartet bis br1 oder br2 bereit sind, Hilffunktion zu warteBereit(BufferedReader, BufferedReader) Lesen vor bereit führt in manachen Fällen zum Aufhängen des Lesebefehls.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_debug

private de.bsvrz.sys.funclib.debug.Debug _debug

m_cmd

private java.lang.String m_cmd
Kommando zur Abfrage der NTP Info. Das ausgeführte Kommando muss Standard ntp Client Info (wie bei ntpq -p) auf den Output stream schreiben Eine Meldungen auf den Error Stream wird als Fehler gewertet


m_realNTPClient

private RealNTPClient m_realNTPClient
Klasse, die das Interface implementiert. Von hier holt der Zeitverwaltungs SenderThread seine Info


m_lastNtpServerInfo

private NTPinfoPoller.NtpServerInfo m_lastNtpServerInfo
die zuletzt gelesene ServerInforamtion


m_failCount

private int m_failCount
Zaehler Lesefehler. Bei 5 Fehlern wird Programm abgebrochen.


m_shutDown

private java.lang.Boolean m_shutDown

m_zyklusZeit

private long m_zyklusZeit
Zeitdauer zwischen 2 NTP ServerInfo Abfragen in sec


m_erstesMal

private java.lang.Boolean m_erstesMal
Fuer wait-Zyklus. Beim ersten mal nicht warten


m_zyklusCount

private long m_zyklusCount
Anzahl bisheriger Zyklen.


m_zyklusCountMax

private long m_zyklusCountMax
Maximale Zyklusanzahl.


m_oschwelle

private long m_oschwelle
offset nur Protokollieren, wenn betragsmäßig grösser negativ: immer protokollieren


REMOTE

private final int REMOTE
Hilfvariablen zur Ausgabeinterpretation

See Also:
Constant Field Values

REFID

private final int REFID
See Also:
Constant Field Values

ST

private final int ST
See Also:
Constant Field Values

WHEN

private final int WHEN
See Also:
Constant Field Values

REACH

private final int REACH
See Also:
Constant Field Values

OFFSET

private final int OFFSET
See Also:
Constant Field Values

JITTER

private final int JITTER
See Also:
Constant Field Values
Constructor Detail

NTPinfoPoller

public NTPinfoPoller(java.lang.String cmd,
                     RealNTPClient realNTPClient,
                     long zyklusZeit,
                     long zyklusCountMax,
                     long oschwelle)
Konstruktor

Parameters:
cmd - Auszufuerendes Kommando. Ausgabe wie ntpq -p
realNTPClient - realer NTP Client
zyklusZeit - Wartezeit zwischen Pruefungen in sec
zyklusCountMax - höchstens so viele Schleifen durchlaufen (-1) unendlich
oschwelle - Abweichung offset nur protokollieren, wenn Schwelle betragsmäßig über oder unterschritten wird
Method Detail

set_shutDown

public void set_shutDown()
Beendet den Thread dieser Instanz


checkNewServerInfo

private void checkNewServerInfo()
Hauptoutine der Klasse. Startet das Kommando (ntpq -p) zur Abfrage der ServerInfo. Aenderungen werden der Zeitverwaltung zu Verfuegung gestellt.


cpNtpServerInfo2DataAspZustand

private DataAspZustand cpNtpServerInfo2DataAspZustand(NTPinfoPoller.NtpServerInfo ntpServerInfo)
Hilffunktion: Konvertiert ntpServerInfo in eine Instanz des Typs DataAspZustand

Parameters:
ntpServerInfo - zu konvertierende Instanz
Returns:
konvertierte Instanz

readData

private int readData(java.lang.String cmd,
                     NTPinfoPoller.NtpServerInfo ntpServerInfo)
Startet das uebergebene Kommando (ntpq -p), interpretiert dessen Ausgabe und stellt es in der Instanz ntpServerInfo zur Verfügung.

Parameters:
cmd - Auszuführendes Kommando, Ausgabe muss ntpq -p entsprechen
ntpServerInfo - Ausgabeinstanz
Returns:
>0: ok, <0: Fehler

destroyProcess

private void destroyProcess(java.lang.Process p)
zerstort p und gibt dessen resourcen frei

Parameters:
p - Prozess, der zerstoert werden soll

myClose

public void myClose(java.io.Closeable c)
schliesst das uebergebene closable. Wenn es sich um einen Standardstream handelt wird nicht geschlossen.

Parameters:
c - zu schliessendes Objekt
checkStd - true: wenn Standard Stream nicht schliessen

warteBereit

private java.lang.Boolean warteBereit(java.io.BufferedReader br1,
                                      java.io.BufferedReader br2)
                               throws java.io.IOException,
                                      java.lang.InterruptedException
Wartet bis br1 oder br2 bereit sind, Hilffunktion zu warteBereit(BufferedReader, BufferedReader) Lesen vor bereit führt in manachen Fällen zum Aufhängen des Lesebefehls. Falls keiner der Reader innerhalb von 6,15 sec bereit ist, wird das Programm beendet

Parameters:
br1 - zu pruefender BufferedReader
br2 - zu pruefender BufferedReader
Returns:
true: mindestens ein Reader ist bereit, false sonst
Throws:
java.lang.InterruptedException
java.lang.Exception
java.io.IOException

parseInfo

private void parseInfo(java.lang.String cmdInfo,
                       NTPinfoPoller.NtpServerInfo ntpServerInfo)
Interpretiert cmdInfo (Ausgabe von ntpq -p)

Parameters:
cmdInfo - String mit der Ausgabe von ntpq -p
ntpServerInfo - Ergebnisinstanz

parseInfoLine

private void parseInfoLine(java.lang.String line,
                           NTPinfoPoller.NtpServerInfo ntpServerInfo)
Interpretiert eine Zeile des Kommandos (ntpq -p)

Parameters:
line - eine Ergebniszeile (kein Header)
ntpServerInfo - Ergebnisstruktur

mywait

private java.lang.Boolean mywait()
Wrapper Funktion fuer wait() beim ersten Aufruf nach Obejtkinstanziierung wird nicht gewartet Wenn der Thread beendet werden soll, liefert die Routine false, ansonsten true

Returns:
false (true): Thread (nicht) beenden

run

public void run()
Liest zyklisch die Zeitserver Informationen in einer Endlosschleife. Aenderungen werden an dem RealNTPClient geliefert.

Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread

main

public static void main(java.lang.String[] args)
Testroutine fuer das lokale Modul. Wird fuer verschiedene Tests im Laufe des Entwicklungs- und Wartungsprozesses verwendet

Parameters:
args - Testargumente