func (ts *TimeSpan) RoundToDuration(duration time.Duration) { if duration < ts.GetDuration() { duration = utils.RoundTo(duration, ts.GetDuration()) } if duration > ts.GetDuration() { initialDuration := ts.GetDuration() ts.TimeEnd = ts.TimeStart.Add(duration) ts.DurationIndex = ts.DurationIndex + (duration - initialDuration) } }
// if the rate interval for any timespan has a RatingIncrement larger than the timespan duration // the timespan must expand potentially overlaping folowing timespans and may exceed call // descriptor's initial duration func (cd *CallDescriptor) roundTimeSpansToIncrement(timespans TimeSpans) []*TimeSpan { for i := 0; i < len(timespans); i++ { ts := timespans[i] if ts.RateInterval != nil { _, rateIncrement, _ := ts.RateInterval.GetRateParameters(ts.GetGroupStart()) // if the timespan duration is larger than the rate increment make sure it is a multiple of it if rateIncrement < ts.GetDuration() { rateIncrement = utils.RoundTo(rateIncrement, ts.GetDuration()) } if rateIncrement > ts.GetDuration() { initialDuration := ts.GetDuration() ts.TimeEnd = ts.TimeStart.Add(rateIncrement) ts.DurationIndex = ts.DurationIndex + (rateIncrement - initialDuration) timespans.RemoveOverlapedFromIndex(i) } } } return timespans }