]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal-remote/journal-upload.h
fix(journal-gatewayd): use relative urls (not starting with '/')
[thirdparty/systemd.git] / src / journal-remote / journal-upload.h
CommitLineData
3d090cc6
ZJS
1#pragma once
2
3#include <inttypes.h>
4
5#include "sd-event.h"
71d35b6b 6#include "sd-journal.h"
0aa176a7 7#include "time-util.h"
3d090cc6 8
eacbb4d3
ZJS
9typedef enum {
10 ENTRY_CURSOR = 0, /* Nothing actually written yet. */
11 ENTRY_REALTIME,
12 ENTRY_MONOTONIC,
13 ENTRY_BOOT_ID,
14 ENTRY_NEW_FIELD, /* In between fields. */
15 ENTRY_TEXT_FIELD, /* In the middle of a text field. */
16 ENTRY_BINARY_FIELD_START, /* Writing the name of a binary field. */
17 ENTRY_BINARY_FIELD_SIZE, /* Writing the size of a binary field. */
18 ENTRY_BINARY_FIELD, /* In the middle of a binary field. */
19 ENTRY_OUTRO, /* Writing '\n' */
20 ENTRY_DONE, /* Need to move to a new field. */
21} entry_state;
22
3d090cc6
ZJS
23typedef struct Uploader {
24 sd_event *events;
a3152e76 25 sd_event_source *sigint_event, *sigterm_event;
3d090cc6 26
5bc89120 27 char *url;
3d090cc6
ZJS
28 CURL *easy;
29 bool uploading;
eacbb4d3 30 char error[CURL_ERROR_SIZE];
3d090cc6 31 struct curl_slist *header;
eacbb4d3
ZJS
32 char *answer;
33
34 sd_event_source *input_event;
35 uint64_t timeout;
3d090cc6 36
eacbb4d3 37 /* fd stuff */
3d090cc6
ZJS
38 int input;
39
eacbb4d3
ZJS
40 /* journal stuff */
41 sd_journal* journal;
42
43 entry_state entry_state;
44 const void *field_data;
45 size_t field_pos, field_length;
46
47 /* general metrics */
722b6795
ZJS
48 const char *state_file;
49
eacbb4d3 50 size_t entries_sent;
722b6795 51 char *last_cursor, *current_cursor;
0aa176a7
ZJS
52 usec_t watchdog_timestamp;
53 usec_t watchdog_usec;
3d090cc6
ZJS
54} Uploader;
55
eacbb4d3
ZJS
56#define JOURNAL_UPLOAD_POLL_TIMEOUT (10 * USEC_PER_SEC)
57
3d090cc6
ZJS
58int start_upload(Uploader *u,
59 size_t (*input_callback)(void *ptr,
60 size_t size,
61 size_t nmemb,
62 void *userdata),
63 void *data);
eacbb4d3
ZJS
64
65int open_journal_for_upload(Uploader *u,
66 sd_journal *j,
67 const char *cursor,
68 bool after_cursor,
69 bool follow);
70void close_journal_input(Uploader *u);
71int check_journal_input(Uploader *u);