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.
409 lines
11 KiB
409 lines
11 KiB
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"gordenko.dev/dima/diploma"
|
|
"gordenko.dev/dima/diploma/client"
|
|
"gordenko.dev/dima/diploma/proto"
|
|
)
|
|
|
|
func sendRequests(conn *client.Connection) {
|
|
var (
|
|
instantMetricID uint32 = 10000
|
|
cumulativeMetricID uint32 = 10001
|
|
fracDigits int = 2
|
|
err error
|
|
)
|
|
|
|
conn.DeleteMetric(instantMetricID)
|
|
conn.DeleteMetric(cumulativeMetricID)
|
|
|
|
// ADD INSTANT METRIC
|
|
|
|
err = conn.AddMetric(proto.AddMetricReq{
|
|
MetricID: instantMetricID,
|
|
MetricType: diploma.Instant,
|
|
FracDigits: fracDigits,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.AddMetric: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nInstant metric %d added\n", instantMetricID)
|
|
}
|
|
|
|
// GET INSTANT METRIC
|
|
|
|
iMetric, err := conn.GetMetric(instantMetricID)
|
|
if err != nil {
|
|
log.Fatalf("conn.GetMetric: %s\n", err)
|
|
} else {
|
|
fmt.Printf(`
|
|
GetMetric:
|
|
metricID: %d
|
|
metricType: %s
|
|
fracDigits: %d
|
|
`,
|
|
iMetric.MetricID, metricTypeToName[iMetric.MetricType], fracDigits)
|
|
}
|
|
|
|
// APPEND MEASURES
|
|
|
|
instantMeasures := GenerateInstantMeasures(62, 220)
|
|
|
|
err = conn.AppendMeasures(proto.AppendMeasuresReq{
|
|
MetricID: instantMetricID,
|
|
Measures: instantMeasures,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.AppendMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nAppended %d measures for the metric %d\n",
|
|
len(instantMeasures), instantMetricID)
|
|
}
|
|
|
|
// LIST INSTANT MEASURES
|
|
|
|
lastTimestamp := instantMeasures[len(instantMeasures)-1].Timestamp
|
|
until := time.Unix(int64(lastTimestamp), 0)
|
|
since := until.Add(-5 * time.Hour)
|
|
|
|
instantList, err := conn.ListInstantMeasures(proto.ListInstantMeasuresReq{
|
|
MetricID: instantMetricID,
|
|
Since: uint32(since.Unix()),
|
|
Until: uint32(until.Unix()),
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListInstantMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListInstantMeasures %s - %s:\n",
|
|
formatTime(uint32(since.Unix())), formatTime(uint32(until.Unix())))
|
|
for _, item := range instantList {
|
|
fmt.Printf(" %s => %.2f\n", formatTime(item.Timestamp), item.Value)
|
|
}
|
|
}
|
|
|
|
// LIST ALL INSTANT MEASURES
|
|
|
|
instantList, err = conn.ListAllInstantMeasures(instantMetricID)
|
|
if err != nil {
|
|
log.Fatalf("conn.ListAllInstantMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListAllInstantMeasures (last 15 items):\n")
|
|
for _, item := range instantList[:15] {
|
|
fmt.Printf(" %s => %.2f\n", formatTime(item.Timestamp), item.Value)
|
|
}
|
|
}
|
|
|
|
// LIST INSTANT PERIODS (group by hour)
|
|
|
|
until = time.Unix(int64(lastTimestamp+1), 0)
|
|
since = until.Add(-24 * time.Hour)
|
|
|
|
instantPeriods, err := conn.ListInstantPeriods(proto.ListInstantPeriodsReq{
|
|
MetricID: instantMetricID,
|
|
Since: proto.TimeBound{
|
|
Year: since.Year(),
|
|
Month: since.Month(),
|
|
Day: since.Day(),
|
|
},
|
|
Until: proto.TimeBound{
|
|
Year: until.Year(),
|
|
Month: until.Month(),
|
|
Day: until.Day(),
|
|
},
|
|
GroupBy: diploma.GroupByHour,
|
|
AggregateFuncs: diploma.AggregateMin | diploma.AggregateMax | diploma.AggregateAvg,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListInstantPeriods: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListInstantPeriods (1 day, group by hour):\n")
|
|
for _, item := range instantPeriods {
|
|
fmt.Printf(" %s => min %.2f, max %.2f, avg %.2f\n", formatHourPeriod(item.Period), item.Min, item.Max, item.Avg)
|
|
}
|
|
}
|
|
|
|
// LIST INSTANT PERIODS (group by day)
|
|
|
|
until = time.Unix(int64(lastTimestamp+1), 0)
|
|
since = until.AddDate(0, 0, -7)
|
|
|
|
instantPeriods, err = conn.ListInstantPeriods(proto.ListInstantPeriodsReq{
|
|
MetricID: instantMetricID,
|
|
Since: proto.TimeBound{
|
|
Year: since.Year(),
|
|
Month: since.Month(),
|
|
Day: since.Day(),
|
|
},
|
|
Until: proto.TimeBound{
|
|
Year: until.Year(),
|
|
Month: until.Month(),
|
|
Day: until.Day(),
|
|
},
|
|
GroupBy: diploma.GroupByDay,
|
|
AggregateFuncs: diploma.AggregateMin | diploma.AggregateMax | diploma.AggregateAvg,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListInstantPeriods: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListInstantPeriods (7 days, group by day):\n")
|
|
for _, item := range instantPeriods {
|
|
fmt.Printf(" %s => min %.2f, max %.2f, avg %.2f\n", formatDayPeriod(item.Period), item.Min, item.Max, item.Avg)
|
|
}
|
|
}
|
|
|
|
// LIST INSTANT PERIODS (group by month)
|
|
|
|
until = time.Unix(int64(lastTimestamp+1), 0)
|
|
since = until.AddDate(0, 0, -62)
|
|
|
|
instantPeriods, err = conn.ListInstantPeriods(proto.ListInstantPeriodsReq{
|
|
MetricID: instantMetricID,
|
|
Since: proto.TimeBound{
|
|
Year: since.Year(),
|
|
Month: since.Month(),
|
|
Day: since.Day(),
|
|
},
|
|
Until: proto.TimeBound{
|
|
Year: until.Year(),
|
|
Month: until.Month(),
|
|
Day: until.Day(),
|
|
},
|
|
GroupBy: diploma.GroupByMonth,
|
|
AggregateFuncs: diploma.AggregateMin | diploma.AggregateMax | diploma.AggregateAvg,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListInstantPeriods: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListInstantPeriods (62 days, group by month):\n")
|
|
for _, item := range instantPeriods {
|
|
fmt.Printf(" %s => min %.2f, max %.2f, avg %.2f\n", formatMonthPeriod(item.Period), item.Min, item.Max, item.Avg)
|
|
}
|
|
}
|
|
|
|
// DELETE INSTANT METRIC MEASURES
|
|
|
|
err = conn.DeleteMeasures(proto.DeleteMeasuresReq{
|
|
MetricID: instantMetricID,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.DeleteMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nInstant metric %d measures deleted\n", instantMetricID)
|
|
}
|
|
|
|
// DELETE INSTANT METRIC
|
|
|
|
err = conn.DeleteMetric(instantMetricID)
|
|
if err != nil {
|
|
log.Fatalf("conn.DeleteMetric: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nInstant metric %d deleted\n", instantMetricID)
|
|
}
|
|
|
|
// ADD CUMULATIVE METRIC
|
|
|
|
err = conn.AddMetric(proto.AddMetricReq{
|
|
MetricID: cumulativeMetricID,
|
|
MetricType: diploma.Cumulative,
|
|
FracDigits: fracDigits,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.AddMetric: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nCumulative metric %d added\n", cumulativeMetricID)
|
|
}
|
|
|
|
// GET CUMULATIVE METRIC
|
|
|
|
cMetric, err := conn.GetMetric(cumulativeMetricID)
|
|
if err != nil {
|
|
log.Fatalf("conn.GetMetric: %s\n", err)
|
|
} else {
|
|
fmt.Printf(`
|
|
GetMetric:
|
|
metricID: %d
|
|
metricType: %s
|
|
fracDigits: %d
|
|
`,
|
|
cMetric.MetricID, metricTypeToName[cMetric.MetricType], fracDigits)
|
|
}
|
|
|
|
// APPEND MEASURES
|
|
|
|
cumulativeMeasures := GenerateCumulativeMeasures(62)
|
|
|
|
err = conn.AppendMeasures(proto.AppendMeasuresReq{
|
|
MetricID: cumulativeMetricID,
|
|
Measures: cumulativeMeasures,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.AppendMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nAppended %d measures for the metric %d\n",
|
|
len(cumulativeMeasures), cumulativeMetricID)
|
|
}
|
|
|
|
// LIST CUMULATIVE MEASURES
|
|
|
|
lastTimestamp = cumulativeMeasures[len(cumulativeMeasures)-1].Timestamp
|
|
until = time.Unix(int64(lastTimestamp), 0)
|
|
since = until.Add(-5 * time.Hour)
|
|
|
|
cumulativeList, err := conn.ListCumulativeMeasures(proto.ListCumulativeMeasuresReq{
|
|
MetricID: cumulativeMetricID,
|
|
Since: uint32(since.Unix()),
|
|
Until: uint32(until.Unix()),
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListCumulativeMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListCumulativeMeasures %s - %s:\n",
|
|
formatTime(uint32(since.Unix())), formatTime(uint32(until.Unix())))
|
|
|
|
for _, item := range cumulativeList {
|
|
fmt.Printf(" %s => %.2f\n", formatTime(item.Timestamp), item.Value)
|
|
}
|
|
}
|
|
|
|
// LIST ALL CUMULATIVE MEASURES
|
|
|
|
cumulativeList, err = conn.ListAllCumulativeMeasures(cumulativeMetricID)
|
|
if err != nil {
|
|
log.Fatalf("conn.ListAllCumulativeMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListAllCumulativeMeasures (last 15 items):\n")
|
|
for _, item := range cumulativeList[:15] {
|
|
fmt.Printf(" %s => %.2f\n", formatTime(item.Timestamp), item.Value)
|
|
}
|
|
}
|
|
|
|
// LIST CUMULATIVE PERIODS (group by hour)
|
|
|
|
until = time.Unix(int64(lastTimestamp+1), 0)
|
|
since = until.Add(-24 * time.Hour)
|
|
|
|
cumulativePeriods, err := conn.ListCumulativePeriods(proto.ListCumulativePeriodsReq{
|
|
MetricID: cumulativeMetricID,
|
|
Since: proto.TimeBound{
|
|
Year: since.Year(),
|
|
Month: since.Month(),
|
|
Day: since.Day(),
|
|
},
|
|
Until: proto.TimeBound{
|
|
Year: until.Year(),
|
|
Month: until.Month(),
|
|
Day: until.Day(),
|
|
},
|
|
GroupBy: diploma.GroupByHour,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListCumulativePeriods: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListCumulativePeriods (1 day, group by hour):\n")
|
|
for _, item := range cumulativePeriods {
|
|
fmt.Printf(" %s => end value %.2f, total %.2f\n", formatHourPeriod(item.Period), item.EndValue, item.Total)
|
|
}
|
|
}
|
|
|
|
// LIST CUMULATIVE PERIODS (group by day)
|
|
|
|
until = time.Unix(int64(lastTimestamp+1), 0)
|
|
since = until.AddDate(0, 0, -7)
|
|
|
|
cumulativePeriods, err = conn.ListCumulativePeriods(proto.ListCumulativePeriodsReq{
|
|
MetricID: cumulativeMetricID,
|
|
Since: proto.TimeBound{
|
|
Year: since.Year(),
|
|
Month: since.Month(),
|
|
Day: since.Day(),
|
|
},
|
|
Until: proto.TimeBound{
|
|
Year: until.Year(),
|
|
Month: until.Month(),
|
|
Day: until.Day(),
|
|
},
|
|
GroupBy: diploma.GroupByDay,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListCumulativePeriods: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListCumulativePeriods (7 days, group by day):\n")
|
|
for _, item := range cumulativePeriods {
|
|
fmt.Printf(" %s => end value %.2f, total %.2f\n", formatDayPeriod(item.Period), item.EndValue, item.Total)
|
|
}
|
|
}
|
|
|
|
// LIST CUMULATIVE PERIODS (group by day)
|
|
|
|
until = time.Unix(int64(lastTimestamp+1), 0)
|
|
since = until.AddDate(0, 0, -62)
|
|
|
|
cumulativePeriods, err = conn.ListCumulativePeriods(proto.ListCumulativePeriodsReq{
|
|
MetricID: cumulativeMetricID,
|
|
Since: proto.TimeBound{
|
|
Year: since.Year(),
|
|
Month: since.Month(),
|
|
Day: since.Day(),
|
|
},
|
|
Until: proto.TimeBound{
|
|
Year: until.Year(),
|
|
Month: until.Month(),
|
|
Day: until.Day(),
|
|
},
|
|
GroupBy: diploma.GroupByMonth,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.ListCumulativePeriods: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nListCumulativePeriods (62 days, group by month):\n")
|
|
for _, item := range cumulativePeriods {
|
|
fmt.Printf(" %s => end value %.2f, total %.2f\n", formatMonthPeriod(item.Period), item.EndValue, item.Total)
|
|
}
|
|
}
|
|
|
|
// DELETE CUMULATIVE METRIC MEASURES
|
|
|
|
err = conn.DeleteMeasures(proto.DeleteMeasuresReq{
|
|
MetricID: cumulativeMetricID,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("conn.DeleteMeasures: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nCumulative metric %d measures deleted\n", cumulativeMetricID)
|
|
}
|
|
|
|
// DELETE CUMULATIVE METRIC
|
|
|
|
err = conn.DeleteMetric(cumulativeMetricID)
|
|
if err != nil {
|
|
log.Fatalf("conn.DeleteMetric: %s\n", err)
|
|
} else {
|
|
fmt.Printf("\nCumulative metric %d deleted\n", cumulativeMetricID)
|
|
}
|
|
}
|
|
|
|
const datetimeLayout = "2006-01-02 15:04:05"
|
|
|
|
func formatTime(timestamp uint32) string {
|
|
tm := time.Unix(int64(timestamp), 0)
|
|
return tm.Format(datetimeLayout)
|
|
}
|
|
|
|
func formatHourPeriod(period uint32) string {
|
|
tm := time.Unix(int64(period), 0)
|
|
return tm.Format("2006-01-02 15:00 - 15") + ":59"
|
|
}
|
|
|
|
func formatDayPeriod(period uint32) string {
|
|
tm := time.Unix(int64(period), 0)
|
|
return tm.Format("2006-01-02")
|
|
}
|
|
|
|
func formatMonthPeriod(period uint32) string {
|
|
tm := time.Unix(int64(period), 0)
|
|
return tm.Format("2006-01")
|
|
}
|
|
|