Skip to content

Commit

Permalink
feat: extend plantuml entities with 'participant', 'boundary', 'contr…
Browse files Browse the repository at this point in the history
…ol', 'entity', 'database', 'collections', 'queue'
  • Loading branch information
tsypuk committed Jan 8, 2024
1 parent e806763 commit dccb771
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 30 deletions.
37 changes: 31 additions & 6 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,17 @@ def extract_actors_and_participants(sequence_diagram):
if strip.startswith('actor'):
entity = line.strip().split()[1]
actors.append(entity)
elif strip.startswith('participant'):
elif check_if_starts_with_uml_entity(strip):
entity = line.strip().split()[1]
participants.append(entity)
return actors, participants


def check_if_starts_with_uml_entity(strip: str):
uml_entities = ['participant', 'boundary', 'control', 'entity', 'database', 'collections', 'queue']
return any(strip.startswith(prefix) for prefix in uml_entities)


# [Actor][Arrow][Actor]:Message text

# Type Description
Expand Down Expand Up @@ -514,11 +519,31 @@ def augment_from_yaml(self, yaml_name: str):
node_type=vertex['type'],
)
for edge in data['edges']:
self.add_link(
src_node_id=build_vertex_id(data['vertices'], edge, 'src'),
dst_node_id=build_vertex_id(data['vertices'], edge, 'dst'),
action=[edge['label']]
)
match edge['link_type']:
case 'bi':
self.add_bidirectional_link(
src_node_id=build_vertex_id(data['vertices'], edge, 'src'),
dst_node_id=build_vertex_id(data['vertices'], edge, 'dst'),
action=[edge['label']]
)
case 'uni':
self.add_unidirectional_link(
src_node_id=build_vertex_id(data['vertices'], edge, 'src'),
dst_node_id=build_vertex_id(data['vertices'], edge, 'dst'),
action=[edge['label']]
)
case 'rev':
self.add_unidirectional_reverse_link(
src_node_id=build_vertex_id(data['vertices'], edge, 'src'),
dst_node_id=build_vertex_id(data['vertices'], edge, 'dst'),
action=[edge['label']]
)
case _:
self.add_link(
src_node_id=build_vertex_id(data['vertices'], edge, 'src'),
dst_node_id=build_vertex_id(data['vertices'], edge, 'dst'),
action=[edge['label']]
)

def read_nodes_from_file(self, file_name: str):
print(file_name)
Expand Down
38 changes: 19 additions & 19 deletions samples/output/output.prod.iam-roles-from-yaml.drawio
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,53 @@
<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="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name" value="&lt;b&gt;Name&lt;/b&gt;: prod-lambda-name&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name" 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="-200" y="-256" />
<mxGeometry width="69" height="72" as="geometry" x="-200" y="-256"/>
</mxCell>
<mxCell id="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" value="&lt;b&gt;Name&lt;/b&gt;: role-lambda-name&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789012:role/prod-lambda-name" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;shape=mxgraph.aws3.role;fillColor=#759C3E;gradientColor=none;" parent="1" vertex="1">
<mxGeometry width="94.5" height="79.5" as="geometry" x="-72.25" y="-3.749999999999836" />
<mxGeometry width="94.5" height="79.5" as="geometry" x="-72.25" y="-3.749999999999836"/>
</mxCell>
<mxCell id="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" value="&lt;b&gt;Name&lt;/b&gt;: prod-cloudwatch-policy&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#3F8624;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.policy;" parent="1" vertex="1">
<mxGeometry width="78" height="67" as="geometry" x="305.5347983750431" y="260.9986604673808" />
<mxGeometry width="78" height="67" as="geometry" x="305.5347983750431" y="260.9986604673808"/>
</mxCell>
<mxCell id="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" value="&lt;b&gt;Name&lt;/b&gt;: prod-s3-policy&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789012:policy/prod-s3-policy" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#3F8624;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.policy;" parent="1" vertex="1">
<mxGeometry width="78" height="67" as="geometry" x="-240" y="160.00000000000003" />
<mxGeometry width="78" height="67" as="geometry" x="-240" y="160.00000000000003"/>
</mxCell>
<mxCell id="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" value="&lt;b&gt;Name&lt;/b&gt;: prod-dynamodb-policy&lt;BR&gt;&lt;b&gt;ARN&lt;/b&gt;: arn:aws:iam::123456789012:policy/prod-dynamo-policy" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#3F8624;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.policy;" parent="1" vertex="1">
<mxGeometry width="78" height="67" as="geometry" x="260.00479837504315" y="-49.99866046738077" />
<mxGeometry width="78" height="67" as="geometry" x="260.00479837504315" y="-49.99866046738077"/>
</mxCell>
<mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name:to:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name" target="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" edge="2">
<mxGeometry as="geometry" />
<mxCell id="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name:to:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" style="jettySize=auto;html=1;startArrow=classic;endArrow=classic;" parent="1" source="vertex:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name" target="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="label:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name:to:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" value="HasRole" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:prod-lambda-name:to:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint as="offset" />
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" edge="2">
<mxGeometry as="geometry" />
<mxCell id="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="label:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" value="Allow CloudWatch logs" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-cloudwatch-policy" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint as="offset" />
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" edge="2">
<mxGeometry as="geometry" />
<mxCell id="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="label:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" value="Allow S3 access" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-s3-policy" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint as="offset" />
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" style="endFill=0;endArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" edge="2">
<mxGeometry as="geometry" />
<mxCell id="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" style="jettySize=auto;html=1;startArrow=none;endArrow=none;" parent="1" source="vertex:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name" target="vertex:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" edge="2">
<mxGeometry as="geometry"/>
</mxCell>
<mxCell id="label:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" value="Allow DynamoDB read access" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="edge:iam_role:arn:aws:iam::123456789012:role/prod-lambda-name:to:iam_policy:arn:aws:iam::123456789012:policy/prod-dynamo-policy" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint as="offset" />
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
</root>
Expand Down

0 comments on commit dccb771

Please sign in to comment.