diff --git a/docs/clmc-service.md b/docs/clmc-service.md index 218526756a24242268ab350ccbfd554ed8359282..13a9a370ba638752644b673f991503f89fde85fb 100644 --- a/docs/clmc-service.md +++ b/docs/clmc-service.md @@ -33,3 +33,148 @@ This document describes the CLMC service and its API endpoints. The CLMC service is implemented in the *Python* framework called **Pyramid**. It offers different API endpoints to configure and control the aggregator, which is an essential part in the process of measuring the end-to-end performance. +All source code, tests and configuration files of the service can be found in the **src/clmc-webservice** folder. + +#### API Endpoints + +* **GET** ***/aggregator/config*** + + This API method retrieves information about the configuration of the aggregator. + + * Response: + + Returns a JSON-formatted response with the configuration data of the aggregator - *aggregator_report_period*, *aggregator_database_name*, + *aggregator_database_url*. + + * Response Example: + + ```json + { + "aggregator_report_period": 5, + "aggregator_database_name": "E2EMetrics", + "aggregator_database_url": "http://172.40.231.51:8086" + } + ``` + +* **PUT** ***/aggregator/config*** + + This API method updates the configuration of the aggregator. + + * Request: + + Expects a JSON-formatted request body with the new configuration of the aggregator. The body should contain only + three key fields - *aggregator_report_period* (positive integer, seconds), *aggregator_database_name* and *aggregator_database_url* (a valid URL). + + * Request Example: + + ```json + { + "aggregator_report_period": 25, + "aggregator_database_name": "E2EMetrics", + "aggregator_database_url": "http://172.50.231.61:8086" + } + ``` + + * Response: + + The body of the request is first validated before updating the configuration. If validation is successful, returns + a JSON-formatted response with the new configuration data. Otherwise, an **HTTP Bad Request** response is returned. + + * Response Example: + + ```json + { + "aggregator_report_period": 25, + "aggregator_database_name": "E2EMetrics", + "aggregator_database_url": "http://172.50.231.61:8086" + } + ``` + + * Notes: + + If the configuration is updated, while the aggregator is running, it is not automatically restarted. An explicit API call + must be made with a *restart* request to apply the updated configuration. In the case of such PUT request as the one described + above, the response will contain more information indicating that the configuration of the aggregator is malformed + + * Response Example: + + ```json + { + "aggregator_report_period": 125, + "aggregator_database_name": "E2EMetrics", + "aggregator_database_url": "http://172.50.231.61:8086/", + "malformed": true, + "comment": "Aggregator is running in a malformed state - it uses an old version of the configuration. Please, restart it so that the updated configuration is used." + } + ``` + +* **GET** ***/aggregator/control*** + + This API method retrieves information about the status of the aggregator - whether it is running or not. + + * Response: + + Returns a JSON-formatted response with the status data of the aggregator - *aggregator_running*. If the aggregator + is running in a malformed state, the response will also indicate this with two additional fields - *malformed* and *comment* + + * Response Example: + + ```json + { + "aggregator_running": false + } + ``` + + * Response Example - for malformed configuration: + + ```json + { + "aggregator_running": true, + "malformed": true, + "comment": "Aggregator is running in a malformed state - it uses an old version of the configuration. Please, restart it so that the updated configuration is used." + } + ``` + +* **PUT** ***/aggregator/control*** + + This API method updates the status of the aggregator - a user can start, stop or restart it. + + * Request: + + Expects a JSON-formatted request body with the new status of the aggregator. The body should contain only one key + field - *action* (the action to undertake, which can be **start**, **restart** or **stop**) + + * Request Example: + + ```json + { + "action": "start" + } + ``` + + * Response: + + The body of the request is first validated before taking any actions. If the action is not one of the listed above, + then the validation will fail. If validation is successful, returns a JSON-formatted response with the new status of + the aggregator. Otherwise, an **HTTP Bad Request** response is returned. + + * Response Example: + + ```json + { + "aggregator_running": true + } + ``` + + * Notes: + + * If a **start** action is requested, while the aggregator is running, then the request will be ignored. To restart the + aggregator, a user should use a **restart** action. + + * If a **stop** action is requested, while the aggregator is not running, then the request will be ignored. + + * A request with a **restart** action, while the aggregator is not running, has the same functionality as a request + with a **start** action. + + * The functionality of a request with a **restart** action is the same as the functionlity of a **stop** action + followed by a **start** action. \ No newline at end of file