chiark / gitweb /
journal-upload: use journal as the source
[elogind.git] / src / journal-remote / journal-upload.h
index 68d85be6bcd3471b400ccaf0959d70163201d7ca..f94d9ac69ea565a2f9cf642647b74b3a258d8619 100644 (file)
@@ -2,24 +2,64 @@
 
 #include <inttypes.h>
 
+#include "sd-journal.h"
 #include "sd-event.h"
 
+typedef enum {
+        ENTRY_CURSOR = 0,           /* Nothing actually written yet. */
+        ENTRY_REALTIME,
+        ENTRY_MONOTONIC,
+        ENTRY_BOOT_ID,
+        ENTRY_NEW_FIELD,            /* In between fields. */
+        ENTRY_TEXT_FIELD,           /* In the middle of a text field. */
+        ENTRY_BINARY_FIELD_START,   /* Writing the name of a binary field. */
+        ENTRY_BINARY_FIELD_SIZE,    /* Writing the size of a binary field. */
+        ENTRY_BINARY_FIELD,         /* In the middle of a binary field. */
+        ENTRY_OUTRO,                /* Writing '\n' */
+        ENTRY_DONE,                 /* Need to move to a new field. */
+} entry_state;
+
 typedef struct Uploader {
         sd_event *events;
 
         const char *url;
         CURL *easy;
         bool uploading;
+        char error[CURL_ERROR_SIZE];
         struct curl_slist *header;
+        char *answer;
+
+        sd_event_source *input_event;
+        uint64_t timeout;
 
+        /* fd stuff */
         int input;
 
-        sd_event_source *input_event;
+        /* journal stuff */
+        sd_journal* journal;
+
+        entry_state entry_state;
+        const void *field_data;
+        size_t field_pos, field_length;
+
+        /* general metrics */
+        size_t entries_sent;
+        char *last_cursor;
 } Uploader;
 
+#define JOURNAL_UPLOAD_POLL_TIMEOUT (10 * USEC_PER_SEC)
+
 int start_upload(Uploader *u,
                  size_t (*input_callback)(void *ptr,
                                           size_t size,
                                           size_t nmemb,
                                           void *userdata),
                  void *data);
+
+int open_journal_for_upload(Uploader *u,
+                            sd_journal *j,
+                            const char *cursor,
+                            bool after_cursor,
+                            bool follow);
+void close_journal_input(Uploader *u);
+int check_journal_input(Uploader *u);