static void s_serialize_and_publish_defender_report()

in source/device_defender.c [759:805]


static void s_serialize_and_publish_defender_report(
    struct aws_iotdevice_defender_task *defender_task,
    struct aws_iotdevice_metric_network_transfer *totals,
    struct aws_iotdevice_metric_network_transfer *delta_xfer,
    struct aws_array_list *net_conns,
    const size_t custom_metrics_len,
    struct defender_custom_metric_data *custom_metric_data) {
    uint64_t report_id = s_defender_report_id_epoch_time_ms(defender_task);
    struct aws_byte_buf json_report_buf;
    AWS_ZERO_STRUCT(json_report_buf);

    if (AWS_OP_SUCCESS == s_get_metric_report_json(
                              &json_report_buf,
                              defender_task,
                              report_id,
                              delta_xfer,
                              net_conns,
                              custom_metrics_len,
                              custom_metric_data)) {
        defender_task->previous_net_xfer.bytes_in = totals->bytes_in;
        defender_task->previous_net_xfer.bytes_out = totals->bytes_out;
        defender_task->previous_net_xfer.packets_in = totals->packets_in;
        defender_task->previous_net_xfer.packets_out = totals->packets_out;

        struct aws_byte_cursor report = aws_byte_cursor_from_buf(&json_report_buf);

        AWS_LOGF_TRACE(
            AWS_LS_IOTDEVICE_DEFENDER_TASK,
            "id=%p: Full report: " PRInSTR,
            (void *)defender_task,
            AWS_BYTE_CURSOR_PRI(report));

        void *userdata = defender_task->connection ? defender_task : defender_task->config.callback_userdata;
        if (AWS_OP_ERR == defender_task->publish_fn(report, userdata)) {
            s_invoke_failure_callback(&defender_task->config, false, AWS_ERROR_IOTDEVICE_DEFENDER_PUBLISH_FAILURE);
            AWS_LOGF_DEBUG(
                AWS_LS_IOTDEVICE_DEFENDER_TASK,
                "id=%p: Failed to publish report: %s",
                (void *)defender_task,
                aws_error_name(aws_last_error()));
        } else {
            AWS_LOGF_DEBUG(
                AWS_LS_IOTDEVICE_DEFENDER_TASK, "id=%p: Successfully published report", (void *)defender_task);
        }
        aws_byte_buf_clean_up(&json_report_buf);
    }
}