Compare commits

...
37 Commits
Author SHA1 Message Date
fengzeroz 0ae76e1c5f Merge pull request #799 from fengzeroz/v2.2
version: 2.2.2
2022-09-16 16:26:30 +08:00
fengzero 5f41286600 version: 2.2.2 2022-09-16 08:24:45 +00:00
fengzeroz 9c48d6bcaa Merge pull request #797 from gc87/mqtt-fix-nonuser-login-v2.2
[v2.2]fix(mqtt): non-user login to rabbitmq auth failed
2022-09-16 14:58:49 +08:00
gc87 83eb1ecf61 fix(mqtt): non-user login to rabbitmq auth failed
- empty user name login to rqbbitmq login failed for user ''
2022-09-16 14:09:42 +08:00
fengzeroz 4059c22de1 Merge pull request #795 from fengzeroz/v2.2
fix(queue): modify the type of key to uint64_t
2022-09-15 15:24:10 +08:00
fengzero 179dc71408 fix(queue): modify the type of key to uint64_t 2022-09-15 07:06:43 +00:00
fengzeroz 43fc2a7080 Merge pull request #793 from fengzeroz/v2.2
async_queue FIFO
2022-09-15 09:41:45 +08:00
fengzero a95ecfe7c5 async_queue FIFO 2022-09-15 01:31:07 +00:00
fengzeroz 07b9d077b1 Merge pull request #790 from fengzeroz/v2.2
chore(rest): log unhandle msg
2022-09-14 15:40:40 +08:00
fengzero 6119023896 chore(rest): log unhandle msg 2022-09-14 06:48:39 +00:00
fengzeroz b3b9e69b7a Merge pull request #788 from fengzeroz/v2.2
fix(main): manager destory when receive sigabrt
2022-09-14 10:44:00 +08:00
fengzeroz 05aa6ea141 Merge pull request #785 from gc87/mqtt-schema-improved-v2.2
[v2.2]refactor(mqtt): improved mqtt schema description
2022-09-14 10:29:59 +08:00
fengzero 74415465ff fix(main): manager destory when receive sigabrt 2022-09-14 02:01:28 +00:00
gc87 658779c28f refactor(mqtt): improved mqtt schema description 2022-09-14 09:53:07 +08:00
fengzeroz edee7007b3 Merge pull request #784 from fengzeroz/v2.2
update tag & negative multiplication
2022-09-13 16:41:43 +08:00
fengzero 012c7b756c fix(ft): update tag 2022-09-13 08:31:13 +00:00
fengzero 3b0bdefd1a fix(driver): negative multiplication 2022-09-13 08:21:06 +00:00
fengzero 380bae660c chore(driver): update tags in group table 2022-09-13 07:39:58 +00:00
fengzeroz 32e49e0386 Merge pull request #782 from fengzeroz/v2.2
chore(driver): log timer spend time
2022-09-13 09:52:00 +08:00
fengzero 24111cacac chore(driver): log timer spend time 2022-09-13 01:43:45 +00:00
fengzeroz 978e0d3d8f Merge pull request #780 from fengzeroz/v2.2
version: 2.2.1
2022-09-09 16:42:05 +08:00
fengzero 549fe9ed7c version: 2.2.1 2022-09-09 08:41:32 +00:00
fengzeroz 4e4491eda2 Merge pull request #779 from fengzeroz/v2.2
fix(connection): multithreaded connection status exception
2022-09-09 11:27:17 +08:00
fengzero a9f4089979 fix(connection): multithreaded connection status exception 2022-09-09 03:21:21 +00:00
fengzeroz 02d14ea096 Merge pull request #777 from fengzeroz/v2.2
chore(log): log version
2022-09-08 16:59:39 +08:00
fengzero 33dbdd9eca chore(log): log version 2022-09-08 08:49:30 +00:00
fengzeroz 52dfb55007 Merge pull request #773 from fengzeroz/v2.2
fix(driver): persistence failed when updating group
2022-09-08 10:57:55 +08:00
fengzero 9b4dfef460 fix(driver): persistence failed when updating group 2022-09-08 02:41:29 +00:00
fengzeroz 31316c9363 Merge pull request #769 from eeff/eeff/2.2
Pick error code NEU_ERR_LICENSE_BAD_CLOCK to v2.2
2022-09-07 15:49:59 +08:00
eeff 58ca53f07d chore: add new error code NEU_ERR_LICENSE_BAD_CLOCK 2022-09-07 15:36:07 +08:00
fengzeroz f65d734285 Merge pull request #766 from fengzeroz/v2.2
fix(api): fix double type precision
2022-09-06 17:21:03 +08:00
fengzero bdaba2c339 fix(api): fix double type precision 2022-09-06 09:13:04 +00:00
fengzeroz 1c3cb0f9a3 Merge pull request #764 from fengzeroz/v2.2
fix(json): decode int as float/double
2022-09-06 16:33:24 +08:00
fengzero d6a040515e fix(json): decode int as float/double 2022-09-06 08:23:19 +00:00
fengzeroz fd22dc29d2 Merge pull request #755 from gc87/mqtt-mem-cache
[v2.2]Changed MQTT memory cache from per connection to per node
2022-09-06 13:42:15 +08:00
fengzeroz 865a9fc364 Merge pull request #759 from fengzeroz/v2.2
fix(driver): write 1 or 1.0 fail
2022-09-05 15:35:06 +08:00
fengzero 86f17aaf90 fix(driver): write 1 or 1.0 fail 2022-09-05 07:17:41 +00:00
16 changed files with 110 additions and 67 deletions
+16 -16
View File
@@ -72,15 +72,15 @@ Update tag, it should return success.
${len} = Get Length ${res}[tags]
Should Be Equal As Integers ${len} 2
Should Be Equal As Strings ${res}[tags][1][name] tag1
Should Be Equal As Strings ${res}[tags][1][address] 1!400002
Should Be Equal As Strings ${res}[tags][1][attribute] ${TAG_ATTRIBUTE_RW}
Should Be Equal As Strings ${res}[tags][1][type] ${TAG_TYPE_INT32}
Should Be Equal As Strings ${res}[tags][0][name] tag2
Should Be Equal As Strings ${res}[tags][0][address] 1!00001
Should Be Equal As Strings ${res}[tags][0][name] tag1
Should Be Equal As Strings ${res}[tags][0][address] 1!400002
Should Be Equal As Strings ${res}[tags][0][attribute] ${TAG_ATTRIBUTE_RW}
Should Be Equal As Strings ${res}[tags][0][type] ${TAG_TYPE_BIT}
Should Be Equal As Strings ${res}[tags][0][type] ${TAG_TYPE_INT32}
Should Be Equal As Strings ${res}[tags][1][name] tag2
Should Be Equal As Strings ${res}[tags][1][address] 1!00001
Should Be Equal As Strings ${res}[tags][1][attribute] ${TAG_ATTRIBUTE_RW}
Should Be Equal As Strings ${res}[tags][1][type] ${TAG_TYPE_BIT}
Delete tag from non-existent group, it should return success
${res}= Del Tags modbus-node group1 "tag1"
@@ -100,15 +100,15 @@ Update non-existent tag, it should return failure.
${len} = Get Length ${res}[tags]
Should Be Equal As Integers ${len} 2
Should Be Equal As Strings ${res}[tags][1][name] tag1
Should Be Equal As Strings ${res}[tags][1][address] 1!400002
Should Be Equal As Strings ${res}[tags][1][attribute] ${TAG_ATTRIBUTE_RW}
Should Be Equal As Strings ${res}[tags][1][type] ${TAG_TYPE_INT32}
Should Be Equal As Strings ${res}[tags][0][name] tag2
Should Be Equal As Strings ${res}[tags][0][address] 1!00001
Should Be Equal As Strings ${res}[tags][0][name] tag1
Should Be Equal As Strings ${res}[tags][0][address] 1!400002
Should Be Equal As Strings ${res}[tags][0][attribute] ${TAG_ATTRIBUTE_RW}
Should Be Equal As Strings ${res}[tags][0][type] ${TAG_TYPE_BIT}
Should Be Equal As Strings ${res}[tags][0][type] ${TAG_TYPE_INT32}
Should Be Equal As Strings ${res}[tags][1][name] tag2
Should Be Equal As Strings ${res}[tags][1][address] 1!00001
Should Be Equal As Strings ${res}[tags][1][attribute] ${TAG_ATTRIBUTE_RW}
Should Be Equal As Strings ${res}[tags][1][type] ${TAG_TYPE_BIT}
Delete tags, it should return success
Del Tags modbus-node group "tag1","tag2"
+1
View File
@@ -87,6 +87,7 @@ typedef enum {
NEU_ERR_LICENSE_MAX_NODES = 2404,
NEU_ERR_LICENSE_MAX_TAGS = 2405,
NEU_ERR_LICENSE_TOKEN_NOT_MATCH = 2406,
NEU_ERR_LICENSE_BAD_CLOCK = 2407,
// common error codes for plugins
NEU_ERR_PLUGIN_READ_FAILURE = 3000,
+1
View File
@@ -112,6 +112,7 @@ static void wrap_read_response_json(neu_resp_tag_value_t *tags, uint16_t len,
case NEU_TYPE_DOUBLE:
json->tags[i].t = NEU_JSON_DOUBLE;
json->tags[i].value.val_double = tag->value.value.d64;
json->tags[i].precision = tag->value.precision;
break;
case NEU_TYPE_BOOL:
json->tags[i].t = NEU_JSON_BOOL;
+2 -2
View File
@@ -21,7 +21,7 @@
},
"format": {
"name": "upload format",
"description": "Upload format on mqtt",
"description": "The json format of the data reported in the upload topic. In the values mode, all items are contained in the values object or the errors object, respectively. In tags mode, all items are contained in an array",
"attribute": "optional",
"type": "map",
"default": 0,
@@ -40,7 +40,7 @@
},
"cache": {
"name": "cache size(MB)",
"description": "Upload data memory cache",
"description": "The maximum byte limit in MB for the data backlog when an MQTT connection exception occurs",
"type": "int",
"attribute": "optional",
"default": 64,
+2
View File
@@ -302,6 +302,8 @@ static int dashb_plugin_request(neu_plugin_t * plugin,
handle_read_resp(header->ctx, (neu_resp_read_group_t *) data);
break;
default:
nlog_fatal("recv unhandle msg: %s",
neu_reqresp_type_string(header->type));
assert(false);
break;
}
+1
View File
@@ -153,6 +153,7 @@ void handle_read_resp(nng_aio *aio, neu_resp_read_group_t *resp)
case NEU_TYPE_DOUBLE:
api_res.tags[i].t = NEU_JSON_DOUBLE;
api_res.tags[i].value.val_double = resp->tags[i].value.value.d64;
api_res.tags[i].precision = resp->tags[i].value.precision;
break;
case NEU_TYPE_BIT:
api_res.tags[i].t = NEU_JSON_BIT;
+35
View File
@@ -253,6 +253,11 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
free(tag);
return;
}
if (tag->type == NEU_TYPE_FLOAT || tag->type == NEU_TYPE_DOUBLE) {
if (cmd->value.type == NEU_TYPE_INT64) {
cmd->value.value.d64 = (double) cmd->value.value.u64;
}
}
switch (tag->type) {
case NEU_TYPE_BOOL:
case NEU_TYPE_STRING:
@@ -746,8 +751,14 @@ static int read_callback(void *usr_data)
}
if (group->grp.tags != NULL) {
int64_t spend = group->driver->adapter.timestamp;
group->driver->adapter.module->intf_funs->driver.group_timer(
group->driver->adapter.plugin, &group->grp);
spend = group->driver->adapter.timestamp - spend;
nlog_info("%s-%s timer: %" PRId64, group->driver->adapter.name,
group->name, spend);
}
return 0;
@@ -851,21 +862,33 @@ static int read_report_group(int64_t timestamp, int64_t timeout,
datas[index].value.type = NEU_TYPE_DOUBLE;
switch (tag->type) {
case NEU_TYPE_INT8:
datas[index].value.value.d64 =
(double) datas[index].value.value.i8 * tag->decimal;
break;
case NEU_TYPE_UINT8:
datas[index].value.value.d64 =
(double) datas[index].value.value.u8 * tag->decimal;
break;
case NEU_TYPE_INT16:
datas[index].value.value.d64 =
(double) datas[index].value.value.i16 * tag->decimal;
break;
case NEU_TYPE_UINT16:
datas[index].value.value.d64 =
(double) datas[index].value.value.u16 * tag->decimal;
break;
case NEU_TYPE_INT32:
datas[index].value.value.d64 =
(double) datas[index].value.value.i32 * tag->decimal;
break;
case NEU_TYPE_UINT32:
datas[index].value.value.d64 =
(double) datas[index].value.value.u32 * tag->decimal;
break;
case NEU_TYPE_INT64:
datas[index].value.value.d64 =
(double) datas[index].value.value.i64 * tag->decimal;
break;
case NEU_TYPE_UINT64:
datas[index].value.value.d64 =
(double) datas[index].value.value.u64 * tag->decimal;
@@ -977,21 +1000,33 @@ static void read_group(int64_t timestamp, int64_t timeout,
datas[index].value.type = NEU_TYPE_DOUBLE;
switch (tag->type) {
case NEU_TYPE_INT8:
datas[index].value.value.d64 =
(double) datas[index].value.value.i8 * tag->decimal;
break;
case NEU_TYPE_UINT8:
datas[index].value.value.d64 =
(double) datas[index].value.value.u8 * tag->decimal;
break;
case NEU_TYPE_INT16:
datas[index].value.value.d64 =
(double) datas[index].value.value.i16 * tag->decimal;
break;
case NEU_TYPE_UINT16:
datas[index].value.value.d64 =
(double) datas[index].value.value.u16 * tag->decimal;
break;
case NEU_TYPE_INT32:
datas[index].value.value.d64 =
(double) datas[index].value.value.i32 * tag->decimal;
break;
case NEU_TYPE_UINT32:
datas[index].value.value.d64 =
(double) datas[index].value.value.u32 * tag->decimal;
break;
case NEU_TYPE_INT64:
datas[index].value.value.d64 =
(double) datas[index].value.value.i64 * tag->decimal;
break;
case NEU_TYPE_UINT64:
datas[index].value.value.d64 =
(double) datas[index].value.value.u64 * tag->decimal;
+8 -17
View File
@@ -142,28 +142,19 @@ int neu_group_update_tag(neu_group_t *group, neu_datatag_t *tag)
HASH_FIND_STR(group->tags, tag->name, el);
if (el != NULL) {
HASH_DEL(group->tags, el);
free(el->name);
free(el->tag->name);
free(el->tag->address);
free(el->tag->description);
free(el->tag);
free(el);
el->tag->address = strdup(tag->address);
el = calloc(1, sizeof(tag_elem_t));
el->name = strdup(tag->name);
el->tag = calloc(1, sizeof(neu_datatag_t));
el->tag->name = strdup(tag->name);
el->tag->address = strdup(tag->address);
free(el->tag->description);
el->tag->description = strdup(tag->description);
el->tag->type = tag->type;
el->tag->attribute = tag->attribute;
el->tag->precision = tag->precision;
el->tag->decimal = tag->decimal;
el->tag->option = tag->option;
el->tag->type = tag->type;
el->tag->attribute = tag->attribute;
el->tag->precision = tag->precision;
el->tag->decimal = tag->decimal;
el->tag->option = tag->option;
memcpy(el->tag->meta, tag->meta, sizeof(tag->meta));
HASH_ADD_STR(group->tags, name, el);
update_timestamp(group);
ret = NEU_ERR_SUCCESS;
}
+2
View File
@@ -366,7 +366,9 @@ ssize_t neu_conn_recv(neu_conn_t *conn, uint8_t *buf, ssize_t len)
void neu_conn_disconnect(neu_conn_t *conn)
{
pthread_mutex_lock(&conn->mtx);
conn_disconnect(conn);
pthread_mutex_unlock(&conn->mtx);
}
static void conn_free_param(neu_conn_t *conn)
+13 -3
View File
@@ -509,9 +509,19 @@ static void client_reconnect(struct mqtt_client *mqtt, void **p_reconnect_state)
const char *will_payload = state->will_payload;
size_t payload_len = state->will_payload_len;
enum MQTTErrors rc = mqtt_connect(
mqtt, client_id, will_topic, will_payload, payload_len, state->username,
state->password, connect_flags, state->keepalive);
char *username = NULL;
if (NULL != state->username && 0 < strlen(state->username)) {
username = state->username;
}
char *password = NULL;
if (NULL != state->password && 0 < strlen(state->password)) {
password = state->password;
}
enum MQTTErrors rc =
mqtt_connect(mqtt, client_id, will_topic, will_payload, payload_len,
username, password, connect_flags, state->keepalive);
if (MQTT_OK != rc) {
return;
+7 -2
View File
@@ -27,6 +27,7 @@
#include "argparse.h"
#include "daemon.h"
#include "version.h"
static bool exit_flag = false;
static neu_manager_t *g_manager = NULL;
@@ -37,7 +38,9 @@ static void sig_handler(int sig)
{
nlog_warn("recv sig: %d", sig);
neu_manager_destroy(g_manager);
if (sig != SIGABRT) {
neu_manager_destroy(g_manager);
}
zlog_fini();
exit_flag = true;
}
@@ -56,7 +59,9 @@ static int neuron_run(const neu_cli_args_t *args)
nlog_warn("neuron process failed enable core dump, ignore");
}
zlog_notice(neuron, "neuron process, daemon: %d", args->daemonized);
zlog_notice(neuron, "neuron process, daemon: %d, version: %s (%s %s)",
args->daemonized, NEURON_VERSION,
NEURON_GIT_REV NEURON_GIT_DIFF, NEURON_BUILD_DATE);
g_manager = neu_manager_create();
if (g_manager == NULL) {
nlog_fatal("neuron process failed to create neuron manager, exit!");
+1 -1
View File
@@ -1095,7 +1095,7 @@ int neu_persister_update_group(neu_persister_t * persister,
{
return execute_sql(persister->db,
"UPDATE groups SET driver_name=%Q, name=%Q, "
"interval=%i, WHERE driver_name=%Q AND name=%Q",
"interval=%i WHERE driver_name=%Q AND name=%Q",
driver_name, group_info->name, group_info->interval,
driver_name, group_info->name);
}
+9 -22
View File
@@ -26,7 +26,7 @@ config_ **/
#include "utils/utextend.h"
typedef struct element {
uint32_t key;
uint64_t key;
void *data;
@@ -107,39 +107,26 @@ void neu_async_queue_push(neu_async_queue_t *q, void *elem)
int neu_async_queue_pop(neu_async_queue_t *q, uint64_t key, void **elem)
{
element *elt = NULL, *first = NULL;
element *elt = NULL, *tmp = NULL;
int ret = -1;
nng_mtx_lock(q->mtx);
first = q->list;
elt = DL_LAST(q->list);
while (elt != NULL) {
DL_FOREACH_SAFE(q->list, elt, tmp)
{
if (elt->key == key) {
DL_DELETE(q->list, elt);
*elem = elt->data;
free(elt);
ret = 0;
break;
}
if (first == elt) {
break;
}
if (q->expire_fn(elt->data)) {
element *tmp = DL_PREV(elt);
DL_DELETE(q->list, elt);
q->free_fn(elt->data);
free(elt);
elt = tmp;
} else {
elt = DL_PREV(elt);
if (q->expire_fn(elt->data)) {
DL_DELETE(q->list, elt);
q->free_fn(elt->data);
free(elt);
}
}
}
nng_mtx_unlock(q->mtx);
return ret;
+10 -2
View File
@@ -131,10 +131,18 @@ static int decode_object(json_t *root, neu_json_elem_t *ele)
ele->v.val_str = strdup(json_string_value(ob));
break;
case NEU_JSON_FLOAT:
ele->v.val_float = json_real_value(ob);
if (json_is_integer(ob)) {
ele->v.val_float = (float) json_integer_value(ob);
} else {
ele->v.val_float = json_real_value(ob);
}
break;
case NEU_JSON_DOUBLE:
ele->v.val_double = json_real_value(ob);
if (json_is_integer(ob)) {
ele->v.val_double = (double) json_integer_value(ob);
} else {
ele->v.val_double = json_real_value(ob);
}
break;
case NEU_JSON_BOOL:
ele->v.val_bool = json_boolean_value(ob);
+1 -1
View File
@@ -1 +1 @@
2.1.2
2.2.1
+1 -1
View File
@@ -1 +1 @@
2.2.0
2.2.2