提交 adfcd98e 编写于 作者: G Ganlin Zhao

[TD-6452]<feature>: taoskeeper add HTTP status codes

上级 eef0de8a
...@@ -27,6 +27,11 @@ extern "C" { ...@@ -27,6 +27,11 @@ extern "C" {
monSaveDnodeLog(level, __VA_ARGS__); \ monSaveDnodeLog(level, __VA_ARGS__); \
} }
typedef struct {
const char * name;
int32_t code;
int32_t index;
} SMonHttpStatus;
typedef struct { typedef struct {
char * acctId; char * acctId;
...@@ -67,6 +72,8 @@ void monIncQueryReqCnt(); ...@@ -67,6 +72,8 @@ void monIncQueryReqCnt();
void monIncSubmitReqCnt(); void monIncSubmitReqCnt();
int32_t monFetchQueryReqCnt(); int32_t monFetchQueryReqCnt();
int32_t monFetchSubmitReqCnt(); int32_t monFetchSubmitReqCnt();
SMonHttpStatus *monGetHttpStatusHashTableEntry(int32_t code);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#define HTTP_WRITE_WAIT_TIME_MS 5 #define HTTP_WRITE_WAIT_TIME_MS 5
#define HTTP_PASSWORD_LEN TSDB_UNI_LEN #define HTTP_PASSWORD_LEN TSDB_UNI_LEN
#define HTTP_SESSION_ID_LEN (TSDB_USER_LEN + HTTP_PASSWORD_LEN) #define HTTP_SESSION_ID_LEN (TSDB_USER_LEN + HTTP_PASSWORD_LEN)
#define HTTP_STATUS_CODE_NUM 63
typedef enum HttpReqType { typedef enum HttpReqType {
HTTP_REQTYPE_OTHERS = 0, HTTP_REQTYPE_OTHERS = 0,
...@@ -189,6 +190,7 @@ typedef struct HttpServer { ...@@ -189,6 +190,7 @@ typedef struct HttpServer {
int32_t methodScannerLen; int32_t methodScannerLen;
int32_t requestNum; int32_t requestNum;
int32_t status; int32_t status;
int32_t statusCodeErrs[HTTP_STATUS_CODE_NUM];
pthread_t thread; pthread_t thread;
HttpThread * pThreads; HttpThread * pThreads;
void * contextCache; void * contextCache;
......
...@@ -45,72 +45,70 @@ ...@@ -45,72 +45,70 @@
#define MAX_TIMESERIES_LEN 30 #define MAX_TIMESERIES_LEN 30
#define CHECK_INTERVAL 1000 #define CHECK_INTERVAL 1000
#define MON_MAX_HTTP_CODE 63 static SMonHttpStatus monHttpStatusTable[] = {
{"HTTP_CODE_CONTINUE", 100},
static const char *monHttpStatusCodeTable[MON_MAX_HTTP_CODE][2] = { {"HTTP_CODE_SWITCHING_PROTOCOL", 101},
{"HTTP_CODE_CONTINUE", "100"}, {"HTTP_CODE_PROCESSING", 102},
{"HTTP_CODE_SWITCHING_PROTOCOL", "101"}, {"HTTP_CODE_EARLY_HINTS", 103},
{"HTTP_CODE_PROCESSING", "102"}, {"HTTP_CODE_OK", 200},
{"HTTP_CODE_EARLY_HINTS", "103"}, {"HTTP_CODE_CREATED", 201},
{"HTTP_CODE_OK", "200"}, {"HTTP_CODE_ACCEPTED", 202},
{"HTTP_CODE_CREATED", "201"}, {"HTTP_CODE_NON_AUTHORITATIVE_INFO", 203},
{"HTTP_CODE_ACCEPTED", "202"}, {"HTTP_CODE_NO_CONTENT", 204},
{"HTTP_CODE_NON_AUTHORITATIVE_INFO", "203"}, {"HTTP_CODE_RESET_CONTENT", 205},
{"HTTP_CODE_NO_CONTENT", "204"}, {"HTTP_CODE_PARTIAL_CONTENT", 206},
{"HTTP_CODE_RESET_CONTENT", "205"}, {"HTTP_CODE_MULTI_STATUS", 207},
{"HTTP_CODE_PARTIAL_CONTENT", "206"}, {"HTTP_CODE_ALREADY_REPORTED", 208},
{"HTTP_CODE_MULTI_STATUS", "207"}, {"HTTP_CODE_IM_USED", 226},
{"HTTP_CODE_ALREADY_REPORTED", "208"}, {"HTTP_CODE_MULTIPLE_CHOICE", 300},
{"HTTP_CODE_IM_USED", "226"}, {"HTTP_CODE_MOVED_PERMANENTLY", 301},
{"HTTP_CODE_MULTIPLE_CHOICE", "300"}, {"HTTP_CODE_FOUND", 302},
{"HTTP_CODE_MOVED_PERMANENTLY", "301"}, {"HTTP_CODE_SEE_OTHER", 303},
{"HTTP_CODE_FOUND", "302"}, {"HTTP_CODE_NOT_MODIFIED", 304},
{"HTTP_CODE_SEE_OTHER", "303"}, {"HTTP_CODE_USE_PROXY", 305},
{"HTTP_CODE_NOT_MODIFIED", "304"}, {"HTTP_CODE_UNUSED", 306},
{"HTTP_CODE_USE_PROXY", "305"}, {"HTTP_CODE_TEMPORARY_REDIRECT", 307},
{"HTTP_CODE_UNUSED", "306"}, {"HTTP_CODE_PERMANENT_REDIRECT", 308},
{"HTTP_CODE_TEMPORARY_REDIRECT", "307"}, {"HTTP_CODE_BAD_REQUEST", 400},
{"HTTP_CODE_PERMANENT_REDIRECT", "308"}, {"HTTP_CODE_UNAUTHORIZED", 401},
{"HTTP_CODE_BAD_REQUEST", "400"}, {"HTTP_CODE_PAYMENT_REQUIRED", 402},
{"HTTP_CODE_UNAUTHORIZED", "401"}, {"HTTP_CODE_FORBIDDEN", 403},
{"HTTP_CODE_PAYMENT_REQUIRED", "402"}, {"HTTP_CODE_NOT_FOUND", 404},
{"HTTP_CODE_FORBIDDEN", "403"}, {"HTTP_CODE_METHOD_NOT_ALLOWED", 405},
{"HTTP_CODE_NOT_FOUND", "404"}, {"HTTP_CODE_NOT_ACCEPTABLE", 406},
{"HTTP_CODE_METHOD_NOT_ALLOWED", "405"}, {"HTTP_CODE_PROXY_AUTH_REQUIRED", 407},
{"HTTP_CODE_NOT_ACCEPTABLE", "406"}, {"HTTP_CODE_REQUEST_TIMEOUT", 408},
{"HTTP_CODE_PROXY_AUTH_REQUIRED", "407"}, {"HTTP_CODE_CONFLICT", 409},
{"HTTP_CODE_REQUEST_TIMEOUT", "408"}, {"HTTP_CODE_GONE", 410},
{"HTTP_CODE_CONFLICT", "409"}, {"HTTP_CODE_LENGTH_REQUIRED", 411},
{"HTTP_CODE_GONE", "410"}, {"HTTP_CODE_PRECONDITION_FAILED", 412},
{"HTTP_CODE_LENGTH_REQUIRED", "411"}, {"HTTP_CODE_PAYLOAD_TOO_LARGE", 413},
{"HTTP_CODE_PRECONDITION_FAILED", "412"}, {"HTTP_CODE_URI_TOO_LARGE", 414},
{"HTTP_CODE_PAYLOAD_TOO_LARGE", "413"}, {"HTTP_CODE_UNSUPPORTED_MEDIA_TYPE", 415},
{"HTTP_CODE_URI_TOO_LARGE", "414"}, {"HTTP_CODE_RANGE_NOT_SATISFIABLE", 416},
{"HTTP_CODE_UNSUPPORTED_MEDIA_TYPE", "415"}, {"HTTP_CODE_EXPECTATION_FAILED", 417},
{"HTTP_CODE_RANGE_NOT_SATISFIABLE", "416"}, {"HTTP_CODE_IM_A_TEAPOT", 418},
{"HTTP_CODE_EXPECTATION_FAILED", "417"}, {"HTTP_CODE_MISDIRECTED_REQUEST", 421},
{"HTTP_CODE_IM_A_TEAPOT", "418"}, {"HTTP_CODE_UNPROCESSABLE_ENTITY", 422},
{"HTTP_CODE_MISDIRECTED_REQUEST", "421"}, {"HTTP_CODE_LOCKED", 423},
{"HTTP_CODE_UNPROCESSABLE_ENTITY", "422"}, {"HTTP_CODE_FAILED_DEPENDENCY", 424},
{"HTTP_CODE_LOCKED", "423"}, {"HTTP_CODE_TOO_EARLY", 425},
{"HTTP_CODE_FAILED_DEPENDENCY", "424"}, {"HTTP_CODE_UPGRADE_REQUIRED", 426},
{"HTTP_CODE_TOO_EARLY", "425"}, {"HTTP_CODE_PRECONDITION_REQUIRED", 428},
{"HTTP_CODE_UPGRADE_REQUIRED", "426"}, {"HTTP_CODE_TOO_MANY_REQUESTS", 429},
{"HTTP_CODE_PRECONDITION_REQUIRED", "428"}, {"HTTP_CODE_REQ_HDR_FIELDS_TOO_LARGE",431},
{"HTTP_CODE_TOO_MANY_REQUESTS", "429"}, {"HTTP_CODE_UNAVAIL_4_LEGAL_REASONS", 451},
{"HTTP_CODE_REQ_HDR_FIELDS_TOO_LARGE","431"}, {"HTTP_CODE_INTERNAL_SERVER_ERROR", 500},
{"HTTP_CODE_UNAVAIL_4_LEGAL_REASONS", "451"}, {"HTTP_CODE_NOT_IMPLEMENTED", 501},
{"HTTP_CODE_INTERNAL_SERVER_ERROR", "500"}, {"HTTP_CODE_BAD_GATEWAY", 502},
{"HTTP_CODE_NOT_IMPLEMENTED", "501"}, {"HTTP_CODE_SERVICE_UNAVAILABLE", 503},
{"HTTP_CODE_BAD_GATEWAY", "502"}, {"HTTP_CODE_GATEWAY_TIMEOUT", 504},
{"HTTP_CODE_SERVICE_UNAVAILABLE", "503"}, {"HTTP_CODE_HTTP_VER_NOT_SUPPORTED", 505},
{"HTTP_CODE_GATEWAY_TIMEOUT", "504"}, {"HTTP_CODE_VARIANT_ALSO_NEGOTIATES", 506},
{"HTTP_CODE_HTTP_VER_NOT_SUPPORTED", "505"}, {"HTTP_CODE_INSUFFICIENT_STORAGE", 507},
{"HTTP_CODE_VARIANT_ALSO_NEGOTIATES", "506"}, {"HTTP_CODE_LOOP_DETECTED", 508},
{"HTTP_CODE_INSUFFICIENT_STORAGE", "507"}, {"HTTP_CODE_NOT_EXTENDED", 510},
{"HTTP_CODE_LOOP_DETECTED", "508"}, {"HTTP_CODE_NETWORK_AUTH_REQUIRED", 511}
{"HTTP_CODE_NOT_EXTENDED", "510"},
{"HTTP_CODE_NETWORK_AUTH_REQUIRED", "511"},
}; };
typedef enum { typedef enum {
...@@ -152,6 +150,8 @@ typedef struct { ...@@ -152,6 +150,8 @@ typedef struct {
char sql[SQL_LENGTH + 1]; char sql[SQL_LENGTH + 1];
} SMonConn; } SMonConn;
static void *monHttpStatusHashTable;
static SMonConn tsMonitor = {0}; static SMonConn tsMonitor = {0};
static int32_t monQueryReqNum = 0, monSubmitReqNum = 0; static int32_t monQueryReqNum = 0, monSubmitReqNum = 0;
static bool monHasMnodeMaster = false; static bool monHasMnodeMaster = false;
...@@ -165,6 +165,9 @@ static void monSaveDisksInfo(); ...@@ -165,6 +165,9 @@ static void monSaveDisksInfo();
static void monSaveGrantsInfo(); static void monSaveGrantsInfo();
static void *monThreadFunc(void *param); static void *monThreadFunc(void *param);
static void monBuildMonitorSql(char *sql, int32_t cmd); static void monBuildMonitorSql(char *sql, int32_t cmd);
static void monInitHttpStatusHashTable();
static void monCleanupHttpStatusHashTable();
extern int32_t (*monStartSystemFp)(); extern int32_t (*monStartSystemFp)();
extern void (*monStopSystemFp)(); extern void (*monStopSystemFp)();
extern void (*monExecuteSQLFp)(char *sql); extern void (*monExecuteSQLFp)(char *sql);
...@@ -180,6 +183,7 @@ int32_t monInitSystem() { ...@@ -180,6 +183,7 @@ int32_t monInitSystem() {
tsMonitor.ep[i] = '_'; tsMonitor.ep[i] = '_';
} }
} }
monInitHttpStatusHashTable();
pthread_attr_t thAttr; pthread_attr_t thAttr;
pthread_attr_init(&thAttr); pthread_attr_init(&thAttr);
...@@ -208,6 +212,31 @@ int32_t monStartSystem() { ...@@ -208,6 +212,31 @@ int32_t monStartSystem() {
return 0; return 0;
} }
static void monInitHttpStatusHashTable() {
int32_t numOfEntries = tListLen(monHttpStatusTable);
monHttpStatusHashTable = taosHashInit(numOfEntries, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, false);
for (int32_t i = 0; i < numOfEntries; ++i) {
monHttpStatusTable[i].index = i;
SMonHttpStatus* pEntry = &monHttpStatusTable[i];
taosHashPut(monHttpStatusHashTable, &monHttpStatusTable[i].code, sizeof(int32_t),
&pEntry, POINTER_BYTES);
}
}
static void monCleanupHttpStatusHashTable() {
void* m = monHttpStatusHashTable;
if (m != NULL && atomic_val_compare_exchange_ptr(&monHttpStatusHashTable, m, 0) == m) {
taosHashCleanup(m);
}
}
SMonHttpStatus *monGetHttpStatusHashTableEntry(int32_t code) {
if (monHttpStatusHashTable == NULL) {
return NULL;
}
return (SMonHttpStatus*)taosHashGet(monHttpStatusHashTable, &code, sizeof(int32_t));
}
static void *monThreadFunc(void *param) { static void *monThreadFunc(void *param) {
monDebug("starting to initialize monitor module ..."); monDebug("starting to initialize monitor module ...");
setThreadName("monitor"); setThreadName("monitor");
...@@ -419,10 +448,10 @@ static void monBuildMonitorSql(char *sql, int32_t cmd) { ...@@ -419,10 +448,10 @@ static void monBuildMonitorSql(char *sql, int32_t cmd) {
"create table if not exists %s.restful_info(ts timestamp" "create table if not exists %s.restful_info(ts timestamp"
", total_req float", ", total_req float",
tsMonitorDbName); tsMonitorDbName);
for (int i = 0; i < MON_MAX_HTTP_CODE; ++i) { for (int i = 0; i < tListLen(monHttpStatusTable); ++i) {
pos += snprintf(sql + pos, SQL_LENGTH, ", `%s(%s)` int", pos += snprintf(sql + pos, SQL_LENGTH, ", `%s(%d)` int",
monHttpStatusCodeTable[i][0], monHttpStatusTable[i].name,
monHttpStatusCodeTable[i][1]); monHttpStatusTable[i].code);
} }
snprintf(sql + pos, SQL_LENGTH, snprintf(sql + pos, SQL_LENGTH,
") tags (dnode_id int, dnode_ep binary(%d))", ") tags (dnode_id int, dnode_ep binary(%d))",
...@@ -453,6 +482,7 @@ void monCleanupSystem() { ...@@ -453,6 +482,7 @@ void monCleanupSystem() {
taos_close(tsMonitor.conn); taos_close(tsMonitor.conn);
tsMonitor.conn = NULL; tsMonitor.conn = NULL;
} }
monCleanupHttpStatusHashTable();
monInfo("monitor module is cleaned up"); monInfo("monitor module is cleaned up");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册