mirror of
https://github.com/Telecominfraproject/wlan-cloud-design-diagrams.git
synced 2025-11-02 03:27:52 +00:00
1189 lines
68 KiB
XML
1189 lines
68 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
|
<!--Created by yEd 3.19.1.1-->
|
|
<key attr.name="Description" attr.type="string" for="graph" id="d0"/>
|
|
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
|
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
|
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
|
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
|
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
|
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
|
<key for="graphml" id="d7" yfiles.type="resources"/>
|
|
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
|
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
|
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
|
<graph edgedefault="directed" id="G">
|
|
<data key="d0" xml:space="preserve"/>
|
|
<node id="n0" yfiles.foldertype="group">
|
|
<data key="d4" xml:space="preserve"/>
|
|
<data key="d6">
|
|
<y:ProxyAutoBoundsNode>
|
|
<y:Realizers active="0">
|
|
<y:GroupNode>
|
|
<y:Geometry height="2927.7772350302976" width="2249.0511982759886" x="314.21327329119856" y="-258.3100373825456"/>
|
|
<y:Fill color="#F5F5F5" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="2249.0511982759886" x="0.0" xml:space="preserve" y="0.0">Cloud SDK</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="15" leftF="15.233015771301325" right="4" rightF="3.827510204081591" top="109" topF="108.80643172401915"/>
|
|
</y:GroupNode>
|
|
<y:GroupNode>
|
|
<y:Geometry height="50.0" width="50.0" x="275.0" y="45.0"/>
|
|
<y:Fill color="#F5F5F5" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.0" x="0.0" xml:space="preserve" y="0.0">1</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
|
</y:GroupNode>
|
|
</y:Realizers>
|
|
</y:ProxyAutoBoundsNode>
|
|
</data>
|
|
<graph edgedefault="directed" id="n0:">
|
|
<node id="n0::n0" yfiles.foldertype="group">
|
|
<data key="d4" xml:space="preserve"/>
|
|
<data key="d6">
|
|
<y:ProxyAutoBoundsNode>
|
|
<y:Realizers active="0">
|
|
<y:GroupNode>
|
|
<y:Geometry height="1090.5379287014134" width="322.4272690638168" x="344.44628906249994" y="98.16240996647355"/>
|
|
<y:Fill color="#CAECFF84" transparent="false"/>
|
|
<y:BorderStyle color="#666699" type="dotted" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="322.4272690638168" x="0.0" xml:space="preserve" y="0.0">Southbound interfaces to/from APs</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="6" leftF="6.4272690638165955" right="0" rightF="0.0" top="0" topF="0.0"/>
|
|
</y:GroupNode>
|
|
<y:GroupNode>
|
|
<y:Geometry height="50.0" width="50.0" x="245.0" y="380.0"/>
|
|
<y:Fill color="#CAECFF84" transparent="false"/>
|
|
<y:BorderStyle color="#666699" type="dotted" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.0" x="0.0" xml:space="preserve" y="0.0">2</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
|
</y:GroupNode>
|
|
</y:Realizers>
|
|
</y:ProxyAutoBoundsNode>
|
|
</data>
|
|
<graph edgedefault="directed" id="n0::n0:">
|
|
<node id="n0::n0::n0">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="585.6849362599207" width="286.0000000000001" x="365.8735581263166" y="134.82842559147355"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="583.4453125" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="263.48828125" x="11.255859375000057" xml:space="preserve" y="1.1198118799603662">OpenSync Gateway
|
|
- N instances
|
|
|
|
Role:
|
|
- performs mutual auth with APs
|
|
using SSL certificates
|
|
- terminates connections from APs
|
|
over ovsdb protocol
|
|
- redirects APs to appropriate
|
|
cloud instances or controllers
|
|
- configures APs according to
|
|
provisioned info (reads it from the
|
|
in-memory cache via SSC )
|
|
- configures AP to post metrics over
|
|
specific MQTT broker and specific topic
|
|
- subscribes to AP topics in MQTT broker
|
|
and listens for AP metric reports
|
|
- converts AP metric reports into
|
|
internal cloud format and posts them onto
|
|
kafka queues via SSC
|
|
- subscribes to changes in ovsdb status
|
|
tables on AP (monitor), creates AP
|
|
metrics/events from the data and posts
|
|
those metrics/events into the cloud
|
|
using SSC
|
|
|
|
Functions:
|
|
- MQTT client
|
|
- OVSDB client
|
|
- Register AP routes, register OSGWs
|
|
- Translate metrics from Opensync
|
|
protobuf into CU internal format
|
|
|
|
Exposes APIs:
|
|
- List AP Sessions
|
|
- Terminate AP Session
|
|
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down</y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n0::n1">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="208.40674157303363" width="286.0" x="365.8735581263166" y="965.2935970948536"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="187.7265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="217.275390625" x="34.3623046875" xml:space="preserve" y="10.34008953651687">AP firmware broker
|
|
- N instances
|
|
|
|
Functions:
|
|
- firmware pull from AP
|
|
triggered by a change in ovsdb table
|
|
|
|
Exposes APIs:
|
|
- get FW image from the repository
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n0::n2">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="190.88363382802845" width="275.99999999999994" x="365.87355812631654" y="757.5516605132074"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="173.59375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="238.591796875" x="18.7041015625" xml:space="preserve" y="8.644941914014225">AP Port Forwarder service
|
|
- 1 instance
|
|
|
|
Functions:
|
|
- mediates SSH sessions between APs
|
|
and tech support personnel to traverse
|
|
NATs and firewalls
|
|
|
|
Deployment tasks:
|
|
- create container in k8s
|
|
- expose a range of externally
|
|
accessible ports for SSH sessions<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
</graph>
|
|
</node>
|
|
<node id="n0::n1">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="270.60057496107447" width="330.8010405505952" x="2213.6359208125104" y="622.2806380808382"/>
|
|
<y:Fill color="#CCCCFF" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="187.7265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="281.1015625" x="24.849739025297822" xml:space="preserve" y="41.437006230537236">Cassandra DB cluster
|
|
External component
|
|
- cluster of N
|
|
|
|
Functions:
|
|
- Stores Alarms, client info, client sessions,
|
|
equipment status, network status,
|
|
equipment routes
|
|
- Medium-term storage for metrics and events
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n2">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="216.0" width="276.0" x="1816.4988879724224" y="-64.9990234375"/>
|
|
<y:Fill color="#CCCCFF" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="201.859375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="229.09375" x="23.453125" xml:space="preserve" y="7.0703125">Kafka Distributed Streaming Platform
|
|
External component
|
|
- cluster of N
|
|
|
|
Functions:
|
|
- Transports AP events, AP metrics,
|
|
cloud events, cloud metrics,
|
|
client metrics
|
|
- retains messages in the queues for a
|
|
predefined time window
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n3">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="157.44569288389516" width="286.0" x="2213.6359208125104" y="256.47510519077713"/>
|
|
<y:Fill color="#00FFFF" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="131.1953125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="257.798828125" x="14.1005859375" xml:space="preserve" y="13.125190191947581">Kubernetes (AWS/Azure/On-premises VMs)
|
|
All components of the Cloud RDK are
|
|
deployed inside the kubernetes cluster.
|
|
|
|
Container Network Interface - Calico
|
|
Persistent volumes - Gluster
|
|
Cloud metrics collection - Prometheus
|
|
Cloud metrics visualization - Graphana
|
|
K8S log aggregation service - Log4Stash<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n4">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="181.0" width="315.0" x="351.37355812631665" y="-112.83759003352645"/>
|
|
<y:Fill color="#CCCCFF" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="159.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="283.41015625" x="15.794921875" xml:space="preserve" y="10.76953125">Mosquitto MQTT Broker
|
|
External component
|
|
- cluster of N
|
|
|
|
Functions:
|
|
- accept metrics and events messages from APs
|
|
- deliver messages to OpenSync Gateways
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n5">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="251.54681647940083" width="238.52434456928836" x="2258.7558437659613" y="2248.994649467727"/>
|
|
<y:Fill color="#CCCCFF" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="244.2578125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="201.314453125" x="18.604945722144294" xml:space="preserve" y="3.6445019897005295">PostgreSQL RDBMS
|
|
External component
|
|
- replicated pair of instances
|
|
|
|
Functions:
|
|
- Stores
|
|
portal user info, customer info,
|
|
location info, equipment info,
|
|
AP profiles, service profiles,
|
|
firmware image info,
|
|
OUI manufacturer info
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to create
|
|
backup/restore without
|
|
service interruption<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n6">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="694.7414354038556" width="419.61347311488794" x="1721.2755940443203" y="523.9304543396773"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="654.109375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="383.294921875" x="18.159275619943855" xml:space="preserve" y="20.316030201927788">Scalable Service Container ( aka SSC )
|
|
- N instances
|
|
|
|
Role:
|
|
- implements business logic in services
|
|
- scales better than Prov because it is
|
|
not limited by connections to RDBMS
|
|
- persists and provides access to
|
|
the system events, equipment metrics,
|
|
equipment status, network status,
|
|
equipment routes,
|
|
alarms, and wireless client info
|
|
via configured datastore layer
|
|
|
|
Functions:
|
|
Alarm Service
|
|
- get Alarms for AP/Location/Customer
|
|
- CRUD for Alarms
|
|
Equipment Status Service
|
|
- CRUD for status
|
|
- get statuses for AP/Location/Customer/
|
|
Network Status Service
|
|
Equipment Routing Service
|
|
- register/unregister OSGW
|
|
- register/unregister equipment route for the OSGW
|
|
System Events Service
|
|
- CR for system events
|
|
- get system events for AP or Customer in a given time frame
|
|
Equipment Metrics Service
|
|
- CR for equipment metrics
|
|
- get metrics for AP in a given time frame
|
|
|
|
Wireless Clients Service
|
|
- CRUD for client info records
|
|
- get clients (basic info, fingerprint, stats - from client sessions)
|
|
for AP/Location/Customer
|
|
|
|
|
|
Exposes APIs:
|
|
- all of the functions above
|
|
- for all APIs that return potentially long
|
|
lists - use common pagination framework
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n7" yfiles.foldertype="group">
|
|
<data key="d4" xml:space="preserve"/>
|
|
<data key="d6">
|
|
<y:ProxyAutoBoundsNode>
|
|
<y:Realizers active="0">
|
|
<y:GroupNode>
|
|
<y:Geometry height="1416.4397885886806" width="745.3971175912922" x="344.4462890624999" y="1238.0274090590715"/>
|
|
<y:Fill color="#CAECFF84" transparent="false"/>
|
|
<y:BorderStyle color="#666699" type="dotted" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="745.3971175912922" x="0.0" xml:space="preserve" y="0.0">Northbound interfaces - portals and external systems</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="34" rightF="34.38394307116096" top="2" topF="1.6422352059923924"/>
|
|
</y:GroupNode>
|
|
<y:GroupNode>
|
|
<y:Geometry height="50.0" width="50.0" x="1206.0" y="785.0"/>
|
|
<y:Fill color="#CAECFF84" transparent="false"/>
|
|
<y:BorderStyle color="#666699" type="dotted" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.0" x="0.0" xml:space="preserve" y="0.0">2</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
|
</y:GroupNode>
|
|
</y:Realizers>
|
|
</y:ProxyAutoBoundsNode>
|
|
</data>
|
|
<graph edgedefault="directed" id="n0::n7:">
|
|
<node id="n0::n7::n0">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="699.7596116653034" width="412.24500672986915" x="628.214456852762" y="1276.3356598900639"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="696.5078125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="383.294921875" x="14.475042427434573" xml:space="preserve" y="1.6258995826517548">Portal Service
|
|
- N instances
|
|
|
|
Role:
|
|
- provides role-based access control to the APIs
|
|
- aggregation of internal API calls to
|
|
minimize chatter between the browser
|
|
and the cloud
|
|
- no business logic here
|
|
|
|
Functions:
|
|
- login for a portal user (users are provisioned in db)
|
|
- change password for a portal user
|
|
- CRUD portal users (name, password, role=Admin/User)
|
|
- get customer info (single customer, pre-provisioned in db)
|
|
- update customer info
|
|
- CRUD for location info - hierarchy
|
|
- CRUD for equipment
|
|
- bind/unbind equipment for a customer
|
|
- change equipment location
|
|
- CRUD for AP profile
|
|
- list APs attached to AP profile
|
|
- CRUD for Service profiles
|
|
- list AP profiles attached to Service profile
|
|
- list APs attached to Service profile
|
|
- bulk edit of AP radio channels for location
|
|
- bulk edit of AP radio cell sizes for location
|
|
- bulk edit of AP steering thresholds for location
|
|
- CRUD for FW images
|
|
- mark one FW image as a system default
|
|
- list all known FW images
|
|
- list APs that are using selected FW image
|
|
- get Alarms for AP/Location/Customer
|
|
- get equipment statuses for AP/Location/Customer
|
|
- get network status
|
|
- get system events for AP or Customer in a given time frame
|
|
- get metrics for AP in a given time frame (raw or rolled up)
|
|
- get clients (basic info, fingerprint, stats - from client sessions)
|
|
for AP/Location/Customer
|
|
- provision OUI manufacturer table
|
|
|
|
Exposes APIs:
|
|
- all of the functions above
|
|
- for all APIs that return potentially long
|
|
lists - use common pagination framework
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n7::n1">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="332.95233957553114" width="429.49631759129215" x="359.4462890624999" y="2306.5148580722207"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="314.921875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="391.05859375" x="19.218861920646077" xml:space="preserve" y="9.015232287765684">Integration Service
|
|
- N instances
|
|
|
|
Role:
|
|
- provides a way in into the cloud for the
|
|
API calls from external enterprise systems
|
|
- performs translation of the external calls
|
|
and data models into internal cloud
|
|
calls and internal cloud data model
|
|
|
|
Functions:
|
|
- get service adoption metrics (daily reports) in a given date range
|
|
- N connected users
|
|
- N unique users
|
|
- N transfer bytes up/down
|
|
- average US/DS user data rate
|
|
- per (Day, Week, Month)
|
|
- per (Customer, AP, Location, Global)
|
|
|
|
Deployment tasks:
|
|
- create container in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n7::n2">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="254.10973297663622" width="297.9325842696628" x="499.71971527972835" y="2014.250198325476"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="244.2578125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="270.109375" x="13.911604634831406" xml:space="preserve" y="4.925960238318112">Webtoken Auth Service
|
|
- N instances
|
|
|
|
Role:
|
|
- generates tokens for the external
|
|
clients to access portal and integration APIs
|
|
|
|
Exposes APIs:
|
|
- token - for initial login with user/password
|
|
read provisioned user info from the Prov
|
|
- refreshToken - token refresh
|
|
- validateToken - check if the token is
|
|
correctly signed and not expired
|
|
|
|
Deployment tasks:
|
|
- create container in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n7::n3">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="208.40674157303351" width="228.33126591760288" x="369.8831909351592" y="1276.3356598900639"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="187.7265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="198.0859375" x="15.122664208801439" xml:space="preserve" y="10.34008953651687">Static Portal Container
|
|
- N instances (nginx)
|
|
|
|
Role:
|
|
- delivers static content
|
|
of the portal app - html,
|
|
javascript, css, etc. to
|
|
the browser
|
|
|
|
|
|
Deployment tasks:
|
|
- create container in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n7::n4">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="248.02595355805215" width="228.33126591760288" x="369.8831909351592" y="1556.1591693318662"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="201.859375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="198.0859375" x="15.122664208801439" xml:space="preserve" y="23.083289279026076">GraphQL Container
|
|
- N instances (node.js
|
|
+ Apollo GraphQL
|
|
server + our
|
|
extensions)
|
|
|
|
Role:
|
|
- translates portal app calls
|
|
into the REST API calls for
|
|
the cloud backend
|
|
|
|
Deployment tasks:
|
|
- create container in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
</graph>
|
|
</node>
|
|
<node id="n0::n8">
|
|
<data key="d4" xml:space="preserve"/>
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="1016.4322305162295" width="466.07191011235955" x="1181.6260191382066" y="1458.3639153380104"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="950.8984375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="391.05859375" x="37.50665818117977" xml:space="preserve" y="32.76689650811477">Provisioning Service ( aka PROV )
|
|
- N instances - but limited by the
|
|
Postgres RDBMS limits on memory
|
|
and the number of connections
|
|
|
|
Role:
|
|
- implements business logic in services
|
|
- persists provisioning model
|
|
via configured datastore layer
|
|
- maintains integrity of provisioning model
|
|
|
|
Functions:
|
|
User Service
|
|
- change password for a portal user
|
|
- CRUD portal users (name, password, role=Admin/User)
|
|
Customer Service
|
|
- CRUD for a customer (single customer, pre-provisioned in db)
|
|
Location Service
|
|
- CRUD for location info - hierarchy
|
|
- get equipment ids for a location
|
|
and its children
|
|
Equipment Inventory Service
|
|
- CRUD for equipment
|
|
- bind/unbind equipment for a customer
|
|
- change equipment location
|
|
- get a batch of equipment for a given
|
|
set of ids
|
|
Equipment Configuration Service
|
|
- CRUD for AP profile
|
|
- attach/detach AP to an AP profile
|
|
- list ids of APs attached to AP profile
|
|
- CRUD for Service profiles
|
|
- attach/detach AP to Service profile
|
|
- list AP profiles attached to Service profile
|
|
- list ids of APs attached to Service profile
|
|
- bulk assign of AP radio channels for location
|
|
- bulk assign of AP radio cell sizes for location
|
|
- bulk assign of AP steering thresholds for location
|
|
- retrieve full AP config - with all associated profiles
|
|
Firmware Service
|
|
- CRUD for FW images
|
|
- mark one FW image as a system default
|
|
- list all known FW images
|
|
- list ids of APs that are using selected FW image
|
|
- assign FW image to an AP
|
|
OUI Lookup Service
|
|
- bulk provision OUI manufacturer table
|
|
- get manufacturer by OUI
|
|
- get manufacturers by a batch of OUIs
|
|
Adoption Metrics Service
|
|
- CR for adoption metrics
|
|
- get service adoption metrics (daily reports) in a given date range
|
|
- N connected users
|
|
- N unique users
|
|
- N transfer bytes up/down
|
|
- average US/DS user data rate
|
|
- per (Day, Week, Month)
|
|
- per (Customer, AP, Location, Global)
|
|
|
|
Exposes APIs:
|
|
- all of the functions above
|
|
- for all APIs that return potentially long
|
|
lists - use common pagination framework
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n9">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="241.21574529503778" width="330.54603174603153" x="878.4122737739731" y="947.4845933728493"/>
|
|
<y:Fill color="#99CC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="215.9921875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="301.896484375" x="14.324773685515765" xml:space="preserve" y="12.611778897518889">Shared Mapped Disk Volume
|
|
|
|
Role:
|
|
- provide shared file system to store and
|
|
retrieve the following:
|
|
- AP firmware images
|
|
- AP Captive Portal files - logos,
|
|
text blocks, username/passwords
|
|
|
|
Deploymentr tasks:
|
|
- configure GlusterFS distributed filesystem cluster
|
|
- create disk volume in it
|
|
- map it to the k8s nodes
|
|
- make sure it gets mapped/remapped
|
|
when new nodes spawn<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n10">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="60.14556009070293" width="315.0" x="734.3341635277676" y="-52.41037007887792"/>
|
|
<y:Fill color="#99CC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="288.6953125" x="13.15234375" xml:space="preserve" y="-0.19284495464853535">Non-Shared Mapped Disk Volume
|
|
Each one is tied to a separate MQTT broker node
|
|
|
|
Stores MQTT node data - inflight messages, etc.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n11">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="119.20087074829931" width="293.61790476190436" x="2157.3199864366347" y="-16.599458811649654"/>
|
|
<y:Fill color="#99CC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="102.9296875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="247.931640625" x="22.843132068452178" xml:space="preserve" y="8.135591624149654">Non-Shared Mapped Disk Volume
|
|
Each one is tied to a separate Kafka node.
|
|
|
|
Stores inflight messages in Kafka
|
|
Each queue has its own retention policy,
|
|
messages can be stored from X minutes
|
|
to N days.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n12">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="78.47307029478463" width="286.0" x="2235.0180160506056" y="941.7695207801871"/>
|
|
<y:Fill color="#99CC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="271.94921875" x="7.025390625" xml:space="preserve" y="8.97091014739226">Non-Shared Mapped Disk Volume
|
|
Each one is tied to a separate Cassandra node
|
|
|
|
Stores per-node partition data<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n13">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="73.38209523809519" width="285.4723446712014" x="2235.281843715005" y="2549.065654283588"/>
|
|
<y:Fill color="#99CC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="277.4921875" x="3.9900785856007133" xml:space="preserve" y="6.425422619047367">Non-Shared Mapped Disk Volume
|
|
Each one is tied to a separate PostgreSQL node
|
|
|
|
Stores per-node RDBMS data<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14" yfiles.foldertype="group">
|
|
<data key="d4" xml:space="preserve"/>
|
|
<data key="d6">
|
|
<y:ProxyAutoBoundsNode>
|
|
<y:Realizers active="0">
|
|
<y:GroupNode>
|
|
<y:Geometry height="345.87885141239974" width="639.5012981201382" x="966.708938244552" y="196.09693198237858"/>
|
|
<y:Fill color="#CAECFF84" transparent="false"/>
|
|
<y:BorderStyle color="#666699" type="dotted" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="639.5012981201382" x="0.0" xml:space="preserve" y="0.0">Stream Processors - base features</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
|
</y:GroupNode>
|
|
<y:GroupNode>
|
|
<y:Geometry height="50.0" width="50.0" x="555.0" y="316.0"/>
|
|
<y:Fill color="#CAECFF84" transparent="false"/>
|
|
<y:BorderStyle color="#666699" type="dotted" width="1.0"/>
|
|
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#99CCFF" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.0" x="0.0" xml:space="preserve" y="0.0">2</y:NodeLabel>
|
|
<y:Shape type="roundrectangle"/>
|
|
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
|
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
|
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
|
</y:GroupNode>
|
|
</y:Realizers>
|
|
</y:ProxyAutoBoundsNode>
|
|
</data>
|
|
<graph edgedefault="directed" id="n0::n14:">
|
|
<node id="n0::n14::n0">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="294.2128357873998" width="254.95646441947542" x="1336.2537719452148" y="232.76294760737858"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="272.5234375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="229.908203125" x="12.524130647237598" xml:space="preserve" y="4.0">Common notes on SPs
|
|
- for the first release deploy all stream
|
|
processor in one JVM process,
|
|
adjust after perf testing
|
|
|
|
SPs use SSC to
|
|
- read required provisioning
|
|
data from the in-memory cache
|
|
- write updates to equipment
|
|
status and network status
|
|
- raise/clear alarms
|
|
- write equipment metrics
|
|
and system events
|
|
- write wireless client info
|
|
- get manufacturer details by OUI
|
|
|
|
Deployment tasks:
|
|
- create containers in k8s
|
|
- create scripts to scale up/down</y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14::n1">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="35.80260290397371" width="168.99523363940125" x="1115.8802526376014" y="242.82922591311484"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="155.9453125" x="6.5249605697006245" xml:space="preserve" y="8.834895201986853">AdoptionMetricsProcessor<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14::n2">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="35.80260290397371" width="226.52888493775845" x="1087.1134269884228" y="298.59549924774586"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="210.953125" x="7.787879968879224" xml:space="preserve" y="8.834895201986853">ClientBlockListChangedPushTrigger<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14::n3">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="35.80260290397371" width="187.16375510204034" x="981.708938244552" y="425.3406288504373"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="159.15625" x="14.00375255102017" xml:space="preserve" y="8.834895201986853">EmailNotificationProcessor<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14::n4">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="35.80260290397371" width="187.1637551020408" x="1126.4785568241402" y="481.10690218506835"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="175.005859375" x="6.078947863520398" xml:space="preserve" y="8.834895201986853">EquipmentConfigPushTrigger<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14::n5">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="35.80260290397371" width="122.15815856055485" x="1191.484153365626" y="425.3406288504373"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="106.955078125" x="7.601540217777483" xml:space="preserve" y="8.834895201986853">EquipmentAlarms
|
|
<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n0::n14::n6">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="51.01518583740312" width="281.0" x="1032.6423119261813" y="354.3617725823769"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="259.158203125" x="10.9208984375" xml:space="preserve" y="9.374780418701562">CustomerPortalDashboardPartialAggregator
|
|
CustomerPortalDashboardAggregator
|
|
<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
</graph>
|
|
</node>
|
|
</graph>
|
|
</node>
|
|
<node id="n1">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="52.3330078125" width="80.0" x="138.1700374531835" y="472.8416997308052"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.697265625" x="1.6513671875" xml:space="preserve" y="17.10009765625">Access Point<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n2">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="52.0" width="197.0" x="-31.794116309452264" y="1851.0987165163665"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="135.466796875" x="30.7666015625" xml:space="preserve" y="16.93359375">Portal Web Application<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<node id="n3">
|
|
<data key="d6">
|
|
<y:ShapeNode>
|
|
<y:Geometry height="52.0" width="158.0" x="-9.035892273171086" y="2273.4905979280134"/>
|
|
<y:Fill color="#FFCC00" transparent="false"/>
|
|
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="102.630859375" x="27.6845703125" xml:space="preserve" y="16.93359375">External Systems<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
|
<y:Shape type="rectangle"/>
|
|
</y:ShapeNode>
|
|
</data>
|
|
</node>
|
|
<edge id="n0::e0" source="n0::n14" target="n0::n2">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="34.44764857339146" sy="-26.893973798425733" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="standard" target="standard"/>
|
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="106.07278699387757" y="-19.849451632473233">
|
|
<y:LabelModel>
|
|
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
|
|
</y:LabelModel>
|
|
<y:ModelParameter>
|
|
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
|
|
</y:ModelParameter>
|
|
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
|
|
</y:EdgeLabel>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e1" source="n0::n6" target="n0::n1">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="standard" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e2" source="n0::n14" target="n0::n6">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="39.13984768126693" sy="109.17980032996206" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="standard" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e3" source="n0::n8" target="n0::n5">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e4" source="n0::n0::n0" target="n0::n4">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="-19.233104611577403" sy="-292.6519730865133" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="standard" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e5" source="n0::n0::n1" target="n0::n8">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e6" source="n0::n7::n0" target="n0::n8">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e7" source="n0::n7::n0" target="n0::n6">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e0" source="n1" target="n0::n4">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="standard" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e1" source="n0::n0::n0" target="n1">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e2" source="n2" target="n0::n7::n4">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="-35.009952489081684" ty="20.90091429966492"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e3" source="n3" target="n0::n7::n1">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e4" source="n2" target="n0::n7::n2">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e5" source="n3" target="n0::n7::n2">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e8" source="n0::n7::n1" target="n0::n8">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e9" source="n0::n7::n2" target="n0::n8">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e6" source="n1" target="n0::n0::n1">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e7" source="n3" target="n0::n7::n0">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e10" source="n0::n0::n0" target="n0::n6">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e11" source="n0::n6" target="n0::n2">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e12" source="n0::n4" target="n0::n10">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e13" source="n0::n0::n1" target="n0::n9">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e14" source="n0::n8" target="n0::n9">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e15" source="n0::n2" target="n0::n11">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e16" source="n0::n1" target="n0::n12">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e17" source="n0::n5" target="n0::n13">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e8" source="n2" target="n0::n7::n1">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::e18" source="n0::n6" target="n0::n8">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e9" source="n1" target="n0::n0::n2">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="e10" source="n2" target="n0::n7::n3">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
<edge id="n0::n7::e0" source="n0::n7::n4" target="n0::n7::n0">
|
|
<data key="d10">
|
|
<y:PolyLineEdge>
|
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
|
<y:Arrows source="none" target="standard"/>
|
|
<y:BendStyle smoothed="false"/>
|
|
</y:PolyLineEdge>
|
|
</data>
|
|
</edge>
|
|
</graph>
|
|
<data key="d7">
|
|
<y:Resources/>
|
|
</data>
|
|
</graphml>
|