]>
Commit | Line | Data |
---|---|---|
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 |
9 | typedef 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 |
23 | typedef 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 |
58 | int 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 | |
65 | int open_journal_for_upload(Uploader *u, | |
66 | sd_journal *j, | |
67 | const char *cursor, | |
68 | bool after_cursor, | |
69 | bool follow); | |
70 | void close_journal_input(Uploader *u); | |
71 | int check_journal_input(Uploader *u); |