pvl/dhcp/hosts.py
author Tero Marttila <terom@paivola.fi>
Sat, 21 Dec 2013 22:57:44 +0200
changeset 329 b3778c190aa5
parent 213 711f71e7328b
permissions -rw-r--r--
version 0..0:

pvl.rrd: api.report()
pvl.wlan-syslog: track openwrt hostapd syslog wlan sta activity
pvl.verkko.wlan: basic Table view
pvl.dns-serial
pvl.dns-zone
pvl.dhcp.config: nested blocks
pvl.hosts-import: import hosts from dns/dhcp
pvl.hosts-dns: generate --forward-zone=paivola.fi and --reverse-zone=194.197.235
pvl.hosts-dhcp: generate dhcp hosts conf
174
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
"""
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
    Track active DHCP hosts on network by dhcp messages.
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
"""
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
import logging; log = logging.getLogger('pvl.dhcp.hosts')
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
# XXX: from db.dhcp_leases instead?
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
import pvl.verkko.db as db
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
class DHCPHostsDatabase (object) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
    """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
        pvl.verkko.Database dhcp_hosts model for updates.
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
    def __init__ (self, db) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
        self.db = db
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    def create (self) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
            CREATE TABLEs
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
        log.info("Creating database tables: dhcp_hosts")
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
        db.dhcp_hosts.create(self.db.engine, checkfirst=True)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
210
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    26
    def select (self, distinct=(db.dhcp_hosts.c.gw, db.dhcp_hosts.c.ip), interval=None) :
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    27
        """
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    28
            SELECT unique gw/ip hosts, for given interval.
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    29
        """
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    30
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    31
        query = db.select(distinct, distinct=True)
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    32
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    33
        if interval :
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    34
            # timedelta
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    35
            query = query.where(db.func.now() - db.dhcp_hosts.c.last_seen < interval)
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    36
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    37
        return self.db.select(query)
544a6a58ed28 pvl.dhcp.hosts: implement DHCPHostsDatabase.select(), and DHCPHostRule
Tero Marttila <terom@paivola.fi>
parents: 193
diff changeset
    38
174
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
    def insert (self, attrs) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
            INSERT new host
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
        query = db.dhcp_hosts.insert().values(
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
                ip          = attrs['ip'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
                mac         = attrs['mac'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
                gw          = attrs['gw'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
                first_seen  = attrs['timestamp'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
                count       = 1,
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
                last_seen   = attrs['timestamp'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
                state       = attrs['state'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
                
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
                name        = attrs.get('name'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
                error       = attrs.get('error'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
        )
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        # -> id
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
        return self.db.insert(query)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
    def update (self, attrs) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
            UPDATE existing host, or return False if not found.
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
        table = db.dhcp_hosts
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
        query = table.update()
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
        query = query.where((table.c.ip == attrs['ip']) & (table.c.mac == attrs['mac']) & (table.c.gw == attrs['gw']))
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        query = query.values(
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
                count       = db.func.coalesce(table.c.count, 0) + 1,
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
                # set
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
                last_seen   = attrs['timestamp'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
                state       = attrs['state'],
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
        )
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
        if 'name' in attrs :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
            query = query.values(name = attrs['name'])
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
        
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        if 'error' in attrs :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
            query = query.values(error = attrs['error'])
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
        # any matched rows?
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
        return self.db.update(query)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
    def __call__ (self, item) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
            Process given DHCP syslog message to update the hosts table.
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
        """
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
        attrs = {}
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
        
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
        # ignore unless we have enough info to fully identify the client
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
        # this means that we omit DHCPDISCOVER messages, but we get the OFFER/REQUEST/ACK
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
        if any(name not in item for name in ('lease', 'hwaddr', 'gateway')) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
            # ignore; we require these
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
            return
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
        # do not override error from request on NAK; clear otherwise
193
4db45cb35dc3 pvl.dhcp: docdoc DHCPINFORM?
Tero Marttila <terom@paivola.fi>
parents: 174
diff changeset
   102
        # TODO: DHCPINFORM from 192.168.x.y with error -> rogue dhcp?
174
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
        if item.get('type') == 'DHCPNAK' :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
            pass
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        else :
213
711f71e7328b pvl.dhcp.DHCPSyslogParser: separate error and error-type
Tero Marttila <terom@paivola.fi>
parents: 211
diff changeset
   106
            attrs['error'] = item.get('error-type') or item.get('error')
174
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
        # do not override name unless known
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
        if item.get('name') :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
            attrs['name'] = item.get('name')
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
        # db: syslog
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
        ATTR_MAP = (
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
            ('ip',          'lease'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
            ('mac',         'hwaddr'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
            ('gw',          'gateway'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
            ('timestamp',   'timestamp'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
            ('state',       'type'),
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
        )
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
        # generic attrs
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
        for key, name in ATTR_MAP :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
            attrs[key] = item.get(name)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
        # update existing?
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
        if self.update(attrs) :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
            log.info("Update: %s", attrs)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
        else :
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
            # new
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
            log.info("Insert: %s", attrs)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
            self.insert(attrs)
6f339a8a87dc split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134