AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion FileExists Timeout

Ein Thema von Cyberaxx · begonnen am 11. Jul 2007 · letzter Beitrag vom 11. Jul 2007
Antwort Antwort
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Re: Funktion FileExists Timeout

  Alt 11. Jul 2007, 08:32
Habe mir mal die Komponente angesehen, sieht so nicht schlecht aus.

Problem ist ja hier nur, es wird sich ja nichts ändern.

"C:\Boot.ini" wird immer "C:\Boot.ini" heißen, sie wird nicht umbenannt oder geändert.
Der letzte lesezugriff trifft ja auch nicht zu, Die meisten sind Server und bleiben somit eine
ganze Weile Online.

Vllt. könntest Du mir ja sagen, wie lange er braucht um dich zu benachrichtigen, wenn ein Verzeichnis
nicht mehr Erreichbar ist.

Kleines Nebenproblem ist das ich pro Rechner einmal die Komponente bräuchte und diese natürlich nicht
mehr in interaktion mit dem Ping stehen würde.
Im Moment läuft im Hintergrund ein Thread der in einer Schleife jeden rechner anpingt und gleichzeitig
sofern es ein PC ist die Dateifreigabe.

Delphi-Quellcode:
  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.1900then
        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;
die beiden Synchchronizes sind nur für die Visuelle Darstellung am Server.
Anzeige des Servers der gescannt wird.
Anstoss zum aktualisieren des Grids.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz