Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion sdjournal/journal.go
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,14 @@ const (
SD_JOURNAL_FIELD_CURSOR = "__CURSOR"
SD_JOURNAL_FIELD_REALTIME_TIMESTAMP = "__REALTIME_TIMESTAMP"
SD_JOURNAL_FIELD_MONOTONIC_TIMESTAMP = "__MONOTONIC_TIMESTAMP"

// Journal Flags
SD_JOURNAL_FLAG_LOCAL_ONLY = int(C.SD_JOURNAL_LOCAL_ONLY)
SD_JOURNAL_FLAG_RUNTIME_ONLY = int(C.SD_JOURNAL_RUNTIME_ONLY)
SD_JOURNAL_FLAG_SYSTEM = int(C.SD_JOURNAL_SYSTEM)
SD_JOURNAL_FLAG_CURRENT_USER = int(C.SD_JOURNAL_CURRENT_USER)
SD_JOURNAL_FLAG_ALL_NAMESPACES = int(C.SD_JOURNAL_ALL_NAMESPACES)
SD_JOURNAL_FLAG_INCLUDE_DEFAULT_NAMESPACE = int(C.SD_JOURNAL_INCLUDE_DEFAULT_NAMESPACE)
)

// Journal event constants
Expand Down Expand Up @@ -422,14 +430,20 @@ func (m *Match) String() string {

// NewJournal returns a new Journal instance pointing to the local journal
func NewJournal() (j *Journal, err error) {
return NewJournalWithFlags(SD_JOURNAL_FLAG_LOCAL_ONLY)
}

// NewJournalWithFlags return a new Journal instance pointing to the local journal
// with a list of flags indicating the scope and type of entries that will be accessed.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you document that the flag values are defined as SD_JOURNAL_FLAG_ and must be bitwise ORed

func NewJournalWithFlags(flags int) (j *Journal, err error) {
j = &Journal{}

sd_journal_open, err := getFunction("sd_journal_open")
if err != nil {
return nil, err
}

r := C.my_sd_journal_open(sd_journal_open, &j.cjournal, C.SD_JOURNAL_LOCAL_ONLY)
r := C.my_sd_journal_open(sd_journal_open, &j.cjournal, C.int(flags))

if r < 0 {
return nil, fmt.Errorf("failed to open journal: %s", syscall.Errno(-r).Error())
Expand Down
10 changes: 10 additions & 0 deletions sdjournal/read.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ type JournalReaderConfig struct {
// in this directory. The supplied path may be relative or absolute.
Path string

// If not nil, the journal instance will point to a journal with a list
// of flags indicating the scope and type of entries that will be accessed.
Flags []int
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this an array? Just let the caller do the bitwise OR. I think the issue is that the default flag will be 0 but ensure we know a user explicitly set the flags converting it to pointer may be enough so *int,


// If not nil, Formatter will be used to translate the resulting entries
// into strings. If not set, the default format (timestamp and message field)
// will be used. If Formatter returns an error, Read will stop and return the error.
Expand Down Expand Up @@ -78,6 +82,12 @@ func NewJournalReader(config JournalReaderConfig) (*JournalReader, error) {
var err error
if config.Path != "" {
r.journal, err = NewJournalFromDir(config.Path)
} else if len(config.Flags) > 0 {
flags := config.Flags[0]
for i := 1; i < len(config.Flags); i++ {
flags |= config.Flags[i]
}
r.journal, err = NewJournalWithFlags(flags)
} else {
r.journal, err = NewJournal()
}
Expand Down