forked from pingcap/tidb-dashboard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
file.go
65 lines (56 loc) · 1.72 KB
/
file.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package input
import (
"os"
"time"
"github.com/pingcap/log"
"go.uber.org/zap"
"github.com/LinuxGit/tidb-dashboard/pkg/keyvisual/storage"
)
type fileInput struct {
StartTime time.Time
EndTime time.Time
Now time.Time
}
// FileInput reads files in the specified time range from the ./data directory.
func FileInput(startTime, endTime time.Time) StatInput {
return &fileInput{
StartTime: startTime,
EndTime: endTime,
Now: time.Now(),
}
}
func (input *fileInput) GetStartTime() time.Time {
return input.Now.Add(input.StartTime.Sub(input.EndTime))
}
func (input *fileInput) Background(stat *storage.Stat) {
log.Info("keyvisual load files from", zap.Time("start-time", input.StartTime))
fileTime := input.StartTime
for !fileTime.After(input.EndTime) {
regions, err := readFile(fileTime)
fileTime = fileTime.Add(time.Minute)
if err == nil {
stat.Append(regions, input.Now.Add(fileTime.Sub(input.EndTime)))
}
}
log.Info("keyvisual load files to", zap.Time("end-time", input.EndTime))
}
func readFile(fileTime time.Time) (*RegionsInfo, error) {
fileName := fileTime.Format("./data/20060102-15-04.json")
file, err := os.Open(fileName)
if err == nil {
return read(file)
}
return nil, err
}