2017-03-10 8 views
0

私はLTTNgトレースを持っています。これは、babeltrace APIを使用して解析しています。だから、私は、トレース(またはストリーム)ですべてのイベントを繰り返し処理せずにカウントできるかどうか疑問に思っていました。私はそれを行うために使用できるpublilc APIのどの機能を持っていますか?は、babeltrace APIを使用してストリーム内のすべてのイベントをカウントします。

答えて

1

CTFの本質は、一定の時間内に与えられたパケットのイベント記録を数えることを不可能にします。パケットのコンテキストには、何らかの形でイベントレコード数フィールドが含まれる可能性がありますが、指定されていないため汎用ツールでは使用しません。

イベントをカウントする唯一の方法は、残念なことにイベントレコードを反復することです。

babeltrace /path/to/ctf/trace/directory | wc --lines 

これは、限り、イベント・レコードが含まれていない限り、そうである印刷されたイベントレコードごとに1行を、ありますように動作します。最も簡単な方法は、babeltrace(1)ツールプリントのtextフォーマットは行数を数えることです文字列フィールドに改行があります(現在、テキスト出力でエスケープされていません)。

破棄されたイベントレコードも考慮する必要があります。それらはbabeltrace(1)によって標準出力に出力されませんが、検出されると標準エラーにカウントを含むメッセージが出力されます。

現在のbabeltrace(1)ツールでは、特定のデータストリームのパケットに属するイベントレコードのみを印刷する方法はありません。これが必要な場合は、イベントレコード数が必要なデータストリームファイル以外のすべてのデータストリームファイルを削除し、上記のコマンドを再度実行することをお勧めします。

はまた、例えばBabeltrace Pythonバインディング、(ないがテスト)を検討:特定のイベント・レコードを数える

python3 count.py /path/to/ctf/trace/directory 

count.pyとして保存
import babeltrace 


def count_ctf_event_records(path): 
    trace_collection = babeltrace.TraceCollection() 
    trace_collection.add_trace(path, 'ctf') 
    return sum(1 for event in trace_collection.events) 


if __name__ == '__main__': 
    import sys 

    print(count_ctf_event_records(sys.argv[1])) 

を、あなたはこれを試すことができますPythonバインディングを持つデータストリームは、読者のための練習として残されています。

Pythonバインディングのアプローチがbabeltrace(1)より速いかどうかは分かりませんが、これは言いました。

関連する問題