fixing pep8 problems for test verify tox job
[integration/test.git] / tools / clustering / cluster-tools / cluster_check.py
1 #!/usr/bin/python
2
3 #
4 # Copyright (c) 2016 NEC Corporation and others
5 # All rights reserved.
6 #
7 # This program and the accompanying materials are made available under the
8 # terms of the Eclipse Public License v1.0 which accompanies this
9 # distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
10 #
11
12 import requests
13 import json
14 import sys
15 import re
16
17
18 # response code to check the rest calls
19 RESP_GET_SUCCESS = 200
20 RESP_NOT_FOUND = 404
21
22
23 con_header = {'Accept': 'application/json', 'content-type': 'application/json'}
24 authentication = ('admin', 'admin')
25
26
27 def validate_cluster(ipaddress):
28     """ method to check the cluster status
29     Args:
30         ipaddress(str): ip address of the ODL controller
31     """
32     url = "http://" + ipaddress + ":8181/jolokia/read/akka:type=Cluster"
33     try:
34         resp = requests.get(url, headers=con_header, auth=authentication)
35     except requests.exceptions.RequestException:
36         print("controller is unreachable")
37         sys.exit(1)
38
39     if resp.status_code == RESP_NOT_FOUND:
40         print("jolokia not installed, resp code", resp.status_code)
41         print("Problem with accessing jolokia")
42         sys.exit(1)
43
44     elif resp.status_code != RESP_GET_SUCCESS:
45         print("error in getting response, resp code", resp.status_code)
46         sys.exit(1)
47
48     data = json.loads(resp.content)
49     cluster_status = data['value']['ClusterStatus']
50     status = json.loads(cluster_status)
51     members = status['members']
52     member_list = []
53     entity_owner_list = []
54
55     for member in members:
56         # spliting the ip address of the node from json object
57         # sample json data
58         # "akka.tcp://opendaylight-cluster-data@10.106.138.137:2550"
59         ip = re.search('@(.+?):', member['address']).group(1)
60         node_status = ip + "-" + member['status']
61         member_list.append(node_status)
62         url1 = "http://" + ip +\
63                ":8181/jolokia/read/org.opendaylight.controller:"\
64                "Category=ShardManager,name=shard-manager-operational,"\
65                "type=DistributedOperationalDatastore"
66         resp1 = requests.get(url1, headers=con_header, auth=authentication)
67         if resp1.status_code != RESP_GET_SUCCESS:
68             print("error in getting response for the node", ip)
69             print("response content", resp1.content)
70             continue
71         data2 = json.loads(resp1.content)
72         member_role = data2['value']['MemberName']
73         entity_owner_list.append(ip + ":" + member_role)
74     leader = data['value']['Leader']
75
76     leaderNode = leader[leader.index('@') + 1:leader.rindex(':')]
77     for leader_node in member_list:
78         address = leader_node.split('-')
79         if address[0] == leaderNode:
80             print("=================== Leader Node ======================\n")
81             print(leader_node)
82             member_list.remove(leader_node)
83             print("=================== Follower Node ====================\n")
84             print(member_list)
85     list_entity_owners(ipaddress, entity_owner_list)
86
87
88 def list_entity_owners(ipaddress, entity_owner_list):
89     """ method to list the entity owners
90     Args:
91         ipaddress(str): ip address of the ODL controller
92         entity_owner_list(list): list of member role in cluster
93     """
94     entity = ":8181/restconf/operational/entity-owners:entity-owners"
95     url = "http://" + ipaddress + entity
96     resp = requests.get(url, headers=con_header, auth=authentication)
97     if resp.status_code != RESP_GET_SUCCESS:
98         print("controller is down, resp_code", resp.status_code)
99         print("response content", resp.content)
100         sys.exit(1)
101     data = json.loads(resp.content)
102     ovsdb = data['entity-owners']['entity-type']
103     print("\n\n=================== Entity Details ===================\n")
104     for e_type in ovsdb:
105         entities = e_type['entity']
106         for entity in entities:
107             id = entity['id']
108             if len(entity['owner']) > 0:
109                 print("NODE ID", str(id[id.rindex('=') + 2:len(id) - 2]))
110                 print("OWNER", str(entity['owner']))
111             for owner in entity_owner_list:
112                 owner_role = owner.split(':')
113                 if entity['owner'] == owner_role[1]:
114                     print("IP Address", str(owner_role[0]))
115                     print("\n")
116
117
118 # Main Block
119 if __name__ == '__main__':
120     print('*****Cluster Status******')
121     ipaddress = raw_input("Please enter ipaddress to find Leader Node : ")
122     validate_cluster(ipaddress)
123
124 else:
125     print("Cluster checker loaded as Module")