diff --git a/.gitmodules b/.gitmodules index 7c84eac8a4ee7529005855bc836387561c49ae2d..049b39abfb2cf5f31abe10f194e7a09c4dc932f0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "src/connector/grafanaplugin"] path = src/connector/grafanaplugin url = https://github.com/taosdata/grafanaplugin +[submodule "src/connector/hivemq-tdengine-extension"] + path = src/connector/hivemq-tdengine-extension + url = https://github.com/huskar-t/hivemq-tdengine-extension.git diff --git a/.travis.yml b/.travis.yml index 5ce9873d1534f8aec1b8e44640cce145c1254330..eb69370418a9c83c7b8bfe5daa1d6ead19150243 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,6 +32,8 @@ matrix: - python3-setuptools - valgrind - psmisc + - unixodbc + - unixodbc-dev before_script: - export TZ=Asia/Harbin diff --git a/Jenkinsfile b/Jenkinsfile index 4410d81be6974fc246f50044cbc142076212677b..8bf7e435fd5e96aa49e7f2e07af0c4b2decc365e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,11 +4,12 @@ pipeline { WK = '/var/lib/jenkins/workspace/TDinternal' WKC= '/var/lib/jenkins/workspace/TDinternal/community' } + stages { stage('Parallel test stage') { parallel { stage('pytest') { - agent{label 'master'} + agent{label '184'} steps { sh ''' date @@ -33,13 +34,13 @@ pipeline { } } stage('test_b1') { - agent{label '184'} + agent{label 'master'} steps { sh ''' - date cd ${WKC} git checkout develop git pull + git submodule update cd ${WK} git checkout develop @@ -62,10 +63,10 @@ pipeline { agent{label "185"} steps { sh ''' - cd ${WKC} git checkout develop git pull + git submodule update cd ${WK} git checkout develop @@ -78,7 +79,21 @@ pipeline { cmake .. > /dev/null make > /dev/null cd ${WKC}/tests/pytest - ./crash_gen.sh -a -p -t 4 -s 2000 + ''' + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh ''' + cd ${WKC}/tests/pytest + ./crash_gen.sh -a -p -t 4 -s 2000 + ''' + } + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh ''' + cd ${WKC}/tests/pytest + ./crash_gen.sh --valgrind -p -t 10 -s 100 -b 4 + ./handle_crash_gen_val_log.sh + ''' + } + sh ''' date cd ${WKC}/tests ./test-all.sh b2 @@ -89,12 +104,13 @@ pipeline { stage('test_valgrind') { agent{label "186"} + steps { sh ''' - date cd ${WKC} git checkout develop git pull + git submodule update cd ${WK} git checkout develop @@ -116,10 +132,122 @@ pipeline { date''' } } + stage('connector'){ + agent{label "release"} + steps{ + sh''' + cd ${WORKSPACE} + git checkout develop + ''' + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh ''' + cd ${WORKSPACE}/tests/gotest + bash batchtest.sh + ''' + } + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh ''' + cd ${WORKSPACE}/tests/examples/python/PYTHONConnectorChecker + python3 PythonChecker.py + ''' + } + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh ''' + cd ${WORKSPACE}/tests/examples/JDBC/JDBCDemo/ + mvn clean package assembly:single >/dev/null + java -jar target/jdbcChecker-SNAPSHOT-jar-with-dependencies.jar -host 127.0.0.1 + ''' + } + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh ''' + cd ${JENKINS_HOME}/workspace/C#NET/src/CheckC# + dotnet run + ''' + } + + } + } } } } - + post { + success { + emailext ( + subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", + body: ''' + +
+ + + ++ 构建信息 + |
+
+
+
+ |
+
+ 构建信息 + |
+
+
+
+ |
+
mseconds:查询数据库更新的时间间隔,单位为毫秒。一般设置为1000毫秒。返回值为指向TDengine_SUB 结构的指针,如果返回为空,表示失败。
TAOS_ROW taos_consume(TAOS_SUB *tsub)
该函数用来获取订阅的结果,用户应用程序将其置于一个无限循环语句。如果数据库有新记录到达,该API将返回该最新的记录。如果没有新的记录,该API将阻塞。如果返回值为空,说明系统出错。参数说明:
tsub:taos_subscribe的结构体指针。
void taos_unsubscribe(TAOS_SUB *tsub)
取消订阅。应用程序退出时,务必调用该函数以避免资源泄露。
int taos_num_subfields(TAOS_SUB *tsub)
获取返回的一行记录中数据包含多少列。
TAOS_FIELD *taos_fetch_subfields(TAOS_SUB *tsub)
获取每列数据的属性(数据类型、名字、长度),与taos_num_subfileds配合使用,可解析返回的每行数据。
int taos_num_fields(TAOS_SUB *tsub)
获取返回的一行记录中数据包含多少列。
TAOS_FIELD *taos_fetch_fields(TAOS_SUB *tsub)
获取每列数据的属性(数据类型、名字、长度),与taos_num_subfileds配合使用,可解析返回的每行数据。
示例代码:请看安装包中的的示范程序
TDengine采用时间驱动缓存管理策略(First-In-First-Out,FIFO),又称为写驱动的缓存管理机制。这种策略有别于读驱动的数据缓存模式(Least-Recent-Use,LRU),直接将最近写入的数据保存在系统的缓存中。当缓存达到临界值的时候,将最早的数据批量写入磁盘。一般意义上来说,对于物联网数据的使用,用户最为关心最近产生的数据,即当前状态。TDengine充分利用了这一特性,将最近到达的(当前状态)数据保存在缓存中。
diff --git a/documentation/tdenginedocs-cn/connector/index.html b/documentation/tdenginedocs-cn/connector/index.html index 3167c1521f099f8acd7ae237cc37bd5867ee209a..34ea19813fbd7a9f70074ff109308b37ba7b647a 100644 --- a/documentation/tdenginedocs-cn/connector/index.html +++ b/documentation/tdenginedocs-cn/connector/index.html @@ -64,9 +64,9 @@该API用来获取最新消息,应用程序一般会将其置于一个无限循环语句中。其中参数tsub是taos_subscribe的返回值。如果数据库有新的记录,该API将返回,返回参数是一行记录。如果没有新的记录,该API将阻塞。如果返回值为空,说明系统出错,需要检查系统是否还在正常运行。
void taos_unsubscribe(TAOS_SUB *tsub)
该API用于取消订阅,参数tsub是taos_subscribe的返回值。应用程序退出时,需要调用该API,否则有资源泄露。
int taos_num_subfields(TAOS_SUB *tsub)
int taos_num_fields(TAOS_SUB *tsub)
该API用来获取返回的一排数据中数据的列数
TAOS_FIELD *taos_fetch_subfields(TAOS_RES *res)
TAOS_FIELD *taos_fetch_fields(TAOS_RES *res)
该API用来获取每列数据的属性(数据类型、名字、字节数),与taos_num_subfileds配合使用,可用来解析返回的一排数据。
taosSql驱动包内采用cgo模式,调用了TDengine的C/C++同步接口,与TDengine进行交互,因此,在数据库操作执行完成之前,客户端应用将处于阻塞状态。单个数据库连接,在同一时刻只能有一个线程调用API。客户应用可以建立多个连接,进行多线程的数据写入或查询处理。
-更多使用的细节,请参考下载目录中的示例源码。
回去