API Docs - v1.0.9¶
Env¶
getEnvironmentProperty (Function)¶
This function returns Java environment property corresponding to the key provided
Syntax
<STRING> env:getEnvironmentProperty(<STRING> key, <STRING> default.value)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
key | This specifies Key of the property to be read. | STRING | No | No | |
default.value | This specifies the default Value to be returned if the property value is not available. | null | STRING | Yes | No |
Examples EXAMPLE 1
define stream keyStream (key string); from keyStream env:getEnvironmentProperty(key) as FunctionOutput insert into outputStream;
This query returns Java environment property corresponding to the key from keyStream as FunctionOutput to the outputStream
getOriginIPFromXForwarded (Function)¶
This function returns the public origin IP from the given X-Forwarded header
Syntax
<STRING> env:getOriginIPFromXForwarded(<STRING> xforwardedheader)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
xforwardedheader | X-Forwarded-For header of the request | STRING | No | No |
Examples EXAMPLE 1
define stream InputStream (xForwardedHeader string); from InputStream select env:getOriginIPFromXForwarded(xForwardedHeader) as originIP insert into OutputStream;
This query returns the public origin IP from the given X-Forwarded header
getSystemProperty (Function)¶
This function returns the system property pointed by the system property key
Syntax
<STRING> env:getSystemProperty(<STRING> key, <STRING> default.value)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
key | This specifies Key of the property to be read. | STRING | No | No | |
default.value | This specifies the default Value to be returned if the property value is not available. | null | STRING | Yes | No |
Examples EXAMPLE 1
define stream keyStream (key string); from keyStream env:getSystemProperty(key) as FunctionOutput insert into outputStream;
This query returns system property corresponding to the key from keyStream as FunctionOutput to the outputStream
getUserAgentProperty (Function)¶
This function returns the value corresponding to a given property name in a given user agent
Syntax
<STRING> env:getUserAgentProperty(<STRING> user.agent, <STRING> property.name)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
user.agent | This specifies the user agent from which property will be extracted. | STRING | No | No | |
property.name | This specifies property name which should be extracted. Supported property names are 'browser' , 'os' and 'device' . |
STRING | No | No |
System Parameters
Name | Description | Default Value | Possible Parameters |
---|---|---|---|
regexFilePath | Location of the yaml file which contains the regex to process the user agent. | Default regexes included in the ua_parser library | N/A |
Examples EXAMPLE 1
define stream UserAgentStream (userAgent string); from UserAgentStream select env:getUserAgentProperty(userAgent, "browser") as functionOutput insert into OutputStream;
This query returns browser name of the userAgent from UserAgentStream as functionOutput
to the OutputStream
getYAMLProperty (Function)¶
This function returns the YAML property requested or the default values specified if such avariable is not available in the deployment.yaml
Syntax
<INT|LONG|DOUBLE|FLOAT|STRING|BOOL> env:getYAMLProperty(<STRING> key, <STRING> data.type, <INT|LONG|DOUBLE|FLOAT|STRING|BOOL> default.value)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
key | This specifies Key of the property to be read. | STRING | No | No | |
data.type | A string constant parameter expressing the data type of the propertyusing one of the following string values: int, long, float, double, string, bool. | string | STRING | No | No |
default.value | This specifies the default Value to be returned if the property value is not available. | null | INT LONG DOUBLE FLOAT STRING BOOL |
Yes | No |
Examples EXAMPLE 1
define stream keyStream (key string); from keyStream env:getYAMLProperty(key) as FunctionOutput insert into outputStream;
This query returns corresponding YAML property for the corresponding key from keyStream as FunctionOutput to the outputStream
resourceIdentifier (Stream Processor)¶
The resource identify stream processor registering the resource name with reference in static map. And serve static resources count for specific resource name.
Syntax
env:resourceIdentifier(<STRING> resource.group.id)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
resource.group.id | The resource group name. | STRING | No | No |
Examples EXAMPLE 1
@info(name='product_color_code_rule') from SweetProductDefectsDetector#env:resourceIdentifier("rule-group-1") select productId, if(colorCode == '#FF0000', true, false) as isValid insert into DefectDetectionResult; @info(name='product_dimensions_rule') from SweetProductDefectsDetector#env:resourceIdentifier("rule-group-1") select productId, if(height == 5 && width ==10, true, false) as isValid insert into DefectDetectionResult; @info(name='defect_analyzer') from DefectDetectionResult#window.env:resourceBatch("rule-group-1", productId, 60000) select productId, and(not isValid) as isDefected insert into SweetProductDefectAlert;
These are two rule base queries, which processing the same events from the SweetProductDefectsDetector and output the process results into same stream DefectDetectionResult. Also, the queries like this can be newly introduce into Siddhi Application and the number of output events(in DefectDetectionResult) depends on the number of available queries. If we need to further aggregate results for particular correlation.id: productId from the DefectDetectionResult stream, follow-up queries should wait for events with same correlation.id from all these available queries. For that future queries should know the number of events which can expect from these 'rule' base queries for given correlation id.To address this requirement, in above example, we have defined the resource identifier with 'resource.group.id: rule-group-1' in both the 'rule' queries, so that the other extensions can be used the number of registered resource 'rule-group-1' count for their internal processing. Here the 'defect_analyzer' query has env:resourceBatch window where it uses registered resource 'rule-group-1' count to determine the event waiting condition for events from DefectDetectionResult stream.
resourceBatch (Window)¶
A resource batch (tumbling) window that holds a number of events with specified attribute as grouping key and based on the resource count inferred from env:resourceIdentifier extension. The window is updated each time a batch of events with same key value that equals the number of resources count.
Syntax
env:resourceBatch(<STRING> resource.group.id, <INT|LONG|FLOAT|BOOL|DOUBLE> correlation.id, <INT|LONG|TIME> time.in.milliseconds)
QUERY PARAMETERS
Name | Description | Default Value | Possible Data Types | Optional | Dynamic |
---|---|---|---|---|---|
resource.group.id | The resource group name. | STRING | No | No | |
correlation.id | The attribute that should be used for event correlation. | INT LONG FLOAT BOOL DOUBLE |
No | No | |
time.in.milliseconds | Time to wait for arrival of new event, before flushing and giving output for events belonging to a specific batch. | 300000 | INT LONG TIME |
Yes | No |
Examples EXAMPLE 1
define stream SweetProductDefectsDetector(productId string, colorCode string, height long, width long); define stream SweetProductDefectAlert(productId string, isDefected bool); @info(name='product_color_code_rule') from SweetProductDefectsDetector#env:resourceIdentifier("rule-group-1") select productId, if(colorCode == '#FF0000', true, false) as isValid insert into DefectDetectionResult; @info(name='product_dimensions_rule') from SweetProductDefectsDetector#env:resourceIdentifier("rule-group-1") select productId, if(height == 5 && width ==10, true, false) as isValid insert into DefectDetectionResult; @info(name='defect_analyzer') from DefectDetectionResult#window.env:resourceBatch("rule-group-1", productId, 60000) select productId, and(not isValid) as isDefected insert into SweetProductDefectAlert;
This example demonstrate the usage of 'env:resourceBatch' widow extension with 'env:resourceIdentifier' stream processor and 'and' attribute aggregator extensions.
Use Case: The SweetProductDefectsDetector gets the Sweet Production data as an input stream and each event will be sent to the 'rule' queries( 'product_color_code_rule' and 'product_dimensions_rule') . The query 'defect_analyzer' should wait for both the output results from the 'rule' queries output and based on the aggregated results(take the logical AND aggregation of the 'isValid' attribute both events from 'product_color_code_rule' and 'product_dimensions_rule'), generate events and insert into the output stream 'SweetProductDefectAlert'.
In the above example, a number of 'rule' queries can be changed and the 'defect_analyzer' query should wait for results from the all available rules.
To address this use case, we have defined the same resource.group.id: rule-group-1 in all the 'rule' queries, and its registering the resources using 'resourceIdentifier' extension. In the 'defect_analyzer' query we defined the env:resourceBatch("rule-group-1", productId, 2000) window as it will accumulating the events with correlation.id:productId, where it holds the events for same 'productId' until it matches the number of available "rule-group-1" resources or flushing the events if the timeout(time.in.milliseconds:2000) occurs.
To aggregate the results from 'rule' queries, we have used 'and(not isValid)' attribute aggregator where it logically computes AND operation of not isValid boolean attribute values and outputs the results as a boolean value.
Input 1: [SweetProductDefectsDetector]
{
"event":{
"productId":"Cake",
"colorCode":"FF0000",
"height": 5,
"width": 10
}
}
Output 1:[SweetProductDefectAlert]
{
"event":{
"productId":"Cake",
"isDefected":"false"
}
}
Input 2: [SweetProductDefectsDetector]
{
"event":{
"productId":"Cake",
"colorCode":"FF0000",
"height": 10,
"width": 20
}
}
Output 2:[SweetProductDefectAlert]
{
"event":{
"productId":"Cake",
"isDefected":"true"
}
}