ValidServidor.cs
1 using System;
2 using sage.ew.db;
5 using sage.ew.global;
6 using System.Collections.Generic;
7 using System.Data;
8 using sage.ew.functions;
9 using System.IO;
10 using System.Text;
11 using System.Linq;
12 
13 namespace sage.ew.ewbase.Diagnostico
14 {
18  public class ValidServidor
20  {
21  private readonly string _SQLVersion = "Microsoft SQL Server 2019";
22 
27  public override System.Collections.Generic.IEnumerable<IResultadoPruebaDiagnostica> Ejecutar()
28  {
30  List<IResultadoPruebaDiagnostica> loPruebas = new List<IResultadoPruebaDiagnostica>();
31 
32  if (CheckServidor())
33  {
34  //Validar si tiene la última versión del SQLSERVER.
35  loPruebas.Add(CheckSQLServerVersion());
36  //Comprobar memoria asignada al SQLSERVER
37  loPruebas.Add(CheckSQLServerMemory(loPruebas.FirstOrDefault()));
38  //Comprobar el estado de Live Update para validar si está en modo automático
39  loPruebas.Add(CheckLiveUpdateStatus());
40  }
41  else
42  {
43  loRes = GetResultadoPreconfigurado();
45  loRes.Descripcion = "Esta prueba diagnóstica solamente se puede ejecutar desde el servidor.";
46  loPruebas.Add(loRes);
47  }
48  return loPruebas;
49  }
50 
55  private bool CheckServidor()
56  {
57  string lcFile, lcContents;
58 
59  try
60  {
61  lcFile = Path.Combine(Convert.ToString(EW_GLOBAL._GetVariable("wc_iniservidor")), "CFGCLISRV.XML");
62 
63  if (File.Exists(lcFile))
64  {
65  lcContents = File.ReadAllText(Path.Combine(Convert.ToString(EW_GLOBAL._GetVariable("wc_iniservidor")), "CFGCLISRV.XML"), ASCIIEncoding.Default);
66 
67  return lcContents.LastIndexOf(Environment.MachineName) > 0;
68  }
69  }
70  catch
71  {
72 
73  }
74 
75  return false;
76 
77  }
78 
79  private IResultadoPruebaDiagnostica CheckSQLServerVersion()
80  {
81  string lcVersion;
82  DataTable loDt = new DataTable();
84 
85  loRes = GetResultadoPreconfigurado();
86  loRes.Nombre = "Validar la versión de Microsoft SQL Server.";
87 
88  if (DB.SQLExec("SELECT @@version as version", ref loDt) && loDt.Rows.Count > 0)
89  {
90  lcVersion = Convert.ToString(loDt.Rows[0]["version"]);
91 
92  if (lcVersion.StartsWith(_SQLVersion))
93  {
95  loRes.Descripcion = $"La versión de Microsoft SQL Server es correcta.";
96  }
97  else
98  {
100  loRes.Descripcion = $"La versión de Microsoft SQL Server del servidor no es {_SQLVersion}.";
101  }
102  }
103  else
104  {
105  loRes.Resultado = TipoResultadoPruebaDiagnostica.Indeterminado;
106  loRes.Descripcion = $"No se ha podido determinar la versión de Microsoft SQL Server.";
107  }
108 
109  FUNCTIONS._DisposeDatatable(loDt);
110 
111  return loRes;
112  }
113 
114  private IResultadoPruebaDiagnostica CheckLiveUpdateStatus()
115  {
116  LiveUpdate loLiveUpate;
118 
119  loRes = GetResultadoPreconfigurado();
120  loRes.Nombre = "Comprobar si está en modo automático Live Update.";
121 
122  loLiveUpate = new LiveUpdate();
123 
124  if(loLiveUpate._LoadEntidad())
125  {
126  if (loLiveUpate._oEntidad._ModeCheck == "Automatic" && loLiveUpate._oEntidad._ModeDownload == "Automatic" && loLiveUpate._oEntidad._ModeInstall == "Automatic")
127  {
128  loRes.Resultado = TipoResultadoPruebaDiagnostica.Correcto;
129  loRes.Descripcion = "Live Update está configurado en modo automático.";
130  }
131  else
132  {
134  loRes.Descripcion = "Live Update no está configurado en modo automático.";
135  }
136  }
137  else
138  {
139  loRes.Resultado = TipoResultadoPruebaDiagnostica.Indeterminado;
140  loRes.Descripcion = "No se ha podido comprobar los datos de Live Update.";
141  }
142 
143  return loRes;
144  }
145 
146  private IResultadoPruebaDiagnostica CheckSQLServerMemory(IResultadoPruebaDiagnostica toRes)
147  {
148  int lnMemoryComputerGB;
149  decimal lnMemorySQL = 0, lnMemorySQLGB, lnPercent;
150  ulong lnMemoryComputer = 0;
152  DataTable loDt = new DataTable();
153 
154  loRes = GetResultadoPreconfigurado();
155  loRes.Nombre = "Comprobar memoria asignada al Microsoft SQL Server.";
156 
157  try
158  {
159  if (toRes is IResultadoPruebaDiagnostica && toRes.Resultado == TipoResultadoPruebaDiagnostica.Correcto)
160  {
161  if (DB.SQLExec("SELECT value_in_use as valor FROM sys.configurations WHERE name like '%max server memory%'", ref loDt) && loDt.Rows.Count > 0)
162  {
163  lnMemorySQL = Convert.ToDecimal(loDt.Rows[0]["valor"]);
164  lnMemoryComputer = new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
165 
166  if (lnMemoryComputer == 0 || lnMemorySQL == 0) throw new Exception();
167 
168  lnMemorySQLGB = Math.Round(lnMemorySQL / 1024, 2);
169 
170  lnMemoryComputerGB = Convert.ToInt32(Math.Ceiling(lnMemoryComputer / (decimal)1024 / (decimal)1024 / (decimal)1024));
171 
172  lnPercent = (lnMemorySQLGB / lnMemoryComputerGB) * 100;
173 
174  loRes.Descripcion = $"La memoria destinada al Microsoft SQL Server ({lnMemorySQLGB}) es un {Convert.ToInt32(lnPercent)}% del total ({lnMemoryComputerGB}). ";
175 
176  if (lnPercent > 25)
177  {
179  loRes.Descripcion += "Se recomienda que no supere el 25% del total.";
180  }
181  else
182  {
183  loRes.Resultado = TipoResultadoPruebaDiagnostica.Correcto;
184  loRes.Descripcion += "La memoria asignada al Microsoft SQL Server no supera el 25% del total.";
185  }
186  }
187  }
188  else
189  {
190  loRes.Resultado = TipoResultadoPruebaDiagnostica.Indeterminado;
191  loRes.Descripcion = $"No se ha podido comprobar la memoria del Microsoft SQL Server.{Environment.NewLine}{toRes.Descripcion}";
192  }
193  }
194  catch
195  {
196  loRes.Resultado = TipoResultadoPruebaDiagnostica.Indeterminado;
197 
198  if(lnMemoryComputer == 0 && lnMemorySQL == 0)
199  {
200  loRes.Descripcion = $"No se ha podido comprobar la memoria .";
201  }
202  else if (lnMemoryComputer == 0 )
203  {
204  loRes.Descripcion = $"No se ha podido comprobar la memoria del ordenador.";
205  }
206  else
207  {
208  loRes.Descripcion = $"No se ha podido comprobar la memoria del Microsoft SQL Server.";
209  }
210  }
211 
212 
213  return loRes;
214  }
215 
216 
220  public ValidServidor()
221  : base(TipoCategoriaPruebaDiagnostica.Servidor, "Validaciones del servidor de Sage 50", "Comprueba la versión de SQLSERVER, memoria asignada y la configuración de LiveUpdate.")
222  {
223 
224  }
225  }
226 }
override System.Collections.Generic.IEnumerable< IResultadoPruebaDiagnostica > Ejecutar()
Ejecutar pruebas
TipoCategoriaPruebaDiagnostica
Enumerado de categorias de pruebas diagnósticas
TipoResultadoPruebaDiagnostica
Tipos de resultado que pueden tener las pruebas diagnósticas
Clase interna para el diagnóstico automático de la instalación Esta clase actua como contenedor de pr...
Definition: Diagnostico.cs:285
Diagnosticoa nivel de servidor
Interfície para el resultado de pruebas de diagnóstico