return fr_control_message_send(nr->control, rb, FR_CONTROL_ID_INJECT, &my_inject, sizeof(my_inject));
}
+
+int fr_network_stats(fr_network_t const *nr, int num, uint64_t *stats)
+{
+ if (num < 0) return -1;
+ if (num == 0) return 0;
+
+ if (num >= 1) stats[0] = nr->stats.in;
+ if (num >= 2) stats[1] = nr->stats.out;
+ if (num >= 3) stats[2] = nr->stats.dup;
+ if (num >= 4) stats[3] = nr->stats.dropped;
+ if (num >= 5) stats[4] = nr->num_workers;
+
+ if (num <= 5) return num;
+
+ return 5;
+}
int fr_network_worker_add(fr_network_t *nr, fr_worker_t *worker) CC_HINT(nonnull);
void fr_network_listen_read(fr_network_t *nr, fr_listen_t const *listen) CC_HINT(nonnull);
int fr_network_listen_inject(fr_network_t *nr, fr_listen_t *listen, uint8_t const *packet, size_t packet_len, fr_time_t recv_time);
+int fr_network_stats(fr_network_t const *nr, int num, uint64_t *stats) CC_HINT(nonnull);
#ifdef __cplusplus
}
fr_io_stats_t stats;
- int num_decoded; //!< number of messages which have been decoded
- int num_timeouts; //!< number of messages which timed out
- int num_active; //!< number of active requests
+ uint64_t num_decoded; //!< number of messages which have been decoded
+ uint64_t num_timeouts; //!< number of messages which timed out
+ uint64_t num_active; //!< number of active requests
fr_time_tracking_t tracking; //!< how much time the worker has spent doing things.
REQUEST *request;
fr_worker_t *worker = talloc_get_type_abort(uctx, fr_worker_t);
- DEBUG2("TIMER - worker max_request_time - %d active requests", worker->num_active);
+ DEBUG2("TIMER - worker max_request_time - %" PRIu64 " active requests", worker->num_active);
/*
* Look at the oldest requests, and see if they need to
fr_heap_num_elements(worker->runnable),
fr_heap_num_elements(worker->localized.heap),
fr_heap_num_elements(worker->to_decode.heap));
- DEBUG3("\t%srequests %" PRIu64 ", decoded %d, replied %" PRIu64 " active %d",
+ DEBUG3("\t%srequests %" PRIu64 ", decoded %" PRIu64 ", replied %" PRIu64 " active %" PRIu64 "",
worker->name, worker->stats.in, worker->num_decoded,
worker->stats.out, worker->num_active);
}
}
#endif
+
+int fr_worker_stats(fr_worker_t const *worker, int num, uint64_t *stats)
+{
+ if (num < 0) return -1;
+ if (num == 0) return 0;
+
+ if (num >= 1) stats[0] = worker->stats.in;
+ if (num >= 2) stats[1] = worker->stats.out;
+ if (num >= 3) stats[2] = worker->stats.dup;
+ if (num >= 4) stats[3] = worker->stats.dropped;
+ if (num >= 5) stats[4] = worker->num_decoded;
+ if (num >= 6) stats[5] = worker->num_timeouts;
+ if (num >= 7) stats[6] = worker->num_active;
+
+ if (num <= 7) return num;
+
+ return 7;
+}
void fr_worker_debug(fr_worker_t *worker, FILE *fp) CC_HINT(nonnull);
void fr_worker_name(fr_worker_t *worker, char const *name) CC_HINT(nonnull);
fr_channel_t *fr_worker_channel_create(fr_worker_t *worker, TALLOC_CTX *ctx, fr_control_t *master) CC_HINT(nonnull);
+int fr_worker_stats(fr_worker_t const *worker, int num, uint64_t *stats) CC_HINT(nonnull);
#ifdef __cplusplus
}