Skip to content
Snippets Groups Projects
Commit 3e81bea6 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Monitoring component:

- Added link_id as KPI descriptor field
parent 877d2dae
No related branches found
No related tags found
2 merge requests!235Release TeraFlowSDN 3.0,!160Resolve "(CTTC) Forecaster component"
...@@ -36,12 +36,13 @@ class ManagementDB(): ...@@ -36,12 +36,13 @@ class ManagementDB():
kpi_id INTEGER PRIMARY KEY AUTOINCREMENT, kpi_id INTEGER PRIMARY KEY AUTOINCREMENT,
kpi_description TEXT, kpi_description TEXT,
kpi_sample_type INTEGER, kpi_sample_type INTEGER,
device_id INTEGER, device_id STRING,
endpoint_id INTEGER, endpoint_id STRING,
service_id INTEGER, service_id STRING,
slice_id INTEGER, slice_id STRING,
connection_id INTEGER, connection_id STRING,
monitor_flag INTEGER link_id STRING,
monitor_flag STRING
); );
""") """)
LOGGER.debug("KPI table created in the ManagementDB") LOGGER.debug("KPI table created in the ManagementDB")
...@@ -87,13 +88,13 @@ class ManagementDB(): ...@@ -87,13 +88,13 @@ class ManagementDB():
LOGGER.debug(f"Alarm table cannot be created in the ManagementDB. {e}") LOGGER.debug(f"Alarm table cannot be created in the ManagementDB. {e}")
raise Exception raise Exception
def insert_KPI(self,kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id): def insert_KPI(self,kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id,link_id):
try: try:
c = self.client.cursor() c = self.client.cursor()
c.execute("SELECT kpi_id FROM kpi WHERE device_id is ? AND kpi_sample_type is ? AND endpoint_id is ? AND service_id is ? AND slice_id is ? AND connection_id is ?",(device_id,kpi_sample_type,endpoint_id,service_id,slice_id,connection_id)) c.execute("SELECT kpi_id FROM kpi WHERE device_id is ? AND kpi_sample_type is ? AND endpoint_id is ? AND service_id is ? AND slice_id is ? AND connection_id is ? AND link_id is ?",(device_id,kpi_sample_type,endpoint_id,service_id,slice_id,connection_id,link_id))
data=c.fetchone() data=c.fetchone()
if data is None: if data is None:
c.execute("INSERT INTO kpi (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id) VALUES (?,?,?,?,?,?,?)", (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id)) c.execute("INSERT INTO kpi (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id,link_id) VALUES (?,?,?,?,?,?,?,?)", (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id,link_id))
self.client.commit() self.client.commit()
kpi_id = c.lastrowid kpi_id = c.lastrowid
LOGGER.debug(f"KPI {kpi_id} succesfully inserted in the ManagementDB") LOGGER.debug(f"KPI {kpi_id} succesfully inserted in the ManagementDB")
......
...@@ -96,6 +96,7 @@ class MetricsDB(): ...@@ -96,6 +96,7 @@ class MetricsDB():
'service_id SYMBOL,' \ 'service_id SYMBOL,' \
'slice_id SYMBOL,' \ 'slice_id SYMBOL,' \
'connection_id SYMBOL,' \ 'connection_id SYMBOL,' \
'link_id SYMBOL,' \
'timestamp TIMESTAMP,' \ 'timestamp TIMESTAMP,' \
'kpi_value DOUBLE)' \ 'kpi_value DOUBLE)' \
'TIMESTAMP(timestamp);' 'TIMESTAMP(timestamp);'
...@@ -106,7 +107,7 @@ class MetricsDB(): ...@@ -106,7 +107,7 @@ class MetricsDB():
LOGGER.debug(f"Table {self.table} cannot be created. {e}") LOGGER.debug(f"Table {self.table} cannot be created. {e}")
raise Exception raise Exception
def write_KPI(self, time, kpi_id, kpi_sample_type, device_id, endpoint_id, service_id, slice_id, connection_id, kpi_value): def write_KPI(self, time, kpi_id, kpi_sample_type, device_id, endpoint_id, service_id, slice_id, connection_id, link_id, kpi_value):
device_name = self.name_mapping.get_device_name(device_id) or '' device_name = self.name_mapping.get_device_name(device_id) or ''
endpoint_name = self.name_mapping.get_endpoint_name(endpoint_id) or '' endpoint_name = self.name_mapping.get_endpoint_name(endpoint_id) or ''
...@@ -125,7 +126,9 @@ class MetricsDB(): ...@@ -125,7 +126,9 @@ class MetricsDB():
'endpoint_name': endpoint_name, 'endpoint_name': endpoint_name,
'service_id': service_id, 'service_id': service_id,
'slice_id': slice_id, 'slice_id': slice_id,
'connection_id': connection_id,}, 'connection_id': connection_id,
'link_id': link_id,
},
columns={ columns={
'kpi_value': kpi_value}, 'kpi_value': kpi_value},
at=datetime.datetime.fromtimestamp(time)) at=datetime.datetime.fromtimestamp(time))
......
...@@ -65,13 +65,14 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): ...@@ -65,13 +65,14 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
kpi_service_id = request.service_id.service_uuid.uuid kpi_service_id = request.service_id.service_uuid.uuid
kpi_slice_id = request.slice_id.slice_uuid.uuid kpi_slice_id = request.slice_id.slice_uuid.uuid
kpi_connection_id = request.connection_id.connection_uuid.uuid kpi_connection_id = request.connection_id.connection_uuid.uuid
kpi_link_id = request.link_id.link_uuid.uuid
if request.kpi_id.kpi_id.uuid != "": if request.kpi_id.kpi_id.uuid != "":
response.kpi_id.uuid = request.kpi_id.kpi_id.uuid response.kpi_id.uuid = request.kpi_id.kpi_id.uuid
# Here the code to modify an existing kpi # Here the code to modify an existing kpi
else: else:
data = self.management_db.insert_KPI( data = self.management_db.insert_KPI(
kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id, kpi_slice_id, kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id, kpi_slice_id,
kpi_connection_id) kpi_connection_id, kpi_link_id)
response.kpi_id.uuid = str(data) response.kpi_id.uuid = str(data)
return response return response
...@@ -100,6 +101,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): ...@@ -100,6 +101,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
kpiDescriptor.service_id.service_uuid.uuid = str(kpi_db[5]) kpiDescriptor.service_id.service_uuid.uuid = str(kpi_db[5])
kpiDescriptor.slice_id.slice_uuid.uuid = str(kpi_db[6]) kpiDescriptor.slice_id.slice_uuid.uuid = str(kpi_db[6])
kpiDescriptor.connection_id.connection_uuid.uuid = str(kpi_db[7]) kpiDescriptor.connection_id.connection_uuid.uuid = str(kpi_db[7])
kpiDescriptor.link_id.link_uuid.uuid = str(kpi_db[8])
return kpiDescriptor return kpiDescriptor
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER) @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
...@@ -117,6 +119,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): ...@@ -117,6 +119,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
kpi_descriptor.service_id.service_uuid.uuid = str(item[5]) kpi_descriptor.service_id.service_uuid.uuid = str(item[5])
kpi_descriptor.slice_id.slice_uuid.uuid = str(item[6]) kpi_descriptor.slice_id.slice_uuid.uuid = str(item[6])
kpi_descriptor.connection_id.connection_uuid.uuid = str(item[7]) kpi_descriptor.connection_id.connection_uuid.uuid = str(item[7])
kpi_descriptor.link_id.link_uuid.uuid = str(item[8])
kpi_descriptor_list.kpi_descriptor_list.append(kpi_descriptor) kpi_descriptor_list.kpi_descriptor_list.append(kpi_descriptor)
return kpi_descriptor_list return kpi_descriptor_list
...@@ -135,11 +138,12 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer): ...@@ -135,11 +138,12 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
serviceId = kpiDescriptor.service_id.service_uuid.uuid serviceId = kpiDescriptor.service_id.service_uuid.uuid
sliceId = kpiDescriptor.slice_id.slice_uuid.uuid sliceId = kpiDescriptor.slice_id.slice_uuid.uuid
connectionId = kpiDescriptor.connection_id.connection_uuid.uuid connectionId = kpiDescriptor.connection_id.connection_uuid.uuid
linkId = kpiDescriptor.link_id.link_uuid.uuid
time_stamp = request.timestamp.timestamp time_stamp = request.timestamp.timestamp
kpi_value = getattr(request.kpi_value, request.kpi_value.WhichOneof('value')) kpi_value = getattr(request.kpi_value, request.kpi_value.WhichOneof('value'))
# Build the structure to be included as point in the MetricsDB # Build the structure to be included as point in the MetricsDB
self.metrics_db.write_KPI(time_stamp, kpiId, kpiSampleType, deviceId, endpointId, serviceId, sliceId, connectionId, kpi_value) self.metrics_db.write_KPI(time_stamp, kpiId, kpiSampleType, deviceId, endpointId, serviceId, sliceId, connectionId, linkId, kpi_value)
return Empty() return Empty()
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER) @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment