Minor fixes and addendums 61/70961/6
authorVishal Thapar <vthapar@redhat.com>
Mon, 16 Apr 2018 07:31:53 +0000 (13:01 +0530)
committerSam Hague <shague@redhat.com>
Fri, 20 Apr 2018 16:41:51 +0000 (16:41 +0000)
1. Fix definition for itm-config
2. Add option to specify tmp data directory for logs
3. Changed json file names to .json from .log to distinguish from other logs
4. Add method to generate all json files

Change-Id: I459c66b9c5e64d6de95ab54a7f30a7e57605f003
Signed-off-by: Vishal Thapar <vthapar@redhat.com>
resources/tools/odl/netvirt/constants.py
resources/tools/odl/netvirt/ds_analyze.py
resources/tools/odl/netvirt/ds_get_data.py
resources/tools/odl/netvirt/flow_parser.py
resources/tools/odl/netvirt/netvirt_utils.py

index 691e475110e735117341c20cb965927a77e4ce80..89b728e80591d78e9f2b5e84f361595f04f7025c 100644 (file)
@@ -23,50 +23,50 @@ DSM_ROOT2 = 4
    resource-key-name:[filename,datastore_type,resource-url,container-name,list-title]
 """
 DSMAP = {
-    'bindings': ['service-bindings.log', 'config',
+    'bindings': ['service-bindings.json', 'config',
                  'interface-service-bindings:service-bindings',
                  'service-bindings', 'services-info'],
-    'dpnendpoints': ['dpn-endpoints.log', 'config', 'itm-state:dpn-endpoints',
+    'dpnendpoints': ['dpn-endpoints.json', 'config', 'itm-state:dpn-endpoints',
                      'dpn-endpoints', 'DPN-TEPs-info'],
-    'elaninstances': ['elan-instances.log', 'config', 'elan:elan-instances',
+    'elaninstances': ['elan-instances.json', 'config', 'elan:elan-instances',
                       'elan-instances', 'elan-instance'],
-    'elaninterfaces': ['elan-interfaces.log', 'config', 'elan:elan-interfaces',
+    'elaninterfaces': ['elan-interfaces.json', 'config', 'elan:elan-interfaces',
                        'elan-interfaces', 'elan-interface'],
-    'fibentries': ['fibentries.log', 'config', 'odl-fib:fibEntries',
+    'fibentries': ['fibentries.json', 'config', 'odl-fib:fibEntries',
                    'fibEntries', 'vrfTables'],
-    'idpools': ['idpools.log', 'config', 'id-manager:id-pools',
+    'idpools': ['idpools.json', 'config', 'id-manager:id-pools',
                       'id-pools', 'id-pool'],
-    'ifconfig': ['iface-config.log', 'config', 'ietf-interfaces:interfaces',
+    'ifconfig': ['iface-config.json', 'config', 'ietf-interfaces:interfaces',
                  'interfaces', 'interface'],
-    'itmconfig': ['itm-config.log', 'config' 'itm-state:dpn-teps-state',
+    'itmconfig': ['itm-config.json', 'config', 'itm-state:dpn-teps-state',
                   'dpn-teps-state', 'dpns-teps'],
-    'ifindexes': ['ifindexes.log', 'operational',
+    'ifindexes': ['ifindexes.json', 'operational',
                   'odl-interface-meta:if-indexes-interface-map',
                   'if-indexes-interface-map', 'if-index-interface'],
-    'ifstate': ['ifstate.log', 'operational',
+    'ifstate': ['ifstate.json', 'operational',
                 'ietf-interfaces:interfaces-state',
                 'interfaces-state', 'interface'],
-    'inventory': ['inventory-config.log', 'config',
+    'inventory': ['inventory-config.json', 'config',
                   'opendaylight-inventory:nodes', 'nodes', 'node'],
-    'neutronports': ['neutron-ports.log', 'config', 'neutron:neutron/ports',
+    'neutronports': ['neutron-ports.json', 'config', 'neutron:neutron/ports',
                      'ports', 'port'],
-    'neutronvpn-portip': ['neutronvpn-portip-port.log', 'config',
+    'neutronvpn-portip': ['neutronvpn-portip-port.json', 'config',
                           'neutronvpn:neutron-vpn-portip-port-data',
                           'neutron-vpn-portip-port-data',
                           'vpn-portip-to-port'],
-    'neutrontrunks': ['neutron-trunks.log', 'config', 'neutron:neutron/trunks',
+    'neutrontrunks': ['neutron-trunks.json', 'config', 'neutron:neutron/trunks',
                      'trunks', 'trunk'],
-    'tunconfig-external': ['tunnel-config-external.log', 'config',
+    'tunconfig-external': ['tunnel-config-external.json', 'config',
                            'itm-state:external-tunnel-list',
                            'external-tunnel-list', 'external-tunnel'],
-    'tunconfig': ['tunnel-config.log', 'config', 'itm-state:tunnel-list',
+    'tunconfig': ['tunnel-config.json', 'config', 'itm-state:tunnel-list',
                   'tunnel-list', 'internal-tunnel'],
-    'tunstate': ['tunnel-state.log', 'operational', 'itm-state:tunnels_state',
+    'tunstate': ['tunnel-state.json', 'operational', 'itm-state:tunnels_state',
                  'tunnels_state', 'state-tunnel-list'],
-    'vpninstance-to-vpnid': ['vpninstance-to-vpnid.log', 'config',
+    'vpninstance-to-vpnid': ['vpninstance-to-vpnid.json', 'config',
                              'odl-l3vpn:vpn-instance-to-vpn-id',
                              'vpn-instance-to-vpn-id', 'vpn-instance'],
-    'vpninterfaces': ['vpn-interfaces.log', 'config', 'l3vpn:vpn-interfaces',
+    'vpninterfaces': ['vpn-interfaces.json', 'config', 'l3vpn:vpn-interfaces',
                       'vpn-interfaces', 'vpn-interface']
 }
 
index b0f211d8b839384b1b3e26b941bf02906d1a9f12..36828b13cbff33f78a1e7d34d21b67455946d16c 100644 (file)
@@ -52,20 +52,20 @@ def analyze_interface(ifname=None):
     ifstates = dsg.get_interface_states()
     iface,ifstate,port,tunnel,tunState = by_ifname(ifname)
     print "InterfaceConfig: "
-    utils.pretty_print(iface)
+    json.dumps(iface, indent=2)
     print "InterfaceState: "
-    utils.pretty_print(ifstate)
+    json.dumps(ifstate, indent=2)
     if port:
         print "NeutronPort: "
-        utils.pretty_print(port)
+        json.dumps(port, indent=2)
         analyze_neutron_port(port, iface, ifstate)
         return
     if tunnel:
         print "Tunnel: "
-        utils.pretty_print(tunnel)
+        json.dumps(tunnel, indent=2)
     if tunState:
         print "TunState: "
-        utils.pretty_print(tunState)
+        json.dumps(tunState, indent=2)
     if ifstate:
         ncId = ifstate.get('lower-layer-if')[0]
         nodeId = ncId[:ncId.rindex(':')]
@@ -75,7 +75,7 @@ def analyze_interface(ifname=None):
 def analyze_neutron_port(port, iface, ifstate):
     for flow in utils.sort(get_all_flows(['all']), 'table'):
         if ((flow.get('ifname') == port['uuid']) or
-            (flow.get('lport') and flow['lport'] == ifstate.get('if-index')) or
+            (flow.get('lport') and ifstate and flow['lport'] == ifstate.get('if-index')) or
             (iface['name'] == flow.get('ifname'))):
                 result = 'Table:{},FlowId:{}{}'.format(
                 flow['table'], flow['id'],
@@ -97,7 +97,7 @@ def analyze_inventory(nodeId, isConfig=True, ncId=None, ifName=None):
     flow_list = []
     print "Flows:"
     for table in tables:
-        for flow in table.get('flow'):
+        for flow in table.get('flow', []):
             if not ifName or ifName in utils.nstr(flow.get('flow-name')):
                 flow_dict = {}
                 flow_dict['table'] = table['id']
@@ -126,7 +126,7 @@ def get_groups(ofnodes=None):
     group_dict = defaultdict(dict)
     for node in of_nodes.itervalues():
         dpnid = utils.get_dpn_from_ofnodeid(node['id'])
-        for group in node[const.NODE_GROUP]:
+        for group in node.get(const.NODE_GROUP, []):
             if group_dict.get(dpnid) and group_dict.get(dpnid).get(group[key]):
                 print 'Duplicate:', dpnid, group[key]
             group_dict[dpnid][group[key]] = group
@@ -554,6 +554,9 @@ def analyze_trunks():
             print 'SubPort:{},Table:{},FlowStatus:{}'.format(
                     subport.get('port-id'), flow.get('table'), flow_status)
 
+def get_all_dumps():
+    dsg.get_all_dumps()
+
 
 def main(args=None):
     options, args = utils.parse_args()
index cba305e1829af9ba1cb2d91284d04f4c05b07043..306e7d3001cdac7fc7ba464928ec40045c96413a 100644 (file)
@@ -6,7 +6,7 @@ import constants as const
 
 def get_ds_data(name, file_name=None, ds_type=None):
     res = const.DSMAP[name]
-    filename = file_name or res[const.DSM_FILE]
+    filename = '{}/{}'.format(utils.get_temp_path(), res[const.DSM_FILE])
     dstype = ds_type or res[const.DSM_DSTYPE]
     path = res[const.DSM_PATH]
     root1 = res[const.DSM_ROOT1]
@@ -23,6 +23,20 @@ def get_ds_data(name, file_name=None, ds_type=None):
     return data
 
 
+def get_all_dumps():
+    for res in const.DSMAP.itervalues():
+        filename = '{}/{}'.format(utils.get_temp_path(), res[const.DSM_FILE])
+        dstype = res[const.DSM_DSTYPE]
+        path = res[const.DSM_PATH]
+        root1 = res[const.DSM_ROOT1]
+        root2 = res[const.DSM_ROOT2]
+        data = {}
+        url = utils.create_url(dstype, path)
+        result = utils.grabJson(url)
+        with open(filename, 'w+') as data_file:
+            json.dump(result, data_file)
+
+
 def get_config_interfaces(file_name=None):
     # Returns dict of ifaces, key is iface name
     if_dict = {}
index bb632d3130c26b7b6b4710f6de6ab2ebdffc5f4b..1f433adbc986e4420e0bf2c31f4a784e6f9ab9f1 100644 (file)
@@ -385,6 +385,7 @@ def get_match_inport(flow):
 
 def get_flow_info_from_any(flow_info, flow):
     w_mdata = get_instruction_writemeta(flow)
+    lport = None
     if w_mdata:
         metadata = w_mdata['metadata']
         mask = w_mdata['metadata-mask']
@@ -416,8 +417,8 @@ def get_flow_info_from_any(flow_info, flow):
 
 def get_ifname_from_flowid(flow_id, table):
     splitter = ':' if table == 0 else '.'
-    i = 2 if table == 0 else 1
-    i = 2
+    i = 2 if table == 0 else 1
+    i = 2
     ifname = None
     try:
         ifname = flow_id.split(splitter)[i]
index 41ef19456dba3dc51d73c945a81fed679a06d306..8c0d88817eb1e4706e6a38fa0b04da5530e72017 100644 (file)
@@ -19,6 +19,8 @@ def parse_args():
                       help="opendaylight restconf password")
     parser.add_option("-m", "--method", action="store", type="string", dest="callMethod", default=None,
                       help="method to call")
+    parser.add_option("-d", "--tempdir", action="store", type="string", dest="tempDir", default="/tmp/odl",
+                      help="temp directory to store data")
     (options, args) = parser.parse_args(sys.argv)
     return options, args
 
@@ -35,6 +37,12 @@ def create_url(dsType, path):
     return 'http://{}:{}/restconf/{}/{}/'.format(options.odlIp, options.odlPort, dsType, path)
 
 
+def get_temp_path():
+    if options:
+        return options.tempDir
+    return './'
+
+
 def grabJson(url):
     data = None
     try: