2014-11-26 4 views
1

자연어로 다음 표현식을 WSO2 CEP의 실행 계획으로 변환하려고합니다.Siddhi 쿼리 식 내에서 새 문자열

서비스에 연결된 {CPU로드, 메모리로드}, {CPU로드, 스토리지로드} 또는 {메모리로드, 스토리지로드} 쌍 중 하나의 평균로드가 99 % 이상인 경우, 그런 다음 경고를 보냅니다.

첫째, 내가 지정한 다음 실행 스트림 : 다음

define stream avgCpuLoadStream (service string, avgCpuLoad double); 
define stream avgMemoryLoadStream (service string, avgMemoryLoad double); 
define stream avgStorageLoadStream (service string, avgStorageLoad double); 
define stream alertStream (service string, cause string); 

, 나는 다음과 같은 실행 계획 지정한 :이 실행 계획은 서비스에 경고를 보냅니다

<?xml version="1.0" encoding="UTF-8"?> 
<executionPlan name="alertPlan" statistics="enable" trace="enable" xmlns="http://wso2.org/carbon/eventprocessor"> 
    <description/> 
    <siddhiConfiguration> 
    <property name="siddhi.persistence.snapshot.time.interval.minutes">0</property> 
    <property name="siddhi.enable.distributed.processing">false</property> 
    </siddhiConfiguration> 
    <importedStreams> 
    <stream as="avgCpuLoadStream" name="avgCpuLoadStream" version="1.0.0"/> 
    <stream as="avgMemoryLoadStream" name="avgMemoryLoadStream" version="1.0.0"/> 
    <stream as="avgStorageLoadStream" name="avgStorageLoadStream" version="1.0.0"/> 
    </importedStreams> 
    <queryExpressions><![CDATA[ 
from avgCpuLoadStream[avgCpuLoad >= 99] as c 
join avgMemoryLoadStream[avgMemoryLoad >= 99] as m on c.service == m.service 
select c.service 
insert into alertStream; 

from avgCpuLoadStream[avgCpuLoad >= 99] as c 
join avgStorageLoadStream[avgStorageLoad >= 99] as s on c.service == s.service 
select c.service 
insert into alertStream; 

from avgMemoryLoadStream[avgMemoryLoad >= 99] as m 
join avgStorageLoadStream[avgStorageLoad >= 99] as s on m.service == s.service 
select m.service 
insert into alertStream; 
]]></queryExpressions> 
    <exportedStreams> 
    <stream name="alertStream" valueOf="alertStream" version="1.0.0"/> 
    </exportedStreams> 
</executionPlan> 

을하지만, 경고의 원인을 보내지 않습니다. Siddhi에서이 목적을 위해 쿼리 식 내에 새 문자열을 만들 수 있습니까? 함께 :

from avgCpuLoadStream[avgCpuLoad >= 99] as c 
join avgMemoryLoadStream[avgMemoryLoad >= 99] as m on c.service == m.service 
select c.service, "CPU and memory overload" as cause 
insert into alertStream; 

그렇지 않은 경우 대체 솔루션을 제안 할 수 있습니까? 오슬로에서

안부,

알레산드로

답변

2

다음과 같이 네, 당신은 단순히 작은 따옴표로 새 문자열을 추가 할 수 있습니다 : 당신은 CEP에 사용자 정의 기능를 만들 수 있습니다

from avgCpuLoadStream[avgCpuLoad >= 99] as c 
join avgMemoryLoadStream[avgMemoryLoad >= 99] as m on c.service == m.service 
select c.service, 'CPU and memory overload' as cause 
insert into alertStream; 
1

, 문자열을 반환합니다. 예를 들어

:

from avgCpuLoadStream[avgCpuLoad >= 99] as c 
join avgMemoryLoadStream[avgMemoryLoad >= 99] as m on c.service == m.service 
select c.service, customFunction:alert() as cause 
insert into alertStream; 

이 솔루션은 순진하지만, 그것을 작동합니다.