]> arthur.barton.de Git - netdata.git/blobdiff - src/web_buffer_svg.c
reverted strcmp()
[netdata.git] / src / web_buffer_svg.c
index 2f7627cc570438497c7890684f4e1a356013da60..cac365ab14e719d4f26d175b3ab8e0eb8fa0a07b 100644 (file)
@@ -290,7 +290,7 @@ static inline int verdana11_width(char *s) {
     *d = '\0';
     w -= VERDANA_KERNING;
     w += VERDANA_PADDING;
-    return ceil(w);
+    return (int)ceil(w);
 }
 
 static inline size_t escape_xmlz(char *dst, const char *src, size_t len) {
@@ -470,7 +470,7 @@ static inline void calc_colorz(const char *color, char *final, size_t len, calcu
                     break;
             }
             else {
-                calculated_number v = strtold(value_buffer, NULL);
+                calculated_number v = str2l(value_buffer);
 
                      if(comparison == '<' && value < v) break;
                 else if(comparison == '(' && value <= v) break;
@@ -525,11 +525,53 @@ void buffer_svg(BUFFER *wb, const char *label, calculated_number value, const ch
     if(unlikely(isalnum(*units)))
         separator = " ";
 
-    if(unlikely(value_is_null))
+    if(unlikely(!strcmp(units, "seconds"))) {
+        size_t s = (size_t)value;
+        size_t d = s / 86400;
+        s = s % 86400;
+
+        size_t h = s / 3600;
+        s = s % 3600;
+
+        size_t m = s / 60;
+        s = s % 60;
+
+        if(d)
+            snprintfz(value_string, VALUE_STRING_SIZE, "%zu %s %02zu:%02zu:%02zu", d, (d == 1)?"day":"days", h, m, s);
+        else
+            snprintfz(value_string, VALUE_STRING_SIZE, "%02zu:%02zu:%02zu", h, m, s);
+    }
+
+    else if(unlikely(!strcmp(units, "minutes"))) {
+        size_t m = (size_t)value;
+        size_t d = m / (60 * 24);
+        m = m % (60 * 24);
+
+        size_t h = m / 60;
+        m = m % 60;
+
+        if(d)
+            snprintfz(value_string, VALUE_STRING_SIZE, "%zud %02zuh %02zum", d, h, m);
+        else
+            snprintfz(value_string, VALUE_STRING_SIZE, "%zuh %zum", h, m);
+    }
+
+    else if(unlikely(!strcmp(units, "hours"))) {
+        size_t h = (size_t)value;
+        size_t d = h / 24;
+        h = h % 24;
+
+        if(d)
+            snprintfz(value_string, VALUE_STRING_SIZE, "%zud %zuh", d, h);
+        else
+            snprintfz(value_string, VALUE_STRING_SIZE, "%zuh", h);
+    }
+
+    else if(unlikely(value_is_null))
         strcpy(value_string, "-");
 
     else if(precision < 0) {
-        int len, l, lstop = 0;
+        int len, lstop = 0, trim_zeros = 1;
 
         calculated_number abs = value;
         if(isless(value, 0)) {
@@ -537,27 +579,30 @@ void buffer_svg(BUFFER *wb, const char *label, calculated_number value, const ch
             abs = -value;
         }
 
-        if(isgreaterequal(abs, 1000))     len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.0Lf", (long double)value);
-        else if(isgreaterequal(abs, 100)) len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.1Lf", (long double)value);
-        else if(isgreaterequal(abs, 1))   len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.2Lf", (long double)value);
-        else if(isgreaterequal(abs, 0.1)) len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.3Lf", (long double)value);
-        else                              len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.4Lf", (long double)value);
-
-        // remove trailing zeros
-        for(l = len - 1; l > lstop ; l--) {
-            if(likely(value_string[l] == '0')) {
-                value_string[l] = '\0';
-                len--;
-            }
+        if(isgreaterequal(abs, 1000))     { len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.0Lf", (long double)value); trim_zeros = 0; }
+        else if(isgreaterequal(abs, 100))   len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.1Lf", (long double)value);
+        else if(isgreaterequal(abs, 1))     len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.2Lf", (long double)value);
+        else if(isgreaterequal(abs, 0.1))   len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.3Lf", (long double)value);
+        else                                len = snprintfz(value_string, VALUE_STRING_SIZE, "%0.4Lf", (long double)value);
+
+        if(unlikely(trim_zeros)) {
+            int l;
+            // remove trailing zeros from the decimal part
+            for(l = len - 1; l > lstop ; l--) {
+                if(likely(value_string[l] == '0')) {
+                    value_string[l] = '\0';
+                    len--;
+                }
 
-            else if(unlikely(value_string[l] == '.')) {
-                value_string[l] = '\0';
-                len--;
-                break;
-            }
+                else if(unlikely(value_string[l] == '.')) {
+                    value_string[l] = '\0';
+                    len--;
+                    break;
+                }
 
-            else
-                break;
+                else
+                    break;
+            }
         }
 
         if(len >= 0)