diff --git a/go/dmi/commons.pb.go b/go/dmi/commons.pb.go
new file mode 100644
index 0000000..eec2c1d
--- /dev/null
+++ b/go/dmi/commons.pb.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: dmi/commons.proto
+
+package dmi
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type Status int32
+
+const (
+	Status_UNDEFINED_STATUS Status = 0
+	Status_OK               Status = 1
+	Status_ERROR            Status = 2
+)
+
+var Status_name = map[int32]string{
+	0: "UNDEFINED_STATUS",
+	1: "OK",
+	2: "ERROR",
+}
+
+var Status_value = map[string]int32{
+	"UNDEFINED_STATUS": 0,
+	"OK":               1,
+	"ERROR":            2,
+}
+
+func (x Status) String() string {
+	return proto.EnumName(Status_name, int32(x))
+}
+
+func (Status) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_74aedf0dda1205d8, []int{0}
+}
+
+// Reason for the failure of request
+type Reason int32
+
+const (
+	Reason_UNDEFINED_REASON Reason = 0
+	Reason_UNKNOWN_DEVICE   Reason = 1
+	Reason_INTERNAL_ERROR   Reason = 2
+	Reason_WRONG_METRIC     Reason = 3
+	Reason_WRONG_EVENT      Reason = 4
+)
+
+var Reason_name = map[int32]string{
+	0: "UNDEFINED_REASON",
+	1: "UNKNOWN_DEVICE",
+	2: "INTERNAL_ERROR",
+	3: "WRONG_METRIC",
+	4: "WRONG_EVENT",
+}
+
+var Reason_value = map[string]int32{
+	"UNDEFINED_REASON": 0,
+	"UNKNOWN_DEVICE":   1,
+	"INTERNAL_ERROR":   2,
+	"WRONG_METRIC":     3,
+	"WRONG_EVENT":      4,
+}
+
+func (x Reason) String() string {
+	return proto.EnumName(Reason_name, int32(x))
+}
+
+func (Reason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_74aedf0dda1205d8, []int{1}
+}
+
+func init() {
+	proto.RegisterEnum("dmi.Status", Status_name, Status_value)
+	proto.RegisterEnum("dmi.Reason", Reason_name, Reason_value)
+}
+
+func init() { proto.RegisterFile("dmi/commons.proto", fileDescriptor_74aedf0dda1205d8) }
+
+var fileDescriptor_74aedf0dda1205d8 = []byte{
+	// 235 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0xcf, 0xcb, 0x4a, 0x03, 0x31,
+	0x14, 0xc6, 0xf1, 0x5e, 0x74, 0xc0, 0x28, 0x1a, 0x83, 0x4f, 0x51, 0x68, 0x83, 0x74, 0x25, 0xae,
+	0x6a, 0xe7, 0x28, 0x43, 0xf5, 0x04, 0x32, 0x99, 0x16, 0xdc, 0x0c, 0x69, 0x12, 0xc7, 0x2c, 0x92,
+	0x94, 0x99, 0xb4, 0xcf, 0x2f, 0x5e, 0x36, 0x6e, 0x7f, 0xf0, 0x7d, 0xf0, 0x27, 0xb7, 0x36, 0x78,
+	0x6e, 0x52, 0x08, 0x29, 0x0e, 0x8b, 0x43, 0x9f, 0x72, 0x62, 0x53, 0x1b, 0xfc, 0xec, 0x9e, 0x14,
+	0x75, 0xd6, 0xf9, 0x38, 0xb0, 0x3b, 0x42, 0x1b, 0x2c, 0xe1, 0xb9, 0x42, 0x28, 0xdb, 0x5a, 0xad,
+	0x54, 0x53, 0xd3, 0x11, 0x2b, 0xc8, 0x44, 0x6c, 0xe8, 0x98, 0x5d, 0x90, 0x73, 0x90, 0x52, 0x48,
+	0x3a, 0x99, 0x79, 0x52, 0x48, 0xa7, 0x87, 0x14, 0xff, 0x4f, 0x24, 0xac, 0x6a, 0x81, 0x74, 0xc4,
+	0x18, 0xb9, 0x6e, 0x70, 0x83, 0x62, 0x87, 0x6d, 0x09, 0xdb, 0x6a, 0x0d, 0x74, 0xfc, 0x6d, 0x15,
+	0x2a, 0x90, 0xb8, 0x7a, 0x6d, 0xff, 0x7e, 0x18, 0x25, 0x57, 0x3b, 0x29, 0xf0, 0xa5, 0x7d, 0x03,
+	0x25, 0xab, 0x35, 0x9d, 0xb2, 0x1b, 0x72, 0xf9, 0x2b, 0xb0, 0x05, 0x54, 0xf4, 0xec, 0xe9, 0xf1,
+	0xfd, 0xa1, 0xf3, 0xf9, 0xf3, 0xb8, 0x5f, 0x98, 0x14, 0x78, 0x3a, 0xb8, 0x68, 0x52, 0x6f, 0xb9,
+	0x75, 0x27, 0x6f, 0xdc, 0x3c, 0xe8, 0xa8, 0x3b, 0x17, 0x5c, 0xcc, 0x73, 0x1f, 0xb3, 0xeb, 0x3f,
+	0xb4, 0x71, 0xfc, 0xb4, 0xe4, 0x5d, 0xe2, 0x36, 0xf8, 0x7d, 0xf1, 0x93, 0xb9, 0xfc, 0x0a, 0x00,
+	0x00, 0xff, 0xff, 0xc1, 0xa1, 0x42, 0x40, 0xfb, 0x00, 0x00, 0x00,
+}
