chiark / gitweb /
logind: add missing files
[elogind.git] / src / systemd / sd-journal.h
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
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
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
19   Lesser General Public License for more details.
20
21   You should have received a copy of the GNU Lesser General Public License
22   along with systemd; If not, see <http://www.gnu.org/licenses/>.
23 ***/
24
25 #include <inttypes.h>
26 #include <sys/types.h>
27 #include <stdarg.h>
28 #include <sys/uio.h>
29 #include <syslog.h>
30
31 #include <systemd/sd-id128.h>
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 /* Write to daemon */
38 int sd_journal_print(int piority, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
39 int sd_journal_printv(int priority, const char *format, va_list ap);
40 int sd_journal_send(const char *format, ...) __attribute__((sentinel));
41 int sd_journal_sendv(const struct iovec *iov, int n);
42
43 /* Used by the macros below */
44 int sd_journal_print_with_location(int priority, const char *file, const char *line, const char *func, const char *format, ...) __attribute__ ((format (printf, 5, 6)));
45 int sd_journal_printv_with_location(int priority, const char *file, const char *line, const char *func, const char *format, va_list ap);
46 int sd_journal_send_with_location(const char *file, const char *line, const char *func, const char *format, ...) __attribute__((sentinel));
47 int 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
62 int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix);
63
64 /* Browse journal stream */
65
66 typedef struct sd_journal sd_journal;
67
68 enum {
69         SD_JOURNAL_LOCAL_ONLY = 1,
70         SD_JOURNAL_RUNTIME_ONLY = 2,
71         SD_JOURNAL_SYSTEM_ONLY = 4
72 };
73
74 int sd_journal_open(sd_journal **ret, int flags);
75 void sd_journal_close(sd_journal *j);
76
77 int sd_journal_previous(sd_journal *j);
78 int sd_journal_next(sd_journal *j);
79
80 int sd_journal_previous_skip(sd_journal *j, uint64_t skip);
81 int sd_journal_next_skip(sd_journal *j, uint64_t skip);
82
83 int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret);
84 int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id);
85 int sd_journal_get_data(sd_journal *j, const char *field, const void **data, size_t *l);
86 int sd_journal_enumerate_data(sd_journal *j, const void **data, size_t *l);
87 void sd_journal_restart_data(sd_journal *j);
88
89 int sd_journal_add_match(sd_journal *j, const void *data, size_t size);
90 void sd_journal_flush_matches(sd_journal *j);
91
92 int sd_journal_seek_head(sd_journal *j);
93 int sd_journal_seek_tail(sd_journal *j);
94 int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t usec);
95 int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec);
96 int sd_journal_seek_cursor(sd_journal *j, const char *cursor);
97
98 int sd_journal_get_cursor(sd_journal *j, char **cursor);
99
100 /* int sd_journal_query_unique(sd_journal *j, const char *field);      /\* missing *\/ */
101 /* int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l); /\* missing *\/ */
102 /* void sd_journal_restart_unique(sd_journal *j);                      /\* missing *\/ */
103
104 enum {
105         SD_JOURNAL_NOP,
106         SD_JOURNAL_APPEND,
107         SD_JOURNAL_INVALIDATE_ADD,
108         SD_JOURNAL_INVALIDATE_REMOVE
109 };
110
111 int sd_journal_get_fd(sd_journal *j);
112 int sd_journal_process(sd_journal *j);
113
114 #define SD_JOURNAL_FOREACH(j)                                           \
115         if (sd_journal_seek_head(j) >= 0)                               \
116                 while (sd_journal_next(j) > 0)
117
118 #define SD_JOURNAL_FOREACH_BACKWARDS(j)                                 \
119         if (sd_journal_seek_tail(j) >= 0)                               \
120                 while (sd_journal_previous(j) > 0)
121
122 #define SD_JOURNAL_FOREACH_DATA(j, data, l)                             \
123         for (sd_journal_restart_data(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
124
125 #define SD_JOURNAL_FOREACH_UNIQUE(j, data, l)                           \
126         for (sd_journal_restart_unique(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
127
128 #ifdef __cplusplus
129 }
130 #endif
131
132 #endif