telefonicaid / perseo-fe Goto Github PK
View Code? Open in Web Editor NEWFront End process for the Perseo CEP
License: GNU Affero General Public License v3.0
Front End process for the Perseo CEP
License: GNU Affero General Public License v3.0
When the json sent to CEP is too long, the perseo-core fails parsing the json
{"error":"error post to http://10.95.82.36:8080/perseo-core/rules (Unterminated string at 2897 [character 2898 line 1])","data":null}
In the documentation:
https://github.com/telefonicaid/perseo-fe/blob/master/documentation/plain_rules.md#http-post-action
said that:
"parameters": {
"url": "localhost:1111"
}
but in code is used "URL" in uppercase.
"parameters":{
"URL":"localhost:1111"
}
It is better to change the code to make it the same as mentioned in the doc
The outgoing SMS must have a 'from' field
Reported by @mcarracedo
Think about implementation of checks for no-signal
What if the number of periods grows madly ...
How is the V8 implementation of timers ...
One timer for "rule" them all ? Just a few ones, with partitions?
Effort: 3 man day
{ "VR" : { "active" : 1, "cards" : [ { "sensorData" : { "dataType" : "", "measureName" : "alarm" }, "configData" : { }, "sensorCardType" : "notUpdated", "conditionList" : [ { "Not" : false, "scope" : "LAST_MEASURE", "parameterValue" : "10", "operator" : "EQUAL_TO", "parameterName" : "" } ], "timeData" : { "interval" : "1", "context" : "", "repeat" : "-1" }, "type" : "SensorCard", "id" : "card_1", "connectedTo" : [ "card_2" ] }, { "actionData" : { "userParams" : [ { "name" : "mail.from", "value" : "[email protected]" }, { "name" : "mail.to", "value" : "[email protected]" }, { "name" : "mail.subject", "value" : "IoT message" }, { "name" : "mail.message", "value" : "ALARM: ${alarm} -- (Email rule)" } ], "type" : "SendEmailAction", "name" : "SendEmailAction" }, "type" : "ActionCard", "id" : "card_7", "connectedTo" : [ "card_8" ] } ], "name" : "test_01000000001", "service" : "/my_service", "tenant" : "my_tenant" }, "name" : "test_01000000001", "action" : { "type" : "email", "template" : "ALARM: ${alarm} -- (Email rule)", "parameters" : { "to" : "[email protected]", "from" : "[email protected]", "subject" : "IoT message" } }, "service" : "/my_service", "tenant" : "my_tenant", "nosignal" : { "checkInterval" : "1", "attribute" : "alarm", "reportInterval" : "10", "id" : null, "idRegexp" : null, "type" : null }, "_id" : ObjectId("54f494837f1358e30b8bec78") }
{ "_id" : { "type" : "room", "id" : "room_1", "servicePath" : "/my_service" }, "modDate" : 1406886193, "attrs" : [ { "modDate" : 1406886193, "type" : "void", "name" : "alarm", "value" : "danger", "creDate" : 1406886193 } ], "creDate" : 1406886193 }
"template" : "ALARM: ${alarm} -- (Email rule)", in rule
Receiving message from: ('127.0.0.1', 56675)
Message addressed to : ['[email protected]']
Message length : 357
smtp_counter 7
Message addressed from: [email protected]
data info :
Content-Type: text/plain
From: [email protected]
To: [email protected]
Subject: IoT message
X-Mailer: nodemailer (1.3.0; +http://www.nodemailer.com;
SMTP/0.1.13[client:1.1.0])
Content-Transfer-Encoding: 7bit
Date: Mon, 02 Mar 2015 16:53:07 +0000
Message-Id: <[email protected]>
MIME-Version: 1.0
ALARM: [?] -- (Email rule)
(Similar problem to the one described in telefonicaid/fiware-pep-steelskin#126)
create-rpm.sh script including the following:
if [ -z "$CEP_VERSION" ]; then
CEP_VERSION=0.4.0_next
fi
That CEP_VERSION=0.4.0_next
is supposed to be changed by release.sh, in order to keep it synchronized regarding the version in the package.json package. However, current release.sh script is not doing so.
Good names, good values, remove duplication, minimal set ...
Effort: 4 man day
(Raised in #37)
We should rationalize the usage of the service and subservice concetps in the code. Currently, there some problems:
So, a overall review of the code is needed to fix all this things and make code more maintenable.
Effort: 2 man day
Hi,
As I can see in the architecture of Perseo, the CEP is able to retrieve a token. I am using a keystone as IdM (https://github.com/ging/fi-ware-idm).
In the moment of the alert launched, the Action is calling to the keystone with a "Trust" attribute.
I can not find any documentation about this, and I have been trying by inserting trusted entities in the IdM database without any success.
Any hints please?
Thank you
For 'update' operation:
A boolean attribute with value false
cannot be changed to a value of type string or number,
This file has grown too much, many parameters are not installation dependent and complicates releasing/deployment with unnecessary noise. Extract values that change unlikely to other file that does not need a template for deployment
Effort: 1 man day
Values allowed in rule type:
At the moment, if a rule is triggered with wrong rule type (ex: rtert), the error is controlled in log.
time=2015-01-29T09:45:34.824Z | lvl=ERROR | corr=f93c2cc3-f301-45c4-8f6a-83b496e67994 | trans=597d1079-00b4-448a-9196-81cacc797694 | op=/actions/do | msg= unknown action type rtert
Current release script modifies the value of the package.json version, but it doesn't modify the same value in the shrinkwrap file.
When a bad name of "tenant" is sent to perseo, perseo response with a 500 and the trace of the express library. It could be nice to have a parser of this errors, capture before fail, or format the failure
HttpCode received: 500
Body: {"error":"error post to http://10.95.82.36:8080/perseo-core/rules (Incorrect syntax near '-' at line 1 column 24 [create context ctxt$test-34$ partition by tenant from iotEvent(tenant=\"test-34\" and service=\"/\")])","data":null}
Add doc explaining no-signal detection
Effort: 2 man day
Right now a notUpdated rule can be created with interval = 0 or negative. Therefore each 0 sec Perseo verifies against CB for know if the attribute is updated. Overloading perseo with multiple requests to CB. Other problem is each request write in log, so it can fill up and stop working perseo.
esample:
{
"VR":{
"active":1,
"cards":[
{
"sensorData":{
"dataType":"",
"measureName":"temperature"
},
"configData":{
},
"sensorCardType":"notUpdated",
"conditionList":[
{
"Not":false,
"scope":"LAST_MEASURE",
"parameterValue":"0",
"operator":"EQUAL_TO",
"parameterName":""
}
],
"timeData":{
"interval":"0",
"context":"",
"repeat":"-1"
},
"type":"SensorCard",
"id":"card_1",
"connectedTo":[
"card_2"
]
}
],
"name":"test1200",
"service":"/my_service",
"tenant":"my_tenant"
},
"name":"test1200",
"action":{
},
"service":"/my_service",
"tenant":"my_tenant",
"nosignal":{
"checkInterval":"0",
"attribute":"temperature",
"reportInterval":"0",
"id":null,
"idRegexp":null,
"type":null
},
"_id":ObjectId("54ddd89ed306f25859eae96b")
}
Issue #55 broke VR interface. Just for updateAction, userParams in actionData is not an array
Create a version request (http) or message in log to Perseo-fe.
examples:
http://host:port/version
In log when start Perseo
{
"VR":{
"active":1,
"cards":[
{
"sensorData":{
"dataType":"Text",
"measureName":""
},
"configData":{
},
"sensorCardType":"type",
"conditionList":[
{
"Not":false,
"scope":"XPATH",
"parameterValue":"room",
"operator":"DIFFERENT_TO",
"parameterName":"type"
}
],
"timeData":{
"interval":"",
"context":"",
"repeat":"-1"
},
"type":"SensorCard",
"id":"card_3",
"connectedTo":[
"card_4"
]
},
{
"sensorData":{
"dataType":"Quantity",
"measureName":"temperature"
},
"configData":{
},
"sensorCardType":"valueThreshold",
"conditionList":[
{
"Not":false,
"scope":"OBSERVATION",
"parameterValue":"34",
"operator":"GREATER_THAN",
"parameterName":""
}
],
"timeData":{
"interval":"",
"context":"",
"repeat":"-1"
},
"type":"SensorCard",
"id":"card_4",
"connectedTo":[
"card_5"
]
},
{
"actionData":{
"userParams":[
{
"name":"ALARM",
"value":"DANGER"
}
],
"type":"updateAttribute",
"name":"updateAttribute"
},
"type":"ActionCard",
"id":"card_9",
"connectedTo":[
"card_10"
]
}
],
"name":"test_1",
"service":"/my_service",
"tenant":"my_tenant"
},
"name":"test_1",
"action":{
"type":"update",
"parameters":{
"name":null,
"value":null
}
},
"service":"/my_service",
"tenant":"my_tenant",
"text":"select *,\"test_1\" as ruleName from pattern [every ev=iotEvent((cast(`type`?, String) != \"room\") AND (cast(cast(`temperature`?, String), float) > 34))]",
"_id":ObjectId("54e1d8b91db9218a32a27575")
}
Effort: 2 man day
url: (POST http://10.95.169.246:9090/rules)
Header: {'Fiware-Service': 'unknownT', 'Content-Type': 'application/json', 'Fiware-ServicePath': u'/', 'Accept': 'application/json'}
Body: {"action": {"type": "<rule_type>", "template": "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- <template_info>", "parameters": null}, "text": "select *,\"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name": "ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj"}
status code: 200
Header: {'content-length': '4987', 'unica-correlator': '9d35eb05-f8aa-48f6-8dc6-3b00a3b53a0f', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Express', 'connection': 'keep-alive', 'date': 'Mon, 02 Feb 2015 09:26:02 GMT', 'content-type': 'application/json; charset=utf-8'}
Body: {"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$unknownt$ partition by tenant from iotEvent(tenant=\"unknownt\" and service=\"/\")","timeLastStateChange":1422868050718,"name":"ctxt$unknownt$","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$unknownt$ select *,\"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422869162518,"name":"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj@unknownt/","state":"STARTED"}},null],{"action":{"type":"<rule_type>","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- <template_info>","parameters":null},"text":"select *,\"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj","service":"/","tenant":"unknownt","_id":"54cf42aa8f1c04dc77caa5ae"},null]}
url: (DELETE http://10.95.169.246:9090/rules/ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqE
FRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRN
UDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZz
Ogj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj)
Header: ({'Fiware-Service': 'unknownT', 'Content-Type': 'application/json', 'Fiware-ServicePath': u'/', 'Accept': 'application/json'})
status code: 200
Header: {'content-length': '2392', 'unica-correlator': 'ae9346a5-969e-4a50-ad28-01b0f06e8d92', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Express', 'connection': 'keep-alive', 'date': 'Mon, 02 Feb 2015 09:26:02 GMT', 'content-type': 'application/json; charset=utf-8'}
Body: {"error":null,"data":[1,[{"code":200,"body":"{\"text\":\"context ctxt$unknownt$ select *,\\\"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj\\\" as ruleName, \\\"/\\\" as service, \\\"unknownT\\\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id?as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\\\"Room\\\")]\",\"timeLastStateChange\":1422869162818,\"name\":\"ZwMCOdUoGsxqKR0VrFeqbDPmz7PUEfl0hH9PDPlb2gje0P1vouScgvAzFTfOYuLacF5T9ZN82hTZQ1tvRzR73N8aXBj9zb7alCqePOpMKGEHFIi5zKGRIGcFpimtVgc2udIsiFoPogKe9cMohQHOpQc3zEbZs5dsGc8pJUAPncmU0FAyTX8u97t0H3xrmS1OfL4zLpU16phzjLdzRoKgn32c69hJTlNbkK9J7h2oM9Wia80mRYiNKN1CwFRYqEFRynrOJ2oxgePFcTaEy20FqqhIdpJrVfMquUdd8Ax41JbUDeXXvORgFBnukTkRUGzrhTy58zDHcCTpHPoCb5lU9M5OlcE97OXS6fyJk9slh6C7Wq7YuInaJRBxepGn7ndRGghP8ejL5lyQlrM3hIaYyZg1Qb7vu7pXcsAurZ720UGICYmr5QJQGdfESwRZcozfbc2pldUrpLi5pFCdO28P2O2cH76o4oIFAY4rOPxFGBOMwudc8KwWtWybhxAKe9oa5U21wuD3fjgGX6zfwu21E7aFdopztkPxyyP8mIzaRNUDjB2rY6CzRiy8PqD82QL0if0l2HjDFnxjkmAXt4UE9lIP7TlR0ZmPijA1mZ43052v37WSjJ0X0fsLy573zMpixrqy7DfeCmyCWjmjk9MrViHfSFdNg5tfTQPzeVbXoK8mdg4odZKcPGV2tKoYzCxKw6PjPtXrcVx789z4LRtLYG5TX1c3Q8a33PYxARkEYJj6uYd5c9aF6azWDTLMB0FjZjouO8NYbLiVp2V3iuwLj4TpQhoUb4DPMqxaNKkp7b7nPrWhPuY3e4Og20c2aHCSzMZcrZGlltqKXKH6adOeZzOgj69C7QkBP2OX8iMAzTE2li0bXEIV5HFxwYpzQcy7N1ASilYppiWkF9wEc8JUJlk8PiSF3S8GC9FvNWkf3Kcmjz3FTNFzDmB9FQSQYxx9kivmOT1YOKna78DCZvgpiH0jVEmj@unknownt/\",\"state\":\"DESTROYED\"}\n"},null],null]}
url: (POST http://10.95.169.246:9090/rules)
Header: {'Fiware-Service': 'unknownT', 'Content-Type': 'application/json', 'Fiware-ServicePath': u'/', 'Accept': 'application/json'}
Body: {"action": {"type": "<rule_type>", "template": "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- <template_info>", "parameters": null}, "text": "select *,\"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name": "VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B"}
status code: 200
Header: {'content-length': '4991', 'unica-correlator': '9f512ee0-c51c-414e-a317-50b40b0da43a', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Express', 'connection': 'keep-alive', 'date': 'Mon, 02 Feb 2015 09:34:08 GMT', 'content-type': 'application/json; charset=utf-8'}
Body: {"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$unknownt$ partition by tenant from iotEvent(tenant=\"unknownt\" and service=\"/\")","timeLastStateChange":1422868050718,"name":"ctxt$unknownt$","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$unknownt$ select *,\"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422869648018,"name":"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B@unknownt/","state":"STARTED"}},null],{"action":{"type":"<rule_type>","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- <template_info>","parameters":null},"text":"select *,\"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B","service":"/","tenant":"unknownt","_id":"54cf44908f1c04dc77caa5af"},null]}
url: (DELETE http://10.95.169.246:9090/rules/VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B
Header: {'Fiware-Service': 'unknownT', 'Content-Type': 'application/json', 'Fiware-ServicePath': u'/', 'Accept': 'application/json'}
Body: ()
status code: 200
Header: {'content-length': '2394', 'unica-correlator': 'c31c1592-df6c-423e-915f-5fa369e8fd40', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Express', 'connection': 'keep-alive', 'date': 'Mon, 02 Feb 2015 09:34:08 GMT', 'content-type': 'application/json; charset=utf-8'}
Body: {"error":null,"data":[0,[{"code":200,"body":"{\"text\":\"context ctxt$unknownt$ select *,\\\"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B\\\" as ruleName, \\\"/\\\" as service, \\\"unknownT\\\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id?as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\\\"Room\\\")]\",\"timeLastStateChange\":1422869648318,\"name\":\"VYMy9KxuXGPLsWzmwx28LFT3JLkXtoSB9O7qTkNmd8W1AuWu3ifdiqT8RnNTQ798vBoPjHg7zRyLbJdZW36A7wkyNj19gGeS7EhoBJUakdw4lCi9sfhlc6PXtb65omc1EuJlRLuxLaZKBbxnRMygp2qvZHHNG3KnhqPQ9UOQW5Gzoy54Lhoc2cRM4PcfF2pVpC9ckmeR1hIrxsg54j4NlKa3pqfxOzOPFJl2rhWwkxA090a5Cb5fUeTExlWUslyXUeRujDElVhAcMfAWnW42Fa08dyra66UXjDG7JpCWcgKpDUcykLu0mXOLtcXYv6AFeN8kuqJskJC7npU78Dt2cxlXChlZDkNnHZgBLFus5c1yRN82RcoVthHfAtVqZ8LTWgRLz3UIpxmYVMIiLuTM5t3xNpZB2W2X9EJtPamnE0l7KL9MYnAAsXan82HLNNCkrTlF6XpMpDxCMaHYofXiTcUdFU2udChWG87ij3Rl3PxbRHfj4HVzjGCjlv7DFXKx5wW6PXyP27yCR8heCib2RTwOWPQyG4GgxE0dJ4NHeMue3nYIW2dh1DQU2j9QzR5uFtD6LWeAgwMcLggu49N25ErEQi0NlGzosVSmYdBU7LZpIr65Cgmty52spNVs6kl8ZiUr41FqGW2WMLuN5EltMoD9HmQaElwLxz0mmzDYDu2tc3fZZOEAESdvmqqFQBVsVDOZYAPHjvo1tW0Im7ZLQwRy39I4LODshIoIVAaUs9Wl0IcXL8U549tm4kWN7lkJ0hMfH0TCmfqSfhI1Fq3i7a0qO3yDDHB3rH7QR6Di5tWKeoT5B0g1WfVporWAmXahk8UyC01hDNxE0hH0vKjsOVaunHqt1Y3RDA03x3HuyJFTRwucteE5FMw4zEp74negGch4TGkyjFLD9VpCoI7o7tVMC94TxvdPRevVOz6UOOa59AMf1jPcjWOc7Z7w403qtXsjOByAukgvNBlEs5KA8N2bVc61B@unknownt/\",\"state\":\"DESTROYED\"}\n"},null],null]}
Append a doc a case with json template to POST action, example:
{"action": {"type": "post", "parameters": {"URL": "http://qa-orion-cep-01:9998/send/post"}, "template": "{\"message\": \"Element ${Meter} has value <<<${attrName_0_var}>>> \\n -- (post rule)\"}"}, "text": "select *,\"post___name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.at
trName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]", "name": "post___name"}
Further, use only JSON format.
Effort: 1 man day
fermin added a note some time days ago
Si Fiware-Service y Fiware-ServicePath son cabeceras siempre comunes, Âżigual tiene sentido incluirlas como variables en config.env y usar esas variables? Salvo que lo hayas hecho asĂ por tener flexibilidad en que cada test use las suyas (en cuyo caso igual serĂa mejor tenerlas paremetrizadas).
O igual una combinaciĂłn de ambas:
Se usan unos parĂĄmetros del scripts para coger Fiware-Service y Fiware-ServicePath (pe $1 y $2)
Si no se usan parĂĄmetros (pe. $1, $2), entonces se toman unos de defectos cogidos de config.env
Effort: 1 man day
cases allowed: "/", "/garden", "/garden2", "/garden2_a3" and the "/" is obligatory
wrong cases but allowed and rules are created:
response
HttpCode received: 200
{"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$tenanttest partition by tenant from iotEvent(tenant=\"tenant\" and service=\"test\")","timeLastStateChange":1422460038109,"name":"ctxt$tenanttest","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$tenanttest select *,\"name_test\" as ruleName, \"test\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422460038109,"name":"name_test@tenanttest","state":"STARTED"}},null],{"action":{"type":"sms","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)","parameters":{"to":"123456789"}},"text":"select *,\"name_test\" as ruleName, \"test\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"name_test","service":"test","tenant":"tenant","_id":"54c904863a7608293a945f6a"},null]}
mongo
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"name_test\" as ruleName, \"test\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "name_test", "service" : "test", "tenant" : "tenant", "_id" : ObjectId("54c904863a7608293a945f6a") }
response
HttpCode received: 200
{"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$tenanttest45 partition by tenant from iotEvent(tenant=\"tenant\" and service=\"test45\")","timeLastStateChange":1422460038609,"name":"ctxt$tenanttest45","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$tenanttest45 select *,\"name_test\" as ruleName, \"test45\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422460038609,"name":"name_test@tenanttest45","state":"STARTED"}},null],{"action":{"type":"sms","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)","parameters":{"to":"123456789"}},"text":"select *,\"name_test\" as ruleName, \"test45\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"name_test","service":"test45","tenant":"tenant","_id":"54c904863a7608293a945f6b"},null]}
mongo
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"name_test\" as ruleName, \"test45\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "name_test", "service" : "test45", "tenant" : "tenant", "_id" : ObjectId("54c904863a7608293a945f6b") }
response
HttpCode received: 200
{"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$tenanttest45_5 partition by tenant from iotEvent(tenant=\"tenant\" and service=\"test45_5\")","timeLastStateChange":1422460039209,"name":"ctxt$tenanttest45_5","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$tenanttest45_5 select *,\"name_test\" as ruleName, \"test45_5\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422460039209,"name":"name_test@tenanttest45_5","state":"STARTED"}},null],{"action":{"type":"sms","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)","parameters":{"to":"123456789"}},"text":"select *,\"name_test\" as ruleName, \"test45_5\" as service, \"tenant\" as tenant, *, ev.attrName_0? asattrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"name_test","service":"test45_5","tenant":"tenant","_id":"54c904873a7608293a945f6c"},null]}
mongo
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"name_test\" as ruleName, \"test45_5\" as service, \"tenant\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "name_test", "service" : "test45_5", "tenant" : "tenant", "_id" : ObjectId("54c904873a7608293a945f6c") }
Example:
empty
"/"
Avoid requirement about having a working SMTP server for testing
Effort 1 man day
Extract anonymous functions and add JSDOC for them
Effort: 3 man day
Add doc for data model
Effort: 1 man day
Functionality has grown, group it in objects : Rule, ...
Effort: 5 man day
Change references in code from tent/service to new names for avoiding confusion with specification and doc
Effort: 1 man day
At the moment, the rule name accept all characteres.
ex:
|empty
|test
|test_
|test_34
|test-34
|test 34
|test(34)
|test=34
|test&34
|test#34
|test.34
|testâŹ34
|test/34
|test\34
|rulename length 1024
Case NÂş1 ( test/34 )
response
HttpCode received: 200
{"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$test$34$ partition by tenant from iotEvent(tenant=\"test/34\" and service=\"/\")","timeLastStateChange":1422457220609,"name":"ctxt$test$34$","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$test$34$ select *,\"name_test\" as ruleName, \"/\" as service, \"test/34\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422457220609,"name":"name_test@test/34/","state":"STARTED"}},null],{"action":{"type":"sms","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)","parameters":{"to":"123456789"}},"text":"select *,\"name_test\" as ruleName, \"/\" as service, \"test/34\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"name_test","service":"/","tenant":"test/34","_id":"54c8f9843a7608293a945f60"},null]}
Mongo
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"name_test\" as ruleName, \"/\" as service, \"test/34\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "name_test", "service" : "/", "tenant" : "test/34", "_id" : ObjectId("54c8f9843a7608293a945f60") }
response
HttpCode received: 200
{"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu$ partition by tenant from iotEvent(tenant=\"py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu\" and service=\"/\")","timeLastStateChange":1422457221409,"name":"ctxt$py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu$","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu$ select *,\"name_test\" as ruleName, \"/\" as service, \"pY7Nwj9KVdnb6b4c7w0ihgqYSG0NE4RlPYhpdVADz8KA05uUWuu\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","timeLastStateChange":1422457221409,"name":"name_test@py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu/","state":"STARTED"}},null],{"action":{"type":"sms","template":"Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)","parameters":{"to":"123456789"}},"text":"select *,\"name_test\" as ruleName, \"/\" as service, \"pY7Nwj9KVdnb6b4c7w0ihgqYSG0NE4RlPYhpdVADz8KA05uUWuu\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]","name":"name_test","service":"/","tenant":"py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu","_id":"54c8f9853a7608293a945f61"},null]}
mongo
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"name_test\" as ruleName, \"/\" as service, \"pY7Nwj9KVdnb6b4c7w0ihgqYSG0NE4RlPYhpdVADz8KA05uUWuu\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "name_test", "service" : "/", "tenant" : "py7nwj9kvdnb6b4c7w0ihgqysg0ne4rlpyhpdvadz8ka05uuwuu", "_id" : ObjectId("54c8f9853a7608293a945f61") }
rule names:
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "", "service" : "/", "tenant" : "unknownt", "_id" : ObjectId("54c9f9c93a7608293a945fb1") }
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"test/34\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "test/34", "service" : "/", "tenant" : "unknownt", "_id" : ObjectId("54c9f9ca3a7608293a945fb2") }
{ "action" : { "type" : "sms", "template" : "Element ${Meter} has value <<<${attrName_0_var}>>> \n -- (SMS rule)", "parameters" : { "to" : "123456789" } }, "text" : "select *,\"E35IiN7MSkbq3fXPo4GWQpkY2hH59A1fn0isn3TDEE8ZLH2c8QjOOZSfrkh5m8emgeSBWywN9qAnNl9XIwdWVOcNEiW4sghyGjRY2QQU2HuJQVokLutywPVH6JgoRTWzpd8SytvQISCmPAX7TVI3JZrRIvP2HuxaBRYPUybu3Jn4l1UhkWvtpfAGEIncGl4VxWa7juo2YuBaObDYKP6tLiNPJHwtuid9LA7gdBStDU8tB4qlhrS23o45Kt3Ln59saOvcazFmZdx4vlfHGnOZztFIkxPTTGv9vkcNPcpwbBEXbPHoeMbpyhKePeRomynugq1U7FENvv2g6Hr9F1B6tWVpIMDXpgL6jBMlGe3Nnjo0tckuOVhHgljFeIDQe7hBbh2cV2nMT9QAxc8iS08tbQmrUYNwVCOK0x4Y6IVDiBSQ7asQ8dRVyesIpMHpgHfs47elbpA5KnPj9yy4IDoyVm1skpnFMUHnWdYlwNsGtMBbbDMUghquCgoU7RU3jmPCkCOQ4FPwqTYwavcVzgbZIF9H2uPG7RteSePdkm76HYMEbl4v86K7usZKV4auXTgBRsYKueBQR1gUwx8V1tmmo7Tr7GDihOBFV23kVcuRv7MWzwxxLtVpakqEictEexZ7B8W3RCW8JSgOuMkvOjVL1tBMvGyLhiGVxNjzxLDKmSYfLpR5qgJTaE1HbYD1Xrq3xVPfQzV88qV9JeVyz7ab2y70uI8cOeUK4L7qe0fwpTreaEZ4Fzgl8PCDDhxxVs6cOjPqTi7ottVMxd8LilY4xbDeNNsnFlfFMUxYGvtMpc3dpWDN5YTuB7bQYqsep9vb8IlrqfjxWJOVqambf8Qrqkt0stPE24odSSgvz79cMjkzWfYRBDw24D3eJjK6qk9v4eJ8N0MBZwZU8TeztXLPP2PW2vEwyG0kUJkdwxqblKtpCig9Mtn5tdMJxtq093kz5g9MeQNEGBpuJ9NZvo6CXVjl7DLE9DIszhIwZMGRo\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"Room\")]", "name" : "E35IiN7MSkbq3fXPo4GWQpkY2hH59A1fn0isn3TDEE8ZLH2c8QjOOZSfrkh5m8emgeSBWywN9qAnNl9XIwdWVOcNEiW4sghyGjRY2QQU2HuJQVokLutywPVH6JgoRTWzpd8SytvQISCmPAX7TVI3JZrRIvP2HuxaBRYPUybu3Jn4l1UhkWvtpfAGEIncGl4VxWa7juo2YuBaObDYKP6tLiNPJHwtuid9LA7gdBStDU8tB4qlhrS23o45Kt3Ln59saOvcazFmZdx4vlfHGnOZztFIkxPTTGv9vkcNPcpwbBEXbPHoeMbpyhKePeRomynugq1U7FENvv2g6Hr9F1B6tWVpIMDXpgL6jBMlGe3Nnjo0tckuOVhHgljFeIDQe7hBbh2cV2nMT9QAxc8iS08tbQmrUYNwVCOK0x4Y6IVDiBSQ7asQ8dRVyesIpMHpgHfs47elbpA5KnPj9yy4IDoyVm1skpnFMUHnWdYlwNsGtMBbbDMUghquCgoU7RU3jmPCkCOQ4FPwqTYwavcVzgbZIF9H2uPG7RteSePdkm76HYMEbl4v86K7usZKV4auXTgBRsYKueBQR1gUwx8V1tmmo7Tr7GDihOBFV23kVcuRv7MWzwxxLtVpakqEictEexZ7B8W3RCW8JSgOuMkvOjVL1tBMvGyLhiGVxNjzxLDKmSYfLpR5qgJTaE1HbYD1Xrq3xVPfQzV88qV9JeVyz7ab2y70uI8cOeUK4L7qe0fwpTreaEZ4Fzgl8PCDDhxxVs6cOjPqTi7ottVMxd8LilY4xbDeNNsnFlfFMUxYGvtMpc3dpWDN5YTuB7bQYqsep9vb8IlrqfjxWJOVqambf8Qrqkt0stPE24odSSgvz79cMjkzWfYRBDw24D3eJjK6qk9v4eJ8N0MBZwZU8TeztXLPP2PW2vEwyG0kUJkdwxqblKtpCig9Mtn5tdMJxtq093kz5g9MeQNEGBpuJ9NZvo6CXVjl7DLE9DIszhIwZMGRo", "service" : "/", "tenant" : "unknownt", "_id" : ObjectId("54ca07b83a7608293a945fb7") }
This case is only against the develop branch, in the release/0.4.1 branch works perfectly.
url: POST http://<ip>:<port>/m2m/vrules
Header: {'Fiware-Service': 'unknownt', 'Content-Type': 'application/json', 'Fiware-ServicePath': '/', 'Accept': 'application/json', 'X-Auth-Token': 'tokenValue'}
Body: {"active": 1, "cards": [{"sensorData": {"dataType": "Quantity", "measureName": "temperature_0"}, "configData": {}, "sensorCardType": "valueThreshold", "conditionList": [{"Not": false, "scope": "OBSERVATION", "parameterValue": "34", "operator": "GREATER_THAN", "parameterName": ""}], "timeData": {"interval": "", "context": "", "repeat": "-1"}, "type": "SensorCard", "id": "card_4", "connectedTo": ["card_5"]}, {"actionData": {"userParams": [{"name": "mail.from", "value": "[email protected]"}, {"name": "mail.to", "value": "[email protected]"}, {"name": "mail.subject", "value": "IoT message"},{"name": "mail.message", "value": "${temperature_0} -- (Email rule)"}], "type": "SendEmailAction", "name": "SendEmailAction"}, "type": "ActionCard", "id": "card_5", "connectedTo": ["card_8"]}], "name": "test_200000000001"}
url: POST http://<ip>:<port>/notices
Header: {'Fiware-Service': 'unknownt', 'Content-Type': 'application/json', 'Fiware-ServicePath': '/', 'Accept': 'application/json', 'User-Agent': 'orion/0.10.0'}
Body: {"originator": "localhost", "subscriptionId": "51c0ac9ed714fb3b37d7d5a8", "contextResponses": [{"contextElement": {"attributes": [{"type": "celcius", "name": "temperature_0", "value": "300", "metadatas": [{"type": "type_NjMJ", "name": "name_jlAq", "value": "Ba15"}]}], "type": "Room", "id": "room2", "isPattern": "false"}, "statusCode": {"code": "200", "reasonPhrase": "OK"}}]}
{ "VR" : { "active" : 1, "cards" : [ { "sensorData" : { "dataType" : "Quantity", "measureName" : "temperature_0" }, "configData" : { }, "sensorCardType" : "valueThreshold", "conditionList" : [ { "Not" : false, "scope" : "OBSERVATION", "parameterValue" : "34", "operator" : "GREATER_THAN", "parameterName" : "" } ], "timeData" : { "interval" : "", "context" : "", "repeat" : "-1" }, "type" : "SensorCard", "id" : "card_4", "connectedTo" : [ "card_5" ] }, { "actionData" : { "userParams" : [ { "name" : "mail.from", "value" : "[email protected]" }, { "name" : "mail.to", "value" : "[email protected]" }, { "name" : "mail.subject", "value" : "IoT message" }, { "name" : "mail.message", "value" : "${temperature_0} -- (Email rule)" } ], "type" : "SendEmailAction", "name" : "SendEmailAction" }, "type" : "ActionCard", "id" : "card_5", "connectedTo" : [ "card_8" ] } ], "name" : "test_200000000001", "service" : "/", "tenant" : "unknownt" }, "name" : "test_200000000001", "action" : { "type" : "email", "template" : "${ev__temperature_0} -- (Email rule)", "parameters" : { "to" : "[email protected]", "from" : "[email protected]", "subject" : "IoT message" } }, "service" : "/", "tenant" : "unknownt", "text" : "select *,\"test_200000000001\" as ruleName from pattern [every ev=iotEvent((cast(cast(`temperature_0`?, String), float) > 34))]", "_id" : ObjectId("54eef0e359a836af03eecbc9") }
Body: {"smtp_peer": ["127.0.0.1", 44741], "smtp_mailfrom": "[email protected]", "smtp_rcpttos": ["[email protected]"], "smtp_counter": 11, "smtp_data": "Content-Type: text/plain\nFrom: [email protected]\nTo: [email protected]\nSubject: IoT message\nX-Mailer: nodemailer (1.3.0; +http://www.nodemailer.com;\n SMTP/0.1.13[client:1.1.0])\nContent-Transfer-Encoding: 7bit\nDate: Thu, 26 Feb 2015 10:09:39 +0000\nMessage-Id: <[email protected]>\nMIME-Version: 1.0\n\n[?] -- (Email rule)"}
The dock says:
email action
Sends an email to the recipient set in the action parameters, with the body mail build from the template field. A field to in parameters sets the recipient and a field fromsets the sender's email address.
"action": {
"type": "email",
"template": "Meter ${Meter} has pression ${Pression} (GEN RULE)",
"parameters": {
"to": "[email protected]",
"from": "[email protected]"
}
}
Use setInterval again when refreshing core, but do not make consecutive refresh if mongo takes a long time to respond
Effort: 2 man day
How long. Per query or connection. Analyze pool behavior. Implication with HA and alarms
Effort: 4 man day
Test with a meaningful data set
Effort: 4 man day
Check if ${} expressions are "valid"
Agreed with portal, they also check:
// RegExp:
// - Alphanumeric
// - Must start with a letter
// - Allow: . (dot) _ (underscore)
// - Not allow: __ (two underscores consecutively) - (hypens)
Effort: 2 man day
We start to using "perseo-fe" as repo name at publishing time. However, internally single "perseo" is still being use.
We should change all the tokens in order to use "perseo-fe" in the proper places. For example, the RPM name, the perseo-fe.log file, etc.
Effort: 1 man day
time=2015-01-28T14:11:22.897Z | lvl=ERROR | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=TypeError: Cannot read property '0' of undefined
------------------------------ Request ----------------------------------------------
url: (POST http://10.95.169.246:9090/rules)
Header: {'Fiware-Service': 'unknownT', 'Content-Type': 'application/json', 'Fiware-ServicePath': u'/', 'Accept': 'application/json'}
Body: {"action": {"type": "update", "parameters": {"type": "message", "name": "ALARM", "value": "warning"}}, "text": "select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]", "name": "update_name"}
---------------------------------- Response ----------------------------------------------
status code: 200
Header: {'content-length': '1035', 'unica-correlator': '0f2a2db6-c776-4a5e-970d-c6f70c76d746', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Express', 'connection': 'keep-alive', 'date': 'Wed, 28 Jan 2015 14:14:55 GMT', 'content-type': 'application/json; charset=utf-8'}
Body: {"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$unknownt$ partition by tenant from iotEvent(tenant=\"unknownt\" and service=\"/\")","timeLastStateChange":1422454282609,"name":"ctxt$unknownt$","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$unknownt$ select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","timeLastStateChange":1422454282609,"name":"update_name@unknownt/","state":"STARTED"}},null],{"action":{"type":"update","parameters":{"type":"message","name":"ALARM","value":"warning"}},"text":"select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","name":"update_name","service":"/","tenant":"unknownt","_id":"54c8eedf3a7608293a945da1"},null]}
------------------------------ Request ----------------------------------------------
url: (POST http://10.95.169.246:9090/notices)
Header: ({'Fiware-Service': 'unknownT', 'Content-Type': 'application/json', 'Fiware-ServicePath': u'/', 'Accept': 'application/json', 'User-Agent': 'orion/0.10.0'})
Body: {"originator": "localhost", "subscriptionId": "51c0ac9ed714fb3b37d7d5a8", "contextResponses": [{"contextElement": {"attributes": [{"type": "celcius", "name": "attrName_0", "value": "300", "metadatas": [{"type": "type_EHo0", "name": "name_LufR", "value": "jxdF"}]}], "type": "room", "id": "room2", "isPattern": "false"}, "statusCode": {"code": "200", "reasonPhrase": "OK"}}]})
---------------------------------- Response ----------------------------------------------
status code: 200
Header: {'content-length': '34', 'unica-correlator': '87de3f8d-5c59-4b79-8ca8-dc4212425b98', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Express', 'connection': 'keep-alive', 'date': 'Wed, 28 Jan 2015 14:14:55 GMT', 'content-type': 'application/json; charset=utf-8'}
Body: ({"error":null,"data":{"code":200}})
------------------------------ Request ----------------------------------------------
url: (GET http://qa-orion-cep-01:9998/get/update)
---------------------------------- Response ----------------------------------------------
status code: 200
Header: {'date': 'Wed, 28 Jan 2015 14:15:01 GMT', 'content-length': '51', 'content-type': 'application/json', 'server': 'BaseHTTP/0.3 Python/2.6.6'}
Body: {"message": "Update context has not been sent yet"}
time=2015-01-28T14:11:22.612Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=incoming request {"method":"POST","url":"/rules","headers":{"host":"10.95.169.246:9090","content-length":"362","accept-encoding":"gzip, deflate","fiware-service":"unknownT","fiware-servicepath":"/","accept":"application/json","user-agent":"python-requests/2.4.3 CPython/2.7.6 Windows/7","connection":"keep-alive","content-type":"application/json"},"body":{"action":{"type":"update","parameters":{"type":"message","name":"ALARM","value":"warning"}},"text":"select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","name":"update_name"}}
time=2015-01-28T14:11:22.620Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=making post to http://localhost:8080/perseo-core/rules
time=2015-01-28T14:11:22.635Z | lvl=DEBUG | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=post to http://localhost:8080/perseo-core/rules returns {"code":200,"body":{"text":"create context ctxt$unknownt$ partition by tenant from iotEvent(tenant=\"unknownt\" and service=\"/\")","timeLastStateChange":1422454282609,"name":"ctxt$unknownt$","state":"STARTED"}}
time=2015-01-28T14:11:22.636Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=done post to http://localhost:8080/perseo-core/rules
time=2015-01-28T14:11:22.636Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=making post to http://localhost:8080/perseo-core/rules
time=2015-01-28T14:11:22.649Z | lvl=DEBUG | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=post to http://localhost:8080/perseo-core/rules returns {"code":200,"body":{"text":"context ctxt$unknownt$ select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","timeLastStateChange":1422454282609,"name":"update_name@unknownt/","state":"STARTED"}}
time=2015-01-28T14:11:22.651Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=done post to http://localhost:8080/perseo-core/rules
time=2015-01-28T14:11:22.652Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=making post to http://demo-dca-be-01:8080/perseo-core/rules
time=2015-01-28T14:11:22.687Z | lvl=DEBUG | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=post to http://demo-dca-be-01:8080/perseo-core/rules returns {"code":200,"body":{"text":"create context ctxt$unknownt$ partition by tenant from iotEvent(tenant=\"unknownt\" and service=\"/\")","timeLastStateChange":1422454282649,"name":"ctxt$unknownt$","state":"STARTED"}}
time=2015-01-28T14:11:22.687Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=done post to http://demo-dca-be-01:8080/perseo-core/rules
time=2015-01-28T14:11:22.687Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=making post to http://demo-dca-be-01:8080/perseo-core/rules
time=2015-01-28T14:11:22.724Z | lvl=DEBUG | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=post to http://demo-dca-be-01:8080/perseo-core/rules returns {"code":200,"body":{"text":"context ctxt$unknownt$ select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","timeLastStateChange":1422454282649,"name":"update_name@unknownt/","state":"STARTED"}}
time=2015-01-28T14:11:22.725Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=done post to http://demo-dca-be-01:8080/perseo-core/rules
time=2015-01-28T14:11:22.731Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=rulesStore.Save "{\"action\":{\"type\":\"update\",\"parameters\":{\"type\":\"message\",\"name\":\"ALARM\",\"value\":\"warning\"}},\"text\":\"select *,\\\"update_name\\\" [...]"
time=2015-01-28T14:11:22.732Z | lvl=INFO | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=sending response: 200 {"error":null,"data":[false,[{"code":200,"body":{"text":"create context ctxt$unknownt$ partition by tenant from iotEvent(tenant=\"unknownt\" and service=\"/\")","timeLastStateChange":1422454282609,"name":"ctxt$unknownt$","state":"STARTED"}},{"code":200,"body":{"text":"context ctxt$unknownt$ select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","timeLastStateChange":1422454282609,"name":"update_name@unknownt/","state":"STARTED"}},null],{"action":{"type":"update","parameters":{"type":"message","name":"ALARM","value":"warning"}},"text":"select *,\"update_name\" as ruleName, \"/\" as service, \"unknownT\" as tenant, *, ev.attrName_0? as attrName_0_var, ev.id? as Meter from pattern [every ev=iotEvent(cast(cast(attrName_0?,String),float)>1.5 and type=\"room\")]","name":"update_name","service":"/","tenant":"unknownt","_id":"54c8ee0a3a7608293a945da0"},null]}
time=2015-01-28T14:11:22.735Z | lvl=DEBUG | corr=367b2409-cb6a-4665-9c04-25abe1fd1f5c | trans=367b2409-cb6a-4665-9c04-25abe1fd1f5c | op=/rules | msg=response-time: 123 statusCode: 200
time=2015-01-28T14:11:22.844Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=incoming request {"method":"POST","url":"/notices","headers":{"host":"10.95.169.246:9090","content-length":"374","accept-encoding":"gzip, deflate","fiware-service":"unknownT","fiware-servicepath":"/","accept":"application/json","user-agent":"orion/0.10.0","connection":"keep-alive","content-type":"application/json"},"body":{"originator":"localhost","subscriptionId":"51c0ac9ed714fb3b37d7d5a8","contextResponses":[{"contextElement":{"attributes":[{"type":"celcius","name":"attrName_0","value":"300","metadatas":[{"type":"type_Kwqq","name":"name_oEox","value":"ps5e"}]}],"type":"room","id":"room2","isPattern":"false"},"statusCode":{"code":"200","reasonPhrase":"OK"}}]}}
time=2015-01-28T14:11:22.845Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=making post to http://localhost:8080/perseo-core/events
time=2015-01-28T14:11:22.848Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=making post to http://demo-dca-be-01:8080/perseo-core/events
time=2015-01-28T14:11:22.865Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=incoming request {"method":"POST","url":"/actions/do","headers":{"content-type":"application/json; charset=utf-8","unica-correlator":"c62333c5-476d-4d57-8f30-e21148cbf714","cache-control":"no-cache","pragma":"no-cache","user-agent":"Java/1.7.0_67","host":"127.0.0.1:9090","accept":"text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2","connection":"keep-alive","content-length":"285"},"body":{"Meter":"room2","ev":{"attrName_0__type":"celcius","id":"room2","noticeId":"89e310d0-a6f7-11e4-a8ba-07c85e3a4cb6","tenant":"unknownt","service":"/","attrName_0":"300","type":"room","isPattern":"false"},"attrName_0_var":"300","tenant":"unknownT","ruleName":"update_name","service":"/"}}
time=2015-01-28T14:11:22.866Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=missing service header
time=2015-01-28T14:11:22.866Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=missing tenant header
time=2015-01-28T14:11:22.870Z | lvl=DEBUG | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=response-time: 5 statusCode: 200
time=2015-01-28T14:11:22.871Z | lvl=DEBUG | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=tenant unknownt, service /, event {"Meter":"room2","ev__attrName_0__type":"celcius","ev__id":"room2","ev__noticeId":"89e310d0-a6f7-11e4-a8ba-07c85e3a4cb6","ev__tenant":"unknownt","ev__service":"/","ev__attrName_0":"300","ev__type":"room","ev__isPattern":"false","attrName_0_var":"300","tenant":"unknownt","ruleName":"update_name","service":"/","id":"room2"}
time=2015-01-28T14:11:22.876Z | lvl=DEBUG | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=post to http://localhost:8080/perseo-core/events returns {"code":200}
time=2015-01-28T14:11:22.878Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=done post to http://localhost:8080/perseo-core/events
time=2015-01-28T14:11:22.878Z | lvl=INFO | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=sending response: 200 {"error":null,"data":{"code":200}}
time=2015-01-28T14:11:22.881Z | lvl=DEBUG | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=c62333c5-476d-4d57-8f30-e21148cbf714 | op=/notices | msg=response-time: 37 statusCode: 200
time=2015-01-28T14:11:22.897Z | lvl=ERROR | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=TypeError: Cannot read property '0' of undefined
time=2015-01-28T14:11:22.897Z | lvl=DEBUG | corr=c62333c5-476d-4d57-8f30-e21148cbf714 | trans=cf85f9d0-92aa-401a-b3e0-bfaa1621fc9c | op=/actions/do | msg=response-time: 32
time=2015-01-28T14:11:22.935Z | lvl=DEBUG | corr=n/a | trans=n/a | op=n/a | msg=post to http://demo-dca-be-01:8080/perseo-core/events returns {"code":200}
time=2015-01-28T14:11:22.935Z | lvl=INFO | corr=n/a | trans=n/a | op=n/a | msg=done post to http://demo-dca-be-01:8080/perseo-core/events
Current Perseo FE assumes that the template
on a HTTP Post action is always a string:
"action": {
"type": "post",
"template": "Meter ${Meter} has pression ${Pression}.",
"parameters": {
"url": "localhost:1111"
}
}
However, it could be interesting to generize and allow also template
as JSON list and JSON object. The variable expansion for ${...}
should be done in any subelement of this JSON.
The release script should check there are no staged changes that can cause errors
If the Notices next core paremeter is not configure in the config.js file an exception is raised:
time=2015-04-13T08:39:15.494Z | lvl=DEBUG | corr=3adad676-a17d-46a9-817d-de076623e75a | trans=3adad676-a17d-46a9-817d-de076623e75a | op=/notices | msg=response-time: 13 statusCode: 500
TypeError: Cannot read property 'noticesURL' of undefined
at Object.DoNotice [as Do] (/perseo-fe/lib/models/notices.js:90:24)
at PostNotice (/perseo-fe/lib/routes/noticesController.js:35:13)
at Layer.handle [as handle_request] (/perseo-fe/node_modules/express/lib/router/layer.js:82:5)
at next (/perseo-fe/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/perseo-fe/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/perseo-fe/node_modules/express/lib/router/layer.js:82:5)
at /perseo-fe/node_modules/express/lib/router/index.js:235:24
at Function.proto.process_params (/perseo-fe/node_modules/express/lib/router/index.js:313:12)
at /perseo-fe/node_modules/express/lib/router/index.js:229:12
at Function.match_layer (/perseo-fe/node_modules/express/lib/router/index.js:296:3)
time=2015-04-13T08:39:15.516Z | lvl=DEBUG | corr=n/a | trans=n/a | op=n/a | msg=post to http://localhost:8080/perseo-core/events returns {"code":200}
time=2015-04-13T08:39:15.518Z | lvl=INFO | corr=n/a | trans=n/a | op=n/a | msg=done post to http://localhost:8080/perseo-core/events
time=2015-04-13T08:39:15.520Z | lvl=INFO | corr=n/a | trans=n/a | op=n/a | msg=sending response: 200 {"error":null,"data":{"code":200}}
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
at ServerResponse.header (/perseo-fe/node_modules/express/lib/response.js:666:10)
at ServerResponse.send (/perseo-fe/node_modules/express/lib/response.js:146:12)
at ServerResponse.jsonp (/perseo-fe/node_modules/express/lib/response.js:303:15)
at Object.respond (/perseo-fe/lib/myutils.js:115:10)
at /perseo-fe/lib/routes/noticesController.js:36:17
at Request.cbRequest2core [as _callback] (/perseo-fe/lib/myutils.js:95:16)
at Request.self.callback (/perseo-fe/node_modules/request/request.js:373:22)
at Request.emit (events.js:98:17)
at Request.<anonymous> (/perseo-fe/node_modules/request/request.js:1318:14)
We should test notifications coming from CB (and from GW) are able to fire rules from Visual Rules front-end. Check all the necessary data is present, especially UserProps
Effort: 4 man day
Add check in visual rules for unknown operators , returning an specific error
Effort: 2 man day
log message:
fs.js:539
return binding.write(fd, buffer, offset, length, position);
^
Error: ENOSPC, no space left on device
at Object.fs.writeSync (fs.js:539:18)
at SyncWriteStream.write (fs.js:1751:6)
at logWrap (/opt/perseo/node_modules/fiware-node-logger/lib/fiware-node-logger.js:150:14)
at process.<anonymous> (/opt/perseo/bin/perseo:10:12)
at process.emit (events.js:95:17)
at process._fatalException (node.js:272:26)
df -h
/dev/mapper/vg0-lv_var_log 504M 469M 11M 98% /var/log
@iariasleon issue:
When create a epl rule (POST /rules), we recommend validate these headers
Info in Context Broker:
https://forge.fi-ware.org/plugins/mediawiki/wiki/fiware/index.php/Publish/Subscribe_Broker_-_Orion_Context_Broker_-_User_and_Programmers_Guide#Multi_service_tenancy
https://forge.fi-ware.org/plugins/mediawiki/wiki/fiware/index.php/Publish/Subscribe_Broker_-_Orion_Context_Broker_-_User_and_Programmers_Guide#Entity_service_paths
Effort: 2 man day
Extract constants for checking interval, report interval, etc to a 'constants' file
Effort: 1 man day
A declarative, efficient, and flexible JavaScript library for building user interfaces.
đ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. đđđ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google â¤ď¸ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.