static void qdr_agent_write_column_CT()

in src/router_core/agent_link.c [105:292]


static void qdr_agent_write_column_CT(qdr_core_t *core, qd_composed_field_t *body, int col, qdr_link_t *link)
{
    char *text = 0;

    if (!link)
        return;

    switch(col) {
    case QDR_LINK_NAME: {
        if (link->name)
            qd_compose_insert_string(body, link->name);
        else
            qd_compose_insert_null(body);
        break;
    }

    case QDR_LINK_IDENTITY: {
        char id[100];
        snprintf(id, 100, "%"PRId64, link->identity);
        qd_compose_insert_string(body, id);
        break;
    }

    case QDR_LINK_TYPE:
        qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.link");
        break;

    case QDR_LINK_LINK_NAME:
        qd_compose_insert_string(body, link->name);
        break;

    case QDR_LINK_LINK_TYPE:
        qd_compose_insert_string(body, qd_link_type_name(link->link_type));
        break;

    case QDR_LINK_LINK_DIR:
        qd_compose_insert_string(body, link->link_direction == QD_INCOMING ? "in" : "out");
        break;

    case QDR_LINK_OWNING_ADDR:
        if(link->owning_addr)
            qd_compose_insert_string(body, address_key(link->owning_addr));
        else if (link->connected_link && link->connected_link->terminus_addr)
            qd_compose_insert_string(body, link->connected_link->terminus_addr);
        else if (link->terminus_addr)
            qd_compose_insert_string(body, link->terminus_addr);
        else
            qd_compose_insert_null(body);
        break;

    case QDR_LINK_CAPACITY:
        qd_compose_insert_uint(body, link->capacity);
        break;

    case QDR_LINK_PEER:
        if (link->connected_link) {
            char id[100];
            snprintf(id, 100, "%"PRId64, link->connected_link->identity);
            qd_compose_insert_string(body, id);
        } else
            qd_compose_insert_null(body);
        break;

    case QDR_LINK_UNDELIVERED_COUNT:
        qd_compose_insert_ulong(body, DEQ_SIZE(link->undelivered));
        break;

    case QDR_LINK_UNSETTLED_COUNT:
        qd_compose_insert_ulong(body, DEQ_SIZE(link->unsettled));
        break;

    case QDR_LINK_DELIVERY_COUNT:
        qd_compose_insert_ulong(body, link->total_deliveries);
        break;

    case QDR_LINK_CONNECTION_ID: {
        char id[100];
        snprintf(id, 100, "%"PRId64, link->conn->identity);
        qd_compose_insert_string(body, id);
        break;
    }

    case QDR_LINK_ADMIN_STATE:
        text = link->admin_enabled ? "enabled" : "disabled";
        qd_compose_insert_string(body, text);
        break;

    case QDR_LINK_OPER_STATE:
        switch (link->oper_status) {
        case QDR_LINK_OPER_UP:        text = "up";        break;
        case QDR_LINK_OPER_DOWN:      text = "down";      break;
        case QDR_LINK_OPER_QUIESCING: text = "quiescing"; break;
        case QDR_LINK_OPER_IDLE:      text = "idle";      break;
        default:
            text = 0;
        }
        if (!!text)
            qd_compose_insert_string(body, text);
        else
            qd_compose_insert_null(body);
        break;

    case QDR_LINK_PRESETTLED_COUNT:
        qd_compose_insert_ulong(body, link->presettled_deliveries);
        break;

    case QDR_LINK_DROPPED_PRESETTLED_COUNT: {
        qd_compose_insert_ulong(body, link->dropped_presettled_deliveries);
        break;
    }

    case QDR_LINK_ACCEPTED_COUNT:
        qd_compose_insert_ulong(body, link->accepted_deliveries);
        break;

    case QDR_LINK_REJECTED_COUNT:
        qd_compose_insert_ulong(body, link->rejected_deliveries);
        break;

    case QDR_LINK_RELEASED_COUNT:
        qd_compose_insert_ulong(body, link->released_deliveries);
        break;

    case QDR_LINK_MODIFIED_COUNT:
        qd_compose_insert_ulong(body, link->modified_deliveries);
        break;

    case QDR_LINK_DELAYED_1SEC:
        qd_compose_insert_ulong(body, link->deliveries_delayed_1sec);
        break;

    case QDR_LINK_DELAYED_10SEC:
        qd_compose_insert_ulong(body, link->deliveries_delayed_10sec);
        break;

    case QDR_LINK_DELIVERIES_STUCK:
        qd_compose_insert_ulong(body, link->deliveries_stuck);
        break;

    case QDR_LINK_INGRESS_HISTOGRAM:
        if (link->ingress_histogram) {
            qd_compose_start_list(body);
            for (int i = 0; i < qd_bitmask_width(); i++)
                qd_compose_insert_ulong(body, link->ingress_histogram[i]);
            qd_compose_end_list(body);
        } else
            qd_compose_insert_null(body);
        break;

    case QDR_LINK_PRIORITY:
        qd_compose_insert_uint(body, link->priority);
        break;

    case QDR_LINK_SETTLE_RATE: {
        uint32_t delta_time = qdr_core_uptime_ticks(core) - link->core_ticks;
        if (delta_time > 0) {
            if (delta_time > QDR_LINK_RATE_DEPTH)
                delta_time = QDR_LINK_RATE_DEPTH;
            for (uint8_t delta_slots = 0; delta_slots < delta_time; delta_slots++) {
                link->rate_cursor = (link->rate_cursor + 1) % QDR_LINK_RATE_DEPTH;
                link->settled_deliveries[link->rate_cursor] = 0;
            }
            link->core_ticks = qdr_core_uptime_ticks(core);
        }

        uint64_t total = 0;
        for (uint8_t i = 0; i < QDR_LINK_RATE_DEPTH; i++)
            total += link->settled_deliveries[i];
        qd_compose_insert_uint(body, total / QDR_LINK_RATE_DEPTH);
    }
        break;

    case QDR_LINK_CREDIT_AVAILABLE:
        qd_compose_insert_uint(body, link->credit_reported);
        break;

    case QDR_LINK_ZERO_CREDIT_SECONDS:
        if (link->zero_credit_time == 0)
            qd_compose_insert_uint(body, 0);
        else
            qd_compose_insert_uint(body, qdr_core_uptime_ticks(core) - link->zero_credit_time);
        break;

    default:
        qd_compose_insert_null(body);
        break;
    }
}