ntp

package
v1.2.0-beta.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2022 License: MPL-2.0 Imports: 15 Imported by: 0

Documentation

Overview

Package ntp provides a time sync client via SNTP protocol.

Index

Constants

View Source
const (
	// MinAllowablePoll is the minimum time allowed for a client to query a time server.
	MinAllowablePoll = 32 * time.Second
	// MaxAllowablePoll is the maximum allowed interval for querying a time server.
	MaxAllowablePoll = 2048 * time.Second
	// RetryPoll is the interval between retries if the error is not Kiss-o-Death.
	RetryPoll = time.Second
	// AdjustTimeLimit is a maximum time drift to compensate via adjtimex().
	//
	// Deltas smaller than AdjustTimeLimit are gradually adjusted (slewed) to approach the network time.
	// Deltas larger than AdjustTimeLimit are set by letting the system time jump.
	AdjustTimeLimit = 400 * time.Millisecond
	// EpochLimit is a minimum time difference to signal that change as epoch change.
	EpochLimit = 15 * time.Minute
	// ExpectedAccuracy is the expected time sync accuracy, used to adjust poll interval.
	ExpectedAccuracy = 200 * time.Millisecond
)

Variables

View Source
var (
	RTCClock           *rtc.RTC
	RTCClockInitialize sync.Once
)

Global instance of RTC clock because `rtc` doesn't support closing.

Functions

This section is empty.

Types

type AdjustTimeFunc

type AdjustTimeFunc func(buf *syscall.Timex) (state timex.State, err error)

AdjustTimeFunc provides a function to adjust time.

type CurrentTimeFunc

type CurrentTimeFunc func() time.Time

CurrentTimeFunc provides a function which returns current time.

type QueryFunc

type QueryFunc func(server string) (*ntp.Response, error)

QueryFunc provides a function which performs NTP query.

type SetTimeFunc

type SetTimeFunc func(tv *syscall.Timeval) error

SetTimeFunc provides a function to set system time.

type Syncer

type Syncer struct {
	MinPoll, MaxPoll, RetryPoll time.Duration

	// these functions are overridden in tests for mocking support
	CurrentTime CurrentTimeFunc
	NTPQuery    QueryFunc
	AdjustTime  AdjustTimeFunc
	// contains filtered or unexported fields
}

Syncer performs time sync via NTP on schedule.

func NewSyncer

func NewSyncer(logger *zap.Logger, timeServers []string) *Syncer

NewSyncer creates new Syncer with default configuration.

func (*Syncer) EpochChange

func (syncer *Syncer) EpochChange() <-chan struct{}

EpochChange returns a channel which receives a value each time jumps more than EpochLimit.

func (*Syncer) Run

func (syncer *Syncer) Run(ctx context.Context)

Run runs the sync process.

Run is usually run in a goroutine. When context is canceled, sync process aborts.

func (*Syncer) SetTimeServers

func (syncer *Syncer) SetTimeServers(timeServers []string)

SetTimeServers sets the list of time servers to use.

func (*Syncer) Synced

func (syncer *Syncer) Synced() <-chan struct{}

Synced returns a channel which is closed when time is in sync.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL