Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Schema Registry fetature #99

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions C/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.so
msr_test
33 changes: 33 additions & 0 deletions C/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
OVIS_PREFIX ?= /opt/ovis

ifdef OVIS_PREFIX
OVIS_INCLUDES = -I$(OVIS_PREFIX)/include
OVIS_LIBS = -L$(OVIS_PREFIX)/lib -L$(OVIS_PREFIX)/lib64
else
OVIS_INCLUDES =
OVIS_LIBS =
endif

CFLAGS = -ggdb3 -O0 $(OVIS_INCLUDES)
LDFLAGS = $(OVIS_LIBS) -lldms -lcurl -ljansson

all: libmsr_client.so msr_test

libmsr_client_so_SOURCES = msr_client.c

libmsr_client.so: $(libmsr_client_so_SOURCES) Makefile
$(CC) $(libmsr_client_so_SOURCES) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -o $@

msr_test: msr_test.c libmsr_client.so Makefile
$(CC) $< $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -L. -lmsr_client -o $@

clean:
rm -f libmsr_client.so msr_test


install: libmsr_client.so msr_client.h msr_test
LIBPREFIX=$$(ldd libmsr_client.so | grep libldms.so | \
sed 's/.* => \(\S\+\)\/libldms.so.*/\1/' \
); \
install -t $${LIBPREFIX}/ libmsr_client.so ; \
install -t $${LIBPREFIX}/../bin msr_test
103 changes: 103 additions & 0 deletions C/ldms_schema_access.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#include <openssl/evp.h>

#include "ldms_schema_access.h"
#include "ldms/ldms.h"

struct ldms_mdef_s {
char *name;
char *unit;
enum ldms_value_type type;
uint32_t flags; /* DATA/MDATA flag */
uint32_t count; /* Number of elements in the array if this is of an
* array type, or number of members if this is a
* record type. */
size_t meta_sz;
size_t data_sz;
STAILQ_ENTRY(ldms_mdef_s) entry;
};

STAILQ_HEAD(metric_list_head, ldms_mdef_s);

struct ldms_schema_s {
char *name;
struct ldms_digest_s digest;
EVP_MD_CTX *evp_ctx;
int card;
size_t meta_sz;
size_t data_sz;
int array_card;
STAILQ_HEAD(, ldms_mdef_s) metric_list;
LIST_ENTRY(ldms_schema_s) entry;
};

/*
* This structure stores user-defined record definition constructed by
* ldms_record_create() and ldms_record_metric_add() APIs. This structure will
* later be used to create `ldms_record_type` in the set meta data.
*/
typedef struct ldms_record {
struct ldms_mdef_s mdef; /* base */
ldms_schema_t schema;
int metric_id;
int n; /* the number of members */
size_t inst_sz; /* the size of an instance */
size_t type_sz; /* the size of the record type (in metadata section) */
STAILQ_HEAD(, ldms_mdef_s) rec_metric_list;
} *ldms_record_t;

typedef struct ldms_record_array_def {
struct ldms_mdef_s mdef; /* base */
int rec_type; /* index to the record type */
int inst_sz;
} *ldms_record_array_def_t;

ldms_mdef_t ldms_schema_mdef_first(ldms_schema_t sch)
{
return STAILQ_FIRST(&sch->metric_list);
}

ldms_mdef_t ldms_mdef_next(ldms_mdef_t mdef)
{
return STAILQ_NEXT(mdef, entry);
}

enum ldms_value_type ldms_mdef_type(ldms_mdef_t mdef)
{
return mdef->type;
}

const char *ldms_mdef_name(ldms_mdef_t mdef)
{
return mdef->name;
}

const char *ldms_mdef_units(ldms_mdef_t mdef)
{
return mdef->unit;
}

int ldms_mdef_array_len(ldms_mdef_t mdef)
{
return mdef->count;
}

int ldms_mdef_list_heap_sz(ldms_mdef_t mdef)
{
return mdef->count;
}

ldms_record_t ldms_mdef_record(ldms_mdef_t mdef)
{
ldms_record_t rec = container_of(mdef, struct ldms_record, mdef);
return rec;
}

ldms_mdef_t ldms_record_mdef_first(ldms_record_t rec)
{
return STAILQ_FIRST(&rec->rec_metric_list);
}

int ldms_mdef_is_meta(ldms_mdef_t mdef)
{
return !!(mdef->flags & LDMS_MDESC_F_META);
}
20 changes: 20 additions & 0 deletions C/ldms_schema_access.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef __LDMS_SCHEMA_ACCESS_H__
#define __LDMS_SCHEMA_ACCESS_H__

#include "ldms/ldms.h"

typedef struct ldms_mdef_s *ldms_mdef_t;

ldms_mdef_t ldms_schema_mdef_first(ldms_schema_t sch);
ldms_mdef_t ldms_mdef_next(ldms_mdef_t mdef);
enum ldms_value_type ldms_mdef_type(ldms_mdef_t mdef);
const char *ldms_mdef_name(ldms_mdef_t mdef);
const char *ldms_mdef_units(ldms_mdef_t mdef);
int ldms_mdef_array_len(ldms_mdef_t mdef);
int ldms_mdef_list_heap_sz(ldms_mdef_t mdef);
ldms_record_t ldms_mdef_record(ldms_mdef_t mdef);
ldms_mdef_t ldms_record_mdef_first(ldms_record_t rec);

int ldms_mdef_is_meta(ldms_mdef_t mdef);

#endif
Loading