VOL-2408 - Refactor / Use voltha-lib-go Logging

Change-Id: I6e7d9eaba49c104cd50bb5692a2ff9733014fac4
diff --git a/grpc/changeEvent.go b/grpc/changeEvent.go
index c6f6376..68f87cd 100644
--- a/grpc/changeEvent.go
+++ b/grpc/changeEvent.go
@@ -19,35 +19,44 @@
 import (
 	"context"
 	"encoding/json"
+
 	ofp "github.com/donNewtonAlpha/goloxi/of13"
 	"github.com/golang/protobuf/ptypes/empty"
 	"github.com/opencord/ofagent-go/openflow"
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
-	"log"
+
 	"net"
 	"time"
 )
 
 func receiveChangeEvent(client pb.VolthaServiceClient) {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugln("GrpcClient receiveChangeEvent called")
+	}
 	opt := grpc.EmptyCallOption{}
 	stream, err := client.ReceiveChangeEvents(context.Background(), &empty.Empty{}, opt)
 	if err != nil {
-		log.Fatalln("Unable to establish Receive Change Event Stream")
+		logger.Fatalln("Unable to establish Receive Change Event Stream")
 	}
 	for {
 		changeEvent, err := stream.Recv()
 		if err != nil {
-			log.Printf("Error receiving change event %v", err)
+			logger.Errorw("Error receiving change event", l.Fields{"Error": err})
 		}
-		js, _ := json.Marshal(changeEvent)
-
-		log.Printf("Received Change Event   \n\n\n %s \n\n\n", js)
-		deviceId := changeEvent.GetId()
+		deviceID := changeEvent.GetId()
 		portStatus := changeEvent.GetPortStatus()
+		if settings.GetDebug(grpcDeviceID) {
+			//js, _ := json.Marshal(changeEvent)
+
+			logger.Debugw("Received Change Event", l.Fields{"DeviceID": deviceID, "PortStatus": portStatus})
+		}
+
 		if portStatus == nil {
-			jsonMessage, _ := json.Marshal(changeEvent.GetEvent())
-			log.Printf("Received change event that was not port status %v", jsonMessage)
+			js, _ := json.Marshal(changeEvent.GetEvent())
+			logger.Warnw("Received change event that was not port status", l.Fields{"ChangeEvent": js})
 			break
 		}
 		ofPortStatus := ofp.NewPortStatus()
@@ -77,9 +86,9 @@
 		ofDesc.SetState(ofp.PortState(desc.GetState()))
 		ofDesc.SetSupported(ofp.PortFeatures(desc.GetSupported()))
 		ofPortStatus.SetDesc(*ofDesc)
-		var client = clientMap[deviceId]
+		var client = clientMap[deviceID]
 		if client == nil {
-			client = addClient(deviceId)
+			client = addClient(deviceID)
 			time.Sleep(2 * time.Second)
 		}
 		client.SendMessage(ofPortStatus)
diff --git a/grpc/client.go b/grpc/client.go
index 4116461..40c805b 100644
--- a/grpc/client.go
+++ b/grpc/client.go
@@ -26,19 +26,29 @@
 	"github.com/opencord/ofagent-go/openflow"
 
 	"fmt"
-	"log"
+
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
 )
 
+var grpcDeviceID = "GRPC_CLIENT"
 var client pb.VolthaServiceClient
 var clientMap map[string]*openflow.Client
 var ofAddress string
 var ofPort uint16
 var mapLock sync.Mutex
+var logger, _ = l.AddPackage(l.JSON, l.DebugLevel, nil)
 
+//StartClient - make the inital connection to voltha and kicks off io streams
 func StartClient(endpointAddress string, endpointPort uint16, openFlowAddress string, openFlowPort uint16) {
+
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugw("Starting GRPC - VOLTHA client", l.Fields{"EndPointAddr": endpointAddress,
+			"EndPointPort": endpointPort, "OpenFlowAddress": openFlowAddress, "OpenFlowPort": openFlowPort})
+	}
 	ofAddress = openFlowAddress
 	ofPort = openFlowPort
 	clientMap = make(map[string]*openflow.Client)
@@ -48,7 +58,7 @@
 	conn, err := grpc.Dial(endpoint, opts...)
 	defer conn.Close()
 	if err != nil {
-		log.Fatalf("fail to dial: %v", err)
+		l.Fatalw("StartClient failed opening GRPC connecton", l.Fields{"EndPoint": endpoint, "Error": err})
 	}
 	client = pb.NewVolthaServiceClient(conn)
 
