• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "wasm_func.h"
17 #include <deque>
18 #include "version.h"
19 #include "sdk_data_parser.h"
20 #include "sdk_plugin_data_parser.h"
21 #include "demo_table_base.h"
22 #include "trace_stdtype.h"
23 #include "ts_sdk_api.h"
24 
25 namespace SysTuning {
26 namespace TraceStreamer {
27 DemoRpcServer g_demoWasmTraceStreamer;
28 
29 extern "C" {
30 using QueryResultCallbackFunction = void (*)(const char *data, uint32_t len, int32_t finish, int32_t isConfig);
31 using TraceRangeCallbackFunction = void (*)(const char *data, uint32_t len);
32 QueryResultCallbackFunction g_reply;
33 TraceRangeCallbackFunction g_traceRange;
34 uint8_t *g_reqBuf;
35 uint32_t g_reqBufferSize;
36 uint8_t *g_traceRangeBuf;
37 uint32_t g_traceRangeSize;
38 uint8_t *g_pluginNameBuf;
39 uint32_t g_pluginNameSize;
40 
QueryResultCallback(const std::string & jsonResult,int32_t finish,int32_t isConfig)41 void QueryResultCallback(const std::string &jsonResult, int32_t finish, int32_t isConfig)
42 {
43     g_reply(jsonResult.data(), jsonResult.size(), finish, isConfig);
44 }
TraceRangeCallback(const std::string & jsonResult)45 void TraceRangeCallback(const std::string &jsonResult)
46 {
47     g_traceRange(jsonResult.data(), jsonResult.size());
48 }
Init(QueryResultCallbackFunction queryResultCallbackFunction,uint32_t reqBufferSize)49 EMSCRIPTEN_KEEPALIVE uint8_t *Init(QueryResultCallbackFunction queryResultCallbackFunction, uint32_t reqBufferSize)
50 {
51     SetRpcServer(&g_demoWasmTraceStreamer);
52     SDKPluginIinitTableName();
53     g_demoWasmTraceStreamer.demoTs_->sdkDataParser_->CreateTableByJson();
54     g_reply = queryResultCallbackFunction;
55     g_reqBuf = new uint8_t[reqBufferSize];
56     g_reqBufferSize = reqBufferSize;
57     return g_reqBuf;
58 }
59 
60 // Get PluginName
InitPluginName(uint32_t reqBufferSize)61 EMSCRIPTEN_KEEPALIVE uint8_t *InitPluginName(uint32_t reqBufferSize)
62 {
63     g_pluginNameBuf = new uint8_t[reqBufferSize];
64     g_pluginNameSize = reqBufferSize;
65     return g_pluginNameBuf;
66 }
67 
68 // @deprecated recommand to use TraceStreamerGetPluginNameEx api
TraceStreamerInPluginName(const uint8_t * pluginName,int32_t len)69 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamerInPluginName(const uint8_t *pluginName, int32_t len)
70 {
71     std::string pluginNameStr(reinterpret_cast<const char *>(pluginName), len);
72     g_demoWasmTraceStreamer.demoTs_->sdkDataParser_->GetPluginName(pluginNameStr);
73     return 0;
74 }
75 
TraceStreamerGetPluginNameEx(int32_t pluginLen)76 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamerGetPluginNameEx(int32_t pluginLen)
77 {
78     return g_demoWasmTraceStreamer.DemoWasmGetPluginNameWithCallback(g_pluginNameBuf, pluginLen);
79 }
80 
InitTraceRange(TraceRangeCallbackFunction traceRangeCallbackFunction,uint32_t reqBufferSize)81 EMSCRIPTEN_KEEPALIVE uint8_t *InitTraceRange(TraceRangeCallbackFunction traceRangeCallbackFunction,
82                                              uint32_t reqBufferSize)
83 {
84     g_traceRange = traceRangeCallbackFunction;
85     g_traceRangeBuf = new uint8_t[reqBufferSize];
86     g_traceRangeSize = reqBufferSize;
87     return g_traceRangeBuf;
88 }
89 
90 // The whole file is parsed, and the third party is notified by JS
TraceStreamer_In_ParseDataOver()91 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamer_In_ParseDataOver()
92 {
93     MetaData *metaData = g_demoWasmTraceStreamer.demoTs_->GetMetaData();
94     metaData->InitMetaData();
95     metaData->SetParserToolVersion(SDK_VERSION);
96     metaData->SetParserToolPublishDateTime(SDK_PUBLISH_VERSION);
97     g_demoWasmTraceStreamer.demoTs_->sdkDataParser_->ParseDataOver(&TraceRangeCallback);
98     return 0;
99 }
100 
101 // Get Json configuration interface
TraceStreamer_In_JsonConfig()102 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamer_In_JsonConfig()
103 {
104     g_demoWasmTraceStreamer.demoTs_->sdkDataParser_->GetJsonConfig(&QueryResultCallback);
105     return 0;
106 }
107 
TraceStreamerSqlOperate(const uint8_t * sql,int32_t sqlLen)108 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamerSqlOperate(const uint8_t *sql, int32_t sqlLen)
109 {
110     if (g_demoWasmTraceStreamer.DemoSqlOperate(sql, sqlLen, nullptr)) {
111         return 0;
112     }
113     return -1;
114 }
TraceStreamerSqlOperateEx(int32_t sqlLen)115 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamerSqlOperateEx(int32_t sqlLen)
116 {
117     if (g_demoWasmTraceStreamer.DemoSqlOperate(g_reqBuf, sqlLen, nullptr)) {
118         return 0;
119     }
120     return -1;
121 }
122 
123 // JS calls third-party parsing interface
ParserData(int32_t len,int32_t componentId)124 EMSCRIPTEN_KEEPALIVE int32_t ParserData(int32_t len, int32_t componentId)
125 {
126     g_demoWasmTraceStreamer.demoTs_->sdkDataParser_->ParserData(g_reqBuf, len, componentId);
127     return 0;
128 }
129 
130 // return the length of result, -1 while failed
TraceStreamerSqlQuery(const uint8_t * sql,int32_t sqlLen,uint8_t * out,int32_t outLen)131 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamerSqlQuery(const uint8_t *sql, int32_t sqlLen, uint8_t *out, int32_t outLen)
132 {
133     return g_demoWasmTraceStreamer.DemoWasmSqlQuery(sql, sqlLen, out, outLen);
134 }
135 // return the length of result, -1 while failed
TraceStreamerSqlQueryEx(int32_t sqlLen)136 EMSCRIPTEN_KEEPALIVE int32_t TraceStreamerSqlQueryEx(int32_t sqlLen)
137 {
138     return g_demoWasmTraceStreamer.DemoWasmSqlQueryWithCallback(g_reqBuf, sqlLen, &QueryResultCallback);
139 }
140 
141 } // extern "C"
142 } // namespace TraceStreamer
143 } // namespace SysTuning
144