none
Script .vbs - filtro em xml RRS feed

  • Pergunta

  • Gostaria de saber se ha como, em um .vbs "ler" um conteúdo de um arquivo, no caso um xml, que esta rodano no IIS.

    este arquivo tem uma "tag" com um numero de conexoes, preciso medir esta tag, por exemplo, se ela estiver abaixo de 200 esta critica, 0, outro estado e assim por diante....


    Estou pesquisand o isso ha algum tempo ja e sem resultados.... se alguem conhecer algo fico muito grato.

    Edson Silva
    domingo, 1 de março de 2009 13:54

Todas as Respostas

  • Olá,

    Edson, deixa eu tentar entender, supondo que seu arquivo tem a estrutura (este exemplo é da internet):

    <?xml version="1.0"?>
    <school>
      <grades>
        <grade>
          <level>K</level>
          <student_count>
            <boys>49</boys>
            <girls>41</girls>
          </student_count>
        </grade>
        <grade>
          <level>1</level>
          <student_count>
            <boys>29</boys>
            <girls>32</girls>
          </student_count>
        </grade>
        <grade>
          <level>2</level>
          <student_count>
            <boys>26</boys>
            <girls>31</girls>
          </student_count>
        </grade>
      </grades>
      <principal>
        <name>Dr. Hamilton</name>
        <experience timein="years">
          <time>14</time>
        </experience>
      </principal>
      <classrooms />
    </school>

    Você quer procurar uma tag (escolhi a tag <name> pois é única no arquivo.

    Segue abaixo o script:

    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo xml
    Set objTextFile = objFSO.OpenTextFile("C:\exemplo.xml",ForReading)

    Do While objTextFile.AtEndOfStream <> True
        'aqui é a linha que está lendo
        strLinha = objTextFile.ReadLine
       
        'aqui é onde faz a pesquisa da tag
        tag=InStr(strLinha,"<name>")
       
        'aqui faz um if se encontrou a tag
        if tag > 0 Then 

             'aqui esta imprimindo a linha na tela, é aqui que você coloca a logica do seu programa
             wscript.echo strLinha
        End if
    Loop


    Faça um teste se é isso que você precisa... Se você precisar de ajuda na construção da lógica para tratar a linha Poste novamente.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    segunda-feira, 2 de março de 2009 11:39
  • Cara, muito obrigado! Parece que minha busca esta chegando ao fim rsrs.

    Só falta a logica, eu tentei... mas como não é nem de longe meu forte, preciso de ajuda. De uma olhada por favor.

    Preciso de trez ou quatro estados de alarme... a proposito estou a implementar isto no software de monitoramento nagios.


    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo xml
    Set objTextFile = objFSO.OpenTextFile("C:\exemplo.xml",ForReading)

    Do While objTextFile.AtEndOfStream <> True
        'aqui é a linha que está lendo
        strLinha = objTextFile.ReadLine
       
        'aqui é onde faz a pesquisa da tag
        tag=InStr(strLinha,"<name>")
       
        'aqui faz um if se encontrou a tag

    wscript.echo strLinha
       
    if tag < 200 Then

                   "Warning"

     If tag >500 then
     
                   " OK"
    else

                   "critical"
         

    End if
    Loop


    Edson Silva
    terça-feira, 3 de março de 2009 14:18
  • Ola,

    Segue o script corrigido, com algumas "adaptacoes":

    Nesta tag voce so vai ter numeros certo?? Nunca caracteres???



    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo xml
    Set objTextFile = objFSO.OpenTextFile("C:\arquivo.xml",ForReading)

    'nome da tag que esta buscando
    strTagOpen = "<name>"
    strTagClose = "</name>"

    Do While objTextFile.AtEndOfStream <> True
        'aqui é a linha que está lendo
        strLinha = objTextFile.ReadLine
      
        'aqui é onde faz a pesquisa da tag
        tag=InStr(TRIM(strLinha),strTagOpen)
        tagRev = InStr(TRIM(strLinha),strTagClose)
      
        'aqui faz um if se encontrou a tag
        if tag > 0 Then
             strValor =  Mid(TRIM(strLinha),Tag+Len(strTagOpen),tagRev-Len(strTagClose))
        'wscript.echo cInt(strvalor)
             if cInt(strvalor) < 200 Then
                   wscript.echo "Warning"
         ELseif  cInt(strvalor) > 500 Then
                   wscript.echo "OK"
             Else
               wscript.echo "critical"
         End if

         
        End if
    Loop


    Faça os testes e nos retorne.

    Ate mais,

    Jesiel

    Obs.: Se foi util, classifique as respostas
    terça-feira, 3 de março de 2009 17:14
  •  Funcionou perfeitamente, mas pelo que eu vi vai ficar complicado colacar esta informacao em um .xml...

    pq é assim, isto chega pra mim pela porta 7007 do IIS... é dinamico, agora q vi,

    Se fosse pra fazer o mesmo, so que em uma URL:

    http://192.168.0.207:7007

    Teria como?
    Obrigado pela ajuda ate agora!!
    Edson Silva
    terça-feira, 3 de março de 2009 19:57
  • Olá,

    Copie e cole as informações que você recebe.

    Até mais,

    Jesiel
    terça-feira, 3 de março de 2009 20:27
  • São essas, são atualizadas sempre que um "modulo" (os MTC) se encontram online. a tag CONNECTIONS mostra a quantidade. É a que eu tento monitorar.

    xml version="1.0" encoding="ISO-8859-1"
    ?>

    - <STATUS>

      <VERSION>1.2.13.15</VERSION>

      <LOCALTIME>2009-03-04 00:55:29</LOCALTIME>

      <CONNECTIONS>278</CONNECTIONS>

      <PORT>9001</PORT>

      <MAXCONNECTIONS>5000</MAXCONNECTIONS>

      <DebugMTC>0</DebugMTC>

      <TCPPacketsDebug>0</TCPPacketsDebug>

    - <DATABASE>

      <HOST>127.0.0.1</HOST>

      <PORT>3307</PORT>

      <DATETIME>2009-03-04 00:55:29</DATETIME>

      <CONNECTED>1</CONNECTED>

      </DATABASE>

    - <CONNECTED_MTCS>

      <MTC>17079</MTC>

      <MTC>18424</MTC>

      <MTC>18550</MTC>

      <MTC>18698</MTC>

      <MTC>21636</MTC>

      <MTC>22102</MTC>

      <MTC>22103</MTC>

      <MTC>25820</MTC>

      <MTC>26174</MTC>

      <MTC>26810</MTC>

      <MTC>26861</MTC>

      <MTC>28479</MTC>

      <MTC>28894</MTC>

      <MTC>29025</MTC>

      <MTC>29029</MTC>

      <MTC>29039</MTC>

      <MTC>29040</MTC>

      <MTC>29047</MTC>

      <MTC>30608</MTC>

      <MTC>30691</MTC>

      <MTC>30701</MTC>

      <MTC>31036</MTC>

      <MTC>32796</MTC>

      <MTC>33624</MTC>

      <MTC>33626</MTC>

      <MTC>33634</MTC>

      <MTC>33642</MTC>

      <MTC>33669</MTC>

      <MTC>33670</MTC>

      <MTC>33678</MTC>

      <MTC>33687</MTC>

      <MTC>33706</MTC>

      <MTC>34346</MTC>

      <MTC>34350</MTC>

      <MTC>34418</MTC>

      <MTC>34490</MTC>

      <MTC>34818</MTC>

      <MTC>35154</MTC>

      <MTC>35168</MTC>

      <MTC>35170</MTC>

      <MTC>35171</MTC>

      <MTC>35176</MTC>

      <MTC>35183</MTC>

      <MTC>35200</MTC>

      <MTC>35202</MTC>

      <MTC>35243</MTC>

      <MTC>35252</MTC>

      <MTC>35253</MTC>

      <MTC>35262</MTC>

      <MTC>35267</MTC>

      <MTC>35271</MTC>

      <MTC>35278</MTC>

      <MTC>35323</MTC>

      <MTC>35334</MTC>

      <MTC>38701</MTC>

      <MTC>39501</MTC>

      <MTC>39551</MTC>

      <MTC>39591</MTC>

      <MTC>42027</MTC>

      <MTC>42149</MTC>

      <MTC>43491</MTC>

      <MTC>43514</MTC>

      <MTC>43912</MTC>

      <MTC>44505</MTC>

      <MTC>45412</MTC>

      <MTC>45460</MTC>

      <MTC>45492</MTC>



    Edson Silva
    quarta-feira, 4 de março de 2009 04:08
  • Olá,

    Eu não tenho como testar, mas dá uma olhada no script abaixo, se não funcionar, adapte ele.


    On Error Resume Next

    Const ForReading = 1
    Const conURLSrc = "http://192.168.0.207:7007"
    Set http = createobject("microsoft.xmlhttp")
    Set fso = CreateObject("Scripting.FileSystemObject")

    'METODO GET PARA BUSCAR A PAGINA
    http.open "GET",conURLSrc,False
    http.send
    htmlIP = http.responsetext
    Set regEx = new RegExp
    regEx.Global = True

    'imprime o html na tela, depois pode comentar a linha abaixo
    wscript.echo htmlIP

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo xml
    Set objTextFile = objFSO.OpenTextFile(htmlIP,ForReading)

    'nome da tag que esta buscando
    strTagOpen = "<name>"
    strTagClose = "</name>"

    Do While objTextFile.AtEndOfStream <> True
        'aqui é a linha que está lendo
        strLinha = objTextFile.ReadLine
      
        'aqui é onde faz a pesquisa da tag
        tag=InStr(TRIM(strLinha),strTagOpen)
        tagRev = InStr(TRIM(strLinha),strTagClose)
      
        'aqui faz um if se encontrou a tag
        if tag > 0 Then
             strValor =  Mid(TRIM(strLinha),Tag+Len(strTagOpen),tagRev-Len(strTagClose))
        'wscript.echo cInt(strvalor)
             if cInt(strvalor) < 200 Then
                   wscript.echo "Warning"
         ELseif  cInt(strvalor) > 500 Then
                   wscript.echo "OK"
             Else
               wscript.echo "critical"
         End if

         
        End if
    Loop


    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 4 de março de 2009 13:24
  • Olá,


    não é mais fácil usar o DOM do MSXML pra fazer isso?

    Vejam exemplos: http://www.xml.com/pub/a/2002/06/05/msxml4.html



    []s,


    Vinicius Canto
    MVP Admin Frameworks
    http://viniciuscanto.blogspot.com

    Vinicius Canto MVP Admin Frameworks Blog: http://viniciuscanto.blogspot.com
    domingo, 8 de março de 2009 15:12
    Moderador