@@ -58,15 +68,16 @@
 
 	openflow.SetGrpcClient(&client)
 	for {
-		log.Println("entering device refresh pull")
+		if settings.GetDebug(grpcDeviceID) {
+			logger.Debugln("GrpcClient entering device refresh pull")
+		}
 		deviceList, err := client.ListLogicalDevices(context.Background(), &empty.Empty{})
 		if err != nil {
-			log.Printf("ERROR GET DEVICE LIST %v", err)
+			logger.Errorw("GrpcClient getDeviceList failed", l.Fields{"Error": err})
 		}
 		devices := deviceList.GetItems()
 		refreshDeviceList(devices)
 		time.Sleep(time.Minute)
-		log.Println("waking up")
 	}
 }
 func refreshDeviceList(devices []*pb.LogicalDevice) {
@@ -74,20 +85,22 @@
 
 	var toAdd []string
 	var toDel []string
-	var deviceIdMap = make(map[string]string)
+	var deviceIDMap = make(map[string]string)
 	for i := 0; i < len(devices); i++ {
-		log.Printf("Device ID %s", devices[i].GetId())
-		deviceId := devices[i].GetId()
-		deviceIdMap[deviceId] = deviceId
-		if clientMap[deviceId] == nil {
-			toAdd = append(toAdd, deviceId)
+		deviceID := devices[i].GetId()
+		deviceIDMap[deviceID] = deviceID
+		if clientMap[deviceID] == nil {
+			toAdd = append(toAdd, deviceID)
 		}
 	}
-	for key, _ := range clientMap {
-		if deviceIdMap[key] == "" {
+	for key := range clientMap {
+		if deviceIDMap[key] == "" {
 			toDel = append(toDel, key)
 		}
 	}
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugw("GrpcClient refreshDeviceList", l.Fields{"ToAdd": toAdd, "ToDel": toDel})
+	}
 	for i := 0; i < len(toAdd); i++ {
 		var client = addClient(toAdd[i])
 		go client.Start()
@@ -99,17 +112,28 @@
 		mapLock.Unlock()
 	}
 }
-func addClient(deviceId string) *openflow.Client {
+func addClient(deviceID string) *openflow.Client {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugw("GrpcClient addClient called ", l.Fields{"DeviceID": deviceID})
+	}
 	mapLock.Lock()
 	var client *openflow.Client
-	client = clientMap[deviceId]
+	client = clientMap[deviceID]
 	if client == nil {
-		client = openflow.NewClient(ofAddress, ofPort, deviceId, true)
-		clientMap[deviceId] = client
+		client = openflow.NewClient(ofAddress, ofPort, deviceID, true)
+		go client.Start()
+		clientMap[deviceID] = client
 	}
 	mapLock.Unlock()
+	logger.Debugw("Finished with addClient", l.Fields{"deviceID": deviceID})
 	return client
 }
-func GetClient(deviceId string) *openflow.Client {
-	return clientMap[deviceId]
+
+//GetClient Returns a pointer to the OpenFlow client
+func GetClient(deviceID string) *openflow.Client {
+	client := clientMap[deviceID]
+	if client == nil {
+		client = addClient(deviceID)
+	}
+	return client
 }
diff --git a/grpc/packetIn.go b/grpc/packetIn.go
index 44e537b..bc8d3a8 100644
--- a/grpc/packetIn.go
+++ b/grpc/packetIn.go
@@ -19,31 +19,38 @@
 import (
 	"context"
 	"encoding/json"
+
 	"github.com/donNewtonAlpha/goloxi"
 	ofp "github.com/donNewtonAlpha/goloxi/of13"
 	"github.com/golang/protobuf/ptypes/empty"
 	"github.com/opencord/ofagent-go/openflow"
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 	"github.com/opencord/voltha-protos/v2/go/openflow_13"
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
-	"log"
 )
 
 func receivePacketIn(client pb.VolthaServiceClient) {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugln("Starting ReceivePacketIn Stream")
+	}
 	opt := grpc.EmptyCallOption{}
 	stream, err := client.ReceivePacketsIn(context.Background(), &empty.Empty{}, opt)
 	if err != nil {
-		log.Fatalln("Unable to establish stream")
+		logger.Fatalw("Unable to establish PacketIn stream", l.Fields{"Error": err})
 	}
 	for {
 		packet, err := stream.Recv()
 		packetIn := packet.GetPacketIn()
 
 		if err != nil {
-			log.Fatalf("error on stream.Rec %v", err)
+			logger.Fatalw("ReceivePacketIn unable to receive packet", l.Fields{"Error": err})
 		}
-		js, _ := json.Marshal(packetIn)
-		log.Printf("PACKET IN %s", js)
+		if settings.GetDebug(grpcDeviceID) {
+			js, _ := json.Marshal(packetIn)
+			logger.Debugw("ReceivePacketIn Recieved", l.Fields{"PacketIn": js})
+		}
 		deviceID := packet.GetId()
 		ofPacketIn := ofp.NewPacketIn()
 		ofPacketIn.SetVersion(uint8(4))
@@ -113,7 +120,7 @@
 
 				fields = append(fields, ofpVlanVid)
 			default:
-				log.Printf("handleFlowStatsRequest   Unhandled OxmField %v", ofbField.Type)
+				logger.Warnw("receivePacketIn   Unhandled OxmField ", l.Fields{"Field": ofbField.Type})
 			}
 		}
 		match.SetLength(size)
diff --git a/grpc/packetOut.go b/grpc/packetOut.go
index f1891e1..c2c92d1 100644
--- a/grpc/packetOut.go
+++ b/grpc/packetOut.go
@@ -17,27 +17,33 @@
 package grpc
 
 import (
+	"context"
 	"encoding/json"
+
 	"github.com/opencord/ofagent-go/openflow"
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
-	"log"
 )
-import "context"
 
 func streamPacketOut(client pb.VolthaServiceClient) {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugln("GrpcClient streamPacketOut called")
+	}
 	opt := grpc.EmptyCallOption{}
 	outClient, err := client.StreamPacketsOut(context.Background(), opt)
 	if err != nil {
-
-		log.Printf("Error creating packetout stream %v", err)
+		logger.Fatalw("streamPacketOut Error creating packetout stream ", l.Fields{"Error": err})
 	}
 	packetOutChannel := make(chan pb.PacketOut)
 	openflow.SetPacketOutChannel(packetOutChannel)
 	for {
 		ofPacketOut := <-packetOutChannel
-		js, _ := json.Marshal(ofPacketOut)
-		log.Printf("RECEIVED PACKET OUT FROM CHANNEL %s", js)
+		if settings.GetDebug(grpcDeviceID) {
+			js, _ := json.Marshal(ofPacketOut)
+			logger.Debugw("streamPacketOut Receive PacketOut from Channel", l.Fields{"PacketOut": js})
+		}
 		outClient.Send(&ofPacketOut)
 	}