Adding/Enhancing actors to respond to events

community
Steve L. Nyemba 8 years ago
parent e2c3199b49
commit a11c609d1d

@ -1,50 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" xmi.version="1.2" timestamp="2017-04-04T14:48:09">
<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" timestamp="2017-04-07T08:29:04" xmi.version="1.2" verified="false">
<XMI.header>
<XMI.documentation>
<XMI.exporter>umbrello uml modeller http://umbrello.kde.org</XMI.exporter>
<XMI.exporterVersion>1.6.9</XMI.exporterVersion>
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
</XMI.documentation>
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3"/>
<XMI.metamodel href="UML.xml" xmi.name="UML" xmi.version="1.3"/>
</XMI.header>
<XMI.content>
<UML:Model isLeaf="false" isRoot="false" xmi.id="m1" name="UML Model" isSpecification="false" isAbstract="false">
<UML:Model isRoot="false" isSpecification="false" name="UML Model" isAbstract="false" xmi.id="m1" isLeaf="false">
<UML:Namespace.ownedElement>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="folder" name="folder" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="datatype" name="datatype" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="rSZCzDKpjhw5" name="agent" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="interface" name="interface" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Model isLeaf="false" namespace="m1" isRoot="false" xmi.id="Logical View" name="Logical View" isSpecification="false" visibility="public" isAbstract="false">
<UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="folder" isAbstract="false" isLeaf="false" xmi.id="folder" visibility="public"/>
<UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="datatype" isAbstract="false" isLeaf="false" xmi.id="datatype" visibility="public"/>
<UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="agent" isAbstract="false" isLeaf="false" xmi.id="rSZCzDKpjhw5" visibility="public"/>
<UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="interface" isAbstract="false" isLeaf="false" xmi.id="interface" visibility="public"/>
<UML:Model isRoot="false" isSpecification="false" namespace="m1" name="Logical View" isAbstract="false" isLeaf="false" xmi.id="Logical View" visibility="public">
<UML:Namespace.ownedElement>
<UML:Package isLeaf="false" namespace="Logical View" isRoot="false" xmi.id="Datatypes" name="Datatypes" isSpecification="false" stereotype="folder" visibility="public" isAbstract="false">
<UML:Package isRoot="false" stereotype="folder" isSpecification="false" namespace="Logical View" name="Datatypes" isAbstract="false" isLeaf="false" xmi.id="Datatypes" visibility="public">
<UML:Namespace.ownedElement>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="fCoa6Ljfk80G" name="int" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="XVF672bO1S1I" name="char" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="HU1uO6O1JAZP" name="bool" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="UI3ER3SwXh1e" name="float" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="hc0i20yJS0Dp" name="double" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="6aqNkOnEgoR7" name="short" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="pt2Mb3yGdzxf" name="long" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="xvyPvAC0i1NS" name="unsigned int" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="P8f5w6BmxD8W" name="unsigned short" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="E7nr4kW1fSOb" name="unsigned long" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="abbIcwjz5O41" name="string" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="int" isAbstract="false" isLeaf="false" xmi.id="fCoa6Ljfk80G" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="char" isAbstract="false" isLeaf="false" xmi.id="XVF672bO1S1I" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="bool" isAbstract="false" isLeaf="false" xmi.id="HU1uO6O1JAZP" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="float" isAbstract="false" isLeaf="false" xmi.id="UI3ER3SwXh1e" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="double" isAbstract="false" isLeaf="false" xmi.id="hc0i20yJS0Dp" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="short" isAbstract="false" isLeaf="false" xmi.id="6aqNkOnEgoR7" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="long" isAbstract="false" isLeaf="false" xmi.id="pt2Mb3yGdzxf" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="unsigned int" isAbstract="false" isLeaf="false" xmi.id="xvyPvAC0i1NS" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="unsigned short" isAbstract="false" isLeaf="false" xmi.id="P8f5w6BmxD8W" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="unsigned long" isAbstract="false" isLeaf="false" xmi.id="E7nr4kW1fSOb" visibility="public"/>
<UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="string" isAbstract="false" isLeaf="false" xmi.id="abbIcwjz5O41" visibility="public"/>
</UML:Namespace.ownedElement>
</UML:Package>
<UML:Interface isLeaf="false" namespace="Logical View" isRoot="false" xmi.id="RXqBshUB41L5" name="Agent" isSpecification="false" stereotype="interface" visibility="public" isAbstract="true">
<UML:Interface isRoot="false" stereotype="interface" isSpecification="false" namespace="Logical View" name="Agent" isAbstract="true" isLeaf="false" xmi.id="RXqBshUB41L5" visibility="public">
<UML:Classifier.feature>
<UML:Operation isLeaf="false" isRoot="false" xmi.id="wViGJvmJF1zV" name="init" isQuery="false" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Operation isLeaf="false" isRoot="false" xmi.id="7FOYGyKLJkjG" name="execute" isQuery="false" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Operation isLeaf="false" isRoot="false" xmi.id="q8oPwCisiO61" name="status" isQuery="false" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Operation isLeaf="false" isRoot="false" ownerScope="classifier" xmi.id="2fGeoj3czd3G" name="instance" isQuery="false" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Operation isRoot="false" isQuery="false" isSpecification="false" name="init" isAbstract="false" isLeaf="false" xmi.id="wViGJvmJF1zV" visibility="public"/>
<UML:Operation isRoot="false" isQuery="false" isSpecification="false" name="execute" isAbstract="false" isLeaf="false" xmi.id="7FOYGyKLJkjG" visibility="public"/>
<UML:Operation isRoot="false" isQuery="false" isSpecification="false" name="status" isAbstract="false" isLeaf="false" xmi.id="q8oPwCisiO61" visibility="public"/>
<UML:Operation isRoot="false" isQuery="false" isSpecification="false" name="instance" isAbstract="false" isLeaf="false" xmi.id="2fGeoj3czd3G" visibility="public" ownerScope="classifier"/>
</UML:Classifier.feature>
</UML:Interface>
<UML:Interface isLeaf="false" namespace="Logical View" isRoot="false" xmi.id="dqWyyHKwPkeW" name="data-store" isSpecification="false" stereotype="interface" visibility="public" isAbstract="true"/>
<UML:Interface isRoot="false" stereotype="interface" isSpecification="false" namespace="Logical View" name="data-store" isAbstract="true" isLeaf="false" xmi.id="dqWyyHKwPkeW" visibility="public"/>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams>
<diagram showopsig="1" snapy="25" textcolor="#000000" showstereotype="1" documentation="" snapcsgrid="0" backgroundcolor="#ffffff" name="class diagram" fillcolor="#ffff00" showscope="1" showattribassocs="1" showpubliconly="0" usefillcolor="1" showpackage="1" linewidth="0" snapgrid="0" isopen="1" griddotcolor="#d3d3d3" canvasheight="0" linecolor="#ff0000" zoom="100" showatts="1" xmi.id="J1rdJrVlcu5U" snapx="25" font="Sans Serif,9,-1,5,50,0,0,0,0,0" localid="-1" showops="1" type="1" showattsig="1" showgrid="0" canvaswidth="0">
<diagram usefillcolor="1" linewidth="0" showpubliconly="0" snapy="25" isopen="1" showatts="1" zoom="100" griddotcolor="#d3d3d3" name="class diagram" canvasheight="0" showpackage="1" canvaswidth="0" type="1" showops="1" xmi.id="J1rdJrVlcu5U" showgrid="0" showattsig="1" backgroundcolor="#ffffff" linecolor="#ff0000" snapcsgrid="0" fillcolor="#ffff00" showattribassocs="1" localid="-1" snapgrid="0" showscope="1" showopsig="1" snapx="25" showstereotype="1" textcolor="#000000" font="Sans Serif,9,-1,5,50,0,0,0,0,0" documentation="">
<widgets/>
<messages/>
<associations/>
@ -52,129 +52,129 @@
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model isLeaf="false" namespace="m1" isRoot="false" xmi.id="Use Case View" name="Use Case View" isSpecification="false" visibility="public" isAbstract="false">
<UML:Model isRoot="false" isSpecification="false" namespace="m1" name="Use Case View" isAbstract="false" isLeaf="false" xmi.id="Use Case View" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isLeaf="false" namespace="m1" isRoot="false" xmi.id="Component View" name="Component View" isSpecification="false" visibility="public" isAbstract="false">
<UML:Model isRoot="false" isSpecification="false" namespace="m1" name="Component View" isAbstract="false" isLeaf="false" xmi.id="Component View" visibility="public">
<UML:Namespace.ownedElement>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="Tz06QOf0xEHX" name="data-collector" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="qVP8MjpaiUjw" name="Learner" isSpecification="false" stereotype="rSZCzDKpjhw5" visibility="public" isAbstract="false"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="IsIXtH00UPZi" name="Kill" isSpecification="false" stereotype="rSZCzDKpjhw5" visibility="public" isAbstract="false"/>
<UML:Abstraction client="IsIXtH00UPZi" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="rVfXulYAdqhX" name="" isSpecification="false" visibility="public"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="1TAcIp7NVdvX" name="Start" isSpecification="false" stereotype="rSZCzDKpjhw5" visibility="public" isAbstract="false"/>
<UML:Abstraction client="1TAcIp7NVdvX" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="PvoWBjUADfkV" name="" isSpecification="false" visibility="public"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="HSy87jRVwqsY" name="Notify" isSpecification="false" stereotype="rSZCzDKpjhw5" visibility="public" isAbstract="false"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="2X1nlev04t8B" name="Mailer" isSpecification="false" stereotype="rSZCzDKpjhw5" visibility="public" isAbstract="false"/>
<UML:Abstraction client="2X1nlev04t8B" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="HyCj3nQ3KPr5" name="" isSpecification="false" visibility="public"/>
<UML:Abstraction client="HSy87jRVwqsY" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="jpx2Co5CY9GC" name="" isSpecification="false" visibility="public"/>
<UML:Association namespace="Component View" xmi.id="xfmTo0d7U3Co" name="" isSpecification="false" visibility="public">
<UML:Component isRoot="false" isSpecification="false" namespace="Component View" name="data-collector" isAbstract="false" isLeaf="false" xmi.id="Tz06QOf0xEHX" visibility="public" executable="0"/>
<UML:Component isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Learner" isAbstract="false" isLeaf="false" xmi.id="qVP8MjpaiUjw" visibility="public" executable="0"/>
<UML:Component isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Kill" isAbstract="false" isLeaf="false" xmi.id="IsIXtH00UPZi" visibility="public" executable="0"/>
<UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="rVfXulYAdqhX" visibility="public" client="IsIXtH00UPZi"/>
<UML:Component isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Start" isAbstract="false" isLeaf="false" xmi.id="1TAcIp7NVdvX" visibility="public" executable="0"/>
<UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="PvoWBjUADfkV" visibility="public" client="1TAcIp7NVdvX"/>
<UML:Component isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Notify" isAbstract="false" isLeaf="false" xmi.id="HSy87jRVwqsY" visibility="public" executable="0"/>
<UML:Component isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Mailer" isAbstract="false" isLeaf="false" xmi.id="2X1nlev04t8B" visibility="public" executable="0"/>
<UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="HyCj3nQ3KPr5" visibility="public" client="2X1nlev04t8B"/>
<UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="jpx2Co5CY9GC" visibility="public" client="HSy87jRVwqsY"/>
<UML:Association isSpecification="false" namespace="Component View" name="" xmi.id="xfmTo0d7U3Co" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isNavigable="false" aggregation="none" xmi.id="GLVKohqCd1VT" name="" changeability="changeable" isSpecification="false" type="Tz06QOf0xEHX" visibility="public"/>
<UML:AssociationEnd isNavigable="true" aggregation="none" xmi.id="cgz2pZckFNB1" name="" changeability="changeable" isSpecification="false" type="RXqBshUB41L5" visibility="public"/>
<UML:AssociationEnd isNavigable="false" aggregation="none" isSpecification="false" changeability="changeable" name="" type="Tz06QOf0xEHX" xmi.id="GLVKohqCd1VT" visibility="public"/>
<UML:AssociationEnd isNavigable="true" aggregation="none" isSpecification="false" changeability="changeable" name="" type="RXqBshUB41L5" xmi.id="cgz2pZckFNB1" visibility="public"/>
</UML:Association.connection>
</UML:Association>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="ZPS2o7GDkc5b" name="NoSQL" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="yAQh9XwiuMkg" name="Queue" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Abstraction client="yAQh9XwiuMkg" supplier="dqWyyHKwPkeW" namespace="Component View" xmi.id="roUjSuB43yq5" name="" isSpecification="false" visibility="public"/>
<UML:Abstraction client="ZPS2o7GDkc5b" supplier="dqWyyHKwPkeW" namespace="Component View" xmi.id="up5vlwzBogrF" name="" isSpecification="false" visibility="public"/>
<UML:Association namespace="Component View" xmi.id="EZF1F7EEwgSu" name="" isSpecification="false" visibility="public">
<UML:Component isRoot="false" isSpecification="false" namespace="Component View" name="NoSQL" isAbstract="false" isLeaf="false" xmi.id="ZPS2o7GDkc5b" visibility="public" executable="0"/>
<UML:Component isRoot="false" isSpecification="false" namespace="Component View" name="Queue" isAbstract="false" isLeaf="false" xmi.id="yAQh9XwiuMkg" visibility="public" executable="0"/>
<UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="dqWyyHKwPkeW" xmi.id="roUjSuB43yq5" visibility="public" client="yAQh9XwiuMkg"/>
<UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="dqWyyHKwPkeW" xmi.id="up5vlwzBogrF" visibility="public" client="ZPS2o7GDkc5b"/>
<UML:Association isSpecification="false" namespace="Component View" name="" xmi.id="EZF1F7EEwgSu" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isNavigable="false" aggregation="none" xmi.id="WZqWR7Y3vUHh" name="" changeability="changeable" isSpecification="false" type="Tz06QOf0xEHX" visibility="public"/>
<UML:AssociationEnd isNavigable="true" aggregation="none" xmi.id="2WNNqxT3Uh2j" name="" changeability="changeable" isSpecification="false" type="dqWyyHKwPkeW" visibility="public"/>
<UML:AssociationEnd isNavigable="false" aggregation="none" isSpecification="false" changeability="changeable" name="" type="Tz06QOf0xEHX" xmi.id="WZqWR7Y3vUHh" visibility="public"/>
<UML:AssociationEnd isNavigable="true" aggregation="none" isSpecification="false" changeability="changeable" name="" type="dqWyyHKwPkeW" xmi.id="2WNNqxT3Uh2j" visibility="public"/>
</UML:Association.connection>
</UML:Association>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="mGviuNaRvQvK" name="Dashboard" isSpecification="false" visibility="public" isAbstract="false"/>
<UML:Association namespace="Component View" xmi.id="Mm0rT2YFGUvA" name="" isSpecification="false" visibility="public">
<UML:Component isRoot="false" isSpecification="false" namespace="Component View" name="Dashboard" isAbstract="false" isLeaf="false" xmi.id="mGviuNaRvQvK" visibility="public" executable="0"/>
<UML:Association isSpecification="false" namespace="Component View" name="" xmi.id="Mm0rT2YFGUvA" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isNavigable="false" aggregation="none" xmi.id="pTZirT2NwOlu" name="" changeability="changeable" isSpecification="false" type="mGviuNaRvQvK" visibility="public"/>
<UML:AssociationEnd isNavigable="true" aggregation="none" xmi.id="0rp9GA8cw6RN" name="" changeability="changeable" isSpecification="false" type="dqWyyHKwPkeW" visibility="public"/>
<UML:AssociationEnd isNavigable="false" aggregation="none" isSpecification="false" changeability="changeable" name="" type="mGviuNaRvQvK" xmi.id="pTZirT2NwOlu" visibility="public"/>
<UML:AssociationEnd isNavigable="true" aggregation="none" isSpecification="false" changeability="changeable" name="" type="dqWyyHKwPkeW" xmi.id="0rp9GA8cw6RN" visibility="public"/>
</UML:Association.connection>
</UML:Association>
<UML:Dependency client="qVP8MjpaiUjw" supplier="dqWyyHKwPkeW" namespace="Component View" xmi.id="80aOSVWFy4yp" name="" isSpecification="false" visibility="public"/>
<UML:Dependency isSpecification="false" namespace="Component View" name="" supplier="dqWyyHKwPkeW" xmi.id="80aOSVWFy4yp" visibility="public" client="qVP8MjpaiUjw"/>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams>
<diagram showopsig="1" snapy="25" textcolor="#000000" showstereotype="1" documentation="" snapcsgrid="0" backgroundcolor="#ffffff" name="component diagram" fillcolor="#ffff00" showscope="1" showattribassocs="1" showpubliconly="0" usefillcolor="0" showpackage="1" linewidth="0" snapgrid="0" isopen="1" griddotcolor="#d3d3d3" canvasheight="856" linecolor="#000000" zoom="100" showatts="1" xmi.id="SFlPQuwezjV1" snapx="25" font="Sans Serif,9,-1,5,50,0,0,0,0,0" localid="-1" showops="1" type="7" showattsig="1" showgrid="0" canvaswidth="2073">
<diagram usefillcolor="0" linewidth="0" showpubliconly="0" snapy="25" isopen="1" showatts="1" zoom="100" griddotcolor="#d3d3d3" name="component diagram" canvasheight="614" showpackage="1" canvaswidth="1042" type="7" showops="1" xmi.id="SFlPQuwezjV1" showgrid="0" showattsig="1" backgroundcolor="#ffffff" linecolor="#000000" snapcsgrid="0" fillcolor="#ffff00" showattribassocs="1" localid="-1" snapgrid="0" showscope="1" showopsig="1" snapx="25" showstereotype="1" textcolor="#000000" font="Sans Serif,9,-1,5,50,0,0,0,0,0" documentation="">
<widgets>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="159" usefillcolor="0" usesdiagramusefillcolor="0" y="-678" localid="v7rsoLtFIrMg" textcolor="#000000" x="-1736" linecolor="#000000" xmi.id="Tz06QOf0xEHX" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="146" usefillcolor="0" usesdiagramusefillcolor="0" y="-412" localid="OPLKYyaGrclm" textcolor="#000000" x="-1550" linecolor="#000000" xmi.id="qVP8MjpaiUjw" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<interfacewidget usesdiagramfillcolor="0" y="-690.5" textcolor="#000000" showstereotype="1" width="90" fillcolor="#ffff00" usesdiagramusefillcolor="0" x="-1500.5" showscope="1" isinstance="0" showpubliconly="0" usefillcolor="0" showpackage="0" linewidth="0" showattsigs="601" drawascircle="0" showopsigs="601" linecolor="#000000" xmi.id="RXqBshUB41L5" height="91" localid="bSOrj87QKpFY" font="Sans Serif,9,-1,5,50,0,0,0,0,0" showoperations="1" showattributes="0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="115" usefillcolor="0" usesdiagramusefillcolor="0" y="-810" localid="Lr1cZksQrfnn" textcolor="#000000" x="-1276" linecolor="#000000" xmi.id="IsIXtH00UPZi" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="115" usefillcolor="0" usesdiagramusefillcolor="0" y="-687" localid="fCxXTyzSroIP" textcolor="#000000" x="-1114" linecolor="#000000" xmi.id="1TAcIp7NVdvX" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="150" usefillcolor="0" usesdiagramusefillcolor="0" y="-579" localid="rbXRChMtT5dh" textcolor="#000000" x="-1293" linecolor="#000000" xmi.id="HSy87jRVwqsY" linewidth="0" isinstance="0" height="65" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="115" usefillcolor="0" usesdiagramusefillcolor="0" y="-803" localid="cZfZNX5E6adI" textcolor="#000000" x="-1515" linecolor="#000000" xmi.id="2X1nlev04t8B" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="145" usefillcolor="0" usesdiagramusefillcolor="0" y="-426" localid="nIBN2jAINAlN" textcolor="#000000" x="-1891" linecolor="#000000" xmi.id="ZPS2o7GDkc5b" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="147" usefillcolor="0" usesdiagramusefillcolor="0" y="-319" localid="Rzr9ZxkMFuhF" textcolor="#000000" x="-1888" linecolor="#000000" xmi.id="yAQh9XwiuMkg" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<interfacewidget usesdiagramfillcolor="0" y="-410" textcolor="#000000" showstereotype="1" width="40" fillcolor="#ffff00" usesdiagramusefillcolor="0" x="-1674" showscope="1" isinstance="0" showpubliconly="0" usefillcolor="0" showpackage="0" linewidth="0" showattsigs="601" drawascircle="1" showopsigs="601" linecolor="#000000" xmi.id="dqWyyHKwPkeW" height="40" localid="GYF8sxpJueQR" font="Sans Serif,9,-1,5,50,0,0,0,0,0" showoperations="1" showattributes="0">
<floatingtext usesdiagramfillcolor="1" y="66" textcolor="none" showstereotype="1" width="78" posttext="" fillcolor="none" usesdiagramusefillcolor="1" x="-22" pretext="" isinstance="0" usefillcolor="1" linewidth="0" linecolor="#000000" xmi.id="pwDCepiuLv1D" text="data-store" height="21" localid="b8no2T4fJacH" font="Ubuntu,11,-1,5,50,0,0,0,0,0" role="700"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-678" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="v7rsoLtFIrMg" linewidth="0" linecolor="#000000" xmi.id="Tz06QOf0xEHX" x="-1736" width="159" showstereotype="1"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-412" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="OPLKYyaGrclm" linewidth="0" linecolor="#000000" xmi.id="qVP8MjpaiUjw" x="-1550" width="146" showstereotype="1"/>
<interfacewidget usefillcolor="0" isinstance="0" linewidth="0" usesdiagramusefillcolor="0" showpubliconly="0" showoperations="1" height="102" y="-690.5" width="93" showattsigs="601" showpackage="0" xmi.id="RXqBshUB41L5" usesdiagramfillcolor="0" x="-1500.5" linecolor="#000000" fillcolor="#ffff00" localid="bSOrj87QKpFY" showscope="1" showattributes="0" showstereotype="1" textcolor="#000000" font="Sans Serif,9,-1,5,50,0,0,0,0,0" showopsigs="601" drawascircle="0"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-810" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="Lr1cZksQrfnn" linewidth="0" linecolor="#000000" xmi.id="IsIXtH00UPZi" x="-1276" width="118" showstereotype="1"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-687" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="fCxXTyzSroIP" linewidth="0" linecolor="#000000" xmi.id="1TAcIp7NVdvX" x="-1114" width="118" showstereotype="1"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-579" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="65" localid="rbXRChMtT5dh" linewidth="0" linecolor="#000000" xmi.id="HSy87jRVwqsY" x="-1293" width="150" showstereotype="1"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-803" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="cZfZNX5E6adI" linewidth="0" linecolor="#000000" xmi.id="2X1nlev04t8B" x="-1515" width="118" showstereotype="1"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-426" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="nIBN2jAINAlN" linewidth="0" linecolor="#000000" xmi.id="ZPS2o7GDkc5b" x="-1891" width="145" showstereotype="1"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-319" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="Rzr9ZxkMFuhF" linewidth="0" linecolor="#000000" xmi.id="yAQh9XwiuMkg" x="-1888" width="147" showstereotype="1"/>
<interfacewidget usefillcolor="0" isinstance="0" linewidth="0" usesdiagramusefillcolor="0" showpubliconly="0" showoperations="1" height="40" y="-410" width="40" showattsigs="601" showpackage="0" xmi.id="dqWyyHKwPkeW" usesdiagramfillcolor="0" x="-1674" linecolor="#000000" fillcolor="#ffff00" localid="GYF8sxpJueQR" showscope="1" showattributes="0" showstereotype="1" textcolor="#000000" font="Sans Serif,9,-1,5,50,0,0,0,0,0" showopsigs="601" drawascircle="1">
<floatingtext usefillcolor="1" isinstance="0" linewidth="0" pretext="" usesdiagramusefillcolor="1" height="21" y="66" posttext="" width="78" xmi.id="pwDCepiuLv1D" usesdiagramfillcolor="1" x="-22" text="data-store" linecolor="#000000" fillcolor="none" localid="b8no2T4fJacH" showstereotype="1" textcolor="none" font="Ubuntu,11,-1,5,50,0,0,0,0,0" role="700"/>
</interfacewidget>
<componentwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="152" usefillcolor="0" usesdiagramusefillcolor="0" y="-312" localid="VTNOxe5xARKz" textcolor="#000000" x="-1546" linecolor="#000000" xmi.id="mGviuNaRvQvK" linewidth="0" isinstance="0" height="64" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<boxwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="998" usefillcolor="0" usesdiagramusefillcolor="0" y="-817" localid="deiZieMDdXfx" textcolor="#000000" x="-1945" linecolor="#000000" xmi.id="TyIE7mFOMqb2" linewidth="0" isinstance="0" height="338" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<boxwidget fillcolor="#ffff00" usesdiagramfillcolor="0" width="1000" usefillcolor="0" usesdiagramusefillcolor="0" y="-462" localid="r9osJyLub2TH" textcolor="#000000" x="-1945" linecolor="#0000ff" xmi.id="gqVHN8Fq6V2C" linewidth="0" isinstance="0" height="259" showstereotype="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0"/>
<floatingtext usesdiagramfillcolor="0" y="-537" textcolor="#000000" showstereotype="1" width="147" posttext="" fillcolor="#ffff00" usesdiagramusefillcolor="0" x="-1933" pretext="" isinstance="0" usefillcolor="0" linewidth="0" linecolor="#000000" xmi.id="M7Vv9zCpnf7A" text="DETECTION" height="32" localid="GFaa3AbvJPnb" font="Sans Serif,18,-1,5,50,0,0,0,0,0" role="700"/>
<floatingtext usesdiagramfillcolor="0" y="-248" textcolor="#000000" showstereotype="1" width="155" posttext="" fillcolor="#ffff00" usesdiagramusefillcolor="0" x="-1117" pretext="" isinstance="0" usefillcolor="0" linewidth="0" linecolor="#000000" xmi.id="mD94avfu28pB" text="PREDICTION" height="32" localid="nKysny43DccE" font="Sans Serif,18,-1,5,50,0,0,0,0,0" role="700"/>
<componentwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-312" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="64" localid="VTNOxe5xARKz" linewidth="0" linecolor="#000000" xmi.id="mGviuNaRvQvK" x="-1546" width="152" showstereotype="1"/>
<boxwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-817" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="338" localid="deiZieMDdXfx" linewidth="0" linecolor="#000000" xmi.id="TyIE7mFOMqb2" x="-1945" width="998" showstereotype="1"/>
<boxwidget usesdiagramfillcolor="0" fillcolor="#ffff00" font="Sans Serif,9,-1,5,50,0,0,0,0,0" y="-462" usefillcolor="0" isinstance="0" textcolor="#000000" usesdiagramusefillcolor="0" height="259" localid="r9osJyLub2TH" linewidth="0" linecolor="#0000ff" xmi.id="gqVHN8Fq6V2C" x="-1945" width="1000" showstereotype="1"/>
<floatingtext usefillcolor="0" isinstance="0" linewidth="0" pretext="" usesdiagramusefillcolor="0" height="32" y="-537" posttext="" width="154" xmi.id="M7Vv9zCpnf7A" usesdiagramfillcolor="0" x="-1933" text=" DETECTION" linecolor="#000000" fillcolor="#ffff00" localid="GFaa3AbvJPnb" showstereotype="1" textcolor="#000000" font="Sans Serif,18,-1,5,50,0,0,0,0,0" role="700"/>
<floatingtext usefillcolor="0" isinstance="0" linewidth="0" pretext="" usesdiagramusefillcolor="0" height="32" y="-248" posttext="" width="163" xmi.id="mD94avfu28pB" usesdiagramfillcolor="0" x="-1116" text="PREDICTION " linecolor="#000000" fillcolor="#ffff00" localid="nKysny43DccE" showstereotype="1" textcolor="#000000" font="Sans Serif,18,-1,5,50,0,0,0,0,0" role="700"/>
</widgets>
<messages/>
<associations>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="RXqBshUB41L5" usesdiagramfillcolor="0" widgetaid="IsIXtH00UPZi" usefillcolor="1" usesdiagramusefillcolor="0" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="rVfXulYAdqhX" linewidth="0" type="511" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="0" type="511" totalcountb="2" linewidth="0" widgetbid="RXqBshUB41L5" linecolor="#000000" xmi.id="rVfXulYAdqhX" widgetaid="IsIXtH00UPZi" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1223" starty="-746"/>
<endpoint endx="-1410.5" endy="-649"/>
<startpoint starty="-746" startx="-1223"/>
<endpoint endx="-1407.5" endy="-649"/>
<point y="-649" x="-1223"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="RXqBshUB41L5" usesdiagramfillcolor="0" widgetaid="1TAcIp7NVdvX" usefillcolor="1" usesdiagramusefillcolor="0" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="PvoWBjUADfkV" linewidth="0" type="511" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="0" type="511" totalcountb="2" linewidth="0" widgetbid="RXqBshUB41L5" linecolor="#000000" xmi.id="PvoWBjUADfkV" widgetaid="1TAcIp7NVdvX" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1114" starty="-650"/>
<endpoint endx="-1410.5" endy="-650"/>
<startpoint starty="-650" startx="-1114"/>
<endpoint endx="-1407.5" endy="-650"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="RXqBshUB41L5" usesdiagramfillcolor="0" widgetaid="2X1nlev04t8B" usefillcolor="1" usesdiagramusefillcolor="0" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="HyCj3nQ3KPr5" linewidth="0" type="511" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="0" type="511" totalcountb="2" linewidth="0" widgetbid="RXqBshUB41L5" linecolor="#000000" xmi.id="HyCj3nQ3KPr5" widgetaid="2X1nlev04t8B" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1467" starty="-739"/>
<startpoint starty="-739" startx="-1467"/>
<endpoint endx="-1467" endy="-690.5"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="RXqBshUB41L5" usesdiagramfillcolor="0" widgetaid="HSy87jRVwqsY" usefillcolor="1" usesdiagramusefillcolor="0" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="jpx2Co5CY9GC" linewidth="0" type="511" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="0" type="511" totalcountb="2" linewidth="0" widgetbid="RXqBshUB41L5" linecolor="#000000" xmi.id="jpx2Co5CY9GC" widgetaid="HSy87jRVwqsY" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1224" starty="-579"/>
<endpoint endx="-1410.5" endy="-649"/>
<startpoint starty="-579" startx="-1224"/>
<endpoint endx="-1407.5" endy="-649"/>
<point y="-649" x="-1224"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="none" indexb="1" totalcounta="2" widgetbid="RXqBshUB41L5" usesdiagramfillcolor="255" widgetaid="Tz06QOf0xEHX" usefillcolor="1" usesdiagramusefillcolor="1" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="xfmTo0d7U3Co" linewidth="0" type="512" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="1" fillcolor="none" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="1" type="512" totalcountb="2" linewidth="0" widgetbid="RXqBshUB41L5" linecolor="#000000" xmi.id="xfmTo0d7U3Co" widgetaid="Tz06QOf0xEHX" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1577" starty="-651.5"/>
<startpoint starty="-651.5" startx="-1577"/>
<endpoint endx="-1500.5" endy="-651.5"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="dqWyyHKwPkeW" usesdiagramfillcolor="0" widgetaid="yAQh9XwiuMkg" usefillcolor="1" usesdiagramusefillcolor="51" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="roUjSuB43yq5" linewidth="0" type="511" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="1" type="511" totalcountb="2" linewidth="0" widgetbid="dqWyyHKwPkeW" linecolor="#000000" xmi.id="roUjSuB43yq5" widgetaid="yAQh9XwiuMkg" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1741" starty="-319"/>
<startpoint starty="-319" startx="-1741"/>
<endpoint endx="-1674" endy="-370"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="none" indexb="1" totalcounta="2" widgetbid="dqWyyHKwPkeW" usesdiagramfillcolor="63" widgetaid="ZPS2o7GDkc5b" usefillcolor="1" usesdiagramusefillcolor="144" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="up5vlwzBogrF" linewidth="0" type="511" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="1" fillcolor="none" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="1" type="511" totalcountb="2" linewidth="0" widgetbid="dqWyyHKwPkeW" linecolor="#000000" xmi.id="up5vlwzBogrF" widgetaid="ZPS2o7GDkc5b" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1746" starty="-410"/>
<startpoint starty="-410" startx="-1746"/>
<endpoint endx="-1674" endy="-410"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="dqWyyHKwPkeW" usesdiagramfillcolor="0" widgetaid="Tz06QOf0xEHX" usefillcolor="1" usesdiagramusefillcolor="176" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="EZF1F7EEwgSu" linewidth="0" type="512" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="1" type="512" totalcountb="2" linewidth="0" widgetbid="dqWyyHKwPkeW" linecolor="#000000" xmi.id="EZF1F7EEwgSu" widgetaid="Tz06QOf0xEHX" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1652" starty="-614"/>
<startpoint starty="-614" startx="-1652"/>
<endpoint endx="-1652" endy="-410"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="none" indexb="1" totalcounta="2" widgetbid="dqWyyHKwPkeW" usesdiagramfillcolor="63" widgetaid="mGviuNaRvQvK" usefillcolor="1" usesdiagramusefillcolor="0" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="Mm0rT2YFGUvA" linewidth="0" type="512" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="1" fillcolor="none" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="0" type="512" totalcountb="2" linewidth="0" widgetbid="dqWyyHKwPkeW" linecolor="#000000" xmi.id="Mm0rT2YFGUvA" widgetaid="mGviuNaRvQvK" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1546" starty="-312"/>
<startpoint starty="-312" startx="-1546"/>
<endpoint endx="-1634" endy="-370"/>
</linepath>
</assocwidget>
<assocwidget fillcolor="#ffff00" indexb="1" totalcounta="2" widgetbid="dqWyyHKwPkeW" usesdiagramfillcolor="0" widgetaid="qVP8MjpaiUjw" usefillcolor="1" usesdiagramusefillcolor="0" seqnum="" indexa="1" textcolor="none" totalcountb="2" linecolor="#000000" xmi.id="80aOSVWFy4yp" linewidth="0" type="502" font="Sans Serif,9,-1,5,50,0,0,0,0,0">
<assocwidget usesdiagramfillcolor="0" fillcolor="#ffff00" indexa="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" usefillcolor="1" indexb="1" textcolor="none" usesdiagramusefillcolor="0" type="502" totalcountb="2" linewidth="0" widgetbid="dqWyyHKwPkeW" linecolor="#000000" xmi.id="80aOSVWFy4yp" widgetaid="qVP8MjpaiUjw" seqnum="" totalcounta="2">
<linepath layout="Polyline">
<startpoint startx="-1550" starty="-410"/>
<startpoint starty="-410" startx="-1550"/>
<endpoint endx="-1634" endy="-410"/>
</linepath>
</assocwidget>
@ -183,17 +183,17 @@
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model isLeaf="false" namespace="m1" isRoot="false" xmi.id="Deployment View" name="Deployment View" isSpecification="false" visibility="public" isAbstract="false">
<UML:Model isRoot="false" isSpecification="false" namespace="m1" name="Deployment View" isAbstract="false" isLeaf="false" xmi.id="Deployment View" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isLeaf="false" namespace="m1" isRoot="false" xmi.id="Entity Relationship Model" name="Entity Relationship Model" isSpecification="false" visibility="public" isAbstract="false">
<UML:Model isRoot="false" isSpecification="false" namespace="m1" name="Entity Relationship Model" isAbstract="false" isLeaf="false" xmi.id="Entity Relationship Model" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
</UML:Namespace.ownedElement>
</UML:Model>
</XMI.content>
<XMI.extensions xmi.extender="umbrello">
<docsettings viewid="SFlPQuwezjV1" documentation="" uniqueid="wLA7xmMizVkY"/>
<docsettings uniqueid="wLA7xmMizVkY" viewid="SFlPQuwezjV1" documentation=""/>
<listview>
<listitem id="Views" open="1" type="800">
<listitem id="Component View" open="1" type="821">

