Skip to content

Commit

Permalink
feat: support trace
Browse files Browse the repository at this point in the history
  • Loading branch information
whybeyoung committed Jul 2, 2023
1 parent 4b6a2b4 commit b58e6e7
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 6 deletions.
10 changes: 10 additions & 0 deletions aiges/wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,16 @@ typedef int(*wrapperCallback)(const void *usrTag, pDataList respData, int ret);
*/
typedef int(*wrapperMeterCustom)(const void *usrTag, const char *meterKey, int count);

/*
trace日志回调接口,开发者回调该接口用于跟踪请求过程中插件内部的关键执行路径及关键信息,日志以k-v方式存储
@param usrTag 用于关联用户请求实例的tag,通过wrapperCreate/wrapperExec接口参数获取
@param key trace日志key值
@param value trace日志value值
@return 接口错误码,成功则返回0
@note 该接口调用需在会话周期内完成,即wrapperCreate-wrapperDestroy之间调用,或wrapperExec接口内完成调用
*/
typedef int(*wrapperTraceLog)(const char* usrTag, const char* key, const char* value);


/*
创建计算资源
Expand Down
11 changes: 11 additions & 0 deletions include/aiges/wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,17 @@ typedef int(*wrapperCallback)(const void *usrTag, pDataList respData, int ret);
typedef int(*wrapperMeterCustom)(const void *usrTag, const char *meterKey, int count);


/*
trace日志回调接口,开发者回调该接口用于跟踪请求过程中插件内部的关键执行路径及关键信息,日志以k-v方式存储
@param usrTag 用于关联用户请求实例的tag,通过wrapperCreate/wrapperExec接口参数获取
@param key trace日志key值
@param value trace日志value值
@return 接口错误码,成功则返回0
@note 该接口调用需在会话周期内完成,即wrapperCreate-wrapperDestroy之间调用,或wrapperExec接口内完成调用
*/
typedef int(*wrapperTraceLog)(const char* usrTag, const char* key, const char* value);


/*
创建计算资源
@param params 会话参数对
Expand Down
23 changes: 19 additions & 4 deletions pyWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ const char *wrapperFileClass = "wrapper.class";
const char *WrapperFile = "wrapper";
const char *WrapperClass = "Wrapper";
const char *PythonSo = "libpython3.so";

wrapperMeterCustom g_metric_cb;
wrapperTraceLog g_trace_cb;

std::mutex RECORD_MUTEX;
std::map <std::string, std::string> SID_RECORD;
Expand All @@ -20,6 +22,7 @@ std::map<std::string, const char *> SID_USRTAG;

PYBIND11_EMBEDDED_MODULE(aiges_embed, module) {
module.def("callback_metric", &callbackMetric, py::return_value_policy::automatic_reference);
module.def("callback_trace", &callbackT, py::return_value_policy::automatic_reference);
module.def("callback", &callBack, py::return_value_policy::automatic_reference);
py::class_<ResponseData> responseData(module, "ResponseData");
responseData.def(py::init<>())
Expand Down Expand Up @@ -371,13 +374,20 @@ std::string PyWrapper::wrapperError(int err) {

}

int PyWrapper::wrapperSetCtrl(CtrlType type, wrapperMeterCustom mc) {
int PyWrapper::wrapperSetMetricFunc(CtrlType type, wrapperMeterCustom mc) {
if (type == CTMeterCustom) {
g_metric_cb = mc;
}
return 0;
}

int PyWrapper::wrapperSetTraceFunc(CtrlType type, wrapperTraceLog mc) {
if (type == CTTraceLog) {
g_trace_cb = mc;
}
return 0;
}

std::string
PyWrapper::wrapperCreate(const char *usrTag, std::map <std::string, std::string> params, wrapperCallback cb,
int *errNum, std::string sid) {
Expand Down Expand Up @@ -546,10 +556,15 @@ int PyWrapper::wrapperTest() {
}

int callbackMetric(const char *usrTag, const char *meterKey, int count) {
printf("%s, %s, %d\n", usrTag, meterKey, count);
printf("callback Metric: %s, %s, %d\n", usrTag, meterKey, count);
return g_metric_cb(usrTag, meterKey, count);
}

int callbackTrace(const char *usrTag, const char *key, const char *value) {
printf("callback Trace: %s, %s, %d\n", usrTag, key, value);
return g_trace_cb(usrTag, key, value);
}

int callBack(Response *resp, std::string sid) {
wrapperCallback cb_;
cb_ = GetSidCB(sid);
Expand Down Expand Up @@ -648,8 +663,8 @@ const std::string GetSidByUsrTag(const char *usrTag) {
RECORD_MUTEX.lock();
//通过value找 key
for (std::map<std::string, const char *>::iterator it = SID_USRTAG.begin(); it != SID_USRTAG.end(); it++) {
if (it->second == usrTag){
RECORD_MUTEX.unlock();
if (it->second == usrTag) {
RECORD_MUTEX.unlock();
return it->first;

}
Expand Down
6 changes: 5 additions & 1 deletion pyWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,9 @@ class PyWrapper {
wrapperCreate(const char *usrTag, std::map <std::string, std::string> params, wrapperCallback cb, int *errNum,
std::string sid);

int wrapperSetCtrl(CtrlType type, wrapperMeterCustom mc);
int wrapperSetMetricFunc(CtrlType type, wrapperMeterCustom mc);

int wrapperSetTraceFunc(CtrlType type, wrapperTraceLog mc);

int wrapperWrite(char *handle, DataListCls reqData, std::string sid);

Expand Down Expand Up @@ -180,6 +182,8 @@ int callBack(Response *respData, std::string);

int callbackMetric(const char *usrTag, const char *meterKey, int count);

int callbackTrace(const char *usrTag, const char *key, const char *value);

void SetSidCallBack(wrapperCallback cb, std::string sid);

wrapperCallback GetSidCB(std::string sid);
Expand Down
16 changes: 15 additions & 1 deletion wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ py::gil_scoped_release release; // 主线程中先释放release锁
// 全局pywrapper类实例
PyWrapper *pyWrapper;
wrapperMeterCustom global_metric_cb;
wrapperTraceLog global_trace_cb;

//

Expand Down Expand Up @@ -108,7 +109,12 @@ int WrapperAPI wrapperInit(pConfig cfg) {
setLog(loglvl);
printf("WrapperInit: 当前线程ID: %d \n", gettid());
if (global_metric_cb != NULL) {
pyWrapper->wrapperSetCtrl(CTMeterCustom, global_metric_cb);
printf("Metric Custom func set! \n");
pyWrapper->wrapperSetMetricFunc(CTMeterCustom, global_metric_cb);
}
if (global_trace_cb != NULL) {
printf("Trace log func set! \n");
pyWrapper->wrapperSetTraceFunc(CTTraceLog, global_trace_cb);
}

ret = pyWrapper->wrapperInit(config);
Expand Down Expand Up @@ -329,6 +335,14 @@ int WrapperAPI wrapperSetCtrl(CtrlType type, void *func) {
// 这里实际是往 python注册 wrapperMeterCustom 函数指针
//int ret = pyWrapper->wrapperSetCtrl(type, (wrapperMeterCustom*) func);
return 0;
} else if (type == CTTraceLog) {
if (func == NULL) {
printf("trace log function is null\n");
return 0;
}
global_trace_cb = (wrapperTraceLog) func;
return 0;

}
return 0;
}
Expand Down

0 comments on commit b58e6e7

Please sign in to comment.