Loading src/webui/service/link/routes.py +16 −11 Original line number Diff line number Diff line Loading @@ -13,8 +13,9 @@ # limitations under the License. from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for from common.proto.context_pb2 import Empty, Link, LinkEvent, LinkId, LinkIdList, LinkList, DeviceId, TopologyId from flask import render_template, Blueprint, flash, session, redirect, url_for from common.proto.context_pb2 import Empty, LinkId, LinkList, TopologyId from common.tools.context_queries.EndPoint import get_endpoint_names from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Topology import json_topology_id from context.client.ContextClient import ContextClient Loading @@ -37,22 +38,26 @@ def home(): grpc_topology = context_client.GetTopology(TopologyId(**json_topo_id)) topo_link_uuids = {link_id.link_uuid.uuid for link_id in grpc_topology.link_ids} grpc_links: LinkList = context_client.ListLinks(Empty()) context_client.close() links = [ link for link in grpc_links.links if link.link_id.link_uuid.uuid in topo_link_uuids ] endpoint_ids = [] links = [] for link_ in grpc_links.links: if link_.link_id.link_uuid.uuid not in topo_link_uuids: continue links.append(link_) endpoint_ids.extend(link_.link_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() return render_template( 'link/home.html', links=links) return render_template('link/home.html', links=links, device_names=device_names, endpoints_data=endpoints_data) @link.route('detail/<path:link_uuid>', methods=('GET', 'POST')) def detail(link_uuid: str): request = LinkId() request.link_uuid.uuid = link_uuid request.link_uuid.uuid = link_uuid # pylint: disable=no-member context_client.connect() response = context_client.GetLink(request) device_names, endpoints_data = get_endpoint_names(context_client, response.link_endpoint_ids) context_client.close() return render_template('link/detail.html',link=response) return render_template('link/detail.html',link=response, device_names=device_names, endpoints_data=endpoints_data) src/webui/service/service/routes.py +27 −10 Original line number Diff line number Diff line Loading @@ -14,7 +14,8 @@ import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceList, ServiceTypeEnum, ServiceStatusEnum, Connection from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection from common.tools.context_queries.EndPoint import get_endpoint_names from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient Loading @@ -39,18 +40,25 @@ def home(): service_list = context_client.ListServices(request) # print(service_list) services = service_list.services context_not_found = False context_found = True except grpc.RpcError as e: if e.code() != grpc.StatusCode.NOT_FOUND: raise if e.details() != 'Context({:s}) not found'.format(context_uuid): raise services = [] context_not_found = True context_found = False if context_found: endpoint_ids = [] for service_ in services: endpoint_ids.extend(service_.service_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) else: device_names, endpoints_data = [],[] context_client.close() return render_template('service/home.html', services=services, context_not_found=context_not_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum) return render_template( 'service/home.html', services=services, device_names=device_names, endpoints_data=endpoints_data, context_not_found=not context_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum) @service.route('add', methods=['GET', 'POST']) Loading @@ -74,13 +82,22 @@ def detail(service_uuid: str): context_client.connect() response: Service = context_client.GetService(request) connections: Connection = context_client.ListConnections(request) connections = connections.connections endpoint_ids = [] endpoint_ids.extend(response.service_endpoint_ids) for connection in connections: endpoint_ids.extend(connection.path_hops_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() except Exception as e: flash('The system encountered an error and cannot show the details of this service.', 'warning') current_app.logger.exception(e) return redirect(url_for('service.home')) return render_template('service/detail.html', service=response, connections=connections,ste=ServiceTypeEnum, sse=ServiceStatusEnum) return render_template( 'service/detail.html', service=response, connections=connections, device_names=device_names, endpoints_data=endpoints_data, ste=ServiceTypeEnum, sse=ServiceStatusEnum) @service.get('<path:service_uuid>/delete') Loading src/webui/service/slice/routes.py +37 −23 Original line number Diff line number Diff line Loading @@ -14,22 +14,18 @@ # import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceList, Connection, SliceStatusEnum from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceStatusEnum from common.tools.context_queries.EndPoint import get_endpoint_names from context.client.ContextClient import ContextClient #from slice.client.SliceClient import SliceClient from slice.client.SliceClient import SliceClient slice = Blueprint('slice', __name__, url_prefix='/slice') context_client = ContextClient() #slice_client = SliceClient() slice_client = SliceClient() @slice.get('/') def home(): # flash('This is an info message', 'info') # flash('This is a danger message', 'danger') context_uuid = session.get('context_uuid', '-') if context_uuid == "-": flash("Please select a context!", "warning") Loading @@ -39,25 +35,36 @@ def home(): context_client.connect() try: slice_list = context_client.ListSlices(request) # print(slice_list) slices = slice_list.slices context_not_found = False context_found = True except grpc.RpcError as e: if e.code() != grpc.StatusCode.NOT_FOUND: raise if e.details() != 'Context({:s}) not found'.format(context_uuid): raise slices = [] context_not_found = True context_found = False if context_found: endpoint_ids = [] for slice_ in slices: endpoint_ids.extend(slice_.slice_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) else: device_names, endpoints_data = [],[] context_client.close() return render_template('slice/home.html',slices=slices, context_not_found=context_not_found, sse=SliceStatusEnum) # #@slice.route('add', methods=['GET', 'POST']) #def add(): # flash('Add slice route called', 'danger') # raise NotImplementedError() # return render_template('slice/home.html') # # return render_template( 'slice/home.html', slices=slices, device_names=device_names, endpoints_data=endpoints_data, context_not_found=not context_found, sse=SliceStatusEnum) @slice.route('add', methods=['GET', 'POST']) def add(): flash('Add slice route called', 'danger') raise NotImplementedError() return render_template('slice/home.html') @slice.get('<path:slice_uuid>/detail') def detail(slice_uuid: str): context_uuid = session.get('context_uuid', '-') Loading @@ -74,13 +81,20 @@ def detail(slice_uuid: str): context_client.connect() response: Slice = context_client.GetSlice(request) services = context_client.ListServices(req) endpoint_ids = [] endpoint_ids.extend(response.slice_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() except Exception as e: flash('The system encountered an error and cannot show the details of this slice.', 'warning') current_app.logger.exception(e) return redirect(url_for('slice.home')) return render_template('slice/detail.html', slice=response, sse=SliceStatusEnum, services=services) # return render_template( 'slice/detail.html', slice=response, device_names=device_names, endpoints_data=endpoints_data, sse=SliceStatusEnum, services=services) #@slice.get('<path:slice_uuid>/delete') #def delete(slice_uuid: str): # context_uuid = session.get('context_uuid', '-') Loading src/webui/service/templates/link/detail.html +8 −4 Original line number Diff line number Diff line Loading @@ -38,23 +38,27 @@ <tr> <th scope="col">Endpoint UUID</th> <th scope="col">Device</th> <th scope="col">Endpoint Type</th> </tr> </thead> <tbody> {% for end_point in link.link_endpoint_ids %} {% for endpoint in link.link_endpoint_ids %} <tr> <td> {{ end_point.endpoint_uuid.uuid }} {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} </td> <td> <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}"> {{ end_point.device_id.device_uuid.uuid }} <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}"> {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }} <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> </a> </td> <td> {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, ('', '-'))[1] }} </td> </tr> {% endfor %} </tbody> Loading src/webui/service/templates/link/home.html +4 −4 Original line number Diff line number Diff line Loading @@ -61,12 +61,12 @@ <td> <ul> {% for end_point in link.link_endpoint_ids %} {% for endpoint in link.link_endpoint_ids %} <li> {{ end_point.endpoint_uuid.uuid }} / {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} / Device: <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}"> {{ end_point.device_id.device_uuid.uuid }} <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}"> {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }} <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> Loading Loading
src/webui/service/link/routes.py +16 −11 Original line number Diff line number Diff line Loading @@ -13,8 +13,9 @@ # limitations under the License. from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for from common.proto.context_pb2 import Empty, Link, LinkEvent, LinkId, LinkIdList, LinkList, DeviceId, TopologyId from flask import render_template, Blueprint, flash, session, redirect, url_for from common.proto.context_pb2 import Empty, LinkId, LinkList, TopologyId from common.tools.context_queries.EndPoint import get_endpoint_names from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Topology import json_topology_id from context.client.ContextClient import ContextClient Loading @@ -37,22 +38,26 @@ def home(): grpc_topology = context_client.GetTopology(TopologyId(**json_topo_id)) topo_link_uuids = {link_id.link_uuid.uuid for link_id in grpc_topology.link_ids} grpc_links: LinkList = context_client.ListLinks(Empty()) context_client.close() links = [ link for link in grpc_links.links if link.link_id.link_uuid.uuid in topo_link_uuids ] endpoint_ids = [] links = [] for link_ in grpc_links.links: if link_.link_id.link_uuid.uuid not in topo_link_uuids: continue links.append(link_) endpoint_ids.extend(link_.link_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() return render_template( 'link/home.html', links=links) return render_template('link/home.html', links=links, device_names=device_names, endpoints_data=endpoints_data) @link.route('detail/<path:link_uuid>', methods=('GET', 'POST')) def detail(link_uuid: str): request = LinkId() request.link_uuid.uuid = link_uuid request.link_uuid.uuid = link_uuid # pylint: disable=no-member context_client.connect() response = context_client.GetLink(request) device_names, endpoints_data = get_endpoint_names(context_client, response.link_endpoint_ids) context_client.close() return render_template('link/detail.html',link=response) return render_template('link/detail.html',link=response, device_names=device_names, endpoints_data=endpoints_data)
src/webui/service/service/routes.py +27 −10 Original line number Diff line number Diff line Loading @@ -14,7 +14,8 @@ import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceList, ServiceTypeEnum, ServiceStatusEnum, Connection from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection from common.tools.context_queries.EndPoint import get_endpoint_names from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient Loading @@ -39,18 +40,25 @@ def home(): service_list = context_client.ListServices(request) # print(service_list) services = service_list.services context_not_found = False context_found = True except grpc.RpcError as e: if e.code() != grpc.StatusCode.NOT_FOUND: raise if e.details() != 'Context({:s}) not found'.format(context_uuid): raise services = [] context_not_found = True context_found = False if context_found: endpoint_ids = [] for service_ in services: endpoint_ids.extend(service_.service_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) else: device_names, endpoints_data = [],[] context_client.close() return render_template('service/home.html', services=services, context_not_found=context_not_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum) return render_template( 'service/home.html', services=services, device_names=device_names, endpoints_data=endpoints_data, context_not_found=not context_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum) @service.route('add', methods=['GET', 'POST']) Loading @@ -74,13 +82,22 @@ def detail(service_uuid: str): context_client.connect() response: Service = context_client.GetService(request) connections: Connection = context_client.ListConnections(request) connections = connections.connections endpoint_ids = [] endpoint_ids.extend(response.service_endpoint_ids) for connection in connections: endpoint_ids.extend(connection.path_hops_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() except Exception as e: flash('The system encountered an error and cannot show the details of this service.', 'warning') current_app.logger.exception(e) return redirect(url_for('service.home')) return render_template('service/detail.html', service=response, connections=connections,ste=ServiceTypeEnum, sse=ServiceStatusEnum) return render_template( 'service/detail.html', service=response, connections=connections, device_names=device_names, endpoints_data=endpoints_data, ste=ServiceTypeEnum, sse=ServiceStatusEnum) @service.get('<path:service_uuid>/delete') Loading
src/webui/service/slice/routes.py +37 −23 Original line number Diff line number Diff line Loading @@ -14,22 +14,18 @@ # import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceList, Connection, SliceStatusEnum from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceStatusEnum from common.tools.context_queries.EndPoint import get_endpoint_names from context.client.ContextClient import ContextClient #from slice.client.SliceClient import SliceClient from slice.client.SliceClient import SliceClient slice = Blueprint('slice', __name__, url_prefix='/slice') context_client = ContextClient() #slice_client = SliceClient() slice_client = SliceClient() @slice.get('/') def home(): # flash('This is an info message', 'info') # flash('This is a danger message', 'danger') context_uuid = session.get('context_uuid', '-') if context_uuid == "-": flash("Please select a context!", "warning") Loading @@ -39,25 +35,36 @@ def home(): context_client.connect() try: slice_list = context_client.ListSlices(request) # print(slice_list) slices = slice_list.slices context_not_found = False context_found = True except grpc.RpcError as e: if e.code() != grpc.StatusCode.NOT_FOUND: raise if e.details() != 'Context({:s}) not found'.format(context_uuid): raise slices = [] context_not_found = True context_found = False if context_found: endpoint_ids = [] for slice_ in slices: endpoint_ids.extend(slice_.slice_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) else: device_names, endpoints_data = [],[] context_client.close() return render_template('slice/home.html',slices=slices, context_not_found=context_not_found, sse=SliceStatusEnum) # #@slice.route('add', methods=['GET', 'POST']) #def add(): # flash('Add slice route called', 'danger') # raise NotImplementedError() # return render_template('slice/home.html') # # return render_template( 'slice/home.html', slices=slices, device_names=device_names, endpoints_data=endpoints_data, context_not_found=not context_found, sse=SliceStatusEnum) @slice.route('add', methods=['GET', 'POST']) def add(): flash('Add slice route called', 'danger') raise NotImplementedError() return render_template('slice/home.html') @slice.get('<path:slice_uuid>/detail') def detail(slice_uuid: str): context_uuid = session.get('context_uuid', '-') Loading @@ -74,13 +81,20 @@ def detail(slice_uuid: str): context_client.connect() response: Slice = context_client.GetSlice(request) services = context_client.ListServices(req) endpoint_ids = [] endpoint_ids.extend(response.slice_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() except Exception as e: flash('The system encountered an error and cannot show the details of this slice.', 'warning') current_app.logger.exception(e) return redirect(url_for('slice.home')) return render_template('slice/detail.html', slice=response, sse=SliceStatusEnum, services=services) # return render_template( 'slice/detail.html', slice=response, device_names=device_names, endpoints_data=endpoints_data, sse=SliceStatusEnum, services=services) #@slice.get('<path:slice_uuid>/delete') #def delete(slice_uuid: str): # context_uuid = session.get('context_uuid', '-') Loading
src/webui/service/templates/link/detail.html +8 −4 Original line number Diff line number Diff line Loading @@ -38,23 +38,27 @@ <tr> <th scope="col">Endpoint UUID</th> <th scope="col">Device</th> <th scope="col">Endpoint Type</th> </tr> </thead> <tbody> {% for end_point in link.link_endpoint_ids %} {% for endpoint in link.link_endpoint_ids %} <tr> <td> {{ end_point.endpoint_uuid.uuid }} {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} </td> <td> <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}"> {{ end_point.device_id.device_uuid.uuid }} <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}"> {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }} <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> </a> </td> <td> {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, ('', '-'))[1] }} </td> </tr> {% endfor %} </tbody> Loading
src/webui/service/templates/link/home.html +4 −4 Original line number Diff line number Diff line Loading @@ -61,12 +61,12 @@ <td> <ul> {% for end_point in link.link_endpoint_ids %} {% for endpoint in link.link_endpoint_ids %} <li> {{ end_point.endpoint_uuid.uuid }} / {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} / Device: <a href="{{ url_for('device.detail', device_uuid=end_point.device_id.device_uuid.uuid) }}"> {{ end_point.device_id.device_uuid.uuid }} <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}"> {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }} <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> Loading