2026-06-12 06:11:57 +00:00
|
|
|
// IN APPEND MEASURES
|
|
|
|
|
// if len(s.buffer) < storage.DataPageSize {
|
|
|
|
|
// // allocate bigger buffer
|
|
|
|
|
// buf, databuf := growBuffers(growBuffersIn{
|
|
|
|
|
// databuf: s.buffer,
|
|
|
|
|
// tSize: timestamps.Size(),
|
|
|
|
|
// vSize: values.Size(),
|
|
|
|
|
// requiredSpace: totalRequiredSpace,
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
// s.buffer = buf
|
|
|
|
|
// // replace buffer in timestamps and values
|
|
|
|
|
// timestamps.Rotate(databuf) // fix pos
|
|
|
|
|
// values.Rotate(databuf) // fix pos
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
|
|
// IN DATABASE
|
|
|
|
|
|
|
|
|
|
// FIX
|
|
|
|
|
// УВАГА!
|
|
|
|
|
// Якщо буфер metric.buffer < розміру сторінки - для timestamps доступний весь буфер.
|
|
|
|
|
// Якщо буфер досяг розміру сторінки - в timestamps я передаю buffer[:DataPagePayloadSize]
|
|
|
|
|
|
|
|
|
|
// var dataBufferSizes = []int{
|
|
|
|
|
// 1024,
|
|
|
|
|
// 2048,
|
|
|
|
|
// 4096,
|
|
|
|
|
// 8192,
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// func calculateDataBufferSize(payloadSize int) int {
|
|
|
|
|
// for _, bufferSize := range dataBufferSizes {
|
|
|
|
|
// if payloadSize <= bufferSize {
|
|
|
|
|
// return bufferSize
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// return storage.DataPageSize
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// func allocateBuffers(requiredSpace int) (buf, databuf []byte) {
|
|
|
|
|
// bufferSize := calculateDataBufferSize(requiredSpace)
|
|
|
|
|
// buf = make([]byte, bufferSize)
|
|
|
|
|
// if bufferSize == storage.DataPageSize {
|
|
|
|
|
// databuf = buf[:storage.DataPagePayloadSize]
|
|
|
|
|
// } else {
|
|
|
|
|
// databuf = buf
|
|
|
|
|
// }
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // src - databuf
|
|
|
|
|
// type growBuffersIn struct {
|
|
|
|
|
// databuf []byte
|
|
|
|
|
// tSize int
|
|
|
|
|
// vSize int
|
|
|
|
|
// requiredSpace int
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// func growBuffers(in growBuffersIn) (buf, databuf []byte) {
|
|
|
|
|
// buf, databuf = allocateBuffers(in.requiredSpace)
|
|
|
|
|
// copy(databuf[len(databuf)-in.tSize:], in.databuf[len(in.databuf)-in.tSize:])
|
|
|
|
|
// copy(databuf, in.databuf[:in.vSize])
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// type shrinkBufferIn struct {
|
|
|
|
|
// Buffer []byte
|
|
|
|
|
// TimestampsSize int
|
|
|
|
|
// ValuesSize int
|
|
|
|
|
// NewBufferSize int
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// func shrinkBuffer(in shrinkBufferIn) []byte {
|
|
|
|
|
// buf := make([]byte, in.NewBufferSize)
|
|
|
|
|
// copy(buf, in.Buffer[:in.ValuesSize])
|
|
|
|
|
// copy(buf[:len(buf)-in.TimestampsSize], in.Buffer[len(in.Buffer)-in.TimestampsSize:])
|
|
|
|
|
// return buf
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// IN REPLAY_METRIC.TO_METRIC
|
|
|
|
|
|
|
|
|
|
// var (
|
|
|
|
|
// requiredSpace = s.tSize + s.vSize
|
|
|
|
|
// )
|
|
|
|
|
// bufferSize := calculateDataBufferSize(requiredSpace)
|
|
|
|
|
// if len(s.buf) > bufferSize {
|
|
|
|
|
// s.buf = shrinkBuffer(shrinkBufferIn{
|
|
|
|
|
// Buffer: s.buf,
|
|
|
|
|
// TimestampsSize: s.tSize,
|
|
|
|
|
// ValuesSize: s.vSize,
|
|
|
|
|
// NewBufferSize: bufferSize,
|
|
|
|
|
// })
|
2026-06-15 10:47:24 +00:00
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// func isFileExist(fileName string) (bool, error) {
|
|
|
|
|
// _, err := os.Stat(fileName)
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// if errors.Is(err, fs.ErrNotExist) {
|
|
|
|
|
// return false, nil
|
|
|
|
|
// } else {
|
|
|
|
|
// return false, err
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// return true, nil
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// func correctToFHD(since, until uint32, firstHourOfDay int) (uint32, uint32) {
|
|
|
|
|
// duration := time.Duration(firstHourOfDay) * time.Hour
|
|
|
|
|
// since = uint32(time.Unix(int64(since), 0).Add(duration).Unix())
|
|
|
|
|
// until = uint32(time.Unix(int64(until), 0).Add(duration).Unix())
|
|
|
|
|
// return since, until
|
|
|
|
|
// }
|