zephir.monitor.agent.reseau

Package zephir :: Package monitor :: Package agent :: Module reseau |
[frames] | no frames]

# Source Code for Module zephir.monitor.agent.reseau

     1  # -*- coding: UTF-8 -*-
     2
     3  """Informations sur les cartes ethernet
     4  """
     5  import commands
     6  import os
     7
     8  from agent import Agent
     9  from zephir.monitor.utils import list_to_table
    10
    11 -class Reseau(Agent):
    12      """Infos réseau
    13      """
    14 -    def __init__(self):
    15          self.name="reseau"
    16          self.description="""Informations reseau (configuration des cartes ethernet)"""
    17          Agent.__init__(self)
    18
    19          # traitements
    20          resultat = self._reseau()
    21          self.contenu_xml = list_to_table(resultat)
    22          self.contenu_html = self.contenu_xml # list_to_table(resultat)
    23
    24          # écriture dans les fichiers
    25          self.write_xml()
    26          self.write_html()
    27
    28 -    def _reseau(self):
    29          """Récupère une sortie système
    30          """
    31          exec_cmd = "/bin/cat /proc/net/dev"
    32          s = commands.getoutput(exec_cmd)
    33          lignes = s.splitlines()
    34          # une ligne pour chaque carte
    35          lignes = lignes[2:]
    36
    37          d = {}
    38          for ligne in lignes:
    39              deb_ligne = ligne.split(':')[0].strip()
    40              fin_ligne = ligne.split(':')[1]
    41              champs = fin_ligne.split()
    42              # calcul du pourcentage d'erreur en entrée et sortie
    43              if float(champs[1]) != 0:
    44                  pourc_in = (float(champs[2]) * 100) / float(champs[1])
    45              else:
    46                  pourc_in = 0
    47
    48              if float(champs[9]) != 0:
    49                  pourc_out =(float(champs[10]) * 100) / float(champs[9])
    50              else:
    51                  pourc_out = 0
    52
    53              # transforme les octets en kilo-octets
    54              d[deb_ligne] = [round(float(champs[0])/1024), round(float(champs[8])/1024),round(pourc_in),round(pourc_out)]
    55
    56          exec_cmd = "/sbin/ifconfig"
    57          s = commands.getoutput(exec_cmd)
    58          cartes = s.split("\n\n")
    59
    60          for lignes in cartes:
    61              ligne = lignes.splitlines()[0]
    62              nom_carte = ligne.split()[0]
    63              # si c'est un alias, on ignore
    64              if nom_carte.count(':') == 0:
    65                  ligne = lignes.splitlines()[1]
    66                  adresses = ligne.strip()
    67                  adr_carte = adresses[adresses.index(':')+1:].split()[0]
    68                  # ajoute les informations au dictionnaire
    69                  d[nom_carte].append(adr_carte)
    70
    71          # transformation du dico de listes en liste de dicos (ah ah ah)
    72          l = []
    73          for device in d.keys():
    74              try:
    75                  # Si on detecte un fort taux d'erreurs (>= 10%), on pose une alerte
    76                  if (d[device][2] >= 10) or (d[device][3] >= 10):
    77                      self.set_status("0")
    78                      l.append({'nom':'<font color="#cc0000">'+device+'</font>','entree (ko)':d[device][0],'entree (erreurs)':d[device][2],'sortie (ko)':d[device][1],'sortie (erreurs)':d[device][3]})
    79                  else:
    80                      l.append({'nom':'<font color="#00cc00">'+device+'</font>','entree (ko)':d[device][0],'entree (erreurs)':d[device][2],'sortie (ko)':d[device][1],'sortie (erreurs)':d[device][3]})
    81
    82              except:
    83                  pass
    84          return l
    85
    86
    87  if __name__ == "__main__":
    88      Reseau()
    89