From 1b433ea31467b0fac142ffbaf03a2e19fd52d595 Mon Sep 17 00:00:00 2001 From: Luis-Hebendanz Date: Wed, 24 Jan 2024 16:19:36 +0100 Subject: [PATCH 1/4] Fixed eventmessage formatting problem --- pkgs/clan-cli/README.md | 25 +++++++ pkgs/clan-cli/clan_cli/config.py | 67 ++++++++++++++++--- .../clan_cli/webui/routers/endpoints.py | 30 ++++++--- pkgs/clan-cli/clan_cli/webui/schemas.py | 3 +- 4 files changed, 107 insertions(+), 18 deletions(-) diff --git a/pkgs/clan-cli/README.md b/pkgs/clan-cli/README.md index 3a11936..922c317 100644 --- a/pkgs/clan-cli/README.md +++ b/pkgs/clan-cli/README.md @@ -33,6 +33,31 @@ And then run the docker file by executing: docker run -p 127.0.0.1:2979:2979 clan-docker:latest ``` +Login to the tu docker image server +```bash +docker login git.tu-berlin.de:5000 +``` + +Tag the imported image +```bash +docker image tag clan-docker:latest git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest +``` + +Push the image to the git registry +```bash +docker image push git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest +``` + +Pull the image +```bash +docker pull git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest +``` + +Run the image +```bash +docker run -p 127.0.0.1:2979:2979 git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest +``` + # Auto Generating a Python Client For the tests we automatically generate a python client for the API endpoints. To do this execute while inside the `pkgs/clan-cli` folder: diff --git a/pkgs/clan-cli/clan_cli/config.py b/pkgs/clan-cli/clan_cli/config.py index 24e5fcd..5baac19 100644 --- a/pkgs/clan-cli/clan_cli/config.py +++ b/pkgs/clan-cli/clan_cli/config.py @@ -21,13 +21,62 @@ c1_url = f"http://{host}:{c1_port}/docs" c2_url = f"http://{host}:{c2_port}/docs" -msg_type_to_label = { - 1: "Attachement", - 2: "Connection Setup", - 3: "Presentation", - 4: "DID Resolution", - 5: "Service De-registration", - 6: "Service Registration", - 7: "Service Discovery", - 8: "Service Operation", +group_type_to_label = { + 1: { + "name": "Attachement", + 1: "Request Send", + 2: "Request Received", + 3: "Response Send", + 4: "Response Received", + }, + 2: { + "name": "Connection Setup", + 1: "Request Send", + 2: "Request Received", + 3: "Response Send", + 4: "Response Received", + }, + 3: { + "name": "Presentation", + 1: "Request Send", + 2: "Request Received", + 3: "Respone Send", + 4: "Respone Received", + 5: "Respone Ack", + }, + 4: { + "name": "DID Resolution", + 1: "Request Send", + 2: "Request Received", + 3: "Response Send", + 4: "Response Received", + }, + 5: { + "name": "Service De-registration", + 1: "Send", + 2: "Received", + 3: "Success Send", + 4: "Success Received", + }, + 6: { + "name": "Service Registration", + 1: "Send", + 2: "Received", + 3: "Success Send", + 4: "Success Received", + }, + 7: { + "name": "Service Discovery", + 1: "Discovery Send", + 2: "Discovery Received", + 3: "Result Send", + 4: "Result Received", + }, + 8: { + "name": "Service Operation", + 1: "Request Send", + 2: "Request Received", + 3: "Response Send", + 4: "Response Received", + }, } diff --git a/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py b/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py index 56016d9..4417c78 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py @@ -8,7 +8,7 @@ from fastapi import APIRouter, BackgroundTasks, Depends, Query from fastapi.responses import HTMLResponse, JSONResponse from sqlalchemy.orm import Session -from clan_cli.config import ap_url, c1_url, c2_url, dlg_url, msg_type_to_label +from clan_cli.config import ap_url, c1_url, c2_url, dlg_url, group_type_to_label from ...errors import ClanError from .. import sql_crud, sql_db, sql_models @@ -370,25 +370,36 @@ def get_all_eventmessages( result: dict[int, dict[int, List[Eventmessage]]] = {} for msg in eventmessages: - msg_name = msg_type_to_label.get(msg.msg_type, None) + # Use the group_type_to_label from config.py to get the group name and msg_type name + group = group_type_to_label.get(msg.group, None) + group_name = group.get("name", None) if group is not None else str(msg.group) + msg_type_name = ( + group.get(msg.msg_type, None) if group is not None else str(msg.msg_type) + ) + + # Get the name of the src and des entity from the database src_name = sql_crud.get_entity_by_did(db, msg.src_did) src_name = src_name if src_name is None else src_name.name des_name = sql_crud.get_entity_by_did(db, msg.des_did) des_name = des_name if des_name is None else des_name.name - if result.get(msg.group) is None: - result[msg.group] = {} - if result[msg.group].get(msg.group_id) is None: - result[msg.group][msg.group_id] = [] + # Initialize the result array and dictionary + if result.get(group_name) is None: + result[group_name] = {} + if result[group_name].get(msg.group_id) is None: + result[group_name][msg.group_id] = [] - result[msg.group][msg.group_id].append( + # Append the eventmessage to the result array + result_arr = result[group_name][msg.group_id] + result_arr.append( Eventmessage( id=msg.id, timestamp=msg.timestamp, group=msg.group, + group_name=group_name, group_id=msg.group_id, msg_type=msg.msg_type, - msg_type_name=msg_name, + msg_type_name=msg_type_name, src_did=msg.src_did, src_name=src_name, des_did=msg.des_did, @@ -396,6 +407,9 @@ def get_all_eventmessages( msg=msg.msg, ).dict() ) + + # sort by timestamp + result_arr.sort(key=lambda x: x["timestamp"]) return JSONResponse(content=result, status_code=200) diff --git a/pkgs/clan-cli/clan_cli/webui/schemas.py b/pkgs/clan-cli/clan_cli/webui/schemas.py index c87c4b5..a17986f 100644 --- a/pkgs/clan-cli/clan_cli/webui/schemas.py +++ b/pkgs/clan-cli/clan_cli/webui/schemas.py @@ -185,7 +185,8 @@ class Eventmessage(EventmessageCreate): id: int = Field(...) des_name: Optional[str] = Field(default=None, example="C2") src_name: Optional[str] = Field(default=None, example="C1") - msg_type_name: Optional[str] = Field(default=None, example="Service Usage") + msg_type_name: str = Field(..., example="Request Send") + group_name: str = Field(..., example="Presentation") class Config: orm_mode = True From 11f4651814f6c6062f4ddb3faa3a8942e3761223 Mon Sep 17 00:00:00 2001 From: Luis-Hebendanz Date: Wed, 24 Jan 2024 16:22:11 +0100 Subject: [PATCH 2/4] nix fmt --- pkgs/clan-cli/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/clan-cli/README.md b/pkgs/clan-cli/README.md index 922c317..d209b96 100644 --- a/pkgs/clan-cli/README.md +++ b/pkgs/clan-cli/README.md @@ -34,26 +34,31 @@ docker run -p 127.0.0.1:2979:2979 clan-docker:latest ``` Login to the tu docker image server + ```bash docker login git.tu-berlin.de:5000 ``` Tag the imported image + ```bash docker image tag clan-docker:latest git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest ``` Push the image to the git registry + ```bash docker image push git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest ``` Pull the image + ```bash docker pull git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest ``` Run the image + ```bash docker run -p 127.0.0.1:2979:2979 git.tu-berlin.de:5000/internet-of-services-lab/service-aware-network-front-end:latest ``` From 03f6318651fa083dcc8657100ca2949db444d41c Mon Sep 17 00:00:00 2001 From: Luis-Hebendanz Date: Wed, 24 Jan 2024 16:31:39 +0100 Subject: [PATCH 3/4] Fixed failing tests --- pkgs/clan-cli/README.md | 2 +- pkgs/clan-cli/clan_cli/config.py | 24 ++-- pkgs/clan-cli/clan_cli/webui/schemas.py | 4 +- .../tests/openapi_client/api/default_api.py | 128 ------------------ .../tests/openapi_client/docs/DefaultApi.md | 59 -------- .../tests/openapi_client/docs/Eventmessage.md | 1 + .../openapi_client/models/eventmessage.py | 6 +- 7 files changed, 21 insertions(+), 203 deletions(-) diff --git a/pkgs/clan-cli/README.md b/pkgs/clan-cli/README.md index d209b96..25cc286 100644 --- a/pkgs/clan-cli/README.md +++ b/pkgs/clan-cli/README.md @@ -32,7 +32,7 @@ And then run the docker file by executing: ```bash docker run -p 127.0.0.1:2979:2979 clan-docker:latest ``` - +# Uploading a Docker Image Login to the tu docker image server ```bash diff --git a/pkgs/clan-cli/clan_cli/config.py b/pkgs/clan-cli/clan_cli/config.py index 5baac19..f00e74a 100644 --- a/pkgs/clan-cli/clan_cli/config.py +++ b/pkgs/clan-cli/clan_cli/config.py @@ -9,18 +9,8 @@ cors_ports = ["*", 3000, 2979] # host for the server, frontend, backend and emulators host = "127.0.0.1" -# used for emmulation and population for testing -port_dlg = 7000 -port_ap = 7500 -_port_client_base = 8000 -c1_port = _port_client_base + 1 -c2_port = _port_client_base + 2 -dlg_url = f"http://{host}:{port_dlg}/docs" -ap_url = f"http://{host}:{port_ap}/docs" -c1_url = f"http://{host}:{c1_port}/docs" -c2_url = f"http://{host}:{c2_port}/docs" - +# Used for eventmessage number to name mapping group_type_to_label = { 1: { "name": "Attachement", @@ -80,3 +70,15 @@ group_type_to_label = { 4: "Response Received", }, } + + +# Used for emulation and population for testing +port_dlg = 7000 +port_ap = 7500 +_port_client_base = 8000 +c1_port = _port_client_base + 1 +c2_port = _port_client_base + 2 +dlg_url = f"http://{host}:{port_dlg}/docs" +ap_url = f"http://{host}:{port_ap}/docs" +c1_url = f"http://{host}:{c1_port}/docs" +c2_url = f"http://{host}:{c2_port}/docs" diff --git a/pkgs/clan-cli/clan_cli/webui/schemas.py b/pkgs/clan-cli/clan_cli/webui/schemas.py index a17986f..0b49398 100644 --- a/pkgs/clan-cli/clan_cli/webui/schemas.py +++ b/pkgs/clan-cli/clan_cli/webui/schemas.py @@ -185,8 +185,8 @@ class Eventmessage(EventmessageCreate): id: int = Field(...) des_name: Optional[str] = Field(default=None, example="C2") src_name: Optional[str] = Field(default=None, example="C1") - msg_type_name: str = Field(..., example="Request Send") - group_name: str = Field(..., example="Presentation") + msg_type_name: Optional[str] = Field(default=None, example="Request Send") + group_name: Optional[str] = Field(default=None, example="Presentation") class Config: orm_mode = True diff --git a/pkgs/clan-cli/tests/openapi_client/api/default_api.py b/pkgs/clan-cli/tests/openapi_client/api/default_api.py index 4e5e97f..c28d093 100644 --- a/pkgs/clan-cli/tests/openapi_client/api/default_api.py +++ b/pkgs/clan-cli/tests/openapi_client/api/default_api.py @@ -42,134 +42,6 @@ class DefaultApi: api_client = ApiClient.get_default() self.api_client = api_client - @validate_arguments - def get(self, **kwargs) -> None: # noqa: E501 - """Get # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - - >>> thread = api.get(async_req=True) - >>> result = thread.get() - - :param async_req: Whether to execute the request asynchronously. - :type async_req: bool, optional - :param _request_timeout: timeout setting for this request. - If one number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - :return: Returns the result object. - If the method is called asynchronously, - returns the request thread. - :rtype: None - """ - kwargs['_return_http_data_only'] = True - if '_preload_content' in kwargs: - message = "Error! Please call the get_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 - raise ValueError(message) - return self.get_with_http_info(**kwargs) # noqa: E501 - - @validate_arguments - def get_with_http_info(self, **kwargs) -> ApiResponse: # noqa: E501 - """Get # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - - >>> thread = api.get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req: Whether to execute the request asynchronously. - :type async_req: bool, optional - :param _preload_content: if False, the ApiResponse.data will - be set to none and raw_data will store the - HTTP response body without reading/decoding. - Default is True. - :type _preload_content: bool, optional - :param _return_http_data_only: response data instead of ApiResponse - object with status code, headers, etc - :type _return_http_data_only: bool, optional - :param _request_timeout: timeout setting for this request. If one - number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - :param _request_auth: set to override the auth_settings for an a single - request; this effectively ignores the authentication - in the spec for a single request. - :type _request_auth: dict, optional - :type _content_type: string, optional: force content-type for the request - :return: Returns the result object. - If the method is called asynchronously, - returns the request thread. - :rtype: None - """ - - _params = locals() - - _all_params = [ - ] - _all_params.extend( - [ - 'async_req', - '_return_http_data_only', - '_preload_content', - '_request_timeout', - '_request_auth', - '_content_type', - '_headers' - ] - ) - - # validate the arguments - for _key, _val in _params['kwargs'].items(): - if _key not in _all_params: - raise ApiTypeError( - "Got an unexpected keyword argument '%s'" - " to method get" % _key - ) - _params[_key] = _val - del _params['kwargs'] - - _collection_formats = {} - - # process the path parameters - _path_params = {} - - # process the query parameters - _query_params = [] - # process the header parameters - _header_params = dict(_params.get('_headers', {})) - # process the form parameters - _form_params = [] - _files = {} - # process the body parameter - _body_params = None - # set the HTTP header `Accept` - _header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # authentication setting - _auth_settings = [] # noqa: E501 - - _response_types_map = {} - - return self.api_client.call_api( - '/ws2_example', 'GET', - _path_params, - _query_params, - _header_params, - body=_body_params, - post_params=_form_params, - files=_files, - response_types_map=_response_types_map, - auth_settings=_auth_settings, - async_req=_params.get('async_req'), - _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 - _preload_content=_params.get('_preload_content', True), - _request_timeout=_params.get('_request_timeout'), - collection_formats=_collection_formats, - _request_auth=_params.get('_request_auth')) - @validate_arguments def get_emulated_enpoints(self, **kwargs) -> str: # noqa: E501 """Get Emulated Enpoints # noqa: E501 diff --git a/pkgs/clan-cli/tests/openapi_client/docs/DefaultApi.md b/pkgs/clan-cli/tests/openapi_client/docs/DefaultApi.md index 1f58c99..b1e8cb8 100644 --- a/pkgs/clan-cli/tests/openapi_client/docs/DefaultApi.md +++ b/pkgs/clan-cli/tests/openapi_client/docs/DefaultApi.md @@ -4,70 +4,11 @@ All URIs are relative to *http://localhost* Method | HTTP request | Description ------------- | ------------- | ------------- -[**get**](DefaultApi.md#get) | **GET** /ws2_example | Get [**get_emulated_enpoints**](DefaultApi.md#get_emulated_enpoints) | **GET** /emulate | Get Emulated Enpoints [**health**](DefaultApi.md#health) | **GET** /health | Health [**root**](DefaultApi.md#root) | **GET** /{path_name} | Root -# **get** -> get() - -Get - -### Example - -```python -import time -import os -import openapi_client -from openapi_client.rest import ApiException -from pprint import pprint - -# Defining the host is optional and defaults to http://localhost -# See configuration.py for a list of all supported configuration parameters. -configuration = openapi_client.Configuration( - host = "http://localhost" -) - - -# Enter a context with an instance of the API client -with openapi_client.ApiClient(configuration) as api_client: - # Create an instance of the API class - api_instance = openapi_client.DefaultApi(api_client) - - try: - # Get - api_instance.get() - except Exception as e: - print("Exception when calling DefaultApi->get: %s\n" % e) -``` - - - -### Parameters -This endpoint does not need any parameter. - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/json - -### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | Successful Response | - | - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - # **get_emulated_enpoints** > str get_emulated_enpoints() diff --git a/pkgs/clan-cli/tests/openapi_client/docs/Eventmessage.md b/pkgs/clan-cli/tests/openapi_client/docs/Eventmessage.md index c0d8c72..a9ada37 100644 --- a/pkgs/clan-cli/tests/openapi_client/docs/Eventmessage.md +++ b/pkgs/clan-cli/tests/openapi_client/docs/Eventmessage.md @@ -15,6 +15,7 @@ Name | Type | Description | Notes **des_name** | **str** | | [optional] **src_name** | **str** | | [optional] **msg_type_name** | **str** | | [optional] +**group_name** | **str** | | [optional] ## Example diff --git a/pkgs/clan-cli/tests/openapi_client/models/eventmessage.py b/pkgs/clan-cli/tests/openapi_client/models/eventmessage.py index 555c0ef..31340ce 100644 --- a/pkgs/clan-cli/tests/openapi_client/models/eventmessage.py +++ b/pkgs/clan-cli/tests/openapi_client/models/eventmessage.py @@ -36,7 +36,8 @@ class Eventmessage(BaseModel): des_name: Optional[StrictStr] = None src_name: Optional[StrictStr] = None msg_type_name: Optional[StrictStr] = None - __properties = ["timestamp", "group", "group_id", "msg_type", "src_did", "des_did", "msg", "id", "des_name", "src_name", "msg_type_name"] + group_name: Optional[StrictStr] = None + __properties = ["timestamp", "group", "group_id", "msg_type", "src_did", "des_did", "msg", "id", "des_name", "src_name", "msg_type_name", "group_name"] class Config: """Pydantic configuration""" @@ -84,7 +85,8 @@ class Eventmessage(BaseModel): "id": obj.get("id"), "des_name": obj.get("des_name"), "src_name": obj.get("src_name"), - "msg_type_name": obj.get("msg_type_name") + "msg_type_name": obj.get("msg_type_name"), + "group_name": obj.get("group_name") }) return _obj From 5aff0ec6f016670ec9fc2a2a9b5122c8bbc3a439 Mon Sep 17 00:00:00 2001 From: Luis-Hebendanz Date: Wed, 24 Jan 2024 16:32:02 +0100 Subject: [PATCH 4/4] nix fmt --- pkgs/clan-cli/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/clan-cli/README.md b/pkgs/clan-cli/README.md index 25cc286..2551c32 100644 --- a/pkgs/clan-cli/README.md +++ b/pkgs/clan-cli/README.md @@ -32,7 +32,9 @@ And then run the docker file by executing: ```bash docker run -p 127.0.0.1:2979:2979 clan-docker:latest ``` + # Uploading a Docker Image + Login to the tu docker image server ```bash