Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

To use JavaScript in in Usage Engine, there are some mandatory variables and APIs that you require.

Variables/Functions

Description

Examples

audit

To control the custom user audit function. The supported types are:

  • count:  Increments the string key value with 1

Syntax
Code Block
titleSyntax
audit.count(key);
  • sum: Sums up the total amount

Syntax
Code Block
titleSyntax
audit.sum(key,value);
  • set: Sets an input value. Data entry using the set function can be used with any data type. The output of the sum function will show the accumulated amount. 

Syntax
Code Block
titleSyntax
audit.set(key,value);

Info

title

Example - audit.set

audit.set('Collection 1', JSON.stringify(object)): – This audit function can be used to enter any string value and save it to a specified key. 

Info

title

Example - audit.sum

audit.sum('KEY_NAME', payload.fieldName): - This function is useful when presenting amounts of data that is to be saved or forwarded to a destination source.

Info

titletitle

Example - audit.count

audit.count('Tracking-Records-Changes'): - This function can be issued to increase the count of tracked records or a collection of data after an audit review. 

log

An object that contains logging functionality for the severity levels: info, warning, and error.

log.info("foo"); - Logs something to the Usage Engine log. See Logs.

Note

Note

  • Large log messages are truncated, for example, messages that are greater than 100000 characters.

  • The object takes one or more arguments and concatenates them to a single string.

  • sprintf/printf placeholders are supported in the string for digits, json and strings.

  • If you have more arguments than placeholders, the remaining arguments are concatenated at the end of the string in the order that they are provided.

note
title

Note!

Currently, the Console object in JavaScript, which provides access to the browser's debugging console, is disabled.

Info

title

Example - log variable

log.info('This is %s object: %j, it contains %d greeting phrases',"my", { greeting: 'hello', message: 'world' }, 1);

This results in the message:"This is my object: {\"greeting\": \"hello\", \"message\": \"world\"}, it contains 1 greeting phrases".

payload

Anchor
payload
payload

The payload variable contains all the information of the current record/object. 

Info
title

Example - Payload variable

  • payload.foo = "bar"; Sets the property foo in the payload to the string "bar"

  • delete payload.foo; - Deletes the property foo from the payload

  • payload.baz = { a: 1, b: 2, c: 2 }; Sets the property baz in the payload to an object

Anchor
metadata
metadata

meta

The meta variable provides generic information (metadata) about a payload (record). Metadata is data that provide information about other data. Metadata summarises basic information about data, thereby making finding and working with particular instances of data easier.

Refer to Amazon S3

to know

for more details about metadata that is accessible from the Transform tab.

Refer to https://infozone.atlassian.net/wiki/x/E4HFF for more details about the metadata that applies to the Data aggregator.

The following metadata is accessible using the Script Flush tab:

  • lastCall: A boolean flag set to true for the final transaction. lastCall can be used to create a summary or audit for the processed data at the final transaction.

    To initiate action(s) triggered by the recent transaction:

    Code Block
    if (meta.lastCall) 
    
    {
     <action(s) needed>
    }
InfotitleExample
Tip

Hint!

You can add your own meta properties in a script function by assigning values to the meta variable like this: meta.myField = "Hello World". This will then be enriched on to the meta field downstream.

Info

Example - using S3 Forwarder

If you choose to add properties to meta, you can do so in the Script Function and refer it to a different function, for example, Amazon S3 forwarder.

In the Script Function,

Code Block
titleExample
const moment = require("moment");

if (!meta.simDate) 
{
 meta.simDate = moment(new Date()).format('YYYYMMDD');
}

In the Amazon S3 forwarder, add this in the Filename field: passages-${meta.simDate}.csv

For more information, please see Configuring Dynamic Naming in Fields.

push(<event>)

To send data downstream. You need to invoke this Function using await syntax.

To send data to the next Function(s) in the stream.

Info
title

Example - push variable

await push(data); 

Anchor
state_object
state_object
state

This is to keep the state across records. The state is only available during one stream execution. The information stored in the state variable is not persisted between executions and is cleared at the end of each stream execution.

The state

variable contains title

variable contains two scopes:

  • node: To save the state locally for this Function. 

  • stream:  To save the state globally for the stream. 

Note

Note!

Refer to

