]> arthur.barton.de Git - netdata.git/blobdiff - src/web_buffer.h
apps.plugin optimization to send all the data to netdata with just one write operatio...
[netdata.git] / src / web_buffer.h
old mode 100755 (executable)
new mode 100644 (file)
index 6000ec5..399eb84
@@ -5,17 +5,20 @@
 #ifndef NETDATA_WEB_BUFFER_H
 #define NETDATA_WEB_BUFFER_H 1
 
-#define WEB_DATA_LENGTH_INCREASE_STEP 65536
+#define WEB_DATA_LENGTH_INCREASE_STEP 16384
 
-struct web_buffer {
-       long size;              // allocation size of buffer
-       long bytes;             // current data length in buffer
-       long sent;              // current data length sent to output
+typedef struct web_buffer {
+       size_t size;            // allocation size of buffer
+       size_t len;             // current data length in buffer
        char *buffer;   // the buffer
-       int contenttype;
-       long rbytes;    // if non-zero, the excepted size of ifd
+       uint8_t contenttype;
+       uint8_t options;
        time_t date;    // the date this content has been generated
-};
+} BUFFER;
+
+// options
+#define WB_CONTENT_CACHEABLE                   1
+#define WB_CONTENT_NO_CACHEABLE                        2
 
 // content-types
 #define CT_APPLICATION_JSON                            1
@@ -30,20 +33,43 @@ struct web_buffer {
 #define CT_APPLICATION_X_FONT_TRUETYPE 10
 #define CT_APPLICATION_X_FONT_OPENTYPE 11
 #define CT_APPLICATION_FONT_WOFF               12
-#define CT_APPLICATION_VND_MS_FONTOBJ  13
-#define CT_IMAGE_SVG_XML                               14
+#define CT_APPLICATION_FONT_WOFF2              13
+#define CT_APPLICATION_VND_MS_FONTOBJ  14
+#define CT_IMAGE_SVG_XML                               15
+#define CT_IMAGE_PNG                                   16
+#define CT_IMAGE_JPG                                   17
+#define CT_IMAGE_GIF                                   18
+#define CT_IMAGE_XICON                                 19
+#define CT_IMAGE_ICNS                                  20
+#define CT_IMAGE_BMP                                   21
+
+#define buffer_strlen(wb) ((wb)->len)
+extern const char *buffer_tostring(BUFFER *wb);
+
+#define buffer_need_bytes(buffer, needed_free_size) do { if(unlikely((buffer)->size - (buffer)->len < (size_t)(needed_free_size))) buffer_increase((buffer), (size_t)(needed_free_size)); } while(0)
+
+#define buffer_flush(wb) wb->buffer[(wb)->len = 0] = '\0'
+extern void buffer_reset(BUFFER *wb);
+
+extern void buffer_strcat(BUFFER *wb, const char *txt);
+extern void buffer_rrd_value(BUFFER *wb, calculated_number value);
+
+extern void buffer_date(BUFFER *wb, int year, int month, int day, int hours, int minutes, int seconds);
+extern void buffer_jsdate(BUFFER *wb, int year, int month, int day, int hours, int minutes, int seconds);
+
+extern BUFFER *buffer_create(size_t size);
+extern void buffer_free(BUFFER *b);
+extern void buffer_increase(BUFFER *b, size_t free_size_required);
 
-#define web_buffer_printf(wb, args...) wb->bytes += snprintf(&wb->buffer[wb->bytes], (wb->size - wb->bytes), ##args)
-#define web_buffer_reset(wb) wb->buffer[wb->bytes = 0] = '\0'
+extern void buffer_snprintf(BUFFER *wb, size_t len, const char *fmt, ...) __attribute__ (( format (printf, 3, 4)));
+extern void buffer_vsprintf(BUFFER *wb, const char *fmt, va_list args);
+extern void buffer_sprintf(BUFFER *wb, const char *fmt, ...) __attribute__ (( format (printf, 2, 3)));
 
-void web_buffer_strcpy(struct web_buffer *wb, const char *txt);
-int print_calculated_number(char *str, calculated_number value);
-void web_buffer_rrd_value(struct web_buffer *wb, calculated_number value);
+extern void buffer_char_replace(BUFFER *wb, char from, char to);
 
-void web_buffer_jsdate(struct web_buffer *wb, int year, int month, int day, int hours, int minutes, int seconds);
+extern char *print_number_lu_r(char *str, unsigned long uvalue);
+extern char *print_number_llu_r(char *str, unsigned long long uvalue);
 
-struct web_buffer *web_buffer_create(long size);
-void web_buffer_free(struct web_buffer *b);
-void web_buffer_increase(struct web_buffer *b, long free_size_required);
+extern void buffer_print_llu(BUFFER *wb, unsigned long long uvalue);
 
 #endif /* NETDATA_WEB_BUFFER_H */