#!/usr/bin/python2

import os
import re
import sys
import logging
import logging.handlers
import subprocess

progname = os.path.basename(os.path.abspath(sys.argv[0]))

logger = logging.getLogger(progname)
logger.setLevel(logging.INFO)

#try:
#    handler = logging.handlers.SysLogHandler(address='/dev/log')
#except:
#    handler = logging.FileHandler('/var/log/ipupdown-local.log')

handler = logging.FileHandler('/var/log/ipupdown-local.log')
handler.setFormatter(logging.Formatter(progname + '[%(process)d]: %(levelname)s: ' + '%(message)s'))

logger.addHandler(handler)

mode = None
name = None

try:
    mode = re.compile('if(up|down)-local').match(progname).group(1)
except:
    logger.error('unable to find mode from program name %s' % progname)
    sys.exit(1)

try:
    name = sys.argv[1]
except:
    logger.error('interface name missing')
    sys.exit(1)

logger.debug('called %s for interface %s...' % (progname, name))

scriptpath = '/etc/ifupdown-local.d/'
scriptlist = []

try:
    logger.debug('listing scripts in %s...' % scriptpath)
    scriptlist = os.listdir(scriptpath).sort()
except Exception, e:
    logger.warning('open %s failed: %s' % (scriptpath, str(e)))
    sys.exit(1)

for fn in os.listdir(scriptpath):
    fullpath = os.path.join(scriptpath, fn)
    if os.access(fullpath, os.X_OK):
        try:
            logger.debug('running script %s...' % fullpath)
            ret = subprocess.call([fullpath, mode, name])

            if ret > 0:
                logger.warning('script %s returned %d' % (fn, ret))
            elif ret < 0:
                logger.warning('script %s killed with signal %d' % (fn, 0 - ret))
        except Exception, e:
            logger.warning('error running script %s: %s' % (fn, str(e)))
    else:
        logger.debug('script %s not executable, skipping' % fn)
