/** Request Couchbase server statistics * * Setup and execute a request for cluster statistics and wait for the result. * * @param instance Couchbase connection instance. * @param cookie Couchbase cookie for returning information from callbacks. * @return Couchbase error object. */ lcb_error_t couchbase_server_stats(lcb_t instance, const void *cookie) { lcb_error_t error; /* couchbase command return */ lcb_server_stats_cmd_t cmd; /* server stats command stuct */ const lcb_server_stats_cmd_t *commands[1]; /* server stats commands array */ /* init commands */ commands[0] = &cmd; memset(&cmd, 0, sizeof(cmd)); /* populate command struct */ cmd.v.v0.name = "tap"; cmd.v.v0.nname = strlen(cmd.v.v0.name); /* get statistics */ if ((error = lcb_server_stats(instance, cookie, 1, commands)) == LCB_SUCCESS) { /* enter event look on sucess */ lcb_wait(instance); } /* return error */ return error; }
PHP_COUCHBASE_LOCAL void php_couchbase_stats_impl(INTERNAL_FUNCTION_PARAMETERS, int oo) { php_couchbase_res *couchbase_res; lcb_error_t retval; php_couchbase_ctx *ctx; lcb_server_stats_cmd_t cmd; const lcb_server_stats_cmd_t *const commands[] = { &cmd }; lcb_t instance; int argflags = oo ? PHP_COUCHBASE_ARG_F_OO : PHP_COUCHBASE_ARG_F_FUNCTIONAL; PHP_COUCHBASE_GET_PARAMS(couchbase_res, argflags, ""); ctx = ecalloc(1, sizeof(php_couchbase_ctx)); ctx->res = couchbase_res; ctx->rv = return_value; couchbase_res->rc = LCB_SUCCESS; instance = couchbase_res->handle; memset(&cmd, 0, sizeof(cmd)); lcb_behavior_set_syncmode(instance, LCB_SYNCHRONOUS); retval = lcb_server_stats(instance, (const void *)ctx, 1, commands); lcb_behavior_set_syncmode(instance, LCB_ASYNCHRONOUS); if (retval == LCB_SUCCESS) { retval = couchbase_res->rc; } else { couchbase_res->rc = retval; } efree(ctx); if (retval != LCB_SUCCESS) { couchbase_report_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, oo, cb_lcb_exception, "Failed to stat: %s", lcb_strerror(instance, retval)); } }
PyObject * pycbc_Connection__stats(pycbc_Connection *self, PyObject *args, PyObject *kwargs) { int rv; int ii; Py_ssize_t ncmds; lcb_error_t err; PyObject *keys = NULL; PyObject *ret = NULL; pycbc_MultiResult *mres = NULL; struct pycbc_common_vars cv = PYCBC_COMMON_VARS_STATIC_INIT; static char *kwlist[] = { "keys", NULL }; rv = PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &keys); if (!rv) { PYCBC_EXCTHROW_ARGS(); return NULL; } if (keys == NULL || PyObject_IsTrue(keys) == 0) { keys = NULL; ncmds = 1; } else { if (!PySequence_Check(keys)) { PYCBC_EXC_WRAP(PYCBC_EXC_ARGUMENTS, 0, "keys argument must be sequence"); return NULL; } ncmds = PySequence_Size(keys); } rv = pycbc_common_vars_init(&cv, ncmds, sizeof(lcb_server_stats_cmd_t), 0); if (rv < 0) { return NULL; } if (keys) { for (ii =0; ii < ncmds; ii++) { char *key; Py_ssize_t nkey; PyObject *newkey = NULL; PyObject *curkey = PySequence_GetItem(keys, ii); lcb_server_stats_cmd_t *cmd = cv.cmds.stats + ii; rv = pycbc_BufFromString(curkey, &key, &nkey, &newkey); if (rv < 0) { PYCBC_EXC_WRAP_KEY(PYCBC_EXC_ARGUMENTS, 0, "bad key type in stats", curkey); goto GT_DONE; } cmd->v.v0.name = key; cmd->v.v0.nname = nkey; cv.cmdlist.stats[ii] = cmd; cv.enckeys[ii] = newkey; } } else { cv.cmdlist.stats[0] = cv.cmds.stats; } mres = (pycbc_MultiResult*)pycbc_multiresult_new(self); err = lcb_server_stats(self->instance, mres, ncmds, cv.cmdlist.stats); if (err != LCB_SUCCESS) { PYCBC_EXCTHROW_SCHED(err); goto GT_DONE; } err = pycbc_oputil_wait_common(self); if (err != LCB_SUCCESS) { PYCBC_EXCTHROW_WAIT(err); goto GT_DONE; } ret = (PyObject*)mres; GT_DONE: pycbc_common_vars_free(&cv); /* Force multi, it's always a MultiResult */ pycbc_make_retval(PYCBC_ARGOPT_MULTI, &ret, &mres); Py_XDECREF(mres); return ret; }