使用CEP Proton,我想要检查在某个时间间隔内接收到的事件,第二个和之后的事件的id是否包含在第一个事件的类型为array的属性中。假设第一个事件带有一个名为group的属性,它是一个整数数组(10,20,30)。下面的事件将带有id,例如20、25等等。我想检查这些事件的id是否包含在第一个事件所包含的属性组中。为此,我在EPA中创建了一个条件
ArrayContains(ArrayGet(myevent.group,0),ArrayGet(myevent.id,ArraySize(myevent.id)-1))然而,当我点击verify时,我得到了一个错误
Error Error in EPA: expression error of undefined myepa我做错什么了吗?我不能使用ArrayGet访问属性数组吗?或者,可能ArrayContains无法处理ArrayGet的结果
JSON
{"epn":{"events":[{"name":"GupsyContextUpdate","createdDate":"Thu Sep 29 2016","attributes":[{"name":"entityId","type":"String","dimension":0},{"name":"entityType","type":"String","dimension":0,"description":"The cost of this event occurrence. Negative if this is an opportunity"},{"name":"SF","type":"Integer","dimension":0,"description":"Used in case the this event occur within an interval"},{"name":"occupied","type":"Integer","dimension":"0"},{"name":"framecounter","type":"Integer","dimension":"0"},{"name":"RSSI","type":"String","dimension":"0"},{"name":"hwversion","type":"String","dimension":"0"},{"name":"swversion","type":"String","dimension":"0"},{"name":"compassz","type":"String","dimension":"0"},{"name":"MACBS","type":"String","dimension":"0"},{"name":"SNR","type":"String","dimension":"0"},{"name":"devEUI","type":"String","dimension":"0"},{"name":"battery","type":"String","dimension":"0"},{"name":"devicetype","type":"String","dimension":"0"},{"name":"compassx","type":"String","dimension":"0"},{"name":"compassy","type":"String","dimension":"0"},{"name":"compasst","type":"String","dimension":"0"},{"name":"neighbours","type":"String","dimension":"1"},{"name":"timestamp","type":"String","dimension":"0"}]},{"name":"gupsyoutput","createdDate":"Thu Sep 29 2016","attributes":[{"name":"Certainty","type":"Double","defaultValue":"1","dimension":0,"description":"The certainty that this event happen (value between 0 to 1)"},{"name":"OccurrenceTime","type":"Date","dimension":0,"description":"No value means it equals the event detection time, other option is to use one of the defined distribution functions with parameters"},{"name":"ExpirationTime","type":"Date","dimension":0},{"name":"Cost","type":"Double","dimension":0,"description":"The cost of this event occurrence. Negative if this is an opportunity"},{"name":"Duration","type":"Double","defaultValue":"0","dimension":0,"description":"Used in case the this event occur within an interval"},{"name":"test","type":"String","dimension":"1"}]}],"epas":[{"name":"gupsyepa","createdDate":"Thu Sep 29 2016","epaType":"Aggregate","context":"gupsyct","inputEvents":[{"name":"GupsyContextUpdate","alias":"gupsyupdate","consumptionPolicy":"Consume","instanceSelectionPolicy":"First"}],"computedVariables":[{"name":"count","aggregationType":"Count","gupsyupdate":"ArrayContains(ArrayGet(gupsyupdate.neighbours,0),ArrayGet(gupsyupdate.id,ArraySize(gupsyupdate.id)-1))"}],"assertion":"count == true","evaluationPolicy":"Immediate","cardinalityPolicy":"Single","internalSegmentation":[],"derivedEvents":[{"name":"gupsyoutput","reportParticipants":false,"expressions":{"Duration":"0","test":"ArrayContains(ArrayGet(gupsyupdate.neighbours,0),ArrayGet(gupsyupdate.devEUI,ArraySize(gupsyupdate.devEUI)-1))"}}]}],"contexts":{"temporal":[{"name":"gupsyct","createdDate":"Thu Sep 29 2016","type":"TemporalInterval","atStartup":false,"neverEnding":false,"initiators":[{"initiatorType":"Event","initiatorPolicy":"Ignore","name":"GupsyContextUpdate"}],"terminators":[{"terminatorType":"RelativeTime","terminationType":"Terminate","relativeTime":"15000"}]}],"segmentation":[],"composite":[]},"consumers":[{"name":"gupsyconsumer","createdDate":"Thu Sep 29 2016","type":"Rest","properties":[{"name":"URL","value":"http://127.0.0.1/ProtonParser/TestEvent2Log.php"},{"name":"contentType","value":"application/xml"},{"name":"formatter","value":"xml"},{"name":"delimiter","value":";"},{"name":"tagDataSeparator","value":"="},{"name":"dateFormat","value":"dd/MM/yyyy-HH:mm:ss"}],"events":[{"name":"gupsyoutput"}]}],"producers":[],"name":"gupsy"}}发布于 2016-10-06 15:11:21
请分享您的应用程序的整个JSON定义。
从您提供的信息中,不清楚它是哪种类型的EPA (要访问一系列事件,您需要一个statefull EPA,并且需要确保以能够区分第一个和后续事件的方式编写应用程序)。
此外,不清楚为什么要在表达式的两个部分中访问相同的事件实例- myevent。
ArrayContains接收(数组,值)作为操作数。你传递它(值,值),这是假设"myevent.id“也是一个数组,从你的描述中我理解它不是?
无论如何,我看到您的表达式中有很多潜在的问题,因此我希望看到整个JSON,或者至少是与"myepa“EPA相关的部分。
发布于 2016-10-20 16:03:50
我已经检查过JSON应用程序,其中存在多个问题:1)您正在使用aggregate类型的EPA来计算计数。Count用于对事件进行计数。它是一个整型变量。不能为其分配布尔值。因此,像"count == true“这样的比较表达式或者像"count : ArrayContains(ArrayGet(gupsyupdate.neighbours,0),ArrayGet(gupsyupdate.id,ArraySize(gupsyupdate.id)-1)”这样的布尔值赋值都是无效的。
2)另外,假设您在某个地方使用此表达式,而不是在计数变量中:-the gupsyupdate事件没有属性"id",因此您不能在表达式中使用它。-ArrayGet(gupsyupdate.neighbours,0) -将返回数组中的单个对象...因此不能在ArrayContains表达式中使用它,因为它应该接收一个数组
3)环境保护局的政策没有意义……它是一个聚合EPA,但是您可以将其与evaluationPolicy "Immediate“和基数策略"Single”一起使用。这意味着该EPA只会被评估一次,当它接收到第一个gupsyupdate事件时立即进行评估。因此,它不会真正充当聚合器……
请根据此输入修改您的申请。
https://stackoverflow.com/questions/39774810
复制相似问题