Events / Prozessbeobachtung - eine Art ServiceTracker

  • Moin,

    bin gerade dabei gedanklich eine kleines Tool zur Zeitmessung einzelner Anwendungen durchzuspielen. Eine Art "Anwendungsstoppuhr" bzw. ServiceTracker. Soll zur Unterstützung und Beobachtung im Problemfall dienen. Gerade in unserer großen IT Struktur / Netz sind dies immer wieder Fragen die uns quälen. "User A meint Anwendung A ist heute sehr langsam". Backofficemaschinen laufen einwandfrei, keine Last zu erkennen. Hier für möchte ich gerne ein kleines Helferlein konstruieren, welche z.B. User A *klickt* auf Verarbeiten -> Prozess im Hintergrund arbeitet bis er fertig ist -> Tool hat die Zeit seit *Klick* bis zu dem Zeitpunkt gestoppt, bis Prozess keine Regung mehr zeigt oder Ergebnis dargestellt o.ä..

    Ist das überhaupt so realisierbar wie ich mir das gerade vorstelle? Den Klick oder Start einer Anwendung könnte man ja über Event bzw. den Prozess abfangen und die Uhr laufen lassen. Aber wie erkenne ich am sinnvollsten das Ende eines Verarbeitungschrittes. Ein Klick-event ist ja nicht vorhanden. Der Prozess läuft ja weiterhin, mit etwas Grundrauschen. Ist ja jetzt nicht so das man einfach auf die Existenz eines bestimmten Prozesses referenzieren kann. Vielleicht ein Kombination aus mehren Möglichkeiten (Fensterstatus, Prozess, usw.)? ?(

    PS: Ich suche kein fertiges Script - sondern eher den theoretischen Ansatz! ;)

    VG Gibbs

  • <p>viel Spaß dabei, aber du kannst ja notfalls Abby fragen. </p><p><br></p><p>Andere Möglichkeit, du kämpfst dich durch die Einstellungen von WMI, damit sollte es möglich sein für fast jede Kleinigkeit eine Statistik auszugeben. Da diese Messerei aber das System zusätzlich belastet tust du UserA keinen Gefallen damit.<br></p>

  • Ich habe es befürchtet... es soll ja möglichst was schlankes sein was im Endergebins ungefähr so aussehen sollte...

    Ergebnis.log

    Schritt 1: Anwendung A - Klick , Time 12:00:00, Diff 00:00, Sum 00:00
    Schritt 2: Anwendung A - Klick , Time 12:00:15, Diff 00:15, Sum 00:15
    Schritt 3: Anwendung A - Klick , Time 12:00:45, Diff 00:30, Sum 00:45
    Schritt 4: Anwendung A - Klick , Time 12:00:55, Diff 00:10, Sum 00:55
    Schritt 5: Anwendung A - Klick , Time 12:01:10, Diff 00:15, Sum 01:10


    Es sollen nicht pauschal alle möglichen Informationen zusammengetragen werden - denke auch WMI ist die eher die berühmte Kanone auf den Spatzen... Es soll lediglich im Bedarfsfall genutzt werden um dieses mit gesammelten Daten vergleichen zu können und zu schauen, ob einzelne Schritte zeitlich höher differenzieren. Hatte bereits etwas mit ProcessGetSats experimentiert und hier dann die DebugConsole als Ausgabeinstrument rudimentär genutzt. Aber das geht hierfür etwas in die falsche Richtung.

  • Muss es der Prozess sein, oder würde es genügen, den Zeitpunkt des Programm startes in einen reg Key/Ini zu schreiben und das Ende des Programms auch? Also sozusagen nur einen Programm starter, der dann wartet bis gestartes Programm zu ende, die Zeit nimmt, wegschreibt fertig - oder ist das zu simpel gedacht?

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Nee, ganz so einfach ist es leider nicht. Die MA arbeiten ja mit der Anwendung weiter bzw. lassen diese weiterhin geöffnet bis Sie sie das nächste Mal benötigen. Daher mein Gedanke, primär auf Mouse-Events zu gehen - sprich Mouseclick als Start-Event (Timestamp setzen) und dann zu schauen ob ich einen Punkt finde, an dem ich erkennen kann das die ausgelösste Aktion/Verarbeitung abgeschlossen ist. Da wäre dann aber eher der Prozess selbst evtl. der Punkt.

    Im Grund hast du aber recht - ich möchte lediglich die Zeiten speichern, kein Schnick-Schnack. Aber die Anwendung läuft bereits und wird dieses nach der Zeitabnahme auch weiter tun.

    Mit _WINAPI_GetProcessHandleCount kann man ja das Struktur aus GetProcessTimes abfragen. Hier wird auch der Wert lpKernelTime ausgegebem, welcher sich ja nur bei "Akttivität" erhöht, richtig?