« Zurück zu Produkt

Dokumentation

IPS_GetTraceList

 array IPS_GetTraceList (int $TraceID) 

Parameterliste

TraceID

ID des Trace-Eintrags

Rückgabewert

Ein Array mit Trace-Einträgen, beginnend mit dem Eintrag TraceID, gefolgt von seinem Elterneintrag usw. bis zum Anfang der Kette. Jeder Eintrag enthält folgende Informationen als key => value Paare:

Index Typ Beschreibung
TraceID integer Eindeutige, fortlaufende ID des Eintrags
ParentID integer ID des Eintrags, der diesen Eintrag ausgelöst hat (0 = Anfang einer Kette)
ChildIDs array IDs der Einträge, die von diesem Eintrag ausgelöst wurden
Depth integer Position in der Kette, beginnend bei 1 (0 = Platzhalter für einen nicht mehr verfügbaren Eintrag)
ObjectID integer ID des Objekts, dem der Eintrag zugeordnet ist (1 = kein Objekt, z.B. bei WebServer)
Sender string Art des Eintrags (siehe Sendertabelle)
ExecutionUser string Benutzer, in dessen Namen ausgeführt wurde (z.B. @admin; @unknown, wenn kein Benutzer angemeldet war)
TimeStamp integer Unix Zeitstempel der Erstellung
Data array Zusätzliche Informationen als key => value Paare, abhängig vom Sender (siehe Sendertabelle)

Sendertabelle

Sender Beschreibung ObjectID Data
Variable Ein Wert wurde in eine Variable geschrieben (auch ohne Änderung) Variable VariableID, Value, OldValue
RequestAction Die Aktion einer Variable wurde angefordert Variable VariableID, ActionID, Value, Sender
RequestAction Die RequestAction-Funktion einer Instanz wurde für eine Statusvariable aufgerufen Instanz Ident, Value
TriggerEvent Ein ausgelöstes Ereignis führt seine Aktion aus Ereignis EventID, ActionID, Environment, Trigger, VariableID, Value
CyclicEvent Ein zyklisches Ereignis führt seine Aktion aus Ereignis EventID, ActionID, Environment
Script Ein Skript wird ausgeführt Skript Sender, ScriptID, FilePath, SenderID
Event PHP-Code wird im Auftrag eines Ereignisses ausgeführt Ereignis Sender, ScriptID, FilePath, SenderID
Instance PHP-Code wird für ein Zielobjekt ausgeführt Zielobjekt Sender, ScriptID, FilePath, SenderID
Timer Ein Timer einer Instanz wird ausgeführt Instanz TimerName, Instance, RunOnce
DataFlow Eine Instanz empfängt Daten über den Datenfluss empfangende Instanz InstanceID, ParentID
WebServer Eine Anfrage an den WebServer (Datei/Hook) oder ein JSON-RPC Aufruf 1 Path bzw. Method, RemoteIP, ProxyIPs (nur bei Proxys)
System Platzhalter für einen nicht mehr verfügbaren Eintrag 1 Reason

Beschreibung

Der Kernel zeichnet in Traces auf, was was ausgelöst hat: Jeder Eintrag steht für einen Vorgang – z.B. das Schreiben einer Variable, das dadurch ausgelöste Ereignis, dessen Aktion bzw. Skript, ein RequestAction, einen Timer oder eine Anfrage an den WebServer – und verweist über ParentID auf den Eintrag, der ihn verursacht hat, sowie über ChildIDs auf die Einträge, die er selbst verursacht hat. So entsteht für jede Ursache ein Baum, mit dem sich nachvollziehen lässt, warum sich z.B. eine Variable geändert hat.

Die Funktion liefert den Eintrag TraceID und alle Einträge, die ihn verursacht haben: Das erste Element ist der Eintrag selbst, das letzte Element der Anfang der Kette (ParentID 0). Die von einem Eintrag ausgelösten Folgeeinträge sind in ChildIDs aufgeführt und können ebenfalls über diese Funktion abgerufen werden. Die IDs der Einträge eines Objekts liefert IPS_GetTraceIDList.

Ist ein Eintrag der Kette nicht mehr verfügbar, endet die Liste mit einem Platzhalter: Depth 0, Sender "System", ObjectID 1 und dem Grund unter Data → Reason. Existiert kein Eintrag mit der ID TraceID, schlägt die Funktion mit "No trace with ID … found" fehl.

Traces werden nur im Arbeitsspeicher gehalten und gehen bei einem Neustart verloren. Pro Objekt werden die letzten 25 Einträge aufbewahrt, für Einträge ohne Objekt (z.B. WebServer) insgesamt die letzten 1000. Ein älterer Eintrag bleibt so lange erhalten, wie noch ein aufbewahrter Eintrag von ihm abstammt, damit Ketten vollständig bleiben. Beim Löschen eines Objekts werden seine Einträge entfernt. Zeichenketten in Data werden auf 100 Bytes gekürzt und mit "..." markiert.

Beispiel

print_r(IPS_GetTraceList(1));

/* liefert z.B.:
Array
(
    [0] => Array
        (
            [ChildIDs] => Array
            (
            )
            [Data] => Array
            (
                [OldValue] => 0
                [Value] => 5
                [VariableID] => 10018
            )
            [Depth] => 1
            [ExecutionUser] => @admin
            [ObjectID] => 10018
            [ParentID] => 0
            [Sender] => Variable
            [TimeStamp] => 1700000000
            [TraceID] => 1
        )
)
*/

// Ursachenkette des neuesten Eintrags einer Variable ausgeben
$ids = IPS_GetTraceIDList(10018);
if (count($ids) > 0) {
    foreach (IPS_GetTraceList(end($ids)) as $entry) {
        echo $entry['Depth'] . ': ' . $entry['Sender'] . ' #' . $entry['ObjectID'] . PHP_EOL;
    }
}
Haben Sie noch Fragen?