@@ -16,8 +16,14 @@ Le herramienta está desarrollada con Python. Se utilizan librerías de python p
...
@@ -16,8 +16,14 @@ Le herramienta está desarrollada con Python. Se utilizan librerías de python p
### Importador MásMóvil
### Importador MásMóvil
Está compuesto de un script, `main.py`, se encarga de conectarse al sFTP de MásMóvil, y descargar los archivos de CDRs nuevos y guarda un registro en TB_CDR_Ficheros (tipo = 2) .
Está compuesto de un script, `main.py`, se encarga de conectarse al sFTP de MásMóvil, y descargar los archivos de CDRs nuevos y guarda un registro en TB_CDR_Ficheros (tipo = 3) .
Posteriormente procederemos al procesado de dichos ficheros, guardando cada línea de estos archivos previamente descargados en las tablas `TB_Cdr_Fijos`.
Posteriormente procederemos al procesado de dichos ficheros, guardando cada línea de estos archivos previamente descargados en las tablas `TB_Cdr_Fijos`.
En cada línea aparece la información de cada llamada, el teléfono que realiza la llamada, destino de llamada, duración, entre otros.
En cada línea aparece la información de cada llamada, el teléfono que realiza la llamada, destino de llamada, duración, entre otros.
El script se encuentra alojado en la máquina `debian.utils` con la IP `192.168.2.63`.
El script se encuentra alojado en la máquina `debian.utils` con la IP `192.168.2.63`.
### Descripción proceso
get_cdr_filename_download_fijos_fibra -> Obtiene fecha del último fichero subido procesado, en caso de que halla algún fichero sin procesar obtiene la fecha de creación dicho fichero.
extract_dwh_trafico_from_rar -> Para cada archivo .rar en `self.filename_fijo_download_sftp_path`, busca un archivo que contenga 'DWH_Trafico' en su nombre y lo descarga para procesarlo.
update_insert_date_fijo -> Inserto o actualizo en la tabla TB_CDR_ficheros los registros de los ficheros descargados de **fijos** , poniendo el campo procesado a null.
save_cdr_fijos_into_database -> Procesa los cdr fijos(tipo=3) que esten sin procesar(precessed_at = null) en la tabla TB_CDR_Ficheros y los almacena en TB_Cdr_Fibra
cursor.execute("UPDATE TB_CDR_Ficheros SET tipo = ?, fecha_origen = ?,Num_Reg_Txt = ?, Degradado=?, Mensual=? WHERE filename = ?",3,fecha_creacion_fichero_formateada,lineas_fichero_txt,degradado,mensual,str(cdr_filename))
cursor.execute("UPDATE TB_CDR_Ficheros SET tipo = ?, fecha_origen = ?,Num_Reg_Txt = ? WHERE filename = ?",3,fecha_creacion_fichero_formateada,lineas_fichero_txt,str(cdr_filename))
cursor.commit()
cursor.commit()
message=f'Fichero {cdr_filename} actualizado en la tabla TB_CDR_Ficheros'
message=f'Fichero {cdr_filename} actualizado en la tabla TB_CDR_Ficheros'
logging.info(message)
logging.info(message)
...
@@ -196,10 +214,11 @@ class ManagerCdrFijosFibra:
...
@@ -196,10 +214,11 @@ class ManagerCdrFijosFibra:
logging.info(message)
logging.info(message)
""" def save_cdr_fijos_into_database(self):
defsave_cdr_fijos_into_database(self):
""
"""
Procesa los cdr fijos(tipo=3) que esten sin procesar(precessed_at = null) en la tabla TB_CDR_Ficheros
Procesa los cdr fijos(tipo=3) que esten sin procesar(precessed_at = null) en la tabla TB_CDR_Ficheros y los almacena
""
en TB_Cdr_Fibra
"""
withConectorDbWifi()ascursor:
withConectorDbWifi()ascursor:
try:
try:
...
@@ -218,12 +237,203 @@ class ManagerCdrFijosFibra:
...
@@ -218,12 +237,203 @@ class ManagerCdrFijosFibra:
iflen(filenames)!=0:
iflen(filenames)!=0:
# Obtengo una lista con las rutas de los ficheros a procesar
# Obtengo una lista con las rutas de los ficheros a procesar
path_filenames=cdr_list(filenames)
path_filenames=cdr_list(filenames)
#Crea el proceso de cdr de fijos introduciendolo en la tabla TB_Cdr_Fibra
#Crea el proceso de cdr de fijos introduciendolo en la tabla TB_Cdr_Fibra
path_filenames (list): Nombre de la ruta de fichero que hay que procesar
cursor_wifi (Cursor): Cursor DB_wifi
"""
try:
#print(f'Ficheros a procesar: {path_filenames}')
forpath_fileinpath_filenames:
ifos.path.exists(path_file):
withopen(path_file,'r',encoding='utf-8')asf:
lineas=f.readlines()
ifnotlineas:
print(f'⚠️ El fichero está vacío: {path_file}')
continue
nombre_fichero=os.path.basename(path_file)
#En caso de que se halla producido un error en el procesado de un fichero tendremos el num de registros procesados por el que se ha quedado guardado en la bd TB_CDR_ficheros
#con este proceso empezariamos desde el registro donde se quedo
cursor_wifi.execute("SELECT Num_Reg_Pro, Num_Reg_Dup, Num_Reg_Txt FROM TB_CDR_Ficheros WHERE filename = ?",
nombre_fichero,
)
Num_Reg_Pro_d=cursor_wifi.fetchone()
Num_Reg_Pro_db=int(Num_Reg_Pro_d[0])+int(Num_Reg_Pro_d[1])#Total de registros procesados de un fichero por si hay una excepción partir el procesado desde ese registro
Num_Reg_Txt=Num_Reg_Pro_d[2]
time_init=datetime.now()
lineas_save=0
lines_traveled=0# Líneas recorridas
forlineainlineas:
lines_traveled+=1
line_parse=parse_linea_fibra(linea)
ifline_parseisnotNone:
try:
#TODO Si existe lo actualiza si no lo inserta
# Definir los campos clave para identificar si el registro ya existe
campos_clave=(
line_parse["num_origen"],
line_parse["num_destino"],
line_parse["fecha_inicio"],
line_parse["fecha_fin"]
)
# Verificar si ya existe
cursor_wifi.execute("""
SELECT COUNT(*) FROM [bdd_wifi].[dbo].[TB_Cdr_Fibra]
WHERE num_origen = ? AND num_destino = ? AND fecha_inicio = ? AND fecha_fin = ?