Skip to content

Commit

Permalink
feat: load uml diagrams from MD files based on line number and section
Browse files Browse the repository at this point in the history
  • Loading branch information
tsypuk committed Feb 15, 2024
1 parent aba83ee commit 3cf209f
Show file tree
Hide file tree
Showing 10 changed files with 587 additions and 13 deletions.
37 changes: 30 additions & 7 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def check_if_starts_with_uml_entity(strip: str):
# --) Dotted line with a open arrow at the end (async)
def extract_info(input_string):
# pattern = r'(.*?)(?:->>|->|-->>|-->)(.*?):(.*)'
pattern = r'(.[a-zA-Z0-9_]*)(?: ->> | -> | -->> | --> |->>|->|-->>|-->)([a-zA-Z0-9_]*)?(?::(.*))?'
pattern = r'(.[a-zA-Z0-9_]*)(?: ->> | -> | -->> | --> |->>|->|-->>|->>|-->)([a-zA-Z0-9_]*)?(?::(.*))?'
match = re.match(pattern, input_string)

if match:
Expand Down Expand Up @@ -654,18 +654,41 @@ def export_to_file(self, file_path):
with open(file_path, 'w', encoding="utf-8") as file:
file.write(resulting_xml)

def read_uml_from_md(self, md_file_name, base, start_line=0, start_tag="@startuml", end_tag="@enduml", edge_style=None, label_style=None):
with open(md_file_name, 'r') as file:
lines = file.readlines()

sequence_diagram = []
in_uml = False
for line in lines[start_line - 1:]:
if start_tag in line:
in_uml = True
if end_tag in line:
in_uml = False
sequence_diagram.append(line)
break
if in_uml:
sequence_diagram.append(line)
sequence_diagram = ''.join(sequence_diagram)

if not base:
base = md_file_name

self.process_sequence_diagram(edge_style, base, label_style, sequence_diagram)

def read_uml_from_file(self, file_name, edge_style=None, label_style=None):
with open(file_name, 'r') as file:
sequence_diagram = file.read()
base_name = os.path.splitext(os.path.basename(file_name))[0]
self.process_sequence_diagram(edge_style, base_name, label_style, sequence_diagram)

def process_sequence_diagram(self, edge_style, base_name, label_style, sequence_diagram):
actors, participants = extract_actors_and_participants(sequence_diagram)

# create Layer with UML file name
base_name = os.path.splitext(os.path.basename(file_name))[0]

self.add_layer(base_name)
self.add_layer('actors')
self.extract_messages_from_uml(sequence_diagram, actors=actors, participants=participants, layer_name=base_name, edge_style=edge_style, label_style=label_style)

