You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.7 KiB
81 lines
1.7 KiB
package main
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
|
|
"gordenko.dev/dima/diploma/client"
|
|
)
|
|
|
|
func GenerateCumulativeMeasures(days int) []client.Measure {
|
|
var (
|
|
measures []client.Measure
|
|
minutes = []int{14, 29, 44, 59}
|
|
hoursPerDay = 24
|
|
totalHours = days * hoursPerDay
|
|
since = time.Now().AddDate(0, 0, -days)
|
|
totalValue float64
|
|
)
|
|
|
|
for i := range totalHours {
|
|
hourTime := since.Add(time.Duration(i) * time.Hour)
|
|
for _, m := range minutes {
|
|
measureTime := time.Date(
|
|
hourTime.Year(),
|
|
hourTime.Month(),
|
|
hourTime.Day(),
|
|
hourTime.Hour(),
|
|
m, // minutes
|
|
0, // seconds
|
|
0, // nanoseconds
|
|
time.Local,
|
|
)
|
|
|
|
measure := client.Measure{
|
|
Timestamp: uint32(measureTime.Unix()),
|
|
Value: totalValue,
|
|
}
|
|
measures = append(measures, measure)
|
|
|
|
totalValue += rand.Float64()
|
|
}
|
|
}
|
|
return measures
|
|
}
|
|
|
|
func GenerateInstantMeasures(days int, baseValue float64) []client.Measure {
|
|
var (
|
|
measures []client.Measure
|
|
minutes = []int{14, 29, 44, 59}
|
|
hoursPerDay = 24
|
|
totalHours = days * hoursPerDay
|
|
since = time.Now().AddDate(0, 0, -days)
|
|
)
|
|
|
|
for i := range totalHours {
|
|
hourTime := since.Add(time.Duration(i) * time.Hour)
|
|
for _, m := range minutes {
|
|
measureTime := time.Date(
|
|
hourTime.Year(),
|
|
hourTime.Month(),
|
|
hourTime.Day(),
|
|
hourTime.Hour(),
|
|
m, // minutes
|
|
0, // seconds
|
|
0, // nanoseconds
|
|
time.Local,
|
|
)
|
|
|
|
// value = +-10% from base value
|
|
fluctuation := baseValue * 0.1
|
|
value := baseValue + (rand.Float64()*2-1)*fluctuation
|
|
|
|
measure := client.Measure{
|
|
Timestamp: uint32(measureTime.Unix()),
|
|
Value: value,
|
|
}
|
|
measures = append(measures, measure)
|
|
}
|
|
}
|
|
return measures
|
|
}
|
|
|