キー値を抽出し、結果に基づいてカスタム アラートを生成するために、実行中のログ ファイルを解析する小さな Node.js アプリに取り組んでいます。ただし、解決策が見つからないように見える問題に遭遇しました。関連性がある場合、解析される特定のログは MS SourceSafe 2005 ジャーナル ファイルです。
わかりやすくするために、日誌エントリの例を 3 つ示します (プライバシー上の理由から一部の詳細は変更されていますが、構造は変更されていません)。
$/path/to/a/project/folder
Version: 84
User: User1 Date: 14/01/27 Time: 12:15p
testBanner.rb added
Comment: Style and content changes based on corporate branding
Remove detector column on sc600 page
Styling tweaks and bug fixes
$/path/to/a/project/file.java
Version: 22
User: User2 Date: 14/01/29 Time: 12:34p
Checked in
Comment: Added fw updates to help fix (xxx) as seen in (yyy):
Changes include:
1) Peak tuning (minimum peak distance, and percentage crosstalk peak)
2) Dynamic pulses adjusted in run time by the sensor for low temperature climate
s
3) Startup noise automatic resets
4) More faults
$/path/to/a/project/folder
Version: 29
User: User3 Date: 14/01/30 Time: 11:54a
Labeled v2.036
Comment: Added many changes at this point, see aaVersion.java for a more comple
te listing.
これまでのところ、次の点が知られています。
- 最初のエントリ行は、常に関連する VSS データベース プロジェクトまたはファイル パスです。
- 2 番目のエントリ行は、常に上記のプロジェクトまたはファイルの関連バージョンです。
- 3 番目のエントリ行には、常に
User:
、Date:
およびの 3 つの値が含まれますTime:
。 - 4 番目のエントリ行は常に関連付けられたアクションであり、次のいずれかになります。
- チェックイン: {file}
- {ファイル} が追加されました
- {フォルダ} が作成されました
- {ファイルまたはフォルダ} が削除されました
- {ファイルまたはフォルダ} が破壊されました
- ラベル: {label}
- 5 番目のエントリ行は、 .で始まるオプションの
Comment:
コメント ブロックです。改行、ファイル名、括弧など、あらゆるタイプの文字列入力を含めることができます。基本的に、VSS はコメントの内容をまったく制限しません。
「コメント:」セクション以外のすべてに一致する正規表現パターンを見つけました。コメントに含まれる改行文字の数がわからないため、正規表現をまったく流暢に話せない私のような人にとっては、これは非常に困難です..
これまでのところ、アプリでジャーナル ファイルの変更を監視し、ストリーム内の新しいデータのみを取得することができました。私の最初の計画は.split('\n\n')
、ストリーム出力で を使用して個々のエントリをキャッチすることでしたが、コメントには任意の位置に任意の数の新しい行が含まれている可能性があるため、これは厳密には安全な方法ではありません。
regex-streamというモジュールを見つけたので、詳細を抽出する前に結果を文字列の配列に集める必要はないと思いますが、与えられた使用例がよくわかりません。または、ストリームを個々のエントリに分割する信頼できる方法を見つけることができる限り、個々の文字列を分割して解析することに問題はありません。
最後に、ジャーナルの更新ごとに、次のエントリ構造を持つオブジェクトの配列を探しています。
{
path: "",
version: "",
user: "",
date: "",
time: "",
action: "",
comment: ""
}
注意: 1 回の操作で 100 個のファイルがチェックインされた場合でも、VSS は各ファイルのエントリをログに記録します。通知のスパムを防ぐために、通知を生成する前に追加の検証とグループ化を実行する必要があります..
アプリの現在の状態は、この Github repoで確認できます。誰かがここで私を正しい方向に向けるのを手伝ってくれませんか...?