VptPassiveAdapter/util/file_filter.go
2025-04-13 14:11:53 +08:00

48 lines
1.3 KiB
Go

package util
import (
"ZhenTuLocalPassiveAdapter/dto"
"context"
"go.opentelemetry.io/otel/attribute"
"sort"
"time"
)
func FilterAndSortFiles(ctx context.Context, fileList []dto.File, beginDt, endDt time.Time) []dto.File {
_, span := tracer.Start(ctx, "FilterAndSortFiles")
defer span.End()
span.SetAttributes(attribute.Int("files.count", len(fileList)))
var filteredFiles []dto.File
for _, file := range fileList {
fileStartTime := file.StartTime
nextFileStartTime := file.EndTime
file.DiffMs = beginDt.Sub(fileStartTime).Milliseconds()
// 如果当前文件还没有开始
if beginDt.After(fileStartTime) {
// 没有下一个文件的情况下,就是最后一个文件
if nextFileStartTime.IsZero() {
continue
}
// 但是下一个文件已经开始
if beginDt.Before(nextFileStartTime) {
filteredFiles = append(filteredFiles, file)
}
// 已经开始,但是也已经结束了
} else if fileStartTime.After(endDt) {
continue
// 已经开始,但未结束
} else {
filteredFiles = append(filteredFiles, file)
}
}
// 按照 Create 的值升序排序
sort.Slice(filteredFiles, func(i, j int) bool {
return filteredFiles[i].StartTime.Unix() <= filteredFiles[j].StartTime.Unix()
})
span.SetAttributes(attribute.String("files.filtered", ToJson(filteredFiles)))
return filteredFiles
}