func (quartiles *Quartiles) Rollup(time int64, key string, samples *vector.IntVector) { if samples.Len() < 2 { return } sort.Sort(samples) lo := samples.At(0) hi := samples.At(samples.Len() - 1) number := samples.Len() lo_c := number / 2 hi_c := number - lo_c data := &QuartilesItem{} if lo_c > 0 && hi_c > 0 { lo_samples := samples.Slice(0, lo_c) hi_samples := samples.Slice(lo_c, hi_c) lo_sum := 0 hi_sum := 0 lo_samples.Do(func(elem interface{}) { lo_sum += elem.(int) }) hi_samples.Do(func(elem interface{}) { hi_sum += elem.(int) }) q1 := lo_sum / lo_c q2 := (lo_sum + hi_sum) / (lo_c + hi_c) q3 := hi_sum / hi_c data.time = time data.lo = lo data.q1 = q1 data.q2 = q2 data.q3 = q3 data.hi = hi data.total = number } quartiles.save(time, key, data) }