Exemplo n.º 1
0
def create_client(arg: Arg) -> typing.Optional[GraphClient]:
    connection_pool = ConnectionPool(arg.addr, arg.port)
    client = GraphClient(connection_pool)
    client.set_space('bgm')
    try:
        client.authenticate(arg.u, arg.p)
    except AuthException as e:
        print(e)
        return None

    return client
Exemplo n.º 2
0
    def main_test():
        client = None
        global success_flag
        try:
            client = GraphClient(connection_pool)
            if client.is_none():
                print("ERROR: None client")
                success_flag = False
                return
            space_name = 'space_' + threading.current_thread().getName()
            resp = client.authenticate('user', 'password')
            if resp.error_code != 0:
                raise AuthException('Auth failed')

            client.execute('DROP SPACE %s' % space_name)
            resp = client.execute('CREATE SPACE %s' % space_name)
            if resp.error_code != 0:
                raise ExecutionException('CREATE SPACE failed')

            resp = client.execute('USE %s' % space_name)
            if resp.error_code != 0:
                raise ExecutionException('USE SPACE failed')

            client.sign_out()
        except Exception as x:
            print(x)
            client.sign_out()
            success_flag = False
            return
Exemplo n.º 3
0
def main_test():
    client = None
    try:
        space_name = 'space_' + threading.current_thread().getName()
        print('thread name: %s, space_name : %s' % 
                (threading.current_thread().getName(), space_name))
        # Get one client
        client = GraphClient(connection_pool)
        auth_resp = client.authenticate('user', 'password')
        if auth_resp.error_code:
            raise AuthException("Auth failed")

        query_resp = client.execute_query('SHOW SPACES')
        if has_space(query_resp.rows, space_name):
            print('has %s, drop it' % space_name)
            do_simple_execute(client, 'DROP SPACE %s' % space_name)

        # Create space mySpace
        do_simple_execute(client, 'CREATE SPACE %s'
                          % space_name)

        do_simple_execute(client, 'USE %s' % space_name)
        time.sleep(1)

        # Create tag and edge
        do_simple_execute(client, 'CREATE TAG person(name string, age int); '
                                  'CREATE EDGE like(likeness double)')

        # It should large than the cycle of loading the schema
        time.sleep(6)

        # Insert vertex and edge
        do_simple_execute(client, 'INSERT VERTEX person(name, age) VALUES 1:(\'Bob\', 10)')
        do_simple_execute(client, 'INSERT VERTEX person(name, age) VALUES 2:(\'Lily\', 9)')
        do_simple_execute(client, 'INSERT VERTEX person(name, age) VALUES 3:(\'Tom\', 10)')
        do_simple_execute(client, 'INSERT VERTEX person(name, age) VALUES 4:(\'Jerry\', 13);INSERT VERTEX person(name, age) VALUES 5:(\'John\', 11)')
        do_simple_execute(client, 'INSERT EDGE like(likeness) VALUES 1->2:(80.0)')
        do_simple_execute(client, 'INSERT EDGE like(likeness) VALUES 1->3:(70.0)')
        do_simple_execute(client, 'INSERT EDGE like(likeness) VALUES 2->4:(84.0), 3->5:(68.3), 1->5:(97.2)')

        # Query data
        query_resp = client.execute_query('GO FROM 1 OVER like YIELD $$.person.name, '
                                          '$$.person.age, like.likeness')
        if query_resp.error_code:
            print('Execute failed: %s' % query_resp.error_msg)
            exit(1)

        # Print the result of query
        print(' \n====== The query result of thread[%s]======\n '
              % threading.current_thread().getName())
        print_value(query_resp.column_names, query_resp.rows)
        client.sign_out()
    except Exception as x:
        print(x)

        client.sign_out()
        exit(1)
def test_response():
    client = GraphClient(connection_pool)
    auth_resp = client.authenticate('user', 'password')
    if auth_resp.error_code:
        raise AuthException("Auth failed")

    query_resp = client.execute_query('SHOW SPACES')
    do_simple_execute(client, 'use nba')
    query_resp = client.execute_query(
        'GO FROM 100 OVER follow,serve yield follow._dst,serve._dst')

    query_resp = client.execute_query('fetch prop on * 100')
    for row in query_resp.rows:
        for ids, col in enumerate(row.columns):
            print(col)
Exemplo n.º 5
0
def read_feats():
    g_ip = '192.168.8.188'
    g_port = 3699
    connection_pool = ConnectionPool(g_ip, g_port)
    client = GraphClient(connection_pool)
    auth_resp = client.authenticate('root', '')
    if auth_resp.error_code:
        raise AuthException("Auth failed")
    client.execute_query("use cora")
    query_resp = client.execute_query("LOOKUP ON paper WHERE paper.num > 0")
    num_nodes = len(query_resp.rows)
    labels = np.empty((num_nodes, 1), dtype=np.int64)
    label_map = {}

    query_resp = client.execute_query("fetch prop ON paper 1")
    feature_str = query_resp.rows[0].columns[2].get_str().decode().replace(
        ' ', '')
    feat_data = np.zeros((num_nodes, len(feature_str)))

    adj_lists = defaultdict(set)

    for i in range(num_nodes):
        query_resp = client.execute_query("fetch prop ON paper {}".format(i))
        feature_str = query_resp.rows[0].columns[2].get_str().decode()
        label = query_resp.rows[0].columns[3].get_str().decode()
        feature = np.fromstring(str(feature_str), dtype=int, sep=' ')
        feat_data[i] = feature
        if not label in label_map:
            label_map[label] = len(label_map)
        labels[i] = label_map[label]

        edge_query = client.execute_query("GO FROM {} OVER cite".format(i + 1))
        if edge_query.rows is None:
            continue
        for row in edge_query.rows:
            paperId = row.columns[0].get_id()
            adj_lists[i].add(int(paperId))
            adj_lists[int(paperId)].add(i)

    return feat_data, labels, adj_lists
Exemplo n.º 6
0
            print('input argv num is 3')
            g_ip = sys.argv[1]
            print('ip: %s' % g_ip)
            g_port = sys.argv[2]
            print('port: %s' % g_port)

        # init connection pool
        # if your tags or edges' num is more than 10,
        # please make sure conn_num >= max(tags_num, edges_num) * 2
        conn_num = 20
        connection_pool = ConnectionPool(g_ip, g_port, conn_num)

        clients = []
        for i in range(0, conn_num):
            client = GraphClient(connection_pool)
            client.authenticate('user', 'password')
            client.execute('USE test')
            clients.append(client)
        # Get client
        resp = clients[0].execute_query('SHOW TAGS')
        if resp.error_code:
            raise ExecutionException('SHOW TAGS failed')

        tag_list = []
        for row in resp.rows:
            tag_list.append(row.columns[1].get_str().decode('utf-8'))

        resp = clients[0].execute_query('SHOW EDGES')
        if resp.error_code:
            raise ExecutionException('SHOW EDGES failed')
class Generator(object):
    def __init__(self, ip, port):
        connection_pool = ConnectionPool(ip, port, 1, 0)
        self._client = GraphClient(connection_pool)
        self._client.authenticate('root', 'nebula')
        self._spaces = []
        self._stmts = []

    def start(self):
        self.generate_space_statment()
        self.generate_configs_statment()

    def generate_space_statment(self):
        resp = self.execute("SHOW SPACES;")

        for row in resp.rows:
            self._spaces.append(row.columns[0].get_str().decode('utf-8'))

        if len(self._spaces) == 0:
            return

        for space in self._spaces:
            self._stmts.append('\n')
            self._stmts.append(
                '#  ============ Space[{}] ========='.format(space))

            resp = self.execute("SHOW CREATE SPACE {};".format(space))
            self._stmts.append(
                resp.rows[0].columns[1].get_str().decode('utf-8').replace(
                    '\n', ''))
            self.execute("USE {};".format(space))

            self._stmts.append('USE {};'.format(space))

            self.generate_tag_statment()
            self.generate_edge_statment()
            self.generate_tag_index_statment()
            self.generate_edge_index_statment()

    def generate_tag_statment(self):
        resp = self.execute("SHOW TAGS;")

        tags = []
        for row in resp.rows:
            tags.append(row.columns[1].get_str().decode('utf-8'))

        if len(tags) == 0:
            return

        for tag in tags:
            resp = self.execute("SHOW CREATE TAG {};".format(tag))
            self._stmts.append(resp.rows[0].columns[1].get_str().decode(
                'utf-8').replace('\n', '') + ';')

    def generate_edge_statment(self):
        resp = self.execute("SHOW EDGES;")

        edges = []
        for row in resp.rows:
            edges.append(row.columns[1].get_str().decode('utf-8'))

        if len(edges) == 0:
            return

        for edge in edges:
            resp = self.execute("SHOW CREATE EDGE {};".format(edge))
            self._stmts.append(resp.rows[0].columns[1].get_str().decode(
                'utf-8').replace('\n', '') + ';')

    def generate_tag_index_statment(self):
        resp = self.execute("SHOW TAG INDEXES;")

        tag_indexes = []
        for row in resp.rows:
            tag_indexes.append(row.columns[1].get_str().decode('utf-8'))

        if len(tag_indexes) == 0:
            return

        for index in tag_indexes:
            resp = self.execute("SHOW CREATE TAG INDEX {};".format(index))
            self._stmts.append(resp.rows[0].columns[1].get_str().decode(
                'utf-8').replace('\n', '') + ';')

    def generate_edge_index_statment(self):
        resp = self.execute("SHOW EDGE INDEXES;")

        edge_indexes = []
        for row in resp.rows:
            edge_indexes.append(row.columns[1].get_str().decode('utf-8'))

        if len(edge_indexes) == 0:
            return

        for index in edge_indexes:
            resp = self.execute("SHOW CREATE EDGE INDEX {};".format(index))
            self._stmts.append(resp.rows[0].columns[1].get_str().decode(
                'utf-8').replace('\n', '') + ';')

    def generate_configs_statment(self):
        resp = self.execute("SHOW CONFIGS;")

        # moduleName, configName, value
        configs = []
        for row in resp.rows:
            module = row.columns[0].get_str().decode('utf-8')
            config = row.columns[1].get_str().decode('utf-8')
            col_val = row.columns[4]
            if col_val.getType() == ttypes.ColumnValue.BOOL_VAL:
                configs.append((module, config, col_val.get_bool_val()))
            elif col_val.getType() == ttypes.ColumnValue.INTEGER:
                configs.append((module, config, col_val.get_integer()))
            elif col_val.getType() == ttypes.ColumnValue.STR:
                configs.append(
                    (module, config, col_val.get_str().decode('utf-8').replace(
                        '\n', '').replace(':', '=').replace('"', '') + ';'))
            elif col_val.getType() == ttypes.ColumnValue.DOUBLE_PRECISION:
                configs.append(
                    (module, config, col_val.get_double_precision()))
            else:
                print("ERROR: Config {}:{} type `{}' unsupported".format(
                    module, config, col_val, col_val.getType()))
                exit(1)

        if len(configs) == 0:
            return

        self._stmts.append('\n')
        self._stmts.append('#  ============ Configs =========')
        for config in configs:
            self._stmts.append('UPDATE CONFIGS {}:{} = {}'.format(
                config[0], config[1], config[2]))

    def execute(self, stmt):
        resp = self._client.execute_query(stmt)
        if resp.error_code != ttypes.ErrorCode.SUCCEEDED:
            print("Execute `SHOW SPACES' failed: ".format(resp.error_msg))
            exit(1)
        return resp

    def print(self):
        for stmt in self._stmts:
            print(stmt)

    def save_to_file(self):
        f = open(statement_file, 'w')
        for stmt in self._stmts:
            f.write(stmt + '\n')
        f.close()
        print('The generated nGQLs file is ./{}'.format(statement_file))
Exemplo n.º 8
0
                        '--config',
                        help='spark importer config path',
                        type=str,
                        default="application.conf")

    parser.add_argument(
        '-l',
        '--log_level',
        help='log level=> 10:debug, 20:info, 30:warn, 40:error',
        type=int,
        default=30)
    args = parser.parse_args()

    connection_pool = ConnectionPool(
        args.address.split(":")[0],
        args.address.split(":")[1])
    client = GraphClient(connection_pool)
    auth_resp = client.authenticate(args.user, args.password)
    if auth_resp.error_code:
        raise AuthException("Auth failed")

    conf = ConfigFactory.parse_file(args.config)

    data = []
    for j in args.jsons:
        with open(j) as f:
            data.append(json.load(f))

    logger.setLevel(args.log_level)
    verify_nebula(client, data, conf)
Exemplo n.º 9
0
def test_prepare():
    try:
        client = GraphClient(ConnectionPool(host, graph_port))
        if client is None:
            print('Error: None GraphClient')
            assert False
            return
        resp = client.authenticate('user', 'password')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute('DROP SPACE IF EXISTS %s' % space_name)
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute('CREATE SPACE %s(partition_num=1)' % space_name)
        assert resp.error_code == 0, resp.error_msg
        time.sleep(5)
        resp = client.execute('USE %s' % space_name)
        assert resp.error_code == 0, resp.error_msg
        time.sleep(5)
        resp = client.execute(
            'CREATE TAG player(name string, age int, married bool)')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute('CREATE TAG team(name string, money double)')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'CREATE EDGE follow(degree double, likeness int)')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'CREATE EDGE serve(start timestamp, end timestamp)')
        assert resp.error_code == 0, resp.error_msg
        time.sleep(12)
        resp = client.execute(
            'INSERT VERTEX player(name, age, married) VALUES 101:(\'Bob\', 18, FALSE)'
        )
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT VERTEX player(name, age, married) VALUES 102:(\'Tom\', 22, TRUE)'
        )
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT VERTEX player(name, age, married) VALUES 103:(\'Jerry\', 19, FALSE)'
        )
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT VERTEX team(name, money) VALUES 201:(\'Red Bull\', 185.85)'
        )
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT VERTEX team(name, money) VALUES 202:(\'River\', 567.93)')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT EDGE follow(degree, likeness) VALUES 101->102:(94.7, 45)')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT EDGE follow(degree, likeness) VALUES 102->103:(86.3, 79)')
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT EDGE serve(start, end) VALUES 101->201:(\'2001-09-01 08:00:00\', \'2010-09-01 08:00:00\')'
        )
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT EDGE serve(start, end) VALUES 102->202:(\'1998-08-22 06:45:54\', \'2020-01-23 17:23:35\')'
        )
        assert resp.error_code == 0, resp.error_msg
        resp = client.execute(
            'INSERT EDGE serve(start, end) VALUES 103->201:(\'2006-11-18 13:28:29\', \'2009-12-12 12:21:46\')'
        )
        assert resp.error_code == 0, resp.error_msg
    except Exception as ex:
        print(ex)
        client.sign_out()
        assert False
Exemplo n.º 10
0
from graph import ttypes
from nebula.ConnectionPool import ConnectionPool
from nebula.Client import GraphClient
from nebula.Common import *

g_ip = '192.168.8.188'
g_port = 3699
connection_pool = ConnectionPool(g_ip, g_port)
client = GraphClient(connection_pool)
auth_resp = client.authenticate('root', '')
if auth_resp.error_code:
    raise AuthException("Auth failed")

import numpy as np
from collections import defaultdict

def read_feats(client):
    client.execute_query("use cora")
    query_resp = client.execute_query("LOOKUP ON paper WHERE paper.num > 0")
    num_nodes=len(query_resp.rows)
    labels = np.empty((num_nodes,1), dtype=np.int64)
    label_map = {}

    query_resp = client.execute_query("fetch prop ON paper 1")
    feature_str = query_resp.rows[0].columns[2].get_str().decode().replace(' ', '')
    feat_data = np.zeros((num_nodes, len(feature_str)))

    adj_lists = defaultdict(set)

    for i in range(num_nodes):
        query_resp = client.execute_query("fetch prop ON paper {}".format(i))
                        str(vertex_src) + "->" + str(dst)
                        for dst in vertexs_dst
                    ])

                edges_info = handle_fetch_resp(
                    fetch_info(client, edge_info_fetch_statement))
                graph.add_edges_from([(vertex_src, vertexs_dst[i],
                                       edges_info[i])
                                      for i in range(len(edges_info))])


def draw_networkx_graph(graph):
    import matplotlib.pyplot as plt
    nx.draw(graph, with_labels=True, font_weight='bold')
    plt.show()


if __name__ == '__main__':
    g_ip = '127.0.0.1'
    g_port = 3699

    # init connection pool
    connection_pool = ConnectionPool(g_ip, g_port)
    G = nx.MultiDiGraph()
    client = GraphClient(connection_pool)
    auth_resp = client.authenticate('user', 'password')

    if auth_resp.error_code:
        raise AuthException("Auth failed")
    nebula2networkx(client, 'nba', G, [100], ['follow', 'serve'])
    draw_networkx_graph(G)