Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

journal: ability to set flags for journal instance #444

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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.
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

// 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
Loading