VOL-2927 convert to static protos

Change-Id: If08aec0b1fb84fc54f7f62d5e4ede8ad4a9db80f
diff --git a/internal/pkg/commands/events.go b/internal/pkg/commands/events.go
index 43bfe75..4ad8299 100644
--- a/internal/pkg/commands/events.go
+++ b/internal/pkg/commands/events.go
@@ -20,15 +20,14 @@
 	"errors"
 	"fmt"
 	"github.com/Shopify/sarama"
-	"github.com/fullstorydev/grpcurl"
+	"github.com/golang/protobuf/jsonpb"
+	"github.com/golang/protobuf/proto"
 	"github.com/golang/protobuf/ptypes"
 	"github.com/golang/protobuf/ptypes/timestamp"
 	flags "github.com/jessevdk/go-flags"
-	"github.com/jhump/protoreflect/desc"
-	"github.com/jhump/protoreflect/dynamic"
 	"github.com/opencord/voltctl/pkg/filter"
 	"github.com/opencord/voltctl/pkg/format"
-	"github.com/opencord/voltctl/pkg/model"
+	"github.com/opencord/voltha-protos/v3/go/voltha"
 	"log"
 	"os"
 	"os/signal"
@@ -146,52 +145,21 @@
 }
 
 // Extract the header, as well as a few other items that might be of interest
