Skip to content
network.go 3.82 KiB
Newer Older
/*
 * Copyright (c) 2019  InterDigital Communications, 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,
 * 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 metricstore

import (
	"encoding/json"
	"errors"

	log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)

const metricLatency = "latency"
const metricTraffic = "traffic"

// SetLatencyMetric
Kevin Di Lallo's avatar
Kevin Di Lallo committed
func (ms *MetricStore) SetLatencyMetric(src string, dest string, lat int32) error {
	tags := map[string]string{"src": src, "dest": dest}
Kevin Di Lallo's avatar
Kevin Di Lallo committed
	fields := map[string]interface{}{"lat": lat}
	return ms.SetMetric(metricLatency, tags, fields)
}

// GetLastLatencyMetric
Kevin Di Lallo's avatar
Kevin Di Lallo committed
func (ms *MetricStore) GetLastLatencyMetric(src string, dest string) (lat int32, err error) {
	// Make sure we have set a store
	if ms.name == "" {
		err = errors.New("Store name not specified")
		return
	}

	// Get latest Latency metric
	tags := map[string]string{"src": src, "dest": dest}
Kevin Di Lallo's avatar
Kevin Di Lallo committed
	fields := []string{"lat"}
	valuesArray, err = ms.GetMetric(metricLatency, tags, fields, "", 1)
	if err != nil {
		log.Error("Failed to retrieve metrics with error: ", err.Error())
		return
	}

	// Take first & only values
	values := valuesArray[0]
	lat = JsonNumToInt32(values["lat"].(json.Number))
	return
}

// GetLatencyMetrics
func (ms *MetricStore) GetLatencyMetrics(src string, dest string, duration string, count int) (metrics []map[string]interface{}, err error) {
	// Make sure we have set a store
	if ms.name == "" {
		err = errors.New("Store name not specified")
		return
	}

	// Get Latency metrics
	tags := map[string]string{"src": src, "dest": dest}
Kevin Di Lallo's avatar
Kevin Di Lallo committed
	fields := []string{"lat"}
	metrics, err = ms.GetMetric(metricLatency, tags, fields, duration, count)
	if err != nil {
		log.Error("Failed to retrieve metrics with error: ", err.Error())
		return
	}
	return
}

// SetTrafficMetric
func (ms *MetricStore) SetTrafficMetric(src string, dest string, tput float64, loss float64) error {
	tags := map[string]string{"src": src, "dest": dest}
	fields := map[string]interface{}{"tput": tput, "loss": loss}
	return ms.SetMetric(metricTraffic, tags, fields)
}

// GetLastTrafficMetric
func (ms *MetricStore) GetLastTrafficMetric(src string, dest string) (tput float64, loss float64, err error) {
	// Make sure we have set a store
	if ms.name == "" {
		err = errors.New("Store name not specified")
		return
	}

	// Get latest Net metric
	tags := map[string]string{"src": src, "dest": dest}
	fields := []string{"tput", "loss"}
	var valuesArray []map[string]interface{}
	valuesArray, err = ms.GetMetric(metricTraffic, tags, fields, "", 1)
	if err != nil {
		log.Error("Failed to retrieve metrics with error: ", err.Error())
		return
	}

	// Take first & only values
	values := valuesArray[0]
	tput = JsonNumToFloat64(values["tput"].(json.Number))
	loss = JsonNumToFloat64(values["loss"].(json.Number))
	return
}
Kevin Di Lallo's avatar
Kevin Di Lallo committed

Kevin Di Lallo's avatar
Kevin Di Lallo committed
// GetTrafficMetrics
Kevin Di Lallo's avatar
Kevin Di Lallo committed
func (ms *MetricStore) GetTrafficMetrics(src string, dest string, duration string, count int) (metrics []map[string]interface{}, err error) {
	// Make sure we have set a store
	if ms.name == "" {
		err = errors.New("Store name not specified")
		return
	}

	// Get Traffic metrics
	tags := map[string]string{"src": src, "dest": dest}
	fields := []string{"tput", "loss"}
	metrics, err = ms.GetMetric(metricTraffic, tags, fields, duration, count)
	if err != nil {
		log.Error("Failed to retrieve metrics with error: ", err.Error())
		return
	}
	return
}