Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
>
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
não pode ter um FOR que vai listar todos os arquivos do diretorio e você chama dentro deste FOR a função?
é 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
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
%>
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.
e ele esta gerando algum erro...
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.
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)
>
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
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
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)
entaun ao inves de exibir você comparar ele...
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
É, 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!
beleza... kker coisa posta ae
não entendi direito. e em qual função você quer fazer não sei o que? heheh