> For the complete documentation index, see [llms.txt](https://algolytics-technologies.gitbook.io/algolytics/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://algolytics-technologies.gitbook.io/algolytics/event-engine-user/events.md).

# Events

Information about events

## **Events sending**

Client's application sends statements (events) to the engine in JSON format through HTTP connection (REST API). HTTP connection sends statements in packages. Data encryption is done using the SSL protocol.

## **Multiple sources**

Data can come from multiple sources (users, game servers). Events are distinguished with a *client\_id* variable. The application is customizable for specific customers through defining dedicated metadata (variables, aggregates, models).

## **Events processing order**

Events processing order may not be maintained. It is determined on the basis of event time saved in JSON.

## **Transforming events to variables**

Transform rules are defined in metadata as rules in JSONPath. Variables will be defined by analytics or generated automatically by analysis of given sample of events and verified by analytics.

## Formats of JSONs containing events <a href="#formats-of-jsons-containing-events" id="formats-of-jsons-containing-events"></a>

### **Generic formats**

For generic formats of JSONs, the Event Engine provides the most efficient processing.

### **Example of JSON:**

```
{"arrival_ts":1232344,  
 "client_id":1, 
 "user_id":5, 
 "event_id":23,
"eventType1":
[
{"eventA":{"value":10, "name":"AAA"},
 "value":"value1"
},
{"eventB":{"value":45, "name":"BBB"},
 "value":"value2"       
}
               ]
            }
```

### **Examples of variable expressions**

```
$.['eventType1'].[0].['eventA'].['value']
```

returns 10

```
$.['eventType1'].[0].['value']
```

returns "value1"

### **Examples of queries containing additional conditions**

In generic format of JSONs, queries containing additional conditions are also optimized. These conditions can check equality by "==" sign and can be connected by "&&" sign.

```
$.['eventType1'].[0].['eventA'].[?(@.['value'] == 10 && @.['name'] == "AAA")].value
```

returns \[10]

```
$.['eventType1'].[0].[?(@.['eventA'].['value'] == 10 && @.['eventA'].['name'] == "AAA")].value
```

returns \["value1"]

### **Other formats, compatible with JSONPath**

These formats provides worse processing efficiency. An analytic must add rules defining the change from JSON format to a metadata variable (see [chapter 5](/algolytics/event-engine-user/metadata.md)).

### **Example of JSON**

```
{"arrival_ts":1232344,  
 "client_id":1, 
 "user_id":5, 
 "event_id":23,
 "name":"eventType1",
 "type":
    [
{"event":"eventA",
            "value":10
},
{"event":"eventB",
            "value":45
}
    ]
}
```

### **Example of variable expression**

```
$.[?(@.name =~ /.*eve.*/i)].['type'].[1].['value']
```

returns \[45]

## Responses <a href="#responses" id="responses"></a>

A statement with score is a direct response to the bid request. The statement consists of scores for each impression:

* impid - id of the impression
* scores - a list of models and scores; empty, if none of models were scored or none of deployed models are active. Otherwise the list contains elements, where id of the model is a key and suggested bidding price is a value.

```
[
{
"impid": "424c6a8db16d4fa8ab853c5cd7b04ac7",
"scores": {
1314: 0.6930373068263596,
1315: 5.24522720421126,
1316: 44.87740531791001
}
},
{
"impid": "e5d26e91ac2441f997e3b1bee6168562",
"scores": {
1314: 0.6930373068263596,
1315: 5.24522720421126,
1316: 44.87740531791001
}
]
```

The price is calculated according to the formula:

`min(10 * value, score * value * weight)`

* score - scoring result
* value - value of a variable from models (CPC) table
* weight - weight from models table (default 1000, because prices are bidded at the CPM rate)

## Saving events <a href="#saving-events" id="saving-events"></a>

Every event is saved to a repository of events. If necessary, a backup of the repository can be made. Saving events do not block futher processing. The repository which stores events is made of txt files.
