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;
}
}