# 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](https://algolytics-technologies.gitbook.io/algolytics/event-engine-user/metadata)).

### **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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://algolytics-technologies.gitbook.io/algolytics/event-engine-user/events.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
