| import glob |
| import os |
| import optparse |
| import random |
| import hjson |
| import time |
| from datetime import datetime |
|
|
| from mozdef_util.utilities.toUTC import toUTC |
| from mozdef_util.elasticsearch_client import ElasticsearchClient |
|
|
|
|
| def handle_event(event): |
| timestamp = toUTC(datetime.now()).isoformat() |
| event['timestamp'] = timestamp |
| event['receivedtimestamp'] = timestamp |
| event['utctimestamp'] = timestamp |
|
|
| |
| if 'tags' not in event: |
| event['tags'] = list() |
| event['tags'] += 'demodata' |
| return event |
|
|
|
|
| def handle_events(sample_events, num_picked, es_client): |
| selected_events = [] |
| if num_picked == 0: |
| selected_events = sample_events |
| else: |
| |
| for i in range(0, num_picked): |
| selected_events.append(random.choice(sample_events)) |
| for event in selected_events: |
| event = handle_event(event) |
| es_client.save_event(event) |
|
|
|
|
| def run(num_rounds, num_events, sleep_time, es_client): |
| sample_events_dir = os.path.join(os.path.dirname(__file__), "sample_events") |
| sample_event_files = glob.glob(sample_events_dir + '/*') |
| sample_events = [] |
| for sample_file in sample_event_files: |
| sample_events += hjson.load(open(sample_file)) |
| |
| if num_rounds == 0: |
| print("Running indefinitely") |
| while True: |
| handle_events(sample_events, num_events, es_client) |
| time.sleep(sleep_time) |
| else: |
| print("Running for {0} rounds".format(num_rounds)) |
| handle_events(sample_events, num_events, es_client) |
|
|
|
|
| if __name__ == '__main__': |
| parser = optparse.OptionParser() |
| parser.add_option('--elasticsearch_host', help='Elasticsearch host (default: http://localhost:9200)', default='http://localhost:9200') |
| parser.add_option('--num_events', help='Number of random events to insert (default: 0 (run all))', default=0) |
| parser.add_option('--num_rounds', help='Number of rounds to insert events (default: 0 (run continuously))', default=0) |
| parser.add_option('--sleep_time', help='Number of seconds to sleep between rounds (default: 2)', default=2) |
| options, arguments = parser.parse_args() |
| es_client = ElasticsearchClient(options.elasticsearch_host) |
| run( |
| num_rounds=options.num_rounds, |
| num_events=options.num_events, |
| sleep_time=options.sleep_time, |
| es_client=es_client |
| ) |
|
|