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