seba-599:redfish-stats

Change-Id: I8b6614d9e3c532140aa9bb077180664eda838e53
diff --git a/VERSION b/VERSION
index 4dfdebd..9897421 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.5-dev
+1.2.6-dev
diff --git a/main.go b/main.go
index 46f6df0..9c86008 100644
--- a/main.go
+++ b/main.go
@@ -118,6 +118,11 @@
 	prometheus.MustRegister(onosPppoeDownRxPackets)
 	prometheus.MustRegister(onosPppoeDownTxBytes)
 	prometheus.MustRegister(onosPppoeDownTxPackets)
+
+	prometheus.MustRegister(deviceLaserBiasCurrent)
+	prometheus.MustRegister(deviceTemperature)
+	prometheus.MustRegister(deviceTxPower)
+	prometheus.MustRegister(deviceVoltage)
 }
 
 func loadConfigFile() Config {
diff --git a/topic-exporter.go b/topic-exporter.go
index 5d33458..f8d9d70 100644
--- a/topic-exporter.go
+++ b/topic-exporter.go
@@ -20,6 +20,7 @@
 	"github.com/prometheus/client_golang/prometheus"
 	log "github.com/sirupsen/logrus"
 	"strconv"
+	"strings"
 )
 
 var (
@@ -283,6 +284,26 @@
 		},
 		[]string{"mac_address", "ip", "session_id", "s_tag", "c_tag", "onu_serial"},
 	)
+	deviceLaserBiasCurrent = prometheus.NewGauge(
+		prometheus.GaugeOpts{
+	                Name: "device_laser_bias_current",
+			Help: "Device Laser Bias Current",
+		})
+	deviceTemperature = prometheus.NewGauge(
+		prometheus.GaugeOpts{
+			Name: "device_temperature",
+			Help: "Device Temperature",
+		})
+	deviceTxPower = prometheus.NewGauge(
+		prometheus.GaugeOpts{
+			Name: "device_tx_power",
+			Help: "Device Tx Power",
+		})
+	deviceVoltage = prometheus.NewGauge(
+		prometheus.GaugeOpts{
+			Name: "device_voltage",
+			Help: "Device Voltage",
+	})
 )
 
 func exportVolthaKPI(kpi VolthaKPI) {
@@ -569,8 +590,10 @@
 }
 
 func exportImporterKPI(kpi ImporterKPI) {
-	// TODO: add metrics for importer data
-	logger.Info("To be implemented")
+	deviceLaserBiasCurrent.Set(kpi.LaserBiasCurrent)
+	deviceTemperature.Set(kpi.Temperature)
+	deviceTxPower.Set(kpi.TxPower)
+	deviceVoltage.Set(kpi.Voltage)
 }
 
 func exportOnosAaaKPI(kpi OnosAaaKPI) {
@@ -707,9 +730,27 @@
 		exportOnosKPI(kpi)
 	case "importer.kpis":
 		kpi := ImporterKPI{}
-		err := json.Unmarshal(data, &kpi)
+		strData := string(data)
+		idx := strings.Index(strData, "{")
+		strData = strData[idx:]
+
+		var m map[string]interface{}
+		err := json.Unmarshal([]byte(strData), &m)
 		if err != nil {
-			logger.Error("Invalid msg on importer.kpis: %s, Unprocessed Msg: %s", err.Error(), string(data))
+			logger.Error("Invalid msg on importer.kpis: %s", err.Error())
+			logger.Debug("Unprocessed Msg: %s", strData)
+			break
+		}
+		if val, ok := m["TransceiverStatistics"]; ok {
+			stats := val.(map[string]interface{})
+			//kpi.Timestamp = time.Now().UnixNano()
+			kpi.LaserBiasCurrent = stats["BiasCurrent"].(map[string]interface{})["Reading"].(float64)
+			kpi.Temperature = stats["Temperature"].(map[string]interface{})["Reading"].(float64)
+			kpi.TxPower = stats["TxPower"].(map[string]interface{})["Reading"].(float64)
+			kpi.Voltage = stats["Voltage"].(map[string]interface{})["Reading"].(float64)
+		} else {
+			logger.Error("Optical stats (TransceiverStatistics) information missing [topic=importer.kpis")
+			logger.Debug("Unprocessed Msg: %s", strData)
 			break
 		}
 		exportImporterKPI(kpi)
diff --git a/types.go b/types.go
index 6185064..ece3953 100644
--- a/types.go
+++ b/types.go
@@ -112,8 +112,11 @@
 }
 
 type ImporterKPI struct {
-	DeviceID string `json: "deviceId"`
-	// TODO: add metrics data
+        Timestamp           int64
+        LaserBiasCurrent    float64
+        Temperature         float64
+        TxPower             float64
+        Voltage             float64
 }
 
 type OnosAaaKPI struct {