B4A=true Group=Default Group ModulesStructureVersion=1 Type=Service Version=12.2 @EndOfDesignText@ #Region Service Attributes #StartAtBoot: true #End Region Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. Dim reqManager As DBRequestManager ' Dim DBReqServer As String = "http://keymon.lat:1782" ' Dim skmt As SQL ' Dim ph As Phone Dim Timer1 As Timer Private lock As PhoneWakeState Dim Interval As Int Dim s As C_Subs Dim nid As Int = 51045 ' Dim monitorActivo As Boolean = True Dim InternetOk As Boolean = True Dim DBReqServerOk As Boolean = True Dim DBOk As Boolean = True Dim logger As Boolean = True Dim timeout As Int Dim cs As CSBuilder Dim rp As RuntimePermissions End Sub Sub Service_Create s.Initialize Interval = s.traeIntervaloDeBD ' Interval = 10 timeout = s.traeTimeoutDeBD Timer1.Initialize("Timer1", Interval * 1000) If s.traeActivo Then Timer1.Enabled = True Else Timer1.Enabled = False #if not(DEBUG) logger = False #end if lock.PartialLock ' Log(345) ' probamosConexion End Sub Sub Service_Start (StartingIntent As Intent) If Starter.logger Then Log("Monitor Start") Service.StopAutomaticForeground 'Call this when the background task completes (if there is one) Service.StartForeground(nid, s.CreateNotification("...")) StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True) Timer1_Tick If logger Then LogColor("*************** Monitor Iniciado 👍🏽 **********", Colors.red) End Sub Sub Service_Destroy End Sub Sub Timer1_Tick ' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000)) ' Log("Monitor Timer_Tick") If s.traeActivo Then DateTime.DateFormat = "dd/MM HH:mm:ss" If B4XPages.IsInitialized Then B4XPages.MainPage.l_ultimoPing.Text = $"Último ping: ${DateTime.Date(DateTime.now)}"$ probamosConexion End If End Sub Sub probamosConexion If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############") ' Try If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.Clear B4XPages.MainPage.lv_dbs.Clear B4XPages.MainPage.cb_conexion.Checked = False B4XPages.MainPage.cb_internet.Checked = False ' B4XPages.MainPage.cb_dbreqserver.Checked = False ' B4XPages.MainPage.cb_db.Checked = False End If If IsConnectedToInternet Then s.ping InternetOk = True If B4XPages.IsInitialized Then B4XPages.MainPage.cb_conexion.Checked = True B4XPages.MainPage.cb_internet.Checked = Starter.ping Dim cd1 As ColorDrawable cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) B4XPages.MainPage.b_ping.Background = cd1 B4XPages.MainPage.b_ping.Text = "Internet Ok" End If Dim cmd As DBCommand s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid) If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!" Dim cmd As DBCommand For i = 0 To Starter.servidores.Size - 1 Private esteServidor As Map = Starter.servidores.Get(i).As(Map) Log(esteServidor.Get("servidor")) reqManager.Initialize(Me, esteServidor.Get("servidor")) cmd.Initialize cmd.Name = "select_conexion" reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & i, esteServidor.get("timeout")) Next Private sa As Cursor = Starter.skmt.ExecQuery("select * from cat_servidores") If sa.RowCount > 0 Then For i = 0 To sa.RowCount - 1 sa.Position = i reqManager.Initialize(Me, sa.GetString("url")) cmd.Initialize cmd.Name = "select_conexion" reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & sa.GetString("id"), sa.GetString("timeout")) Next End If 'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion" Timer1.Enabled = False Timer1.Interval = Interval * 1000 Timer1.Enabled = True Else If logger Then Log("Sin conexión a internet!!!") s.notiLowReturn("SIN INTERNET ❌", "NO hay conexion a internet.", nid) cs.Initialize If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a internet!!").PopAll End If ' Catch ' Log(LastException) ' End Try End Sub Sub reinicializaReqManager 'ignore reqManager.Initialize(Me, Starter.DBReqServer) If logger Then Log("Inicializamos con: " & Starter.DBReqServer) End Sub Sub JobDone(Job As HttpJob) ' Log("JOBDONE -- " & Job.Success) ' Log(Job) If Job.Success = False Then If Job.JobName = "DBRequest" Then DBReqServerOk = False Dim cd1 As ColorDrawable cd1.Initialize(Colors.Red, 10dip) Try If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1 If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO" Log("Guardamos error en BD") If Job.Tag.As(String).StartsWith("select_conexion_") Then Private idServidorX() As String = Regex.Split("_", Job.Tag) ' Log("|" & idServidorX(2) & "|") Private idServidor As String = idServidorX(2) Private m As Map = s.traeServidorDesdeBD(idServidor) s.notiHigh("ERROR ❌", $"El servidor ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) cs.Initialize If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1) ' B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$) End If Catch Log(LastException) End Try Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('El servidor ${Starter.DBReqServer} NO responde!!', '${s.fechaKMT(DateTime.Now)}')"$) If Job.ErrorMessage.Contains("failed to connect") Or Job.ErrorMessage.Contains("Failed to connect") Then ' ToastMessageShow("¡Hubo un error contactando al servidor, por favor revise su conexión!", True) End If Else If Job.JobName = "DBRequest" Then DBReqServerOk = True If logger Then LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 If Job.JobName = "DBRequest" Then Dim resultado As DBResult = reqManager.HandleJob(Job) If resultado.Tag.As(String).StartsWith("select_conexion_") Then If Starter.logger Then Log("select_conexion") Private idServidorX() As String = Regex.Split("_", resultado.Tag) Private idServidor As String = idServidorX(2) Private m As Map = s.traeServidorDesdeBD(idServidor) Try If B4XPages.IsInitialized Then B4XPages.MainPage.lbl.TextColor = Colors.black If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) For Each records() As Object In resultado.Rows Private valor As String = records(resultado.Columns.Get("VALOR")) If valor = "OK" Then DBOk = True s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid) If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "El servidor esta respondiendo!!" B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) Dim cd1 As ColorDrawable cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) B4XPages.MainPage.b_ping.Background = cd1 B4XPages.MainPage.b_ping.Text = "Servidor Ok" End If Else s.notiHigh("ERROR ❌", $"La base de datos ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "La base de datos NO esta respondiendo!!" Log("Guardamos error en BD") ' B4XPages.MainPage.lbl.TextColor = Colors.red ' Sleep(200) cs.Initialize B4XPages.MainPage.lv_dbs.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) B4XPages.MainPage.lv_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1) ' B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$) Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('La BD NO esta respondiendo!!', '${s.fechaKMT(DateTime.Now)}')"$) Dim cd1 As ColorDrawable cd1.Initialize(Colors.Red, 10dip) B4XPages.MainPage.b_ping.Background = cd1 B4XPages.MainPage.b_ping.Text = "Servidor KO" End If End If Next Catch Log(LastException) End Try End If ' s.logJobDoneResultados(resultado) If resultado.Rows.Size = 0 Then DBOk = False ' Log(resultado.Rows.Size) End If Try If B4XPages.IsInitialized Then B4XPages.MainPage.cb_conexion.Checked = InternetOk B4XPages.MainPage.cb_internet.Checked = Starter.ping If DBReqServerOk Then B4XPages.MainPage.cb_internet.Checked = True ' B4XPages.MainPage.cb_dbreqserver.Checked = DBReqServerOk ' B4XPages.MainPage.cb_db.Checked = DBOk End If Catch Log(LastException) End Try Job.Release End If End Sub Sub IsConnectedToInternet As Boolean 'ignore Dim r As Reflector r.Target = r.GetContext r.Target = r.RunMethod2("getSystemService", "connectivity", "java.lang.String") r.Target = r.RunMethod("getActiveNetworkInfo") If r.Target <> Null Then If logger Then LogColor("isConnectedOrConnecting", Colors.green) Return r.RunMethod("isConnectedOrConnecting") End If If logger Then LogColor("Not connected", Colors.red) Return False End Sub