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"?> <?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.header>
<XMI.documentation> <XMI.documentation>
<XMI.exporter>umbrello uml modeller http://umbrello.kde.org</XMI.exporter> <XMI.exporter>umbrello uml modeller http://umbrello.kde.org</XMI.exporter>
<XMI.exporterVersion>1.6.9</XMI.exporterVersion> <XMI.exporterVersion>1.6.9</XMI.exporterVersion>
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding> <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
</XMI.documentation> </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.header>
<XMI.content> <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:Namespace.ownedElement>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="folder" name="folder" 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 isLeaf="false" namespace="m1" isRoot="false" xmi.id="datatype" name="datatype" isSpecification="false" visibility="public" isAbstract="false"/> <UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="datatype" isAbstract="false" isLeaf="false" xmi.id="datatype" visibility="public"/>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="rSZCzDKpjhw5" name="agent" isSpecification="false" visibility="public" isAbstract="false"/> <UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="agent" isAbstract="false" isLeaf="false" xmi.id="rSZCzDKpjhw5" visibility="public"/>
<UML:Stereotype isLeaf="false" namespace="m1" isRoot="false" xmi.id="interface" name="interface" isSpecification="false" visibility="public" isAbstract="false"/> <UML:Stereotype isRoot="false" isSpecification="false" namespace="m1" name="interface" isAbstract="false" isLeaf="false" xmi.id="interface" visibility="public"/>
<UML:Model isLeaf="false" namespace="m1" isRoot="false" xmi.id="Logical View" name="Logical View" isSpecification="false" visibility="public" isAbstract="false"> <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: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: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 isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="int" isAbstract="false" isLeaf="false" xmi.id="fCoa6Ljfk80G" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="XVF672bO1S1I" name="char" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="char" isAbstract="false" isLeaf="false" xmi.id="XVF672bO1S1I" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="HU1uO6O1JAZP" name="bool" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="bool" isAbstract="false" isLeaf="false" xmi.id="HU1uO6O1JAZP" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="UI3ER3SwXh1e" name="float" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="float" isAbstract="false" isLeaf="false" xmi.id="UI3ER3SwXh1e" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="hc0i20yJS0Dp" name="double" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="double" isAbstract="false" isLeaf="false" xmi.id="hc0i20yJS0Dp" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="6aqNkOnEgoR7" name="short" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="short" isAbstract="false" isLeaf="false" xmi.id="6aqNkOnEgoR7" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="pt2Mb3yGdzxf" name="long" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="long" isAbstract="false" isLeaf="false" xmi.id="pt2Mb3yGdzxf" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="xvyPvAC0i1NS" name="unsigned int" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="unsigned int" isAbstract="false" isLeaf="false" xmi.id="xvyPvAC0i1NS" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="P8f5w6BmxD8W" name="unsigned short" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="unsigned short" isAbstract="false" isLeaf="false" xmi.id="P8f5w6BmxD8W" visibility="public"/>
<UML:DataType isLeaf="false" namespace="Datatypes" isRoot="false" xmi.id="E7nr4kW1fSOb" name="unsigned long" isSpecification="false" stereotype="datatype" visibility="public" isAbstract="false"/> <UML:DataType isRoot="false" stereotype="datatype" isSpecification="false" namespace="Datatypes" name="unsigned long" isAbstract="false" isLeaf="false" xmi.id="E7nr4kW1fSOb" visibility="public"/>
<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="string" isAbstract="false" isLeaf="false" xmi.id="abbIcwjz5O41" visibility="public"/>
</UML:Namespace.ownedElement> </UML:Namespace.ownedElement>
</UML:Package> </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:Classifier.feature>
<UML:Operation isLeaf="false" isRoot="false" xmi.id="wViGJvmJF1zV" name="init" 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 isLeaf="false" isRoot="false" xmi.id="7FOYGyKLJkjG" name="execute" isQuery="false" isSpecification="false" visibility="public" isAbstract="false"/> <UML:Operation isRoot="false" isQuery="false" isSpecification="false" name="execute" isAbstract="false" isLeaf="false" xmi.id="7FOYGyKLJkjG" visibility="public"/>
<UML:Operation isLeaf="false" isRoot="false" xmi.id="q8oPwCisiO61" name="status" isQuery="false" isSpecification="false" visibility="public" isAbstract="false"/> <UML:Operation isRoot="false" isQuery="false" isSpecification="false" name="status" isAbstract="false" isLeaf="false" xmi.id="q8oPwCisiO61" visibility="public"/>
<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="instance" isAbstract="false" isLeaf="false" xmi.id="2fGeoj3czd3G" visibility="public" ownerScope="classifier"/>
</UML:Classifier.feature> </UML:Classifier.feature>
</UML:Interface> </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> </UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello"> <XMI.extension xmi.extender="umbrello">
<diagrams> <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/> <widgets/>
<messages/> <messages/>
<associations/> <associations/>
@ -52,129 +52,129 @@
</diagrams> </diagrams>
</XMI.extension> </XMI.extension>
</UML:Model> </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:Namespace.ownedElement/>
</UML:Model> </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: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 isRoot="false" isSpecification="false" namespace="Component View" name="data-collector" isAbstract="false" isLeaf="false" xmi.id="Tz06QOf0xEHX" visibility="public" executable="0"/>
<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 isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Learner" isAbstract="false" isLeaf="false" xmi.id="qVP8MjpaiUjw" visibility="public" executable="0"/>
<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: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 client="IsIXtH00UPZi" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="rVfXulYAdqhX" name="" isSpecification="false" visibility="public"/> <UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="rVfXulYAdqhX" visibility="public" client="IsIXtH00UPZi"/>
<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: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 client="1TAcIp7NVdvX" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="PvoWBjUADfkV" name="" isSpecification="false" visibility="public"/> <UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="PvoWBjUADfkV" visibility="public" client="1TAcIp7NVdvX"/>
<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 isRoot="false" stereotype="rSZCzDKpjhw5" isSpecification="false" namespace="Component View" name="Notify" isAbstract="false" isLeaf="false" xmi.id="HSy87jRVwqsY" visibility="public" executable="0"/>
<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: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 client="2X1nlev04t8B" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="HyCj3nQ3KPr5" name="" isSpecification="false" visibility="public"/> <UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="HyCj3nQ3KPr5" visibility="public" client="2X1nlev04t8B"/>
<UML:Abstraction client="HSy87jRVwqsY" supplier="RXqBshUB41L5" namespace="Component View" xmi.id="jpx2Co5CY9GC" name="" isSpecification="false" visibility="public"/> <UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="RXqBshUB41L5" xmi.id="jpx2Co5CY9GC" visibility="public" client="HSy87jRVwqsY"/>
<UML:Association namespace="Component View" xmi.id="xfmTo0d7U3Co" name="" isSpecification="false" visibility="public"> <UML:Association isSpecification="false" namespace="Component View" name="" xmi.id="xfmTo0d7U3Co" visibility="public">
<UML:Association.connection> <UML:Association.connection>
<UML:AssociationEnd isNavigable="false" aggregation="none" xmi.id="GLVKohqCd1VT" name="" changeability="changeable" isSpecification="false" type="Tz06QOf0xEHX" 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" xmi.id="cgz2pZckFNB1" name="" changeability="changeable" isSpecification="false" type="RXqBshUB41L5" 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.connection>
</UML:Association> </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 isRoot="false" isSpecification="false" namespace="Component View" name="NoSQL" isAbstract="false" isLeaf="false" xmi.id="ZPS2o7GDkc5b" visibility="public" executable="0"/>
<UML:Component isLeaf="false" executable="0" namespace="Component View" isRoot="false" xmi.id="yAQh9XwiuMkg" name="Queue" isSpecification="false" visibility="public" isAbstract="false"/> <UML:Component isRoot="false" isSpecification="false" namespace="Component View" name="Queue" isAbstract="false" isLeaf="false" xmi.id="yAQh9XwiuMkg" visibility="public" executable="0"/>
<UML:Abstraction client="yAQh9XwiuMkg" supplier="dqWyyHKwPkeW" namespace="Component View" xmi.id="roUjSuB43yq5" name="" isSpecification="false" visibility="public"/> <UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="dqWyyHKwPkeW" xmi.id="roUjSuB43yq5" visibility="public" client="yAQh9XwiuMkg"/>
<UML:Abstraction client="ZPS2o7GDkc5b" supplier="dqWyyHKwPkeW" namespace="Component View" xmi.id="up5vlwzBogrF" name="" isSpecification="false" visibility="public"/> <UML:Abstraction isSpecification="false" namespace="Component View" name="" supplier="dqWyyHKwPkeW" xmi.id="up5vlwzBogrF" visibility="public" client="ZPS2o7GDkc5b"/>
<UML:Association namespace="Component View" xmi.id="EZF1F7EEwgSu" name="" isSpecification="false" visibility="public"> <UML:Association isSpecification="false" namespace="Component View" name="" xmi.id="EZF1F7EEwgSu" visibility="public">
<UML:Association.connection> <UML:Association.connection>
<UML:AssociationEnd isNavigable="false" aggregation="none" xmi.id="WZqWR7Y3vUHh" name="" changeability="changeable" isSpecification="false" type="Tz06QOf0xEHX" 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" xmi.id="2WNNqxT3Uh2j" name="" changeability="changeable" isSpecification="false" type="dqWyyHKwPkeW" 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.connection>
</UML:Association> </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:Component isRoot="false" isSpecification="false" namespace="Component View" name="Dashboard" isAbstract="false" isLeaf="false" xmi.id="mGviuNaRvQvK" visibility="public" executable="0"/>
<UML:Association namespace="Component View" xmi.id="Mm0rT2YFGUvA" name="" isSpecification="false" visibility="public"> <UML:Association isSpecification="false" namespace="Component View" name="" xmi.id="Mm0rT2YFGUvA" visibility="public">
<UML:Association.connection> <UML:Association.connection>
<UML:AssociationEnd isNavigable="false" aggregation="none" xmi.id="pTZirT2NwOlu" name="" changeability="changeable" isSpecification="false" type="mGviuNaRvQvK" 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" xmi.id="0rp9GA8cw6RN" name="" changeability="changeable" isSpecification="false" type="dqWyyHKwPkeW" 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.connection>
</UML:Association> </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> </UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello"> <XMI.extension xmi.extender="umbrello">
<diagrams> <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> <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 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 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"/> <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 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"/> <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 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 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 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 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 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 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 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 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 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 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 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"/> <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 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"> <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 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"/> <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> </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"/> <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 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 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 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"/> <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 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 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 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"/> <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> </widgets>
<messages/> <messages/>
<associations> <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"> <linepath layout="Polyline">
<startpoint startx="-1223" starty="-746"/> <startpoint starty="-746" startx="-1223"/>
<endpoint endx="-1410.5" endy="-649"/> <endpoint endx="-1407.5" endy="-649"/>
<point y="-649" x="-1223"/> <point y="-649" x="-1223"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1114" starty="-650"/> <startpoint starty="-650" startx="-1114"/>
<endpoint endx="-1410.5" endy="-650"/> <endpoint endx="-1407.5" endy="-650"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1467" starty="-739"/> <startpoint starty="-739" startx="-1467"/>
<endpoint endx="-1467" endy="-690.5"/> <endpoint endx="-1467" endy="-690.5"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1224" starty="-579"/> <startpoint starty="-579" startx="-1224"/>
<endpoint endx="-1410.5" endy="-649"/> <endpoint endx="-1407.5" endy="-649"/>
<point y="-649" x="-1224"/> <point y="-649" x="-1224"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1577" starty="-651.5"/> <startpoint starty="-651.5" startx="-1577"/>
<endpoint endx="-1500.5" endy="-651.5"/> <endpoint endx="-1500.5" endy="-651.5"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1741" starty="-319"/> <startpoint starty="-319" startx="-1741"/>
<endpoint endx="-1674" endy="-370"/> <endpoint endx="-1674" endy="-370"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1746" starty="-410"/> <startpoint starty="-410" startx="-1746"/>
<endpoint endx="-1674" endy="-410"/> <endpoint endx="-1674" endy="-410"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1652" starty="-614"/> <startpoint starty="-614" startx="-1652"/>
<endpoint endx="-1652" endy="-410"/> <endpoint endx="-1652" endy="-410"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1546" starty="-312"/> <startpoint starty="-312" startx="-1546"/>
<endpoint endx="-1634" endy="-370"/> <endpoint endx="-1634" endy="-370"/>
</linepath> </linepath>
</assocwidget> </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"> <linepath layout="Polyline">
<startpoint startx="-1550" starty="-410"/> <startpoint starty="-410" startx="-1550"/>
<endpoint endx="-1634" endy="-410"/> <endpoint endx="-1634" endy="-410"/>
</linepath> </linepath>
</assocwidget> </assocwidget>
@ -183,17 +183,17 @@
</diagrams> </diagrams>
</XMI.extension> </XMI.extension>
</UML:Model> </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:Namespace.ownedElement/>
</UML:Model> </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:Namespace.ownedElement/>
</UML:Model> </UML:Model>
</UML:Namespace.ownedElement> </UML:Namespace.ownedElement>
</UML:Model> </UML:Model>
</XMI.content> </XMI.content>
<XMI.extensions xmi.extender="umbrello"> <XMI.extensions xmi.extender="umbrello">
<docsettings viewid="SFlPQuwezjV1" documentation="" uniqueid="wLA7xmMizVkY"/> <docsettings uniqueid="wLA7xmMizVkY" viewid="SFlPQuwezjV1" documentation=""/>
<listview> <listview>
<listitem id="Views" open="1" type="800"> <listitem id="Views" open="1" type="800">
<listitem id="Component View" open="1" type="821"> <listitem id="Component View" open="1" type="821">

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

