SV* PLCB_op_stats(PLCB_t *object, plcb_SINGLEOP *opinfo) { lcb_CMDSTATS scmd = { 0 }; lcb_error_t err = LCB_SUCCESS; key_from_so(opinfo, &scmd); if (opinfo->cmdbase == PLCB_CMD_KEYSTATS) { scmd.cmdflags = LCB_CMDSTATS_F_KV; } err = lcb_stats3(object->instance, opinfo->cookie, &scmd); return plcb_opctx_return(opinfo, err); }
PyObject * pycbc_Bucket__stats(pycbc_Bucket *self, PyObject *args, PyObject *kwargs) { int rv; int ii; Py_ssize_t ncmds; lcb_error_t err = LCB_ERROR; PyObject *keys = NULL, *is_keystats = NULL; struct pycbc_common_vars cv = PYCBC_COMMON_VARS_STATIC_INIT; static char *kwlist[] = { "keys", "keystats", NULL }; lcb_CMDSTATS cmd = { 0 }; rv = PyArg_ParseTupleAndKeywords(args, kwargs, "|OO", kwlist, &keys, &is_keystats); 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, self, PYCBC_ARGOPT_MULTI, ncmds, 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); 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; } LCB_CMD_SET_KEY(&cmd, key, nkey); if (is_keystats && PyObject_IsTrue(is_keystats)) { cmd.cmdflags |= LCB_CMDSTATS_F_KV; } err = lcb_stats3(self->instance, cv.mres, &cmd); Py_XDECREF(newkey); } } else { err = lcb_stats3(self->instance, cv.mres, &cmd); } if (err != LCB_SUCCESS) { PYCBC_EXCTHROW_SCHED(err); goto GT_DONE; } if (-1 == pycbc_common_vars_wait(&cv, self)) { goto GT_DONE; } GT_DONE: pycbc_common_vars_finalize(&cv, self); return cv.ret; }