Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Output AllFieldInfo field in JSON/L in { } nest of separate fields #750

Closed
YamatoSecurity opened this issue Oct 16, 2022 · 8 comments · Fixed by #776
Closed

Output AllFieldInfo field in JSON/L in { } nest of separate fields #750

YamatoSecurity opened this issue Oct 16, 2022 · 8 comments · Fixed by #776
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@YamatoSecurity
Copy link
Collaborator

JSON出力ではAllFieldInfoが一個のメッセージになっていますが、jqで解析できないので、AllFieldInfoという配列の中に各フィールドを入れたいです。detailsのように:でパースするとうまくできない場合があり得るので、可能であれば、メッセージをパースせず、ログから各フィールドを抽出した方が良さそうです。

@YamatoSecurity YamatoSecurity added the enhancement New feature or request label Oct 16, 2022
@hitenkoku hitenkoku self-assigned this Oct 16, 2022
@hitenkoku hitenkoku added this to the v1.8.0 milestone Oct 16, 2022
@hitenkoku
Copy link
Collaborator

hitenkoku commented Oct 16, 2022

@YamatoSecurity やることは可能ですが、やる前に #748 も関連するためDetailsの取り扱いについて確認させてください。現在はDetailsの方ではDetailsの中身を: とbroken pipeで分けています。(Details全文は表示しない)

これを対応した場合に以下を確認させて下さい。

  • Detailsは分ける前の全文を表示するという形にしてよろしいでしょうか
  • AllFieldInfo(%RecordInformation%)は配列の形にするとして元の文面は不要でしょうか

@hitenkoku
Copy link
Collaborator

hitenkoku commented Oct 16, 2022

@YamatoSecurity ログから各フィールドを取得する方法は速度が落ちる可能性が高くなります。
速度を落とさない方法としてAllFieldInfoで出力している文字データの構造自体をもっておくという方法もありますが、その場合はデータ構造を大きく持たなければいけない為メモリ利用量が大きくなります。

一旦後者の方法でテストをしてみますが機能作成してpull-requestをした後にまた戻されるのは避けたいので処理時間でのクリアするラインを教えてください(例えばhayabusa-sample-evtxに対して行い、mainブランチの実行結果を基準として処理時間が増えたとして5%以内にしたいなど)

@hitenkoku
Copy link
Collaborator

hitenkoku commented Oct 16, 2022

以下の通り、AllFieldInfoでも同様の処理を入れるという方針で対応していきます。

処理時間の問題は、同じ処理を入れた場合と直接データを取得する場合の2パターンでテスト版を作成して処理時間を取って確認していくようにしたいと思います。

色々悩みましたが、結論として: 恐らくミニマルなデータでJSONを保存して解析したいアナリストと最も多いデータを保存して解析したいアナリストが2種類いると思うので、両方に対応したいです。(また、データが少ない時は全部、データが膨大の時はミニマルという風に出力したいアナリストもいると思います) ので、detailsは今のままJSON出力の場合は各フィールドを抽出したいです。

#748 (comment)

@YamatoSecurity
Copy link
Collaborator Author

テストについて了解です。CSV出力ですが、details v.s. all-field-infoのベンチマークを取りました:
verbose profile: 00:35:47.694 Saved file: verbose-test.csv (2.0 GB)
all-field-info-verbose profile: 00:36:29.925 Saved file: all-field-test.csv (3.5 GB)

以前にベンチマークを取った時に、all-field-infoはdetailsのようなパース処理がないので、抽出自体はそちらの方が速いみたいですが(多分)、保存するデータが多くなるので、結局detailsより遅くなると思います。

処理時間が例えば2倍以上かかるのであれば、気になりますが、より多くのデータを抽出して、出力しているので、CSV出力のように+5~30%でも遅くなっても問題ないと思います。

@hitenkoku
Copy link
Collaborator

ありがとうございます。それではその範囲で問題なく動作したらpull-requestを出させて頂きます。

@hitenkoku
Copy link
Collaborator

ALLFieldInfo内でObjectとして作成するがキーが他要素と合致してしまうケースが予想されるためそちらにAllFieldInfoから得られる情報はHBFI-の接頭語をつけることで合意した。

@YamatoSecurity
Copy link
Collaborator Author

メモ: AllFieldInfo(%RecordInformation%)は配列内ではなくて、jqで簡単に解析できるように{ }内にします。

また、%RecordInformation%%AllFieldInfo%に名前変更できますか?(そちらの方が分かりやすいと思います)
@hitenkoku

@YamatoSecurity YamatoSecurity changed the title Output AllFieldInfo field in JSON/L in array of separate fields Output AllFieldInfo field in JSON/L in { } nest of separate fields Oct 22, 2022
hitenkoku added a commit that referenced this issue Oct 23, 2022
- Replaced %RecordInformation% to %AllFieldInfo%
hitenkoku added a commit that referenced this issue Oct 23, 2022
@hitenkoku
Copy link
Collaborator

@YamatoSecurity 対応が完了しました。ご確認のほどよろしくお願いいたします

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants