#!/usr/local/bin/tclsh8.6

#
# Display statistics about MAC informations
#
# History
#   2005/05/27 : jean     : design
#   2010/11/30 : pda/jean : integration a Netmagis
#   2010/12/12 : pda      : i18n
#   2010/12/26 : pda      : use cgi-dispatch
#

#
# Template pages used by this script
#

set conf(page)          macstat.html

#
# Script parameters
#

set conf(tabresultat) {
    global {
        chars {10 normal}
        align {left}
        botbar {yes}
        columns {75 25}
    }   
    pattern Normal {
        vbar {yes}
        column { }
        vbar {yes}
        column { }
        vbar {yes}
    }
}

#
# Netmagis general library

source /usr/local/lib/netmagis/libnetmagis.tcl

# ::webapp::cgidebug ; exit

##############################################################################
# Utility functions
##############################################################################

#
# Compute statistics on addresses
#

proc stat-addr {dbfd} {
    global conf

    # list of couples <desc, request>
    set lcouples {
	"Number of unique MAC addresses"
	"SELECT count(DISTINCT ((data).mac)) AS r FROM mac.portmac" 
	"Number of unique IPv4 addresses"
	"SELECT count(DISTINCT ((data).ip)) AS r FROM mac.ipmac WHERE family((data).ip)=4"
	"Number of unique IPv6 addresses"
	"SELECT count(DISTINCT ((data).ip)) AS r FROM mac.ipmac WHERE family((data).ip)=6"
	"Number of distinct MAC addresses associated with an IPv6 address"
	"SELECT count(DISTINCT(((data).mac))) AS r FROM mac.ipmac WHERE family((data).ip)=6"
    }

    set lines {}
    foreach {desc req} $lcouples {
	set result ""
	pg_select $dbfd $req tab {
	    set result $tab(r)
	}
	set desc [mc $desc]
	lappend lines [list Normal $desc $result]
    }
    return [::arrgen::output "html" $conf(tabresultat) $lines]
}

###############################################################################
# Display statistics
###############################################################################

d cgi-register {} {} {
    global conf

    #
    # Open MAC database
    #

    set conninfo [get-conninfo "macdb"]
    if {[catch {set dbfdmac [pg_connect -conninfo $conninfo]} msg]} then {
        d error $msg
    }

    #
    # Get result
    #

    set tableau [stat-addr $dbfdmac]

    #
    # End of script: output page and close database
    #

    d result $conf(page) [list \
                                [list %TITLE% [mc "Statistics about MAC/IP addresses"]] \
                                [list %TABLEAU% $tableau] \
                            ]
}

###############################################################################
# Main procedure
###############################################################################

d cgi-dispatch "mac" "mac"
