]> arthur.barton.de Git - netdata.git/blobdiff - profile/test-eval.c
Merge pull request #1923 from ktsaou/master
[netdata.git] / profile / test-eval.c
index 33fd7635956b2eba073f8b091f8db1d9d1e64f84..ad521b7d84292ea12884dd3f442ed0d9da15d0fd 100644 (file)
@@ -3,7 +3,7 @@
  * 1. build netdata (as normally)
  * 2. cd profile/
  * 3. compile with:
- *    gcc -O1 -ggdb -Wall -Wextra -I ../src/ -I ../ -o test-eval test-eval.c ../src/log.o ../src/eval.o ../src/common.o -pthread
+ *    gcc -O1 -ggdb -Wall -Wextra -I ../src/ -I ../ -o test-eval test-eval.c ../src/log.o ../src/eval.o ../src/common.o ../src/web_buffer.o ../src/storage_number.o -pthread -lm
  *
  */
 
@@ -11,6 +11,7 @@
 
 void netdata_cleanup_and_exit(int ret) { exit(ret); }
 
+/*
 void indent(int level, int show) {
        int i = level;
        while(i--) printf(" |  ");
@@ -237,6 +238,7 @@ calculated_number evaluate(EVAL_NODE *op, int depth) {
        return r;
 }
 
+
 void print_expression(EVAL_NODE *op, const char *failed_at, int error) {
        if(op) {
                printf("expression tree:\n");
@@ -255,17 +257,41 @@ void print_expression(EVAL_NODE *op, const char *failed_at, int error) {
                printf("error: %d, failed_at: '%s'\n", error, (failed_at)?failed_at:"<NONE>");
        }
 }
+*/
+
+int health_variable_lookup(const char *variable, uint32_t hash, RRDCALC *rc, calculated_number *result) {
+       (void)variable;
+       (void)hash;
+       (void)rc;
+       (void)result;
 
+       return 0;
+}
 
 int main(int argc, char **argv) {
        if(argc != 2) {
-               fprintf(stderr, "I need an epxression\n");
+               fprintf(stderr, "I need an epxression (enclose it in single-quotes (') as a single parameter)\n");
                exit(1);
        }
 
        const char *failed_at = NULL;
        int error;
-       EVAL_NODE *op = expression_parse(argv[1], &failed_at, &error);
-       print_expression(op, failed_at, error);
+
+       EVAL_EXPRESSION *exp = expression_parse(argv[1], &failed_at, &error);
+       if(!exp)
+               printf("\nPARSING FAILED\nExpression: '%s'\nParsing stopped at: '%s'\nParsing error code: %d (%s)\n", argv[1], (failed_at)?((*failed_at)?failed_at:"<END OF EXPRESSION>"):"<NONE>", error, expression_strerror(error));
+       
+       else {
+               printf("\nPARSING OK\nExpression: '%s'\nParsed as : '%s'\nParsing error code: %d (%s)\n", argv[1], exp->parsed_as, error, expression_strerror(error));
+
+               if(expression_evaluate(exp)) {
+                       printf("\nEvaluates to: %Lf\n\n", exp->result);
+               }
+               else {
+                       printf("\nEvaluation failed with code %d and message: %s\n\n", exp->error, buffer_tostring(exp->error_msg));
+               }
+               expression_free(exp);
+       }
+
        return 0;
 }