updt: map_thumb + format
This commit is contained in:
parent
60a4bce725
commit
691d045547
@ -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"""
|
||||||
|
11
iplocate.py
11
iplocate.py
@ -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 |
@ -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")
|
||||||
|
|
||||||
|
14
sql_alch.py
14
sql_alch.py
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user