#!/usr/bin/env python3

# Copyright (c) 2018-2019, AT&T Intellectual Property.
# All rights reserved.
#
# SPDX-License-Identifier: GPL-2.0-only

import os
import signal
import subprocess

from vyatta import configd

CONFIG_PATH = 'service snmp notification syslog'
CONFIG_FILE = '/etc/rsyslog.d/vyatta-rfc5676.conf'
RSYSLOG_PID = '/var/run/rsyslogd.pid'

def signal_rsyslogd_reread():
    try:
        #rsyslog needs a restart to reload configuration change
        subprocess.call(["service", "rsyslog", "restart"], shell=False)
    except:
        pass

def delete():
    try:
        os.remove(CONFIG_FILE)
        signal_rsyslogd_reread()
    except:
        pass

def filter(facility, level):
    if facility == 'all':
        return '*' + '.' + level
    else:
        return facility + '.' + level

def update(tree):
    configfile = open(CONFIG_FILE + '.tmp', 'w')
    configfile.write('# SYSLOG to SNMP notifications\n')
    configfile.write('module (load="omprog")\n')
    configfile.write('$template omrfc5676,"%syslogfacility%,%syslogpriority%,%programname%,%timestamp%,%source%,%syslogtag%,%msg%\\n"\n')
    configfile.write((','.join(filter(x['facility'], x['level']) for x in tree['syslog']['filters'])),)
    configfile.write(' action(type="omprog" binary="/opt/vyatta/sbin/omrfc5676" template="omrfc5676")\n')
    configfile.close()
    os.rename(CONFIG_FILE + '.tmp', CONFIG_FILE)
    signal_rsyslogd_reread()

client = configd.Client()

try:
    tree = client.tree_get_full_dict(CONFIG_PATH)
    if 'all' in tree['syslog']:
        update(tree)
    else:
        delete(tree)
except:
    delete()
