diff --git a/src/kit/shell/inc/shell.h b/src/kit/shell/inc/shell.h index 4eb8b3edfbd1f0bdc3520ed410df348e81206aa9..42516a5b66e9e47f0f722f2c3f096aab0df3f021 100644 --- a/src/kit/shell/inc/shell.h +++ b/src/kit/shell/inc/shell.h @@ -85,6 +85,7 @@ void get_history_path(char* history); void shellCheck(TAOS* con, SShellArguments* args); void cleanup_handler(void* arg); int convertHostToServAddr(); +char *last_strstr(const char *haystack, const char *needle); void encode_base_64(char* base64_buf, char* user, char* password); void exitShell(); int shellDumpResult(TAOS_RES* con, char* fname, int* error_no, bool printMode); diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index eadcb7ae68d714366040484fe9c0bb61e730462c..a18a172bb7946a42d50022ecaf7d60da30f906fc 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -76,12 +76,12 @@ void shellInit(SShellArguments *_args) { _args->database = calloc(1, 128); _args->socket = socket(AF_INET, SOCK_STREAM, 0); if (_args->socket < 0) { - fprintf(stderr, "failed to create socket"); + fprintf(stderr, "failed to create socket\n"); exit(EXIT_FAILURE); } int retConn = connect(_args->socket, (struct sockaddr *)&(_args->serv_addr), sizeof(struct sockaddr)); if (retConn < 0) { - fprintf(stderr, "failed to connect"); + fprintf(stderr, "failed to connect\n"); close(_args->socket); exit(EXIT_FAILURE); } @@ -1145,6 +1145,20 @@ int taos_base64_encode(unsigned char *source, size_t sourcelen, char *target, si return 1; } +char *last_strstr(const char *haystack, const char *needle) { + if (*needle == '\0') + return (char *) haystack; + + char *res = NULL; + for (;;) { + char *p = strstr(haystack, needle); + if (p == NULL) break; + res = p; + haystack = p + 1; + } + return res; +} + int convertHostToServAddr() { if (args.port == 0) { args.port = 6041; @@ -1154,7 +1168,7 @@ int convertHostToServAddr() { } struct hostent *server = gethostbyname(args.host); if ((server == NULL) || (server->h_addr == NULL)) { - fprintf(stderr, "no such host: %s", args.host); + fprintf(stderr, "no such host: %s\n", args.host); return -1; } memset(&(args.serv_addr), 0, sizeof(struct sockaddr_in)); diff --git a/src/kit/shell/src/shellMain.c b/src/kit/shell/src/shellMain.c index 425b25ca80f64fdb73a4ed34f7a41a6167007725..7b77975e9110378d763521463c60f3d4d938a3f8 100644 --- a/src/kit/shell/src/shellMain.c +++ b/src/kit/shell/src/shellMain.c @@ -102,6 +102,25 @@ int main(int argc, char* argv[]) { exit(EXIT_FAILURE); } + char* cloud_url = getenv("TDENGINE_CLOUD_URL"); + if (cloud_url != NULL) { + char* tmp = last_strstr(cloud_url, ":"); + if ((tmp == NULL) && ((tmp + 1) != NULL )) { + fprintf(stderr, "Invalid format in environment variable TDENGINE_CLOUD_URL: %s\n", cloud_url); + exit(EXIT_FAILURE); + } else { + args.port = atoi(tmp + 1); + tmp[0] = '\0'; + args.host = cloud_url; + } + } + + char* cloud_token = getenv("TDENGINE_CLOUD_TOKEN"); + + if (cloud_token != NULL) { + args.token = cloud_token; + } + shellParseArgument(argc, argv, &args); if (args.dump_config) {