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