Compare commits

...
26 Commits
Author SHA1 Message Date
fengzeroz 7025f71f7d Merge pull request #996 from fengzeroz/v2.3
V2.3
2022-12-23 14:17:43 +08:00
fengzero 8e0d796357 version: 2.3.1 2022-12-23 06:10:17 +00:00
fengzero 05a9ce7c5d ci: copy libzlog 2022-12-23 06:08:06 +00:00
fengzero 0295ea0b8f update ci 2022-12-23 06:07:54 +00:00
fengzero b51a2ff374 report data using noblock timer 2022-12-21 08:47:45 +00:00
fengzeroz b09b99864d Merge pull request #990 from eeff/eeff/2.3
Pick to 2.3: remove setting/publishing heartbeat-topic
2022-12-20 15:00:53 +08:00
eeff 719beafadc feat(mqtt): remove setting/publishing heartbeat-topic 2022-12-20 12:03:18 +08:00
eeff f888f1ec1c fix: mqtt plugin memory leak 2022-12-20 12:03:02 +08:00
fengzeroz b567c91bc8 Merge pull request #989 from fengzeroz/v2.3
metric api: remove verify
2022-12-20 10:23:44 +08:00
fengzero 9128189f65 metric api: remove verify 2022-12-20 02:22:02 +00:00
fengzeroz 1443d0f546 Merge pull request #986 from fengzeroz/v2.3
db: node cache
2022-12-19 11:32:19 +08:00
fengzero 7980eb4b71 db: node cache 2022-12-19 03:23:35 +00:00
fengzeroz 98c522fde2 Merge pull request #977 from eeff/eeff/v2.3
Pick to v2.3: persister load tags in insertion order
2022-12-09 10:49:59 +08:00
eeff 2c02652cd6 chore: persister load tags in insertion order 2022-12-09 10:38:43 +08:00
fengzeroz fec1b06df2 Merge pull request #971 from fengzeroz/v2.3
fix db schema limit
2022-12-06 16:54:17 +08:00
fengzero 8a96a51abd fix db schema limit 2022-12-06 08:45:08 +00:00
fengzeroz 597932ba8b Merge pull request #972 from eeff/eeff/dev
fix(mqtt-client): work around segfault due to NanoSDK race condition
2022-12-06 16:28:03 +08:00
fengzeroz d1f05991d4 Merge pull request #969 from fengzeroz/v2.3
fix db schema limit
2022-12-06 15:17:19 +08:00
fengzero b6a5ae2a12 fix db schema limit 2022-12-06 07:16:50 +00:00
fengzeroz 7ed0abe9f6 Merge pull request #966 from fengzeroz/v2.3
fix connection log cate
2022-12-06 10:38:27 +08:00
fengzero 6ba9d26027 fix connection log cate 2022-12-06 02:36:20 +00:00
fengzeroz f90ffbc5bd Merge pull request #964 from fengzeroz/v2.3
v2.3
2022-12-05 18:43:54 +08:00
fengzero ede4f02369 v2.3 2022-12-05 10:43:34 +00:00
fengzeroz b66b54943b Merge pull request #963 from fengzeroz/v2.3
v2.3
2022-12-05 18:39:06 +08:00
fengzero 2a043d4bbb v2.3 2022-12-05 10:38:41 +00:00
fengzeroz 33cc987da0 Update CMakeLists.txt 2022-12-05 18:16:15 +08:00
19 changed files with 112 additions and 182 deletions
+4 -52
View File
@@ -8,9 +8,9 @@ on:
- published
env:
VERSION: 2.3.0
UI_VERSION: 2.3
BRANCH: main
VERSION: 2.3.1
UI_VERSION: 2.3.1
BRANCH: v2.3
jobs:
cross-build:
@@ -58,54 +58,6 @@ jobs:
path: |
neuron-sdk-*.tar.gz
cross-build-old:
runs-on: ubuntu-18.04
strategy:
matrix:
arch:
- [aarch64-linux-gnu, aarch64, arm64]
- [arm-linux-gnueabihf, armv4, armhf]
- [x86_64-linux-gnu, x86_64, amd64]
container: neugates/build_old:${{ matrix.arch[1] }}-2.3
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v3
with:
repository: troydhanson/uthash
path: extern/uthash
- name: compile
run: |
git config --global --add safe.directory $(pwd)
mkdir -p build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/${{ matrix.arch[0] }}.cmake \
-DCMAKE_BUILD_TYPE=Release -DDISABLE_UT=ON
make -j4
- name: fetch dashboard
uses: dsaltares/fetch-gh-release-asset@master
with:
repo: "emqx/neuron-dashboard-src"
version: "tags/${{ env.UI_VERSION }}"
file: "neuron-dashboard.zip"
target: "neuron-dashboard.zip"
- name: unpack dashboard
run: |
unzip neuron-dashboard.zip -d ./build
- name: Create neuron sdk package
run: |
./package-sdk.sh -p ${{ matrix.arch[2] }} -n neuron-sdk-old-$VERSION
- uses: actions/upload-artifact@v3
with:
name: neuron-sdk-old-${{ matrix.arch[2] }}
path: |
neuron-sdk-old-*.tar.gz
build-debug-sdk:
runs-on: ubuntu-20.04
strategy:
@@ -178,7 +130,7 @@ jobs:
strategy:
matrix:
arch: [arm64, armhf, amd64]
type: [neuron-sdk, neuron-sdk-old]
type: [neuron-sdk]
package: [tar.gz]
steps:
+3 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX aarch64-linux-gnu)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(LIBRARY_DIR /opt/externs/libs)
set(LIBRARY_DIR /home/neuron/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
@@ -20,3 +20,5 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
link_directories(${CMAKE_STAGING_PREFIX})
file(COPY ${CMAKE_STAGING_PREFIX}/lib/libzlog.so.1.2 DESTINATION /usr/local/lib)
+3 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX arm-linux-gnueabi)
set(CMAKE_SYSTEM_PROCESSOR armv5tejl)
set(LIBRARY_DIR /opt/externs/libs)
set(LIBRARY_DIR /home/neuron/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
@@ -20,3 +20,5 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
link_directories(${CMAKE_STAGING_PREFIX})
file(COPY ${CMAKE_STAGING_PREFIX}/lib/libzlog.so.1.2 DESTINATION /usr/local/lib)
+3 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX arm-linux-gnueabihf)
set(CMAKE_SYSTEM_PROCESSOR armv7l)
set(LIBRARY_DIR /opt/externs/libs)
set(LIBRARY_DIR /home/neuron/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
@@ -20,3 +20,5 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
link_directories(${CMAKE_STAGING_PREFIX})
file(COPY ${CMAKE_STAGING_PREFIX}/lib/libzlog.so.1.2 DESTINATION /usr/local/lib)
+19 -2
View File
@@ -1,7 +1,24 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX x86_64-linux-gnu)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(LIBRARY_DIR /usr/local)
set(LIBRARY_DIR /home/neuron/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
set(CMAKE_AR ${COMPILER_PREFIX}-ar)
set(CMAKE_LINKER ${COMPILER_PREFIX}-ld)
set(CMAKE_NM ${COMPILER_PREFIX}-nm)
set(CMAKE_OBJDUMP ${COMPILER_PREFIX}-objdump)
set(CMAKE_RANLIB ${COMPILER_PREFIX}-ranlib)
set(CMAKE_STAGING_PREFIX ${LIBRARY_DIR}/${COMPILER_PREFIX})
set(CMAKE_PREFIX_PATH ${CMAKE_STAGING_PREFIX})
set(CMAKE_PREFIX_PATH ${CMAKE_STAGING_PREFIX})
include_directories(SYSTEM ${CMAKE_STAGING_PREFIX}/include)
include_directories(SYSTEM ${CMAKE_STAGING_PREFIX}/openssl/include)
set(CMAKE_FIND_ROOT_PATH ${CMAKE_STAGING_PREFIX})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
link_directories(${CMAKE_STAGING_PREFIX})
file(COPY ${CMAKE_STAGING_PREFIX}/lib/libzlog.so.1.2 DESTINATION /usr/local/lib)
+1 -1
View File
@@ -44,7 +44,7 @@ cp -r build/dist ${package_name}/
cp build/neuron ${package_name}
cp build/libneuron-base.so ${package_name}/lib
cp /library/zlog/src/libzlog.so.1.2 ${package_name}/lib
cp /usr/local/lib/libzlog.so.1.2 ${package_name}/lib
cp persistence/*.sql ${package_name}/config/
+53 -4
View File
@@ -32,15 +32,36 @@ VALUES
"$5$PwFeXpBBIBZuZdZl$fP8fFPWCLoaWcnVXVSR.3Xi8TEqCvX92gjhowNNn6S4"
);
--- Modify tags table ---
BEGIN TRANSACTION;
ALTER TABLE nodes RENAME TO old_nodes;
CREATE TABLE
nodes (
name TEXT PRIMARY KEY check(length(name) <= 128),
type integer(1) NOT NULL check(type IN (1, 2)),
state integer(1) NOT NULL check(state BETWEEN 1 AND 4),
plugin_name TEXT NOT NULL check(length(plugin_name) <= 32)
);
INSERT INTO nodes SELECT * FROM old_nodes;
ALTER TABLE groups RENAME TO old_groups;
CREATE TABLE IF NOT EXISTS
groups (
driver_name TEXT NOT NULL,
name TEXT NULL check(length(name) <= 128),
interval INTEGER NOT NULL check(interval >= 100),
UNIQUE (driver_name, name),
FOREIGN KEY (driver_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT INTO groups SELECT * FROM old_groups;
ALTER TABLE tags RENAME TO old_tags;
CREATE TABLE IF NOT EXISTS
tags (
driver_name TEXT NOT NULL,
group_name TEXT NOT NULL,
name TEXT NULL check(length(name) <= 32),
address TEXT NULL check(length(address) <= 64),
name TEXT NULL check(length(name) <= 64),
address TEXT NULL check(length(address) <= 128),
attribute INTEGER NOT NULL check(attribute BETWEEN 0 AND 7),
precision INTEGER NOT NULL check(precision BETWEEN 0 AND 17),
decimal REAL NOT NULL,
@@ -50,5 +71,33 @@ CREATE TABLE IF NOT EXISTS
FOREIGN KEY (driver_name, group_name) REFERENCES groups (driver_name, name) ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT INTO tags SELECT * FROM old_tags;
DROP TABLE old_tags;
ALTER TABLE subscriptions RENAME TO old_subscriptions;
CREATE TABLE IF NOT EXISTS
subscriptions (
app_name TEXT NOT NULL,
driver_name TEXT NOT NULL,
group_name TEXT NOT NULL,
CHECK (app_name != driver_name),
UNIQUE (app_name, driver_name, group_name),
FOREIGN KEY (app_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (driver_name, group_name) REFERENCES groups (driver_name, name) ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT INTO subscriptions SELECT * FROM old_subscriptions;
ALTER TABLE settings RENAME TO old_settings;
CREATE TABLE IF NOT EXISTS
settings (
node_name TEXT NOT NULL,
setting TEXT NOT NULL,
UNIQUE (node_name),
FOREIGN KEY (node_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT INTO settings SELECT * FROM old_settings;
CREATE TABLE IF NOT EXISTS
node_cache (
node_name TEXT NOT NULL,
cache TEXT NOT NULL
);
COMMIT;
-1
View File
@@ -242,7 +242,6 @@ void handle_get_metric(nng_aio *aio)
FILE * stream = NULL;
neu_plugin_t *plugin = neu_monitor_get_plugin();
VALIDATE_JWT(aio);
neu_metrics_category_e cat = NEU_METRICS_CATEGORY_ALL;
size_t cat_param_len = 0;
const char *cat_param = http_get_param(aio, "category", &cat_param_len);
-10
View File
@@ -19,16 +19,6 @@
"length": 255
}
},
"heartbeat-topic": {
"name": "heartbeat topic",
"description": "Topic to which publish heartbeat messages.",
"type": "string",
"attribute": "required",
"default": "/neuron/${node-name}/heartbeat",
"valid": {
"length": 255
}
},
"format": {
"name": "upload format",
"description": "JSON format of the data reported in the upload topic. In values mode, data are split into `values` and `errors` sub objects. In tags mode, tag data are put in a single array.",
+10 -22
View File
@@ -122,13 +122,11 @@ int mqtt_config_parse(neu_plugin_t *plugin, const char *setting,
char * err_param = NULL;
const char *placeholder = "********";
neu_json_elem_t client_id = { .name = "client-id", .t = NEU_JSON_STR };
neu_json_elem_t upload_topic = { .name = "upload-topic",
neu_json_elem_t client_id = { .name = "client-id", .t = NEU_JSON_STR };
neu_json_elem_t upload_topic = { .name = "upload-topic",
.t = NEU_JSON_STR };
neu_json_elem_t heartbeat_topic = { .name = "heartbeat-topic",
.t = NEU_JSON_STR };
neu_json_elem_t format = { .name = "format", .t = NEU_JSON_INT };
neu_json_elem_t cache_mem_size = { .name = "cache-mem-size",
neu_json_elem_t format = { .name = "format", .t = NEU_JSON_INT };
neu_json_elem_t cache_mem_size = { .name = "cache-mem-size",
.t = NEU_JSON_INT };
neu_json_elem_t cache_disk_size = { .name = "cache-disk-size",
.t = NEU_JSON_INT };
@@ -147,9 +145,9 @@ int mqtt_config_parse(neu_plugin_t *plugin, const char *setting,
return -1;
}
ret = neu_parse_param(setting, &err_param, 8, &client_id, &upload_topic,
&heartbeat_topic, &format, &cache_mem_size,
&cache_disk_size, &host, &port);
ret = neu_parse_param(setting, &err_param, 7, &client_id, &upload_topic,
&format, &cache_mem_size, &cache_disk_size, &host,
&port);
if (0 != ret) {
plog_error(plugin, "parsing setting fail, key: `%s`", err_param);
goto error;
@@ -167,12 +165,6 @@ int mqtt_config_parse(neu_plugin_t *plugin, const char *setting,
goto error;
}
// heartbeat-topic, required
if (0 == strlen(heartbeat_topic.v.val_str)) {
plog_error(plugin, "setting empty heartbeat-topic");
goto error;
}
// format, required
if (MQTT_UPLOAD_FORMAT_VALUES != format.v.val_int &&
MQTT_UPLOAD_FORMAT_TAGS != format.v.val_int) {
@@ -239,10 +231,9 @@ int mqtt_config_parse(neu_plugin_t *plugin, const char *setting,
goto error;
}
config->client_id = client_id.v.val_str;
config->upload_topic = upload_topic.v.val_str;
config->heartbeat_topic = heartbeat_topic.v.val_str;
config->format = format.v.val_int;
config->client_id = client_id.v.val_str;
config->upload_topic = upload_topic.v.val_str;
config->format = format.v.val_int;
config->cache =
0 != cache_mem_size.v.val_int || 0 != cache_disk_size.v.val_int;
config->cache_mem_size = cache_mem_size.v.val_int * MB;
@@ -258,7 +249,6 @@ int mqtt_config_parse(neu_plugin_t *plugin, const char *setting,
plog_info(plugin, "config client-id : %s", config->client_id);
plog_info(plugin, "config upload-topic : %s", config->upload_topic);
plog_info(plugin, "config heartbeat-topic: %s", config->heartbeat_topic);
plog_info(plugin, "config format : %s",
mqtt_upload_format_str(config->format));
plog_info(plugin, "config cache : %zu", config->cache);
@@ -292,7 +282,6 @@ int mqtt_config_parse(neu_plugin_t *plugin, const char *setting,
error:
free(err_param);
free(upload_topic.v.val_str);
free(heartbeat_topic.v.val_str);
free(host.v.val_str);
free(username.v.val_str);
free(password.v.val_str);
@@ -307,7 +296,6 @@ void mqtt_config_fini(mqtt_config_t *config)
{
free(config->client_id);
free(config->upload_topic);
free(config->heartbeat_topic);
free(config->host);
free(config->username);
free(config->password);
-1
View File
@@ -49,7 +49,6 @@ static inline const char *mqtt_upload_format_str(mqtt_upload_format_e f)
typedef struct {
char * client_id; // client id
char * upload_topic; // upload topic
char * heartbeat_topic; // heartbeat topic
mqtt_upload_format_e format; // upload format
size_t cache; // cache enable flag
size_t cache_mem_size; // cache memory size in bytes
-65
View File
@@ -26,36 +26,6 @@
#include "mqtt_handle.h"
#include "mqtt_plugin.h"
static char *generate_heartbeat_json(neu_plugin_t *plugin, UT_array *states)
{
(void) plugin;
char * version = NEURON_VERSION;
neu_json_states_head_t header = { .version = version,
.timpstamp = global_timestamp };
neu_json_states_t json = { 0 };
char * json_str = NULL;
json.n_state = utarray_len(states);
json.states = calloc(json.n_state, sizeof(neu_json_node_state_t));
if (NULL == json.states) {
return NULL;
}
utarray_foreach(states, neu_nodes_state_t *, state)
{
int index = utarray_eltidx(states, state);
json.states[index].node = state->node;
json.states[index].link = state->state.link;
json.states[index].running = state->state.running;
}
neu_json_encode_with_mqtt(&json, neu_json_encode_states_resp, &header,
neu_json_encode_state_header_resp, &json_str);
free(json.states);
return json_str;
}
static int tag_values_to_json(neu_resp_tag_value_t *tags, uint16_t len,
neu_json_read_resp_t *json)
{
@@ -524,38 +494,3 @@ int handle_trans_data(neu_plugin_t * plugin,
return rv;
}
int handle_nodes_state(neu_plugin_t *plugin, neu_reqresp_nodes_state_t *states)
{
int rv = 0;
char *json_str = NULL;
if (NULL == plugin->client) {
rv = NEU_ERR_MQTT_IS_NULL;
goto end;
}
if (0 == plugin->config.cache &&
!neu_mqtt_client_is_connected(plugin->client)) {
// cache disable and we are disconnected
rv = NEU_ERR_MQTT_FAILURE;
goto end;
}
json_str = generate_heartbeat_json(plugin, states->states);
if (NULL == json_str) {
plog_error(plugin, "generate heartbeat json fail");
rv = NEU_ERR_EINTERNAL;
goto end;
}
char * topic = plugin->config.heartbeat_topic;
neu_mqtt_qos_e qos = NEU_MQTT_QOS0;
rv = publish(plugin, qos, topic, json_str, strlen(json_str));
json_str = NULL;
end:
utarray_free(states->states);
return rv;
}
-2
View File
@@ -42,8 +42,6 @@ int handle_read_response(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt_json,
int handle_trans_data(neu_plugin_t * plugin,
neu_reqresp_trans_data_t *trans_data);
int handle_nodes_state(neu_plugin_t *plugin, neu_reqresp_nodes_state_t *states);
#ifdef __cplusplus
}
#endif
+9 -13
View File
@@ -170,7 +170,14 @@ static int mqtt_plugin_config(neu_plugin_t *plugin, const char *setting)
return NEU_ERR_NODE_SETTING_INVALID;
}
if (plugin->client && neu_mqtt_client_is_open(plugin->client)) {
if (NULL == plugin->client) {
plugin->client = neu_mqtt_client_new(NEU_MQTT_VERSION_V311);
if (NULL == plugin->client) {
plog_error(plugin, "neu_mqtt_client_new fail");
rv = NEU_ERR_EINTERNAL;
goto error;
}
} else if (neu_mqtt_client_is_open(plugin->client)) {
started = true;
rv = neu_mqtt_client_close(plugin->client);
if (0 != rv) {
@@ -178,13 +185,6 @@ static int mqtt_plugin_config(neu_plugin_t *plugin, const char *setting)
rv = NEU_ERR_EINTERNAL;
goto error;
}
} else {
plugin->client = neu_mqtt_client_new(NEU_MQTT_VERSION_V311);
if (NULL == plugin->client) {
plog_error(plugin, "neu_mqtt_client_new fail");
rv = NEU_ERR_EINTERNAL;
goto error;
}
}
rv = config_mqtt_client(plugin, plugin->client, &config);
@@ -349,10 +349,6 @@ static int mqtt_plugin_request(neu_plugin_t *plugin, neu_reqresp_head_t *head,
case NEU_REQRESP_TRANS_DATA:
error = handle_trans_data(plugin, data);
break;
case NEU_REQRESP_NODES_STATE: {
error = handle_nodes_state(plugin, data);
break;
}
case NEU_REQRESP_NODE_DELETED:
break;
default:
@@ -385,7 +381,7 @@ const neu_plugin_module_t neu_plugin_module = {
.intf_funs = &plugin_intf_funs,
.kind = NEU_PLUGIN_KIND_SYSTEM,
.type = NEU_NA_TYPE_APP,
.sub_msg[0] = NEU_SUBSCRIBE_NODES_STATE,
.sub_msg = { 0 },
.display = true,
.single = false,
};
+1 -1
View File
@@ -422,7 +422,7 @@ int neu_adapter_driver_add_group(neu_adapter_driver_t *driver, const char *name,
.second = interval / 1000,
.millisecond = interval % 1000,
.usr_data = (void *) find,
.type = NEU_EVENT_TIMER_BLOCK,
.type = NEU_EVENT_TIMER_NOBLOCK,
};
find->driver = driver;
+1 -1
View File
@@ -589,7 +589,7 @@ static void conn_connect(neu_conn_t *conn)
sizeof(struct sockaddr_in));
if (ret != 0 && errno != EINPROGRESS) {
close(fd);
zlog_error(neuron, "connect %s:%d error: %s(%d)",
zlog_error(conn->param.log, "connect %s:%d error: %s(%d)",
conn->param.params.tcp_client.ip,
conn->param.params.tcp_client.port, strerror(errno),
errno);
+3 -2
View File
@@ -333,7 +333,7 @@ static int apply_schema_file(sqlite3 *db, const char *dir, const char *file)
char *err_msg = NULL;
rv = sqlite3_exec(db, sql, NULL, NULL, &err_msg);
if (SQLITE_OK != rv) {
nlog_error("execute %s fail: %s", path, err_msg);
nlog_error("execute %s fail: (%d)%s", path, rv, err_msg);
sqlite3_free(err_msg);
rv = NEU_ERR_EINTERNAL;
goto end;
@@ -772,7 +772,8 @@ int neu_persister_load_tags(const char *driver_name, const char *group_name,
sqlite3_stmt *stmt = NULL;
const char * query = "SELECT name, address, attribute, precision, type, "
"decimal, description "
"FROM tags WHERE driver_name=? AND group_name=?";
"FROM tags WHERE driver_name=? AND group_name=? "
"ORDER BY rowid ASC";
utarray_new(*tags, neu_tag_get_icd());
+1 -1
View File
@@ -24,7 +24,7 @@ target_include_directories(jwt_test PRIVATE
${CMAKE_SOURCE_DIR}/src
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src/utils)
target_link_libraries(jwt_test neuron-base gtest_main gtest jansson ssl crypto jwt)
target_link_libraries(jwt_test neuron-base gtest_main gtest jansson ssl crypto jwt libzlog.so)
add_executable(base64_test base64_test.cc ${CMAKE_SOURCE_DIR}/src/utils/base64.c)
target_include_directories(base64_test PRIVATE
+1 -1
View File
@@ -1 +1 @@
2.3.0
2.3.1