Skip to content
Open
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
@@ -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
@@ -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())
10 changes: 10 additions & 0 deletions sdjournal/read.go
Original file line number Diff line number Diff line change
@@ -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.
@@ -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()
}