""" .. module: lemur.endpoints.cli :platform: Unix :copyright: (c) 2018 by Netflix Inc., see AUTHORS for more :license: Apache, see LICENSE for more details. .. moduleauthor:: Kevin Glisson """ from flask_script import Manager import arrow from datetime import timedelta from sqlalchemy import cast from sqlalchemy_utils import ArrowType from lemur import database from lemur.extensions import metrics, sentry from lemur.endpoints.models import Endpoint manager = Manager(usage="Handles all endpoint related tasks.") @manager.option( "-ttl", "--time-to-live", type=int, dest="ttl", default=2, help="Time in hours, which endpoint has not been refreshed to remove the endpoint.", ) def expire(ttl): """ Removed all endpoints that have not been recently updated. """ print("[+] Staring expiration of old endpoints.") try: now = arrow.utcnow() expiration = now - timedelta(hours=ttl) endpoints = database.session_query(Endpoint).filter( cast(Endpoint.last_updated, ArrowType) <= expiration ) for endpoint in endpoints: print( "[!] Expiring endpoint: {name} Last Updated: {last_updated}".format( name=endpoint.name, last_updated=endpoint.last_updated ) ) database.delete(endpoint) metrics.send("endpoint_expired", "counter", 1) print("[+] Finished expiration.") except Exception as e: sentry.captureException()