// Wait will synchronously wait until the journal gets changed. The maximum time // this call sleeps may be controlled with the timeout parameter. func (j *Journal) Wait(timeout time.Duration) int { to := uint64(time.Now().Add(timeout).Unix() / 1000) j.mu.Lock() r := C.sd_journal_wait(j.cjournal, C.uint64_t(to)) j.mu.Unlock() return int(r) }
// Wait will synchronously wait until the journal gets changed. The maximum time // this call sleeps may be controlled with the timeout parameter. If // sdjournal.IndefiniteWait is passed as the timeout parameter, Wait will // wait indefinitely for a journal change. func (j *Journal) Wait(timeout time.Duration) int { var to uint64 if timeout == IndefiniteWait { // sd_journal_wait(3) calls for a (uint64_t) -1 to be passed to signify // indefinite wait, but using a -1 overflows our C.uint64_t, so we use an // equivalent hex value. to = 0xffffffffffffffff } else { to = uint64(time.Now().Add(timeout).Unix() / 1000) } j.mu.Lock() r := C.sd_journal_wait(j.cjournal, C.uint64_t(to)) j.mu.Unlock() return int(r) }
func (s *Service) ProcessStream(hostname *string) { s.Indexer.Start() defer s.Indexer.Stop() for { r := C.sd_journal_next(s.Journal) if r < 0 { panic(fmt.Sprintf("failed to iterate to next entry: %s", C.strerror(-r))) } if r == 0 { r = C.sd_journal_wait(s.Journal, 1000000) if r < 0 { panic(fmt.Sprintf("failed to wait for changes: %s", C.strerror(-r))) } continue } s.ProcessEntry(hostname) } }
func (s *Service) ProcessStream() { s.Indexer.Start() defer s.Indexer.Stop() for { r := C.sd_journal_next(s.Journal) if r < 0 { log.Fatalf("failed to iterate to next entry: %s\n", C.strerror(-r)) } if r == 0 { r = C.sd_journal_wait(s.Journal, 1000000) if r < 0 { log.Fatalf("failed to wait for changes: %s\n", C.strerror(-r)) } continue } s.ProcessEntry() } }