4 from datetime import datetime
5 from elasticsearch import Elasticsearch
7 import elasticsearch.helpers
8 from elasticsearch.client import IndicesClient, CatClient
10 from file_utils import readFileToJson
11 from config_properties import getGlobalVar
15 def createIndex(client, indexName, createBody):
17 print "start createIndex"
19 client = Elasticsearch(['localhost'])
20 esIndexClient = IndicesClient(client)
21 res = deleteIndex(client, indexName)
23 print "operation failed"
25 create_res=elasticsearch.client.IndicesClient.create(esIndexClient, index=indexName, body=createBody)
26 print "create index response: ", create_res
27 if (create_res['acknowledged'] != True):
28 print "failed to create index"
31 print "index ",indexName, " created successfully"
33 except Exception, error:
34 print "An exception was thrown!"
39 def deleteIndex(client, indexName):
41 print "start deleteIndex"
43 client = Elasticsearch(['localhost'])
44 esIndexClient = IndicesClient(client)
45 isExists=elasticsearch.client.IndicesClient.exists(esIndexClient, indexName)
46 if ( isExists == True ):
47 delete_res=elasticsearch.client.IndicesClient.delete(esIndexClient, index=indexName)
48 if (delete_res['acknowledged'] != True):
49 print "failed to delete index"
52 print "index ",indexName, " deleted"
55 print "index not found - assume already deleted"
57 except Exception, error:
58 print "An exception was thrown!"
62 def copyIndex(client, fromIndex, toIndex):
64 print "start copyIndex"
66 client = Elasticsearch(['localhost'])
67 client.indices.refresh(index=fromIndex)
68 count=client.search(fromIndex, search_type='count')
69 print "original index count: ",count
70 docNum, docErrors = elasticsearch.helpers.reindex(client, fromIndex, toIndex)
71 print "copy result: ", docNum, docErrors
72 if (docNum != count['hits']['total']):
73 print "Failed to copy all documents. expected: ", count['hits']['total'], " actual: ", docNum
75 # if (len(docErrors) != 0):
76 # print "copy returned with errors"
80 except Exception, error:
81 print "An exception was thrown!"
87 print 'USAGE: ', sys.argv[0], '-o <operation : create | delete | move> -n <indexName> -a <address> -f <mappingFile (for create)> -t <toIndex (for move operation)>'
92 print "start script with ", len(sys.argv), 'arguments.'
93 print "=============================================="
96 opts, args = getopt.getopt(argv, "h:o:a:n:f:t:", ["operation","address","indexName","file","toIndex"])
97 except getopt.GetoptError:
102 for opt, arg in opts:
107 elif opt in ('-f', '--file'):
108 mapping=readFileToJson(arg)
109 elif opt in ('-a', '--address'):
111 elif opt in ('-o', '--operation'):
113 elif opt in ('-n', '--indexName'):
115 elif opt in ('-t', '--toIndex'):
118 if (operation == None):
122 print "address is mandatory argument"
125 elif operation == 'create':
126 print "create new index ", indexName
127 client = Elasticsearch([{'host': host, 'timeout':5}] )
128 res = createIndex(client, indexName, mapping)
130 elif operation == 'delete':
131 print "delete index ", indexName
132 client = Elasticsearch([{'host': host, 'timeout':5}] )
133 res = deleteIndex(client, indexName)
135 elif operation == 'move':
136 print "move index ", indexName, " to ", destIndexName
137 client = Elasticsearch([{'host': host, 'timeout':5}] )
138 res = copyIndex(client, indexName, destIndexName)
143 print "ERROR: operation Failed"
148 if __name__ == "__main__":