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