none
Erro na escrita do log mas funções ok RRS feed

  • Pergunta

  • Ba galera.

    boa tarde tche.

    Utilizo o script abaixo para monitorar via ping alguns servidores tche, e hoje o pessoal que fica de olho no log quando o mesmo é disparado por e-mail reclamou que os nomes dos servidores não estação sendo escritos corretamente tche.

    por exemplo, da lista de servidores caso um falhe, a condição de enviar e-mail é iniciada, porem quando o email é encaminhado ele vai com o corpo do e-mail o log e o arquivo tche, mais tanto no arquivo como no log vai somente o nome do primeiro servidor consultado tche.

    já verifiquei pelo networkmonitor, tche e validei que o ping esta sendo feito para todos os server, o problema esta somente na escrita do log para, alguém consegue me indicar o que mudar tche.

    obrigado.

    código.

    On error resume next
    Const ADS_PROPERTY_CLEAR = 1
    Dim fso
    Dim logNoLimit
    Dim objRecordSet
    Const ForAppending = 8
    Set fso = CreateObject("Scripting.FileSystemObject")
    dtmThisDay = Day(Date)
    dtmThisMonth = Month(Date)
    dtmThisYear = Year(Date)
    DataHora = dtmThisYear & "-" & dtmThisMonth & "-" & dtmThisDay
    Hora = Hour(Time)
    Minuto = Minute(Time)
    H_agora = hora & "-" & Minuto
    
    '############## CRIA A PASTA E O ARQUIVO ####################
    If fso.FolderExists("c:\MONITORAMENTO\PERIODICO\"&DataHora&"") Then
    	Set logNoLimit = fso.OpenTextFile ("c:\MONITORAMENTO\PERIODICO\"&DataHora&"\Checagem_"&H_agora&".txt", ForAppending, True)
    Else
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	Set objFolder = objFSO.CreateFolder("c:\MONITORAMENTO\PERIODICO\"&DataHora&"")
    	Set logNoLimit = fso.OpenTextFile ("c:\MONITORAMENTO\PERIODICO\"&DataHora&"\Checagem_"&H_agora&".txt", ForAppending, True)
    End If
    
    '############### GRAVA O LOG NO ARQUIVO ######################
    Do
    	While Counter < 2
    		logNoLimit.WriteLine("")
    		logNoLimit.WriteLine ("=====================================================================")
    		logNoLimit.WriteLine ("====================  Checagem diária dos servidores ========================")
    		logNoLimit.WriteLine ("=====================================================================")
    		logNoLimit.WriteLine ("========================= "& Time &" "& DataHora & " ============================")
    		logNoLimit.WriteLine ("=====================================================================")
    		logNoLimit.WriteLine("")
    		Set objRecordSet = objCommand.Execute
    		'########################## Verifica Link ##############################
    		strMachines = "server1;server2"
    		aMachines = split(strMachines, ";")
    
    		For Each machine in aMachines
    			Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
    			 ExecQuery("select * from Win32_PingStatus where address = '"_
    				 & machine & "'")
    			Counter = Counter + 1
    			For Each objStatus in objPing
    				If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>"0" Then
    					logNoLimit.WriteLine ("O Servidor não está conectado! - " & "( " & aMachines(x) & " )")
    					sendmail= "sim"
    				else           
    					logNoLimit.WriteLine ("Servidor " & aMachines(x) & " está OK.")
    				End If
    			Next
    		Next
    		objRecordset.MoveNext
    		logNoLimit.Close
    		'######################################### COMEÇA O ENVIO DA MENSAGEM #######################################################
    		If sendmail = "sim" then
    
    			Const ForReading = 1, ForWriting = 2
    			'################ ABRE O ARQUIVO ###########
    			Set f = fso.OpenTextFile("c:\MONITORAMENTO\PERIODICO\"&DataHora&"\Checagem_"&H_agora&".txt", ForReading)
    
    			BodyText = f.ReadAll
    			f.Close
    			Set f = Nothing
    			Set fso = Nothing
    			'################ ENVIA A MENSAGEM ###########
    			Set objEmail = CreateObject("CDO.Message")
    
    			objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    			objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.server.com.br"
    			objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    
    			objEmail.From = "MONITORAMENTO<monitoracao@server.com.br>"
    			objEmail.Subject = "ATENÇÃO - PROBLEMAS"
    			objEmail.To = "admin@server.com.br"
    			objEmail.Textbody = BodyText
    			objEmail.AddAttachment "c:\MONITORAMENTO\PERIODICO\"&DataHora&"\Checagem_"&H_agora&".txt"
    			objEmail.Configuration.Fields.Update
    			objEmail.Send
    
    			'################ FIM DO ENVIO ###################
    		End If
    		wscript.sleep (300000)
    	 
    	Wend
    	Counter = 0
    Loop Until Counter = 2



    • Editado Fábio JrModerator terça-feira, 30 de abril de 2013 23:27 Formatação do código
    segunda-feira, 29 de abril de 2013 15:41

Respostas

  • Marcelo,

    Tente alterar o FOR EACH do Ping

    			For Each objStatus in objPing
    				If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>"0" Then
    					logNoLimit.WriteLine ("O Servidor não está conectado! - " & "( " & machine & " )")
    					sendmail= "sim"
    				else           
    					logNoLimit.WriteLine ("Servidor " & machine & " está OK.")
    				End If
    			Next

    Apenas troquei onde estava aMachines(x) por machine.

    Não testei, apenas passei o olho e me pareceu que isto estava errado.


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI quinta-feira, 2 de maio de 2013 13:50
    terça-feira, 30 de abril de 2013 23:30
    Moderador

Todas as Respostas

  • Ba tche

    se possível se algum amigo também conseguir me ajudar numa outra questão eu ficarei muito grato tche, quando ele é executado, ele gera somente um arquivo, e eu gostaria que ele gerasse um arquivo cada ciclo de 5 minutos tche.

    obrigado.

    segunda-feira, 29 de abril de 2013 15:43
  • Alguém teria alguma ideia tche.
    terça-feira, 30 de abril de 2013 20:19
  • Marcelo,

    Tente alterar o FOR EACH do Ping

    			For Each objStatus in objPing
    				If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>"0" Then
    					logNoLimit.WriteLine ("O Servidor não está conectado! - " & "( " & machine & " )")
    					sendmail= "sim"
    				else           
    					logNoLimit.WriteLine ("Servidor " & machine & " está OK.")
    				End If
    			Next

    Apenas troquei onde estava aMachines(x) por machine.

    Não testei, apenas passei o olho e me pareceu que isto estava errado.


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI quinta-feira, 2 de maio de 2013 13:50
    terça-feira, 30 de abril de 2013 23:30
    Moderador
  • Marcelo,

    Duas dicas:

    1. Quando for postar algum código utilize o botão "Inserir bloco de código" (é um botão do lado do HTML com os sinais <>), escolha o idioma VB.NET quando for VBScript (é o mais parecido, creio eu).

    2. Indente o seu código, fica mais fácil pra ler o código, saber onde começa um Loop\if onde termina, etc, fica mais profissional.

    Indentação

    http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o


    Fábio de Paula Junior

    terça-feira, 30 de abril de 2013 23:35
    Moderador
  • Ba fabião, obrigado tche, funfo...

    Ba agora fiquei um pouco triste pois em uma outra momento tche vc havia compartilhando este link http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o, e eu li e achei que tinha compreendido, e pelo visto ainda estou cometendo erros ???

    mesmo assim obrigado tche.

    quinta-feira, 2 de maio de 2013 13:52
  • Marcelo,

    Não é que esteja errado, só que pode melhorar.

    Talvez quando vc cola o texto sem utilizar o botão "<> Inserir bloco de código" e eu copio para o notepad pode estar perdendo a indentação.


    Fábio de Paula Junior

    quinta-feira, 2 de maio de 2013 21:25
    Moderador
  • Ok Fabião

    Vou me atentar esta questão tche.

    Obrigado.

    sexta-feira, 3 de maio de 2013 11:15