#!/usr/bin/env python

"""CLI tool to create new reactor suppression filters"""

import boto.sdb
from nymms.suppress.suppress import ReactorSuppress
from nymms.utils.aws_helper import ConnectionManager
from nymms.utils import cli
import time
import os
import logging
import socket
import sys


def get_ipaddr():
    """This is probably the most consistent & cross platform way
    to figure out what our IP address is"""
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('google.com', 80))
    ip = s.getsockname()[0]
    s.close()
    return ip

ipaddr = get_ipaddr()
userid = os.getlogin()

parser = cli.NymmsCommandArgs(__doc__)
parser.add_argument('-e', '--expires', dest='expires', default='+1h',
        help='YYYYMMDDHHMMSS or +XXX[smhd] to expire in. default: %(default)s')
parser.add_argument('-f', '--filter', dest='filter', required=True,
        help='Regex to filter events with')
parser.add_argument('-C', '--comment', dest='comment', required=True,
        help='Comment to record with filter')
parser.add_argument('-i', '--ipaddr', dest='ipaddr', default=ipaddr,
        help='Override IP address to record: %(default)s')
parser.add_argument('-u', '--userid', dest='userid', default=userid,
        help='Override userid to record: %(default)s')

args = parser.parse_args()
logger = cli.setup_logging(args.verbose)

from nymms.suppress.sdb_suppress import SDBSuppressFilterBackend
from nymms.config import config
config.load_config(args.config)

current_epoch = int(time.time())
expires = cli.parse_time(args.expires, current_epoch)

if expires <= current_epoch:
    logger.error("Expires must be in the future")
    exit(-1)

current_epoch_time = time.gmtime(current_epoch)
expires_time = time.gmtime(expires)
logger.debug("Currently %s, will expire at %s\n",
        time.strftime("%Y-%m-%d %H:%M:%S", current_epoch_time),
        time.strftime("%Y-%m-%d %H:%M:%S", expires_time))

aws = ConnectionManager(region=config.settings['region'])
suppress = SDBSuppressFilterBackend(aws.sdb,
        config.settings['suppress']['cache_timeout'],
        config.settings['suppress']['domain'])

suppress_obj = ReactorSuppress({
    'comment': args.comment,
    'expires': expires,
    'ipaddr': args.ipaddr,
    'regex': args.filter,
    'userid': args.userid})
suppress.add_suppression(suppress_obj)
