diff options
| author | mjkwiatkowski <mati.rewa@gmail.com> | 2026-07-04 10:37:33 +0200 |
|---|---|---|
| committer | mjkwiatkowski <mati.rewa@gmail.com> | 2026-07-04 10:37:33 +0200 |
| commit | 2cd079ce2ac68061b53848f87fa95bf46d717e3a (patch) | |
| tree | 97d03cec4c156b496c14c9c485d7ffb65eac0f85 | |
| parent | 585d105e905744802b40b3a7f6c9ba6d87a1f3ad (diff) | |
feat: finished figure 5.1
| -rw-r--r-- | content/implementation.tex | 41 | ||||
| -rw-r--r-- | images/flow_diagram.pdf | bin | 42767 -> 55353 bytes | |||
| -rw-r--r-- | images/flow_diagram.png | bin | 0 -> 474395 bytes | |||
| -rw-r--r-- | sources/flow_diagram.drawio | 368 | ||||
| -rw-r--r-- | sources/listings.tex | 33 | ||||
| -rw-r--r-- | style/style.tex | 4 |
6 files changed, 226 insertions, 220 deletions
diff --git a/content/implementation.tex b/content/implementation.tex index d070b1a..d5dd5c1 100644 --- a/content/implementation.tex +++ b/content/implementation.tex @@ -50,48 +50,15 @@ For a specific overview of advantages of \code{OpenDC} and a thorough comparison \begin{figure}[t] \centering - \includegraphics[width=\linewidth]{images/flow_diagram.pdf} - \caption{The data flow within \gls{my_system} (work under progress).} + \includegraphics[width=\linewidth]{images/flow_diagram.png} + \caption{The data flow within \gls{my_system}.} \label{fig:flow_diagram} \end{figure} \section{Data Flow}\label{ss:data_flow} -\begin{minipage}[b]{0.48\textwidth} - \begin{lstlisting} -name=postgresql-sink -connector.class=io.confluent.connect.jdbc.JdbcSinkConnector -tasks.max=1 -key.converter=org.apache.kafka.connect.storage.StringConverter -value.converter=io.confluent.connect.protobuf.ProtobufConverter -value.converter.schema.registry.url=http://localhost:8081 -topics=postgres_topic -connection.url=jdbc:postgresql://127.0.0.1:5432/opendc -connection.user=matt -connection.password=admin -auto.create=true -auto.evolve=true -insert.mode=insert -table.name.format=postgres_topic - \end{lstlisting} -\end{minipage} -\hspace{0.3cm} -\begin{minipage}[b]{0.48\textwidth} - \begin{lstlisting} -name=kafka-connect-redis -topics=postgres_topic -tasks.max=1 -connector.class=com.redis.kafka.connect.RedisSinkConnector -key.converter=org.apache.kafka.connect.storage.StringConverter -value.converter=io.confluent.connect.protobuf.ProtobufConverter -value.converter.schema.registry.url=http://localhost:8081 -transforms=downtime -transforms.downtime.type=io.confluent.connect.transforms.Filter$Value -transforms.downtime.filter.condition=$[?(@.downtime == '0.0')] -transforms.downtime.filter.type=exclude -transforms.downtime.missing.or.null.behavior=fail - \end{lstlisting} -\end{minipage} +\input{sources/listings.tex} \ipsum[1-2] + \section{Programming Effort}\label{ss:programming} diff --git a/images/flow_diagram.pdf b/images/flow_diagram.pdf Binary files differindex 7c8cff8..23ed41d 100644 --- a/images/flow_diagram.pdf +++ b/images/flow_diagram.pdf diff --git a/images/flow_diagram.png b/images/flow_diagram.png Binary files differnew file mode 100644 index 0000000..d5ae2e8 --- /dev/null +++ b/images/flow_diagram.png diff --git a/sources/flow_diagram.drawio b/sources/flow_diagram.drawio index 4ba801c..b90053b 100644 --- a/sources/flow_diagram.drawio +++ b/sources/flow_diagram.drawio @@ -1,250 +1,256 @@ <mxfile host="app.diagrams.net"> <diagram name="Page-1" id="IHLSk4WjmBoyFInqokHk"> - <mxGraphModel dx="622" dy="1514" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> + <mxGraphModel dx="780" dy="1607" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> - <mxCell id="STOea7n3b3Z7_x22HU5Q-147" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#000000;shadow=1;shadowOffsetY=2;shadowBlur=0;" value="" vertex="1"> - <mxGeometry height="90" width="170" x="180" y="-30" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-3" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="40" width="119" x="121" y="-600" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-56" connectable="0" parent="1" style="group;fontStyle=1;shadow=1;shadowOffsetY=2;shadowBlur=0;" value="" vertex="1"> - <mxGeometry height="140" width="90" x="80" y="60" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-1" parent="vrZOcUmMji_0S6pmH-fB-3" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#f8cecc;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-32" parent="STOea7n3b3Z7_x22HU5Q-56" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#BAE1FC;strokeColor=#000000;shadow=1;shadowOffsetX=2;shadowOffsetY=2;shadowBlur=0;" value="" vertex="1"> - <mxGeometry height="140" width="90" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-2" parent="vrZOcUmMji_0S6pmH-fB-3" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>OpenDC</b><div><i>(Physical Twin)</i></div>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-43" connectable="0" parent="STOea7n3b3Z7_x22HU5Q-56" style="group" value="" vertex="1"> - <mxGeometry height="100" width="70" x="10" y="34" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-4" connectable="0" parent="1" style="group;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="" vertex="1"> + <mxGeometry height="40" width="119" x="280" y="-600" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-33" parent="STOea7n3b3Z7_x22HU5Q-43" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9CE8B0;strokeColor=#000000;" value="" vertex="1"> - <mxGeometry height="100" width="70" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-5" parent="vrZOcUmMji_0S6pmH-fB-4" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#dae8fc;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-34" edge="1" parent="STOea7n3b3Z7_x22HU5Q-43" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint y="20" as="sourcePoint" /> - <mxPoint x="70" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-6" parent="vrZOcUmMji_0S6pmH-fB-4" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>Kafka Topic</b>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-35" edge="1" parent="STOea7n3b3Z7_x22HU5Q-43" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint y="39.80000000000001" as="sourcePoint" /> - <mxPoint x="70" y="39.80000000000001" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-7" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="vrZOcUmMji_0S6pmH-fB-6"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-36" edge="1" parent="STOea7n3b3Z7_x22HU5Q-43" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint y="60" as="sourcePoint" /> - <mxPoint x="70" y="60" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-8" connectable="0" parent="1" style="group;fillColor=#ffe6cc;strokeColor=#d79b00;" value="" vertex="1"> + <mxGeometry height="40" width="119" x="440" y="-600" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-37" edge="1" parent="STOea7n3b3Z7_x22HU5Q-43" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint y="80" as="sourcePoint" /> - <mxPoint x="70" y="80" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-9" parent="vrZOcUmMji_0S6pmH-fB-8" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#ffe6cc;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-38" parent="STOea7n3b3Z7_x22HU5Q-43" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;contract=0;fontSize=9;" value="<font>Timestamp</font>" vertex="1"> - <mxGeometry height="10" width="50" x="10" y="5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-10" parent="vrZOcUmMji_0S6pmH-fB-8" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>Redis<br>Stream</b>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-39" parent="STOea7n3b3Z7_x22HU5Q-43" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=10;" value="<span>Host ID</span>" vertex="1"> - <mxGeometry height="10" width="50" x="10" y="24" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-11" connectable="0" parent="1" style="group;fillColor=#e1d5e7;strokeColor=#9673a6;" value="" vertex="1"> + <mxGeometry height="40" width="119" x="440" y="-520" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-40" parent="STOea7n3b3Z7_x22HU5Q-43" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=10;" value="<span>Downtime</span>" vertex="1"> - <mxGeometry height="10" width="50" x="10" y="45" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-12" parent="vrZOcUmMji_0S6pmH-fB-11" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#e1d5e7;strokeColor=#000000;" value="<b>PostgreSQL<br>Database</b>" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-41" parent="STOea7n3b3Z7_x22HU5Q-43" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=10;" value="<span>Power Usage</span>" vertex="1"> - <mxGeometry height="10" width="62" x="4" y="86" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-19" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="40" width="119" x="280" y="-680" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-42" parent="STOea7n3b3Z7_x22HU5Q-43" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value=". . .&nbsp;" vertex="1"> - <mxGeometry height="30" width="60" x="6" y="55" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-20" parent="vrZOcUmMji_0S6pmH-fB-19" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#d5e8d4;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-55" parent="STOea7n3b3Z7_x22HU5Q-56" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontStyle=1" value="Producer<br>Record" vertex="1"> - <mxGeometry height="30" width="60" x="15" y="1" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-21" parent="vrZOcUmMji_0S6pmH-fB-19" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>Analytics<br>Engine</b>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-58" edge="1" parent="1" source="STOea7n3b3Z7_x22HU5Q-2" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" target="STOea7n3b3Z7_x22HU5Q-32" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="120" y="60" as="sourcePoint" /> - <mxPoint x="180" y="60" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-22" connectable="0" parent="1" style="group;fillColor=#fff2cc;strokeColor=#d6b656;" value="" vertex="1"> + <mxGeometry height="40" width="119" x="280" y="-520" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-59" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="120" y="40" as="sourcePoint" /> - <mxPoint x="80" y="60" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-23" parent="vrZOcUmMji_0S6pmH-fB-22" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#fff2cc;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-60" edge="1" parent="1" source="STOea7n3b3Z7_x22HU5Q-30" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;entryX=-0.002;entryY=0.656;entryDx=0;entryDy=0;entryPerimeter=0;" target="STOea7n3b3Z7_x22HU5Q-145" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="280" y="40" as="sourcePoint" /> - <mxPoint x="306.93499999999995" y="28.914999999999964" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-24" parent="vrZOcUmMji_0S6pmH-fB-22" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>Grafana<br>Dashboard</b>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-62" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="font-size: 10px;">Send()</font>" vertex="1"> - <mxGeometry height="10" width="20" x="150" y="15.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-29" connectable="0" parent="1" style="group;fillColor=#d5e8d4;strokeColor=#82b366;" value="" vertex="1"> + <mxGeometry height="40" width="119" x="440" y="-680" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#000000;shadow=1;shadowBlur=0;shadowOffsetY=1;shadowOffsetX=1;" value="" vertex="1"> - <mxGeometry height="20" width="100" x="40" y="20" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-30" parent="vrZOcUmMji_0S6pmH-fB-29" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#d5e8d4;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-18" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="40" y="40" as="sourcePoint" /> - <mxPoint x="40" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-31" parent="vrZOcUmMji_0S6pmH-fB-29" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontStyle=1" value="Monitoring<br>Service" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-19" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="60" y="40" as="sourcePoint" /> - <mxPoint x="60" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-38" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="40" width="119" x="121" y="-680" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-20" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="80" y="40" as="sourcePoint" /> - <mxPoint x="80" y="20" as="targetPoint" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-59" edge="1" parent="vrZOcUmMji_0S6pmH-fB-38" source="vrZOcUmMji_0S6pmH-fB-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;startArrow=none;startFill=0;dashed=1;"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="29.606060606060737" y="80" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-21" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="99.92" y="40" as="sourcePoint" /> - <mxPoint x="99.92" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-39" parent="vrZOcUmMji_0S6pmH-fB-38" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#d5e8d4;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-22" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="120" y="40" as="sourcePoint" /> - <mxPoint x="120" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-40" parent="vrZOcUmMji_0S6pmH-fB-38" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>HTTP<br>Server</b>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-24" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 7.5px;"><sub>n</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="20" y="25" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-41" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="40" width="119" x="280" y="-760" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-26" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>n-1</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="40" y="25" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-42" parent="vrZOcUmMji_0S6pmH-fB-41" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;shadowOffsetY=2;shadowBlur=0;fillColor=#d5e8d4;strokeColor=#000000;" value="" vertex="1"> + <mxGeometry height="40" width="119" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-27" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>n-2</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="60" y="25" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-43" parent="vrZOcUmMji_0S6pmH-fB-41" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<b>OpenDC</b><br><i>(Within Virtual Twin)</i>" vertex="1"> + <mxGeometry height="30" width="119" y="5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-28" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>2</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="101" y="25" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-48" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="vrZOcUmMji_0S6pmH-fB-10"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-29" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="font-size: 10px;">. . .</font>" vertex="1"> - <mxGeometry height="10" width="20" x="80" y="25" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-49" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="vrZOcUmMji_0S6pmH-fB-12"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-30" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>1</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="120" y="25" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-50" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="vrZOcUmMji_0S6pmH-fB-24"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-67" edge="1" parent="1" style="endArrow=none;dashed=1;html=1;strokeWidth=2;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;dashPattern=1 1;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <Array as="points"> - <mxPoint x="20" y="40" /> - <mxPoint x="20" y="20" /> - </Array> - <mxPoint x="40" y="40" as="sourcePoint" /> - <mxPoint x="40" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-51" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-1"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-73" connectable="0" parent="1" style="group;shadow=1;shadowOffsetX=3;shadowOffsetY=2;shadowBlur=0;shadowOpacity=1;" value="" vertex="1"> - <mxGeometry height="63" width="90" x="40" y="-63" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-52" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-9"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-69" parent="STOea7n3b3Z7_x22HU5Q-73" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF9736;shadow=1;shadowBlur=0;shadowOffsetX=2;shadowOffsetY=2;" value="" vertex="1"> - <mxGeometry height="73" width="90" y="-10" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-53" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-21"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-68" parent="STOea7n3b3Z7_x22HU5Q-73" style="rounded=0;whiteSpace=wrap;html=1;" value="Simulation<br>Engine" vertex="1"> - <mxGeometry height="30" width="70" x="10" y="28" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-54" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="vrZOcUmMji_0S6pmH-fB-20"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-167" parent="STOea7n3b3Z7_x22HU5Q-73" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="font-size: 10px;">(Physical Twin)</font>" vertex="1"> - <mxGeometry height="10" width="70" x="10" y="10" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-56" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-42"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-75" edge="1" parent="1" source="STOea7n3b3Z7_x22HU5Q-68" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <Array as="points"> - <mxPoint x="30" y="-20" /> - </Array> - <mxPoint x="20" y="80" as="sourcePoint" /> - <mxPoint x="30" y="20" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-57" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" target="vrZOcUmMji_0S6pmH-fB-20"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-76" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=10;" value="Register()" vertex="1"> - <mxGeometry height="20" width="60" x="30" y="1" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-58" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-40"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-145" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#000000;shadow=1;shadowOffsetY=2;shadowBlur=0;" value="" vertex="1"> - <mxGeometry height="60" width="140" x="195" y="-9.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-60" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-39"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-142" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontStyle=0" value="Kafka Topic" vertex="1"> - <mxGeometry height="30" width="80" x="225" y="-8.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-61" edge="1" parent="1" source="vrZOcUmMji_0S6pmH-fB-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;dashed=1;" target="vrZOcUmMji_0S6pmH-fB-21"> + <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-91" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#000000;shadow=1;shadowBlur=0;shadowOffsetY=1;shadowOffsetX=1;" value="" vertex="1"> - <mxGeometry height="20" width="100" x="225" y="20.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-69" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="29" width="86" x="100" y="-520" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-92" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="225" y="40.5" as="sourcePoint" /> - <mxPoint x="225" y="20.5" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-62" parent="vrZOcUmMji_0S6pmH-fB-69" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1"> + <mxGeometry height="29" width="86" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-93" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> + <mxCell id="vrZOcUmMji_0S6pmH-fB-65" edge="1" parent="vrZOcUmMji_0S6pmH-fB-69" style="endArrow=classic;html=1;rounded=0;" value=""> <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="245" y="40.5" as="sourcePoint" /> - <mxPoint x="245" y="20.5" as="targetPoint" /> + <mxPoint x="9" y="10" as="sourcePoint" /> + <mxPoint x="41" y="10" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-94" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> + <mxCell id="vrZOcUmMji_0S6pmH-fB-66" edge="1" parent="vrZOcUmMji_0S6pmH-fB-69" style="endArrow=classic;html=1;rounded=0;dashed=1;" value=""> <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="265" y="40.5" as="sourcePoint" /> - <mxPoint x="265" y="20.5" as="targetPoint" /> + <mxPoint x="9" y="22" as="sourcePoint" /> + <mxPoint x="41" y="22" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-95" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="284.92" y="40.5" as="sourcePoint" /> - <mxPoint x="284.92" y="20.5" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-67" parent="vrZOcUmMji_0S6pmH-fB-69" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="font-size: 10px;">Data</font>" vertex="1"> + <mxGeometry height="4" width="37" x="38" y="6.5" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-96" edge="1" parent="1" style="endArrow=none;html=1;rounded=0;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <mxPoint x="305" y="40.5" as="sourcePoint" /> - <mxPoint x="305" y="20.5" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-68" parent="vrZOcUmMji_0S6pmH-fB-69" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<span style="font-size: 10px;">Control</span>" vertex="1"> + <mxGeometry height="4" width="37" x="42.5" y="20" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-97" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 7.5px;"><sub>n</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="205" y="25.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-80" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="10" width="10" x="255" y="-585" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-98" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>n-1</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="225" y="25.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-81" parent="vrZOcUmMji_0S6pmH-fB-80" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" value="" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-99" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>n-2</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="245" y="25.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-82" parent="vrZOcUmMji_0S6pmH-fB-80" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="color: rgb(255, 255, 255); font-size: 8px;">1</font>" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-100" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>2</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="286" y="25.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-86" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="10" width="10" x="414" y="-585" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-101" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="font-size: 10px;">. . .</font>" vertex="1"> - <mxGeometry height="10" width="20" x="265" y="25.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-87" parent="vrZOcUmMji_0S6pmH-fB-86" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" value="" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-102" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<i><font style="font-size: 9px;">R</font><font style="font-size: 6.25px;"><sub>1</sub></font></i>" vertex="1"> - <mxGeometry height="10" width="20" x="305" y="25.5" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-88" parent="vrZOcUmMji_0S6pmH-fB-86" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">2</span></font>" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-103" edge="1" parent="1" style="endArrow=none;dashed=1;html=1;strokeWidth=2;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;dashPattern=1 1;" value=""> - <mxGeometry height="50" relative="1" width="50" as="geometry"> - <Array as="points"> - <mxPoint x="205" y="40.5" /> - <mxPoint x="205" y="20.5" /> - </Array> - <mxPoint x="225" y="40.5" as="sourcePoint" /> - <mxPoint x="225" y="20.5" as="targetPoint" /> - </mxGeometry> + <mxCell id="vrZOcUmMji_0S6pmH-fB-89" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="10" width="10" x="414" y="-544" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-90" parent="vrZOcUmMji_0S6pmH-fB-89" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" value="" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-91" parent="vrZOcUmMji_0S6pmH-fB-89" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">3</span></font>" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-92" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="10" width="10" x="415" y="-505" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-93" parent="vrZOcUmMji_0S6pmH-fB-92" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" value="" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-94" parent="vrZOcUmMji_0S6pmH-fB-92" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">4</span></font>" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-95" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="10" width="10" x="414" y="-625" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-96" parent="vrZOcUmMji_0S6pmH-fB-95" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" value="" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-97" parent="vrZOcUmMji_0S6pmH-fB-95" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">5</span></font>" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-98" connectable="0" parent="1" style="group" value="" vertex="1"> + <mxGeometry height="10" width="10" x="305" y="-708" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-99" parent="vrZOcUmMji_0S6pmH-fB-98" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" value="" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-100" parent="vrZOcUmMji_0S6pmH-fB-98" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">6</span></font>" vertex="1"> + <mxGeometry height="10" width="10" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-103" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="146" y="-626" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-104" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font style="color: rgb(255, 255, 255); font-size: 8px;">1</font>" vertex="1"> + <mxGeometry height="10" width="10" x="146" y="-626" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-105" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="205" y="-625" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-106" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">2</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="205" y="-625" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-107" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="253" y="-658" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-108" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">3</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="253" y="-658" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-109" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="253" y="-674" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-110" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">4</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="253" y="-674" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-111" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="494.5" y="-626" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-112" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">5</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="494.5" y="-626" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-113" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="364" y="-704" as="geometry" /> + </mxCell> + <mxCell id="vrZOcUmMji_0S6pmH-fB-114" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">7</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="364" y="-704" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-148" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontStyle=1" value="Kafka Broker" vertex="1"> - <mxGeometry height="30" width="80" x="226" y="-35" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-115" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="418" y="-666" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-71" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontStyle=1" value="OpenDC" vertex="1"> - <mxGeometry height="10" width="60" x="55" y="-67" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-116" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">6</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="418" y="-666" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-168" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="" vertex="1"> - <mxGeometry height="70" width="120" x="365" y="-75" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-117" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;dashed=1;fillColor=#989898;" value="" vertex="1"> + <mxGeometry height="10" width="10" x="235" y="-505" as="geometry" /> </mxCell> - <mxCell id="STOea7n3b3Z7_x22HU5Q-169" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="" vertex="1"> - <mxGeometry height="70" width="120" x="365" y="20" as="geometry" /> + <mxCell id="vrZOcUmMji_0S6pmH-fB-118" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="<font color="#ffffff"><span style="font-size: 8px;">8</span></font>" vertex="1"> + <mxGeometry height="10" width="10" x="235" y="-505" as="geometry" /> </mxCell> </root> </mxGraphModel> diff --git a/sources/listings.tex b/sources/listings.tex new file mode 100644 index 0000000..89cf05a --- /dev/null +++ b/sources/listings.tex @@ -0,0 +1,33 @@ +\begin{minipage}[b]{0.48\textwidth} + \begin{lstlisting}[caption=Kafka PostgreSQL sink., label={lst:postgresql-sink}] +name=postgresql-sink +connector.class=io.confluent.connect.jdbc.JdbcSinkConnector +tasks.max=1 +key.converter=org.apache.kafka.connect.storage.StringConverter +value.converter=io.confluent.connect.protobuf.ProtobufConverter +value.converter.schema.registry.url=http://localhost:8081 +topics=postgres_topic +connection.url=jdbc:postgresql://127.0.0.1:5432/opendc +connection.user=matt +connection.password=admin +auto.create=true +auto.evolve=true +insert.mode=insert +table.name.format=postgres_topic\end{lstlisting} +\end{minipage} +\hspace{0.3cm} +\begin{minipage}[b]{0.48\textwidth} + \begin{lstlisting}[caption=Kafka Redis sink., label={lst:redis-sink}] +name=kafka-connect-redis +topics=postgres_topic +tasks.max=1 +connector.class=com.redis.kafka.connect.RedisSinkConnector +key.converter=org.apache.kafka.connect.storage.StringConverter +value.converter=io.confluent.connect.protobuf.ProtobufConverter +value.converter.schema.registry.url=http://localhost:8081 +transforms=downtime +transforms.downtime.type=io.confluent.connect.transforms.Filter$Value +transforms.downtime.filter.condition=$[?(@.downtime == '0.0')] +transforms.downtime.filter.type=exclude +transforms.downtime.missing.or.null.behavior=fail\end{lstlisting} +\end{minipage} diff --git a/style/style.tex b/style/style.tex index 87990f6..f1b06a1 100644 --- a/style/style.tex +++ b/style/style.tex @@ -34,13 +34,13 @@ \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codegray}{rgb}{0.2,0.2,0.2} \definecolor{codepurple}{rgb}{0.58,0,0.82} -\definecolor{backcolour}{rgb}{1.2,1.2,0.95} +\definecolor{backcolour}{rgb}{0.94,0.9725,1} \lstdefinestyle{mystyle}{ backgroundcolor=\color{backcolour}, commentstyle=\color{codegreen}, keywordstyle=\color{magenta}, - numberstyle=\tiny\color{codegray}, + numberstyle=\sffamily\tiny\color{codegray}, stringstyle=\color{codepurple}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, |