# set coords for all labels
for mxLabel in self.active_root:
if mxLabel.attrib['id'].startswith('label'):
Expand Down Expand Up @@ -705,7 +728,7 @@ def extract_messages_from_uml(self, sequence_diagram, actors, participants, laye
if note_match:
# note_type = note_match.group(1)
current_note = note_match.group(2).strip()
print(f'NOTE === {current_note} ===')
# print(f'NOTE === {current_note} ===')
# add current_note to last edge (prev_edge)
self.add_note_to_existing_edge(current_note, prev_edge, prefix_counter)
current_note = ''
Expand All @@ -719,7 +742,7 @@ def extract_messages_from_uml(self, sequence_diagram, actors, participants, laye

end_note_match = end_note_pattern.match(strip)
if end_note_match:
print(f'NOTE ==={current_note} ===')
# print(f'NOTE ==={current_note} ===')
# add current_note to last edge (prev_edge)
self.add_note_to_existing_edge(current_note, prev_edge, prefix_counter)
current_note = ''
Expand All @@ -735,7 +758,7 @@ def extract_messages_from_uml(self, sequence_diagram, actors, participants, laye

entity = starts_with_any(strip, actors, participants)
if (entity == 'actor') | (entity == 'participant'):
data = extract_info(line)
data = extract_info(strip)
try:
# connect vertex of actor1 actor2 using arrow and message
action_id = action_id + 1
Expand Down
50 changes: 49 additions & 1 deletion samples/output/output.prod.end2end.drawio
Original file line number Diff line number Diff line change
@@ -1 +1,49 @@
<mxfile host="drawio-plugin" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" modified="2023-07-29T16:26:03.392Z" version="20.5.3" etag="RGBnOYraRyZaDPU7abuw" type="embed"><diagram id="diagram_1" name="AWS components"><mxGraphModel dx="2281" dy="953" 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="1"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda" value="&lt;b&gt;Name&lt;/b&gt;: producer-lambda&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda&lt;BR&gt;-----------&lt;BR&gt;&lt;b&gt;CodeSize&lt;/b&gt;: 1234&lt;BR&gt;&lt;b&gt;Handler&lt;/b&gt;: main&lt;BR&gt;&lt;b&gt;Layers&lt;/b&gt;: 0&lt;BR&gt;&lt;b&gt;Memory&lt;/b&gt;: 128&lt;BR&gt;&lt;b&gt;PackageType&lt;/b&gt;: Zip&lt;BR&gt;&lt;b&gt;Runtime&lt;/b&gt;: go1.x&lt;BR&gt;&lt;b&gt;Timeout&lt;/b&gt;: 30&lt;BR&gt;&lt;b&gt;TracingConfig&lt;/b&gt;: {'Mode': 'Active'}&lt;BR&gt;&lt;b&gt;Version&lt;/b&gt;: $LATEST" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;shape=mxgraph.aws3.lambda_function;prIcon=server;fillColor=#F58534;gradientColor=none;html=1;" parent="1" vertex="1"><mxGeometry x="-480" y="403" width="69" height="72" as="geometry"/></mxCell><mxCell id="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" value="&lt;b&gt;Name&lt;/b&gt;: consumer-lambda&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;shape=mxgraph.aws3.lambda_function;prIcon=server;fillColor=#F58534;gradientColor=none;html=1;" parent="1" vertex="1"><mxGeometry x="649.99953125" y="515" width="69" height="72" as="geometry"/></mxCell><mxCell id="vertex:dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1" value="&lt;b&gt;Name&lt;/b&gt;: table1&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:dynamodb:eu-west-1:123456789012:table/table1" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;shape=mxgraph.aws3.dynamo_db;fillColor=#2E73B8;gradientColor=none;" parent="1" vertex="1"><mxGeometry x="649.99953125" y="718.5" width="72" height="81" as="geometry"/></mxCell><mxCell id="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" value="&lt;b&gt;Name&lt;/b&gt;: internal&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:sns:eu-west-1:123456789012:internal.fifo&lt;BR&gt;-----------&lt;BR&gt;&lt;b&gt;Owner&lt;/b&gt;: 123456789&lt;BR&gt;&lt;b&gt;SubscriptionsConfirmed&lt;/b&gt;: 3&lt;BR&gt;&lt;b&gt;SubscriptionsPending&lt;/b&gt;: 0" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sns;" parent="1" vertex="1"><mxGeometry x="-70.97999999999999" y="400" width="78" height="78" as="geometry"/></mxCell><mxCell id="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" value="&lt;b&gt;Name&lt;/b&gt;: events&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo&lt;BR&gt;-----------&lt;BR&gt;&lt;b&gt;DelaySeconds&lt;/b&gt;: 0&lt;BR&gt;&lt;b&gt;FifoQueue&lt;/b&gt;: TRUE&lt;BR&gt;&lt;b&gt;ReceiveMessageWaitTimeSeconds&lt;/b&gt;: 0&lt;BR&gt;&lt;b&gt;SqsManagedSseEnabled&lt;/b&gt;: false&lt;BR&gt;&lt;b&gt;VisibilityTimeout&lt;/b&gt;: 30" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;" parent="1" vertex="1"><mxGeometry x="260" y="512" width="78" height="78" as="geometry"/></mxCell><mxCell id="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" value="&lt;b&gt;Name&lt;/b&gt;: events2&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;" parent="1" vertex="1"><mxGeometry x="260" y="310" width="78" height="78" as="geometry"/></mxCell><mxCell id="vertex:s3:arn:aws:s3:::bucket_name/key_name" value="&lt;b&gt;Name&lt;/b&gt;: key_name&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:s3:::bucket_name/key_name" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;shape=mxgraph.aws3.bucket_with_objects;fillColor=#E05243;gradientColor=none;" parent="1" vertex="1"><mxGeometry x="-78" y="720" width="78" height="78" as="geometry"/></mxCell><mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda:to:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda" target="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" edge="2"><mxGeometry as="geometry"/></mxCell><mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda:to:s3:arn:aws:s3:::bucket_name/key_name" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda" target="vertex:s3:arn:aws:s3:::bucket_name/key_name" edge="2"><mxGeometry as="geometry"/></mxCell><mxCell id="edge:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" target="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" edge="2"><mxGeometry as="geometry"/></mxCell><mxCell id="edge:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" target="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" edge="2"><mxGeometry as="geometry"/></mxCell><mxCell id="edge:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo:to:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" target="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" edge="2"><mxGeometry y="40" as="geometry"/></mxCell><mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda:to:dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" target="vertex:dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1" edge="2"><mxGeometry as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
<mxfile host="multicloud-diagrams" agent="PIP package multicloud-diagrams. Generate resources in draw.io compatible format for Cloud infrastructure. Copyrights @ Roman Tsypuk 2023. MIT license." type="MultiCloud">
<diagram id="diagram_1" name="AWS components">
<mxGraphModel dx="1015" dy="661" 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="1">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda" value="&lt;b&gt;Name&lt;/b&gt;: producer-lambda&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda&lt;BR&gt;-----------&lt;BR&gt;&lt;b&gt;CodeSize&lt;/b&gt;: 1234&lt;BR&gt;&lt;b&gt;Handler&lt;/b&gt;: main&lt;BR&gt;&lt;b&gt;Layers&lt;/b&gt;: 0&lt;BR&gt;&lt;b&gt;Memory&lt;/b&gt;: 128&lt;BR&gt;&lt;b&gt;PackageType&lt;/b&gt;: Zip&lt;BR&gt;&lt;b&gt;Runtime&lt;/b&gt;: go1.x&lt;BR&gt;&lt;b&gt;Timeout&lt;/b&gt;: 30&lt;BR&gt;&lt;b&gt;TracingConfig&lt;/b&gt;: {'Mode': 'Active'}&lt;BR&gt;&lt;b&gt;Version&lt;/b&gt;: $LATEST" style="verticalLabelPosition=bottom;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;shape=mxgraph.aws3.lambda_function;prIcon=server;fillColor=#F58534;gradientColor=none;html=1;" parent="1" vertex="1">
<mxGeometry width="69" height="72" as="geometry" x="-480" y="403"/>
</mxCell>
<mxCell id="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" value="&lt;b&gt;Name&lt;/b&gt;: consumer-lambda&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" style="verticalLabelPosition=bottom;verticalAlign=top;aspect=fixed;align=left;pointerEvents=1;shape=mxgraph.aws3.lambda_function;prIcon=server;fillColor=#F58534;gradientColor=none;html=1;" parent="1" vertex="1">
<mxGeometry width="69" height="72" as="geometry" x="649.99953125" y="515"/>
</mxCell>
<mxCell id="vertex:dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1" value="&lt;b&gt;Name&lt;/b&gt;: table1&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:dynamodb:eu-west-1:123456789012:table/table1" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;shape=mxgraph.aws3.dynamo_db;fillColor=#2E73B8;gradientColor=none;" parent="1" vertex="1">
<mxGeometry width="72" height="81" as="geometry" x="649.99953125" y="718.5"/>
</mxCell>
<mxCell id="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" value="&lt;b&gt;Name&lt;/b&gt;: internal&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:sns:eu-west-1:123456789012:internal.fifo&lt;BR&gt;-----------&lt;BR&gt;&lt;b&gt;Owner&lt;/b&gt;: 123456789&lt;BR&gt;&lt;b&gt;SubscriptionsConfirmed&lt;/b&gt;: 3&lt;BR&gt;&lt;b&gt;SubscriptionsPending&lt;/b&gt;: 0" style="sketch=0;outlineConnect=0;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sns;" parent="1" vertex="1">
<mxGeometry width="78" height="78" as="geometry" x="-70.97999999999999" y="400"/>
</mxCell>
<mxCell id="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" value="&lt;b&gt;Name&lt;/b&gt;: events&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo&lt;BR&gt;-----------&lt;BR&gt;&lt;b&gt;DelaySeconds&lt;/b&gt;: 0&lt;BR&gt;&lt;b&gt;FifoQueue&lt;/b&gt;: TRUE&lt;BR&gt;&lt;b&gt;ReceiveMessageWaitTimeSeconds&lt;/b&gt;: 0&lt;BR&gt;&lt;b&gt;SqsManagedSseEnabled&lt;/b&gt;: false&lt;BR&gt;&lt;b&gt;VisibilityTimeout&lt;/b&gt;: 30" style="sketch=0;outlineConnect=0;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;" parent="1" vertex="1">
<mxGeometry width="78" height="78" as="geometry" x="260" y="512"/>
</mxCell>
<mxCell id="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" value="&lt;b&gt;Name&lt;/b&gt;: events2&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" style="sketch=0;outlineConnect=0;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;" parent="1" vertex="1">
<mxGeometry width="78" height="78" as="geometry" x="260" y="310"/>
</mxCell>
<mxCell id="vertex:s3:arn:aws:s3:::bucket_name/key_name" value="&lt;b&gt;Name&lt;/b&gt;: key_name&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:s3:::bucket_name/key_name" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;shape=mxgraph.aws3.bucket_with_objects;fillColor=#E05243;gradientColor=none;" parent="1" vertex="1">
<mxGeometry width="78" height="78" as="geometry" x="-78" y="720"/>
</mxCell>
<mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda:to:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda" target="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda:to:s3:arn:aws:s3:::bucket_name/key_name" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:producer-lambda" target="vertex:s3:arn:aws:s3:::bucket_name/key_name" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="edge:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" target="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="edge:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:sns:arn:aws:sns:eu-west-1:123456789012:internal.fifo" target="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events2.fifo" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="edge:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo:to:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo" target="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda:to:dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer-lambda" target="vertex:dynamo:arn:aws:dynamodb:eu-west-1:123456789012:table/table1" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

0 comments on commit 3cf209f

Please sign in to comment.