Compare commits
No commits in common. "78a6996f5f33e97f33468ae88deaae7f2090773e" and "32943e40f1c57c3c355f1c3690f2350af59e01f5" have entirely different histories.
78a6996f5f
...
32943e40f1
192
iplocate.py
192
iplocate.py
@ -24,9 +24,9 @@ console = Console()
|
|||||||
# tkn=True
|
# tkn=True
|
||||||
|
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
filename=log_file,
|
filename=log_file,
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||||
level=logging.INFO
|
level=logging.INFO
|
||||||
)
|
)
|
||||||
logging.info("iplocate inicio")
|
logging.info("iplocate inicio")
|
||||||
|
|
||||||
@ -70,43 +70,6 @@ def filtro_ip_propia(ip):
|
|||||||
return True if ip != ownip and not local_ip(ip) else False
|
return True if ip != ownip and not local_ip(ip) else False
|
||||||
|
|
||||||
|
|
||||||
def visita_como_lista(ip_info):
|
|
||||||
lista_visitas = []
|
|
||||||
contad = 0
|
|
||||||
for tupla in ip_info:
|
|
||||||
visita = []
|
|
||||||
if contad < 1:
|
|
||||||
for ind, val in enumerate(tupla):
|
|
||||||
if ind == 0:
|
|
||||||
ip_dict = dict()
|
|
||||||
for dato in str(val).split(';'):
|
|
||||||
ip_dict[dato.split("=")[0]] = dato.split("=")[1]
|
|
||||||
print_tabla_ip(ip_dict)
|
|
||||||
else:
|
|
||||||
visita.append(str(val).split(',')[3].split('=')[1])
|
|
||||||
visita.append(str(val).split(',')[2].split('=')[1])
|
|
||||||
metodo = (str(val).split(',')[4].split('=')[1])
|
|
||||||
metodo = '---' if metodo == 'None' else metodo
|
|
||||||
visita.append(metodo)
|
|
||||||
request = ''.join(str(val).split(',')[5].split('=')[1:])
|
|
||||||
request = '---' if request == 'None' else request
|
|
||||||
visita.append(request)
|
|
||||||
else:
|
|
||||||
for ind, val in enumerate(tupla):
|
|
||||||
if ind > 0:
|
|
||||||
visita.append(str(val).split(',')[3].split('=')[1])
|
|
||||||
visita.append(str(val).split(',')[2].split('=')[1])
|
|
||||||
metodo = (str(val).split(',')[4].split('=')[1])
|
|
||||||
metodo = '---' if metodo == 'None' else metodo
|
|
||||||
visita.append(metodo)
|
|
||||||
request = ''.join(str(val).split(',')[5].split('=')[1:])
|
|
||||||
request = '---' if request == 'None' else request
|
|
||||||
visita.append(request)
|
|
||||||
lista_visitas.append(visita)
|
|
||||||
contad += 1
|
|
||||||
return lista_visitas
|
|
||||||
|
|
||||||
|
|
||||||
def print_ipinfo(ip, tkn=True):
|
def print_ipinfo(ip, tkn=True):
|
||||||
if valid_ip(ip):
|
if valid_ip(ip):
|
||||||
try:
|
try:
|
||||||
@ -117,18 +80,50 @@ def print_ipinfo(ip, tkn=True):
|
|||||||
if isinstance(ip_info, dict):
|
if isinstance(ip_info, dict):
|
||||||
print_tabla_ip(ip_info)
|
print_tabla_ip(ip_info)
|
||||||
elif isinstance(ip_info, list):
|
elif isinstance(ip_info, list):
|
||||||
print_tabla_visita(visita_como_lista(ip_info))
|
lista_visitas = []
|
||||||
|
contad = 0
|
||||||
|
for tupla in ip_info:
|
||||||
|
visita = []
|
||||||
|
if contad < 1:
|
||||||
|
for ind, val in enumerate(tupla):
|
||||||
|
if ind == 0:
|
||||||
|
ip_dict = dict()
|
||||||
|
for dato in str(val).split(';'):
|
||||||
|
ip_dict[dato.split("=")[0]] = dato.split("=")[1]
|
||||||
|
print_tabla_ip(ip_dict)
|
||||||
|
else:
|
||||||
|
visita.append(str(val).split(',')[3].split('=')[1]) # .ljust(24))
|
||||||
|
visita.append(str(val).split(',')[2].split('=')[1]) # .center(11))
|
||||||
|
metodo = (str(val).split(',')[4].split('=')[1])
|
||||||
|
metodo = '---' if metodo == 'None' else metodo # .center(10)
|
||||||
|
visita.append(metodo)
|
||||||
|
request = ''.join(str(val).split(',')[5].split('=')[1:])
|
||||||
|
# configurar wrap en tabla
|
||||||
|
# request = request[:86]+'...' if len(request) > 90 else request
|
||||||
|
request = '---' if request == 'None' else request
|
||||||
|
visita.append(request)
|
||||||
|
else:
|
||||||
|
for ind, val in enumerate(tupla):
|
||||||
|
if ind > 0:
|
||||||
|
# aqui modificar para representar las nuevas columnas de tabla visita
|
||||||
|
visita.append(str(val).split(',')[3].split('=')[1]) #.ljust(24)
|
||||||
|
visita.append(str(val).split(',')[2].split('=')[1]) #.center(11)
|
||||||
|
metodo = (str(val).split(',')[4].split('=')[1])
|
||||||
|
metodo = '---' if metodo == 'None' else metodo #.center(10)
|
||||||
|
visita.append(metodo)
|
||||||
|
request = ''.join(str(val).split(',')[5].split('=')[1:])
|
||||||
|
# configurar wrap en tabla
|
||||||
|
# request = request[:86]+'...' if len(request) > 90 else request
|
||||||
|
request = '---' if request == 'None' else request
|
||||||
|
visita.append(request)
|
||||||
|
lista_visitas.append(visita)
|
||||||
|
contad += 1
|
||||||
|
print_tabla_visita(lista_visitas)
|
||||||
else:
|
else:
|
||||||
console.print(
|
console.print(f'[red]Error type(ip_info) = [/red][magenta]{type(ip_info)}[/magenta][red]][/red]')
|
||||||
'[red]Error type(ip_info) = [/red][magenta]'
|
|
||||||
f'{type(ip_info)}[/magenta][red]][/red]'
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
ipr = ip.split('\n')[0]
|
ipr = ip.split('\n')[0]
|
||||||
console.print(
|
console.print(f'[red][[/red][magenta]{ipr}[/magenta][red]] no es una IP válida![/red]')
|
||||||
f'[red][[/red][magenta]{ipr}[/magenta][red]]'
|
|
||||||
' no es una IP válida![/red]'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def print_tabla_ip(ip_info):
|
def print_tabla_ip(ip_info):
|
||||||
@ -180,14 +175,11 @@ def print_tabla_ip(ip_info):
|
|||||||
|
|
||||||
|
|
||||||
def print_tabla_visita(lista_visitas):
|
def print_tabla_visita(lista_visitas):
|
||||||
tbl_v = Table(box=box.ROUNDED, show_lines=False, row_styles=[
|
tbl_v = Table(box=box.ROUNDED, show_lines=False, row_styles=["dim", ""], border_style="dark_orange3")
|
||||||
"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)
|
|
||||||
tbl_v.add_column("Codigo", justify="center", style="bold dodger_blue2")
|
tbl_v.add_column("Codigo", justify="center", style="bold dodger_blue2")
|
||||||
tbl_v.add_column("Metodo", justify="center", style="bright_magenta")
|
tbl_v.add_column("Metodo", justify="center", style="bright_magenta")
|
||||||
tbl_v.add_column("Request", justify="left", style="#00ff5f",
|
tbl_v.add_column("Request", justify="left", style="#00ff5f", overflow='fold', no_wrap=False)
|
||||||
overflow='fold', no_wrap=False)
|
|
||||||
for item in lista_visitas:
|
for item in lista_visitas:
|
||||||
tbl_v.add_row(item[0], item[1], item[2], item[3])
|
tbl_v.add_row(item[0], item[1], item[2], item[3])
|
||||||
|
|
||||||
@ -204,78 +196,56 @@ def archivo_ips(ips, tkn=True):
|
|||||||
|
|
||||||
|
|
||||||
def _sync():
|
def _sync():
|
||||||
console.print(
|
console.print('[bold yellow]Sincronizando logs del servidor(bash script)[/bold yellow]')
|
||||||
'[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 archivo_invalido(archivo):
|
|
||||||
console.print(
|
|
||||||
f'[red]Archivo [[/red][magenta]{archivo}'
|
|
||||||
'[/magenta][red]] no es válido[/red]'
|
|
||||||
)
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
try:
|
try:
|
||||||
match sys.argv[1]:
|
match sys.argv[1]:
|
||||||
case '--all':
|
case '--all':
|
||||||
_sync()
|
_sync()
|
||||||
console.print(
|
console.print('[bold yellow]Cargando logs en base de datos[/bold yellow]\n')
|
||||||
'[bold yellow]Cargando logs en base de datos'
|
|
||||||
'[/bold yellow]\n'
|
|
||||||
)
|
|
||||||
sql_alch.carga_logs()
|
sql_alch.carga_logs()
|
||||||
console.print(
|
console.print('[bold yellow]Registro de datos de ipinfo[/bold yellow]')
|
||||||
'[bold yellow]Registro de datos de ipinfo'
|
|
||||||
'[/bold yellow]'
|
|
||||||
)
|
|
||||||
sql_alch.registro_ips()
|
sql_alch.registro_ips()
|
||||||
console.print(
|
console.print('[bold yellow]Generando mapa de visitas[/bold yellow]')
|
||||||
'[bold yellow]Generando mapa de visitas[/bold yellow]')
|
|
||||||
sql_alch.mapsgen()
|
sql_alch.mapsgen()
|
||||||
case '--sync':
|
case '--sync':
|
||||||
_sync()
|
_sync()
|
||||||
case '-c':
|
case '-c':
|
||||||
console.print(
|
console.print('[bold yellow]Cargando logs en base de datos[/bold yellow]\n')
|
||||||
'[bold yellow]Cargando logs en base de datos'
|
|
||||||
'[/bold yellow]\n'
|
|
||||||
)
|
|
||||||
sql_alch.carga_logs()
|
sql_alch.carga_logs()
|
||||||
case '-g':
|
case '-g':
|
||||||
console.print(
|
console.print('[bold yellow]Registro de datos de ipinfo[/bold yellow]')
|
||||||
'[bold yellow]Registro de datos de ipinfo'
|
|
||||||
'[/bold yellow]'
|
|
||||||
)
|
|
||||||
sql_alch.registro_ips()
|
sql_alch.registro_ips()
|
||||||
case '-d':
|
case '-d':
|
||||||
console.print(
|
console.print('[bold yellow]Consulta a base de datos:[/bold yellow]')
|
||||||
'[bold yellow]Consulta a base de datos:[/bold yellow]')
|
|
||||||
ip = sys.argv[2]
|
ip = sys.argv[2]
|
||||||
print_ipinfo(ip, None)
|
print_ipinfo(ip, None)
|
||||||
case '-D':
|
case '-D':
|
||||||
console.print(
|
console.print('[bold yellow]Consulta por archivo a base de datos:[/bold yellow]')
|
||||||
'[bold yellow]Consulta por archivo a base de datos:'
|
|
||||||
'[/bold yellow]'
|
|
||||||
)
|
|
||||||
if isfile(sys.argv[2]):
|
if isfile(sys.argv[2]):
|
||||||
archivo_ips(sys.argv[2], None)
|
archivo_ips(sys.argv[2], None)
|
||||||
else:
|
else:
|
||||||
archivo_invalido(sys.argv[2])
|
console.print(f'[red]Archivo [[/red][magenta]{sys.argv[2]}[/magenta]'
|
||||||
|
'[red]] no es válido![/red]')
|
||||||
|
sys.exit(0)
|
||||||
case '-f':
|
case '-f':
|
||||||
if isfile(sys.argv[2]):
|
if isfile(sys.argv[2]):
|
||||||
archivo_ips(sys.argv[2], False)
|
archivo_ips(sys.argv[2], False)
|
||||||
else:
|
else:
|
||||||
archivo_invalido(sys.argv[2])
|
console.print(f'[red]Archivo [[/red][magenta]{sys.argv[2]}[/magenta]'
|
||||||
|
'[red]] no es válido[/red]')
|
||||||
|
sys.exit(0)
|
||||||
case '-F':
|
case '-F':
|
||||||
if isfile(sys.argv[2]):
|
if isfile(sys.argv[2]):
|
||||||
archivo_ips(sys.argv[2])
|
archivo_ips(sys.argv[2])
|
||||||
else:
|
else:
|
||||||
archivo_invalido(sys.argv[2])
|
console.print(f'[red]Archivo [[/red][magenta]{sys.argv[2]}[/magenta]'
|
||||||
|
'[red]] no es válido[/red]')
|
||||||
|
sys.exit(0)
|
||||||
case '-h':
|
case '-h':
|
||||||
uso()
|
uso()
|
||||||
exit(0)
|
exit(0)
|
||||||
@ -286,8 +256,7 @@ def main():
|
|||||||
ip = sys.argv[2]
|
ip = sys.argv[2]
|
||||||
print_ipinfo(ip)
|
print_ipinfo(ip)
|
||||||
case '-M':
|
case '-M':
|
||||||
console.print(
|
console.print('[bold yellow]Generando mapa de visitas[/bold yellow]')
|
||||||
'[bold yellow]Generando mapa de visitas[/bold yellow]')
|
|
||||||
sql_alch.mapsgen()
|
sql_alch.mapsgen()
|
||||||
case '-q':
|
case '-q':
|
||||||
match sys.argv[2]:
|
match sys.argv[2]:
|
||||||
@ -300,37 +269,20 @@ def main():
|
|||||||
case '--pais-desde':
|
case '--pais-desde':
|
||||||
pais = sys.argv[3]
|
pais = sys.argv[3]
|
||||||
fecha_local = sys.argv[4]
|
fecha_local = sys.argv[4]
|
||||||
fecha_unix = sql_alch.fecha_error_to_epoch(
|
fecha_unix = sql_alch.fecha_error_to_epoch(sys.argv[4]+' 00:00:00')
|
||||||
sys.argv[4]+' 00:00:00'
|
querys.pt_sel_pais_fecha(pais.upper(), fecha_unix, fecha_local)
|
||||||
)
|
|
||||||
querys.pt_sel_pais_fecha(
|
|
||||||
pais.upper(),
|
|
||||||
fecha_unix,
|
|
||||||
fecha_local
|
|
||||||
)
|
|
||||||
case '--detalle-pais':
|
case '--detalle-pais':
|
||||||
pais = sys.argv[3]
|
pais = sys.argv[3]
|
||||||
if len(sys.argv) > 4:
|
if len(sys.argv) > 4:
|
||||||
if sys.argv[4].isnumeric():
|
if sys.argv[4].isnumeric():
|
||||||
codigo = sys.argv[4]
|
codigo = sys.argv[4]
|
||||||
querys.pt_visita_pais_detalle(
|
querys.pt_visita_pais_detalle(pais.upper(), codigo)
|
||||||
pais.upper(),
|
|
||||||
codigo
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
console.print(
|
console.print(f'[magenta]-q --detalle-pais <pais> [/magenta][red][bold]<CODIGO> inválido ({sys.argv[4]})[/bold][/red]')
|
||||||
'[magenta]-q --detalle-pais <pais> '
|
|
||||||
'[/magenta][red][bold]<CODIGO> '
|
|
||||||
f'inválido ({sys.argv[4]})'
|
|
||||||
'[/bold][/red]'
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
querys.pt_visita_pais_detalle(pais.upper())
|
querys.pt_visita_pais_detalle(pais.upper())
|
||||||
case _:
|
case _:
|
||||||
console.print(
|
console.print(f'[red] query desconocida [bold]{sys.argv[2]}[/bold][/red]')
|
||||||
'[red] query desconocida [bold]'
|
|
||||||
f'{sys.argv[2]}[/bold][/red]'
|
|
||||||
)
|
|
||||||
case _:
|
case _:
|
||||||
ip = sys.argv[1]
|
ip = sys.argv[1]
|
||||||
print_ipinfo(ip, False)
|
print_ipinfo(ip, False)
|
||||||
@ -351,7 +303,7 @@ def main():
|
|||||||
|
|
||||||
|
|
||||||
def uso_consultas():
|
def uso_consultas():
|
||||||
ayuda = """
|
ayuda = f"""
|
||||||
[bold blue]ipLocate[/bold blue]
|
[bold blue]ipLocate[/bold blue]
|
||||||
|
|
||||||
[deep_sky_blue1]Reportes según consultas a base de datos.
|
[deep_sky_blue1]Reportes según consultas a base de datos.
|
||||||
@ -369,7 +321,7 @@ def uso_consultas():
|
|||||||
|
|
||||||
|
|
||||||
def uso():
|
def uso():
|
||||||
ayuda = """
|
ayuda = f"""
|
||||||
[bold blue]ipLocate[/bold blue]
|
[bold blue]ipLocate[/bold blue]
|
||||||
|
|
||||||
[deep_sky_blue1]Consulta en ipinfo.io (con o sin token) información sobre IP(s).
|
[deep_sky_blue1]Consulta en ipinfo.io (con o sin token) información sobre IP(s).
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 279 KiB |
45
mapsgen.py
45
mapsgen.py
@ -16,13 +16,8 @@ def map200(geolocs):
|
|||||||
lat = float(loc[0].split(',')[0])
|
lat = float(loc[0].split(',')[0])
|
||||||
lon = float(loc[0].split(',')[1])
|
lon = float(loc[0].split(',')[1])
|
||||||
marca200 = staticmaps.create_latlng(lat, lon)
|
marca200 = staticmaps.create_latlng(lat, lon)
|
||||||
cntxt200.add_object(
|
cntxt200.add_object(staticmaps.Marker(
|
||||||
staticmaps.Marker(
|
marca200, color=staticmaps.parse_color('#00ff29'), size=7))
|
||||||
marca200,
|
|
||||||
color=staticmaps.parse_color('#00ff29'),
|
|
||||||
size=7
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
svg_image = cntxt200.render_svg(1920, 1080)
|
svg_image = cntxt200.render_svg(1920, 1080)
|
||||||
with open(f"{selfpath}/maps/map_200.svg", "w", encoding="utf-8") as f:
|
with open(f"{selfpath}/maps/map_200.svg", "w", encoding="utf-8") as f:
|
||||||
@ -56,25 +51,15 @@ def maps_gen(locs_200, locs_300):
|
|||||||
lat = float(loc[0].split(',')[0])
|
lat = float(loc[0].split(',')[0])
|
||||||
lon = float(loc[0].split(',')[1])
|
lon = float(loc[0].split(',')[1])
|
||||||
marca3 = staticmaps.create_latlng(lat, lon)
|
marca3 = staticmaps.create_latlng(lat, lon)
|
||||||
cntxtAll.add_object(
|
cntxtAll.add_object(staticmaps.Marker(
|
||||||
staticmaps.Marker(
|
marca3, color=staticmaps.parse_color('#b20101'), size=5))
|
||||||
marca3,
|
|
||||||
color=staticmaps.parse_color('#b20101'),
|
|
||||||
size=5
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
for loc in locs_200:
|
for loc in locs_200:
|
||||||
lat = float(loc[0].split(',')[0])
|
lat = float(loc[0].split(',')[0])
|
||||||
lon = float(loc[0].split(',')[1])
|
lon = float(loc[0].split(',')[1])
|
||||||
marca3 = staticmaps.create_latlng(lat, lon)
|
marca3 = staticmaps.create_latlng(lat, lon)
|
||||||
cntxtAll.add_object(
|
cntxtAll.add_object(staticmaps.Marker(
|
||||||
staticmaps.Marker(
|
marca3, color=staticmaps.parse_color('#00ff29'), size=6))
|
||||||
marca3,
|
|
||||||
color=staticmaps.parse_color('#00ff29'),
|
|
||||||
size=6
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
svg_image = cntxtAll.render_svg(1920, 1080)
|
svg_image = cntxtAll.render_svg(1920, 1080)
|
||||||
with open(f"{selfpath}/maps/map_all.svg", "w", encoding="utf-8") as f:
|
with open(f"{selfpath}/maps/map_all.svg", "w", encoding="utf-8") as f:
|
||||||
@ -93,25 +78,15 @@ def maps_thumbs(locs_200, locs_300):
|
|||||||
lat = float(loc[0].split(',')[0])
|
lat = float(loc[0].split(',')[0])
|
||||||
lon = float(loc[0].split(',')[1])
|
lon = float(loc[0].split(',')[1])
|
||||||
demo300 = staticmaps.create_latlng(lat, lon)
|
demo300 = staticmaps.create_latlng(lat, lon)
|
||||||
cntxtdemo.add_object(
|
cntxtdemo.add_object(staticmaps.Marker(
|
||||||
staticmaps.Marker(
|
demo300, color=staticmaps.parse_color('#b20101'), size=4))
|
||||||
demo300,
|
|
||||||
color=staticmaps.parse_color('#b20101'),
|
|
||||||
size=4
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
for loc in locs_200:
|
for loc in locs_200:
|
||||||
lat = float(loc[0].split(',')[0])
|
lat = float(loc[0].split(',')[0])
|
||||||
lon = float(loc[0].split(',')[1])
|
lon = float(loc[0].split(',')[1])
|
||||||
demo200 = staticmaps.create_latlng(lat, lon)
|
demo200 = staticmaps.create_latlng(lat, lon)
|
||||||
cntxtdemo.add_object(
|
cntxtdemo.add_object(staticmaps.Marker(
|
||||||
staticmaps.Marker(
|
demo200, color=staticmaps.parse_color('#00ff29'), size=5))
|
||||||
demo200,
|
|
||||||
color=staticmaps.parse_color('#00ff29'),
|
|
||||||
size=5
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
svg_thumb = cntxtdemo.render_svg(1024, 768)
|
svg_thumb = cntxtdemo.render_svg(1024, 768)
|
||||||
with open(f"{selfpath}/maps/map_thumb.svg", "w", encoding="utf-8") as f:
|
with open(f"{selfpath}/maps/map_thumb.svg", "w", encoding="utf-8") as f:
|
||||||
|
326
sql_alch.py
326
sql_alch.py
@ -2,23 +2,15 @@ import os
|
|||||||
import time
|
import time
|
||||||
import subprocess
|
import subprocess
|
||||||
from consultas.querys_sqlite import get_geoloc
|
from consultas.querys_sqlite import get_geoloc
|
||||||
from iplocate import (
|
from iplocate import requests, token, filtro_ip_propia, selfpath, parser, log_usage, valid_ip
|
||||||
requests,
|
|
||||||
token,
|
|
||||||
filtro_ip_propia,
|
|
||||||
selfpath,
|
|
||||||
parser,
|
|
||||||
log_usage,
|
|
||||||
valid_ip
|
|
||||||
)
|
|
||||||
from json import loads
|
from json import loads
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import relationship, sessionmaker
|
from sqlalchemy.orm import relationship, sessionmaker
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy import Column, Integer, String, Sequence, update
|
from sqlalchemy import Column, Integer, String, Sequence, update
|
||||||
# from sqlalchemy.orm.session import Session
|
from sqlalchemy.orm.session import Session
|
||||||
from sqlalchemy.sql.expression import select # , distinct
|
from sqlalchemy.sql.expression import distinct, select
|
||||||
from sqlalchemy.sql.schema import ForeignKey
|
from sqlalchemy.sql.schema import ForeignKey
|
||||||
from rich.progress import Progress, track
|
from rich.progress import Progress, track
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
@ -37,40 +29,35 @@ class Registro(Base):
|
|||||||
"""Definición de tabla 'Registro'"""
|
"""Definición de tabla 'Registro'"""
|
||||||
|
|
||||||
__tablename__ = 'registro'
|
__tablename__ = 'registro'
|
||||||
ip = Column(String, primary_key=True)
|
ip = Column(String, primary_key=True)
|
||||||
hostname = Column(String, nullable=True)
|
hostname = Column(String, nullable=True)
|
||||||
anycast = Column(String, nullable=True)
|
anycast = Column(String, nullable=True)
|
||||||
cuidad = Column(String, nullable=True)
|
cuidad = Column(String, nullable=True)
|
||||||
region = Column(String, nullable=True)
|
region = Column(String, nullable=True)
|
||||||
pais = Column(String, nullable=True)
|
pais = Column(String, nullable=True)
|
||||||
geoloc = Column(String, nullable=True)
|
geoloc = Column(String, nullable=True)
|
||||||
organizacion = Column(String, nullable=True)
|
organizacion = Column(String, nullable=True)
|
||||||
fecha_reg = Column(Integer, default=int(time.mktime(time.localtime())))
|
fecha_reg = Column(Integer, default=int(time.mktime(time.localtime())))
|
||||||
tzone = Column(String, nullable=True)
|
tzone = Column(String, nullable=True)
|
||||||
cod_post = Column(String, nullable=True)
|
cod_post = Column(String, nullable=True)
|
||||||
visitas = relationship(
|
#link = Column(String, nullable=True)
|
||||||
"Visita",
|
visitas = relationship("Visita",
|
||||||
order_by="Visita.id",
|
order_by="Visita.id",
|
||||||
back_populates="visita_ip",
|
back_populates="visita_ip",
|
||||||
cascade="all, delete, delete-orphan"
|
cascade="all, delete, delete-orphan")
|
||||||
)
|
|
||||||
|
|
||||||
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(
|
return time.asctime(time.localtime(int(self.fecha_reg.__repr__())))
|
||||||
time.localtime(
|
|
||||||
int(self.fecha_reg.__repr__())
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
|
# print('en repr')
|
||||||
try:
|
try:
|
||||||
rep = f'ip={self.ip};host={self.hostname};' \
|
rep = f'ip={self.ip};host={self.hostname};anycast={self.anycast};'+\
|
||||||
f'anycast={self.anycast};cuidad={self.cuidad};' \
|
f'cuidad={self.cuidad};region={self.region};pais={self.pais};'+\
|
||||||
f'region={self.region};pais={self.pais};' \
|
f'geoloc={self.geoloc};organizacion={self.organizacion};'+\
|
||||||
f'geoloc={self.geoloc};organizacion={self.organizacion};' \
|
f'fecha_reg={self.get_fecha()};tzone={self.tzone};cod_post={self.cod_post}'
|
||||||
f'fecha_reg={self.get_fecha()};tzone={self.tzone};' \
|
# print('Repr:', rep)
|
||||||
f'cod_post={self.cod_post}'
|
|
||||||
return rep
|
return rep
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception :', ex)
|
print('Exception :', ex)
|
||||||
@ -80,22 +67,18 @@ 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'))
|
||||||
cod_html = Column(Integer)
|
cod_html = Column(Integer)
|
||||||
fecha = Column(Integer)
|
fecha = Column(Integer)
|
||||||
metodo = Column(String, default='---')
|
metodo = Column(String, default='---')
|
||||||
consulta = Column(String, default='---')
|
consulta = Column(String, default='---')
|
||||||
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(
|
return time.asctime(time.localtime(int(self.fecha.__repr__())))
|
||||||
time.localtime(
|
|
||||||
int(self.fecha.__repr__())
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def consulta_registro(self):
|
def consulta_registro(self):
|
||||||
return True if self.registro == 1 else False
|
return True if self.registro == 1 else False
|
||||||
@ -103,9 +86,8 @@ class Visita(Base):
|
|||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
"""Representación en cadena de texto del los datos en tabla"""
|
"""Representación en cadena de texto del los datos en tabla"""
|
||||||
try:
|
try:
|
||||||
rep = f'id={self.id},ip={self.ip},html={self.cod_html},' \
|
rep = f'id={self.id},ip={self.ip},html={self.cod_html},'\
|
||||||
f'fecha={self.get_fecha()},metodo={self.metodo}' \
|
f'fecha={self.get_fecha()},metodo={self.metodo},request={self.consulta}'
|
||||||
f',request={self.consulta}'
|
|
||||||
return rep
|
return rep
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception :', ex)
|
print('Exception :', ex)
|
||||||
@ -114,6 +96,7 @@ class Visita(Base):
|
|||||||
|
|
||||||
engine = create_engine(base_de_datos)
|
engine = create_engine(base_de_datos)
|
||||||
Base.metadata.create_all(engine)
|
Base.metadata.create_all(engine)
|
||||||
|
# Base.metadata.create_all(engine.execution_options(synchronize_session="fetch"))
|
||||||
Session = sessionmaker(bind=engine)
|
Session = sessionmaker(bind=engine)
|
||||||
session = Session()
|
session = Session()
|
||||||
|
|
||||||
@ -129,7 +112,7 @@ 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)
|
||||||
"""
|
"""
|
||||||
@ -162,11 +145,7 @@ def ip_registrada(ip):
|
|||||||
en tabla 'Visita' para ip pasada como argumento.
|
en tabla 'Visita' para ip pasada como argumento.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip_reg = session.query(Visita).filter(
|
ip_reg = session.query(Visita).filter(Visita.ip == ip).filter(Visita.registro == 1).first()
|
||||||
Visita.ip == ip
|
|
||||||
).filter(
|
|
||||||
Visita.registro == 1
|
|
||||||
).first()
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception', ex)
|
print('Exception', ex)
|
||||||
ip_reg = None
|
ip_reg = None
|
||||||
@ -175,29 +154,20 @@ def ip_registrada(ip):
|
|||||||
|
|
||||||
def carga_access_log(log):
|
def carga_access_log(log):
|
||||||
"""Procesa logs del tipo access, filtra IPs propias (publica y locales),
|
"""Procesa logs del tipo access, filtra IPs propias (publica y locales),
|
||||||
acorta las peticiones donde es necesario, convierte fechas a formato unix
|
acorta los donde es necesario, convierte fechas a formato unix epoch,
|
||||||
epoch, los añade a la session para la tabla 'Visita'.
|
los añade a session para tabla 'Visita'.
|
||||||
Finalmente realiza la transaccion utilizando clase Progres() del modulo
|
Finalmente realiza la transaccion utilizando clase Progres() del modulo rich.
|
||||||
rich. Borra el log procesado."""
|
Y borra el log procesado.
|
||||||
|
"""
|
||||||
if os.path.exists(log):
|
if os.path.exists(log):
|
||||||
nombre_log = log.split('/')[-1]
|
nombre_log = log.split('/')[-1]
|
||||||
console.print(
|
console.print(f'[yellow]Procesando [[/yellow]{nombre_log}[yellow]][/yellow]')
|
||||||
f'[yellow]Procesando [[/yellow]{nombre_log}[yellow]][/yellow]'
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
with open(log, 'r') as lista:
|
with open(log, 'r') as lista:
|
||||||
try:
|
try:
|
||||||
largo = subprocess.run(
|
largo = subprocess.run(['wc', '-l', log], capture_output=True, text=True)
|
||||||
['wc', '-l', log],
|
|
||||||
capture_output=True,
|
|
||||||
text=True
|
|
||||||
)
|
|
||||||
largo = int(largo.stdout.split(' ')[0])
|
largo = int(largo.stdout.split(' ')[0])
|
||||||
for linea in track(
|
for linea in track(lista, total=largo, description='[blue bold]Cargando [/blue bold]'):
|
||||||
lista,
|
|
||||||
total=largo,
|
|
||||||
description='[blue bold]Cargando [/blue bold]'
|
|
||||||
):
|
|
||||||
ip = linea.split(' ')[0]
|
ip = linea.split(' ')[0]
|
||||||
if filtro_ip_propia(ip):
|
if filtro_ip_propia(ip):
|
||||||
try:
|
try:
|
||||||
@ -209,19 +179,19 @@ def carga_access_log(log):
|
|||||||
metodo = linea.split('"')[1].split(' ')[0]
|
metodo = linea.split('"')[1].split(' ')[0]
|
||||||
if len(metodo) > 10 or len(metodo) < 2:
|
if len(metodo) > 10 or len(metodo) < 2:
|
||||||
metodo = '---'
|
metodo = '---'
|
||||||
except Exception:
|
except Exception as ex:
|
||||||
metodo = '---'
|
metodo = '---'
|
||||||
try:
|
try:
|
||||||
url = linea.split('"')[1].split(' ')[1]
|
url = linea.split('"')[1].split(' ')[1]
|
||||||
if len(url) > 254:
|
if len(url) > 254:
|
||||||
url = url[:252]+'...'
|
url = url[:252]+'...'
|
||||||
except Exception:
|
except Exception as ex:
|
||||||
url = '---'
|
url = '---'
|
||||||
try:
|
try:
|
||||||
codigo = int(linea.split('"')[2].split(' ')[1])
|
codigo = int(linea.split('"')[2].split(' ')[1])
|
||||||
if len(str(codigo)) != 3:
|
if len(str(codigo)) != 3:
|
||||||
codigo = 0
|
codigo = 0
|
||||||
except Exception:
|
except Exception as ex:
|
||||||
codigo = 0
|
codigo = 0
|
||||||
try:
|
try:
|
||||||
fecha = linea.split(' ')[3][1:]
|
fecha = linea.split(' ')[3][1:]
|
||||||
@ -230,94 +200,64 @@ def carga_access_log(log):
|
|||||||
fecha = None
|
fecha = None
|
||||||
print('Exception split Fecha:', ex)
|
print('Exception split Fecha:', ex)
|
||||||
if ip_registrada(ip):
|
if ip_registrada(ip):
|
||||||
session.add(
|
session.add(Visita(ip=ip,
|
||||||
Visita(
|
cod_html=codigo,
|
||||||
ip=ip,
|
fecha=fecha,
|
||||||
cod_html=codigo,
|
metodo=metodo,
|
||||||
fecha=fecha,
|
consulta=url,
|
||||||
metodo=metodo,
|
registro=1))
|
||||||
consulta=url,
|
|
||||||
registro=1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
session.add(
|
session.add(Visita(ip=ip,
|
||||||
Visita(
|
cod_html=codigo,
|
||||||
ip=ip,
|
fecha=fecha,
|
||||||
cod_html=codigo,
|
metodo=metodo,
|
||||||
fecha=fecha,
|
consulta=url))
|
||||||
metodo=metodo,
|
|
||||||
consulta=url
|
|
||||||
)
|
|
||||||
)
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception: ', ex)
|
print('Exception: ', ex)
|
||||||
try:
|
try:
|
||||||
with Progress() as prog, session:
|
with Progress() as prog, session:
|
||||||
task1 = prog.add_task(
|
task1 = prog.add_task("[yellow bold]Guardando[/yellow bold]", total=len(session.new))
|
||||||
"[yellow bold]Guardando[/yellow bold]",
|
|
||||||
total=len(session.new)
|
|
||||||
)
|
|
||||||
session.commit()
|
session.commit()
|
||||||
while not prog.finished:
|
while not prog.finished:
|
||||||
prog.update(task1, advance=0.1)
|
prog.update(task1, advance=0.1)
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('Exception Progress: ', ex)
|
print('Exception Progress: ', ex)
|
||||||
console.print(
|
console.print('[magenta] - Carga completa.. borrando log[/magenta]\n')
|
||||||
'[magenta] - Carga completa.. borrando log[/magenta]\n'
|
|
||||||
)
|
|
||||||
os.remove(log)
|
os.remove(log)
|
||||||
return True
|
return True
|
||||||
except Exception:
|
except:
|
||||||
console.print(
|
console.print(f'[red]Error al intentar abrir/cargar: [{log}[/red]]\n')
|
||||||
f'[red]Error al intentar abrir/cargar: [{log}[/red]]\n'
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
console.print(
|
console.print(f'[bold red]Log: [[/bold red]{log}[bold red]] inexistente.[/bold red]\n')
|
||||||
f'[bold red]Log: [[/bold red]{log}[bold red]] '
|
|
||||||
'inexistente.[/bold red]\n'
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def carga_error_logs(log):
|
def carga_error_logs(log):
|
||||||
"""Procesa logs del tipo error, acorta los donde es necesario, convierte
|
"""Procesa logs del tipo error, acorta los donde es necesario, convierte fechas
|
||||||
fechas a formato unix epoch, filtra IPs propias (publica y locales), los
|
a formato unix epoch, filtra IPs propias (publica y locales), los añade a session
|
||||||
añade a session para tabla 'Visita'.
|
para tabla 'Visita'.
|
||||||
Finalmente realiza la transaccion utilizando clase 'Progress' del modulo
|
Finalmente realiza la transaccion utilizando clase 'Progress' del modulo rich.
|
||||||
rich. Borra el log procesado."""
|
Y borra el log procesado.
|
||||||
|
"""
|
||||||
if os.path.exists(log):
|
if os.path.exists(log):
|
||||||
nombre_log = log.split('/')[-1]
|
nombre_log = log.split('/')[-1]
|
||||||
console.print(
|
console.print(f'[yellow]Procesando [[/yellow]{nombre_log}[yellow]][/yellow]')
|
||||||
f'[yellow]Procesando [[/yellow]{nombre_log}[yellow]][/yellow]'
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
with open(log, 'r') as lista:
|
with open(log, 'r') as lista:
|
||||||
ip, fecha, url, metodo = None, None, None, None
|
ip, fecha, url, metodo = None, None, None, None
|
||||||
try:
|
try:
|
||||||
largo = subprocess.run(
|
largo = subprocess.run(['wc', '-l', log], capture_output=True, text=True)
|
||||||
['wc', '-l', log],
|
|
||||||
capture_output=True,
|
|
||||||
text=True
|
|
||||||
)
|
|
||||||
largo = int(largo.stdout.split(' ')[0])
|
largo = int(largo.stdout.split(' ')[0])
|
||||||
for linea in track(
|
for linea in track(lista, total=largo, description='[blue bold]Cargando [/blue bold]'):
|
||||||
lista,
|
|
||||||
total=largo,
|
|
||||||
description='[blue bold]Cargando [/blue bold]'
|
|
||||||
):
|
|
||||||
linea = linea.split('\n')[0]
|
linea = linea.split('\n')[0]
|
||||||
if (linea.rfind('[notice]') > 0 or linea.rfind('[crit]') > 0):
|
if (linea.rfind('[notice]') > 0 or linea.rfind('[crit]') > 0):
|
||||||
if linea.find('[crit]') > 0:
|
if linea.find('[crit]') > 0:
|
||||||
try:
|
try:
|
||||||
ip = linea.split('client: ')[1].split(',')[0]
|
ip = linea.split('client: ')[1].split(',')[0]
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
log_usage(
|
log_usage('Exception Ip error_log {crit}', ex)
|
||||||
'Exception Ip error_log {crit}',
|
|
||||||
ex
|
|
||||||
)
|
|
||||||
ip = None
|
ip = None
|
||||||
try:
|
try:
|
||||||
fecha = ' '.join(linea.split(' ')[0:2])
|
fecha = ' '.join(linea.split(' ')[0:2])
|
||||||
@ -337,10 +277,7 @@ def carga_error_logs(log):
|
|||||||
try:
|
try:
|
||||||
ip = linea.split('client: ')[1].split(',')[0]
|
ip = linea.split('client: ')[1].split(',')[0]
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
log_usage(
|
log_usage('Exception Ip error_log {notice}', ex)
|
||||||
'Exception Ip error_log {notice}',
|
|
||||||
ex
|
|
||||||
)
|
|
||||||
ip = None
|
ip = None
|
||||||
try:
|
try:
|
||||||
fecha = ' '.join(linea.split(' ')[0:2])
|
fecha = ' '.join(linea.split(' ')[0:2])
|
||||||
@ -361,65 +298,46 @@ def carga_error_logs(log):
|
|||||||
fecha = int(fecha_error_to_epoch(fecha))
|
fecha = int(fecha_error_to_epoch(fecha))
|
||||||
codigo = 0
|
codigo = 0
|
||||||
if ip_registrada(ip):
|
if ip_registrada(ip):
|
||||||
session.add(
|
session.add(Visita(ip=ip,
|
||||||
Visita(
|
cod_html=codigo,
|
||||||
ip=ip,
|
fecha=fecha,
|
||||||
cod_html=codigo,
|
consulta=url,
|
||||||
fecha=fecha,
|
metodo=metodo,
|
||||||
consulta=url,
|
registro=1))
|
||||||
metodo=metodo,
|
|
||||||
registro=1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
session.add(
|
session.add(Visita(ip=ip,
|
||||||
Visita(
|
cod_html=codigo,
|
||||||
ip=ip,
|
fecha=fecha,
|
||||||
cod_html=codigo,
|
consulta=url,
|
||||||
fecha=fecha,
|
metodo=metodo))
|
||||||
consulta=url,
|
|
||||||
metodo=metodo
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
log_usage('carga error.log', linea)
|
log_usage('carga error.log', linea)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('[Procesando *Error.log] Exception: ', ex)
|
print('[Procesando *Error.log] Exception: ', ex)
|
||||||
try:
|
try:
|
||||||
info_error = f'IP:[{ip}] - FECHA:[{fecha}] - ' \
|
info_error = f'IP:[{ip}] - FECHA:[{fecha}] - METODO:[{metodo}] - URL:[{url}]'
|
||||||
f'METODO:[{metodo}] - URL:[{url}]'
|
|
||||||
log_usage('Exception error.log', info_error)
|
log_usage('Exception error.log', info_error)
|
||||||
except Exception:
|
except:
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
with Progress() as prog, session:
|
with Progress() as prog, session:
|
||||||
task1 = prog.add_task(
|
task1 = prog.add_task("[yellow bold]Guardando[/yellow bold]", total=len(session.new))
|
||||||
"[yellow bold]Guardando[/yellow bold]",
|
|
||||||
total=len(session.new)
|
|
||||||
)
|
|
||||||
session.commit()
|
session.commit()
|
||||||
while not prog.finished:
|
while not prog.finished:
|
||||||
prog.update(task1, advance=0.1)
|
prog.update(task1, advance=0.1)
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
log_usage('Exception error.log - Progress session commit', ex)
|
log_usage('Exception error.log - Progress session commit', ex)
|
||||||
console.print(
|
console.print(f'[magenta] - Carga completa.. borrando log[/magenta]\n')
|
||||||
'[magenta] - Carga completa.. borrando log[/magenta]\n'
|
|
||||||
)
|
|
||||||
os.remove(log)
|
os.remove(log)
|
||||||
return True
|
return True
|
||||||
except Exception:
|
except:
|
||||||
console.print(
|
console.print(f'[red]Error al intentar abrir/cargar: [{log}[/red]]\n')
|
||||||
f'[red]Error al intentar abrir/cargar: [{log}[/red]]\n'
|
log_usage(f'Error al abrir/cargar', log)
|
||||||
)
|
|
||||||
log_usage('Error al abrir/cargar', log)
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
console.print(
|
console.print(f'[bold red]Log: [[/bold red]{log}[bold red]] inexistente.[/bold red]\n')
|
||||||
f'[bold red]Log: [[/bold red]{log}[bold red]]'
|
log_usage(f'Log inexistente', log)
|
||||||
' inexistente.[/bold red]\n'
|
|
||||||
)
|
|
||||||
log_usage('Log inexistente', log)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@ -457,30 +375,25 @@ def carga_registro_ip(ip_info):
|
|||||||
info_dic['tzone'] = ip_info['timezone'] if 'timezone' in ip_info else None
|
info_dic['tzone'] = ip_info['timezone'] if 'timezone' in ip_info else None
|
||||||
info_dic['cod_post'] = ip_info['postal'] if 'postal' in ip_info else None
|
info_dic['cod_post'] = ip_info['postal'] if 'postal' in ip_info else None
|
||||||
try:
|
try:
|
||||||
session.add(
|
session.add(Registro(ip=info_dic['ip'],
|
||||||
Registro(
|
hostname=info_dic['hostname'],
|
||||||
ip=info_dic['ip'],
|
anycast=info_dic['anycast'],
|
||||||
hostname=info_dic['hostname'],
|
cuidad=info_dic['ciudad'],
|
||||||
anycast=info_dic['anycast'],
|
region=info_dic['region'],
|
||||||
cuidad=info_dic['ciudad'],
|
pais=info_dic['pais'],
|
||||||
region=info_dic['region'],
|
geoloc=info_dic['geoloc'],
|
||||||
pais=info_dic['pais'],
|
organizacion=info_dic['organizacion'],
|
||||||
geoloc=info_dic['geoloc'],
|
fecha_reg=int(time.mktime(time.localtime())),
|
||||||
organizacion=info_dic['organizacion'],
|
tzone=info_dic['tzone'],
|
||||||
fecha_reg=int(time.mktime(time.localtime())),
|
cod_post=info_dic['cod_post'],
|
||||||
tzone=info_dic['tzone'],
|
))
|
||||||
cod_post=info_dic['cod_post'],
|
|
||||||
)
|
|
||||||
)
|
|
||||||
session.commit()
|
session.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print('[session.commit(ADD REGISTRO)] Exception: ', ex)
|
print('[session.commit(ADD REGISTRO)] Exception: ', ex)
|
||||||
print('Datos-Dic: ', info_dic)
|
print('Datos-Dic: ', info_dic)
|
||||||
stmt = update(Visita).where(
|
stmt = update(Visita).where(Visita.ip == ip_info['ip']).values(registro=1).\
|
||||||
Visita.ip == ip_info['ip']
|
execution_options(synchronize_session="fetch")
|
||||||
).values(
|
# result = session.execute(stmt)
|
||||||
registro=1
|
|
||||||
).execution_options(synchronize_session="fetch")
|
|
||||||
try:
|
try:
|
||||||
session.execute(stmt)
|
session.execute(stmt)
|
||||||
session.commit()
|
session.commit()
|
||||||
@ -513,9 +426,7 @@ def consulta_db(ip):
|
|||||||
y sus detalles.
|
y sus detalles.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
statement = session.query(
|
statement = session.query(Registro, Visita).join('visitas').filter_by(ip=ip)
|
||||||
Registro, Visita
|
|
||||||
).join('visitas').filter_by(ip=ip)
|
|
||||||
result = session.execute(statement).all()
|
result = session.execute(statement).all()
|
||||||
return result
|
return result
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
@ -530,15 +441,13 @@ def registro_ips():
|
|||||||
statement = select(Visita).filter_by(registro=0)
|
statement = select(Visita).filter_by(registro=0)
|
||||||
with Progress() as progress:
|
with Progress() as progress:
|
||||||
total = len(session.execute(statement).scalars().all())
|
total = len(session.execute(statement).scalars().all())
|
||||||
task1 = progress.add_task(
|
task1 = progress.add_task("[bold blue]Cargando [/bold blue]", total=total)
|
||||||
"[bold blue]Cargando [/bold blue]",
|
|
||||||
total=total
|
|
||||||
)
|
|
||||||
total_ant = total
|
total_ant = total
|
||||||
while not progress.finished:
|
while not progress.finished:
|
||||||
res = session.execute(statement).scalars().first()
|
res = session.execute(statement).scalars().first()
|
||||||
total_act = len(session.execute(statement).scalars().all())
|
total_act = len(session.execute(statement).scalars().all())
|
||||||
avance = total_ant - total_act
|
avance = total_ant - total_act
|
||||||
|
# print('total update:',total,'total_act:', total_act,' Diferencia: ', avance )
|
||||||
total_ant = total_act
|
total_ant = total_act
|
||||||
if res is None:
|
if res is None:
|
||||||
progress.update(task1, advance=avance)
|
progress.update(task1, advance=avance)
|
||||||
@ -547,16 +456,15 @@ def registro_ips():
|
|||||||
ip_info = consulta_ip(ip_actual, True)
|
ip_info = consulta_ip(ip_actual, True)
|
||||||
carga_registro_ip(ip_info)
|
carga_registro_ip(ip_info)
|
||||||
progress.update(task1, advance=avance)
|
progress.update(task1, advance=avance)
|
||||||
console.print(
|
console.print('\n[bold yellow]Registro en base de datos finalizado.[/bold yellow]')
|
||||||
'\n[bold yellow]Registro en base de datos finalizado.[/bold yellow]'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def mapsgen():
|
def mapsgen():
|
||||||
"""Realiza 2 consultas de los datos de columna 'geoloc' de la tabla
|
"""Realiza 2 consultas de los datos de columna 'geoloc' de la tabla 'Registro',
|
||||||
'Registro' según valor de columna 'cod_html' de la tabla 'Visita',
|
según valor de columna 'cod_html' de la tabla 'Visita', para valores 200 y para
|
||||||
para valores 200 y otros. Llama a función maps_gen con estas listas
|
otros valores.
|
||||||
de valores como argumentos."""
|
Llama a función maps_gen con estas listas de valores como argumentos.
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
loc_200 = get_geoloc(200)
|
loc_200 = get_geoloc(200)
|
||||||
loc_300 = get_geoloc(300)
|
loc_300 = get_geoloc(300)
|
||||||
|
Loading…
Reference in New Issue
Block a user