Commit f59cced55f95c4fda76b0ec7da1a31ca47ab8951
Committed by
Eduardo Santos
Exists in
master
Versão que grava atributos e contdor. Primeiro beta que vai pra produção.
Showing
3 changed files
with
39 additions
and
10 deletions
Show diff stats
cocar/commands/scan_commands.py
| @@ -62,6 +62,12 @@ class ScanCommands(command.Command): | @@ -62,6 +62,12 @@ class ScanCommands(command.Command): | ||
| 62 | help='SNMP query to execute' | 62 | help='SNMP query to execute' |
| 63 | ) | 63 | ) |
| 64 | 64 | ||
| 65 | + parser.add_option('-t', '--timeout', | ||
| 66 | + action='store', | ||
| 67 | + dest='timeout', | ||
| 68 | + help='Timeout da consulta SNMP' | ||
| 69 | + ) | ||
| 70 | + | ||
| 65 | def __init__(self, name): | 71 | def __init__(self, name): |
| 66 | """ | 72 | """ |
| 67 | Constructor method | 73 | Constructor method |
| @@ -249,6 +255,7 @@ class ScanCommands(command.Command): | @@ -249,6 +255,7 @@ class ScanCommands(command.Command): | ||
| 249 | log.info("Host genérico com o IP %s já cadastrado", hostname) | 255 | log.info("Host genérico com o IP %s já cadastrado", hostname) |
| 250 | 256 | ||
| 251 | #session.flush() | 257 | #session.flush() |
| 258 | + session.close() | ||
| 252 | 259 | ||
| 253 | def get_printers(self): | 260 | def get_printers(self): |
| 254 | """ | 261 | """ |
| @@ -272,7 +279,8 @@ class ScanCommands(command.Command): | @@ -272,7 +279,8 @@ class ScanCommands(command.Command): | ||
| 272 | log.info("Coletando informacoes da impressora %s", printer.network_ip) | 279 | log.info("Coletando informacoes da impressora %s", printer.network_ip) |
| 273 | #printer.network_ip = printer.ip_network | 280 | #printer.network_ip = printer.ip_network |
| 274 | snmp_session = SnmpSession( | 281 | snmp_session = SnmpSession( |
| 275 | - DestHost=printer.network_ip | 282 | + DestHost=printer.network_ip, |
| 283 | + Timeout=self.options.timeout | ||
| 276 | ) | 284 | ) |
| 277 | if snmp_session is None: | 285 | if snmp_session is None: |
| 278 | log.error("Erro na coleta SNMP da impressora %s", printer.network_ip) | 286 | log.error("Erro na coleta SNMP da impressora %s", printer.network_ip) |
| @@ -347,6 +355,8 @@ class ScanCommands(command.Command): | @@ -347,6 +355,8 @@ class ScanCommands(command.Command): | ||
| 347 | log.info("Exportando impressora %s", printer.network_ip) | 355 | log.info("Exportando impressora %s", printer.network_ip) |
| 348 | printer.export_printer(server_url=self.cocar.config.get('cocar', 'server_url'), session=session) | 356 | printer.export_printer(server_url=self.cocar.config.get('cocar', 'server_url'), session=session) |
| 349 | 357 | ||
| 358 | + session.close() | ||
| 359 | + | ||
| 350 | def get_printer_attribute(self): | 360 | def get_printer_attribute(self): |
| 351 | """ | 361 | """ |
| 352 | Retorna e grava um atributo n o valor da impressora | 362 | Retorna e grava um atributo n o valor da impressora |
| @@ -363,16 +373,22 @@ class ScanCommands(command.Command): | @@ -363,16 +373,22 @@ class ScanCommands(command.Command): | ||
| 363 | Printer.network_ip == self.options.hosts | 373 | Printer.network_ip == self.options.hosts |
| 364 | ).all() | 374 | ).all() |
| 365 | 375 | ||
| 376 | + if len(results) == 0: | ||
| 377 | + log.error("Impressoras não encontradas") | ||
| 378 | + log.error(self.options.hosts) | ||
| 379 | + | ||
| 366 | for printer in results: | 380 | for printer in results: |
| 367 | log.info("Coletando informacoes da impressora %s", printer.network_ip) | 381 | log.info("Coletando informacoes da impressora %s", printer.network_ip) |
| 368 | #printer.network_ip = printer.ip_network | 382 | #printer.network_ip = printer.ip_network |
| 369 | snmp_session = SnmpSession( | 383 | snmp_session = SnmpSession( |
| 370 | - DestHost=printer.network_ip | 384 | + DestHost=printer.network_ip, |
| 385 | + Timeout=self.options.timeout | ||
| 371 | ) | 386 | ) |
| 372 | if snmp_session is None: | 387 | if snmp_session is None: |
| 373 | log.error("Erro na coleta SNMP da impressora %s", printer.network_ip) | 388 | log.error("Erro na coleta SNMP da impressora %s", printer.network_ip) |
| 374 | continue | 389 | continue |
| 375 | else: | 390 | else: |
| 391 | + log.info("Iniciando coleta da impressora %s", printer.network_ip) | ||
| 376 | printer_dict = dict() | 392 | printer_dict = dict() |
| 377 | if type(self.options.query != list): | 393 | if type(self.options.query != list): |
| 378 | test = self.options.query | 394 | test = self.options.query |
| @@ -448,6 +464,8 @@ class ScanCommands(command.Command): | @@ -448,6 +464,8 @@ class ScanCommands(command.Command): | ||
| 448 | log.error("Erro na atualizacao das informacoes para a impressora %s\n%s", printer.network_ip, e.message) | 464 | log.error("Erro na atualizacao das informacoes para a impressora %s\n%s", printer.network_ip, e.message) |
| 449 | continue | 465 | continue |
| 450 | 466 | ||
| 467 | + session.close() | ||
| 468 | + | ||
| 451 | 469 | ||
| 452 | def make_query(host): | 470 | def make_query(host): |
| 453 | """This does the actual snmp query | 471 | """This does the actual snmp query |
cocar/model/printer.py
| @@ -53,6 +53,7 @@ class Printer(Host): | @@ -53,6 +53,7 @@ class Printer(Host): | ||
| 53 | ).all() | 53 | ).all() |
| 54 | 54 | ||
| 55 | for counter in counter_list: | 55 | for counter in counter_list: |
| 56 | + print(counter) | ||
| 56 | result = counter.export_counter(server_url, session) | 57 | result = counter.export_counter(server_url, session) |
| 57 | if result: | 58 | if result: |
| 58 | log.info("Contador %s para a impressora %s exportado com sucesso") | 59 | log.info("Contador %s para a impressora %s exportado com sucesso") |
| @@ -88,6 +89,7 @@ class PrinterCounter(Printer): | @@ -88,6 +89,7 @@ class PrinterCounter(Printer): | ||
| 88 | :param session: SQLAlchemy session | 89 | :param session: SQLAlchemy session |
| 89 | :return boolean: True if inserted | 90 | :return boolean: True if inserted |
| 90 | """ | 91 | """ |
| 92 | + retorno = False | ||
| 91 | results = session.query(self.__table__).filter( | 93 | results = session.query(self.__table__).filter( |
| 92 | and_( | 94 | and_( |
| 93 | self.__table__.c.counter == self.counter, | 95 | self.__table__.c.counter == self.counter, |
| @@ -104,7 +106,7 @@ class PrinterCounter(Printer): | @@ -104,7 +106,7 @@ class PrinterCounter(Printer): | ||
| 104 | counter_time=self.counter_time | 106 | counter_time=self.counter_time |
| 105 | ) | 107 | ) |
| 106 | ) | 108 | ) |
| 107 | - return True | 109 | + retorno = True |
| 108 | 110 | ||
| 109 | session.execute( | 111 | session.execute( |
| 110 | Printer.__table__.update().values( | 112 | Printer.__table__.update().values( |
| @@ -117,7 +119,7 @@ class PrinterCounter(Printer): | @@ -117,7 +119,7 @@ class PrinterCounter(Printer): | ||
| 117 | ) | 119 | ) |
| 118 | 120 | ||
| 119 | session.flush() | 121 | session.flush() |
| 120 | - return False | 122 | + return retorno |
| 121 | 123 | ||
| 122 | def export_counter(self, server_url, session): | 124 | def export_counter(self, server_url, session): |
| 123 | """ | 125 | """ |
| @@ -139,7 +141,7 @@ class PrinterCounter(Printer): | @@ -139,7 +141,7 @@ class PrinterCounter(Printer): | ||
| 139 | 141 | ||
| 140 | # Envia a requisição HTTP | 142 | # Envia a requisição HTTP |
| 141 | headers = {'content-type': 'application/json'} | 143 | headers = {'content-type': 'application/json'} |
| 142 | - response = requests.put( | 144 | + response = requests.post( |
| 143 | export_url, | 145 | export_url, |
| 144 | data=json.dumps(counter_json), | 146 | data=json.dumps(counter_json), |
| 145 | headers=headers | 147 | headers=headers |
| @@ -148,16 +150,25 @@ class PrinterCounter(Printer): | @@ -148,16 +150,25 @@ class PrinterCounter(Printer): | ||
| 148 | try: | 150 | try: |
| 149 | # Check if request has gone wrong | 151 | # Check if request has gone wrong |
| 150 | response.raise_for_status() | 152 | response.raise_for_status() |
| 151 | - except HTTPError: | 153 | + except HTTPError, e: |
| 152 | # Something got wrong, raise error | 154 | # Something got wrong, raise error |
| 153 | - log.error("Erro na insercao do contador para a impressora %s\n", self.network_ip, response.text) | 155 | + log.error("Erro na insercao do contador para a impressora %s\n%s", self.network_ip, response.text) |
| 156 | + log.error(e.message) | ||
| 154 | return False | 157 | return False |
| 155 | 158 | ||
| 156 | if response.status_code == 200: | 159 | if response.status_code == 200: |
| 157 | log.info("Contador para a impressora %s com contador %s" | 160 | log.info("Contador para a impressora %s com contador %s" |
| 158 | "exportado com sucesso", self.network_ip, self.counter) | 161 | "exportado com sucesso", self.network_ip, self.counter) |
| 159 | # Remove o contador | 162 | # Remove o contador |
| 160 | - session.remove(self) | 163 | + session.execute( |
| 164 | + PrinterCounter.__table__.delete().where( | ||
| 165 | + and_( | ||
| 166 | + PrinterCounter.__table__.c.network_ip == self.network_ip, | ||
| 167 | + PrinterCounter.__table__.c.counter == self.counter, | ||
| 168 | + PrinterCounter.__table__.c.counter_time == self.counter_time, | ||
| 169 | + ) | ||
| 170 | + ) | ||
| 171 | + ) | ||
| 161 | session.flush() | 172 | session.flush() |
| 162 | return True | 173 | return True |
| 163 | else: | 174 | else: |
cocar/session.py
| @@ -32,7 +32,7 @@ class SnmpSession(object): | @@ -32,7 +32,7 @@ class SnmpSession(object): | ||
| 32 | DestHost="localhost", | 32 | DestHost="localhost", |
| 33 | Community="public", | 33 | Community="public", |
| 34 | Verbose=True, | 34 | Verbose=True, |
| 35 | - Timeout=10000000 | 35 | + Timeout=1000000 |
| 36 | ): | 36 | ): |
| 37 | """ | 37 | """ |
| 38 | Sessão SNMP. Links úteis: | 38 | Sessão SNMP. Links úteis: |
| @@ -75,7 +75,7 @@ class SnmpSession(object): | @@ -75,7 +75,7 @@ class SnmpSession(object): | ||
| 75 | Version=self.Version, | 75 | Version=self.Version, |
| 76 | DestHost=self.DestHost, | 76 | DestHost=self.DestHost, |
| 77 | Community=self.Community, | 77 | Community=self.Community, |
| 78 | - Timeout=self.Timeout) | 78 | + Timeout=int(self.Timeout)) |
| 79 | self.hostrec.query = result | 79 | self.hostrec.query = result |
| 80 | except Exception, err: | 80 | except Exception, err: |
| 81 | if self.Verbose: | 81 | if self.Verbose: |