Bom galera essa semana deu uma olhada no pynotify, com ele é possivel gerar aquelas notificações que recemos quando o Icedove recebe um email, quando nossa bateria do note tá abrindo as pernas, enfim uma sério de possibilidades pra esse cara…
nesse exemplo que fiz imaginei o seguinte, tenho uma série de servidores e quero ser avisado quando algum deles não estiver respondendo…
aproveitei tbm a optionParse que pra mim é uma mão na roda e coloquei algumas opções pra chamar esse script
./script -t tempo_em_segundos
alem disso -v verssion -h help
gostei dele cara ![]()
bom vamos ao código:
#! /usr/bin/python # -*- coding: iso-8859-1 -*- # Criado em: "05/11/2009" # Autor: MRSantos mrsantos@viaconnect.com.br # Version: 1.3 # # A espera não é uma esperaça vazia, # possui a certeza interior de alcançar seu objetivo... # # 2009-11-08 # + acrescentado loop no script pra rodar eternamente# # 2009-11-09 # + acrescentados optionParse para chamar o script com parametros # + acrescentado icone na notificacao... import sys import os import socket from time import sleep from optparse import OptionParser try: import pynotify except: os.system("clear") print "###########################################################" print "Modulo pynotfy nao instalado\napt-get install python-notify" print "###########################################################" sys.exit(0) def verifica_status(host): # por padrao tento nessa porta... port=22 sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(.5) testa=sock.connect_ex((host, port)) if testa==0: return True else: sock.close() return False def notificacao(title, msg): """ valores possiveis para os icones: printer - impressora dialog-warning - icone com exclamacao printer - impressora emblem-mail - email # acho que tem bem mais mas nao fui atrás
# tbm pode ser passado um caminho para uma imagem algo em torno de 72px de largura... # testei com uma foto minha ficou lindo...
""" icone = 'server' if pynotify.init("MRS"): n = pynotify.Notification(title, msg, icone) # descomente a linha de baixo e a notificacao fica até que alguem a feche... #n.set_timeout(pynotify.EXPIRES_NEVER) if not n.show(): print "Falha ao criar notificacao" def main(): hosts = { 'Servidor1': '192.168.0.10', 'Servidor2': '192.168.0.11', 'Servidor3': '10.255.106.12', 'Servidor do terra': '200.154.56.80' } for i in hosts.keys(): if not verifica_status(hosts[i]): notificacao(i, "O servidor %s não está respondendo" % hosts[i]) if __name__ == '__main__': parser = OptionParser(usage="./%prog [-t]", version="%prog 1.0") parser.add_option('-t', '--time', help='Especifique um tempo para que que o script seja chamado novamente\nO tempo eh especificado em segundos...') options = parser.parse_args()[0] time_default=180 # se nao especificado tempo então é a cada 3 minutos while 1: main() if options.time: try: sleep(time) except: sleep(time_default) else: sleep(time_default)
Bom galera uma mudança que vou fazer é ele pegar os servidores de uma lista e nao do dicionario dentro do script, quando fizer atualizo o codifo aqui
Marcio