Skip to content

Commit

Permalink
Merge pull request #160 from jonboulle/master
Browse files Browse the repository at this point in the history
sdjournal: add ability to rewind JournalReader
  • Loading branch information
iaguis committed May 20, 2016
2 parents 7d19429 + 0f21494 commit 1d9051f
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
28 changes: 28 additions & 0 deletions sdjournal/journal.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,15 @@ package sdjournal
// }
//
// int
// my_sd_journal_seek_head(void *f, sd_journal *j)
// {
// int (*sd_journal_seek_head)(sd_journal *);
//
// sd_journal_seek_head = f;
// return sd_journal_seek_head(j);
// }
//
// int
// my_sd_journal_seek_tail(void *f, sd_journal *j)
// {
// int (*sd_journal_seek_tail)(sd_journal *);
Expand Down Expand Up @@ -587,6 +596,25 @@ func (j *Journal) GetRealtimeUsec() (uint64, error) {
return uint64(usec), nil
}

// SeekHead seeks to the beginning of the journal, i.e. the oldest available
// entry.
func (j *Journal) SeekHead() error {
sd_journal_seek_head, err := j.getFunction("sd_journal_seek_head")
if err != nil {
return err
}

j.mu.Lock()
r := C.my_sd_journal_seek_head(sd_journal_seek_head, j.cjournal)
j.mu.Unlock()

if r < 0 {
return fmt.Errorf("failed to seek to head of journal: %d", syscall.Errno(-r))
}

return nil
}

// SeekTail may be used to seek to the end of the journal, i.e. the most recent
// available entry.
func (j *Journal) SeekTail() error {
Expand Down
6 changes: 6 additions & 0 deletions sdjournal/read.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,16 @@ func (r *JournalReader) Read(b []byte) (int, error) {
return len(msg), nil
}

// Close closes the JournalReader's handle to the journal.
func (r *JournalReader) Close() error {
return r.journal.Close()
}

// Rewind attempts to rewind the JournalReader to the first entry.
func (r *JournalReader) Rewind() error {
return r.journal.SeekHead()
}

// Follow synchronously follows the JournalReader, writing each new journal entry to writer. The
// follow will continue until a single time.Time is received on the until channel.
func (r *JournalReader) Follow(until <-chan time.Time, writer io.Writer) (err error) {
Expand Down

0 comments on commit 1d9051f

Please sign in to comment.