Skip to content

Commit b58e6e7

Browse files
committed
feat: support trace
1 parent 4b6a2b4 commit b58e6e7

5 files changed

Lines changed: 60 additions & 6 deletions

File tree

aiges/wrapper.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ typedef int(*wrapperCallback)(const void *usrTag, pDataList respData, int ret);
9393
*/
9494
typedef int(*wrapperMeterCustom)(const void *usrTag, const char *meterKey, int count);
9595

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

97107
/*
98108
创建计算资源

include/aiges/wrapper.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,17 @@ typedef int(*wrapperCallback)(const void *usrTag, pDataList respData, int ret);
9494
typedef int(*wrapperMeterCustom)(const void *usrTag, const char *meterKey, int count);
9595

9696

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

pyWrapper.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ const char *wrapperFileClass = "wrapper.class";
1111
const char *WrapperFile = "wrapper";
1212
const char *WrapperClass = "Wrapper";
1313
const char *PythonSo = "libpython3.so";
14+
1415
wrapperMeterCustom g_metric_cb;
16+
wrapperTraceLog g_trace_cb;
1517

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

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

372375
}
373376

374-
int PyWrapper::wrapperSetCtrl(CtrlType type, wrapperMeterCustom mc) {
377+
int PyWrapper::wrapperSetMetricFunc(CtrlType type, wrapperMeterCustom mc) {
375378
if (type == CTMeterCustom) {
376379
g_metric_cb = mc;
377380
}
378381
return 0;
379382
}
380383

384+
int PyWrapper::wrapperSetTraceFunc(CtrlType type, wrapperTraceLog mc) {
385+
if (type == CTTraceLog) {
386+
g_trace_cb = mc;
387+
}
388+
return 0;
389+
}
390+
381391
std::string
382392
PyWrapper::wrapperCreate(const char *usrTag, std::map <std::string, std::string> params, wrapperCallback cb,
383393
int *errNum, std::string sid) {
@@ -546,10 +556,15 @@ int PyWrapper::wrapperTest() {
546556
}
547557

548558
int callbackMetric(const char *usrTag, const char *meterKey, int count) {
549-
printf("%s, %s, %d\n", usrTag, meterKey, count);
559+
printf("callback Metric: %s, %s, %d\n", usrTag, meterKey, count);
550560
return g_metric_cb(usrTag, meterKey, count);
551561
}
552562

563+
int callbackTrace(const char *usrTag, const char *key, const char *value) {
564+
printf("callback Trace: %s, %s, %d\n", usrTag, key, value);
565+
return g_trace_cb(usrTag, key, value);
566+
}
567+
553568
int callBack(Response *resp, std::string sid) {
554569
wrapperCallback cb_;
555570
cb_ = GetSidCB(sid);
@@ -648,8 +663,8 @@ const std::string GetSidByUsrTag(const char *usrTag) {
648663
RECORD_MUTEX.lock();
649664
//通过value找 key
650665
for (std::map<std::string, const char *>::iterator it = SID_USRTAG.begin(); it != SID_USRTAG.end(); it++) {
651-
if (it->second == usrTag){
652-
RECORD_MUTEX.unlock();
666+
if (it->second == usrTag) {
667+
RECORD_MUTEX.unlock();
653668
return it->first;
654669

655670
}

pyWrapper.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,9 @@ class PyWrapper {
134134
wrapperCreate(const char *usrTag, std::map <std::string, std::string> params, wrapperCallback cb, int *errNum,
135135
std::string sid);
136136

137-
int wrapperSetCtrl(CtrlType type, wrapperMeterCustom mc);
137+
int wrapperSetMetricFunc(CtrlType type, wrapperMeterCustom mc);
138+
139+
int wrapperSetTraceFunc(CtrlType type, wrapperTraceLog mc);
138140

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

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

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

185+
int callbackTrace(const char *usrTag, const char *key, const char *value);
186+
183187
void SetSidCallBack(wrapperCallback cb, std::string sid);
184188

185189
wrapperCallback GetSidCB(std::string sid);

wrapper.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ py::gil_scoped_release release; // 主线程中先释放release锁
1818
// 全局pywrapper类实例
1919
PyWrapper *pyWrapper;
2020
wrapperMeterCustom global_metric_cb;
21+
wrapperTraceLog global_trace_cb;
2122

2223
//
2324

@@ -108,7 +109,12 @@ int WrapperAPI wrapperInit(pConfig cfg) {
108109
setLog(loglvl);
109110
printf("WrapperInit: 当前线程ID: %d \n", gettid());
110111
if (global_metric_cb != NULL) {
111-
pyWrapper->wrapperSetCtrl(CTMeterCustom, global_metric_cb);
112+
printf("Metric Custom func set! \n");
113+
pyWrapper->wrapperSetMetricFunc(CTMeterCustom, global_metric_cb);
114+
}
115+
if (global_trace_cb != NULL) {
116+
printf("Trace log func set! \n");
117+
pyWrapper->wrapperSetTraceFunc(CTTraceLog, global_trace_cb);
112118
}
113119

114120
ret = pyWrapper->wrapperInit(config);
@@ -329,6 +335,14 @@ int WrapperAPI wrapperSetCtrl(CtrlType type, void *func) {
329335
// 这里实际是往 python注册 wrapperMeterCustom 函数指针
330336
//int ret = pyWrapper->wrapperSetCtrl(type, (wrapperMeterCustom*) func);
331337
return 0;
338+
} else if (type == CTTraceLog) {
339+
if (func == NULL) {
340+
printf("trace log function is null\n");
341+
return 0;
342+
}
343+
global_trace_cb = (wrapperTraceLog) func;
344+
return 0;
345+
332346
}
333347
return 0;
334348
}

0 commit comments

Comments
 (0)