summaryrefslogtreecommitdiffstats
path: root/asdctool/src/main/resources/scripts/python
diff options
context:
space:
mode:
authorMichael Lando <ml636r@att.com>2017-02-19 10:28:42 +0200
committerMichael Lando <ml636r@att.com>2017-02-19 10:51:01 +0200
commit451a3400b76511393c62a444f588a4ed15f4a549 (patch)
treee4f5873a863d1d3e55618eab48b83262f874719d /asdctool/src/main/resources/scripts/python
parent5abfe4e1fb5fae4bbd5fbc340519f52075aff3ff (diff)
Initial OpenECOMP SDC commit
Change-Id: I0924d5a6ae9cdc161ae17c68d3689a30d10f407b Signed-off-by: Michael Lando <ml636r@att.com>
Diffstat (limited to 'asdctool/src/main/resources/scripts/python')
-rw-r--r--asdctool/src/main/resources/scripts/python/duplicates.py47
-rw-r--r--asdctool/src/main/resources/scripts/python/duplicatesAndRemove.py136
-rw-r--r--asdctool/src/main/resources/scripts/python/graphSize.py56
-rw-r--r--asdctool/src/main/resources/scripts/python/user/exportUsers.py122
-rw-r--r--asdctool/src/main/resources/scripts/python/user/importUsers.py215
5 files changed, 576 insertions, 0 deletions
diff --git a/asdctool/src/main/resources/scripts/python/duplicates.py b/asdctool/src/main/resources/scripts/python/duplicates.py
new file mode 100644
index 0000000000..be60b05909
--- /dev/null
+++ b/asdctool/src/main/resources/scripts/python/duplicates.py
@@ -0,0 +1,47 @@
+import json
+import sys
+
+dict = {}
+dupliacteUid = {}
+#debugFlag = True
+debugFlag = False
+
+def debug(str1, str2=""):
+ 'print only if debug enabled'
+ if (debugFlag == True): print str1, str2
+
+print 'Number of arguments:', len(sys.argv), 'arguments.'
+
+
+with open(sys.argv[1]) as json_file:
+ json_data = json.load(json_file)
+ for x in json_data['vertices']:
+ uid = None
+ nodeLabel=x.get('nodeLabel')
+ debug(nodeLabel)
+ if ( nodeLabel == 'user' ):
+ uid = x['userId']
+ elif ( nodeLabel == 'tag' ):
+ uid = x['name']
+ elif ( nodeLabel == None ):
+ pass
+ elif ( nodeLabel == 'lockNode' ):
+ uid = x.get('uid')
+ else: uid = x['uid']
+
+ debug(nodeLabel, uid)
+
+ existId = dict.get(uid)
+ if (existId == None):
+ dict[uid] = x.get('_id')
+ else:
+ dupliacteUid[uid] = existId
+
+ print dupliacteUid
+
+# with open('data.txt', 'w') as outfile:
+# json.dump(json_data, outfile)
+
+
+
+# print x['uid']
diff --git a/asdctool/src/main/resources/scripts/python/duplicatesAndRemove.py b/asdctool/src/main/resources/scripts/python/duplicatesAndRemove.py
new file mode 100644
index 0000000000..a4bd35dd2b
--- /dev/null
+++ b/asdctool/src/main/resources/scripts/python/duplicatesAndRemove.py
@@ -0,0 +1,136 @@
+import json
+import sys, getopt
+from collections import OrderedDict
+
+dict = {}
+dupliacteUid = {}
+#debugFlag = True
+debugFlag = False
+
+def join_strings(lst):
+ concat = ""
+ for string in lst:
+ if (string != None):
+ if (type(string) == int):
+ string = str(string)
+ concat += (string + " ")
+ return concat
+
+def debug(desc, *args):
+ 'print only if debug enabled'
+ if (debugFlag == True):
+ print desc, join_strings(args)
+
+def log(desc, arg):
+ 'print log info'
+ print desc, arg
+
+def getUid(vertex):
+ uid = None
+ nodeLabel=vertex.get('nodeLabel')
+ debug(nodeLabel)
+ if ( nodeLabel == 'user' ):
+ uid = vertex['userId']
+ elif ( nodeLabel == 'tag' ):
+ uid = vertex['name']
+ elif ( nodeLabel == None ):
+ pass
+ elif ( nodeLabel == 'lockNode' ):
+ uid = vertex.get('uid')
+ else: uid = vertex['uid']
+
+ debug(nodeLabel, uid)
+
+ return uid
+
+def generateFile(inputFile, outputFile):
+
+ with open(inputFile) as json_file:
+ dupliacteUid = {}
+ json_data = json.load(json_file)
+ for x in json_data['vertices']:
+ uid = getUid(x)
+
+ existId = dict.get(uid)
+ if (existId == None):
+ dict[uid] = x.get('_id')
+ else:
+ dupliacteUid[uid] = existId
+
+ log("duplicate ids", dupliacteUid)
+
+ json_data_vertices = json_data['vertices']
+ log("number of vertices is", len(json_data_vertices))
+
+ ids = {}
+ deleteIndexes = []
+
+ for i in xrange(len(json_data_vertices)):
+ #print "****** ", i, " *************"
+ #print json_data_vertices[i]
+ id = json_data_vertices[i]["_id"]
+ uid = getUid(json_data_vertices[i])
+ isDuplicateId = dupliacteUid.get(uid)
+ if (isDuplicateId != None):
+ debug("uid to id pair", uid if uid != None else 'None', id)
+ value = ids.get(uid)
+ if (value == None):
+ list = [id,]
+ ids[uid] = list
+ else:
+ value.append(id)
+ deleteIndexes.append(id)
+
+ log("ids", ids)
+ log("deleteIndexes", deleteIndexes)
+ log("deleteIndexes size", len(deleteIndexes))
+
+ filter_vertex = [ x for x in json_data_vertices if x.get('_id') not in deleteIndexes ]
+ json_data['vertices'] = filter_vertex
+
+ log("number of vertexes after filter", len(filter_vertex))
+
+ json_data_edges = json_data['edges']
+
+ log("number of edges", len(json_data_edges))
+
+ filter_edge = [ x for x in json_data_edges if x['_outV'] not in (deleteIndexes) and x['_inV'] not in (deleteIndexes) ]
+ json_data['edges'] = filter_edge
+
+ log("number of edges after filter", len(json_data['edges']))
+
+ json_data = OrderedDict(sorted(json_data.items(), key=lambda t: t[0], reverse=True))
+
+ with open(outputFile, 'w') as outfile:
+ #json.dump(json_data, outfile)
+ json.dump(json_data, outfile)
+ log("output file is", outputFile);
+
+def main(argv):
+ print 'Number of arguments:', len(sys.argv), 'arguments.'
+ inputfile = None
+ outputfile = ''
+ try:
+ opts, args = getopt.getopt(argv,"h:i:o:",["ifile=","ofile="])
+ except getopt.GetoptError:
+ print sys.argv[0], '-i <inputfile>'
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt == '-h':
+ print sys.argv[0], '-i <inputfile>'
+ sys.exit(3)
+ elif opt in ("-i", "--ifile"):
+ inputfile = arg
+
+ if ( inputfile == None ):
+ print sys.argv[0] ,'-i <inputfile>'
+ sys.exit(3)
+
+ print 'Input file is "', inputfile
+ generateFile(inputfile, inputfile + '.noduplicates')
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
+# print x['uid']
diff --git a/asdctool/src/main/resources/scripts/python/graphSize.py b/asdctool/src/main/resources/scripts/python/graphSize.py
new file mode 100644
index 0000000000..6c36ec6844
--- /dev/null
+++ b/asdctool/src/main/resources/scripts/python/graphSize.py
@@ -0,0 +1,56 @@
+import json
+import sys, getopt
+
+dict = {}
+dupliacteUid = {}
+#debugFlag = True
+debugFlag = False
+
+def debug(desc, *args):
+ 'print only if debug enabled'
+ if (debugFlag == True):
+ print desc, join_strings(args)
+
+def log(desc, arg):
+ 'print log info'
+ print desc, arg
+
+def graphSize(inputFile):
+
+ with open(inputFile) as json_file:
+ json_data = json.load(json_file)
+
+ json_data_vertices = json_data['vertices']
+ log("number of vertices is", len(json_data_vertices))
+
+ json_data_edges = json_data['edges']
+ log("number of edges is", len(json_data_edges))
+
+def main(argv):
+ print 'Number of arguments:', len(sys.argv), 'arguments.'
+ inputfile = None
+ outputfile = ''
+ try:
+ opts, args = getopt.getopt(argv,"h:i:o:",["ifile=","ofile="])
+ except getopt.GetoptError:
+ print sys.argv[0], '-i <inputfile>'
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt == '-h':
+ print sys.argv[0], '-i <inputfile>'
+ sys.exit(3)
+ elif opt in ("-i", "--ifile"):
+ inputfile = arg
+
+ if ( inputfile == None ):
+ print sys.argv[0], '-i <inputfile>'
+ sys.exit(3)
+
+ print 'Input file is ', inputfile
+ graphSize(inputfile)
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
+# print x['uid']
diff --git a/asdctool/src/main/resources/scripts/python/user/exportUsers.py b/asdctool/src/main/resources/scripts/python/user/exportUsers.py
new file mode 100644
index 0000000000..e32a3b0a21
--- /dev/null
+++ b/asdctool/src/main/resources/scripts/python/user/exportUsers.py
@@ -0,0 +1,122 @@
+import pycurl
+import sys, getopt
+from StringIO import StringIO
+import json
+
+
+################################################################################################################################################
+# #
+# Export all active users to file - for 1602+ #
+# #
+# activation : #
+# python exportUsers.py [-i <be host> | --ip=<be host>] [-p <be port> | --port=<be port> ] [-f <output file> | --ofile=<output file> ] #
+# #
+# shortest activation (be host = localhost, be port = 8080): # #
+# python exportUsers.py [-f <output file> | --ofile=<output file> ] #
+# #
+################################################################################################################################################
+
+ALL_USERS_SUFFIX = '/sdc2/rest/v1/user/users'
+
+def errorAndExit(errorCode, errorDesc):
+ if ( errorCode > 0 ):
+ print("status=" + str(errorCode) + ". " + errorDesc)
+ else:
+ print("status=" + str(errorCode))
+ sys.exit(errorCode)
+
+def getUsers(beHost, bePort, adminUser):
+
+ try:
+ buffer = StringIO()
+ c = pycurl.Curl()
+
+ url = 'http://' + beHost + ':' + bePort + ALL_USERS_SUFFIX
+ print(url)
+ c.setopt(c.URL, url)
+ c.setopt(c.WRITEFUNCTION, buffer.write)
+ #c.setopt(c.WRITEFUNCTION, lambda x: None)
+ adminHeader = 'USER_ID: ' + adminUser
+ c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json', adminHeader])
+ res = c.perform()
+ #print(res)
+
+ #print('Status: %d' % c.getinfo(c.RESPONSE_CODE))
+
+ c.close()
+
+ body = buffer.getvalue()
+
+ #print(body)
+
+ return (body, None)
+
+ except Exception as inst:
+ print inst
+ #print type(inst) # the exception instance
+ #print inst.args # arguments stored in .args
+ #print inst # __str__ allows args to be printed directly
+ #x, y = inst.args
+ #print 'x =', x
+
+ return (None, inst)
+
+
+def usage():
+ print sys.argv[0], '[-i <be host> | --ip=<be host>] [-p <be port> | --port=<be port> ] [-f <output file> | --ofile=<output file> ]'
+
+def main(argv):
+ print 'Number of arguments:', len(sys.argv), 'arguments.'
+
+ adminHeader = 'jh0003'
+ beHost = 'localhost'
+ bePort = '8080'
+ outputfile = None
+
+ try:
+ opts, args = getopt.getopt(argv,"i:p:f:h:",["ip=","port=","ofile="])
+ except getopt.GetoptError:
+ usage()
+ errorAndExit(2, 'Invalid input')
+
+ for opt, arg in opts:
+ #print opt, arg
+ if opt == '-h':
+ usage()
+ sys.exit(3)
+ elif opt in ("-i", "--ip"):
+ beHost = arg
+ elif opt in ("-p", "--port"):
+ bePort = arg
+ elif opt in ("-f", "--ofile"):
+ outputfile = arg
+
+ print 'be host =',beHost,', be port =', bePort,', output file =',outputfile
+
+ if ( outputfile == None ):
+ usage()
+ sys.exit(3)
+
+ users = getUsers(beHost, bePort, adminHeader)
+ error = users[1]
+ body = users[0]
+
+ if ( error != None ):
+ errorAndExit(5, str(error))
+
+ #print body
+
+ io = StringIO(body)
+ usersAsJson = json.load(io)
+
+ writeFile = open(outputfile, 'w')
+
+ json.dump(usersAsJson, writeFile)
+
+ writeFile.close()
+
+ print("-------------------------------------------")
+ errorAndExit(0, None)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/asdctool/src/main/resources/scripts/python/user/importUsers.py b/asdctool/src/main/resources/scripts/python/user/importUsers.py
new file mode 100644
index 0000000000..669cbbe6f2
--- /dev/null
+++ b/asdctool/src/main/resources/scripts/python/user/importUsers.py
@@ -0,0 +1,215 @@
+import pycurl
+import sys, getopt
+from StringIO import StringIO
+import json
+import copy
+
+################################################################################################################################################
+# #
+# Import all users from a given file #
+# #
+# activation : #
+# python importUsers.py [-i <be host> | --ip=<be host>] [-p <be port> | --port=<be port> ] [-f <input file> | --ifile=<input file> ] #
+# #
+# shortest activation (be host = localhost, be port = 8080): # #
+# python importUsers.py [-f <input file> | --ifile=<input file> ] #
+# #
+################################################################################################################################################
+
+
+def importUsers(beHost, bePort, users, adminUser):
+
+ result = []
+
+ for user in users:
+
+ #print("Going to add user " + user['userId'])
+
+ getRes = getUser(beHost, bePort, user)
+ userId = getRes[0]
+ error = getRes[1]
+ #print error
+ if ( error != None and error == 404 ):
+ res = createUser(beHost, bePort, user ,adminUser)
+ result.append(res)
+ else:
+ if ( error == 200 ):
+ curResult = (userId, 409)
+ result.append(curResult)
+ else:
+ result.append(getRes)
+
+ return result
+
+
+def convertUsersToCreationObject(users):
+
+ cloneUsers = copy.deepcopy(users)
+ for user in cloneUsers:
+ #print user
+ if (user.get('fullName') != None):
+ del user['fullName']
+ #user['userId'] = user['userId'] + '1'
+ #print user
+
+ return cloneUsers
+
+def getUser(beHost, bePort, user):
+
+ userId = user['userId']
+ try:
+ buffer = StringIO()
+ c = pycurl.Curl()
+
+ #print type(userId)
+ url = 'http://' + beHost + ':' + bePort + '/sdc2/rest/v1/user/' + str(userId)
+ c.setopt(c.URL, url)
+
+ #adminHeader = 'USER_ID: ' + adminUser
+ c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json'])
+ c.setopt(c.WRITEFUNCTION, lambda x: None)
+ res = c.perform()
+
+ #print("Before get response code")
+ httpRes = c.getinfo(c.RESPONSE_CODE)
+ #print("After get response code")
+ responseCode = c.getinfo(c.RESPONSE_CODE)
+
+ #print('Status: ' + str(responseCode))
+
+ c.close()
+
+ return (userId, httpRes)
+
+ except Exception as inst:
+ print(inst)
+ return (userId, None)
+
+
+
+def createUser(beHost, bePort, user, adminUser):
+
+ userId = user['userId']
+ try:
+ buffer = StringIO()
+ c = pycurl.Curl()
+
+ url = 'http://' + beHost + ':' + bePort + '/sdc2/rest/v1/user'
+ c.setopt(c.URL, url)
+ c.setopt(c.POST, 1)
+
+ adminHeader = 'USER_ID: ' + adminUser
+ c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json', adminHeader])
+
+ data = json.dumps(user)
+ c.setopt(c.POSTFIELDS, data)
+
+ c.setopt(c.WRITEFUNCTION, lambda x: None)
+ #print("before perform")
+ res = c.perform()
+ #print(res)
+
+ #print("Before get response code")
+ httpRes = c.getinfo(c.RESPONSE_CODE)
+ #print("After get response code")
+ responseCode = c.getinfo(c.RESPONSE_CODE)
+
+ #print('Status: ' + str(responseCode))
+
+ c.close()
+
+ return (userId, httpRes)
+
+ except Exception as inst:
+ print(inst)
+ return (userId, None)
+
+
+def errorAndExit(errorCode, errorDesc):
+ if ( errorCode > 0 ):
+ print("status=" + str(errorCode) + ". " + errorDesc)
+ else:
+ print("status=" + str(errorCode))
+ sys.exit(errorCode)
+
+def usage():
+ print sys.argv[0], '[-i <be host> | --ip=<be host>] [-p <be port> | --port=<be port> ] [-f <input file> | --ifile=<input file> ]'
+
+def main(argv):
+ print 'Number of arguments:', len(sys.argv), 'arguments.'
+
+ beHost = 'localhost'
+ bePort = '8080'
+ inputfile = None
+
+ adminUser = 'jh0003'
+
+ try:
+ opts, args = getopt.getopt(argv,"i:p:f:h:",["ip=","port=","ifile="])
+ except getopt.GetoptError:
+ usage()
+ errorAndExit(2, 'Invalid input')
+
+ for opt, arg in opts:
+ #print opt, arg
+ if opt == '-h':
+ usage()
+ sys.exit(3)
+ elif opt in ("-i", "--ip"):
+ beHost = arg
+ elif opt in ("-p", "--port"):
+ bePort = arg
+ elif opt in ("-f", "--ifile"):
+ inputfile = arg
+
+ print 'be host =',beHost,', be port =', bePort,', users file =',inputfile
+
+ if ( inputfile == None ):
+ usage()
+ sys.exit(3)
+
+ print 'Input file is ', inputfile
+
+ usersFile = open(inputfile)
+
+ json_data = json.load(usersFile)
+
+ #print json_data
+
+ cloneUsers = convertUsersToCreationObject(json_data)
+
+ activeUsers = filter(lambda x: x['status'] == 'ACTIVE', cloneUsers)
+
+ #print activeUsers
+
+ resultTable = importUsers(beHost, bePort, activeUsers, adminUser)
+
+ g = lambda x: x[1] != 201 and x[1] != 409
+
+ result = filter(g, resultTable)
+
+ if ( len(result) > 0 ):
+ #print("ERROR: Failed to load the users " + ', '.join(map(lambda x: x[0],result)))
+ errorAndExit(3, "Failed to load the users " + ', '.join(map(lambda x: x[0],result)))
+
+ g = lambda x: x[1] == 409
+ result = filter(g, resultTable)
+
+ print("-------------------------------------------")
+ print("Existing users: " + ', '.join(map(lambda x: x[0],result)))
+
+ result = filter(lambda x: x[1] == 201, resultTable)
+ if ( len(result) == 0 ):
+ print("-------------------------------------------")
+ print("No NEW user was loaded. All users are already exist")
+ print("-------------------------------------------")
+ else:
+ print("-------------------------------------------")
+ print("Loaded users: " + ', '.join(map(lambda x: x[0],result)))
+ print("-------------------------------------------")
+
+ errorAndExit(0, None)
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])