- VERSION 4.11.30

- Se quitaron librerias y permisos que no se usaban.
- Se agregó la opción de monitorear mas de un servidor.
This commit is contained in:
Jose Alberto Guerra Ugalde
2024-12-01 02:28:38 -06:00
parent 4fe5dbd25a
commit 80d6ded85e
8 changed files with 243 additions and 80 deletions

View File

@@ -35,8 +35,8 @@ Sub Class_Globals
Private p_estatus As Panel Private p_estatus As Panel
Dim cb_conexion As CheckBox Dim cb_conexion As CheckBox
Dim cb_internet As CheckBox Dim cb_internet As CheckBox
Dim cb_dbreqserver As CheckBox ' Dim cb_dbreqserver As CheckBox
Dim cb_db As CheckBox ' Dim cb_db As CheckBox
' Private b_intervalo As Button ' Private b_intervalo As Button
' Private b_server As Button ' Private b_server As Button
Private et_server As EditText Private et_server As EditText
@@ -60,6 +60,19 @@ Sub Class_Globals
Private l_server As Label Private l_server As Label
Private l_info As Label Private l_info As Label
Private b_guardaCambios As Button 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 End Sub
Public Sub Initialize Public Sub Initialize
@@ -74,9 +87,9 @@ Private Sub B4XPage_Created (Root1 As B4XView)
B4XPages.AddPage("Login", login) B4XPages.AddPage("Login", login)
s.Initialize s.Initialize
l_version.Text = Application.VersionName l_version.Text = Application.VersionName
lv_server.AddSingleLine("http://keymon.lat:1782") ' lv_server.AddSingleLine("http://keymon.lat:1782")
lv_server.AddSingleLine("http://10.0.0.205:1782") ' lv_server.AddSingleLine("http://10.0.0.205:1782")
lv_server.AddSingleLine("http://40.123.36.38: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://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") 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 logger = False
#end if #end if
s.centraEtiqueta(l_info, Root.Width) 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 End Sub
Sub B4XPage_Appear Sub B4XPage_Appear
' reqManager.Initialize(Me, Starter.DBReqServer) ' reqManager.Initialize(Me, Starter.DBReqServer)
cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) cd1.Initialize(Colors.RGB(16, 141, 0), 10dip)
b_ping.Background = cd1 b_ping.Background = cd1
' bu.Initialize
' batterystatus = bu.BatteryInformation
b_monitorActivo.Left = (Root.Width / 2) - (b_monitorActivo.Width / 2) b_monitorActivo.Left = (Root.Width / 2) - (b_monitorActivo.Width / 2)
b_ping.Left = (Root.Width / 2) - (b_ping.Width / 2) b_ping.Left = (Root.Width / 2) - (b_ping.Width / 2)
s.centraPanel(p_estatus, Root.Width) s.centraPanel(p_estatus, Root.Width)
@@ -101,25 +153,25 @@ Sub B4XPage_Appear
s.centraEtiqueta(l_ultimoPing, Root.Width) s.centraEtiqueta(l_ultimoPing, Root.Width)
' s.centraPanel(p_intervalo, Root.Width) ' s.centraPanel(p_intervalo, Root.Width)
s.centraEtiqueta(Label1, Root.Width) s.centraEtiqueta(Label1, Root.Width)
If Not(CheckNotificationAccess) Then ' 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) ' 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) ' Wait For Msgbox_Result (resultado As Int)
If resultado = DialogResponse.POSITIVE Then ' If resultado = DialogResponse.POSITIVE Then
b_notifAccess_Click ' b_notifAccess_Click
End If ' End If
Private cd1 As ColorDrawable ' Private cd1 As ColorDrawable
cd1.Initialize(Colors.red, 10dip) ' cd1.Initialize(Colors.red, 10dip)
b_notifAccess.Background = cd1 ' b_notifAccess.Background = cd1
b_notifAccess.TextColor = Colors.White ' b_notifAccess.TextColor = Colors.White
b_notifAccess.Text = "Activar Permisos" ' b_notifAccess.Text = "Activar Permisos"
Else ' Else
Private cd1 As ColorDrawable ' Private cd1 As ColorDrawable
cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) ' cd1.Initialize(Colors.RGB(109, 221, 101), 10dip)
b_notifAccess.Background = cd1 ' b_notifAccess.Background = cd1
b_notifAccess.TextColor = Colors.White ' b_notifAccess.TextColor = Colors.White
b_notifAccess.Text = "Permisos Activos" ' b_notifAccess.Text = "Permisos Activos"
End If ' End If
CallSubDelayed(Monitor, "Timer1_Tick") ' CallSubDelayed(Monitor, "Timer1_Tick")
End Sub End Sub
Private Sub B4XPage_CloseRequest As ResumableSub Private Sub B4XPage_CloseRequest As ResumableSub
@@ -135,11 +187,11 @@ End Sub
'Revisa si la aplicación tiene permiso para acceder a las notificaciones. 'Revisa si la aplicación tiene permiso para acceder a las notificaciones.
Sub CheckNotificationAccess As Boolean Sub CheckNotificationAccess As Boolean
Dim nstr, pstr As String ' Dim nstr, pstr As String
Dim r As Reflector ' Dim r As Reflector
pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") ' pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName")
nstr = ph.GetSettings("enabled_notification_listeners") ' nstr = ph.GetSettings("enabled_notification_listeners")
Return nstr.Contains(pstr) ' Return nstr.Contains(pstr)
End Sub End Sub
Private Sub tb_monitorActivo_CheckedChange(Checked As Boolean) Private Sub tb_monitorActivo_CheckedChange(Checked As Boolean)
@@ -209,6 +261,15 @@ Private Sub i_engrane_Click
et_timeout.Text = s.traeTimeoutDeBD et_timeout.Text = s.traeTimeoutDeBD
p_engrane.Width = Root.Width p_engrane.Width = Root.Width
p_engrane.Height = Root.Height 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) s.panelVisible(p_engrane, 0, 0)
End Sub End Sub
@@ -221,7 +282,7 @@ Private Sub b_ping_Click
b_ping.Background = cd1 b_ping.Background = cd1
b_ping.Text = "Buscando ..." b_ping.Text = "Buscando ..."
CallSubDelayed(Monitor, "Timer1_Tick") 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) ' 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 ' If Success Then
' Log("ExitValue:" & ExitValue) ' 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. 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Sub b_notifAccess_Click Sub b_notifAccess_Click
Dim In As Intent ' Dim In As Intent
In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") ' In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "")
StartActivity(In) ' StartActivity(In)
End Sub End Sub
Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel 'ignore 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 Monitor.Interval = et_intervalo.text
Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'intervalo'"$) Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'intervalo'"$)
Starter.skmt.ExecNonQuery($"insert into cat_variables (nombre, valor) values ("intervalo", '${et_intervalo.text}')"$) 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 p_engrane.Visible = False
'Guardamos DBReqServer 'Guardamos DBReqServer
Starter.DBReqServer = et_server.text 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}')"$) Starter.skmt.ExecNonQuery($"insert into cat_variables (nombre, valor) values ("servidor", '${et_server.text}')"$)
CallSubDelayed(Monitor, "reinicializaReqManager") CallSubDelayed(Monitor, "reinicializaReqManager")
p_engrane.Visible = False p_engrane.Visible = False
CallSubDelayed(Monitor, "Timer1_Tick") ' CallSubDelayed(Monitor, "Timer1_Tick")
'Guardamos Timeout 'Guardamos Timeout
Monitor.timeout = et_timeout.text Monitor.timeout = et_timeout.text
Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'timeout'"$) Starter.skmt.ExecNonQuery($"delete from cat_variables where nombre = 'timeout'"$)
@@ -303,4 +366,24 @@ Private Sub b_guardaCambios_Click
CallSubDelayed(Monitor, "Timer1_Tick") CallSubDelayed(Monitor, "Timer1_Tick")
p_engrane.Visible = False p_engrane.Visible = False
ToastMessageShow($"Cambios guardados"$, 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 End Sub

View File

@@ -473,4 +473,25 @@ Sub ping
Else Else
Log("Error: " & LastException) Log("Error: " & LastException)
End If 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 End Sub

Binary file not shown.

View File

@@ -13,7 +13,7 @@ FileGroup5=Default Group
FileGroup6=Default Group FileGroup6=Default Group
Group=Default Group Group=Default Group
Library1=b4xpages Library1=b4xpages
Library10=replyauto Library10=reflection
Library11=runtimepermissions Library11=runtimepermissions
Library12=sql Library12=sql
Library13=xcustomlistview Library13=xcustomlistview
@@ -22,27 +22,27 @@ Library2=byteconverter
Library3=core Library3=core
Library4=fusedlocationprovider Library4=fusedlocationprovider
Library5=gps Library5=gps
Library6=okhttputils2 Library6=json
Library7=phone Library7=okhttputils2
Library8=randomaccessfile Library8=phone
Library9=reflection 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~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true"~\n~ android:smallScreens="true"~\n~ android:anyDensity="true"/>)~\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~<meta-data~\n~ android:name="com.google.android.geo.API_KEY"~\n~ android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~ <meta-data android:name="com.google.android.gms.version"~\n~ android:value="@integer/google_play_services_version" />~\n~)~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~)~\n~AddManifestText(~\n~<uses-permission~\n~ android:name="android.permission.WRITE_EXTERNAL_STORAGE"~\n~ android:maxSdkVersion="33" />~\n~)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="33" />)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:maxSdkVersion="33" />) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)~\n~AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)~\n~AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)~\n~AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)~\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(<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddApplicationText(~\n~<service android:name="b4a.jsaplication.com.br.ReplyAuto"~\n~ android:label="MonitorKeymon"~\n~ android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"~\n~ android:exported="true">~\n~ <intent-filter>~\n~ <action android:name="android.service.notification.NotificationListenerService" />~\n~ </intent-filter>~\n~</service>) 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~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true"~\n~ android:smallScreens="true"~\n~ android:anyDensity="true"/>)~\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~<meta-data~\n~ android:name="com.google.android.geo.API_KEY"~\n~ android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~ <meta-data android:name="com.google.android.gms.version"~\n~ android:value="@integer/google_play_services_version" />~\n~)~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~)~\n~'AddManifestText(~\n~'<uses-permission~\n~' android:name="android.permission.WRITE_EXTERNAL_STORAGE"~\n~' android:maxSdkVersion="33" />~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~'AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~'AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~'AddManifestText(<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="33" />)~\n~'AddManifestText(<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:maxSdkVersion="33" />) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)~\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(<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~'AddApplicationText(~\n~'<service android:name="b4a.jsaplication.com.br.ReplyAuto"~\n~' android:label="MonitorKeymon"~\n~' android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"~\n~' android:exported="true">~\n~' <intent-filter>~\n~' <action android:name="android.service.notification.NotificationListenerService" />~\n~' </intent-filter>~\n~'</service>)
Module1=B4XMainPage Module1=B4XMainPage
Module2=BatteryUtilities Module2=BatteryUtilities
Module3=C_Subs Module3=C_Subs
Module4=DBRequestManager Module4=DBRequestManager
Module5=Monitor Module5=Monitor
Module6=NotificationService Module6=NotificationServiceXXX
Module7=Starter Module7=Starter
NumberOfFiles=6 NumberOfFiles=6
NumberOfLibraries=14 NumberOfLibraries=14
NumberOfModules=7 NumberOfModules=7
Version=12.5 Version=12.8
@EndOfDesignText@ @EndOfDesignText@
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Monitor Keymon #ApplicationLabel: Monitor Keymon
#VersionCode: 1 #VersionCode: 1
#VersionName: 3.11.21 #VersionName: 4.11.30
'SupportedOrientations possible values: unspecified, landscape or portrait. 'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False

View File

@@ -15,13 +15,13 @@ ModuleBreakpoints5=
ModuleBreakpoints6= ModuleBreakpoints6=
ModuleBreakpoints7= ModuleBreakpoints7=
ModuleClosedNodes0= ModuleClosedNodes0=
ModuleClosedNodes1=7,8,9,10,11,14,15,18,19,21,22,24 ModuleClosedNodes1=8,11,19,21,22,24
ModuleClosedNodes2= ModuleClosedNodes2=
ModuleClosedNodes3= ModuleClosedNodes3=
ModuleClosedNodes4= ModuleClosedNodes4=
ModuleClosedNodes5=5 ModuleClosedNodes5=5
ModuleClosedNodes6= ModuleClosedNodes6=
ModuleClosedNodes7= 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 SelectedBuild=0
VisibleModules=1,7,3,5,6,4 VisibleModules=1,7,3,5,4

View File

@@ -11,14 +11,14 @@ Version=11
Sub Process_Globals Sub Process_Globals
'These global variables will be declared once when the application starts. 'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules. 'These variables can be accessed from all modules.
Dim rp As ReplyAuto ' Dim rp As ReplyAuto
' Dim activo As Boolean = True ' Dim activo As Boolean = True
Dim ultimaNoti As String Dim ultimaNoti As String
Dim logger As Boolean = False Dim logger As Boolean = False
End Sub End Sub
Sub Service_Create Sub Service_Create
rp.Initialize("MonitorKeymon") ' rp.Initialize("MonitorKeymon")
#if not(DEBUG) #if not(DEBUG)
logger = False logger = False
#end if #end if
@@ -27,7 +27,7 @@ End Sub
Sub Service_Start (StartingIntent As Intent) Sub Service_Start (StartingIntent As Intent)
' Log("NotificationService Start") ' Log("NotificationService Start")
If rp.HandleIntent(StartingIntent) Then Return ' If rp.HandleIntent(StartingIntent) Then Return
DateTime.DateFormat = "mm" DateTime.DateFormat = "mm"
ultimaNoti = DateTime.Date(DateTime.now) ultimaNoti = DateTime.Date(DateTime.now)
If logger Then LogColor($"Ultima notificación en el minuto ${ultimaNoti}"$, Colors.green) If logger Then LogColor($"Ultima notificación en el minuto ${ultimaNoti}"$, Colors.green)
@@ -37,18 +37,18 @@ Sub Service_Destroy
End Sub End Sub
Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification) 'Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification)
If ultimaNoti = "" Then ultimaNoti = 0 ' If ultimaNoti = "" Then ultimaNoti = 0
DateTime.DateFormat = "mm" ' DateTime.DateFormat = "mm"
Private estaNoti As String = DateTime.Date(DateTime.now) ' Private estaNoti As String = DateTime.Date(DateTime.now)
If estaNoti > 60 Then estaNoti = estaNoti - 60 ' If estaNoti > 60 Then estaNoti = estaNoti - 60
If logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue) ' 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 LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green)
If logger Then Log(SBN.PackageName) ' If logger Then Log(SBN.PackageName)
If ultimaNoti < estaNoti Then ' If ultimaNoti < estaNoti Then
If logger Then LogColor($"******** TIEMPO *******"$, Colors.red) ' If logger Then LogColor($"******** TIEMPO *******"$, Colors.red)
ultimaNoti = estaNoti ' ultimaNoti = estaNoti
If IsPaused(Monitor) Then StartService(Monitor) ' If IsPaused(Monitor) Then StartService(Monitor)
End If ' End If
If logger Then LogColor("Monitor inicializado:" & Monitor.Timer1.IsInitialized, Colors.Magenta) ' If logger Then LogColor("Monitor inicializado:" & Monitor.Timer1.IsInitialized, Colors.Magenta)
End Sub 'End Sub

View File

@@ -43,9 +43,26 @@ Sub Service_Start (StartingIntent As Intent)
s.Initialize s.Initialize
skmt = s.inicializaBD(File.DirInternal, "kmt.db") 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_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)") skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS error_log(error TEXT, fecha text)")
If s.traeDBReqServerDeBD <> "N/A" Then DBReqServer = s.traeDBReqServerDeBD If s.traeDBReqServerDeBD <> "N/A" Then DBReqServer = s.traeDBReqServerDeBD
' reqManager.Initialize(Me, DBReqServer) ' 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) StartService(Monitor)
End Sub End Sub
' '

View File

@@ -26,6 +26,7 @@ Sub Process_Globals
Dim DBOk As Boolean = True Dim DBOk As Boolean = True
Dim logger As Boolean = True Dim logger As Boolean = True
Dim timeout As Int Dim timeout As Int
Dim cs As CSBuilder
End Sub End Sub
Sub Service_Create 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.StopAutomaticForeground 'Call this when the background task completes (if there is one)
Service.StartForeground(nid, s.CreateNotification("...")) Service.StartForeground(nid, s.CreateNotification("..."))
StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True) StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True)
reqManager.Initialize(Me, Starter.DBReqServer)
Timer1_Tick Timer1_Tick
If logger Then LogColor("*************** Monitor Iniciado 👍🏽 **********", Colors.red) If logger Then LogColor("*************** Monitor Iniciado 👍🏽 **********", Colors.red)
End Sub End Sub
@@ -66,12 +66,14 @@ Sub Timer1_Tick
End Sub End Sub
Sub probamosConexion 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 If B4XPages.IsInitialized Then
B4XPages.MainPage.cb_conexion.Checked = False B4XPages.MainPage.cb_conexion.Checked = False
B4XPages.MainPage.cb_internet.Checked = False B4XPages.MainPage.cb_internet.Checked = False
B4XPages.MainPage.cb_dbreqserver.Checked = False ' B4XPages.MainPage.cb_dbreqserver.Checked = False
B4XPages.MainPage.cb_db.Checked = False ' B4XPages.MainPage.cb_db.Checked = False
End If End If
If IsConnectedToInternet Then If IsConnectedToInternet Then
s.ping s.ping
@@ -88,9 +90,28 @@ Sub probamosConexion
s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid) s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid)
If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!" If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!"
Dim cmd As DBCommand Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_conexion" For i = 0 To B4XPages.MainPage.servidores.Size - 1
reqManager.ExecuteQuery(cmd, 0, "select_conexion", timeout) 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" 'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion"
Timer1.Enabled = False Timer1.Enabled = False
Timer1.Interval = Interval * 1000 Timer1.Interval = Interval * 1000
@@ -117,8 +138,18 @@ Sub JobDone(Job As HttpJob)
cd1.Initialize(Colors.Red, 10dip) cd1.Initialize(Colors.Red, 10dip)
If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1 If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1
If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO" 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") 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)}')"$) 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 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) ' 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 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 If Job.JobName = "DBRequest" Then
Dim resultado As DBResult = reqManager.HandleJob(Job) 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") 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 For Each records() As Object In resultado.Rows
Private valor As String = records(resultado.Columns.Get("VALOR")) Private valor As String = records(resultado.Columns.Get("VALOR"))
If valor = "OK" Then If valor = "OK" Then
@@ -137,16 +173,22 @@ Sub JobDone(Job As HttpJob)
s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid) s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid)
If B4XPages.IsInitialized Then If B4XPages.IsInitialized Then
B4XPages.MainPage.l_status.Text = "El servidor esta respondiendo!!" 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 Dim cd1 As ColorDrawable
cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) cd1.Initialize(Colors.RGB(16, 141, 0), 10dip)
B4XPages.MainPage.b_ping.Background = cd1 B4XPages.MainPage.b_ping.Background = cd1
B4XPages.MainPage.b_ping.Text = "Servidor Ok" B4XPages.MainPage.b_ping.Text = "Servidor Ok"
End If End If
Else 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 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") 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)}')"$) Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('La BD NO esta respondiendo!!', '${s.fechaKMT(DateTime.Now)}')"$)
Dim cd1 As ColorDrawable Dim cd1 As ColorDrawable
cd1.Initialize(Colors.Red, 10dip) cd1.Initialize(Colors.Red, 10dip)
@@ -164,8 +206,8 @@ Sub JobDone(Job As HttpJob)
B4XPages.MainPage.cb_conexion.Checked = InternetOk B4XPages.MainPage.cb_conexion.Checked = InternetOk
B4XPages.MainPage.cb_internet.Checked = Starter.ping B4XPages.MainPage.cb_internet.Checked = Starter.ping
If DBReqServerOk Then B4XPages.MainPage.cb_internet.Checked = True If DBReqServerOk Then B4XPages.MainPage.cb_internet.Checked = True
B4XPages.MainPage.cb_dbreqserver.Checked = DBReqServerOk ' B4XPages.MainPage.cb_dbreqserver.Checked = DBReqServerOk
B4XPages.MainPage.cb_db.Checked = DBOk ' B4XPages.MainPage.cb_db.Checked = DBOk
End If End If
Job.Release Job.Release
End If End If