@ -16,18 +16,23 @@ import os
import subprocess import subprocess
from monitor import ProcessCounter from monitor import ProcessCounter
from utils.transport import QueueListener, QueueWriter, QueueReader from utils.transport import QueueListener, QueueWriter, QueueReader
from utils.params import PARAMS
class Actor: class Actor:
def __init__(self,config): def __init__(self):
self.config = config pass
def getIdentifier(self): def getIdentifier(self):
return self.__class__.__name__.lower() return self.__class__.__name__.lower()
"""
Initializing the class with configuration. The configuration will be specific to each subclass
def init(self,litems): """
self.items = litems def init(self,config):
self.config = config
def process(self,item): def process(self,item):
pass pass
def isValid(self,item): def isValid(self,item):
return False return False
def execute(self,cmd): def execute(self,cmd):
stream = None stream = None
try: try:
@ -41,23 +46,26 @@ class Actor:
Sending a message to a queue with parameters to,from,content Sending a message to a queue with parameters to,from,content
""" """
def post(self,**args): def post(self,**args):
to = args['to'] # to = args['to']
content = args['content'] # content = args['content']
message = {"from":self.getIdentifier(),"to":to,"content":content} # message = {"from":self.getIdentifier(),"to":to,"content":content}
host = self.config['api'] # host = self.config['api']
uid = self.config['key'] # uid = self.config['key']
qid = to#self.conorfig['id'] # qid = to#self.conorfig['id']
qwriter = QueueWriter(host=host,uid=uid,qid=qid) # qwriter = QueueWriter(host=host,uid=uid,qid=qid)
qwriter.init(qid) # qwriter.init(qid)
qwriter.write(label=qid,row=content) # qwriter.write(label=qid,row=content)
#qwriter.close() # #qwriter.close()
pass pass
class Folders(Actor):
def isvalid(self,item):
print self.conf
def process(self,item):
print item
class Kill(Actor): class Kill(Actor):
def isValid(self,item): def isValid(self,item):
print self.config
return (item is not None) and (item in self.config) return (item is not None) and (item in self.config)
def process(self,item): def process(self,item):
cmd = "".join(["ps -eo pid,command|grep ",item,'|grep -E "^ {0,1}[0-9]+" -o|xargs kill -9']) cmd = "".join(["ps -eo pid,command|grep ",item,'|grep -E "^ {0,1}[0-9]+" -o|xargs kill -9'])
@ -66,17 +74,31 @@ class Kill(Actor):
# We need to make sure we can get assess the process on this server # We need to make sure we can get assess the process on this server
# #
class Start(Actor): class Start(Actor):
def __init__(self,config): def __init__(self):
Actor.__init__(self,config) Actor.__init__(self)
def isValid(self,name): def isValid(self,name):
return name in self.config return name in self.config
def process(self,name): def process(self,name):
item = self.config[name] if name in self.config :
item = self.config['actions']['apps']['start'][name]
path = item['path'] path = item['path']
args = item['args'] if 'args' in item else '' args = item['args'] if 'args' in item else ''
cmd = " ".join([path,args]) cmd = " ".join([path,args])
self.execute(cmd) 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 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 Mesage passing is structured as follows {from,to,content} The content is designed to be understood by the actor
@ -85,10 +107,15 @@ class Start(Actor):
@TODO: action specifications should be provided remotely @TODO: action specifications should be provided remotely
""" """
class Orchestrator(Actor,Thread): class Orchestrator(Actor,Thread):
def __init__(self,config): def __init__(self,config=None):
Thread.__init__(self) Thread.__init__(self)
Actor.__init__(self,config) if config is None:
self.actors = {} 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.is_master_node = False
self.items = [] self.items = []
# #
@ -142,30 +169,29 @@ class Orchestrator(Actor,Thread):
message = json.loads(stream) message = json.loads(stream)
if 'content' in message : if 'content' in message :
content = message['content'] content = message['content']
sender = message['from']
#sender = message['from']
to = message['to'] to = message['to']
if isinstance(content,basestring) and content.lower() in ['quit'] or to=='quit':
if content.lower() == 'quit' or to == 'quit': if content.lower() == 'quit' or to == 'quit':
channel.close() channel.close()
elif content.lower() == 'ping' or to == 'ping':
self.post(to=sender,content="1")
else: else:
id = to.lower() id = to.lower()
actor = self.actors[id] actor = self.actors[id]
print "\tPerforming ",actor.getIdentifier()," on ",content," status ",actor.isValid(content) print [id,actor.isValid(content)]
if actor.isValid(content) : if actor is not None and actor.isValid(content) :
actor.process(content) actor.process(content)
else: else:
content = {"status":"invalid","content":content} content = {"status":"invalid","content":content}
self.post(to=sender,content=content) #self.post(to=sender,content=content)
def run(self): def run(self):
info = {} info = {}
host = self.config['api'] host = self.config['api']
uid = self.config['key'] uid = self.config['key']
qid = self.config['id'] qid = self.config['id']
if not self.is_master_node :
qlistener = QueueListener(qid=qid,uid=uid,host=host) qlistener = QueueListener(qid=qid,uid=uid,host=host)
qlistener.callback = self.callback qlistener.callback = self.callback
qlistener.read() qlistener.read()
@ -193,14 +219,7 @@ config = {
#thread = Orchestrator(config) #thread = Orchestrator(config)
#thread.start() #thread.start()
config = { thread = Orchestrator()
"master":"demo-000",
"id":"demo-001",
"key":"[0v8]-247&7!v3","api":"localhost"
}
thread = Orchestrator(config)
thread.start() thread.start()
#config = {"id":"demo","key":"[0v8]-247&7!v3","api":"localhost"} #config = {"id":"demo","key":"[0v8]-247&7!v3","api":"localhost"}

@ -74,6 +74,7 @@ class ICollector(Thread) :
write_class = self.config['store']['class']['write'] write_class = self.config['store']['class']['write']
read_args = self.config['store']['args'] read_args = self.config['store']['args']
DELAY = self.config['delay'] * 60 DELAY = self.config['delay'] * 60
while self.quit == False: while self.quit == False:
for thread in self.pool : for thread in self.pool :
@ -91,7 +92,17 @@ class ICollector(Thread) :
# #
# At this point we should check for the status and if it prompts an action # At this point we should check for the status and if it prompts an action
# @TODO Use a design pattern for this ... # @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() self.lock.acquire()
store = self.factory.instance(type=write_class,args=read_args) store = self.factory.instance(type=write_class,args=read_args)
store.flush(size=200) store.flush(size=200)

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

Loading…
Cancel
Save