while not terminated
do // Solange kein Terminate gesendet wird fortlaufen
begin
// Wert bis zum Timeout warten holen und setzen
SQLStr := '
SELECT Wert FROM Config WHERE Sub1 = 1 AND Sub2 = 2';
Qry_GetPK.Active := False;
Qry_GetPK.SQL.Text := SQLStr;
Qry_GetPK.Active := True;
IcmpClient.ReceiveTimeout := DS_GetPK.DataSet.FieldbyName('
Wert').AsInteger;
SQLStr := '
SELECT PK_IP '
+ '
FROM IP '
+ '
WHERE Ueberwachen_Aktiv = 1';
Qry_GetPK.Active := False;
Qry_GetPK.SQL.Text := SQLStr;
Qry_GetPK.Active := True;
for I := 0
to Qry_GetPK.RecordCount -1
do
begin
ID := DS_GetPK.DataSet.FieldbyName('
PK_IP').AsString;
SQLStr := '
SELECT IP, Name, FileCheck, TimeOutCount, '
+ '
Nicht_erreichbar_seit, HideTimeOut, Hidefor '
+ '
FROM IP '
+ '
WHERE PK_IP = %s';
SQLStr := Format(SQLStr, [ID]);
Qry_GetPCIPs.Active := False;
Qry_GetPCIPs.SQL.Text := SQLStr;
Qry_GetPCIPs.Active := True;
HostIP := DS_GetPCIPs.DataSet.FieldbyName('
IP').AsString;
Hostname := DS_GetPCIPs.DataSet.FieldbyName('
Name').AsString;
FileCheck := DS_GetPCIPs.DataSet.FieldbyName('
FileCheck').AsBoolean;
TimeOutCount := DS_GetPCIPs.DataSet.FieldbyName('
TimeOutCount').AsInteger;
Nicht_erreichbar_seit := DS_GetPCIPs.DataSet.FieldbyName('
Nicht_erreichbar_seit').AsString;
if Nicht_erreichbar_seit = '
01.01.1900'
then
Nicht_erreichbar_seit := '
';
IcmpClient.Host := HostIP;
IcmpClient.Ping();
// Client anpingen
IPIndex := I;
Synchronize(DoUpdate);
if FileCheck
then
FileOK := FileExists( Format(FILENAMETOCHECK, [HostIP]) )
else FileOK := True;
if (IcmpClient.ReplyStatus.ReplyStatusType = rsTimeOut)
or not FileOK
then // Result des Pings auswerten
begin
// Server Lieferte einen Timeout -----------------------------------------------
Inc(TimeOutCount);
Qry_GetPCIPs.Requery();
// Requery, falls Daten geändert wurden und Daten neu Holen fürs TimeOut
HideTimeOut := DS_GetPCIPs.DataSet.FieldbyName('
HideTimeOut').AsBoolean;
Hidefor := DS_GetPCIPs.DataSet.FieldbyName('
Hidefor').AsDateTime;
if HideTimeOut
then
begin
if (Hidefor < Now)
then
begin
HideTimeOut := False;
HideFor := StrtoDate('
01.01.1900');
end;
end;
if (TimeOutCount >= 3)
and (Nicht_Erreichbar_seit = '
')
then
begin
// Änderung des Status von Online auf Offline
ServerStatus(0, ID);
SQLStr := '
UPDATE IP SET Erreichbar = %s, TimeOutCount = %s, '
+ '
Letzter_Ping = %s, Nicht_erreichbar_seit = %s, HideTimeOut = %s, Hidefor = %s '
+ '
WHERE PK_IP = %s';
SQLStr := Format(SQLStr, ['
0', InttoStr(TimeOutCount), '
''
' + DateTimetoStr(Now) + '
''
',
'
''
' + DatetimetoStr(Now) + '
''
', BooltoStr(HideTimeOut), '
''
' + DateTimetoStr(Hidefor) + '
''
', ID]);
end
else begin
SQLStr := '
UPDATE IP SET Erreichbar = %s, TimeOutCount = %s, Letzter_Ping = %s, HideTimeOut = %s, Hidefor = %s '
+ '
WHERE PK_IP = %s';
SQLStr := Format(SQLStr, ['
0', InttoStr(TimeOutCount), '
''
' + DateTimetoStr(Now) + '
''
',
BooltoStr(HideTimeOut), '
''
' + DateTimetoStr(Hidefor) + '
''
', ID]);
end;
end
// Server lieferte keinen Timeout ----------------------------------------------
else begin
TimeOutCount := 0;
if (Nicht_erreichbar_seit <> '
')
then
begin
// Änderung von Offline auf Online
ServerStatus(1, ID);
SQLStr := '
UPDATE IP SET Erreichbar = %s, TimeOutCount = %s, '
+ '
Letzter_Ping = %s, Nicht_erreichbar_seit = %s, HideTimeOut = 0, Hidefor = %s '
+ '
WHERE PK_IP = %s';
SQLStr := Format(SQLStr, ['
1', InttoStr(TimeOutCount), '
''
' + DateTimetoStr(Now) + '
''
',
'
''
' + '
' + '
''
', '
''
' + '
' + '
''
', ID]);
end
else begin
SQLStr := '
UPDATE IP SET Erreichbar = %s, TimeOutCount = %s, Letzter_Ping = %s, '
+ '
HideTimeOut = 0, Hidefor = %s WHERE PK_IP = %s';
SQLStr := Format(SQLStr, ['
1', InttoStr(TimeOutCount), '
''
' + DateTimetoStr(Now) + '
''
', '
''
' + '
' + '
''
', ID]);
end;
TimeOutCount := 0;
end;
Qry_Set.Active := False;
Qry_Set.SQL.Text := SQLStr;
Qry_Set.ExecSQL;
Qry_GetPK.Next;
end;
Synchronize(DoFinish);
Sleep(100);
RunComplete;
end;