void message_callback_binary(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { ReceiveStats* data_obj = reinterpret_cast<ReceiveStats*>(obj); uint64_t rx_nsec; get_timestamp(rx_nsec); std::lock_guard<std::mutex> guard(data_obj->mutex); uint64_t tx_nsec; get_payload_timestamp_binary(message->payload, message->payloadlen, &tx_nsec); add_to_stats(data_obj, rx_nsec, tx_nsec, message->topic, message->payloadlen); report_stats(data_obj, rx_nsec); }
void lbalance_task_free(struct lbalance_task *task, const struct rusage *usage) { float work_done, duration; unsigned int num_tasks; struct timeval now; struct rusage ru; gettimeofday(&now, NULL); duration = timeval_sub(now, task->start); getrusage(RUSAGE_CHILDREN, &ru); if (usage) { work_done = usage->ru_utime.tv_usec + usage->ru_stime.tv_usec + (usage->ru_utime.tv_sec + usage->ru_stime.tv_sec) * 1000000; } else { /* Take difference in rusage as rusage of that task. */ work_done = timeval_sub(ru.ru_utime, task->lb->prev_usage.ru_utime) + timeval_sub(ru.ru_stime, task->lb->prev_usage.ru_utime); } /* Update previous usage. */ task->lb->prev_usage = ru; /* Record that we ran num_tasks up until now. */ update_tasks_sum(task->lb, &now); /* So, on average, how many tasks were running during this time? */ num_tasks = (task->lb->tasks_sum - task->tasks_sum_start) / duration + 0.5; /* Record the work rate for that many tasks. */ add_to_stats(task->lb, num_tasks, work_done / duration); /* We throw away old stats. */ degrade_stats(task->lb); /* We need to recalculate the target. */ task->lb->target_uptodate = false; /* Remove this task. */ tlist_del_from(&task->lb->tasks, task, list); task->lb->num_tasks--; free(task); }
void message_callback_json(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { std::string payload((char *)message->payload,message->payloadlen); std::cout << HERE() << STR(message->topic) << ' ' << STR(payload) << '\n'; ReceiveStats* data_obj = reinterpret_cast<ReceiveStats*>(obj); uint64_t rx_nsec; get_timestamp(rx_nsec); std::lock_guard<std::mutex> guard(data_obj->mutex); uint64_t tx_nsec; get_payload_timestamp_json(message->payload, message->payloadlen, &tx_nsec); add_to_stats(data_obj, rx_nsec, tx_nsec, message->topic, message->payloadlen); report_stats(data_obj, rx_nsec); }