func nearTime()

in pkg/genlib/generator_interface.go [504:545]


func nearTime(fieldCfg ConfigField, state *genState) time.Time {
	var offset time.Duration
	from, errFrom := fieldCfg.Range.FromAsTime()
	to, errTo := fieldCfg.Range.ToAsTime()
	if errFrom == nil && errTo == nil {
		timeNowToBind = from
		fieldCfg.Period = to.UTC().Sub(from.UTC())
	}

	if errFrom == nil && errTo != nil {
		if from.UTC().After(timeNowToBind.UTC()) {
			fieldCfg.Period = from.UTC().Sub(timeNowToBind.UTC())
		} else {
			fieldCfg.Period = timeNowToBind.UTC().Sub(from.UTC())
		}

	}

	if errFrom != nil && errTo == nil {
		if to.UTC().After(timeNowToBind.UTC()) {
			fieldCfg.Period = to.UTC().Sub(timeNowToBind.UTC())
		} else {
			fieldCfg.Period = timeNowToBind.UTC().Sub(to.UTC())
		}
	}

	if fieldCfg.Period > 0 && state.totEvents > 0 {
		offset = time.Duration((fieldCfg.Period.Nanoseconds() / int64(state.totEvents)) * int64(state.counter))
	} else if fieldCfg.Period < 0 && state.totEvents > 0 {
		offset = time.Duration((fieldCfg.Period.Nanoseconds() / int64(state.totEvents)) * (int64(state.totEvents - state.counter)))
	} else {
		offset = time.Duration(customRand.Intn(FieldTypeDurationSpan)) * time.Millisecond
	}

	newTime := timeNowToBind.Add(offset)

	if state.totEvents <= 0 {
		timeNowToBind = newTime
	}

	return newTime
}