接收到特定事件后如何清除黎曼指数?
How to clear up Riemann index when a specific event has been received?
我正在为向 Riemann 发送事件的应用程序编写单元测试。 Riemann 启动非常缓慢,所以我决定启动它一次并为所有测试重用该实例。因此,我需要在每次新测试开始时从以前的测试产生的事件中清除索引。
我想做的是配置 Riemann,使其在接收到特殊事件时清除其索引。有一个 API 调用似乎适合该任务:http://riemann.io/api/riemann.index.html#var-clear。
但我对 Clojure 不是很熟悉,不知道如何使用它。这是我的配置的一部分:
(streams
index
(where (state "clear-all")
(riemann.index/clear (:index @core))))
但是黎曼启动失败,出现这个错误:No implementation of method: :clear of protocol: #'riemann.index/Index found for class: nil
这看起来 (:index @core)
被评估为 nil
。
这个也不行:
(streams
index
(where (state "clear-all")
(riemann.index/clear index)))
错误是:No implementation of method: :clear of protocol: #'riemann.index/Index found for class: riemann.streams$default$stream__9829
不是黎曼专家,只能猜测。第一个片段似乎是正确的,但可能在您调用该代码时索引尚未关联到核心中?在这种情况下,您可以只为 nil
值实现 Index
协议,这样当 :index
值是 nil
时它什么都不做。类似的东西(未测试):
(extend-protocol riemann.index/Index
nil
(clear [_])
(delete [_ _])
(delete-exactly [_ _])
(expire [_])
(search [_ _])
(update [_ _])
(lookup [_ _ _]))
希望对您有所帮助。
而不是尝试立即评估 (riemann.index/clear (:index @core))
我需要一个函数,该函数将在事件到达时调用:
(streams
(where (state "clear-all")
(fn [_]
(riemann.index/clear (:index @core)))
(else index)))
现在一切正常。
我正在为向 Riemann 发送事件的应用程序编写单元测试。 Riemann 启动非常缓慢,所以我决定启动它一次并为所有测试重用该实例。因此,我需要在每次新测试开始时从以前的测试产生的事件中清除索引。
我想做的是配置 Riemann,使其在接收到特殊事件时清除其索引。有一个 API 调用似乎适合该任务:http://riemann.io/api/riemann.index.html#var-clear。 但我对 Clojure 不是很熟悉,不知道如何使用它。这是我的配置的一部分:
(streams
index
(where (state "clear-all")
(riemann.index/clear (:index @core))))
但是黎曼启动失败,出现这个错误:No implementation of method: :clear of protocol: #'riemann.index/Index found for class: nil
这看起来 (:index @core)
被评估为 nil
。
这个也不行:
(streams
index
(where (state "clear-all")
(riemann.index/clear index)))
错误是:No implementation of method: :clear of protocol: #'riemann.index/Index found for class: riemann.streams$default$stream__9829
不是黎曼专家,只能猜测。第一个片段似乎是正确的,但可能在您调用该代码时索引尚未关联到核心中?在这种情况下,您可以只为 nil
值实现 Index
协议,这样当 :index
值是 nil
时它什么都不做。类似的东西(未测试):
(extend-protocol riemann.index/Index
nil
(clear [_])
(delete [_ _])
(delete-exactly [_ _])
(expire [_])
(search [_ _])
(update [_ _])
(lookup [_ _ _]))
希望对您有所帮助。
而不是尝试立即评估 (riemann.index/clear (:index @core))
我需要一个函数,该函数将在事件到达时调用:
(streams
(where (state "clear-all")
(fn [_]
(riemann.index/clear (:index @core)))
(else index)))
现在一切正常。