Droolsを使用して、ログファイルから大量のテキストデータを処理しています。私はイベント時間を適切に測定する方法を理解しようとしています。droolsを使用すると、テキストログ内のイベントの継続時間が計算されます
イベントは1つのログ行で開始されますが、正常終了または異常終了によって終了することがあります。それが私がキャプチャに問題があるのです。ログエントリが(他のログの行が除外されている場合)どのように見えるかここです:
Jan 24 06:50:29 app[623]: CallOriginateCmd
Jan 24 07:19:27 app[616]: Client ended the call
Jan 24 09:00:18 app[623]: CallOriginateCmd
Jan 24 09:34:48 app[616]: Client ended the call
Jan 24 11:03:56 app[623]: CallOriginateCmd
Jan 24 12:56:58 app[616]: Client ended the call
Jan 24 15:48:11 app[623]: CallOriginateCmd
Jan 24 16:13:24 app[616]: Client ended the call
Jan 24 17:16:16 app[623]: CallOriginateCmd
Jan 24 18:48:51 app[616]: Client ended the call
Jan 25 06:09:01 app[623]: CallOriginateCmd
Jan 25 06:09:24 app[623]: Failure: timeout sending Config
Jan 25 06:09:26 app[623]: CallOriginateCmd
Jan 25 06:09:50 app[623]: Failure: timeout sending Config
私は七時19分27秒で1月24日午前6時50分29秒のコールをリンクするルールを作成しようとしています終了、Jan 25 06:09:01の呼び出しと06:09:24の失敗などがあります。以下のルールは、私が望む正しい開始時刻と終了時刻のCall()オブジェクトを作成しません。
ここに私のコードの概要です:
rule "Found Call Start"
when
LogEntry(message matches ".*CallOriginateCmd.*", logTimestamp : timestamp)
then
Call call = new Call();
call.setStarttime(logTimestamp);
call.setPartial (true);
insert(call);
AnalysisLog.debug(logTimestamp, "Call Started");
end
rule "Found Call End"
when
LogEntry(message matches ".*Client ended the call.*", logTimestamp : timestamp)
call : Call(partial == true)
then
call.setEndtime(logTimestamp);
call.setPartial(false);
call.setFailure(false);
update(call);
AnalysisLog.debug(logTimestamp, "Call Ended.");
end
rule "Found Call Failure"
when
LogEntry(message matches ".*timeout sending Config.*", logTimestamp : timestamp)
call : Call(partial == true)
then
call.setEndtime(logTimestamp);
call.setPartial(false);
call.setFailure(true);
update(call);
AnalysisLog.debug(logTimestamp, "Call Failed.");
end
上からの出力は次のとおりです。ログ内の最後の呼び出しが一致している必要がありますが、
Jan 17 22:53:04: Call Started
Jan 18 02:10:23: Call Failed.
Jan 17 23:09:23: Call Started
Jan 18 02:10:23: Call Failed.
Jan 17 23:25:39: Call Started
すべての呼び出しは、失敗に合わせているようです。
私がコードすることを考えた:「」句がスタート+エンドをリンクしたり、一緒に中止+始めるが、これは明らかにこれをしないんでしょう内
call : Call(partial == true)
。
代わりに、 "when"句でlogTimestampが呼び出しの開始時刻に最も近いところにある呼び出しを見つける方法を見つける必要があると思います。これは可能ですか?
TIA
それは、ありがとう!私は両方のLogEntryをwhen節に追加するとは思わなかった。 –