Buenas,
Estoy usando un script para coger datos de perfmon en servidores remotos. luego los envia por mail quedando tal que asi:
El problema como veis, es que los server ZZZZ solo son 4 y pone 6 columnas, dejando descuadrados los datos.
Los RRR son 6 y los pone bien.
Hay variables declarando el numero de servers. El problema viene a la hora de ordenar los datos, en algun sitio he de poder poner que los ZZZZZ sean solo 4 columnas. He hecho varias pruebas pero no doy con ello y tampoco soy experto en esto.
Tampoco sé porque presenta solo 4 filas de datos ( Peticiones encoladas, peticiones segundo, CPU y Memoria) cuando en el script se piden datos de 6 contadores.
¿ Alguien me echa un mano ?
Script
'-----------------------------------------------------------------------
' Procesa los datos que se han recogido en los ficheros desde
' los servidores a monitorización
'-----------------------------------------------------------------------
Private Sub ProcesarDatos()
Dim J, I, Server, Fichero, FileName
Dim Tabla, ColumnaZZZZZ(100,6), ColumnaRRR(100,6)
On Error Resume Next
If AbrirFicheroCorreo() Then
' Inicialización de las columnas de cabecera para ambos tipos de servidores
ColumnaZZZZZ(0,0)= ""
ColumnaZZZZZ(0,1)= "Peticiones encoladas " & Chr(9) & Chr(9)
ColumnaZZZZZ(0,2)= "Peticiones / segundo " & Chr(9) & Chr(9)
ColumnaZZZZZ(0,3)= "Tiempo de ejecución " & Chr(9) & Chr(9)
ColumnaZZZZZ(0,4)= "Peticiones ejecutadas" & Chr(9) & Chr(9)
ColumnaZZZZZ(0,5)= "Uso CPU (%) " & Chr(9) & Chr(9)
ColumnaZZZZZ(0,6)= "Memoria libre (MB) " & Chr(9) & Chr(9)
ColumnaRRR(0,0)= ""
ColumnaRRR(0,1)= "Peticiones encoladas " & Chr(9) & Chr(9)
ColumnaRRR(0,2)= "Peticiones / segundo " & Chr(9) & Chr(9)
ColumnaRRR(0,3)= "Tiempo de ejecución " & Chr(9) & Chr(9)
ColumnaRRR(0,4)= "Peticiones ejecutadas" & Chr(9) & Chr(9)
ColumnaRRR(0,5)= "Uso CPU (%) " & Chr(9) & Chr(9)
ColumnaRRR(0,6)= "Memoria libre (MB) " & Chr(9) & Chr(9)
' Se leen los ficheros de datos
' Procesado de los ZZZZZ
For I=1 to NumeroServersZZZZZ
Server = "ZZZZZ" & Right("00" & Trim(CStr(I)),2)
Fichero = Server & ".PerfMon.Resultados.csv"
Tabla = LeerFichero(Fichero)
For J=1 to 6
ColumnaZZZZZ(I,J) = Tabla(J)
Next
Next
' Procesado de los RRR
For I=1 to NumeroServersRRR
Server = "RRR" & Right("00" & Trim(CStr(I)),2)
Fichero = Server & ".PerfMon.Resultados.csv"
Tabla = LeerFichero(Fichero)
For J=1 to 6
ColumnaRRR(I,J) = Tabla(J)
Next
Next
ImprimirLineas ColumnaZZZZZ, NumeroServersZZZZZ, "ZZZZZ"
ImprimirLineas ColumnaRRR, NumeroServersRRR, "RRR"
FicheroCorreo.WriteLine(String(90,"="))
FicheroCorreo.WriteLine("")
FicheroCorreo.WriteLine("")
FicheroCorreo.Close
Else
End If
End Sub
'-----------------------------------------------------------------------
' Se imprimen las lineas de los servidoes monitorizados en
' el fichero para enviar con el correo de monitorización.
'-----------------------------------------------------------------------
Private sub ImprimirLineas(Tabla, Servers, Tipo)
Dim M, N, I, J
Dim Linea(10)
Dim Columna(100,10)
M = 1
N = 6
Do While TRUE
For I = M to N
Columna(I,0) = Tipo & Right("00" & Trim(CStr(I)),2) & Chr(9)& Chr(9)
Columna(I,1) = Right(String(10," ") & FormatNumber(Tabla(I,1)/1,0),7) & Chr(9) & Chr(9)
Columna(I,2) = Right(String(10," ") & FormatNumber(Tabla(I,2)/1,0),7) & Chr(9) & Chr(9)
Columna(I,3) = Right(String(10," ") & FormatNumber(Tabla(I,3)/1,0),7) & Chr(9) & Chr(9)
Columna(I,4) = Right(String(10," ") & FormatNumber(Tabla(I,4)/1,0),7) & Chr(9) & Chr(9)
Columna(I,5) = Right(String(10," ") & FormatNumber(Tabla(I,5)/1,0),7) & Chr(9) & Chr(9)
Columna(I,6) = Right(String(10," ") & FormatNumber(Tabla(I,6)/1,0),7) & Chr(9) & Chr(9)
Next
For I = 0 to 6
Linea(I) = ""
For J = M to N
Linea(I) = Linea(I) & Columna(J,I)
Next
Next
FicheroCorreo.WriteLine(Chr(9) & Chr(9) & Chr(9) & Chr(9) & Tabla(0,0) & Linea(0))
FicheroCorreo.WriteLine(Tabla(0,1) & Linea(1))
FicheroCorreo.WriteLine(Tabla(0,2) & Linea(2))
' FicheroCorreo.WriteLine(Tabla(0,3) & Linea(3))
' FicheroCorreo.WriteLine(Tabla(0,4) & Linea(4))
FicheroCorreo.WriteLine(Tabla(0,5) & Linea(5))
FicheroCorreo.WriteLine(Tabla(0,6) & Linea(6))
FicheroCorreo.WriteLine("")
FicheroCorreo.WriteLine("")
If N >= Servers then
Exit Sub
End If
M = N + 1
N = N + 6
If N > Servers Then N = Servers
Loop
End Sub
'-----------------------------------------------------------------------
' Se abre el fichero de salida para crear el cuerpo del
' correo de monitorización
'-----------------------------------------------------------------------
Private Function AbrirFicheroCorreo()
Dim FileName
On Error Resume Next
FileName = "PerfMon.Temporal01.txt"
Set FicheroCorreo = fso.OpenTextFile(FileName,ForWriting, True)
If Err = 0 Then
FicheroCorreo.WriteLine("Fecha: " & Left(Fecha,Len(Fecha)-3))
AbrirFicheroCorreo = TRUE
Else
AbrirFicheroCorreo = FALSE
End If
On error Goto 0
End Function
Private Function LeerFichero(FileName)
Dim I, File, LineaEntrada, arrEntrada, Valores(10)
On Error Resume Next
Set File = fso.OpenTextFile(FileName,ForReading, False)
If Err = 0 then
File.Skipline
File.Skipline
Do While File.AtEndOfStream <> True
LineaEntrada = File.Readline
LineaEntrada = Replace(LineaEntrada, ".", ",")
LineaEntrada = Replace(LineaEntrada, Chr(34), " ")
arrEntrada = Split(LineaEntrada, Chr(9))
' Peticiones encoladas
Valores(PetQ) = Valores(PetQ) + CSng(arrEntrada(1))
' Peticiones por segundo
Valores(PetS) = Valores(PetS) + CSng(arrEntrada(2))
' Tiempo de ejecución
Valores(TExec) = Valores(TExec) + CSng(arrEntrada(3))
' Peticiones en ejecución
Valores(PExec) = Valores(PExec) + CSng(arrEntrada(4))
' CPU
Valores(CPU) = Valores(CPU) + CSng(arrEntrada(5))
' Memoria libre
Valores(Mem) = Valores(Mem) + CSng(arrEntrada(6)/1048576)
Loop
File.Close
fso.DeleteFile(FileName)
Set File = Nothing
For I = 1 to 6
Valores(I) = Valores(I)/10
Next
Else
For I = 1 to 6
Valores(I) = 0
Next
End If
LeerFichero = Valores
On Error Goto 0
End Function
Saludos