static void profiling_msg_snapshot (flux_t *h, const flux_msg_t *msg, int flags, const char *msg_action) { h = lookup_clone_ancestor (h); cali_id_t attributes[3]; const void * data[3]; size_t size[3]; // This can get called before the handle is really ready if(! h->prof.initialized) return; int len = 0; if (msg_action) { attributes[len] = h->prof.msg_action; data[len] = msg_action; size[len] = strlen(msg_action); ++len; } int type; flux_msg_get_type (msg, &type); const char *msg_type = flux_msg_typestr (type); if (msg_type) { attributes[len] = h->prof.msg_type; data[len] = msg_type; size[len] = strlen(msg_type); ++len; } const char *msg_topic; if (type != FLUX_MSGTYPE_KEEPALIVE) flux_msg_get_topic (msg, &msg_topic); else msg_topic = "NONE"; /* attributes[len] = h->prof.msg_topic; */ /* data[len] = msg_topic; */ /* size[len] = strlen(msg_topic); */ /* ++len; */ if (type == FLUX_MSGTYPE_EVENT) { uint32_t seq; flux_msg_get_seq (msg, &seq); cali_begin_int (h->prof.msg_seq, seq); } cali_push_snapshot (CALI_SCOPE_PROCESS | CALI_SCOPE_THREAD, len /* n_entries */, attributes /* event_attributes */, data /* event_data */, size /* event_size */); if (type == FLUX_MSGTYPE_EVENT) cali_end (h->prof.msg_seq); }
flux_t *connector_init (const char *path, int flags) { #if HAVE_CALIPER cali_id_t uuid = cali_create_attribute ("flux.uuid", CALI_TYPE_STRING, CALI_ATTR_SKIP_EVENTS); size_t length = strlen(path); cali_push_snapshot ( CALI_SCOPE_PROCESS | CALI_SCOPE_THREAD, 1, &uuid, (const void **)&path, &length); #endif ctx_t *ctx = NULL; if (!path) { errno = EINVAL; goto error; } if (!(ctx = malloc (sizeof (*ctx)))) { errno = ENOMEM; goto error; } memset (ctx, 0, sizeof (*ctx)); ctx->magic = MODHANDLE_MAGIC; if (!(ctx->uuid = strdup (path))) { errno = ENOMEM; goto error; } if (asprintf (&ctx->uri, "inproc://%s", ctx->uuid) < 0) { errno = ENOMEM; goto error; } if (!(ctx->h = flux_handle_create (ctx, &handle_ops, flags))) goto error; return ctx->h; error: if (ctx) { int saved_errno = errno; op_fini (ctx); errno = saved_errno; } return NULL; }