From ccd6ad05b75063949499056e3e0b4ccb7ac13d5f Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Mon, 7 Aug 2017 17:45:22 +0300 Subject: [PATCH] odissey: add console_query_show() and parser tokens --- sources/console.c | 55 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/sources/console.c b/sources/console.c index e3bd1fc1..1a876643 100644 --- a/sources/console.c +++ b/sources/console.c @@ -57,6 +57,19 @@ typedef struct machine_queue_t *response; } od_msgconsole_t; +enum +{ + OD_LSHOW, + OD_LSTATS +}; + +static od_keyword_t od_console_keywords[] = +{ + od_keyword("show", OD_LSHOW), + od_keyword("stats", OD_LSTATS), + { 0, 0, 0 } +}; + static inline int od_console_show_stats(od_console_t *console, od_msgconsole_t *msg_console) { @@ -140,6 +153,17 @@ od_console_show_stats(od_console_t *console, od_msgconsole_t *msg_console) return 0; } +static inline int +od_console_query_show(od_console_t *console, od_parser_t *parser, + od_msgconsole_t *msg_console) +{ + (void)parser; + + int rc; + rc = od_console_show_stats(console, msg_console); + return rc; +} + static inline int od_console_query(od_console_t *console, od_msgconsole_t *msg_console) { @@ -154,9 +178,36 @@ od_console_query(od_console_t *console, od_msgconsole_t *msg_console) od_debug_client(&instance->logger, &client->id, "console", "%.*s", query_len, query); + od_parser_t parser; + od_parser_init(&parser, query, query_len); + + od_token_t token; int rc; - rc = od_console_show_stats(console, msg_console); - return rc; + rc = od_parser_next(&parser, &token); + switch (rc) { + case OD_PARSER_EOF: + return 0; + case OD_PARSER_KEYWORD: + break; + default: + /* error */ + return -1; + } + od_keyword_t *keyword; + keyword = od_keyword_match(od_console_keywords, &token); + if (keyword == NULL) { + /* error */ + return -1; + } + switch (keyword->id) { + case OD_LSHOW: + return od_console_query_show(console, &parser, msg_console); + default: + /* error */ + break; + } + + return -1; } static void