diff --git a/src/core/store.c b/src/core/store.c
index 94b823bfeea6ee81f5189e6646d9051f74f4347a..db8a9d9c5686f7e7c79059fd383c6014ad5329bf 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
return 0;
} /* sdb_store_get_field */
+int
+sdb_store_get_attr(sdb_store_obj_t *obj, const char *name, sdb_data_t *res)
+{
+ sdb_avltree_t *tree = NULL;
+ sdb_avltree_iter_t *iter = NULL;
+
+ if ((! obj) || (! name))
+ return -1;
+
+ if (obj->type == SDB_HOST)
+ tree = HOST(obj)->attributes;
+ else if (obj->type == SDB_SERVICE)
+ tree = SVC(obj)->attributes;
+ else if (obj->type == SDB_METRIC)
+ tree = METRIC(obj)->attributes;
+
+ if (! tree)
+ return -1;
+
+ iter = sdb_avltree_get_iter(tree);
+ while (sdb_avltree_iter_has_next(iter)) {
+ sdb_object_t *attr = sdb_avltree_iter_get_next(iter);
+
+ if (strcasecmp(SDB_OBJ(attr)->name, name))
+ continue;
+
+ assert(STORE_OBJ(attr)->type == SDB_ATTRIBUTE);
+ if (res)
+ sdb_data_copy(res, &ATTR(attr)->value);
+ sdb_avltree_iter_destroy(iter);
+ return 0;
+ }
+ sdb_avltree_iter_destroy(iter);
+
+ /* not found */
+ return -1;
+} /* sdb_store_get_attr */
+
int
sdb_store_host_tojson(sdb_store_obj_t *h, sdb_strbuf_t *buf,
sdb_store_matcher_t *filter, int flags)