much faster reset_xmpp_pubsub_nodes - one single API call
[plcapi.git] / omf / reset_xmpp_pubsub_nodes.py
1 #!/usr/bin/env /usr/bin/plcsh
2
3 import sys
4 import xmlrpclib
5 sys.path.append("/usr/bin/")
6 from omf_slicemgr import *
7
8 xmppserver = config.PLC_OMF_XMPP_SERVER
9 xmppuser = "@".join([config.PLC_OMF_XMPP_USER, xmppserver])
10 xmpppass = config.PLC_OMF_XMPP_PASSWORD
11 xmlrpc = xmlrpclib.ServerProxy(config.PLC_OMF_SLICEMGR_URL)
12
13 pubsub = PubSubClient(xmppuser, xmpppass, verbose=False)
14
15
16 def delete_all_nodes(iq):
17     global pubsub
18     print "Deleting PubSub groups..."
19     for i in iq.query.elements():
20         node = i['node']
21         reactor.callLater(1, pubsub.delete_node, node)
22
23 def is_local_node(node_id, slice_name):
24     try:
25         return GetNodes({'node_id': node_id}, ['peer_id'])[0]['peer_id'] == None
26     except IndexError:
27         print "WARNING: can not find the node with node_id %s" % node_id
28         print "WARNING: node_id %s was referenced in slice %s" % (node_id, slice_name)
29         return False
30
31 if __name__ == "__main__":
32     pubsub.add_result_hook("discover", delete_all_nodes)
33     reactor.callLater(1, pubsub.discover)
34     reactor.callLater(2, pubsub.create_node, "/OMF")
35     reactor.callLater(2, pubsub.create_node, "/SYSTEM")
36
37     reactor.callLater(4, reactor.stop)
38     reactor.connectTCP(pubsub.id.host, 5222, pubsub.factory)
39     reactor.run()
40
41     print "Re-creating PubSub groups..."
42     slices = GetSlices()
43     # optimizing the API calls
44     nodes = GetNodes ({},['node_id','hrn','peer_id'])
45     local_node_hash = dict ( [ (n['node_id'],n['hrn']) for n in nodes if n['peer_id'] is None ] )
46     foreign_node_hash = dict ( [ (n['node_id'],n['hrn']) for n in nodes if n['peer_id'] is not None ] )
47     total=len(slices)
48     counter=1
49     for slice in slices:
50         print 40*'x' + " slice %s (%d/%d)"%(slice['name'],counter,total)
51         counter +=1
52         xmlrpc.createSlice(slice['name'])
53         for node_id in slice['node_ids']:
54             # silently ignore foreign nodes
55             if node_id in foreign_node_hash: continue
56             elif node_id in local_node_hash:
57                 hrn=local_node_hash[node_id]
58                 if hrn:
59                     xmlrpc.addResource(slice['name'],hrn)
60                 else:
61                     print "WARNING: missing hrn tag for node_id: %s" % node_id
62             else:
63                 print "Cannot find node with node_id %d (in slice %s)"%(node_id,slice['name'])