platform_logging

{% macro job_logging_insert_update(arg_status) %}
{% if arg_status == 'In Progress' %}
  {% set sql %}
    insert into {{ target.database }}.LOGGING.PLATFORM_LOGS
    (
      BATCH_RUN_ID
     ,BATCH_NAME
     ,PROJECT_NAME
     ,JOB_NAME
     ,JOB_STATUS
     ,JOB_START_TIME
     ,JOB_END_TIME
     ,INVOCATION_ID
     ,TOOL_NAME
     ,JOB_EXECUTED_BY
     ,ETL_PROC_WID
     )
    SELECT
       MD5_NUMBER_LOWER64('{{invocation_id}}') AS BATCH_RUN_ID
      ,'{{ var('batch_name') }}'               AS BATCH_NAME /*Variable from dbt run command else take it from project config*/
      ,'{{ project_name }}' AS PROJECT_NAME
      ,'{{ this }}'         AS JOB_NAME
      ,'{{ arg_status }}'   AS JOB_STATUS
      ,current_timestamp()::timestamp_ntz AS JOB_START_TIME
      ,NULL                 AS JOB_END_TIME
      ,'{{invocation_id}}'  AS INVOCATION_ID
      ,'DBT'                AS TOOL_NAME
      ,'{{target.user}}'    AS JOB_EXECUTED_BY
      ,MAX(TRUNCATE(DATE_PART(EPOCH_SECOND, current_timestamp()::timestamp_ntz)/60)) AS ETL_PROC_WID ;

  {% endset %}
{% else %}
  {% set sql %}
    update {{ target.database }}.LOGGING.PLATFORM_LOGS
    set JOB_STATUS='Completed',
        JOB_END_TIME=current_timestamp()::timestamp_ntz
    where INVOCATION_ID='{{invocation_id}}'
    and JOB_NAME='{{ this }}'
    and JOB_STATUS='In Progress';

    MERGE INTO {{ target.database }}.EDW_CONFIG.DBT_MODEL_LAST_RUN AS target_tbl
    USING (select JOB_NAME, max(job_start_time) as Last_Batch_Start_Time from {{ target.database }}.LOGGING.PLATFORM_LOGS
            where  batch_name='master_batch'
            and JOB_NAME = '{{ this }}'
            and batch_run_id not in(select batch_run_id
                             from  {{ target.database }}.LOGGING.PLATFORM_LOGS
                             where job_status='Failed'
                             and  batch_name='master_batch')  group by JOB_NAME) AS source_tbl
          on      target_tbl.JOB_NAME =  source_tbl.JOB_NAME
          when matched then
      update set target_tbl.Last_Batch_Start_Time = source_tbl.Last_Batch_Start_Time
          when not matched then
      insert(JOB_NAME,LAST_BATCH_START_TIME ) values(source_tbl.JOB_NAME, source_tbl.Last_Batch_Start_Time);

  {% endset %}
{% endif %}
{% do run_query(sql) %}
{%- endmacro %}

{% macro batch_results_update(results) %}

  {% if execute %}
  {# { log("========== Begin Summary ==========", info=True) }#}
  {% for res in results  -%}
    {% if res.status == 'error' %}
      {% set error_messages -%}
          message: {{ res.message |replace("'","")  }}
      {%- endset %}
      {% set sql -%}
        update {{ target.database }}.LOGGING.PLATFORM_LOGS
        set JOB_STATUS='Failed',
            JOB_END_TIME=current_timestamp()::timestamp_ntz,
            ERROR_DETAILS='{{ error_messages }}'
        where INVOCATION_ID='{{invocation_id}}'
        and split_part(JOB_NAME,'.',3) = '{{ res.node.alias }}'
        AND JOB_STATUS='In Progress';
        commit;
      {% endset %}
      {% do run_query(sql) %}
    {% endif %}
    {#{ log(error_messages, info=True) }#}
  {% endfor %}
  {#{ log("========== End Summary ==========", info=True) }#}
  {% endif %}
{% endmacro %}