diff options
Diffstat (limited to 'src/journal-remote/journal-upload.h')
-rw-r--r-- | src/journal-remote/journal-upload.h | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/journal-remote/journal-upload.h b/src/journal-remote/journal-upload.h index 68d85be6bc..f94d9ac69e 100644 --- a/src/journal-remote/journal-upload.h +++ b/src/journal-remote/journal-upload.h @@ -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); |