Tareas #114
open
Falla script instalaciones terceros
100%
Description
Se detecta una falla en el script instalaciones_terceros, tanto en Dev como en Prod
2026-08-28 07:15:01,897 INFO Verificando / creando tabla
2026-08-28 07:15:01,910 INFO Insertando nuevos registros desde Giscloud
2026-08-28 07:15:01,992 INFO Giscloud insertados: 0
2026-08-28 07:15:01,993 INFO Insertando nuevos registros desde ServiceNow
2026-08-28 07:15:06,215 ERROR Error durante la carga: duplicate key value violates unique constraint "uq_instalaciones_terceros"
DETAIL: Key (tarea_id, origen)=(WOT0095176, SN_MTTOCORRECTIVO) already exists.
Traceback (most recent call last):
File "/home/ingenieria/BajadaGiscloud/instalaciones_terceros.py", line 175, in
main()
File "/home/ingenieria/BajadaGiscloud/instalaciones_terceros.py", line 157, in main
cur.execute(SQL_INSERT_SN, (today,))
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "uq_instalaciones_terceros"
DETAIL: Key (tarea_id, origen)=(WOT0095176, SN_MTTOCORRECTIVO) already exists.
pgsql-dev
Fri Aug 28 07:15:06 AM -03 2026
Files
Updated by Demo MiGestion365 Admin about 1 month ago
- File clipboard-202608280923-xfb7m.png clipboard-202608280923-xfb7m.png added
- Tracker changed from Errores to Tareas
- Description updated (diff)
Updated by Demo MiGestion365 Admin about 1 month ago
- Description updated (diff)
- Status changed from Nueva to En curso
Updated by Demo MiGestion365 Admin about 1 month ago
Primero corremos la siguiente query en busca de duplicados
SELECT
tarea_id,
origen,
COUNT() AS cantidad
FROM aux.instalaciones_terceros
GROUP BY
tarea_id,
origen
HAVING COUNT() > 1
ORDER BY
cantidad DESC,
tarea_id,
origen;
No arroja duplicados, por lo que el duplicado se genera en la consulta de origen, antes de insertar.
El siguiente paso es comprobar cuántas filas produce la consulta para WOT0095176:
SELECT
i.task_id AS tarea_id,
COUNT(*) AS cantidad
FROM sn.metric m
JOIN sn.instance i
ON i.number = m.instance
JOIN sn.task t
ON t.number = i.task_id
LEFT JOIN cm.ci_sfat_mfat_bfat c
ON c.nombre_cliente = t.cmdb_ci
LEFT JOIN cm.municipio muni
ON ST_Contains(
muni.geom,
ST_SetSRID(
ST_MakePoint(
c.longitud,
c.latitud
),
4326
)
)
WHERE m.metric ILIKE '%CTO DE TERCEROS EN CUADRA%'
AND m.metric_definition = 'Si'
AND c.latitud IS NOT NULL
AND c.longitud IS NOT NULL
AND i.task_id = 'WOT0095176'
GROUP BY
i.task_id;
Esta query me arroja que tengo dos elementos como resultado.
La siguiente query nos ayuda a entender que sucede
SELECT
i.task_id AS tarea_id,
m.instance,
m.metric,
m.metric_definition,
m.sys_created_on,
t.cmdb_ci,
c.nombre_cliente,
c.id_cm,
c.latitud,
c.longitud,
muni.nam AS partido
FROM sn.metric m
JOIN sn.instance i
ON i.number = m.instance
JOIN sn.task t
ON t.number = i.task_id
LEFT JOIN cm.ci_sfat_mfat_bfat c
ON c.nombre_cliente = t.cmdb_ci
LEFT JOIN cm.municipio muni
ON ST_Contains(
muni.geom,
ST_SetSRID(
ST_MakePoint(
c.longitud,
c.latitud
),
4326
)
)
WHERE m.metric ILIKE '%CTO DE TERCEROS EN CUADRA%'
AND m.metric_definition = 'Si'
AND c.latitud IS NOT NULL
AND c.longitud IS NOT NULL
AND i.task_id = 'WOT0095176'
ORDER BY
m.sys_created_on,
c.id_cm,
muni.nam;
El resultado me da dos lineas identicas
WOT0095176 AINST0070708 ¿CTO DE TERCEROS EN CUADRA? - GPON 1_2_2.5 Si 2026-08-27 12:11:13.000 GCAS-R0745-007 GCAS-R0745-007 GCAS0201-SFAT-02-002023-0002 -34.579736 -58.592286 Tres de Febrero
Lo que debo hacer ahora es ver si esos dos registros ya vienen de sn.metric
SELECT
m.*
FROM sn.metric m
JOIN sn.instance i
ON i.number = m.instance
WHERE i.task_id = 'WOT0095176'
AND m.metric ILIKE '%CTO DE TERCEROS EN CUADRA%'
AND m.metric_definition = 'Si'
ORDER BY
m.instance,
m.sys_created_on;
El duplicado ya existe en sn.metric para la misma instancia. La tabla destino está funcionando correctamente al rechazarlo.
Updated by Demo MiGestion365 Admin about 1 month ago
Como la tabla sn.metric se genera a partir del script sn2psql:
tabla_sn='asmt_metric_result'
print(f"Cargando tabla {tabla_sn}")
columnas_sn='instance,actual_value,assessment_group,assign_to_order,instance_question,metric,metric_definition,normalized_value,reference_value,source_id,source_table,string_value,sys_created_by,sys_created_on,sys_updated_on'
df_bajada_SN = query_SN (tabla_sn,columnas_sn,periodo+"&sysparm_display_value=true")
if not df_bajada_SN.empty:
df_bajada_SN["sys_created_on"]=pd.to_datetime(df_bajada_SN["sys_created_on"].astype(str),format='%d-%m-%Y %H:%M:%S',errors='coerce')
df_bajada_SN["sys_updated_on"]=pd.to_datetime(df_bajada_SN["sys_updated_on"].astype(str),format='%d-%m-%Y %H:%M:%S',errors='coerce')
###RF01/06/2025:Agrego el engine de nuevo porque como tarda mucho sino el timeout del postgres lo mata
engine = create_engine(f"postgresql://{username_psql}:{password_psql}@{hostname_psql}:5432/{database_psql}")
tabla_postgres='metric'
export_to_sql(engine, df_bajada_SN ,tabla_postgres)
print(f"Tabla {tabla_postgres} cargada en postgres")
Aparece que el error debe venir de la tabla asmt_metric_result_list de Service Now
Updated by Demo MiGestion365 Admin about 1 month ago
- File clipboard-202608280939-3q01r.png clipboard-202608280939-3q01r.png added
- File clipboard-202608280941-2uqo8.png clipboard-202608280941-2uqo8.png added
El siguiente paso es revisar en ServiceNow la tabla asmt_metric_result filtrando por la instancia:
AINST0070708
En ServiceNow abrimos esta tabla desde el navegador: asmt_metric_result.list
Luego filtramos por:
Instance = AINST0070708
Metric definition = Si
Metric contiene CTO DE TERCEROS EN CUADRA


Updated by Demo MiGestion365 Admin about 1 month ago
Se procede a abrir un reclamo a Soporte:

Updated by Demo MiGestion365 Admin about 1 month ago
- Due date set to 08/28/2026
- Status changed from En curso to Resuelta
- % Done changed from 0 to 100
- Estimated time set to 4:00 h
ERROR DE ANALISIS¶
El problema radicaba en que el script sn2psql utiliza la funcion export_to_sql que hace un append, no un replace. Entonces, me generó dos filas en sn.instance, lo cual lo comprobé con
SELECT *
FROM sn.instance
WHERE number = 'AINST0070708'
ORDER BY
sys_created_on,
sys_updated_on,
upload_date;
Eliminé a mano la fila más vieja y volví a correr el bash /home/ingenieria/BajadaGiscloud/terceros.sh sin problemas.