コード例 #1
0
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))
コード例 #2
0
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))
コード例 #3
0
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'))
    g.add_node('cloud1_client1', **node_attrs(role='client'))
    g.add_node('cloud1_client2', **node_attrs(role='client'))

    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))
コード例 #4
0
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
コード例 #5
0
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))
コード例 #6
0
def add_edge(g: Graph, edge):
    g.add_edge(edge['u_of_edge'], edge['v_of_edge'], **edge_attrs(delay=edge.get('delay', 0)))