]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-journal.h
journal: rework directory enumeration/watch logic
[thirdparty/systemd.git] / src / systemd / sd-journal.h
CommitLineData
87d2c1ff
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#ifndef foojournalhfoo
4#define foojournalhfoo
5
6/***
7 This file is part of systemd.
8
9 Copyright 2011 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 19 Lesser General Public License for more details.
87d2c1ff 20
5430f7f2 21 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <inttypes.h>
26#include <sys/types.h>
7f3e6257
LP
27#include <stdarg.h>
28#include <sys/uio.h>
b070e7f3 29#include <syslog.h>
87d2c1ff 30
8665a387 31#include <systemd/sd-id128.h>
de190aef 32
f9873976
LP
33#ifdef __cplusplus
34extern "C" {
35#endif
36
7f3e6257 37/* Write to daemon */
e9116723 38int sd_journal_print(int priority, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
d0bbc21c 39int sd_journal_printv(int priority, const char *format, va_list ap);
7f3e6257
LP
40int sd_journal_send(const char *format, ...) __attribute__((sentinel));
41int sd_journal_sendv(const struct iovec *iov, int n);
42
a8eedf49 43/* Used by the macros below. Don't call this directly. */
b070e7f3
LP
44int sd_journal_print_with_location(int priority, const char *file, const char *line, const char *func, const char *format, ...) __attribute__ ((format (printf, 5, 6)));
45int sd_journal_printv_with_location(int priority, const char *file, const char *line, const char *func, const char *format, va_list ap);
46int sd_journal_send_with_location(const char *file, const char *line, const char *func, const char *format, ...) __attribute__((sentinel));
47int sd_journal_sendv_with_location(const char *file, const char *line, const char *func, const struct iovec *iov, int n);
48
49/* implicitly add code location to messages sent, if this is enabled */
50#ifndef SD_JOURNAL_SUPPRESS_LOCATION
51
52#define _sd_XSTRINGIFY(x) #x
53#define _sd_STRINGIFY(x) _sd_XSTRINGIFY(x)
54
55#define sd_journal_print(priority, ...) sd_journal_print_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _sd_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
56#define sd_journal_printv(priority, format, ap) sd_journal_printv_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _sd_STRINGIFY(__LINE__), __func__, format, ap)
57#define sd_journal_send(...) sd_journal_send_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _sd_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
58#define sd_journal_sendv(iovec, n) sd_journal_sendv_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _sd_STRINGIFY(__LINE__), __func__, iovec, n)
59
60#endif
61
4cd9a9d9 62int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix);
fe652127 63
7f3e6257
LP
64/* Browse journal stream */
65
87d2c1ff
LP
66typedef struct sd_journal sd_journal;
67
cf244689
LP
68enum {
69 SD_JOURNAL_LOCAL_ONLY = 1,
70 SD_JOURNAL_RUNTIME_ONLY = 2,
71 SD_JOURNAL_SYSTEM_ONLY = 4
72};
73
74int sd_journal_open(sd_journal **ret, int flags);
a963990f 75int sd_journal_open_directory(sd_journal **ret, const char *path, int flags);
87d2c1ff
LP
76void sd_journal_close(sd_journal *j);
77
78int sd_journal_previous(sd_journal *j);
79int sd_journal_next(sd_journal *j);
80
de190aef
LP
81int sd_journal_previous_skip(sd_journal *j, uint64_t skip);
82int sd_journal_next_skip(sd_journal *j, uint64_t skip);
83
cec736d2 84int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret);
de190aef 85int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id);
8725d60a
LP
86int sd_journal_get_data(sd_journal *j, const char *field, const void **data, size_t *l);
87int sd_journal_enumerate_data(sd_journal *j, const void **data, size_t *l);
de190aef 88void sd_journal_restart_data(sd_journal *j);
87d2c1ff 89
1cc101f1 90int sd_journal_add_match(sd_journal *j, const void *data, size_t size);
cec736d2 91void sd_journal_flush_matches(sd_journal *j);
87d2c1ff
LP
92
93int sd_journal_seek_head(sd_journal *j);
94int sd_journal_seek_tail(sd_journal *j);
de190aef
LP
95int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t usec);
96int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec);
97int sd_journal_seek_cursor(sd_journal *j, const char *cursor);
87d2c1ff 98
3fbf9cbb 99int sd_journal_get_cursor(sd_journal *j, char **cursor);
87d2c1ff 100
08984293
LP
101int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to);
102int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, const sd_id128_t boot_id, uint64_t *from, uint64_t *to);
103
19a2bd80
LP
104/* int sd_journal_query_unique(sd_journal *j, const char *field); /\* missing *\/ */
105/* int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l); /\* missing *\/ */
106/* void sd_journal_restart_unique(sd_journal *j); /\* missing *\/ */
87d2c1ff 107
1cc101f1
LP
108enum {
109 SD_JOURNAL_NOP,
110 SD_JOURNAL_APPEND,
a963990f 111 SD_JOURNAL_INVALIDATE
1cc101f1
LP
112};
113
50f20cfd
LP
114int sd_journal_get_fd(sd_journal *j);
115int sd_journal_process(sd_journal *j);
e02d1cf7 116int sd_journal_wait(sd_journal *j, uint64_t timeout_usec);
1cc101f1 117
de190aef
LP
118#define SD_JOURNAL_FOREACH(j) \
119 if (sd_journal_seek_head(j) >= 0) \
50f20cfd 120 while (sd_journal_next(j) > 0)
8725d60a 121
de190aef
LP
122#define SD_JOURNAL_FOREACH_BACKWARDS(j) \
123 if (sd_journal_seek_tail(j) >= 0) \
50f20cfd 124 while (sd_journal_previous(j) > 0)
3fbf9cbb 125
8725d60a 126#define SD_JOURNAL_FOREACH_DATA(j, data, l) \
de190aef 127 for (sd_journal_restart_data(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
3fbf9cbb 128
de190aef
LP
129#define SD_JOURNAL_FOREACH_UNIQUE(j, data, l) \
130 for (sd_journal_restart_unique(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
3fbf9cbb 131
f9873976
LP
132#ifdef __cplusplus
133}
134#endif
135
87d2c1ff 136#endif