236 lines
7.0 KiB
C++
236 lines
7.0 KiB
C++
/*
|
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
*
|
|
* This program is free software: you can use, redistribute, and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3
|
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <iostream>
|
|
#include "clientInt.h"
|
|
#include "clientMonitor.h"
|
|
#include "taoserror.h"
|
|
#include "tglobal.h"
|
|
#include "thash.h"
|
|
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wwrite-strings"
|
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
|
#pragma GCC diagnostic ignored "-Wunused-variable"
|
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
|
|
|
#include "executor.h"
|
|
#include "taos.h"
|
|
|
|
int main(int argc, char** argv) {
|
|
testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|
|
|
|
//TEST(clientMonitorTest, monitorTest) {
|
|
// const char* cluster1 = "cluster1";
|
|
// const char* cluster2 = "cluster2";
|
|
// SEpSet epSet;
|
|
// clientMonitorInit(cluster1, epSet, NULL);
|
|
// const char* counterName1 = "slow_query";
|
|
// const char* counterName2 = "select_count";
|
|
// const char* help1 = "test for slowQuery";
|
|
// const char* help2 = "test for selectSQL";
|
|
// const char* lables[] = {"lable1"};
|
|
// taos_counter_t* c1 = createClusterCounter(cluster1, counterName1, help1, 1, lables);
|
|
// ASSERT_TRUE(c1 != NULL);
|
|
// taos_counter_t* c2 = createClusterCounter(cluster1, counterName2, help2, 1, lables);
|
|
// ASSERT_TRUE(c2 != NULL);
|
|
// ASSERT_TRUE(c1 != c2);
|
|
// taos_counter_t* c21 = createClusterCounter(cluster2, counterName1, help2, 1, lables);
|
|
// ASSERT_TRUE(c21 == NULL);
|
|
// clientMonitorInit(cluster2, epSet, NULL);
|
|
// c21 = createClusterCounter(cluster2, counterName1, help2, 1, lables);
|
|
// ASSERT_TRUE(c21 != NULL);
|
|
// int i = 0;
|
|
// while (i < 12) {
|
|
// taosMsleep(10);
|
|
// ++i;
|
|
// }
|
|
// clusterMonitorClose(cluster1);
|
|
// clusterMonitorClose(cluster2);
|
|
//}
|
|
|
|
static char* readFile(TdFilePtr pFile, int64_t *offset, int64_t size){
|
|
if(taosLSeekFile(pFile, *offset, SEEK_SET) < 0){
|
|
uError("failed to seek file:%p code: %d", pFile, errno);
|
|
return NULL;
|
|
}
|
|
|
|
ASSERT(size > *offset);
|
|
char* pCont = NULL;
|
|
int64_t totalSize = 0;
|
|
if (size - *offset >= SLOW_LOG_SEND_SIZE_MAX) {
|
|
pCont = (char*)taosMemoryCalloc(1, 2 * SLOW_LOG_SEND_SIZE_MAX);
|
|
totalSize = 2 * SLOW_LOG_SEND_SIZE_MAX;
|
|
}else{
|
|
pCont = (char*)taosMemoryCalloc(1, 2 * (size - *offset));
|
|
totalSize = 2 * (size - *offset);
|
|
}
|
|
|
|
if(pCont == NULL){
|
|
uError("failed to allocate memory for slow log, size:%" PRId64, totalSize);
|
|
return NULL;
|
|
}
|
|
char* buf = pCont;
|
|
(void)strcat(buf++, "[");
|
|
int64_t readSize = taosReadFile(pFile, buf, SLOW_LOG_SEND_SIZE_MAX);
|
|
if (readSize <= 0) {
|
|
if (readSize < 0){
|
|
uError("failed to read len from file:%p since %s", pFile, terrstr());
|
|
}
|
|
taosMemoryFree(pCont);
|
|
return NULL;
|
|
}
|
|
|
|
totalSize = 0;
|
|
while(1){
|
|
size_t len = strlen(buf);
|
|
totalSize += (len+1);
|
|
if (totalSize > readSize || len == 0) {
|
|
*(buf-1) = ']';
|
|
*buf = '\0';
|
|
break;
|
|
}
|
|
buf[len] = ','; // replace '\0' with ','
|
|
buf += (len + 1);
|
|
*offset += (len+1);
|
|
}
|
|
|
|
uDebug("[monitor] monitorReadSendSlowLog slow log:%s", pCont);
|
|
return pCont;
|
|
}
|
|
|
|
static int64_t getFileSize(char* path){
|
|
int64_t fileSize = 0;
|
|
if (taosStatFile(path, &fileSize, NULL, NULL) < 0) {
|
|
return -1;
|
|
}
|
|
|
|
return fileSize;
|
|
}
|
|
|
|
TEST(clientMonitorTest, sendTest) {
|
|
TAOS* taos = taos_connect("127.0.0.1", "root", "taosdata", NULL, 0);
|
|
ASSERT_TRUE(taos != NULL);
|
|
printf("connect taosd sucessfully.\n");
|
|
|
|
int64_t rid = *(int64_t *)taos;
|
|
slowQueryLog(rid, false, -1, 1000);
|
|
int i = 0;
|
|
while (i < 20) {
|
|
slowQueryLog(rid, false, 0, i * 1000);
|
|
taosMsleep(10);
|
|
++i;
|
|
}
|
|
|
|
taos_close(taos);
|
|
}
|
|
|
|
TEST(clientMonitorTest, ReadOneFile) {
|
|
// Create a TdFilePtr object and set it up for testing
|
|
|
|
TdFilePtr pFile = taosOpenFile("./tdengine-1-wewe", TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND | TD_FILE_READ | TD_FILE_TRUNC);
|
|
if (pFile == NULL) {
|
|
uError("failed to open file:./test.txt since %s", terrstr());
|
|
return;
|
|
}
|
|
|
|
const int batch = 10;
|
|
const int size = 10;
|
|
for(int i = 0; i < batch; i++){
|
|
char value[size] = {0};
|
|
(void)memset(value, '0' + i, size - 1);
|
|
if (taosWriteFile(pFile, value, strlen(value) + 1) < 0){
|
|
uError("failed to write len to file:%p since %s", pFile, terrstr());
|
|
}
|
|
}
|
|
|
|
// Create a void pointer and set it up for testing
|
|
void* pTransporter = NULL;
|
|
|
|
// Create an SEpSet object and set it up for testing
|
|
SEpSet* epSet = NULL;
|
|
|
|
int64_t fileSize = getFileSize("./tdengine-1-wewe");
|
|
// Call the function to be tested
|
|
int64_t offset = 0;
|
|
while(1){
|
|
if (offset >= fileSize) {
|
|
break;
|
|
}
|
|
char* val = readFile(pFile, &offset, fileSize);
|
|
printf("offset:%lld,fileSize:%lld,val:%s\n", offset, fileSize, val);
|
|
}
|
|
|
|
// char value[size] = {0};
|
|
// memset(value, '0', size - 1);
|
|
// if (taosWriteFile(pFile, value, strlen(value) + 1) < 0){
|
|
// uError("failed to write len to file:%p since %s", pFile, terrstr());
|
|
// }
|
|
|
|
// monitorReadSendSlowLog(pFile, (int64_t)pTransporter, epSet);
|
|
|
|
// Clean up any resources created for testing
|
|
taosCloseFile(&pFile);
|
|
}
|
|
|
|
//TEST(clientMonitorTest, ReadTwoFile) {
|
|
// // Create a TdFilePtr object and set it up for testing
|
|
//
|
|
// TdFilePtr pFile = taosOpenFile("/tmp/tdengine_slow_log/tdengine-1-wewe", TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND | TD_FILE_READ | TD_FILE_TRUNC);
|
|
// if (pFile == NULL) {
|
|
// uError("failed to open file:./test.txt since %s", terrstr());
|
|
// return;
|
|
// }
|
|
//
|
|
// const int batch = 10;
|
|
// const int size = SLOW_LOG_SEND_SIZE/batch;
|
|
// for(int i = 0; i < batch + 1; i++){
|
|
// char value[size] = {0};
|
|
// memset(value, '0' + i, size - 1);
|
|
// if (taosWriteFile(pFile, value, strlen(value) + 1) < 0){
|
|
// uError("failed to write len to file:%p since %s", pFile, terrstr());
|
|
// }
|
|
// }
|
|
//
|
|
// taosFsyncFile(pFile);
|
|
// taosCloseFile(&pFile);
|
|
//
|
|
// pFile = taosOpenFile("/tmp/tdengine_slow_log/tdengine-2-wewe", TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND | TD_FILE_READ | TD_FILE_TRUNC);
|
|
// if (pFile == NULL) {
|
|
// uError("failed to open file:./test.txt since %s", terrstr());
|
|
// return;
|
|
// }
|
|
//
|
|
// for(int i = 0; i < batch + 1; i++){
|
|
// char value[size] = {0};
|
|
// memset(value, '0' + i, size - 1);
|
|
// if (taosWriteFile(pFile, value, strlen(value) + 1) < 0){
|
|
// uError("failed to write len to file:%p since %s", pFile, terrstr());
|
|
// }
|
|
// }
|
|
//
|
|
// taosFsyncFile(pFile);
|
|
// taosCloseFile(&pFile);
|
|
//
|
|
// SAppInstInfo pAppInfo = {0};
|
|
// pAppInfo.clusterId = 2;
|
|
// pAppInfo.monitorParas.tsEnableMonitor = 1;
|
|
// strcpy(tsTempDir,"/tmp");
|
|
//// monitorSendAllSlowLogFromTempDir(&pAppInfo);
|
|
//
|
|
//}
|