| Dependency | Reason |
|---|---|
| Task Instance State | Task is in the 'success' state which is not a valid state for execution. The task must be cleared in order to be run. |
| Dagrun Running | Task instance's dagrun was not in the 'running' state but in the state 'success'. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | def join_terrain_files(origin_container, origin_hole_position_blob, origin_hole_information_blob, origin_hole_profile_blob, final_container, final_blob): """ Función que permite juntar archivos terrain en un unico archivo con resumen del pozo Parámetros ---------- origin_container: str Nombre del contenedor donde se encuentra el archivo a limpiar. origin_hole_position_blob: str Nombre del archivo que contiene la posición de los pozos. origin_hole_information_blob: str Nombre del archivo que contiene la información de los pozos. origin_hole_profile_blob: str Nombre del archivo que contiene el perfil de los pozos. final_container: str Nombre del contenedor donde se guardará el archivo limpio. final_blob: str Nombre del archivo que se guardará en el contenedor final. Returns ------- None """ # Read terrain hole position file conn_origin_container = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_container, blob_name=origin_hole_position_blob) download_origin_blob = conn_origin_container.download_blob().readall() data = json.loads(download_origin_blob) df_terrain_hole_position = pd.DataFrame(data['values'], columns=data['headers']) # Read terrain hole information file conn_origin_container = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_container, blob_name=origin_hole_information_blob) download_origin_blob = conn_origin_container.download_blob().readall() data = json.loads(download_origin_blob) df_terrain_hole_information = pd.DataFrame(data['values'], columns=data['headers']) # Read terrain hole profile file conn_origin_container = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_container, blob_name=origin_hole_profile_blob) download_origin_blob = conn_origin_container.download_blob().readall() data = json.loads(download_origin_blob) df_terrain_hole_profile = pd.DataFrame(data['values'], columns=data['headers']) # Merge files df_terrain_hole_profile['hole_id'] = df_terrain_hole_profile['hole_id'].replace('N\\A',np.nan).astype(float) df_terrain_hole_profile['machine_id'] = df_terrain_hole_profile['machine_id'].replace('N\\A',np.nan).astype(float) df_puntos_terrain = df_terrain_hole_profile.merge(df_terrain_hole_position, right_on=['hole_id','machine_id'], left_on=['hole_id', 'machine_id'], how='left', indicator=True, suffixes=('_puntos', '_posiciones')) df_puntos_terrain = df_puntos_terrain.loc[df_puntos_terrain['_merge'] == 'both'] df_puntos_terrain = df_puntos_terrain.drop(columns=['_merge']) df_puntos_terrain_completo = df_puntos_terrain.merge(df_terrain_hole_information, right_on=['hole_id','machine_id'], left_on=['hole_id', 'machine_id'], how='left', indicator=True, suffixes=('_cruce', '_informacion')) df_puntos_terrain_completo = df_puntos_terrain_completo.loc[df_puntos_terrain_completo['_merge'] == 'both'] # Bench correction process df_puntos_terrain_completo = df_puntos_terrain_completo[ ['hole_id', 'machine_id', 'hole_start', 'start_x', 'start_y', 'start_z', 'end_x', 'end_y', 'end_z', 'design_x', 'design_y', 'design_z', 'time_start', 'time_end_informacion', 'name', 'collarelevation', 'depth', 'design_depth' ] ] df_puntos_terrain_completo = df_puntos_terrain_completo.drop_duplicates() multiples_of_16 = [x for x in range(800, 3000) if x % 16 == 0] df_puntos_terrain_completo['bench'] = df_puntos_terrain_completo.apply(lambda x: calculateBenchTerrrain(x, multiples_of_16), axis=1) df_puntos_terrain_completo['bench'] = df_puntos_terrain_completo['bench'] # Write file to blob blob = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=final_container, blob_name=final_blob) json_data = df_puntos_terrain_completo.to_json(index=False, orient='table') blob.upload_blob(json_data, overwrite=True) |
| Attribute | Value |
|---|---|
| dag_id | SierraGorda_HomologateStorage |
| duration | 0.428829 |
| end_date | 2026-01-02 01:00:24.704333+00:00 |
| execution_date | 2026-01-01T13:00:00+00:00 |
| executor_config | {} |
| generate_command | <function TaskInstance.generate_command at 0x72238e9a0040> |
| hostname | 9c59c2b0da67 |
| is_premature | False |
| job_id | 44 |
| key | ('SierraGorda_HomologateStorage', 'Terrain_joinfiles', <Pendulum [2026-01-01T13:00:00+00:00]>, 2) |
| log | <Logger airflow.task (INFO)> |
| log_filepath | /usr/local/airflow/logs/SierraGorda_HomologateStorage/Terrain_joinfiles/2026-01-01T13:00:00+00:00.log |
| log_url | http://localhost:8080/admin/airflow/log?execution_date=2026-01-01T13%3A00%3A00%2B00%3A00&task_id=Terrain_joinfiles&dag_id=SierraGorda_HomologateStorage |
| logger | <Logger airflow.task (INFO)> |
| mark_success_url | http://localhost:8080/success?task_id=Terrain_joinfiles&dag_id=SierraGorda_HomologateStorage&execution_date=2026-01-01T13%3A00%3A00%2B00%3A00&upstream=false&downstream=false |
| max_tries | 0 |
| metadata | MetaData(bind=None) |
| next_try_number | 2 |
| operator | PythonOperator |
| pid | 1714 |
| pool | default_pool |
| prev_attempted_tries | 1 |
| previous_execution_date_success | 2026-01-01 01:00:00+00:00 |
| previous_start_date_success | 2026-01-02 00:40:44.141435+00:00 |
| previous_ti | <TaskInstance: SierraGorda_HomologateStorage.Terrain_joinfiles 2026-01-01 01:00:00+00:00 [success]> |
| previous_ti_success | <TaskInstance: SierraGorda_HomologateStorage.Terrain_joinfiles 2026-01-01 01:00:00+00:00 [success]> |
| priority_weight | 2 |
| queue | default |
| queued_dttm | 2026-01-02 01:00:22.231247+00:00 |
| raw | False |
| run_as_user | None |
| start_date | 2026-01-02 01:00:24.275504+00:00 |
| state | success |
| task | <Task(PythonOperator): Terrain_joinfiles> |
| task_id | Terrain_joinfiles |
| test_mode | False |
| try_number | 2 |
| unixname | airflow |
| Attribute | Value |
|---|---|
| dag | <DAG: SierraGorda_HomologateStorage> |
| dag_id | SierraGorda_HomologateStorage |
| depends_on_past | False |
| deps | {<TIDep(Not In Retry Period)>, <TIDep(Trigger Rule)>, <TIDep(Previous Dagrun State)>} |
| do_xcom_push | True |
| downstream_list | [<Task(PythonOperator): Terrain_homologatefields>] |
| downstream_task_ids | {'Terrain_homologatefields'} |
| None | |
| email_on_failure | True |
| email_on_retry | True |
| end_date | None |
| execution_timeout | None |
| executor_config | {} |
| extra_links | [] |
| global_operator_extra_link_dict | {} |
| inlets | [] |
| lineage_data | None |
| log | <Logger airflow.task.operators (INFO)> |
| logger | <Logger airflow.task.operators (INFO)> |
| max_retry_delay | None |
| on_failure_callback | None |
| on_retry_callback | None |
| on_success_callback | None |
| op_args | [] |
| op_kwargs | {'origin_container': 'raw', 'origin_hole_position_blob': 'SierraGorda/2026-01-02/Terrain_HolePosition.json', 'origin_hole_information_blob': 'SierraGorda/2026-01-02/Terrain_HoleInformation.json', 'origin_hole_profile_blob': 'SierraGorda/2026-01-02/Terrain_HoleProfile.json', 'final_container': 'processed', 'final_blob': 'SierraGorda/BrightBoard/Terrain/2026-01-02/TerrainFile.json'} |
| operator_extra_link_dict | {} |
| operator_extra_links | () |
| outlets | [] |
| owner | pedro |
| params | {} |
| pool | default_pool |
| priority_weight | 1 |
| priority_weight_total | 2 |
| provide_context | False |
| queue | default |
| resources | None |
| retries | 0 |
| retry_delay | 0:05:00 |
| retry_exponential_backoff | False |
| run_as_user | None |
| schedule_interval | 0,0 13,1 * * * |
| shallow_copy_attrs | ('python_callable', 'op_kwargs') |
| sla | None |
| start_date | 2023-04-22T00:00:00+00:00 |
| subdag | None |
| task_concurrency | None |
| task_id | Terrain_joinfiles |
| task_type | PythonOperator |
| template_ext | [] |
| template_fields | ('templates_dict', 'op_args', 'op_kwargs') |
| templates_dict | None |
| trigger_rule | all_success |
| ui_color | #ffefeb |
| ui_fgcolor | #000 |
| upstream_list | [] |
| upstream_task_ids | set() |
| wait_for_downstream | False |
| weight_rule | downstream |