1

私は1つのシナリオに直面しています。リーマンに渡す 3 つのイベント A、B、C があるとします。

イベント A には次のフィールドがあります:ExamNo 3890 :ExamResult Pass :Rank 8
イベント B には次のフィールドがあります:ExamNo 3890 :ExamResult Pass :Rank 5
Event C には次のフィールドがあります:ExamNo 3890 :ExamResult Fail :Rank 0

ExamNo に基づいてイベントを比較する必要があり、ExamResult に変更があるたびに、新しいフィールドをイベント {:Eligible, :Grade} に追加する必要があります。イベントを比較するコードを書きましたが、新しいフィールドがイベントに追加されませんでした。

(let [examindex (default :ttl 300 (update-index (index)))]
  (streams
    prn
    examindex))

(streams
  (where (service "Result")
    (smap
          (fn [events]
        (by[:ExamNo]
        (changed :ExamResult))
        (event
            {    :Eligible :Eligible-Status
                 :Grade     :GradeValue
            }
         )))))

私はリーマン初心者なので。私は問題を理解できませんでした。

4

1 に答える 1

1

私は Riemann を使用したことはありませんが、既存のイベントを変更したいので、ここで説明されwithているように、 の代わりに を使用する必要があります。ところで、明確にするために、イベントは不変であるため、実際には古い値に基づいて新しい値を作成しています。event

コードをインデントするようにしてください。(event ...)フォームが で囲まれていないことに注意して(changed ...)ください。

テスト

streams構成ファイルでは、次の宣言のみを使用します。

(streams
 (where (service "Result")
    (by :ExamNo
      (changed :ExamResult
        (with {:Eligible :Eligible-Status
               :Grade    :GradeValue  }
          prn)))))))

発言を削除smap・追加しましたprn。これをテストするために、nREPLクライアントに接続し、そこからイベントを発生させました。まず、TCP クライアントを定義しましょう。

(def tcp-client (riemann.client/tcp-client))

次に、最初のイベントを:ExamResult値なしで送信します。

(riemann.client/send-event tcp-client
  (riemann.common/event {:service "Result" :ExamNo "4"}))

サーバーによって何も印刷されません。次に、同じExamNo結果の新しいイベントを送信します。

(riemann.client/send-event tcp-client
  (riemann.common/event {:service "Result" :ExamNo "4" :ExamResult "result"}))

前回のイベントから試験番号「4」の結果が変わったので、新しいイベントを作成します。実行中の Riemann サーバーは、標準出力に次のように出力します。

#riemann.codec.Event{:host "localhost", :service "Result", :state nil, 
:description nil, :metric nil, :tags nil, :time 1437035833,
:ttl nil, :Grade :GradeValue, :Eligible :Eligible-Status, 
:ExamNo "4", :ExamResult "x"}

再注入

の代わりにprnを使用reinjectし、以前に省略した行を復元した場合:

(let [examindex (default :ttl 300 (update-index (index)))]
  (streams
    prn
    examindex))

...その後、すべてのイベントが表示されます。特に、再注入される新しいイベントが表示されます。この動作は、最初に期待した動作である可能性があります。

于 2015-07-15T13:26:47.417 に答える