-func DecodeHeader(md *desc.MessageDescriptor, b []byte, ts time.Time) (*EventHeader, error) {
-	m := dynamic.NewMessage(md)
-	err := m.Unmarshal(b)
-	if err != nil {
+func DecodeHeader(b []byte, ts time.Time) (*EventHeader, error) {
+	m := &voltha.Event{}
+	if err := proto.Unmarshal(b, m); err != nil {
 		return nil, err
 	}
 
-	headerIntf, err := m.TryGetFieldByName("header")
+	header := m.Header
+	cat := voltha.EventCategory_Types_name[int32(header.Category)]
+	subCat := voltha.EventSubCategory_Types_name[int32(header.SubCategory)]
+	evType := voltha.EventType_Types_name[int32(header.Type)]
+	raised, err := DecodeTimestamp(header.RaisedTs)
 	if err != nil {
 		return nil, err
 	}
-
-	header := headerIntf.(*dynamic.Message)
-
-	catIntf, err := header.TryGetFieldByName("category")
-	if err != nil {
-		return nil, err
-	}
-	cat := catIntf.(int32)
-
-	subCatIntf, err := header.TryGetFieldByName("sub_category")
-	if err != nil {
-		return nil, err
-	}
-	subCat := subCatIntf.(int32)
-
-	typeIntf, err := header.TryGetFieldByName("type")
-	if err != nil {
-		return nil, err
-	}
-	evType := typeIntf.(int32)
-
-	raisedIntf, err := header.TryGetFieldByName("raised_ts")
-	if err != nil {
-		return nil, err
-	}
-	raised, err := DecodeTimestamp(raisedIntf)
-	if err != nil {
-		return nil, err
-	}
-
-	reportedIntf, err := header.TryGetFieldByName("reported_ts")
-	if err != nil {
-		return nil, err
-	}
-	reported, err := DecodeTimestamp(reportedIntf)
+	reported, err := DecodeTimestamp(header.ReportedTs)
 	if err != nil {
 		return nil, err
 	}
@@ -202,32 +170,18 @@
 	device_ids := make(map[string]interface{})
 	titles := make(map[string]interface{})
 
-	kpiIntf, err := m.TryGetFieldByName("kpi_event2")
-	if err == nil {
-		kpi, ok := kpiIntf.(*dynamic.Message)
-		if ok && kpi != nil {
-			sliceListIntf, err := kpi.TryGetFieldByName("slice_data")
-			if err == nil {
-				sliceIntf, ok := sliceListIntf.([]interface{})
-				if ok && len(sliceIntf) > 0 {
-					slice, ok := sliceIntf[0].(*dynamic.Message)
-					if ok && slice != nil {
-						metadataIntf, err := slice.TryGetFieldByName("metadata")
-						if err == nil {
-							metadata, ok := metadataIntf.(*dynamic.Message)
-							if ok && metadata != nil {
-								deviceIdIntf, err := metadataIntf.(*dynamic.Message).TryGetFieldByName("device_id")
-								if err == nil {
-									device_ids[deviceIdIntf.(string)] = slice
-								}
-								titleIntf, err := metadataIntf.(*dynamic.Message).TryGetFieldByName("title")
-								if err == nil {
-									titles[titleIntf.(string)] = slice
-								}
-							}
-						}
-					}
-				}
+	kpi := m.GetKpiEvent2()
+	if kpi != nil {
+		sliceList := kpi.SliceData
+		if len(sliceList) > 0 {
+			slice := sliceList[0]
+			if slice != nil {
+				metadata := slice.Metadata
+				deviceId := metadata.DeviceId
+				device_ids[deviceId] = slice
+
+				title := metadata.Title
+				titles[title] = slice
 			}
 		}
 	}
@@ -235,25 +189,10 @@
 	// Opportunistically try to pull a resource_id and title from a DeviceEvent
 	// There can only be one resource_id and title from a DeviceEvent, so it's easier
 	// than dealing with KPI_EVENT2.
-	deviceEventIntf, err := m.TryGetFieldByName("device_event")
-	if err == nil {
-		deviceEvent, ok := deviceEventIntf.(*dynamic.Message)
-		if ok && deviceEvent != nil {
-			deviceEventNameIntf, err := deviceEvent.TryGetFieldByName("device_event_name")
-			if err == nil {
-				deviceEventName, ok := deviceEventNameIntf.(string)
-				if ok {
-					titles[deviceEventName] = deviceEvent
-				}
-			}
-			resourceIdIntf, err := deviceEvent.TryGetFieldByName("resource_id")
-			if err == nil {
-				resourceId, ok := resourceIdIntf.(string)
-				if ok {
-					device_ids[resourceId] = deviceEvent
-				}
-			}
-		}
+	deviceEvent := m.GetDeviceEvent()
+	if deviceEvent != nil {
+		titles[deviceEvent.DeviceEventName] = deviceEvent
+		device_ids[deviceEvent.ResourceId] = deviceEvent
 	}
 
 	device_id_keys := make([]string, len(device_ids))
@@ -270,24 +209,9 @@
 		i++
 	}
 
-	header_category, err := model.GetEnumString(header, "category", cat)
-	if err != nil {
-		return nil, err
-	}
-
-	header_subcategory, err := model.GetEnumString(header, "sub_category", subCat)
-	if err != nil {
-		return nil, err
-	}
-
-	header_type, err := model.GetEnumString(header, "type", evType)
-	if err != nil {
-		return nil, err
-	}
-
-	evHeader := EventHeader{Category: header_category,
-		SubCategory: header_subcategory,
-		Type:        header_type,
+	evHeader := EventHeader{Category: cat,
+		SubCategory: subCat,
+		Type:        evType,
 		Raised_ts:   raised,
 		Reported_ts: reported,
 		Device_ids:  device_id_keys,
@@ -299,17 +223,24 @@
 
 // Print the full message, either in JSON or in GRPCURL-human-readable format,
 // depending on which grpcurl formatter is passed in.
-func PrintMessage(f grpcurl.Formatter, md *desc.MessageDescriptor, b []byte) error {
-	m := dynamic.NewMessage(md)
-	err := m.Unmarshal(b)
-	if err != nil {
+func PrintMessage(outputAs string, b []byte) error {
+	ms := &voltha.Event{}
+	if err := proto.Unmarshal(b, ms); err != nil {
 		return err
 	}
-	s, err := f(m)
-	if err != nil {
-		return err
+
+	if outputAs == "json" {
+		marshaler := jsonpb.Marshaler{EmitDefaults: true, AnyResolver: &VolthaAnyResolver{}}
+		asJson, err := marshaler.MarshalToString(ms)
+		if err != nil {
+			return fmt.Errorf("Failed to marshal the json: %s", err)
+		}
+		fmt.Println(asJson)
+	} else {
+		// print in golang native format
+		fmt.Printf("%v\n", ms)
 	}
-	fmt.Println(s)
+
 	return nil
 }
 
@@ -334,32 +265,6 @@
 	return nil
 }
 
-func GetEventMessageDesc() (*desc.MessageDescriptor, error) {
-	// This is a very long-winded way to get a message descriptor
-
-	descriptor, err := GetDescriptorSource()
-	if err != nil {
-		return nil, err
-	}
-
-	// get the symbol for voltha.events
-	eventSymbol, err := descriptor.FindSymbol("voltha.Event")
-	if err != nil {
-		return nil, err
-	}
-
-	/*
-	 * EventSymbol is a Descriptor, but not a MessageDescrptior,
-	 * so we can't look at it's fields yet. Go back to the file,
-	 * call FindMessage to get the Message, then ...
-	 */
-
-	eventFile := eventSymbol.GetFile()
-	eventMessage := eventFile.FindMessage("voltha.Event")
-
-	return eventMessage, nil
-}
-
 // Start output, print any column headers or other start characters
 func (options *EventListenOpts) StartOutput(outputFormat string) error {
 	if options.OutputAs == "json" {
@@ -388,11 +293,6 @@
 		return errors.New("Kafka address is not specified")
 	}
 
-	eventMessage, err := GetEventMessageDesc()
-	if err != nil {
-		return err
-	}
-
 	config := sarama.NewConfig()
 	config.ClientID = "go-kafka-consumer"
 	config.Consumer.Return.Errors = true
@@ -426,21 +326,6 @@
 	// Count how many messages were printed
 	count := 0
 
-	var grpcurlFormatter grpcurl.Formatter
-
-	if options.ShowBody {
-		if options.OutputAs == "json" {
-			// need a descriptor source, any method will do
-			descriptor, _, err := GetMethod("device-list")
-			if err != nil {
-				return err
-			}
-			grpcurlFormatter = grpcurl.NewJSONFormatter(false, grpcurl.AnyResolverFromDescriptorSource(descriptor))
-		} else {
-			grpcurlFormatter = grpcurl.NewTextFormatter(false)
-		}
-	}
-
 	var headerFilter *filter.Filter
 	if options.Filter != "" {
 		headerFilterVal, err := filter.Parse(options.Filter)
@@ -479,7 +364,7 @@
 			select {
 			case msg := <-consumer:
 				consumeCount++
-				hdr, err := DecodeHeader(eventMessage, msg.Value, msg.Timestamp)
+				hdr, err := DecodeHeader(msg.Value, msg.Timestamp)
 				if err != nil {
 					log.Printf("Error decoding header %v\n", err)
 					continue
@@ -498,7 +383,7 @@
 
 					// Print it
 					if options.ShowBody {
-						if err := PrintMessage(grpcurlFormatter, eventMessage, msg.Value); err != nil {
+						if err := PrintMessage(options.OutputAs, msg.Value); err != nil {
 							log.Printf("%v\n", err)
 						}
 					} else {