Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xikoo

Problema com função

Recommended Posts

O objetivo dessa página é verificar se o arquivo especificado está sendo gerado(atualizado) e se ele estiver sendo gerado se o tamanho dele é aceitável, afinal nao adianta ter um arquivo que deveria ter 60kb gerado e ele só tem 2kb.

 

Caso tenha algum problema um log é gerado e um email disparado. Um processo é schedulado para abrir essa página de hora em hora para assim ter logs atualizados e corrigir assim que possível o problema. Eu consegui fazer direto, na mão, mas acho que ficaria mais legível se eu fizesse apenas uma função já que eu apenas a repito e passar o nome do arquivo como parâmetro. Gostaria tb de passar o tamanho que deveria ter como parâmetro, é possível?

 

A idéia seria a seguinte:

 

<%
	function insereZero(num)
        numSaida = int(num)
        
        if(numSaida > 9) then
            insereZero = numSaida
        else
            insereZero = "0" & numSaida
        end if
    end function
	
	'PASSA UMA DATA PARA O FORMATO DD/MM/AAAA HH:MM:SS'
    function formataData(data)
        if(data = "" or isnull(data))then
            formataData = ""
        else
            formataData = (insereZero(day(data)) & "/" & insereZero(month(data)) & "/" & insereZero(year(data)) & " " & insereZero(hour(data)) & ":" & insereZero(minute(data)) & ":" & insereZero(second(data)))
        end if
    end function
	
	'PASSA UMA DATA PARA O FORMATO DD-MM-AAAA_HH-MM-SS'
    function formataDatalog(data)
        if(data = "" or isnull(data))then
            formataDatalog = ""
        else
            formataDatalog = (insereZero(day(data)) & "-" & insereZero(month(data)) & "-" & insereZero(year(data)) & "_" & insereZero(hour(data)) & "-" & insereZero(minute(data)) & "-" & insereZero(second(data)))
        end if
    end function
	
	function monitora(arquivo,kb)
		set FSO = server.createObject("Scripting.FileSystemObject")
		if(FSO.FileExists(arquivo) = true)then
			'O ARQUIVO EXISTE'
			set nome_arquivo = FSO.GetFile(arquivo)			
			tamanho = Split(formatNumber(nome_arquivo.size,0), ",")
			
			if tamanho(0) >= kb  then
			

				tx_erro = ""
				lg_xmlvalido = true
				
				'VERIFICANDO A EXTENSÃO DO ARQUIVO'
				'CASO SEJA "XML", VERIFICAMOS SE O ARQUIVO É VÁLIDO'
				if(FSO.GetExtensionName(arquivo) = "xml")then
					set objxml = Server.CreateObject("Microsoft.XMLDOM")
					objxml.async = false
					objxml.load(arquivo)
					
					if(objxml.parseError.errorCode <> 0)then
						tx_erro = tx_erro & "Descriçao: " & objxml.parseError.reason & vbcrlf
						tx_erro = tx_erro & "Código do erro: " & objxml.parseError.errorCode & vbcrlf
						tx_erro = tx_erro & "Posiçao no arquivo: " & objxml.parseError.filepos & vbcrlf
						tx_erro = tx_erro & "Linha: " & objxml.parseError.line & vbcrlf
						tx_erro = tx_erro & "Posiçao na linha: " & objxml.parseError.linepos & vbcrlf
						tx_erro = tx_erro & "Texto que causa o erro: " & Server.htmlEncode(objxml.parseError.srcText) & vbcrlf
						tx_erro = tx_erro & "Caminho do arquivo com problemas: " & arquivo(i) & vbcrlf
						tx_erro = tx_erro & "Tamanho do arquivo: " & tamanho(0) & " KB" & vbcrlf
						
						blnProblema = true
						lg_xmlvalido = false
					end if
				end if
				str_Saida = str_Saida & tx_erro
				'VERIFICANDO SE O ARQUIVO ESTÁ DESATUALIZADO'
				if(now > DateAdd(delp, delay, nome_arquivo.DateLastModified) or not lg_xmlvalido) then
					'ARQUIVO DESATUALIZADO'
					str_Saida = str_Saida & "Nome do Arquivo: "& FSO.getfilename(nome_arquivo) & tx_erro & vbcrlf
					str_Saida = str_Saida & "Tamanho: " & tamanho(0) & " KB" & vbcrlf
					str_Saida = str_Saida & "Data da última atualização: " & formataData(nome_arquivo.DateLastModified) & vbcrlf
					str_Saida = str_Saida & "Situação: Desatualizado" & vbcrlf & vbcrlf
					
					blnProblema = true
				end if
			else
				'TAMANHO DO ARQUIVO É PEQUENO'
				str_Saida = str_Saida &  "Arquivo: " & FSO.getfilename(nome_arquivo) & vbcrlf
				str_Saida = str_Saida &  "Tamanho: " & tamanho(0) & "KB" & vbcrlf
				str_Saida = str_Saida &  "Data: " & formataData(nome_arquivo.DateLastModified) & vbcrlf
				str_Saida = str_Saida &  "Situação: O tamanho do arquivo é pequeno" & vbcrlf & vbcrlf
				
				blnProblema = true
			end if
		else
			'O ARQUIVO NÃO EXISTE'
			str_Saida = str_Saida & "O arquivo "&right(arquivo, len(arquivo) - instrrev(arquivo, "\"))& tx_erro & " não existe" & vbcrlf
			"
			blnProblema = true
		end if	
	end function
	
	delp = "h" 'PARÂMETRO DE DELAY'
	delay = 3 'DELAY'
	nome_pasta = "c:\pasta1\"
	monitora(nome_pasta & "file1.js",3)
	monitora(nome_pasta & "file2.js",6)
	monitora(nome_pasta & "file3.xml",15)

	if blnProblema = true then
		str_Saida2 = str_Saida2 & "Pasta 1:" & vbcrlf & vbcrlf & str_Saida
	end if

	delp = "m" 'PARÂMETRO DE DELAY'
	delay = 60 'DELAY'
	nome_pasta = "c:\pasta2\"
	monitora(nome_pasta & "file4.js",4)
	monitora(nome_pasta & "file5.xml",10)
	monitora(nome_pasta & "file6.rc",32)

	if blnProblema = true then
		str_Saida2 = str_Saida2 & "Pasta 2:" & vbcrlf & vbcrlf & str_Saida
	end if

	'GERANDO O LOG E EMAIL'
	if not str_Saida2 = "" then
		set fs = Server.CreateObject("Scripting.FileSystemObject")
		set tfile = fs.CreateTextFile("c:\logs\log "&formataDatalog(now)&".txt")
		tfile.WriteLine(str_Saida2)
		set fs = nothing
		set tfile = nothing
		Set myMail = CreateObject("CDO.Message")
			myMail.Subject = "Ocorrencia"
			myMail.From = "Fulano de tal - Monitoramento<blabla@blabla.com.br>"
			myMail.To = "myemail@myemail.com.br"		
			myMail.HTMLBody = replace(str_Saida2, vbcrlf, "<br>")
		myMail.Send		
		set myMail = nothing
	end if
	
%>

Deu pra entender +/- ?

 

Adicionei os ' no fim dos comentários para facilitar a leitura mas no final n teve jeito =p haiuoheae

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi direito. e em qual função você quer fazer não sei o que? heheh

 

função monitora, me informa se o arquivo existe ou não, se está desatualizado, se não tem o tamanho mínimo aceito depois de gerado.

 

Qualquer problema com o arquivo ele gera um log e me envia um email dizendo o problema.

 

Eu armazeno o texto que vai ser colocado no log/corpo do email no str_Saida2 que armazena o nome da pasta concatenado com o str_Saida, isso se houver algum problema.

 

Como são vários arquivos eu quero fazer uma função só para que eu varra todos, já que pra cada um a informação do tamanho mínimo aceito é diferente

Compartilhar este post


Link para o post
Compartilhar em outros sites

não pode ter um FOR que vai listar todos os arquivos do diretorio e você chama dentro deste FOR a função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é assim que está feito agora, tem 1 linha de comando dessa função, só que implementada diretamente num for, pra cada pasta

 

Só que assim eu não posso alterar ali o tamanho do arquivo que deve ser comparado para determinar se ele é pequeno ou não

 

Tirando que eu acho q se for manter o pensamento de ter um função pra receber o parâmetro arquivo e tamanho acho que não dá certo, teria que ser uma sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

para você pegar o tamanho do arquivo, você pode usar o FSO, existe funcaun no lab. de scrip´t k faz isso, dá uma pesquisada...

 

<%


dim fso, file, ourFile, ourFileSize


ourFile = "arquivo.txt"


Set fso = Server.CreateObject("Scripting.FileSystemObject")

Set file = fso.GetFile(ourFile)

ourFileSize = file.Size


Set file = nothing

Set fso = nothing

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas isso já está lá

 

set FSO = server.createObject("Scripting.FileSystemObject")
if(FSO.FileExists(arquivo) = true)then
   'O ARQUIVO EXISTE'    
    set nome_arquivo = FSO.GetFile(arquivo)  
    tamanho = Split(formatNumber(nome_arquivo.size,0), ",")
    if tamanho(0) >= kb  then

A variável kb é a comparativa do tamanho do arquivo, se for maior ou igual ao tamanho que eu quero comparar, ou seja, se o arquivo gerado tem o mínimo do tamanho que eu quero então tá ok, mas depois disso ele verifica se o arquivo está atualizado ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e ele esta gerando algum erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim pq acho q nao se pode fazer uma função passando 2 parâmetros(talvez com call possa ser que sim), apenas 1.

 

Tirando que o documento não está sendo escrito, mesmo eu colocando como variável de comparação 800, ou seja, se tiver menos que 800kb ele acusaria um problema, nem um response.write str_Saida2 no final tá saindo.

 

O maior problema é esse, passar os 2 parâmetros pra função e o str_Saida está vazio no final de tudo por alguma noobice minha de não saber usar bem essas functions, afinal acho que se eu armazeno ali em str_Saida na função, eu não consigo escrever ela depois mesmo eu chamando a função.

 

Exemplo:

 

function oi()
 nome = "Jonas"
end function

response.write nome

Queria saber se entenderam a proposta e me ajudavam a achar uma solução pq acho que com function não daria muito certo! A página atual tá com mais de 1000 linhas de códigos mudando só o título da pasta do problema, o delp, delay, praticamente tudo repetido... Só que eu tenho que ver essa coisa do tamanho pois por mais q eu "varra" os arquivos da pasta cada um tem o seu tamanho 'default'.

 

Tenho que ter tudo isso catalogado pq gerou um stress semana passada, um cara da T.I disse que o arquivo tava sendo gerado com o tamanho normal, eu de casa(era fds) vi que estava sendo gerado com 0kb e não tava acusando problema mesmo estando com, então pra ter tudo certinho to fazendo um sisteminha desse pra verificar todos os arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não pode criar mais um parametro na função monitora passando só o nome do arquivo. no FOR você testa se o nome do arquivo da posição da variavel é igual ao nome do arquivo no parametro(se bem que daria pra fazer isso sem usar o For chamando o arquivo direto)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não pode criar mais um parametro na função monitora passando só o nome do arquivo. no FOR você testa se o nome do arquivo da posição da variavel é igual ao nome do arquivo no parametro(se bem que daria pra fazer isso sem usar o For chamando o arquivo direto)

 

Mas não tem sentido pra mim ver se o nome está igual...

 

Eu só quero fazer aquela linha ali de código com 2 coisas mudando, o arquivo e o respectivo valor comparativo de tamanho kb.

 

Se um arquivo tem que ter no mínimo 3kb, eu passo o caminho dele e o tamanho comparativo.

 

Achei que era possível escrever essa linha de código apenas 1x e ir chamando pra cada arquivo e seu respectivo tamanho mínimo, sem maiores complicações, pq eu acho que nao precisa de uma linha de código enorme pra isso, é a mesma coisa de fazer uma função dessa pra cada arquivo em particular, ia dar umas 30000 linhas hauheuahuaheiuahe

Compartilhar este post


Link para o post
Compartilhar em outros sites

você terá k colocar no laço a pasta, o caminho dela, você poderia, até fazer o mesmo eskma de um explorer, pra você seria mais vantajoso, pois ele mostraria o arquivo,caminho,tamanho , ele mostraria todasa as info em uma pagina apaenas

Compartilhar este post


Link para o post
Compartilhar em outros sites

você diz no caso fazendo

	Function completo(pasta)
		set FSO = server.createObject("Scripting.FileSystemObject")
		Set pasta = FSO.GetFolder(pasta) 
		Set archivos = pasta.Files 
		Set pastas = pasta.subfolders

		for each nome_arquivo in archivos

Só que é a mesma coisa, na parte comparativa com os bytes que o arquivo tem que ter no mínimo iria ser 1 número fixo para todos, sendo que não é o mesmo valor :(

 

E essa página nao exibe nada, ela é chamada por um agente que é schedulado para chamá-la de hora em hora para gerar logs/envio de email caso haja algum problema(desatualizado, nao existe, arquivo pequeno)

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaun ao inves de exibir você comparar ele...

Compartilhar este post


Link para o post
Compartilhar em outros sites

como? eu só quero fazer essa linha de código aqui para vários arquivos e tamanhos diferentes, sem precisar repetir tantas vezes esse código. Mudando apenas o a variável arquivo com o endereço e kb com a quantidade de tamanho de bytes e assim escrever numa variável tipo string str_Saida se estiver ocorrendo algum problema, por função já vi que não dá.

 

Do jeito que está hoje é repetido esse código cada vez que eu examino uma pasta, com uma lista/vetor com os arquivos e outra lista/vetor com os respectivos tamanhos mínimos, só que fica enorme e acho que não é a melhor maneira de se fazer isso.

 

set FSO = server.createObject("Scripting.FileSystemObject")
		if(FSO.FileExists(arquivo) = true)then
			'O ARQUIVO EXISTE'
			set nome_arquivo = FSO.GetFile(arquivo)			
			tamanho = Split(formatNumber(nome_arquivo.size,0), ",")
			
                        if tamanho(0) >= kb  then
				tx_erro = ""
				lg_xmlvalido = true
				
				'VERIFICANDO A EXTENSÃO DO ARQUIVO'
				'CASO SEJA "XML", VERIFICAMOS SE O ARQUIVO É VÁLIDO'
				if(FSO.GetExtensionName(arquivo) = "xml")then
					set objxml = Server.CreateObject("Microsoft.XMLDOM")
					objxml.async = false
					objxml.load(arquivo)
					
					if(objxml.parseError.errorCode <> 0)then
						tx_erro = tx_erro & "Descriçao: " & objxml.parseError.reason & vbcrlf
						tx_erro = tx_erro & "Código do erro: " & objxml.parseError.errorCode & vbcrlf
						tx_erro = tx_erro & "Posiçao no arquivo: " & objxml.parseError.filepos & vbcrlf
						tx_erro = tx_erro & "Linha: " & objxml.parseError.line & vbcrlf
						tx_erro = tx_erro & "Posiçao na linha: " & objxml.parseError.linepos & vbcrlf
						tx_erro = tx_erro & "Texto que causa o erro: " & Server.htmlEncode(objxml.parseError.srcText) & vbcrlf
						tx_erro = tx_erro & "Caminho do arquivo com problemas: " & arquivo & vbcrlf
						tx_erro = tx_erro & "Tamanho do arquivo: " & tamanho(0) & " KB" & vbcrlf
						
						blnProblema = true
						lg_xmlvalido = false
					end if
				end if
				str_Saida = str_Saida & tx_erro
				'VERIFICANDO SE O ARQUIVO ESTÁ DESATUALIZADO'
				if(now > DateAdd(delp, delay, nome_arquivo.DateLastModified) or not lg_xmlvalido) then
					'ARQUIVO DESATUALIZADO'
					str_Saida = str_Saida & "Nome do Arquivo: "& FSO.getfilename(nome_arquivo) & tx_erro & vbcrlf
					str_Saida = str_Saida & "Tamanho: " & tamanho(0) & " KB" & vbcrlf
					str_Saida = str_Saida & "Data da última atualização: " & formataData(nome_arquivo.DateLastModified) & vbcrlf
					str_Saida = str_Saida & "Situação: Desatualizado" & vbcrlf & vbcrlf
					
					blnProblema = true
				end if
			else
				'TAMANHO DO ARQUIVO É PEQUENO'
				str_Saida = str_Saida &  "Arquivo: " & FSO.getfilename(nome_arquivo) & vbcrlf
				str_Saida = str_Saida &  "Tamanho: " & tamanho(0) & "KB" & vbcrlf
				str_Saida = str_Saida &  "Data: " & formataData(nome_arquivo.DateLastModified) & vbcrlf
				str_Saida = str_Saida &  "Situação: O tamanho do arquivo é pequeno" & vbcrlf & vbcrlf
				
				blnProblema = true
			end if
		else
			'O ARQUIVO NÃO EXISTE'
			str_Saida = str_Saida & "O arquivo "&right(arquivo, len(arquivo) - instrrev(arquivo, "\"))& tx_erro & " não existe" & vbcrlf
			
			blnProblema = true
		end if	

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, a única coisa que faltava era um

dim str_Saida
no início

 

Isso pq quando me ensinaram asp me falaram q nao servia pra nada -.-

 

Agradeço a todos pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza... kker coisa posta ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.