summaryrefslogtreecommitdiffstats
path: root/src/dma/cmd/threshold/read.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dma/cmd/threshold/read.go')
-rw-r--r--src/dma/cmd/threshold/read.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/dma/cmd/threshold/read.go b/src/dma/cmd/threshold/read.go
new file mode 100644
index 00000000..0b0cf5a1
--- /dev/null
+++ b/src/dma/cmd/threshold/read.go
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2018 NEC Corporation
+ *
+ * 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,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+ "fmt"
+ "github.com/go-redis/redis"
+ "os"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// e.g. collectd/instance-00000001/virt/if_octets-tapd21acb51-35
+const redisKey = "collectd/*/virt/if_octets-*"
+
+func zrangebyscore(config *Config, client *redis.Client, key string) []int {
+
+ unixNow := int(time.Now().Unix())
+
+ val, err := client.ZRangeByScore(key, redis.ZRangeBy{
+ Min: strconv.Itoa(unixNow - config.Threshold.Interval),
+ Max: strconv.Itoa(unixNow),
+ }).Result()
+
+ datalist := []int{}
+
+ if err == redis.Nil {
+ fmt.Println("this key is not exist")
+ os.Exit(1)
+ } else if err != nil {
+ panic(err)
+ } else {
+ for _, strVal := range val {
+ split := strings.Split(strVal, ":")
+ txVal := split[2]
+ floatVal, err := strconv.ParseFloat(txVal, 64)
+ if err != nil {
+ os.Exit(1)
+ }
+ datalist = append(datalist, int(floatVal))
+ }
+ }
+ return datalist
+}
+
+func read(config *Config) []rawData {
+ thresConfig := config.Threshold
+
+ client := redis.NewClient(&redis.Options{
+ Addr: thresConfig.RedisHost + ":" + thresConfig.RedisPort,
+ Password: thresConfig.RedisPassword,
+ DB: thresConfig.RedisDB,
+ })
+
+ keys, err := client.Keys(redisKey).Result()
+ if err != nil {
+ panic(err)
+ }
+
+ rdlist := []rawData{}
+
+ for _, key := range keys {
+ rdlist = append(rdlist, rawData{key, zrangebyscore(config, client, key)})
+ }
+
+ return rdlist
+}