首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Riemann中查找字符串

在Riemann中查找字符串
EN

Stack Overflow用户
提问于 2015-07-24 16:09:29
回答 1查看 300关注 0票数 1

我想用riemann中的clojure在句子中找到字符串。我使用重匹配编写了代码,但在执行时遇到了一些错误。

代码语言:javascript
复制
(smap
     (fn [events]
         (let [count-of-failures (count (re-matches #("POST*" (:Webservice %)) events))]

这就是我所犯的错误

代码语言:javascript
复制
java.lang.ClassCastException: riemann.config$eval96$fn__97$fn__98 cannot be cast to java.util.regex.Pattern
    at clojure.core$re_matcher.invoke(core.clj:4460)
    at clojure.core$re_matches.invoke(core.clj:4497)
    at riemann.config$eval96$fn__97.invoke(riemann_v1.config:31)
    at riemann.streams$smap$stream__3695.invoke(streams.clj:161)
    at riemann.streams$fixed_time_window_fn$stream__3946$fn__3979.invoke(streams.clj:381)
    at riemann.streams$fixed_time_window_fn$stream__3946.invoke(streams.clj:381)
    at riemann.config$eval96$stream__145$fn__150.invoke(riemann_v1.config:25)
    at riemann.config$eval96$stream__145.invoke(riemann_v1.config:25)
    at riemann.core$stream_BANG_$fn__5678.invoke(core.clj:19)
    at riemann.core$stream_BANG_.invoke(core.clj:18)
    at riemann.transport$handle.invoke(transport.clj:159)
    at riemann.transport.tcp$tcp_handler.invoke(tcp.clj:93)
    at riemann.transport.tcp$gen_tcp_handler$fn__5904.invoke(tcp.clj:65)
    at riemann.transport.tcp.proxy$io.netty.channel.ChannelInboundHandlerAdapter$ff19274a.channelRead(Unknown Source)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
    at io.netty.channel.AbstractChannelHandlerContext.access$700(AbstractChannelHandlerContext.java:32)
    at io.netty.channel.AbstractChannelHandlerContext$8.run(AbstractChannelHandlerContext.java:324)
    at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:36)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-25 00:19:05

我经常用这样的模式来做这样的事情。

代码语言:javascript
复制
(fixed-time-window 10
   (smap
     (fn [events]
         (let [count-of-failures 
               (count (filter #(re-find #"POST*" 
                                        (:Webservice %)) 
                       events))]
            (assoc (first events) 
                   :service "failure-counts"
                   :metric count-of-failures))))
      index
      slack
      prn
      divine-intervention))

对固定时间窗口的最高调用每次接收一个事件,例如:

代码语言:javascript
复制
{:service "foo"} {:service "foo"} {:service "foo"}

按时间将它们捆绑在一起:

代码语言:javascript
复制
[{:service "foo"} {:service "foo"}] [{:service "foo"}]

这个bundler有一个子流,它接收每个组并对其进行计数,然后将它们传递给它的子流,单个事件如下所示:

代码语言:javascript
复制
{:service "foo" :metric 2} ;; there where two in the first 10 second window
{:service "foo" :metris 1} ;; there was one in the second 10 second window.

然后,从其中流出的流被传递给每个子流。在我的示例中,我调用了示例子流:

  • 索引,一种在函数中构建的,将事物放入破折号等的索引中。
  • 松弛,这是一个函数谁的定义,在这里没有给出的事件,以一个松弛的渠道。它是特定于组织的(通道名称、令牌等),所以没有必要发布它。
  • prn:打印到控制台进行调试
  • 神圣干预:另一个函数,它的实现是一个练习,它奇迹般地翻转所有系统中的适当部分,使问题消失;-)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31615148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档