static PyObject * p_hdf_set_attr (PyObject *self, PyObject *args) { HDFObject *ho = (HDFObject *)self; PyObject *rv; char *name, *value, *key; NEOERR *err; if (!PyArg_ParseTuple(args, "ssO:setAttr(name, key, value)", &name, &key, &rv)) return NULL; if (PyString_Check(rv)) { value = PyString_AsString(rv); } else if (rv == Py_None) { value = NULL; } else { return PyErr_Format(PyExc_TypeError, "Invalid type for value, expected None or string"); } err = hdf_set_attr (ho->data, name, key, value); if (err) return p_neo_error(err); rv = Py_None; Py_INCREF(rv); return rv; }
NEOERR* system_who_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { STRING str; string_init(&str); mdb_conn *db = hash_lookup(dbh, "trace"); char *mname; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); hdf_set_int_value(cgi->hdf, PRE_QUERY".type", TRACE_TYPE_PAGEVIEW); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.who"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "emap", _COL_EMAP_WHO, " %s GROUP BY sender ORDER BY min(intime) DESC LIMIT 100", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_WHO, PRE_OUTPUT".who", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); string_clear(&str); hdf_set_attr(cgi->hdf, PRE_OUTPUT".who", "type", "array"); return STATUS_OK; }
NEOERR* system_view_detail_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { STRING str; string_init(&str); mdb_conn *db = hash_lookup(dbh, "trace"); char *mname; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.viewdetail"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "emap", _COL_EMAP_VIEW_DETAIL, " %s ORDER BY intime LIMIT 100", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_VIEW_DETAIL, PRE_OUTPUT".details", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); string_clear(&str); hdf_set_attr(cgi->hdf, PRE_OUTPUT".details", "type", "array"); return STATUS_OK; }
NEOERR* mcs_set_int_attr(HDF *hdf, char *name, char *key, int val) { char tok[64] = {0}; snprintf(tok, sizeof(tok), "%d", val); return nerr_pass(hdf_set_attr(hdf, name, key, tok)); }
NEOERR* mcs_set_int_attrr(HDF *hdf, char *name, char *key, int val) { char tok[64] = {0}; snprintf(tok, sizeof(tok), "%d", val); /* can't set node's attr if node have no value */ if (!hdf_get_value(hdf, name, NULL)) hdf_set_value(hdf, name, "foo"); return nerr_pass(hdf_set_attr(hdf, name, key, tok)); }
NEOERR* base_msg_new(char *cmd, HDF *datanode, unsigned char **buf, size_t *size) { NEOERR *err; MCS_NOT_NULLC(cmd, datanode, buf); MCS_NOT_NULLA(size); size_t bsize, vsize; unsigned char *rbuf; uint32_t t; memset(static_buf, 0x0, MAX_PACKET_LEN); hdf_set_value(datanode, "_Reserve", "moc"); err = hdf_set_attr(datanode, "_Reserve", "cmd", cmd); if (err != STATUS_OK) return nerr_pass(err); TRACE_HDF(datanode); vsize = pack_hdf(datanode, static_buf, MAX_PACKET_LEN); if(vsize <= 0) return nerr_raise(NERR_ASSERT, "packet error"); /* * copy from tcp.c tcp_reply_long() */ bsize = 4 + 4 + 4 + 4 + vsize; rbuf = calloc(1, bsize); if (!rbuf) return nerr_raise(NERR_NOMEM, "alloc msg buffer"); t = htonl(bsize); memcpy(rbuf, &t, 4); /* * server 主动发给 client 的包,reqid == 0, && reply == 10000 */ t = 0; memcpy(rbuf + 4, &t, 4); t = htonl(10000); memcpy(rbuf + 8, &t, 4); t = htonl(vsize); memcpy(rbuf + 12, &t, 4); memcpy(rbuf + 16, static_buf, vsize); *buf = rbuf; *size = bsize; return STATUS_OK; }
int main(int argc, char *argv[]) { NEOERR *err; HDF *hdf; int x; char name[256]; char value[256]; double tstart = 0; err = hdf_init(&hdf); DIE_NOT_OK(err); err = hdf_set_value (hdf, "Beware", "1"); DIE_NOT_OK(err); err = hdf_set_value (hdf, "Beware.The", "2"); DIE_NOT_OK(err); err = hdf_set_valuef (hdf, "Beware.The.%s=%d", "Ides", 3); DIE_NOT_OK(err); err = hdf_set_value (hdf, "Beware.Off", "4"); DIE_NOT_OK(err); err = hdf_set_value (hdf, "Beware.The.Ides.Of", "5"); DIE_NOT_OK(err); err = hdf_set_value (hdf, "Beware.The.Butter", "6"); DIE_NOT_OK(err); err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", "en"); DIE_NOT_OK(err); err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", "1"); DIE_NOT_OK(err); err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", NULL); DIE_NOT_OK(err); err = hdf_read_file (hdf, "test.hdf"); DIE_NOT_OK(err); hdf_dump(hdf, NULL); x = hdf_get_int_value (hdf, "Beware.The.Ides", 0); if (x != 3) { ne_warn("hdf_get_int_value returned %d, expected 3", x); return -1; } /* test symlinks */ { const char *v; err = hdf_set_value(hdf, "Destination.Foo", "bar"); DIE_NOT_OK(err); err = hdf_set_symlink(hdf, "Symlink.baz", "Destination.Foo"); DIE_NOT_OK(err); v = hdf_get_value(hdf, "Symlink.baz", "notfound"); if (strcmp(v, "bar")) { ne_warn("hdf_get_value through symlink returned %s, expected bar", v); return -1; } err = hdf_set_value(hdf, "Symlink.baz", "newvalue"); DIE_NOT_OK(err); v = hdf_get_value(hdf, "Symlink.baz", "notfound"); if (strcmp(v, "newvalue")) { ne_warn("hdf_get_value through symlink returned %s, expected newvalue", v); return -1; } err = hdf_set_value(hdf, "Symlink.baz.too", "newtoo"); DIE_NOT_OK(err); v = hdf_get_value(hdf, "Symlink.baz.too", "newtoo"); if (strcmp(v, "newtoo")) { ne_warn("hdf_get_value through symlink returned %s, expected newtoo", v); return -1; } v = hdf_get_value(hdf, "Destination.Foo.too", "newtoo"); if (strcmp(v, "newtoo")) { ne_warn("hdf_get_value through symlink returned %s, expected newtoo", v); return -1; } } for (x = 0; x < 10000; x++) { rand_name(name, sizeof(name)); neo_rand_word(value, sizeof(value)); /* ne_warn("Setting %s = %s", name, value); */ err = hdf_set_value (hdf, name, value); DIE_NOT_OK(err); } tstart = ne_timef(); hdf_sort_obj(hdf, sortByName); ne_warn("sort took %5.5fs", ne_timef() - tstart); hdf_dump(hdf, NULL); hdf_destroy(&hdf); return 0; }
NEOERR* system_view_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mdb_conn *db = hash_lookup(dbh, "trace"); STRING str; string_init(&str); char *mname, *s; NEOERR *err; MCS_NOT_NULLB(cgi->hdf, db); MEMBER_CHECK_ADMIN(); SET_DASHBOARD_ACTION(cgi->hdf); /* * prepare query condition */ hdf_set_int_value(cgi->hdf, PRE_QUERY".type", TRACE_TYPE_PAGEVIEW); HDF_FETCH_STR(cgi->hdf, PRE_QUERY".times", s); if (!s) hdf_set_value(cgi->hdf, PRE_QUERY".timed", "current_date - 2"); err = mdb_build_querycond(hdf_get_obj(cgi->hdf, PRE_QUERY), hdf_get_obj(g_cfg, "Db.QueryCond.system.view"), &str, NULL); if (err != STATUS_OK) return nerr_pass(err); /* * pageview */ MDB_QUERY_RAW(db, "emap", _COL_EMAP_PAGEVIEW, " %s GROUP BY date_trunc('hour', intime) " " ORDER BY date_trunc('hour', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_PAGEVIEW, PRE_OUTPUT".pageviews", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); /* * userview */ MDB_QUERY_RAW(db, "emap", _COL_EMAP_USERVIEW, " %s GROUP BY date_trunc('hour', intime) " " ORDER BY date_trunc('hour', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_USERVIEW, PRE_OUTPUT".userviews", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); /* * day count */ MDB_QUERY_RAW(db, "emap", _COL_EMAP_DATEVIEW, " %s GROUP BY date_trunc('day', intime) " " ORDER BY date_trunc('day', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_DATEVIEW, PRE_OUTPUT".dateviews", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); MDB_QUERY_RAW(db, "emap", _COL_EMAP_DATEUSER, " %s GROUP BY date_trunc('day', intime) " " ORDER BY date_trunc('day', intime)", NULL, str.buf); err = mdb_set_rows(cgi->hdf, db, _COL_EMAP_DATEUSER, PRE_OUTPUT".dateusers", NULL, MDB_FLAG_EMPTY_OK); if (err != STATUS_OK) return nerr_pass(err); string_clear(&str); hdf_set_attr(cgi->hdf, PRE_OUTPUT".pageviews", "type", "array"); hdf_set_attr(cgi->hdf, PRE_OUTPUT".userviews", "type", "array"); return STATUS_OK; }