@ -1 +1 @@
Subproject commit 36f9f10ff44406cc0418cc5934eb475bc77ebb1e
Subproject commit 3d00f5a126574f2277cdac25d60008ee35dc8740

@ -16,18 +16,23 @@ import os
import subprocess
from monitor import ProcessCounter
from utils.transport import QueueListener, QueueWriter, QueueReader
from utils.params import PARAMS
class Actor:
def __init__(self,config):
self.config = config
def __init__(self):
pass
def getIdentifier(self):
return self.__class__.__name__.lower()
def init(self,litems):
self.items = litems
"""
Initializing the class with configuration. The configuration will be specific to each subclass
"""
def init(self,config):
self.config = config
def process(self,item):
pass
def isValid(self,item):
return False
def isValid(self,item):
return False
def execute(self,cmd):
stream = None
try:
@ -41,24 +46,27 @@ class Actor:
Sending a message to a queue with parameters to,from,content
"""
def post(self,**args):
to = args['to']
content = args['content']
message = {"from":self.getIdentifier(),"to":to,"content":content}
host = self.config['api']
uid = self.config['key']
qid = to#self.conorfig['id']
qwriter = QueueWriter(host=host,uid=uid,qid=qid)
qwriter.init(qid)
qwriter.write(label=qid,row=content)
#qwriter.close()
pass
# to = args['to']
# content = args['content']
# message = {"from":self.getIdentifier(),"to":to,"content":content}
# host = self.config['api']
# uid = self.config['key']
# qid = to#self.conorfig['id']
# qwriter = QueueWriter(host=host,uid=uid,qid=qid)
# qwriter.init(qid)
# qwriter.write(label=qid,row=content)
# #qwriter.close()
pass
class Folders(Actor):
def isvalid(self,item):
print self.conf
def process(self,item):
print item
class Kill(Actor):
def isValid(self,item):
print self.config
return (item is not None) and (item in self.config)
def isValid(self,item):
return (item is not None) and (item in self.config)
def process(self,item):
cmd = "".join(["ps -eo pid,command|grep ",item,'|grep -E "^ {0,1}[0-9]+" -o|xargs kill -9'])
self.execute(cmd)
@ -66,17 +74,31 @@ class Kill(Actor):
# We need to make sure we can get assess the process on this server
#
class Start(Actor):
def __init__(self,config):
Actor.__init__(self,config)
def __init__(self):
Actor.__init__(self)
def isValid(self,name):
return name in self.config
return name in self.config
def process(self,name):
item = self.config[name]
path = item['path']
args = item['args'] if 'args' in item else ''
cmd = " ".join([path,args])
self.execute(cmd)
if name in self.config :
item = self.config['actions']['apps']['start'][name]
path = item['path']
args = item['args'] if 'args' in item else ''
cmd = " ".join([path,args])
self.execute(cmd)
class Apps(Actor):
def __init__(self):
Actor.__init__(self)
def isValid(self,rows):
status = [row['status'] for row in rows]
return 'crash' in status
def process(self,rows):
rows = [row for row in rows if row['status'] == 'crash'] :
handler = Start()
for app in rows:
handler.process(app['label'])
"""
The orchestrator class is designed to aggregate actions and communicate back to the caller
Mesage passing is structured as follows {from,to,content} The content is designed to be understood by the actor
@ -85,91 +107,95 @@ class Start(Actor):
@TODO: action specifications should be provided remotely
"""
class Orchestrator(Actor,Thread):
def __init__(self,config):
Thread.__init__(self)
Actor.__init__(self,config)
self.actors = {}
self.is_master_node = False
self.items = []
def __init__(self,config=None):
Thread.__init__(self)
if config is None:
f = open(PARAMS['path'])
config = json.loads(f.read())
f.close()
self.config = config
Actor.__init__(self)
self.actors = {"apps":Apps(),"folders":Folders()}
self.is_master_node = False
self.items = []
#
# If the configuration only has id,key then this is NOT the maestro
#
host = config['api']
qid = config['id']
if 'actions' in config :
#
# If the configuration only has id,key then this is NOT the maestro
# We are to assume this is the maestro/main node, and it will make the configuration available to other nodes
# NOTE: This is has a predefined master thus is subject to known short comings (zombies)
#
host = config['api']
qid = config['id']
if 'actions' in config :
#
# We are to assume this is the maestro/main node, and it will make the configuration available to other nodes
# NOTE: This is has a predefined master thus is subject to known short comings (zombies)
#
q = QueueWriter(host=host,uid=config['key'],qid=qid)
q.flush(config['id'])
q.write(label=qid,row=json.dumps(config['actions']))
q.close()
self.is_master_node = True
else:
qid = config['master']
q = QueueReader(host=host,uid=config['key'],qid=qid)
r = q.read()
q.close()
info = r[qid][0]
self.init(info)
print "Initialized ***** ",self.getIdentifier(), " as ",config['id']
#
# This object will have to request for the configuration
#
#for id in config['actions'] :
#conf = config['actions'][id]
#item = eval("".join([id,"(",json.dumps(conf),")"]))
#self.actors[id.lower()] = item
q = QueueWriter(host=host,uid=config['key'],qid=qid)
q.flush(config['id'])
q.write(label=qid,row=json.dumps(config['actions']))
q.close()
self.is_master_node = True
else:
qid = config['master']
q = QueueReader(host=host,uid=config['key'],qid=qid)
r = q.read()
q.close()
info = r[qid][0]
self.init(info)
print "Initialized ***** ",self.getIdentifier(), " as ",config['id']
#
# This object will have to request for the configuration
#
#for id in config['actions'] :
#conf = config['actions'][id]
#item = eval("".join([id,"(",json.dumps(conf),")"]))
#self.actors[id.lower()] = item
"""
This function is designed to provide the orchestrator a configuration
@pre
"""
def init(self,config):
for id in config:
setup_info = config[id]
item = eval("".join([id,"(",json.dumps(setup_info),")"]))
self.actors[id.lower()] = item
for id in config:
setup_info = config[id]
item = eval("".join([id,"(",json.dumps(setup_info),")"]))
self.actors[id.lower()] = item
def callback(self,channel,method,header,stream):
message = json.loads(stream)
if 'content' in message :
content = message['content']
sender = message['from']
to = message['to']
if content.lower() == 'quit' or to == 'quit':
channel.close()
elif content.lower() == 'ping' or to == 'ping':
self.post(to=sender,content="1")
else:
id = to.lower()
actor = self.actors[id]
print "\tPerforming ",actor.getIdentifier()," on ",content," status ",actor.isValid(content)
if actor.isValid(content) :
actor.process(content)
else:
content = {"status":"invalid","content":content}
self.post(to=sender,content=content)
message = json.loads(stream)
if 'content' in message :
content = message['content']
#sender = message['from']
to = message['to']
if isinstance(content,basestring) and content.lower() in ['quit'] or to=='quit':
if content.lower() == 'quit' or to == 'quit':
channel.close()
else:
id = to.lower()
actor = self.actors[id]
print [id,actor.isValid(content)]
if actor is not None and actor.isValid(content) :
actor.process(content)
else:
content = {"status":"invalid","content":content}
#self.post(to=sender,content=content)
def run(self):
info = {}
host = self.config['api']
uid = self.config['key']
qid = self.config['id']
if not self.is_master_node :
qlistener = QueueListener(qid=qid,uid=uid,host=host)
qlistener.callback = self.callback
qlistener.read()
r = [self.process(item) for item in self.items]
qlistener = QueueListener(qid=qid,uid=uid,host=host)
qlistener.callback = self.callback
qlistener.read()
r = [self.process(item) for item in self.items]
"""
This class is designed to send a message to a given AMQP enpoint
@ -193,14 +219,7 @@ config = {
#thread = Orchestrator(config)
#thread.start()
config = {
"master":"demo-000",
"id":"demo-001",
"key":"[0v8]-247&7!v3","api":"localhost"
}
thread = Orchestrator(config)
thread = Orchestrator()
thread.start()
#config = {"id":"demo","key":"[0v8]-247&7!v3","api":"localhost"}

@ -74,6 +74,7 @@ class ICollector(Thread) :
write_class = self.config['store']['class']['write']
read_args = self.config['store']['args']
DELAY = self.config['delay'] * 60
while self.quit == False:
for thread in self.pool :
@ -88,10 +89,20 @@ class ICollector(Thread) :
else:
label = id
row = data
#
# At this point we should check for the status and if it prompts an action
# @TODO Use a design pattern for this ...
#
#
# At this point we should check for the status and if it prompts an action
# @TODO Use a design pattern for this ...
# - submit the row to Event for analysis
# - The event orchestrator will handle things from this point on
#
message = {}
message['to'] = thread.getName()
message['content'] = row
qwriter = QueueWriter(host=self.config['api'],uid=self.config['key'],qid=self.id)
qwriter.write(label=self.id,row = message)
qwriter.close()
self.lock.acquire()
store = self.factory.instance(type=write_class,args=read_args)
store.flush(size=200)
@ -112,4 +123,4 @@ class ICollector(Thread) :
if __name__ == '__main__':
thread = ICollector()
# thread.daemon = True
thread.start()
thread.start()

@ -587,7 +587,7 @@ class CouchdbWriter(Couchdb,Writer):
self.dbase.save_doc(document)
def flush(self,**params) :
size = params['size']
size = params['size'] if 'size' in params else 0
has_changed = False
document = self.dbase.get(self.uid)
for key in document:
@ -595,7 +595,7 @@ class CouchdbWriter(Couchdb,Writer):
content = document[key]
else:
continue
if isinstance(content,list):
if isinstance(content,list) and size > 0:
index = len(content) - size
content = content[index:]
document[key] = content
@ -603,8 +603,8 @@ class CouchdbWriter(Couchdb,Writer):
else:
document[key] = {}
has_changed = True
if has_changed:
self.dbase.save_doc(document)
self.dbase.save_doc(document)
def archive(self,params=None):
document = self.dbase.get(self.uid)

Loading…
Cancel
Save