Commit e7f904cb authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

metric store package updates

parent 3e2eac25
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -29,8 +29,22 @@ func JsonNumToInt32(num json.Number) (val int32) {
}

func JsonNumToFloat64(num json.Number) (val float64) {
	if intVal, err := num.Float64(); err == nil {
		val = intVal
	if floatVal, err := num.Float64(); err == nil {
		val = floatVal
	}
	return val
}

func StrToInt32(str string) (val int32) {
	if intVal, err := strconv.Atoi(str); err == nil {
		val = int32(intVal)
	}
	return val
}

func StrToFloat64(str string) (val float64) {
	if floatVal, err := strconv.ParseFloat(str, 64); err == nil {
		val = floatVal
	}
	return val
}
+26 −34
Original line number Diff line number Diff line
@@ -22,42 +22,24 @@ import (
	log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)

const metricEvent = "events"
const EvMetName = "events"
const EvMetType = "type"
const EvMetEvent = "event"

// SetEventMetric
func (ms *MetricStore) SetEventMetric(eventType string, eventStr string) error {
	tags := map[string]string{"type": eventType}
	fields := map[string]interface{}{"event": eventStr}
	return ms.SetMetric(metricEvent, tags, fields)
}

// GetLastEventMetric
func (ms *MetricStore) GetLastEventMetric(eventType string) (event string, err error) {
	// Make sure we have set a store
	if ms.name == "" {
		err := errors.New("Store name not specified")
		return event, err
	}

	// Get latest Net metric
	tags := map[string]string{"type": eventType}
	fields := []string{"event"}
	valuesArray, err := ms.GetMetric(metricEvent, tags, fields, "", 1)
	if err != nil {
		log.Error("Failed to retrieve metrics with error: ", err.Error())
		return event, err
type EventMetric struct {
	time  interface{}
	event string
}

	// Take first & only values
	values := valuesArray[0]
	if val, ok := values["event"].(string); ok {
		event = val
	}
	return event, nil
// SetEventMetric
func (ms *MetricStore) SetEventMetric(eventType string, metric EventMetric) error {
	tags := map[string]string{EvMetType: eventType}
	fields := map[string]interface{}{EvMetEvent: metric.event}
	return ms.SetInfluxMetric(EvMetName, tags, fields)
}

// GetEventMetrics
func (ms *MetricStore) GetEventMetrics(eventType string, duration string, count int) (metrics []map[string]interface{}, err error) {
// GetEventMetric
func (ms *MetricStore) GetEventMetric(eventType string, duration string, count int) (metrics []EventMetric, err error) {
	// Make sure we have set a store
	if ms.name == "" {
		err = errors.New("Store name not specified")
@@ -65,12 +47,22 @@ func (ms *MetricStore) GetEventMetrics(eventType string, duration string, count
	}

	// Get Traffic metrics
	tags := map[string]string{"type": eventType}
	fields := []string{"event"}
	metrics, err = ms.GetMetric(metricEvent, tags, fields, duration, count)
	tags := map[string]string{EvMetType: eventType}
	fields := []string{EvMetEvent}
	var valuesArray []map[string]interface{}
	valuesArray, err = ms.GetInfluxMetric(EvMetName, tags, fields, duration, count)
	if err != nil {
		log.Error("Failed to retrieve metrics with error: ", err.Error())
		return
	}

	// Format event metrics
	metrics = make([]EventMetric, len(valuesArray))
	for index, values := range valuesArray {
		metrics[index].time = values[NetMetTime]
		if val, ok := values[EvMetEvent].(string); ok {
			metrics[index].event = val
		}
	}
	return
}
+42 −42
Original line number Diff line number Diff line
@@ -23,15 +23,16 @@ import (
	log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
)

const eventsStoreName string = "eventsStore"
const eventsStoreAddr string = "http://localhost:30986"
const eventStoreName string = "eventStore"
const eventStoreInfluxAddr string = "http://localhost:30986"
const eventStoreRedisAddr string = "localhost:30380"

func TestEventsMetricsGetSet(t *testing.T) {
	fmt.Println("--- ", t.Name())
	log.MeepTextLogInit(t.Name())

	fmt.Println("Create valid Metric Store")
	ms, err := NewMetricStore(eventsStoreName, eventsStoreAddr)
	ms, err := NewMetricStore(eventStoreName, eventStoreInfluxAddr, eventStoreRedisAddr)
	if err != nil {
		t.Errorf("Unable to create Metric Store")
	}
@@ -40,78 +41,77 @@ func TestEventsMetricsGetSet(t *testing.T) {
	ms.Flush()

	fmt.Println("Set event metric")
	err = ms.SetEventMetric("MOBILITY", "event1")
	err = ms.SetEventMetric("MOBILITY", EventMetric{nil, "event1"})
	if err != nil {
		t.Errorf("Unable to set event metric")
	}
	err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "event2")
	err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", EventMetric{nil, "event2"})
	if err != nil {
		t.Errorf("Unable to set event metric")
	}
	err = ms.SetEventMetric("POAS-IN-RANGE", "event3")
	err = ms.SetEventMetric("POAS-IN-RANGE", EventMetric{nil, "event3"})
	if err != nil {
		t.Errorf("Unable to set event metric")
	}
	err = ms.SetEventMetric("MOBILITY", "event4")
	err = ms.SetEventMetric("MOBILITY", EventMetric{nil, "event4"})
	if err != nil {
		t.Errorf("Unable to set event metric")
	}
	err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "event5")
	err = ms.SetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", EventMetric{nil, "event5"})
	if err != nil {
		t.Errorf("Unable to set event metric")
	}
	err = ms.SetEventMetric("POAS-IN-RANGE", "event6")
	err = ms.SetEventMetric("POAS-IN-RANGE", EventMetric{nil, "event6"})
	if err != nil {
		t.Errorf("Unable to set event metric")
	}

	fmt.Println("Get event metrics")
	event, err := ms.GetLastEventMetric("MOBILITY")
	if err != nil {
		t.Errorf("Event metric should exist")
	} else if event != "event4" {
		t.Errorf("Invalid metric values")
	_, err = ms.GetEventMetric("MOBILITY", "1ms", 0)
	if err == nil {
		t.Errorf("No metrics should be found in the last 1 ms")
	}
	event, err = ms.GetLastEventMetric("NETWORK-CHARACTERISTIC-UPDATE")
	if err != nil {
		t.Errorf("Event metric should exist")
	} else if event != "event5" {
		t.Errorf("Invalid metric values")
	eml, err := ms.GetEventMetric("MOBILITY", "", 1)
	if err != nil || len(eml) != 1 {
		t.Errorf("Failed to get metric")
	}
	event, err = ms.GetLastEventMetric("POAS-IN-RANGE")
	if err != nil {
		t.Errorf("Event metric should exist")
	} else if event != "event6" {
		t.Errorf("Invalid metric values")
	if !validateEventsMetric(eml[0], "event4") {
		t.Errorf("Invalid event metric")
	}

	fmt.Println("Get event metrics")

	_, err = ms.GetEventMetrics("MOBILITY", "1ms", 0)
	if err == nil {
		t.Errorf("No metrics should be found in the last 1 ms")
	eml, err = ms.GetEventMetric("MOBILITY", "", 0)
	if err != nil || len(eml) != 2 {
		t.Errorf("Failed to get metric")
	}
	result, err := ms.GetEventMetrics("MOBILITY", "", 1)
	if err != nil || len(result) != 1 {
	if !validateEventsMetric(eml[0], "event4") {
		t.Errorf("Invalid event metric")
	}
	if !validateEventsMetric(eml[1], "event1") {
		t.Errorf("Invalid event metric")
	}
	eml, err = ms.GetEventMetric("NETWORK-CHARACTERISTIC-UPDATE", "", 0)
	if err != nil || len(eml) != 2 {
		t.Errorf("Failed to get metric")
	}
	if !validateEventsMetric(result[0], "event4") {
		t.Errorf("Invalid result")
	if !validateEventsMetric(eml[0], "event5") {
		t.Errorf("Invalid event metric")
	}
	if !validateEventsMetric(eml[1], "event2") {
		t.Errorf("Invalid event metric")
	}
	result, err = ms.GetEventMetrics("MOBILITY", "", 0)
	if err != nil || len(result) != 2 {
	eml, err = ms.GetEventMetric("POAS-IN-RANGE", "", 0)
	if err != nil || len(eml) != 2 {
		t.Errorf("Failed to get metric")
	}
	if !validateEventsMetric(result[0], "event4") {
		t.Errorf("Invalid result")
	if !validateEventsMetric(eml[0], "event6") {
		t.Errorf("Invalid event metric")
	}
	if !validateEventsMetric(result[1], "event1") {
		t.Errorf("Invalid result")
	if !validateEventsMetric(eml[1], "event3") {
		t.Errorf("Invalid event metric")
	}

	// t.Errorf("DONE")
}

func validateEventsMetric(result map[string]interface{}, v1 string) bool {
	return !(result["event"] != v1)
func validateEventsMetric(em EventMetric, event string) bool {
	return em.event == event
}
+5 −1
Original line number Diff line number Diff line
@@ -4,7 +4,11 @@ go 1.12

require (
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
	github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e
)

replace github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
replace (
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
+20 −1
Original line number Diff line number Diff line
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ=
github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Loading