2020-07-08 12:15:47 +00:00
|
|
|
#!/usr/bin/env python3
|
2020-07-08 13:27:28 +00:00
|
|
|
from os import path
|
2020-07-08 12:15:47 +00:00
|
|
|
from optparse import OptionParser
|
|
|
|
|
|
|
|
from query import ESQueryPeers
|
|
|
|
from graph import PDGraphPeers
|
|
|
|
|
2020-07-08 12:57:48 +00:00
|
|
|
HELP_DESCRIPTION = 'This generates a CSV with buckets of peer_ids for every day.'
|
2020-07-15 18:00:40 +00:00
|
|
|
HELP_EXAMPLE = 'Example: ./unique_count.py -i "logstash-2019.11.*" -f "peer_id"'
|
2020-07-08 12:57:48 +00:00
|
|
|
|
2020-07-08 12:15:47 +00:00
|
|
|
|
|
|
|
def parse_opts():
|
|
|
|
parser = OptionParser(description=HELP_DESCRIPTION, epilog=HELP_EXAMPLE)
|
|
|
|
parser.add_option('-H', '--host', dest='es_host', default='localhost',
|
|
|
|
help='ElasticSearch host.')
|
|
|
|
parser.add_option('-P', '--port', dest='es_port', default=9200,
|
|
|
|
help='ElasticSearch port.')
|
|
|
|
parser.add_option('-i', '--index-pattern', default='logstash-*',
|
|
|
|
help='Patter for matching indices.')
|
|
|
|
parser.add_option('-f', '--field', type='str', default='peer_id',
|
|
|
|
help='Name of the field to count.')
|
2020-07-15 18:00:40 +00:00
|
|
|
parser.add_option('-F', '--fleet', type='str', default='eth.prod',
|
|
|
|
help='Name of the fleet to query.')
|
2020-07-08 14:03:47 +00:00
|
|
|
parser.add_option('-m', '--max-size', type='int', default=100000,
|
2020-07-08 12:15:47 +00:00
|
|
|
help='Max number of counts to find.')
|
2020-07-08 14:03:47 +00:00
|
|
|
parser.add_option('-d', '--image-dpi', type='int', default=200,
|
2020-07-08 13:19:47 +00:00
|
|
|
help='DPI of generated PNG images.')
|
2020-07-08 13:27:28 +00:00
|
|
|
parser.add_option('-o', '--output-dir', default='./',
|
|
|
|
help='Dir into which images are generated.')
|
2020-07-08 12:15:47 +00:00
|
|
|
(opts, args) = parser.parse_args()
|
|
|
|
|
|
|
|
if not opts.field:
|
|
|
|
parser.error('No field name specified!')
|
2020-07-08 12:57:48 +00:00
|
|
|
|
2020-07-08 12:15:47 +00:00
|
|
|
return (opts, args)
|
|
|
|
|
2020-07-08 12:57:48 +00:00
|
|
|
|
2020-07-08 12:15:47 +00:00
|
|
|
def main():
|
|
|
|
(opts, args) = parse_opts()
|
|
|
|
|
|
|
|
esq = ESQueryPeers(opts.es_host, opts.es_port)
|
|
|
|
|
|
|
|
data = []
|
|
|
|
for index in esq.get_indices(opts.index_pattern):
|
|
|
|
print('Index: {}'.format(index))
|
2020-07-15 18:00:40 +00:00
|
|
|
data.extend(esq.get_peers(index, opts.field, opts.fleet, opts.max_size))
|
2020-07-08 12:15:47 +00:00
|
|
|
|
|
|
|
pdg = PDGraphPeers(data)
|
|
|
|
|
2020-07-08 12:54:24 +00:00
|
|
|
plot = pdg.days_per_peers()
|
2020-07-08 13:27:28 +00:00
|
|
|
plot.figure.savefig(path.join(opts.output_dir, "days_per_peers.png"),
|
|
|
|
dpi=opts.image_dpi)
|
2020-07-08 12:54:24 +00:00
|
|
|
|
|
|
|
matrix = pdg.weekly_cohorts()
|
2020-07-08 13:27:28 +00:00
|
|
|
matrix.figure.savefig(path.join(opts.output_dir, "weekly_cohorts.png"),
|
|
|
|
dpi=opts.image_dpi)
|
2020-07-08 12:15:47 +00:00
|
|
|
|
2020-07-08 12:57:48 +00:00
|
|
|
|
2020-07-08 12:15:47 +00:00
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|