Advertisement
Guest User

Untitled

a guest
Aug 28th, 2018
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.46 KB | None | 0 0
  1. import time
  2. from concurrent.futures import ThreadPoolExecutor
  3. from threading import Thread
  4. import elasticsearch as es
  5.  
  6.  
  7. queries = [
  8. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'count(agent)': {'value_count': {'field': 'agent.keyword'}}}},
  9. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'agent': {'cardinality': {'field': 'agent.keyword'}}}},
  10. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'beat.hostname': {'cardinality': {'field': 'beat.hostname.keyword'}}}},
  11. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'beat.name': {'cardinality': {'field': 'beat.name.keyword'}}}},
  12. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'beat.version': {'cardinality': {'field': 'beat.version.keyword'}}}},
  13. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'bytes': {'cardinality': {'field': 'bytes.keyword'}}}},
  14. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.city_name': {'cardinality': {'field': 'geoip.city_name.keyword'}}}},
  15. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.continent_code': {'cardinality': {'field': 'geoip.continent_code.keyword'}}}},
  16. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.country_code2': {'cardinality': {'field': 'geoip.country_code2.keyword'}}}},
  17. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.country_code3': {'cardinality': {'field': 'geoip.country_code3.keyword'}}}},
  18. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.country_name': {'cardinality': {'field': 'geoip.country_name.keyword'}}}},
  19. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.dma_code': {'cardinality': {'field': 'geoip.dma_code'}}}},
  20. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.ip': {'cardinality': {'field': 'geoip.ip.keyword'}}}},
  21. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.latitude': {'cardinality': {'field': 'geoip.latitude'}}}},
  22. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.location.lat': {'cardinality': {'field': 'geoip.location.lat'}}}},
  23. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.location.lon': {'cardinality': {'field': 'geoip.location.lon'}}}},
  24. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.longitude': {'cardinality': {'field': 'geoip.longitude'}}}},
  25. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.postal_code': {'cardinality': {'field': 'geoip.postal_code.keyword'}}}},
  26. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.region_code': {'cardinality': {'field': 'geoip.region_code.keyword'}}}},
  27. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.region_name': {'cardinality': {'field': 'geoip.region_name.keyword'}}}},
  28. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'geoip.timezone': {'cardinality': {'field': 'geoip.timezone.keyword'}}}},
  29. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'host.name': {'cardinality': {'field': 'host.name.keyword'}}}},
  30. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'http_version': {'cardinality': {'field': 'http_version.keyword'}}}},
  31. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'input.type': {'cardinality': {'field': 'input.type.keyword'}}}},
  32. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'message': {'cardinality': {'field': 'message.keyword'}}}},
  33. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'offset': {'cardinality': {'field': 'offset'}}}},
  34. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'prospector.type': {'cardinality': {'field': 'prospector.type.keyword'}}}},
  35. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'referrer': {'cardinality': {'field': 'referrer.keyword'}}}},
  36. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'remote_ip': {'cardinality': {'field': 'remote_ip.keyword'}}}},
  37. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'request': {'cardinality': {'field': 'request.keyword'}}}},
  38. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'request_action': {'cardinality': {'field': 'request_action.keyword'}}}},
  39. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'response': {'cardinality': {'field': 'response.keyword'}}}},
  40. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'source': {'cardinality': {'field': 'source.keyword'}}}},
  41. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'tags': {'cardinality': {'field': 'tags.keyword'}}}},
  42. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'time': {'cardinality': {'field': 'time.keyword'}}}},
  43. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.build': {'cardinality': {'field': 'user_agent.build.keyword'}}}},
  44. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.device': {'cardinality': {'field': 'user_agent.device.keyword'}}}},
  45. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.major': {'cardinality': {'field': 'user_agent.major.keyword'}}}},
  46. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.minor': {'cardinality': {'field': 'user_agent.minor.keyword'}}}},
  47. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.name': {'cardinality': {'field': 'user_agent.name.keyword'}}}},
  48. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.os': {'cardinality': {'field': 'user_agent.os.keyword'}}}},
  49. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.os_major': {'cardinality': {'field': 'user_agent.os_major.keyword'}}}},
  50. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.os_minor': {'cardinality': {'field': 'user_agent.os_minor.keyword'}}}},
  51. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.os_name': {'cardinality': {'field': 'user_agent.os_name.keyword'}}}},
  52. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_agent.patch': {'cardinality': {'field': 'user_agent.patch.keyword'}}}},
  53. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'user_name': {'cardinality': {'field': 'user_name.keyword'}}}},
  54. {'query': {'match_all': {}}, 'size': 0, 'aggs': {'timeline': {'date_histogram': {'interval': '1d', 'field': '@timestamp'}}}}
  55. ]
  56.  
  57. # for search body
  58. main_query = {'aggs': {}}
  59. for q in queries:
  60. main_query['aggs'].update(q.get('aggs'))
  61. else:
  62. q.pop('aggs')
  63. main_query.update(q)
  64.  
  65. # for multi search body
  66. msearch_query = [
  67. {"index": "nginx*", "ignore_unavailable": "true", "timeout": 30000},
  68. main_query
  69. ]
  70.  
  71. iterable = ((['nginx*'], None, q) for q in queries)
  72.  
  73. client = es.Elasticsearch(hosts=["ip:9200"], http_auth=None, maxsize=50, timeout=50,
  74. connection_class=es.connection.http_requests.RequestsHttpConnection)
  75.  
  76. start = time.time()
  77. client.search(index=['nginx*'], doc_type=None, body=main_query)
  78. print('Standard Search Query Execution Time: ', time.time() - start)
  79.  
  80. Output: Standard Search Query Execution Time: 19.81995415687561s
  81.  
  82. start = time.time()
  83. client.msearch(body=msearch_query)
  84. print('Standard Multi Search Query Execution Time: ', time.time() - start)
  85.  
  86. Output: Standard Multi Search Query Execution Time: 19.14345407485962s
  87.  
  88. start = time.time()
  89. with ThreadPoolExecutor(50) as ex:
  90. ex.map(lambda q: client.search(*q), iterable)
  91. print('Search Query By Multi Threading Execution Time: ', time.time() - start)
  92.  
  93. Output: Search Query By Multi Threading Execution Time: 20.80817937850952s
  94.  
  95. start = time.time()
  96. jobs = [Thread(target=client.search, args=arg) for arg in iterable]
  97. # start threads
  98. for job in jobs:
  99. job.start()
  100. # join threads
  101. for job in jobs:
  102. job.join()
  103. print('Search Query By Standard Multi Threading Execution Time: ', time.time() - start)
  104.  
  105. Output: Search Query By Standard Multi Threading Execution Time: 21.506370544433594s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement