updt: map_thumb + format

This commit is contained in:
devfzn 2023-12-26 02:11:15 -03:00
parent 60a4bce725
commit 691d045547
5 changed files with 112 additions and 99 deletions

View File

@ -9,6 +9,7 @@ console = Console()
conn = sqlite3.connect(f'{selfpath}/../ipinfo.db') conn = sqlite3.connect(f'{selfpath}/../ipinfo.db')
c = conn.cursor() c = conn.cursor()
# GeoLoc # GeoLoc
def get_geoloc(codigo): def get_geoloc(codigo):
if codigo == 200: if codigo == 200:
@ -41,6 +42,7 @@ def vistas_pais_detalle(pais, codigo=''):
resp = c.fetchall() resp = c.fetchall()
return resp return resp
def pt_visita_pais_detalle(pais, codigo=''): def pt_visita_pais_detalle(pais, codigo=''):
respuesta = vistas_pais_detalle(pais, codigo) respuesta = vistas_pais_detalle(pais, codigo)
if codigo != '': if codigo != '':
@ -63,6 +65,7 @@ def pt_visita_pais_detalle(pais, codigo=''):
console.print(tbl_v) console.print(tbl_v)
# Formato fecha -- Convertir fecha 'unixepoch' a 'localtime' # Formato fecha -- Convertir fecha 'unixepoch' a 'localtime'
def unix_to_local_date(): def unix_to_local_date():
consulta = """ consulta = """
@ -71,6 +74,7 @@ def unix_to_local_date():
c.execute(consulta) c.execute(consulta)
return c.fetchall() return c.fetchall()
# Select geoloc by cod html -- SELECT all from registro where ip=(SELECT ip from visita where cod_html=200); # Select geoloc by cod html -- SELECT all from registro where ip=(SELECT ip from visita where cod_html=200);
def select_cod(codigo): def select_cod(codigo):
consulta = f""" consulta = f"""
@ -81,6 +85,7 @@ def select_cod(codigo):
resp = c.fetchall() resp = c.fetchall()
return resp return resp
# Select fecha mayor que (ej. 1661226920) # Select fecha mayor que (ej. 1661226920)
def sel_pais_desde(pais, unix_e): def sel_pais_desde(pais, unix_e):
consulta = f""" consulta = f"""
@ -91,6 +96,7 @@ def sel_pais_desde(pais, unix_e):
resp = c.fetchall() resp = c.fetchall()
return resp return resp
def pt_sel_pais_fecha(pais, fecha_ux, fecha_loc): def pt_sel_pais_fecha(pais, fecha_ux, fecha_loc):
fecha = fecha_loc.split('/') fecha = fecha_loc.split('/')
fecha = fecha[2] + '/' + fecha[1] + '/' + fecha[0] fecha = fecha[2] + '/' + fecha[1] + '/' + fecha[0]
@ -111,6 +117,7 @@ def pt_sel_pais_fecha(pais, fecha_ux, fecha_loc):
console.print(tbl_v) console.print(tbl_v)
# Top 50 paises # Top 50 paises
def top_paises(top): def top_paises(top):
consulta = f""" consulta = f"""
@ -142,6 +149,7 @@ def pt_top_paises(top):
console.print(tbl_v) console.print(tbl_v)
# respuesta HTML para pais=? # respuesta HTML para pais=?
def cod_html_pais(pais): def cod_html_pais(pais):
consulta = f""" consulta = f"""

View File