Best Practices to Avoid Stateful Stream Design for tips to not lose

https://infozone.atlassian.net/wiki/x/iod4 for tips avoid losing memory in case of

any issue with

stream execution or system downtime issues.

Info
title

Example

of

- node

state.node - This state remains across one stream execution and is only available in this Function.

const foo = state.node.foo; - Retrieves the variable foo from  Function

delete state.node.foo; - Removes the variable foo from Function

Info

title

Example

of

- stream variable

state.stream - This state is shared only within the Script Functions in a stream. 

const foo = state.stream.foo; - Retrieves the variable foo from the stream

delete state.stream.foo; - Removes the variable foo from the stream

Anchor
store
store
store

These three operations functions as a key-value store. The key must be a string. Value can be of any type, for example: string, number, date, JSON object, and array.

You need to invoke this Function using await syntax:

  • get: To get a value

  • set: To set a value of a key 

    Syntax

    Code Block
titleSyntax
  • await store.set("<key>", <value>);


    And, to set the duration (in seconds) of how long the key is stored.

    Syntax

    Code Block
titleSyntax
title
  • await store.set("<key>", <value>,{ttl:<storage duration in number of seconds>});
Excerpt Note

Note!

 Sets

Sets the value for a key for the defined duration. The

ttl parameter

TTL parameter is optional and the default value is 30 days, that is, 2 592 000 seconds. A key can be stored for a maximum of 60 days (5 184 000 seconds), however, this duration gets extended every time store.set is called within these 60 days.

note

title

Note!

If a value exceeding the maximum limit is entered, the value is automatically set to the designed maximum. 

  • del: To delete a value

    Syntax

    Code Block
titleSyntax
  • await store.del(<key>) 

Info

title

Example - store variable

await store.get("foo") - Returns the value for the key "foo".

Info

title

Example:

await store.set("foo", "hello"); - Sets the value for the key "foo" to the string "hello". The value is stored for 30 days, which is the default time for store.set.

Info

title

Example:

await store.set("foo", "hello", {ttl:600000}); - Sets the value for the key "foo" to the string  "hello". The ttl for this value is 600000 seconds.

Anchor

sharedPersistentStorage

sharedStore

sharedPersistentStorage

sharedStore
sharedStore

With shared persistent storage, streams can access the same data. For example, one stream writes data to the shared persistent storage that can be used by one or more streams. The key must be a string. Value can be of any type, for example, string, number, date, JSON object, and array.

Notetitle

Note!

Streams sharing data must belong to the same solution.

You must use the await syntax for the Function:

  • sharedStore.get: To get a value.

    Syntax

    Code Block
titleSyntax
  • await sharedStore.get("<key>");

  • sharedStore.set:

 To
  •  To set a value of a key and the duration (in seconds) of how long the key is stored. 

    Syntax

    Code Block
titleSyntax
  • await sharedStore.set("<key>", <value>);


    And, to

set the
  • set the duration (in seconds) of how long the key is stored.

    Syntax

    Code Block
titleSyntax
  • await sharedStore.set("<key>", <value>,{ttl:<storage duration in number of seconds>});
excerpt-includetitle
ScriptScriptnopaneltrue Note


Note!

If a value exceeding the maximum limit is entered, the value is automatically set to the designed maximum. 

  • sharedStore.del: To delete a value.

    Syntax

    Code Block
titleSyntax
  • await sharedStore.del("<key>");

Info

title

Example - shared storage

await sharedStore.get("foo") - Returns the value from the shared persistent storage for the key foo.

Info

title

Example - shared storage

await sharedStore.set("Team", "hello"); - Sets the value for key "Team" to the string "hello". The ttl for this value is set to default,

2592000 seconds

2592000 seconds.

const getVal = await sharedStore.get("Team");

await sharedStore.del("Team");

Info

title

Example - shared storage

await sharedStore.set("Team",{ foo: 42 }, {ttl: 6000}); - Sets the value for key "Team" to the object { foo: 42 }. The ttl for this value is 6000 seconds.

const getVal = await sharedStore.get("Team");

await sharedStore.del("Team");

Error message example

This really simplistic example shows the log when the keyword "payload" is spelled with a capital 'P'. The following example uses the Summarize Monthly Usage Data example stream.

...