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.
165 lines
4.4 KiB
165 lines
4.4 KiB
package database
|
|
|
|
import (
|
|
mock_config "github.com/analogj/scrutiny/webapp/backend/pkg/config/mock"
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
)
|
|
|
|
func Test_DownsampleScript_Weekly(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
//setup
|
|
mockCtrl := gomock.NewController(t)
|
|
defer mockCtrl.Finish()
|
|
fakeConfig := mock_config.NewMockInterface(mockCtrl)
|
|
fakeConfig.EXPECT().GetString("web.influxdb.bucket").Return("metrics").AnyTimes()
|
|
fakeConfig.EXPECT().GetString("web.influxdb.org").Return("scrutiny").AnyTimes()
|
|
|
|
deviceRepo := scrutinyRepository{
|
|
appConfig: fakeConfig,
|
|
}
|
|
|
|
aggregationType := "weekly"
|
|
|
|
//test
|
|
influxDbScript := deviceRepo.DownsampleScript(aggregationType, "tsk-weekly-aggr", "0 1 * * 0")
|
|
|
|
//assert
|
|
require.Equal(t, `
|
|
option task = {
|
|
name: "tsk-weekly-aggr",
|
|
cron: "0 1 * * 0",
|
|
}
|
|
|
|
sourceBucket = "metrics"
|
|
rangeStart = -2w
|
|
rangeEnd = -1w
|
|
aggWindow = 1w
|
|
destBucket = "metrics_weekly"
|
|
destOrg = "scrutiny"
|
|
|
|
from(bucket: sourceBucket)
|
|
|> range(start: rangeStart, stop: rangeEnd)
|
|
|> filter(fn: (r) => r["_measurement"] == "smart" )
|
|
|> group(columns: ["device_wwn", "_field"])
|
|
|> aggregateWindow(every: aggWindow, fn: last, createEmpty: false)
|
|
|> to(bucket: destBucket, org: destOrg)
|
|
|
|
from(bucket: sourceBucket)
|
|
|> range(start: rangeStart, stop: rangeEnd)
|
|
|> filter(fn: (r) => r["_measurement"] == "temp")
|
|
|> group(columns: ["device_wwn"])
|
|
|> toInt()
|
|
|> aggregateWindow(fn: mean, every: aggWindow, createEmpty: false)
|
|
|> set(key: "_measurement", value: "temp")
|
|
|> set(key: "_field", value: "temp")
|
|
|> to(bucket: destBucket, org: destOrg)
|
|
`, influxDbScript)
|
|
}
|
|
|
|
func Test_DownsampleScript_Monthly(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
//setup
|
|
mockCtrl := gomock.NewController(t)
|
|
defer mockCtrl.Finish()
|
|
fakeConfig := mock_config.NewMockInterface(mockCtrl)
|
|
fakeConfig.EXPECT().GetString("web.influxdb.bucket").Return("metrics").AnyTimes()
|
|
fakeConfig.EXPECT().GetString("web.influxdb.org").Return("scrutiny").AnyTimes()
|
|
|
|
deviceRepo := scrutinyRepository{
|
|
appConfig: fakeConfig,
|
|
}
|
|
|
|
aggregationType := "monthly"
|
|
|
|
//test
|
|
influxDbScript := deviceRepo.DownsampleScript(aggregationType, "tsk-monthly-aggr", "30 1 1 * *")
|
|
|
|
//assert
|
|
require.Equal(t, `
|
|
option task = {
|
|
name: "tsk-monthly-aggr",
|
|
cron: "30 1 1 * *",
|
|
}
|
|
|
|
sourceBucket = "metrics_weekly"
|
|
rangeStart = -2mo
|
|
rangeEnd = -1mo
|
|
aggWindow = 1mo
|
|
destBucket = "metrics_monthly"
|
|
destOrg = "scrutiny"
|
|
|
|
from(bucket: sourceBucket)
|
|
|> range(start: rangeStart, stop: rangeEnd)
|
|
|> filter(fn: (r) => r["_measurement"] == "smart" )
|
|
|> group(columns: ["device_wwn", "_field"])
|
|
|> aggregateWindow(every: aggWindow, fn: last, createEmpty: false)
|
|
|> to(bucket: destBucket, org: destOrg)
|
|
|
|
from(bucket: sourceBucket)
|
|
|> range(start: rangeStart, stop: rangeEnd)
|
|
|> filter(fn: (r) => r["_measurement"] == "temp")
|
|
|> group(columns: ["device_wwn"])
|
|
|> toInt()
|
|
|> aggregateWindow(fn: mean, every: aggWindow, createEmpty: false)
|
|
|> set(key: "_measurement", value: "temp")
|
|
|> set(key: "_field", value: "temp")
|
|
|> to(bucket: destBucket, org: destOrg)
|
|
`, influxDbScript)
|
|
}
|
|
|
|
func Test_DownsampleScript_Yearly(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
//setup
|
|
mockCtrl := gomock.NewController(t)
|
|
defer mockCtrl.Finish()
|
|
fakeConfig := mock_config.NewMockInterface(mockCtrl)
|
|
fakeConfig.EXPECT().GetString("web.influxdb.bucket").Return("metrics").AnyTimes()
|
|
fakeConfig.EXPECT().GetString("web.influxdb.org").Return("scrutiny").AnyTimes()
|
|
|
|
deviceRepo := scrutinyRepository{
|
|
appConfig: fakeConfig,
|
|
}
|
|
|
|
aggregationType := "yearly"
|
|
|
|
//test
|
|
influxDbScript := deviceRepo.DownsampleScript(aggregationType, "tsk-yearly-aggr", "0 2 1 1 *")
|
|
|
|
//assert
|
|
require.Equal(t, `
|
|
option task = {
|
|
name: "tsk-yearly-aggr",
|
|
cron: "0 2 1 1 *",
|
|
}
|
|
|
|
sourceBucket = "metrics_monthly"
|
|
rangeStart = -2y
|
|
rangeEnd = -1y
|
|
aggWindow = 1y
|
|
destBucket = "metrics_yearly"
|
|
destOrg = "scrutiny"
|
|
|
|
from(bucket: sourceBucket)
|
|
|> range(start: rangeStart, stop: rangeEnd)
|
|
|> filter(fn: (r) => r["_measurement"] == "smart" )
|
|
|> group(columns: ["device_wwn", "_field"])
|
|
|> aggregateWindow(every: aggWindow, fn: last, createEmpty: false)
|
|
|> to(bucket: destBucket, org: destOrg)
|
|
|
|
from(bucket: sourceBucket)
|
|
|> range(start: rangeStart, stop: rangeEnd)
|
|
|> filter(fn: (r) => r["_measurement"] == "temp")
|
|
|> group(columns: ["device_wwn"])
|
|
|> toInt()
|
|
|> aggregateWindow(fn: mean, every: aggWindow, createEmpty: false)
|
|
|> set(key: "_measurement", value: "temp")
|
|
|> set(key: "_field", value: "temp")
|
|
|> to(bucket: destBucket, org: destOrg)
|
|
`, influxDbScript)
|
|
}
|