Files
wlan-cloud-design-diagrams/CloudSDK_integration_env_deployment.graphml
2020-05-12 16:01:54 -04:00

489 lines
29 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="1541.057351512357" width="1311.614779638399" x="675.9404794221862" y="-20.83714651600718"/>
<y:Fill color="#F2F0D8" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#B7B69E" 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="1311.614779638399" x="0.0" xml:space="preserve" y="0.0">Docker container: all-cloud-and-opensync-gw-and-mqtt</y:NodeLabel>
<y:Shape type="rectangle"/>
<y:DropShadow color="#D2D2D2" offsetX="4" offsetY="4"/>
<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="120.0" y="60.0"/>
<y:Fill color="#F2F0D8" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#B7B69E" 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="63.75830078125" x="-6.879150390625" xml:space="preserve" y="0.0">Folder 5</y:NodeLabel>
<y:Shape type="rectangle"/>
<y:DropShadow color="#D2D2D2" offsetX="4" offsetY="4"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.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="1352.391335887357" width="1277.614779638399" x="690.9404794221862" y="148.82886910899282"/>
<y:Fill color="#F2F0D8" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#B7B69E" 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="1277.614779638399" x="0.0" xml:space="preserve" y="0.0">Single Java Process: all-cloud-and-opensync-gw-in-one-process-0.0.1-SNAPSHOT.jar</y:NodeLabel>
<y:Shape type="rectangle"/>
<y:DropShadow color="#D2D2D2" offsetX="4" offsetY="4"/>
<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="19" rightF="18.63022709147026" top="0" topF="0.0"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="120.0" y="60.0"/>
<y:Fill color="#F2F0D8" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#B7B69E" 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="63.75830078125" x="-6.879150390625" xml:space="preserve" y="0.0">Folder 1</y:NodeLabel>
<y:Shape type="rectangle"/>
<y:DropShadow color="#D2D2D2" offsetX="4" offsetY="4"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.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="464.68493625992073" width="286.0000000000001" x="705.9404794221862" y="185.49488473399282"/>
<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="456.25" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="273.6953125" x="6.15234375" xml:space="preserve" y="4.217468129960309">OpenSync Gateway
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
- 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 to SSC
- subscribes to changes in ovsdb status
tables on AP (monitor), creates AP
metrics/events from the data and posts
those metrics/events to SSC
Functions:
- MQTT client
- OVSDB client
- Register AP routes, register OSGWs
- Translate metrics from Opensync
protobuf into CloudSDK format
Exposes APIs:
- List AP Sessions
- Terminate AP Session
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n0::n0::n1">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="177.40674157303363" width="286.0000000000001" x="705.9404794221862" y="669.587496371244"/>
<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="159.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="217.275390625" x="34.3623046875" xml:space="preserve" y="8.97290203651687">AP firmware broker
Functions:
- firmware pull from AP
triggered by a change in ovsdb table
- client fingerprint DB pull from AP
triggered by a change in ovsdb table
Exposes APIs:
- get FW image from the repository
- get Client Fingerprint DB
<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="621.7596116653034" width="412.24500672986915" x="705.9404794221862" y="864.4605933310465"/>
<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="611.7109375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="383.294921875" x="14.475042427434573" xml:space="preserve" y="5.024337082651755">Portal Service
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
- CRUD for Client Fingerprint DB
- 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 as REST APIs:
- all of the functions above
<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::n3">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="245.95233957553114" width="412.24500672986915" x="1455.6280569619798" y="1240.2678654208187"/>
<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="391.05859375" x="10.593206489934573" xml:space="preserve" y="0.8472635377654569">Integration Service
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)
<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::n4">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="185.10973297663622" width="297.9325842696628" x="1137.9404794221862" y="1301.1104720197136"/>
<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="270.109375" x="13.91160463483152" xml:space="preserve" y="5.757991488318112">Webtoken Auth Service
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
<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::n5">
<data key="d4" xml:space="preserve"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="821.4322305162295" width="368.24500672986915" x="1132.6260191382066" y="198.49488473399288"/>
<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="809.5703125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="355.966796875" x="6.139104927434573" xml:space="preserve" y="5.930959008114769">Provisioning Service ( aka PROV )
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)
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
- AP profile - part of equipment.details
- CRUD for Service profiles
- attach/detach AP 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
Client Fingerprint DB Service
- Upload new version of client fingerprint DB
- deliver client fingerprint DB to 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 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
<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::n6">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="566.2904138108597" width="419.61347311488794" x="1515.311558854227" y="446.9271152502224"/>
<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="541.046875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="383.294921875" x="18.159275619944083" xml:space="preserve" y="12.621769405429859">Scalable Service Container ( aka SSC )
Role:
- implements business logic in services
- 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 equipment status
- get equipment statuses for AP/Location/Customer
Network Status Service
- CRUD for network status
- get network status
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
<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::n7">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="67.59751546359212" width="187.1637551020408" x="1738.7419975430903" y="284.31656895146375"/>
<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="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="135.09765625" x="26.033049426020398" xml:space="preserve" y="17.66594523179606">Stream Processor
AP connectivity alarms<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::n8">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="67.59751546359212" width="187.1637551020408" x="1530.8710258680758" y="284.31656895146375"/>
<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="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="104.435546875" x="41.3641041135204" xml:space="preserve" y="17.66594523179606">Stream Processor
AP Key analytics<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::n9">
<data key="d5"/>
<data key="d6">
<y:ShapeNode>
<y:Geometry height="97.0" width="634.1123595505619" x="1242.3393258426968" y="1074.247191011236"/>
<y:Fill color="#00FFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" 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="545.353515625" x="44.37942196278095" xml:space="preserve" y="32.3671875">Note: no persistence in this deployment.
All changes that are made via REST APIs are lost when the container is shutdown or restarted<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="103.0" width="315.0" x="691.4404794221862" y="15.82886910899282"/>
<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="74.6640625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="283.41015625" x="15.794921875" xml:space="preserve" y="14.16796875">Mosquitto MQTT Broker
Functions:
- accept metrics and events messages from APs
- deliver messages to OpenSync Gateways
<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="n1">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="97.0" width="81.0" x="456.59423710158217" y="369.3373528639532"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" 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="63.748046875" x="8.6259765625" xml:space="preserve" y="32.3671875">AP
real or VM<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="47.0" width="187.1637551020408" x="403.51235955056177" y="1151.8403991636983"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" 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="141.63671875" x="22.763518176020398" xml:space="preserve" y="7.3671875">Integration Tests Driver
REST API caller<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="e0" source="n1" target="n0::n1">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<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:QuadCurveEdge>
</data>
</edge>
<edge id="e1" source="n1" target="n0::n0::n0">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<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:QuadCurveEdge>
</data>
</edge>
<edge id="e2" source="n1" target="n0::n0::n1">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<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:QuadCurveEdge>
</data>
</edge>
<edge id="e3" source="n2" target="n0::n0::n2">
<data key="d10">
<y:QuadCurveEdge straightness="0.1">
<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:QuadCurveEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>