Commit 553c2da8 authored by Manuel's avatar Manuel

[SemanticLinking] changed MessageHandler to work with tables

parent faa91428
...@@ -19,11 +19,11 @@ paths: ...@@ -19,11 +19,11 @@ paths:
description: "Successful echo of request data" description: "Successful echo of request data"
# nodes region # nodes region
/use-cases/{use_case}/layers/{layer_name}/nodes: /use-cases/{use_case}/nodes:
get: get:
security: security:
- JwtRegular: [] - JwtRegular: []
operationId: "routes.nodes.nodes_for_use_case_and_layer" operationId: "routes.nodes.nodes_for_use_case"
tags: tags:
- "Nodes" - "Nodes"
summary: "Get all nodes for a Layer" summary: "Get all nodes for a Layer"
...@@ -33,6 +33,54 @@ paths: ...@@ -33,6 +33,54 @@ paths:
description: "Name of the requested Use-Case" description: "Name of the requested Use-Case"
required: true required: true
type: "string" type: "string"
responses:
'200':
description: "Successful operation"
schema:
$ref: "#/definitions/NodeCollection"
/use-cases/{use_case}/tables/{table_name}/nodes:
get:
security:
- JwtRegular: []
operationId: "routes.nodes.nodes_for_use_case_and_table"
tags:
- "Nodes"
summary: "Get all nodes for a Layer"
parameters:
- name: "use_case"
in: "path"
description: "Name of the requested Use-Case"
required: true
type: "string"
- name: "table_name"
in: "path"
description: "Name of Table the layer belongs to"
required: true
type: "string"
responses:
'200':
description: "Successful operation"
schema:
$ref: "#/definitions/NodeCollection"
/use-cases/{use_case}/tables/{table_name}/layers/{layer_name}/nodes:
get:
security:
- JwtRegular: []
operationId: "routes.nodes.nodes_for_use_case_and_table_and_layer"
tags:
- "Nodes"
summary: "Get all nodes for a Layer"
parameters:
- name: "use_case"
in: "path"
description: "Name of the requested Use-Case"
required: true
type: "string"
- name: "table_name"
in: "path"
description: "Name of Table the layer belongs to"
required: true
type: "string"
- name: "layer_name" - name: "layer_name"
in: "path" in: "path"
description: "Name of the requested Layer" description: "Name of the requested Layer"
...@@ -42,9 +90,7 @@ paths: ...@@ -42,9 +90,7 @@ paths:
'200': '200':
description: "Successful operation" description: "Successful operation"
schema: schema:
$ref: "#/definitions/Node" $ref: "#/definitions/NodeCollection"
'404':
description: "No nodes found"
# endregion nodes # endregion nodes
# Layers region # Layers region
...@@ -61,12 +107,38 @@ paths: ...@@ -61,12 +107,38 @@ paths:
description: "Successful operation" description: "Successful operation"
schema: schema:
$ref: "#/definitions/LayerCollection" $ref: "#/definitions/LayerCollection"
/use-cases/{use_case}/tables/{table_name}/layers:
get:
security:
- JwtRegular: []
operationId: "routes.layers.get_by_use_case_and_table"
tags:
- "Layers"
summary: "Get single layer data"
parameters:
- name: "use_case"
in: "path"
description: "Name of the requested Use-Case"
required: true
type: "string"
- name: "table_name"
in: "path"
description: "Name of Table the Layer belongs to"
required: true
type: "string"
responses:
'200':
description: "Successful operation"
schema:
$ref: "#/definitions/LayerCollection"
/use-cases/{use_case}/layers/{name}: /use-cases/{use_case}/tables/{table_name}/layers/{name}:
get: get:
security: security:
- JwtRegular: [] - JwtRegular: []
operationId: "routes.layers.get_by_name_and_use_case" operationId: "routes.layers.get_by_name_and_use_case_and_table"
tags: tags:
- "Layers" - "Layers"
summary: "Get single layer data" summary: "Get single layer data"
...@@ -76,6 +148,11 @@ paths: ...@@ -76,6 +148,11 @@ paths:
description: "Name of the requested Use-Case" description: "Name of the requested Use-Case"
required: true required: true
type: "string" type: "string"
- name: "table_name"
in: "path"
description: "Name of Table the Layer belongs to"
required: true
type: "string"
- name: "name" - name: "name"
in: "path" in: "path"
description: "Name of the requested layer" description: "Name of the requested layer"
...@@ -138,6 +215,8 @@ definitions: ...@@ -138,6 +215,8 @@ definitions:
properties: properties:
use_case: use_case:
type: string type: string
table:
type: string
layer_name: layer_name:
type: string type: string
properties: properties:
...@@ -148,6 +227,10 @@ definitions: ...@@ -148,6 +227,10 @@ definitions:
type: array type: array
items: items:
type: string type: string
NodeCollection:
type: array
items:
$ref: "#/definitions/Node"
LayerCollection: LayerCollection:
type: array type: array
items: items:
......
...@@ -36,7 +36,12 @@ class Layer: ...@@ -36,7 +36,12 @@ class Layer:
def from_serializable_dict(self, layer_info: Dict, from_db=False): def from_serializable_dict(self, layer_info: Dict, from_db=False):
self.layer_name = layer_info['layer_name'] self.layer_name = layer_info['layer_name']
self.properties = layer_info['properties'] self.properties = layer_info['properties']
self.table = layer_info["table"]
if "table" in layer_info.keys():
self.table = layer_info["table"]
else:
self.table = "Unknown"
self.use_case = layer_info["use_case"] if "use_case" in layer_info.keys() else None self.use_case = layer_info["use_case"] if "use_case" in layer_info.keys() else None
self.total_properties = layer_info["total_properties"] if "total_properties"in layer_info.keys() else None self.total_properties = layer_info["total_properties"] if "total_properties"in layer_info.keys() else None
......
...@@ -49,8 +49,11 @@ class Repository(MongoRepositoryBase): ...@@ -49,8 +49,11 @@ class Repository(MongoRepositoryBase):
entries = super().get_entries(self._layer_collection, selection={'use_case': use_case}) entries = super().get_entries(self._layer_collection, selection={'use_case': use_case})
return [Layer(e) for e in entries] return [Layer(e) for e in entries]
def get_layers_by_name_and_use_case(self, layer_name: str, use_case: str) -> Layer: def get_layers_use_case_and_table(self, use_case: str, table: str) -> Layer:
entries = super().get_entries(self._layer_collection, selection={'layer_name': layer_name, 'use_case': use_case}) return [Layer(e) for e in list(super().get_entries(self._layer_collection, selection={'use_case': use_case, 'table': table}))]
def get_layers_by_name_and_use_case_and_table(self, layer_name: str, use_case: str, table: str) -> Layer:
entries = super().get_entries(self._layer_collection, selection={'layer_name': layer_name, 'use_case': use_case, 'table': table})
entries = list(entries) # materialize entries = list(entries) # materialize
if len(entries) > 1: if len(entries) > 1:
LOGGER.error(f"Use case + layer name was not unique for {use_case} and {layer_name}.") LOGGER.error(f"Use case + layer name was not unique for {use_case} and {layer_name}.")
...@@ -77,9 +80,20 @@ class Repository(MongoRepositoryBase): ...@@ -77,9 +80,20 @@ class Repository(MongoRepositoryBase):
projection={'_id': 0}) projection={'_id': 0})
return [e for e in entries] return [e for e in entries]
def get_layer_nodes_with_use_case(self, layer_name: str, use_case: str) -> List[Dict]: def get_nodes_for_use_case(self, use_case: str) -> List[Dict]:
entries = super().get_entries(self._layer_nodes_collection, selection={'use_case': use_case},
projection={'_id': 0})
return list(entries)
def get_nodes_for_use_case_and_table(self, use_case: str, table: str) -> List[Dict]:
'''Returns all nodes for the layer.'''
entries = super().get_entries(self._layer_nodes_collection, selection={'use_case': use_case, 'table': table},
projection={'_id': 0})
return list(entries)
def get_nodes_for_use_case_and_table_and_layer(self, layer_name: str, use_case: str, table: str) -> List[Dict]:
'''Returns all nodes for the layer.''' '''Returns all nodes for the layer.'''
entries = super().get_entries(self._layer_nodes_collection, selection={'layer_name': layer_name, 'use_case': use_case}, entries = super().get_entries(self._layer_nodes_collection, selection={'layer_name': layer_name, 'use_case': use_case, 'table': table},
projection={'_id': 0}) projection={'_id': 0})
return list(entries) return list(entries)
......
...@@ -78,6 +78,11 @@ class MessageHandler: ...@@ -78,6 +78,11 @@ class MessageHandler:
if len(layers) == 0: if len(layers) == 0:
layers = self._fetch_layer_information(use_case, table) layers = self._fetch_layer_information(use_case, table)
# if there are no layers, abort
if len(layers) == 0:
LOGGER.warning(f"No layers available for '{use_case}'.'{table}', ignoring trace.")
return
nodes = [] nodes = []
for layer in layers: for layer in layers:
...@@ -91,7 +96,8 @@ class MessageHandler: ...@@ -91,7 +96,8 @@ class MessageHandler:
node["use_case"] = layer.use_case node["use_case"] = layer.use_case
nodes.append(node) nodes.append(node)
self._repository.add_layer_nodes(nodes) if len(nodes) > 0:
self._repository.add_layer_nodes(nodes)
def handle_new_traces_available(self): def handle_new_traces_available(self):
# get all traces and call the Processor # get all traces and call the Processor
......
...@@ -16,8 +16,11 @@ def get_by_name(name): ...@@ -16,8 +16,11 @@ def get_by_name(name):
else: else:
return Response(status=404) return Response(status=404)
def get_by_name_and_use_case(name: str, use_case: str): def get_by_use_case_and_table(use_case: str, table_name: str):
res = repo.get_layers_by_name_and_use_case(name, use_case) return [layer.to_serializable_dict() for layer in repo.get_layers_use_case_and_table(use_case, table_name)]
def get_by_name_and_use_case_and_table(name: str, use_case: str, table_name: str):
res = repo.get_layers_by_name_and_use_case_and_table(name, use_case, table_name)
if res is not None: if res is not None:
return res.to_serializable_dict() return res.to_serializable_dict()
else: else:
......
...@@ -8,9 +8,16 @@ repo = Repository() ...@@ -8,9 +8,16 @@ repo = Repository()
#region nodes #region nodes
def nodes_for_use_case_and_layer(layer_name: str, use_case: str) -> List[Dict]:
res = repo.get_layer_nodes_with_use_case(layer_name, use_case)
if res is not None and len(res) > 0: def nodes_for_use_case(use_case: str) -> List[Dict]:
return res res = repo.get_nodes_for_use_case(use_case)
else: return res
return Response(status=404)
\ No newline at end of file def nodes_for_use_case_and_table(use_case: str, table_name: str) -> List[Dict]:
res = repo.get_nodes_for_use_case_and_table(use_case, table_name)
return res
def nodes_for_use_case_and_table_and_layer(layer_name: str, use_case: str, table_name: str) -> List[Dict]:
res = repo.get_nodes_for_use_case_and_table_and_layer(layer_name, use_case, table_name)
return res
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment