Dokumentation
IPS_GetTraces
array IPS_GetTraces (int $ObjektID)
Parameterliste
| ObjektID | ID des Objekts, dessen Traces geliefert werden sollen |
Rückgabewert
Ein Array mit Trace-Einträgen. Die Reihenfolge der Einträge ist nicht garantiert. 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
Diese Funktion ist nur für den internen Gebrauch vorgesehen und kann sich jederzeit ohne Ankündigung ändern oder entfallen.
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 alle aufbewahrten Einträge des Objekts ObjektID zusammen mit allen Einträgen ihrer Ursachenketten (Eltern, Großeltern, … bis zum Anfang der Kette). Einträge, die in mehreren Ketten vorkommen, sind nur einmal enthalten. Das Ergebnis ist eine flache Liste; die Baumstruktur lässt sich über TraceID, ParentID und ChildIDs wiederherstellen. Das Ergebnis entspricht somit IPS_GetTraceList für jede ID aus IPS_GetTraceIDList. Für ein Objekt ohne Traces wird ein leeres Array geliefert. Wird als ObjektID 1 übergeben, werden die Ketten aller aufbewahrten Einträge geliefert.
Die Funktion ist für den Abruf über die JSON-RPC Schnittstelle vorgesehen, z.B. für die Anzeige in der Konsole. In PHP-Skripten steht sie nicht zur Verfügung ("This function is not available for PHP") – dort kann das Ergebnis über IPS_GetTraceIDList und IPS_GetTraceList ermittelt werden.
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.
Ist eine Kette tiefer als 100 Einträge, geht der Kernel von einer Endlosschleife aus (z.B. ein Ereignis, das seine eigene Auslösevariable schreibt) und bricht den Vorgang mit "Insight trace depth exceeded 100. Assuming an endless loop. Aborting. Reverse Chain: …" ab.
Beispiel
$rpc = new JSONRPC("http://user:password@127.0.0.1:3777/api/");
print_r($rpc->IPS_GetTraces(10018));
/* 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
)
[1] => Array
(
[ChildIDs] => Array
(
)
[Data] => Array
(
[OldValue] => 5
[Value] => 7
[VariableID] => 10018
)
[Depth] => 1
[ExecutionUser] => @admin
[ObjectID] => 10018
[ParentID] => 0
[Sender] => Variable
[TimeStamp] => 1700000000
[TraceID] => 2
)
)
*/