Ejemplo n.º 1
0
void
service_tag_copy(struct service_tag_s *dst, struct service_tag_s *src)
{
	if (!dst || !src)
		return;

	g_strlcpy(dst->name, src->name, sizeof(dst->name));

	switch (src->type) {
	case STVT_I64:
		service_tag_set_value_i64(dst, src->value.i);
		return;
	case STVT_REAL:
		service_tag_set_value_float(dst, src->value.r);
		return;
	case STVT_BOOL:
		service_tag_set_value_boolean(dst, src->value.b);
		return;
	case STVT_STR:
		service_tag_set_value_string(dst, src->value.s);
		return;
	case STVT_BUF:
		service_tag_set_value_string(dst, src->value.buf);
		return;
	}
}
Ejemplo n.º 2
0
static void
zero_service_stats(GPtrArray *pa)
{
	int i, max;
	if (!pa)
		return;
	for (i=0,max=pa->len; i<max ;i++) {
		struct service_tag_s *tag;
		tag = g_ptr_array_index(pa,i);
		if (tag->type==STVT_I64 && g_str_has_prefix(tag->name,"stat."))
			service_tag_set_value_i64(tag,0LL);
	}
}
Ejemplo n.º 3
0
static void
_task_register(gpointer p)
{
	if (PSRV(p)->flag_noregister)
		return;

	/* Computes the avg requests rate/time */
	time_t now = oio_ext_monotonic_time () / G_TIME_SPAN_SECOND;

	grid_single_rrd_push (PSRV(p)->gsr_reqcounter, now,
			network_server_stat_getone(PSRV(p)->server,
				g_quark_from_static_string(OIO_STAT_PREFIX_REQ)));
	grid_single_rrd_push (PSRV(p)->gsr_reqtime, now,
			network_server_stat_getone(PSRV(p)->server,
				g_quark_from_static_string(OIO_STAT_PREFIX_TIME)));

	guint64 avg_counter = grid_single_rrd_get_delta(PSRV(p)->gsr_reqcounter,
			now, 4);
	guint64 avg_time = grid_single_rrd_get_delta(PSRV(p)->gsr_reqtime,
			now, 4);

	avg_counter = MACRO_COND(avg_counter != 0, avg_counter, 1);
	avg_time = MACRO_COND(avg_time != 0, avg_time, 1);

	service_tag_set_value_i64(service_info_ensure_tag(PSRV(p)->si->tags,
				"stat.total_reqpersec"), avg_counter / 4);
	service_tag_set_value_i64(service_info_ensure_tag(PSRV(p)->si->tags,
				"stat.total_avreqtime"), (avg_time)/(avg_counter));

	/* send the registration now */
	GError *err = register_namespace_service(PSRV(p)->si);
	if (err) {
		g_message("Service registration failed: (%d) %s", err->code, err->message);
		g_clear_error(&err);
	}
}
static struct service_tag_s *
_srvtag_load_json (const gchar *name, struct json_object *obj)
{
	struct service_tag_s *tag = g_malloc0(sizeof(struct service_tag_s));
	g_strlcpy(tag->name, name, sizeof(tag->name));
	if (json_object_is_type(obj, json_type_int)) {
		service_tag_set_value_i64(tag, json_object_get_int64(obj));
	} else if (json_object_is_type(obj, json_type_string)) {
		service_tag_set_value_string(tag, json_object_get_string(obj));
	} else if (json_object_is_type(obj, json_type_double)) {
		service_tag_set_value_float(tag, json_object_get_double(obj));
	} else if (json_object_is_type(obj, json_type_boolean)) {
		service_tag_set_value_boolean(tag, json_object_get_boolean(obj));
	} else {
		service_tag_set_value_boolean(tag, FALSE);
	}
	return tag;
}