def add_node(g: Graph, node): # zones are used to prevent cyclies if not node['role']: g.add_node(node['name'], **node_attrs(type='zone')) # if you do not supply a zone, the node is interpreted as being a machine # the role is attached as tag to the AWS instance and can be used to run # tasks only on machines with a certain role (see mockfog_application.yml notebook) else: g.add_node(node['name'], **node_attrs(role=node.get('role', None), flavor=node.get('flavor', None), image=node.get('image', None)))
def debug_topology(g: Graph): # Cloud zone #1 g.add_node('cloud1', **node_attrs(type='zone')) g.add_node('cloud1_broker1', **node_attrs(role='broker')) g.add_node( 'cloud1_client1', **node_attrs(role='client', client_config=[ pub_config(connect_to='cloud1_broker1', topic='topic1', frequency=100), pub_config(connect_to='cloud1_broker1', topic='topic2', frequency=10, payload_size=2000) ])) g.add_node( 'cloud1_client2', **node_attrs(role='client', client_config=[ sub_config(connect_to='cloud1_broker1', topic='topic1'), sub_config(connect_to='cloud1_broker1', topic='topic2') ])) g.add_edge('cloud1_broker1', 'cloud1', **edge_attrs(delay=2)) g.add_edge('cloud1_client1', 'cloud1', **edge_attrs(delay=2)) g.add_edge('cloud1_client2', 'cloud1', **edge_attrs(delay=2))
def simple_topology(g: Graph): # zones are used to prevent cyclies g.add_node('cloud1', **node_attrs(type='zone')) # if you do not supply a zone, the node is interpreted as being a machine # the role is attached as tag to the AWS instance and can be used to run tasks only on machines with a certain role (see mockfog_application.yml notebook) g.add_node( 'cloud1_broker1', **node_attrs( role='broker', # there can be multiple app configs, if needed app_configs=[ app_config( # this automatically adds an internal_ip field to the output with the respective node ip connect_to='cloud1_client1', # you can define in commons whether fields are mandatory timeout=10) ])) g.add_node( 'cloud1_client1', **node_attrs( role='client', app_configs=[app_config(connect_to='cloud1_client2', timeout=10)])) g.add_node( 'cloud1_client2', **node_attrs( role='client', app_configs=[app_config(connect_to='cloud1_client1', timeout=10)])) g.add_edge('cloud1_broker1', 'cloud1', **edge_attrs(delay=4)) g.add_edge('cloud1_client1', 'cloud1', **edge_attrs(delay=2)) g.add_edge('cloud1_client2', 'cloud1', **edge_attrs(delay=2))
def make_graph(): g = Graph() accounts = listdir(DATA_PATH) for account in accounts: g.add_node(account) direct_connections = open( '../data/instagram/ikeybenz/connections.txt').read().splitlines() for connection in direct_connections: g.add_edge('ikeybenz', connection) g.add_edge(connection, 'ikeybenz') for account in accounts: try: # Some connections have no mutual followers with me mutual_followers_of_account = open( f'{DATA_PATH}/{account}/mutuals_with_ikeybenz.txt').read().splitlines() except: # In that case, skip current account continue for follower in mutual_followers_of_account: g.add_edge(follower, account) return g
def simple_topology(g: Graph): # zones are used to prevent cyclies g.add_node('cloud1', **node_attrs(type='zone')) # if you do not supply a zone, the node is interpreted as being a machine # the role is attached as tag to the AWS instance and can be used to run tasks only on machines with a certain role (see mockfog_application.yml notebook) g.add_node('broker1', **node_attrs(role='broker', app_configs=[broker_config()])) g.add_node( 'client1', **node_attrs(role='client', app_configs=[client_config(connect_to='broker1')])) g.add_node( 'client2', **node_attrs(role='client', app_configs=[client_config(connect_to='broker1')])) g.add_edge('broker1', 'cloud1', **edge_attrs(delay=0)) g.add_edge('client1', 'cloud1', **edge_attrs(delay=5)) g.add_edge('client2', 'cloud1', **edge_attrs(delay=10))
def reference_topology_bridge(g: Graph): # Cloud nodes g.add_node('cloud1', **node_attrs(type='zone')) g.add_node( 'cloud1_client1', **node_attrs(role='client', client_config=[ pub_config( connect_to='cloud1_broker1', topic='/push-infos/road-conditions', frequency=5, payload_size=10000, ), sub_config( connect_to='cloud1_broker1', topic='/car-telemetry/aggregated/#', ), sub_config( connect_to='cloud1_broker1', topic='/traffic-control/camera-feed/#', ), ])) g.add_node('cloud1_broker1', **node_attrs(role='broker', flavor='t3.small')) # Edge zone #1 g.add_node('edge1', **node_attrs(type='zone')) g.add_node( 'edge1_client1', **node_attrs(role='client', client_config=[ pub_config( connect_to='edge1_broker1', topic='/traffic-control/camera-feed/1', frequency=20, payload_size=500000, ), ])) g.add_node( 'edge1_client2', **node_attrs(role='client', client_config=[ sub_config( connect_to='edge1_broker2', topic='/car-telemetry/realtime/3', ), sub_config( connect_to='edge1_broker2', topic='/car-telemetry/realtime/4', ), pub_config( connect_to='edge1_broker2', topic='/car-telemetry/aggregated/2', frequency=5, payload_size=4000, ), pub_config( connect_to='edge1_broker2', topic='/car-telemetry/realtime/2', frequency=100, payload_size=200, ), ])) g.add_node( 'edge1_client3', **node_attrs(role='client', client_config=[ sub_config( connect_to='edge1_broker3', topic='/car-telemetry/realtime/2', ), sub_config( connect_to='edge1_broker3', topic='/car-telemetry/realtime/4', ), pub_config( connect_to='edge1_broker3', topic='/car-telemetry/aggregated/3', frequency=5, payload_size=4000, ), pub_config( connect_to='edge1_broker3', topic='/car-telemetry/realtime/3', frequency=100, payload_size=200, ), ])) g.add_node( 'edge1_client4', **node_attrs(role='client', client_config=[ sub_config( connect_to='edge1_broker3', topic='/car-telemetry/realtime/2', ), sub_config( connect_to='edge1_broker3', topic='/car-telemetry/realtime/3', ), pub_config( connect_to='edge1_broker3', topic='/car-telemetry/aggregated/4', frequency=5, payload_size=4000, ), pub_config( connect_to='edge1_broker3', topic='/car-telemetry/realtime/4', frequency=100, payload_size=200, ), ])) g.add_node('edge1_broker1', **node_attrs(role='broker', flavor='t3.small')) g.add_node('edge1_broker2', **node_attrs(role='broker', flavor='t3.small')) g.add_node('edge1_broker3', **node_attrs(role='broker', flavor='t3.small')) # Connect cloud g.add_edge('cloud1_broker1', 'cloud1', **edge_attrs(delay=2)) g.add_edge('cloud1_client1', 'cloud1', **edge_attrs(delay=2)) # Connect edge #1 g.add_edge('edge1_client1', 'edge1_broker1', **edge_attrs(delay=2)) g.add_edge('edge1_client2', 'edge1_broker2', **edge_attrs(delay=2)) g.add_edge('edge1_client3', 'edge1_broker3', **edge_attrs(delay=2)) g.add_edge('edge1_client4', 'edge1_broker3', **edge_attrs(delay=2)) g.add_edge('edge1_broker1', 'edge1_broker2', **edge_attrs(delay=2)) g.add_edge('edge1_broker2', 'edge1_broker3', **edge_attrs(delay=2)) g.add_edge('edge1', 'edge1_broker1', **edge_attrs()) # Connect to cloud g.add_edge('edge1', 'cloud1', **edge_attrs(delay=20))