Documentation ¶
Overview ¶
Package timesync is used to check system time reliability by communicating with NTP time servers.
Index ¶
Constants ¶
const ( // MaxAllowedMessageDrift is the time we limit we receive and handle delivered messages within MaxAllowedMessageDrift = 10 * time.Minute // NtpOffset is 70 years in seconds since ntp counts from 1900 and unix from 1970 NtpOffset = 2208988800 // DefaultNtpPort is the ntp protocol port DefaultNtpPort = "123" // MaxRequestTries is the number of tries we try to query ntp before we give up when having errors. MaxRequestTries = 3 // RequestTriesInterval is the interval to wait between tries to ask ntp for the time RequestTriesInterval = time.Second * 5 // MinResultsThreshold is the minimum number of successful ntp query results to calculate the drift MinResultsThreshold = 3 )
Variables ¶
var (
DefaultServers = []string{
"0.pool.ntp.org",
"1.pool.ntp.org",
"time.google.com",
"time1.google.com",
"time.asia.apple.com",
"time.americas.apple.com",
}
)
DefaultServer is a list of relay on more than one server.
Functions ¶
func CheckMessageDrift ¶
CheckMessageDrift checks if a given message timestamp is too far from our local clock. accepts a unix timestamp. can be created with Time.Now().Unix()
func CheckSystemClockDrift ¶
CheckSystemClockDrift is comparing our clock to the collected ntp data return the drift and an error when drift reading failed or exceeds our preset MaxAllowedDrift
Types ¶
type LayerConv ¶
type LayerConv struct {
// contains filtered or unexported fields
}
func (LayerConv) LayerToTime ¶
LayerToTime returns the time of the provided layer
type LayerConverter ¶
type LayerConverter interface { TimeToLayer(time.Time) types.LayerID LayerToTime(types.LayerID) time.Time }
LayerConverter provides conversions from time to layer and vice versa
type LayerTimer ¶
LayerTimer is a channel of LayerIDs Subscribers will receive the ticked layer through such channel
type NtpPacket ¶
type NtpPacket struct { Settings uint8 // leap yr indicator, ver number, and mode Stratum uint8 // stratum of local clock Poll int8 // poll exponent Precision int8 // precision exponent RootDelay uint32 // root delay RootDispersion uint32 // root dispersion ReferenceID uint32 // reference id RefTimeSec uint32 // reference timestamp sec RefTimeFrac uint32 // reference timestamp fractional OrigTimeSec uint32 // origin time secs OrigTimeFrac uint32 // origin time fractional RxTimeSec uint32 // receive time secs RxTimeFrac uint32 // receive time frac3 TxTimeSec uint32 // transmit time secs TxTimeFrac uint32 // transmit time frac }
NtpPacket is a 48 bytes packet used for querying ntp information.
type Ticker ¶
type Ticker struct {
// contains filtered or unexported fields
}
func NewTicker ¶
func NewTicker(c Clock, lc LayerConverter) *Ticker
func (*Ticker) AwaitLayer ¶
func (*Ticker) GetCurrentLayer ¶
func (*Ticker) Notify ¶
Notify notifies all the subscribers with the current layer if the tick time has passed notify is skipped and errMissedTickTime is returned notify may be skipped also for non-monotonic tick if some of the subscribers where not listening, they are skipped. In that case, errMissedTicks is returned along the number of subscribers not listening
func (*Ticker) StartNotifying ¶
func (t *Ticker) StartNotifying()
func (Ticker) Subscribe ¶
func (s Ticker) Subscribe() LayerTimer
func (Ticker) Unsubscribe ¶
func (s Ticker) Unsubscribe(ch LayerTimer)
type TimeClock ¶
type TimeClock struct { *Ticker // contains filtered or unexported fields }
func (*TimeClock) GetGenesisTime ¶
func (TimeClock) Subscribe ¶
func (s TimeClock) Subscribe() LayerTimer
func (TimeClock) Unsubscribe ¶
func (s TimeClock) Unsubscribe(ch LayerTimer)