/* * Copyright (c) 2019 TAOS Data, Inc. * * 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 . */ #define _BSD_SOURCE #define _GNU_SOURCE #define _XOPEN_SOURCE #define _DEFAULT_SOURCE #include "shellInt.h" bool shellRegexMatch(const char *s, const char *reg, int32_t cflags) { regex_t regex = {0}; char msgbuf[100] = {0}; /* Compile regular expression */ if (regcomp(®ex, reg, cflags) != 0) { fprintf(stderr, "Fail to compile regex"); shellExit(); } /* Execute regular expression */ int32_t reti = regexec(®ex, s, 0, NULL, 0); if (!reti) { regfree(®ex); return true; } else if (reti == REG_NOMATCH) { regfree(®ex); return false; } else { regerror(reti, ®ex, msgbuf, sizeof(msgbuf)); fprintf(stderr, "Regex match failed: %s\r\n", msgbuf); regfree(®ex); shellExit(); } return false; } int32_t shellCheckIntSize() { if (sizeof(int8_t) != 1) { printf("taos int8 size is %d(!= 1)", (int)sizeof(int8_t)); return -1; } if (sizeof(int16_t) != 2) { printf("taos int16 size is %d(!= 2)", (int)sizeof(int16_t)); return -1; } if (sizeof(int32_t) != 4) { printf("taos int32 size is %d(!= 4)", (int)sizeof(int32_t)); return -1; } if (sizeof(int64_t) != 8) { printf("taos int64 size is %d(!= 8)", (int)sizeof(int64_t)); return -1; } return 0; } void shellPrintVersion() { printf("version: %s\r\n", version); } void shellGenerateAuth() { char secretEncrypt[TSDB_PASSWORD_LEN + 1] = {0}; taosEncryptPass_c((uint8_t *)shell.args.password, strlen(shell.args.password), secretEncrypt); printf("%s\r\n", secretEncrypt); fflush(stdout); } void shellDumpConfig() { SConfig *pCfg = taosGetCfg(); if (pCfg == NULL) { printf("TDengine read global config failed!\r\n"); } else { cfgDumpCfg(pCfg, 1, true); } fflush(stdout); } void shellCheckServerStatus() { TSDB_SERVER_STATUS code; do { char details[1024] = {0}; code = taos_check_server_status(shell.args.host, shell.args.port, details, 1024); switch (code) { case TSDB_SRV_STATUS_UNAVAILABLE: printf("0: unavailable\r\n"); break; case TSDB_SRV_STATUS_NETWORK_OK: printf("1: network ok\r\n"); break; case TSDB_SRV_STATUS_SERVICE_OK: printf("2: service ok\r\n"); break; case TSDB_SRV_STATUS_SERVICE_DEGRADED: printf("3: service degraded\r\n"); break; case TSDB_SRV_STATUS_EXTING: printf("4: exiting\r\n"); break; } if (strlen(details) != 0) { printf("%s\r\n\r\n", details); } fflush(stdout); if (code == TSDB_SRV_STATUS_NETWORK_OK && shell.args.is_startup) { taosMsleep(1000); } else { break; } } while (1); } #ifdef WEBSOCKET void shellCheckConnectMode() { if (shell.args.dsn) { shell.args.cloud = true; shell.args.restful = false; return; } if (shell.args.cloud) { shell.args.dsn = getenv("TDENGINE_CLOUD_DSN"); if (shell.args.dsn) { shell.args.cloud = true; shell.args.restful = false; return; } if (shell.args.restful) { if (!shell.args.host) { shell.args.host = "localhost"; } if (!shell.args.port) { shell.args.port = 6041; } shell.args.dsn = taosMemoryCalloc(1, 1024); snprintf(shell.args.dsn, 1024, "ws://%s:%d/rest/ws", shell.args.host, shell.args.port); } shell.args.cloud = false; return; } } #endif void shellExit() { if (shell.conn != NULL) { taos_close(shell.conn); shell.conn = NULL; } taos_cleanup(); exit(EXIT_FAILURE); }