diff --git a/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py b/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py index 3c4f25c..edb4bbd 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py @@ -370,12 +370,16 @@ def get_all_eventmessages( ) -> PlainTextResponse: # SQL sorts eventmessages by timestamp, so we don't need to sort them here eventmessages = sql_crud.get_eventmessages(db, skip=skip, limit=limit) - result: dict[int, dict[int, List[Eventmessage]]] = OrderedDict() + cresult: List[OrderedDict[int, OrderedDict[int, List[Eventmessage]]]] = [] - for msg in eventmessages: + cresult_idx = 0 + cresult.append(OrderedDict()) + for idx, msg in enumerate(eventmessages): # 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) + group_name = ( + str(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) ) @@ -386,14 +390,26 @@ def get_all_eventmessages( 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 - # Initialize the result array and dictionary - if result.get(group_name) is None: - result[group_name] = OrderedDict() - if result[group_name].get(msg.group_id) is None: - result[group_name][msg.group_id] = [] + result = cresult[cresult_idx] + + if result.get("group_name") is None: + # Initialize the result array and dictionary + result["group_name"] = group_name + elif result["group_name"] != group_name: + # If the group name changed, create a new result array and dictionary + cresult_idx += 1 + cresult.append(OrderedDict()) + result = cresult[cresult_idx] + result["group_name"] = group_name + + if result.get("groups") is None: + result["groups"] = OrderedDict() + + if result["groups"].get(msg.group_id) is None: + result["groups"][msg.group_id] = [] # Append the eventmessage to the result array - result_arr = result[group_name][msg.group_id] + result_arr = result["groups"][msg.group_id] result_arr.append( Eventmessage( id=msg.id, @@ -411,7 +427,7 @@ def get_all_eventmessages( ).dict() ) - return PlainTextResponse(content=json.dumps(result, indent=4), status_code=200) + return PlainTextResponse(content=json.dumps(cresult, indent=4), status_code=200) ############################## diff --git a/pkgs/clan-cli/clan_cli/webui/sql_models.py b/pkgs/clan-cli/clan_cli/webui/sql_models.py index ad9d486..8520cb9 100644 --- a/pkgs/clan-cli/clan_cli/webui/sql_models.py +++ b/pkgs/clan-cli/clan_cli/webui/sql_models.py @@ -101,7 +101,7 @@ class Eventmessage(Base): ## Queryable body ## # Primary Key id = Column(Integer, primary_key=True, autoincrement=True) - timestamp = Column(Integer, unique=True, index=True) + timestamp = Column(Integer, index=True) group = Column(Integer, index=True) group_id = Column(Integer, index=True) msg_type = Column(Integer, index=True) # message type for the label diff --git a/pkgs/clan-cli/tests/test_db_api.py b/pkgs/clan-cli/tests/test_db_api.py index bd381fc..1c88810 100644 --- a/pkgs/clan-cli/tests/test_db_api.py +++ b/pkgs/clan-cli/tests/test_db_api.py @@ -122,49 +122,50 @@ def test_create_services(api_client: ApiClient) -> None: random.seed(77) -def create_eventmessages(num: int = 2) -> list[EventmessageCreate]: +def create_eventmessages(num: int = 4) -> list[EventmessageCreate]: res = [] starttime = int(time.time()) - for i in range(num): - group_id = i % 5 + random.getrandbits(6) + for idx in range(num): + i2 = idx + 1 + group_id = i2 % 5 + random.getrandbits(6) + 1 em_req_send = EventmessageCreate( - timestamp=starttime + i * 10, - group=i % 5, + timestamp=starttime + i2 * 10, + group=i2 % 5, group_id=group_id, msg_type=1, - src_did=f"did:sov:test:12{i}", - des_did=f"did:sov:test:12{i+1}", + src_did=f"did:sov:test:12{i2}", + des_did=f"did:sov:test:12{i2+1}", msg={}, ) res.append(em_req_send) em_req_rec = EventmessageCreate( - timestamp=starttime + (i * 10) + 2, - group=i % 5, + timestamp=starttime + (i2 * 10) + 2, + group=i2 % 5, group_id=group_id, msg_type=2, - src_did=f"did:sov:test:12{i}", - des_did=f"did:sov:test:12{i+1}", + src_did=f"did:sov:test:12{i2}", + des_did=f"did:sov:test:12{i2+1}", msg={}, ) res.append(em_req_rec) - group_id = i % 5 + random.getrandbits(6) + group_id = i2 % 5 + random.getrandbits(6) em_res_send = EventmessageCreate( - timestamp=starttime + i * 10 + 4, - group=i % 5, + timestamp=starttime + i2 * 10 + 4, + group=i2 % 5, group_id=group_id, msg_type=3, - src_did=f"did:sov:test:12{i+1}", - des_did=f"did:sov:test:12{i}", + src_did=f"did:sov:test:12{i2+1}", + des_did=f"did:sov:test:12{i2}", msg={}, ) res.append(em_res_send) em_res_rec = EventmessageCreate( - timestamp=starttime + (i * 10) + 8, - group=i % 5, + timestamp=starttime + (i2 * 10) + 8, + group=i2 % 5, group_id=group_id, msg_type=4, - src_did=f"did:sov:test:12{i+1}", - des_did=f"did:sov:test:12{i}", + src_did=f"did:sov:test:12{i2+1}", + des_did=f"did:sov:test:12{i2}", msg={}, ) res.append(em_res_rec)