Ich habe eine Siddhi-Abfrage, um die Anzahl der Gesamtereignisse in einer Minute mithilfe eines Timebatch-Fensters abzurufen. Unter Verwendung eines Ausgabestroms aktualisiere ich ein Balkendiagramm mit konstanten kommenden Werten, Zeitstempeln (Datum und Zeit, bis Minute) auf der X-Achse und Ereignissen auf der Y-Achse.WSO2: Aktualisieren eines Ausgabestreams in Siddhi-Abfrage
Es gibt jedoch manchmal, wenn entweder die Anzahl der Ereignisse in einer Minute zu lange dauert, um übertragen zu werden, und die Abfrage daher keine korrekten Ergebnisse liefert.
Zum Beispiel, wenn ich insgesamt 60 Ereignisse bekomme und diese Abfrage gibt mir zuerst die Anzahl von 40, die in Balkendiagramm angezeigt wird, aber nach einer Minute ändert es seinen Wert auf 20, die nach der Logik richtig ist, aber ich bin besorgt ob Es gibt eine Möglichkeit, den Stream und das Balkendiagramm für alle vorherigen Zeitstempel (in diesem Fall 40 + 20) zu aktualisieren und neue Werte für die nächsten kommenden Zeitstempel einzufügen.
Ich habe gesehen, Update-Funktion wird mit Tabellen nicht Stream verwendet, ist es so? Und ich möchte auch, dass 2 outputStreams zwei verschiedene Balkendiagramme aus dem gleichen Eingabestream bevölkern. Also ist unten die Abfrage für diesen Zweck korrekt?
Abfrage ist:
/* Enter a unique ExecutionPlan */
@Plan:name('FTPExecutionPlan')
/* Enter a unique description for ExecutionPlan */
-- @Plan:description('ExecutionPlan')
/* define streams/tables and write queries here ... */
@Import('FTPInStream:1.0.0')
define stream FTPInStream (ts string, uid string, id_orig_h string, id_orig_p int, id_resp_h string, id_resp_p int, user string, password string,command string, arg string, mime_type string, file_size string, reply_code int, reply_msg string);
@Export('FTPIPOutStream:1.0.0')
define stream FTPIPOutStream (ip_address string, ftp_requests int);
@Export('FTPOutStream:1.0.0')
define stream FTPOutStream (ts string, ftp_requests int);
from FTPInStream
select time:dateFormat(str:replaceAll(ts,'T',' '),'yyyy-MM-dd HH:mm', 'yyyy-MM-dd HH:mm:ss') as ts, uid, id_orig_h, id_orig_p, id_resp_h, id_resp_p
insert into intermediateStream;
from intermediateStream#window.timeBatch(1 min)
select ts, cast(count(ts), 'int') as ftp_requests
group by ts
insert into FTPOutStream;
from intermediateStream#window.timeBatch(1 min)
select id_orig_h as ip_address, cast(count(id_orig_h), 'int') as ftp_requests
group by id_orig_h
insert into FTPIPOutStream;
Die externalTimeBatch-Funktion dauert Zeitstempel so lang, aber ich habe eine Zeichenfolge in Form von "JJJJ-MM-TT HH: mm", wie kann ich diesen Wert in lange konvertieren? – aneela
Verwenden Sie [timestampInMilliseconds] (https://docs.wso2.com/display/CEP420/Siddhi+Extensions#SiddhiExtensions-timestampInMilliseconds) (dh timestampInMilliseconds ('2007-11-30 10:30:19', 'yyyy-MM- dd HH: mm: ss ') gibt 1196398819000 zurück. – Grainier
Vielen Dank, es gibt ein kleines Problem, der Link, den Sie zur Verfügung gestellt haben, ist von Wso2 4.2.0 Release und Externaltimebatch-Funktion hat vier Parameter.Ich habe 4.1.0 installiert, die nur akzeptiert Die ersten beiden Parameter und ich bin nicht in der Lage, Link für 4.2.0 zu bekommen. Auf der Website von wso2cep ist die neueste verfügbare Version 4.1.0. – aneela