Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);
}