diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index e32c55b..4c8fdfb 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -35,8 +35,8 @@ Sub Class_Globals Private p_estatus As Panel Dim cb_conexion As CheckBox Dim cb_internet As CheckBox - Dim cb_dbreqserver As CheckBox - Dim cb_db As CheckBox +' Dim cb_dbreqserver As CheckBox +' Dim cb_db As CheckBox ' Private b_intervalo As Button ' Private b_server As Button Private et_server As EditText @@ -60,6 +60,19 @@ Sub Class_Globals Private l_server As Label Private l_info As Label Private b_guardaCambios As Button + Dim servidores As List + Dim lv_servidores As ListView + Dim lbl, lbl2, lbl3 As B4XView + Private p_dbreqServidores As Panel + Private l_db As Label + Private l_dbreqServer As Label + Dim lv_dbs As ListView + Private p_dbs As Panel + Private p_servidoresActivos As Panel + Private lv_servidoresActivos As ListView + Dim jsn As JSONParser + Dim jsnGnr As JSONGenerator + DIM rp AS RuntimePermissions End Sub Public Sub Initialize @@ -74,9 +87,9 @@ Private Sub B4XPage_Created (Root1 As B4XView) B4XPages.AddPage("Login", login) s.Initialize l_version.Text = Application.VersionName - lv_server.AddSingleLine("http://keymon.lat:1782") - lv_server.AddSingleLine("http://10.0.0.205:1782") - lv_server.AddSingleLine("http://40.123.36.38:1782") +' lv_server.AddSingleLine("http://keymon.lat:1782") +' lv_server.AddSingleLine("http://10.0.0.205:1782") +' lv_server.AddSingleLine("http://40.123.36.38:1782") clv_server.Add(CreateListItem("http://keymon.lat:1782", clv_server.AsView.Width, 35dip), "http://keymon.lat:1782") clv_server.Add(CreateListItem("http://10.0.0.205:1782", clv_server.AsView.Width, 35dip), "http://10.0.0.205:1782") @@ -86,14 +99,53 @@ Private Sub B4XPage_Created (Root1 As B4XView) logger = False #end if s.centraEtiqueta(l_info, Root.Width) + servidores.Initialize +' Private srv1 As Map = CreateMap("nombre": "1781", "servidor": "http://keymon.lat:1781", "intervalo": 30, "timeout": 11000) +' Private srv2 As Map = CreateMap("nombre": "1782", "servidor": "http://keymon.lat:1782", "intervalo": 30, "timeout": 11000) +' Private srv3 As Map = CreateMap("nombre": "1783", "servidor": "http://keymon.lat:1783", "intervalo": 30, "timeout": 11000) +' servidores.AddAll(Array As Object (srv1, srv2, srv3)) +' Private srvrsMap As Map +' srvrsMap.Initialize +' srvrsMap.Put("1781", srv1) +' srvrsMap.Put("1782", srv2) +' srvrsMap.Put("1783", srv3) +' Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'servidores'"$) +' jsnGnr.Initialize2(servidores) +' Starter.skmt.ExecNonQuery($"insert into cat_variables (nombre, valor) values ("servidores", '${jsnGnr.ToString}')"$) + + +' Starter.skmt.ExecNonQuery("insert into cat_servidores (nombre, url, intervalo, timeout) values ('1781', 'http://keymon.lat:1781', '30', '11000')") +' Starter.skmt.ExecNonQuery("insert into cat_servidores (nombre, url, intervalo, timeout) values ('1782', 'http://keymon.lat:1782', '30', '11000')") +' Starter.skmt.ExecNonQuery("insert into cat_servidores (nombre, url, intervalo, timeout) values ('1783', 'http://keymon.lat:1783', '30', '11000')") + lv_servidores.SingleLineLayout.ItemHeight = 22dip + lbl = lv_servidores.SingleLineLayout.Label + lbl.TextColor = Colors.black + lbl.SetTextAlignment("CENTER", "CENTER") + lbl.TextSize = 14 + lv_dbs.SingleLineLayout.ItemHeight = 22dip + lbl2 = lv_dbs.SingleLineLayout.Label + lbl2.TextColor = Colors.black + lbl2.SetTextAlignment("CENTER", "CENTER") + lbl2.TextSize = 14 + lv_servidoresActivos.SingleLineLayout.ItemHeight = 30dip + lbl3 = lv_servidoresActivos.SingleLineLayout.Label + lbl3.TextColor = Colors.black + lbl3.SetTextAlignment("CENTER", "CENTER") + lbl3.TextSize = 16 + p_dbreqServidores.Left = (p_estatus.Width / 2) - (lv_servidores.Width / 2) + lv_servidores.Top = 10 + lv_servidores.Left = 0 + s.centraEtiqueta(l_dbreqServer, p_estatus.Width) + s.centraEtiqueta(l_db, p_estatus.Width) + s.borraArribaDeXXXErrores(3000) + rp.CheckAndRequest(rp.PERMISSION_POST_NOTIFICATIONS) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) 'change to Activity_PermissionResult if non-B4XPages. End Sub Sub B4XPage_Appear ' reqManager.Initialize(Me, Starter.DBReqServer) cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) b_ping.Background = cd1 -' bu.Initialize -' batterystatus = bu.BatteryInformation b_monitorActivo.Left = (Root.Width / 2) - (b_monitorActivo.Width / 2) b_ping.Left = (Root.Width / 2) - (b_ping.Width / 2) s.centraPanel(p_estatus, Root.Width) @@ -101,25 +153,25 @@ Sub B4XPage_Appear s.centraEtiqueta(l_ultimoPing, Root.Width) ' s.centraPanel(p_intervalo, Root.Width) s.centraEtiqueta(Label1, Root.Width) - If Not(CheckNotificationAccess) Then - Msgbox2Async($"Se necesita acceso a las notificaciones, haga clic en "Aceptar" y en la siguiente pantalla permita el acceso a la aplicación "${Application.LabelName}"."$, "Permisos necesarios", "Aceptar", "Cancelar", "", Null, True) - Wait For Msgbox_Result (resultado As Int) - If resultado = DialogResponse.POSITIVE Then - b_notifAccess_Click - End If - Private cd1 As ColorDrawable - cd1.Initialize(Colors.red, 10dip) - b_notifAccess.Background = cd1 - b_notifAccess.TextColor = Colors.White - b_notifAccess.Text = "Activar Permisos" - Else - Private cd1 As ColorDrawable - cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) - b_notifAccess.Background = cd1 - b_notifAccess.TextColor = Colors.White - b_notifAccess.Text = "Permisos Activos" - End If - CallSubDelayed(Monitor, "Timer1_Tick") +' If Not(CheckNotificationAccess) Then +' Msgbox2Async($"Se necesita acceso a las notificaciones, haga clic en "Aceptar" y en la siguiente pantalla permita el acceso a la aplicación "${Application.LabelName}"."$, "Permisos necesarios", "Aceptar", "Cancelar", "", Null, True) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' b_notifAccess_Click +' End If +' Private cd1 As ColorDrawable +' cd1.Initialize(Colors.red, 10dip) +' b_notifAccess.Background = cd1 +' b_notifAccess.TextColor = Colors.White +' b_notifAccess.Text = "Activar Permisos" +' Else +' Private cd1 As ColorDrawable +' cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) +' b_notifAccess.Background = cd1 +' b_notifAccess.TextColor = Colors.White +' b_notifAccess.Text = "Permisos Activos" +' End If +' CallSubDelayed(Monitor, "Timer1_Tick") End Sub Private Sub B4XPage_CloseRequest As ResumableSub @@ -135,11 +187,11 @@ End Sub 'Revisa si la aplicación tiene permiso para acceder a las notificaciones. Sub CheckNotificationAccess As Boolean - Dim nstr, pstr As String - Dim r As Reflector - pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") - nstr = ph.GetSettings("enabled_notification_listeners") - Return nstr.Contains(pstr) +' Dim nstr, pstr As String +' Dim r As Reflector +' pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") +' nstr = ph.GetSettings("enabled_notification_listeners") +' Return nstr.Contains(pstr) End Sub Private Sub tb_monitorActivo_CheckedChange(Checked As Boolean) @@ -209,6 +261,15 @@ Private Sub i_engrane_Click et_timeout.Text = s.traeTimeoutDeBD p_engrane.Width = Root.Width p_engrane.Height = Root.Height + Private sa As Cursor = Starter.skmt.ExecQuery("select * from cat_servidores") + If sa.RowCount > 0 Then + lv_servidoresActivos.Clear + For i = 0 To sa.RowCount - 1 + sa.Position = i + lv_servidoresActivos.AddSingleLine(sa.GetString("url")) + Next + End If + s.panelVisible(p_engrane, 0, 0) End Sub @@ -221,7 +282,7 @@ Private Sub b_ping_Click b_ping.Background = cd1 b_ping.Text = "Buscando ..." CallSubDelayed(Monitor, "Timer1_Tick") - CallSubDelayed(Monitor, "probamosConexion") +' CallSubDelayed(Monitor, "probamosConexion") ' Wait For (ph.ShellAsync("ping", Array As String("-c 1","-W 2", "8.8.8.8"))) Complete (Success As Boolean, ExitValue As Int, StdOut As String, StdErr As String) ' If Success Then ' Log("ExitValue:" & ExitValue) @@ -243,9 +304,9 @@ End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub b_notifAccess_Click - Dim In As Intent - In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") - StartActivity(In) +' Dim In As Intent +' In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") +' StartActivity(In) End Sub Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel 'ignore @@ -287,7 +348,9 @@ Private Sub b_guardaCambios_Click Monitor.Interval = et_intervalo.text Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'intervalo'"$) Starter.skmt.ExecNonQuery($"insert into cat_variables (nombre, valor) values ("intervalo", '${et_intervalo.text}')"$) - CallSubDelayed(Monitor, "Timer1_Tick") + Starter.skmt.ExecNonQuery($"delete from cat_servidores where url = '${et_server.text}'"$) + Starter.skmt.ExecNonQuery($"insert into cat_servidores (url, intervalo, timeout) values ('${et_server.text}', '${et_intervalo.text}', '${et_timeout.text}')"$) +' CallSubDelayed(Monitor, "Timer1_Tick") p_engrane.Visible = False 'Guardamos DBReqServer Starter.DBReqServer = et_server.text @@ -295,7 +358,7 @@ Private Sub b_guardaCambios_Click Starter.skmt.ExecNonQuery($"insert into cat_variables (nombre, valor) values ("servidor", '${et_server.text}')"$) CallSubDelayed(Monitor, "reinicializaReqManager") p_engrane.Visible = False - CallSubDelayed(Monitor, "Timer1_Tick") +' CallSubDelayed(Monitor, "Timer1_Tick") 'Guardamos Timeout Monitor.timeout = et_timeout.text Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'timeout'"$) @@ -303,4 +366,24 @@ Private Sub b_guardaCambios_Click CallSubDelayed(Monitor, "Timer1_Tick") p_engrane.Visible = False ToastMessageShow($"Cambios guardados"$, False) +End Sub + + +Private Sub lv_servidoresActivos_ItemClick (Position As Int, Value As Object) + Private sa As Cursor = Starter.skmt.ExecQuery($"select * from cat_servidores where url = '${Value}'"$) + If sa.RowCount > 0 Then + sa.Position = 0 + et_server.Text = sa.GetString("url") + et_intervalo.Text = sa.GetString("intervalo") + et_timeout.Text = sa.GetString("timeout") + End If +End Sub + +Private Sub lv_servidoresActivos_ItemLongClick (Position As Int, Value As Object) + Msgbox2Async($"Esta seguro que desea borrar el servidor ${Value}"$, "AVISO", "SI", "", "NO", Null, True) + Wait For Msgbox_Result (Result As Int) + If Result = DialogResponse.POSITIVE Then + Starter.skmt.ExecNonQuery($"delete from cat_servidores where url = '${Value}'"$) + i_engrane_Click + End If End Sub \ No newline at end of file diff --git a/B4A/C_Subs.bas b/B4A/C_Subs.bas index 2ffff25..5483a2f 100644 --- a/B4A/C_Subs.bas +++ b/B4A/C_Subs.bas @@ -473,4 +473,25 @@ Sub ping Else Log("Error: " & LastException) End If +End Sub + +Sub traeServidorDesdeBD(id As Int) As Map + Private m As Map + m.Initialize + Private x As Cursor = Starter.skmt.ExecQuery($"select * from cat_servidores where id = ${id}"$) + If x.RowCount > 0 Then + For i = 0 To x.RowCount - 1 + x.Position = i + m = CreateMap("nombre":x.GetString("nombre"), "url":x.GetString("url"), "intervalo":x.GetString("intervalo"), "timeout":x.GetString("timeout")) + Next + End If + Return m +End Sub + +'Borramos renglones extra de la tabla de errores +Sub borraArribaDeXXXErrores(limite As Int) 'ignore + If Starter.logger Then LogColor($"Recortamos la tabla de error_log, limite de ${limite}"$, Colors.Magenta) + Starter.skmt.ExecNonQuery($"DELETE FROM error_log WHERE fecha NOT in (SELECT fecha FROM error_log ORDER BY fecha desc LIMIT ${limite})"$) + Starter.skmt.ExecNonQuery("vacuum;") +' if starter.logger then Log("Borramos mas de 100 de errorLog") End Sub \ No newline at end of file diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal index 28eb723..d7d856c 100644 Binary files a/B4A/Files/login.bal and b/B4A/Files/login.bal differ diff --git a/B4A/Monitor-Keymon.b4a b/B4A/Monitor-Keymon.b4a index bdb352f..0e42a68 100644 --- a/B4A/Monitor-Keymon.b4a +++ b/B4A/Monitor-Keymon.b4a @@ -13,7 +13,7 @@ FileGroup5=Default Group FileGroup6=Default Group Group=Default Group Library1=b4xpages -Library10=replyauto +Library10=reflection Library11=runtimepermissions Library12=sql Library13=xcustomlistview @@ -22,27 +22,27 @@ Library2=byteconverter Library3=core Library4=fusedlocationprovider Library5=gps -Library6=okhttputils2 -Library7=phone -Library8=randomaccessfile -Library9=reflection -ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText()~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText()~\n~AddManifestText() 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText()~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddApplicationText(~\n~~\n~ ~\n~ ~\n~ ~\n~) +Library6=json +Library7=okhttputils2 +Library8=phone +Library9=randomaccessfile +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~'AddManifestText(~\n~'~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~'AddManifestText()~\n~'AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~'AddManifestText()~\n~'AddManifestText() 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~'AddPermission(android.permission.INSTALL_PACKAGES)~\n~'AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~'AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~'AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~'AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~'SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText()~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~'AddApplicationText(~\n~'~\n~' ~\n~' ~\n~' ~\n~') Module1=B4XMainPage Module2=BatteryUtilities Module3=C_Subs Module4=DBRequestManager Module5=Monitor -Module6=NotificationService +Module6=NotificationServiceXXX Module7=Starter NumberOfFiles=6 NumberOfLibraries=14 NumberOfModules=7 -Version=12.5 +Version=12.8 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Monitor Keymon #VersionCode: 1 - #VersionName: 3.11.21 + #VersionName: 4.11.30 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/Monitor-Keymon.b4a.meta b/B4A/Monitor-Keymon.b4a.meta index f5275ea..8ad51f2 100644 --- a/B4A/Monitor-Keymon.b4a.meta +++ b/B4A/Monitor-Keymon.b4a.meta @@ -15,13 +15,13 @@ ModuleBreakpoints5= ModuleBreakpoints6= ModuleBreakpoints7= ModuleClosedNodes0= -ModuleClosedNodes1=7,8,9,10,11,14,15,18,19,21,22,24 +ModuleClosedNodes1=8,11,19,21,22,24 ModuleClosedNodes2= ModuleClosedNodes3= ModuleClosedNodes4= ModuleClosedNodes5=5 ModuleClosedNodes6= ModuleClosedNodes7= -NavigationStack=B4XMainPage,Class_Globals,39,0,B4XMainPage,B4XPage_Appear,95,0,B4XMainPage,B4XPage_Created,83,0,Main,Process_Globals,20,0,B4XMainPage,l_info_Click,254,0,B4XMainPage,l_internet_Click,266,0,Visual Designer,login.bal,-100,6,B4XMainPage,l_dbreqserver_Click,265,0,B4XMainPage,b_ping_Click,219,0,B4XMainPage,l_db_Click,260,0,B4XMainPage,b_guardaCambios_Click,283,2 +NavigationStack=Monitor,Process_Globals,22,5,NotificationServiceXXX,Service_Start,28,0,NotificationServiceXXX,Process_Globals,12,0,NotificationServiceXXX,Service_Create,20,0,B4XMainPage,B4XPage_Appear,155,0,B4XMainPage,B4XPage_Created,133,5,Starter,Process_Globals,8,0,Starter,Service_Start,57,0,Monitor,JobDone,148,6,Monitor,Timer1_Tick,54,0,Monitor,Service_Start,38,0 SelectedBuild=0 -VisibleModules=1,7,3,5,6,4 +VisibleModules=1,7,3,5,4 diff --git a/B4A/NotificationService.bas b/B4A/NotificationService.bas index cc34528..e70e840 100644 --- a/B4A/NotificationService.bas +++ b/B4A/NotificationService.bas @@ -11,14 +11,14 @@ Version=11 Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. - Dim rp As ReplyAuto +' Dim rp As ReplyAuto ' Dim activo As Boolean = True Dim ultimaNoti As String Dim logger As Boolean = False End Sub Sub Service_Create - rp.Initialize("MonitorKeymon") +' rp.Initialize("MonitorKeymon") #if not(DEBUG) logger = False #end if @@ -27,7 +27,7 @@ End Sub Sub Service_Start (StartingIntent As Intent) ' Log("NotificationService Start") - If rp.HandleIntent(StartingIntent) Then Return +' If rp.HandleIntent(StartingIntent) Then Return DateTime.DateFormat = "mm" ultimaNoti = DateTime.Date(DateTime.now) If logger Then LogColor($"Ultima notificación en el minuto ${ultimaNoti}"$, Colors.green) @@ -37,18 +37,18 @@ Sub Service_Destroy End Sub -Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification) - If ultimaNoti = "" Then ultimaNoti = 0 - DateTime.DateFormat = "mm" - Private estaNoti As String = DateTime.Date(DateTime.now) - If estaNoti > 60 Then estaNoti = estaNoti - 60 - If logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue) - If logger Then LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green) - If logger Then Log(SBN.PackageName) - If ultimaNoti < estaNoti Then - If logger Then LogColor($"******** TIEMPO *******"$, Colors.red) - ultimaNoti = estaNoti - If IsPaused(Monitor) Then StartService(Monitor) - End If - If logger Then LogColor("Monitor inicializado:" & Monitor.Timer1.IsInitialized, Colors.Magenta) -End Sub +'Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification) +' If ultimaNoti = "" Then ultimaNoti = 0 +' DateTime.DateFormat = "mm" +' Private estaNoti As String = DateTime.Date(DateTime.now) +' If estaNoti > 60 Then estaNoti = estaNoti - 60 +' If logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue) +' If logger Then LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green) +' If logger Then Log(SBN.PackageName) +' If ultimaNoti < estaNoti Then +' If logger Then LogColor($"******** TIEMPO *******"$, Colors.red) +' ultimaNoti = estaNoti +' If IsPaused(Monitor) Then StartService(Monitor) +' End If +' If logger Then LogColor("Monitor inicializado:" & Monitor.Timer1.IsInitialized, Colors.Magenta) +'End Sub diff --git a/B4A/Starter.bas b/B4A/Starter.bas index 1d94771..03ec2c6 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -43,9 +43,26 @@ Sub Service_Start (StartingIntent As Intent) s.Initialize skmt = s.inicializaBD(File.DirInternal, "kmt.db") skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS cat_variables(nombre TEXT, valor text)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS cat_servidores(id INTEGER PRIMARY KEY, nombre TEXT, url text, intervalo TEXT, timeout TEXT)") skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS error_log(error TEXT, fecha text)") If s.traeDBReqServerDeBD <> "N/A" Then DBReqServer = s.traeDBReqServerDeBD ' reqManager.Initialize(Me, DBReqServer) + + Private sa As Cursor = skmt.ExecQuery("select count(*) as cuantos from cat_servidores") + sa.Position = 0 + If sa.GetString("cuantos") = 0 Then + Private sa2 As Cursor = skmt.ExecQuery("select * from cat_variables where nombre = 'servidor'") + If sa2.RowCount > 0 Then + sa2.Position = 0 + skmt.ExecNonQuery($"insert into cat_servidores (url, intervalo, timeout) values ('${sa2.GetString("valor")}', '30', '11000')"$) + End If + End If + Private sa As Cursor = skmt.ExecQuery("select count(*) as cuantos from cat_servidores") + sa.Position = 0 + If sa.GetString("cuantos") = 0 Then + skmt.ExecNonQuery($"insert into cat_servidores (url, intervalo, timeout) values ('http://keymon.lat:1781', '30', '11000')"$) + End If + StartService(Monitor) End Sub ' diff --git a/B4A/monitor.bas b/B4A/monitor.bas index 1d53b6a..ed72b56 100644 --- a/B4A/monitor.bas +++ b/B4A/monitor.bas @@ -26,6 +26,7 @@ Sub Process_Globals Dim DBOk As Boolean = True Dim logger As Boolean = True Dim timeout As Int + Dim cs As CSBuilder End Sub Sub Service_Create @@ -46,7 +47,6 @@ Sub Service_Start (StartingIntent As Intent) 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) - reqManager.Initialize(Me, Starter.DBReqServer) Timer1_Tick If logger Then LogColor("*************** Monitor Iniciado 👍🏽 **********", Colors.red) End Sub @@ -66,12 +66,14 @@ Sub Timer1_Tick End Sub Sub probamosConexion - If logger Then Log("probamos probamosConexion") + If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############") + B4XPages.MainPage.lv_servidores.Clear + B4XPages.MainPage.lv_dbs.Clear If B4XPages.IsInitialized Then B4XPages.MainPage.cb_conexion.Checked = False B4XPages.MainPage.cb_internet.Checked = False - B4XPages.MainPage.cb_dbreqserver.Checked = False - B4XPages.MainPage.cb_db.Checked = False +' B4XPages.MainPage.cb_dbreqserver.Checked = False +' B4XPages.MainPage.cb_db.Checked = False End If If IsConnectedToInternet Then s.ping @@ -88,9 +90,28 @@ Sub probamosConexion 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 - cmd.Initialize - cmd.Name = "select_conexion" - reqManager.ExecuteQuery(cmd, 0, "select_conexion", timeout) + + For i = 0 To B4XPages.MainPage.servidores.Size - 1 + Private esteServidor As Map = B4XPages.MainPage.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 @@ -117,8 +138,18 @@ Sub JobDone(Job As HttpJob) cd1.Initialize(Colors.Red, 10dip) If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1 If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO" - s.notiHigh("ERROR ❌", $"El servidor ${Starter.DBReqServer} NO responde!!"$, nid, Main) 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 + B4XPages.MainPage.lv_servidores.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) +' B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$) + End If + 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) @@ -128,8 +159,13 @@ Sub JobDone(Job As HttpJob) 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 = "select_conexion" Then + If resultado.Tag.As(String).StartsWith("select_conexion_") 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) + B4XPages.MainPage.lbl.TextColor = Colors.black + 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 @@ -137,16 +173,22 @@ Sub JobDone(Job As HttpJob) 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 ❌", $"El servidor NO esta respondiendo!!"$, nid, Main) + 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 = "El servidor NO esta respondiendo!!" + 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_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) @@ -164,8 +206,8 @@ Sub JobDone(Job As HttpJob) 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 +' B4XPages.MainPage.cb_dbreqserver.Checked = DBReqServerOk +' B4XPages.MainPage.cb_db.Checked = DBOk End If Job.Release End If