#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-

'''Ce script permet de savoir s'il y a du monde au 2B.'''

import sys
from socket import gethostname
from os import system

from gestion.ldap_crans import crans_ldap
from gestion.hptools import hpswitch, ConversationError
from gestion.affich_tools import coul, cprint
from gestion.whos import aff
from gestion.mail import generate
from utils.sendmail import actually_sendmail

def missing_tpe():
    dst = 'respbats@crans.org'
    mail = generate('missing_tpe', {'to': dst})
    actually_sendmail('respbats@crans.org', [dst], mail)

def liste_2b(warn_mail=[]):
    '''Cette fonction permet de savoir s'il y a du monde au 2B.'''

    sw = hpswitch('backbone.adm')
    db = crans_ldap()

    ## Rappel (faut bien le mettre quelque part ...) :
    # Quand ça marche pas, c'est sûrement quelque chose parmi :
    # -snmpwalk n'est pas installé (paquet Debian snmp)
    # -les MIBs ne sont pas installés (/etc/snmp/mibs/hp)
    # -snmpwalk ne sait pas qu'il faut aller les chercher dans ce dossier
    #   (/etc/snmp/snmp.conf)
    macs = sw.show_prise_mac(33) #B9, ex-(D9->87)

    # Machines habituellement présentes, s'inquiéter si on ne les voit plus:
    expected = {
        "00:07:cb:b1:99:4e": "Freebox",
        "00:1c:2e:56:1a:20": "minigiga (switch)",
        "00:40:8c:7f:4a:b5": "tinybrother",
        "00:24:8c:44:3b:70": "vo",
        "54:7f:54:77:ca:be": "terminal",
	"04:18:d6:02:2c:87": "Borneo (borne)",
    }

    # Machines branchée sur la prise
    # (on voit aussi les machines branchées via une borne WiFi du 2B)
    machines = []
    if macs:
        machines_crans = []
        for mac in macs:
            fm = db.search("mac=%s" % mac)
            if len(fm['machine']) != 0:
                m = fm['machine'][0]
                # Machine personnelle ou machine Cr@ns ?
                if len(fm['borneWifi']) == 0 and len(fm['machineCrans']) == 0:
                    try:
                        p = m.proprietaire()
			if p.idn == "cid" and p.id() == "35":
                            # Machine du *club* Cr@ns
                            machines_crans.append(m)
                            continue
                        if len(p.droits()) != 0 or len(fm['machineFixe']) != 0:
                            # On filtre en Wifi sur ceux qui ont des droits
                            machines.append(m)
                    except:
                        pass
                else:
                    machines_crans.append(m)
            elif mac not in expected:
                    cprint("Machine inconnue: %s" % mac, 'rouge')
        for expectedMac in expected.iterkeys():
            if expectedMac not in macs:
                cprint("Machine %s manquante !" % expected[expectedMac], 'rouge')
                if expected[expectedMac] in warn_mail:
                    missing_tpe()
                    print("envoi d'un mail")
        # Affichage des machines
        cprint('---=== Machines du Crans ===---', 'bleu')
        aff(machines_crans, mtech=True)
        cprint('---=== Autres machines ===---', 'bleu')
        aff(machines)
    ttyfound = 1

    # Utilisateurs connectés sur vo sur place
    if gethostname() == 'vo':
        cprint('---=== W(ho) sur vo ===---', 'bleu')
        ttyfound = system("/usr/bin/w -s | grep ?xdm?")
    print ''

    # Conclusion
    if len(machines) != 0 or ttyfound == 0:
        cprint("---=== Il y a du monde au 2B ! ===---", 'vert')
    else:
        cprint("---=== Il semble n'y avoir personne au 2B ... ===---", 'rouge')

if __name__ == '__main__':
    if '--warn-tpe' in sys.argv:
        liste_2b(warn_mail=["terminal"])
    else:
        liste_2b()

