commit bea3bca72132b43b5341acd4c300aaae8c850fff Author: dave Date: Sat Jul 9 22:35:55 2016 -0700 initial commit diff --git a/escleaner/__init__.py b/escleaner/__init__.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/escleaner/__init__.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/escleaner/escleaner.py b/escleaner/escleaner.py new file mode 100755 index 0000000..ff4557b --- /dev/null +++ b/escleaner/escleaner.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +import requests +import re +from datetime import datetime,timedelta + +def get_indices(): + req = requests.get("{}/_cat/indices".format(es_url)) + data = req.text.strip().split("\n") + + data = [row.split(" ")[2] for row in data] + + data = [item for item in filter(lambda x: logstash_pattern.match(x), data)] + + return sorted(data) + + +def delete_index(index): + if index: + print("deleting {}".format(index)) + #print("curl -XDELETE {}{} &&".format(es_url, index)) + del_url = "{}{}".format(es_url, index) + print(requests.delete(del_url).text) + + +def main(url, index, days): + global es_url + global logstash_pattern + es_url = url + logstash_pattern = re.compile(r'%s\-(([0-9]{4})\.([0-9]{2})\.([0-9]{2}))'%index) + + deleteBefore = datetime.now() - timedelta(days=days) + + indexes = get_indices() + + for index in indexes: + datematch = logstash_pattern.match(index) + year = int(datematch.group(2)) + month = int(datematch.group(3)) + day = int(datematch.group(4)) + + indexDate = datetime(year=year, month=month, day=day) + + if indexDate < deleteBefore: + delete_index(index) + +def shell(): + import argparse + + parser = argparse.ArgumentParser(description='Delete logstash indexes by age') + parser.add_argument('-u', '--url', action='store', required=True, help='Elasticsearch url') + parser.add_argument('-d', '--days', action='store', default=31, help='Maximum index age that will be kept', type=int) + parser.add_argument('-i', '--index', action='store', default="logstash", help='Index name to inspect. (Used as so: "%%s-YYYY.MM.DD")') + + args = parser.parse_args() + + main(args.url, args.index, args.days) + + +if __name__ == '__main__': + shell() diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..004ae0d --- /dev/null +++ b/setup.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +from setuptools import setup +from escleaner import __version__ + +setup(name='escleaner', + version=__version__, + description='Utility for deleteding logstash-elasticearch indices by age', + url='http://gitlab.davepedu.com/dave/escleaner', + author='dpedu', + author_email='dave@davepedu.com', + packages=['escleaner'], + entry_points={ + 'console_scripts': [ + 'escleaner = escleaner.escleaner:shell', + ] + }, + install_requires=[ + 'requests==2.10.0', + ], + zip_safe=False)