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;
}
}