Clojure 当收到特定事件时,如何清除Riemann索引?

Clojure 当收到特定事件时,如何清除Riemann索引?,clojure,riemann,Clojure,Riemann,我正在为一个向Riemann发送事件的应用程序编写单元测试。Riemann启动非常慢,所以我决定启动它一次,并在所有测试中重用该实例。因此,我需要在每个新测试开始时从以前的测试生成的事件中清除索引 我试图做的是以这样一种方式配置Riemann,即在接收到特殊事件时,它将清除其索引。有一个API调用似乎适合于任务:。 但我对Clojure不太熟悉,也不知道如何使用它。以下是我的配置的一部分: (streams index (where (state "clear-all") (ri

我正在为一个向Riemann发送事件的应用程序编写单元测试。Riemann启动非常慢,所以我决定启动它一次,并在所有测试中重用该实例。因此,我需要在每个新测试开始时从以前的测试生成的事件中清除索引

我试图做的是以这样一种方式配置Riemann,即在接收到特殊事件时,它将清除其索引。有一个API调用似乎适合于任务:。 但我对Clojure不太熟悉,也不知道如何使用它。以下是我的配置的一部分:

(streams
  index
  (where (state "clear-all")
    (riemann.index/clear (:index @core))))
但是Riemann未能从以下错误开始:
没有实现方法::清除协议:#'Riemann.index/index为类找到:nil

这看起来像是
(:index@core)
被计算为
nil

这也不起作用:

(streams
  index
  (where (state "clear-all")
    (riemann.index/clear index)))

错误是:
没有实现方法::清除协议:#“riemann.index/index为类:riemann.streams$default$stream_u9829找到:
不是riemann方面的专家,只能猜测。第一个代码段似乎是正确的,但当您调用该代码时,索引可能还没有在核心中关联?在这种情况下,您可以只为
nil
值实现
Index
协议,这样当
:Index
值为
nil
时,它将不执行任何操作。诸如此类(未经测试):


希望这会有帮助。

而不是尝试立即评估
(riemann.index/clear(:index@core))
我需要一个函数,该函数将在事件到达时调用:

(streams
  (where (state "clear-all")
    (fn [_]
      (riemann.index/clear (:index @core)))
    (else index)))

现在一切都正常了。

这不起作用,但您给了我一个提示,说明我的代码有什么问题<代码>(riemann.index/clear(:index@core))在读取配置时进行计算。但我需要在消息到达时对代码进行评估。因此,我需要一个稍后调用的函数:
(其中(状态为“全部清除”)(fn[]riemann.index/clear(:index@core))
现在
riemann.index/clear
在收到消息时被调用。然而,这似乎不足以实现我最初的目标:完全重置黎曼。
(streams
  (where (state "clear-all")
    (fn [_]
      (riemann.index/clear (:index @core)))
    (else index)))