@ -23,7 +23,7 @@ muevelog = f'{selfpath}/muevelog.sh '
log_file = f'{selfpath}/log/iplocate.log' log_file = f'{selfpath}/log/iplocate.log'
console = Console() console = Console()
# tkn=True # tkn=True
# IP validate https://stackoverflow.com/questions/319279/how-to-validate-ip-address-in-python # stackoverflow.com/questions/319279/how-to-validate-ip-address-in-python
ip_regx = "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$" ip_regx = "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$"
ip_local_regx = "^192\.168\.0\.([0-9]|[0-9][0-9]|[0-9][0-9][0-9])$" ip_local_regx = "^192\.168\.0\.([0-9]|[0-9][0-9]|[0-9][0-9][0-9])$"
@ -34,19 +34,23 @@ logging.basicConfig(
) )
logging.info("iplocate inicio") logging.info("iplocate inicio")
def log_usage(proceso, info): def log_usage(proceso, info):
usage_log = f"Proceso:[{proceso}] - Info: [{info}]" usage_log = f"Proceso:[{proceso}] - Info: [{info}]"
logging.info(usage_log) logging.info(usage_log)
def log_error(proceso, info): def log_error(proceso, info):
error_log = f"Proceso: [{proceso}], Info:[{info}]" error_log = f"Proceso: [{proceso}], Info:[{info}]"
logging.error(error_log) logging.error(error_log)
try: try:
ownip = requests.get('https://ifconfig.me/').text ownip = requests.get('https://ifconfig.me/').text
except Exception as ex: except Exception as ex:
log_error("Request ip pública", ex) log_error("Request ip pública", ex)
def filtro_ip_propia(ip): def filtro_ip_propia(ip):
return True if ip != ownip and not re.search(ip_local_regx, ip) else False return True if ip != ownip and not re.search(ip_local_regx, ip) else False
@ -154,6 +158,7 @@ def print_tabla_ip(ip_info):
except Exception as ex: except Exception as ex:
print('Exception print(tabla_ip): ', ex) print('Exception print(tabla_ip): ', ex)
def print_tabla_visita(lista_visitas): def print_tabla_visita(lista_visitas):
tbl_v = Table(box=box.ROUNDED, show_lines=False, row_styles=["dim", ""], border_style="dark_orange3") tbl_v = Table(box=box.ROUNDED, show_lines=False, row_styles=["dim", ""], border_style="dark_orange3")
tbl_v.add_column("Fecha visita", justify="center", style="bright_yellow", no_wrap=True) tbl_v.add_column("Fecha visita", justify="center", style="bright_yellow", no_wrap=True)
@ -174,12 +179,12 @@ def archivo_ips(ips, tkn=True):
print_ipinfo(linea, tkn) print_ipinfo(linea, tkn)
sys.exit(0) sys.exit(0)
def _sync(): def _sync():
console.print('[bold yellow]Sincronizando logs del servidor(bash script)[/bold yellow]') console.print('[bold yellow]Sincronizando logs del servidor(bash script)[/bold yellow]')
subprocess.check_call(muevelog+"%s" % "--start", shell=True) subprocess.check_call(muevelog+"%s" % "--start", shell=True)
def main(): def main():
if len(sys.argv) > 1: if len(sys.argv) > 1:
try: try:
@ -299,6 +304,7 @@ def uso_consultas():
""" """
console.print(ayuda) console.print(ayuda)
def uso(): def uso():
ayuda = f""" ayuda = f"""
[bold blue]ipLocate[/bold blue] [bold blue]ipLocate[/bold blue]
@ -331,5 +337,6 @@ def uso():
""" """
console.print(ayuda) console.print(ayuda)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 276 KiB

After

Width:  |  Height:  |  Size: 276 KiB

View File

@ -10,6 +10,7 @@ cntxt300.set_tile_provider(staticmaps.tile_provider_OSM)
cntxtAll = staticmaps.Context() cntxtAll = staticmaps.Context()
cntxtAll.set_tile_provider(staticmaps.tile_provider_OSM) cntxtAll.set_tile_provider(staticmaps.tile_provider_OSM)
def map200(geolocs): def map200(geolocs):
for loc in geolocs: for loc in geolocs:
lat = float(loc[0].split(',')[0]) lat = float(loc[0].split(',')[0])
@ -87,4 +88,3 @@ def maps_thumbs(locs_200, locs_300):
image = cntxtdemo.render_cairo(1024, 768) image = cntxtdemo.render_cairo(1024, 768)
image.write_to_png(f"{selfpath}/maps/map_thumb.png") image.write_to_png(f"{selfpath}/maps/map_thumb.png")

View File

