VOL-4788 : Lib in in voltha-libs-go for support of prometheus counters in voltha

Change-Id: I1a4a81f775595b89dbc2a5e4411e84034e30e1af
diff --git a/pkg/stats/stats.go b/pkg/stats/stats.go
new file mode 100644
index 0000000..c507e55
--- /dev/null
+++ b/pkg/stats/stats.go
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * 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 stats
+
+type DeviceCounter string
+type NonDeviceCounter string
+
+type NonDeviceDuration string
+type DeviceDuration string
+
+// The unit for all the time based metrics are in milli seconds
+
+const (
+	// OLT Device stats
+	//-----------------
+	// Number of ONU Discovery messages received by the OLT adapter
+	NumDiscoveriesReceived DeviceCounter = "discoveries_received_total"
+	// Number of ONUs successfully activated by the OLT adapter
+	NumOnusActivated DeviceCounter = "activated_onus_total"
+
+	// ONT Device stats
+	//-----------------
+	// Number of times transmission retries for OMCI messages were done for a specific ONU
+	OmciCCTxRetries DeviceCounter = "omci_cc_tx_retries_total"
+	// Number of times transmission timeouts for OMCI messages happened for a specific ONU
+	OmciCCTxTimeouts DeviceCounter = "omci_cc_tx_timeous_total"
+
+	// Other not device specific stats
+	//--------------------------------
+	// Number of times writing to the message bus failed, could be collected by adapters as well as vCore
+	NumErrorsWritingToBus NonDeviceCounter = "bus_write_errors_total"
+	// Number of times rpc calls to the vCore resulted in errors at the adapters
+	NumCoreRpcErrors NonDeviceCounter = "core_rpc_errors_total"
+	// Number of times rpc calls to the adapters resulted in errors at the vCore
+	NumAdapterRpcErrors NonDeviceCounter = "adapter_rpc_errors_total"
+
+	// OLT Device durations
+	//---------------------
+	// Time taken at the OLT adapter to process successfully an ONU Discovery message received
+	OnuDiscoveryProcTime DeviceDuration = "onu_discovery_proc_time"
+	// Time taken at the OLT adapter to successfully activate an ONU
+	OnuDiscToActivateTime DeviceDuration = "onu_discovery_to_activate_time"
+	// Time taken at the OLT adapter from the time the ONU Discovery was received to the first flow being pushed for the ONU
+	OnuDiscToFlowsPushedTime DeviceDuration = "onu_disc_to_flows_pushed_time"
+
+	// ONU Device durations
+	//---------------------
+
+	// Other not device specific durations
+	//------------------------------------
+	// Time taken to write an entry to the database, could be collected by all the three users of the database
+	DBWriteTime NonDeviceDuration = "db_write_time"
+	// Time taken to read an entry from the database, could be collected by all the three users of the database
+	DBReadTime NonDeviceDuration = "db_read_time"
+)
+
+func (s DeviceCounter) String() string {
+	switch s {
+	case NumDiscoveriesReceived:
+		return "discoveries_received_total"
+	case NumOnusActivated:
+		return "activated_onus_total"
+	case OmciCCTxRetries:
+		return "omci_cc_tx_retries_total"
+	case OmciCCTxTimeouts:
+		return "omci_cc_tx_timeous_total"
+	}
+	return "unknown"
+}
+
+func (s NonDeviceCounter) String() string {
+	switch s {
+	case NumErrorsWritingToBus:
+		return "bus_write_errors_total"
+	case NumCoreRpcErrors:
+		return "core_rpc_errors_total"
+	case NumAdapterRpcErrors:
+		return "adapter_rpc_errors_total"
+	}
+	return "unknown"
+}
+
+func (s NonDeviceDuration) String() string {
+	switch s {
+	case DBWriteTime:
+		return "db_write_time"
+	case DBReadTime:
+		return "db_read_time"
+	}
+	return "unknown"
+}
+
+func (s DeviceDuration) String() string {
+	switch s {
+	case OnuDiscoveryProcTime:
+		return "onu_discovery_proc_time"
+	case OnuDiscToActivateTime:
+		return "onu_discovery_to_activate_time"
+	case OnuDiscToFlowsPushedTime:
+		return "onu_disc_to_flows_pushed_time"
+	}
+	return "unknown"
+}