@ -24,6 +24,7 @@ base_de_datos = f'sqlite:////{selfpath}/ipinfo.db'
console = Console() console = Console()
Base = declarative_base() Base = declarative_base()
# Tabla registro ip info # Tabla registro ip info
class Registro(Base): class Registro(Base):
"""Definición de tabla 'Registro'""" """Definición de tabla 'Registro'"""
@ -50,7 +51,6 @@ class Registro(Base):
"""Convierte fecha 'unix epoch' y devuelve en formato local""" """Convierte fecha 'unix epoch' y devuelve en formato local"""
return time.asctime(time.localtime(int(self.fecha_reg.__repr__()))) return time.asctime(time.localtime(int(self.fecha_reg.__repr__())))
def __repr__(self) -> str: def __repr__(self) -> str:
# print('en repr') # print('en repr')
try: try:
@ -67,7 +67,6 @@ class Registro(Base):
class Visita(Base): class Visita(Base):
"""Definición de tabla 'Visita'""" """Definición de tabla 'Visita'"""
__tablename__ = 'visita' __tablename__ = 'visita'
id = Column(Integer, Sequence('visita_id_seq'), primary_key=True) id = Column(Integer, Sequence('visita_id_seq'), primary_key=True)
ip = Column(String, ForeignKey('registro.ip')) ip = Column(String, ForeignKey('registro.ip'))
@ -78,7 +77,6 @@ class Visita(Base):
registro = Column(Integer, default=0) registro = Column(Integer, default=0)
visita_ip = relationship("Registro", back_populates="visitas") visita_ip = relationship("Registro", back_populates="visitas")
def get_fecha(self): def get_fecha(self):
"""Convierte fecha 'unix epoch' y devuelve en formato local""" """Convierte fecha 'unix epoch' y devuelve en formato local"""
return time.asctime(time.localtime(int(self.fecha.__repr__()))) return time.asctime(time.localtime(int(self.fecha.__repr__())))
@ -112,10 +110,10 @@ fecha_error = "2022/05/10 07:11:46"
fecha_access = "10/May/2022:11:42:14 -0400".split(' ')[0] fecha_access = "10/May/2022:11:42:14 -0400".split(' ')[0]
""" """
def fecha_access_to_epoch(fecha): def fecha_access_to_epoch(fecha):
"""Convierte la fecha del formato entregado por access.log """Convierte la fecha del formato entregado por access.log
y reverse_access.log(nginx) al formato unix epoch. y reverse_access.log(nginx) al formato unix epoch.
:fecha: str Fecha :fecha: str Fecha
:returns: int unix epoch fecha (secs) :returns: int unix epoch fecha (secs)
""" """
@ -123,10 +121,10 @@ def fecha_access_to_epoch(fecha):
fecha_unix = int(time.mktime(fecha.timetuple())) fecha_unix = int(time.mktime(fecha.timetuple()))
return fecha_unix return fecha_unix
def fecha_error_to_epoch(fecha): def fecha_error_to_epoch(fecha):
"""Convierte la fecha del formato entregado por error.log """Convierte la fecha del formato entregado por error.log
y reverse_error.log (nginx) al formato unix epoch. y reverse_error.log (nginx) al formato unix epoch.
:fecha_local: str Fecha :fecha_local: str Fecha
:returns: int unix epoch fecha (secs) :returns: int unix epoch fecha (secs)
""" """
@ -134,9 +132,9 @@ def fecha_error_to_epoch(fecha):
fecha_unix = int(time.mktime(fecha.timetuple())) fecha_unix = int(time.mktime(fecha.timetuple()))
return fecha_unix return fecha_unix
def epoch_to_local(fecha): def epoch_to_local(fecha):
"""Convierte fecha unix epoch a localtime """Convierte fecha unix epoch a localtime
:fecha: int Fecha (secs) :fecha: int Fecha (secs)
:returns: str Fecha :returns: str Fecha
""" """
@ -296,7 +294,7 @@ def carga_error_logs(log):
url = url[:252]+'...' url = url[:252]+'...'
except Exception: except Exception:
url = '---' url = '---'
if ip != None: if ip is not None:
if filtro_ip_propia(ip): if filtro_ip_propia(ip):
fecha = int(fecha_error_to_epoch(fecha)) fecha = int(fecha_error_to_epoch(fecha))
codigo = 0 codigo = 0
@ -422,6 +420,7 @@ def consulta_ip(ip_consulta, tkn=True):
resp = consulta_db(ip_consulta) resp = consulta_db(ip_consulta)
return resp return resp
def consulta_db(ip): def consulta_db(ip):
"""Consulta base de datos por la IPs pasada como argumento. """Consulta base de datos por la IPs pasada como argumento.
Entrega la información de Registro, seguida por todas las visitas Entrega la información de Registro, seguida por todas las visitas
@ -435,7 +434,6 @@ def consulta_db(ip):
print('Exception consulta_db:\n', ex) print('Exception consulta_db:\n', ex)
def registro_ips(): def registro_ips():
"""Consulta API, obtiene datos de IPs en tabla 'Visita' """Consulta API, obtiene datos de IPs en tabla 'Visita'
cuya valor en columna 'registro' sea '0'. Utiliza clase cuya valor en columna 'registro' sea '0'. Utiliza clase