Add Axes to Dashboard Cells

The frontend would like to store viewport information for each cell so
that visualizations are zoomed to the proper extents upon rendering.
This adds a property to cells called "axes" which takes the following
shape:

```
{
   "axes" : {
      "y" : {
         "bounds" : [
            0,
            2
         ]
      },
      "y2" : {
         "bounds" : [
            1,
            3
         ]
      }
   }
}
```

Bounds specify the visible range for the axis, and are a 2-tuple of the
form [lower, upper]. Bounds are not implicitly inclusive or
exclusive--that determination is left for clients to make. Also, there
are no restrictions on the naming of axes.
pull/1797/head
Tim Raymond 2017-07-19 10:27:21 -04:00
parent 05e712546f
commit e513e61481
No known key found for this signature in database
GPG Key ID: 221ADC45076A48C0
4 changed files with 146 additions and 89 deletions

View File

@ -179,6 +179,19 @@ func MarshalDashboard(d chronograf.Dashboard) ([]byte, error) {
}
}
axes := make(map[string]*DashboardRange, len(c.Axes))
for a, r := range c.Axes {
// need to explicitly allocate a new array because r.Bounds is
// over-written and the resulting slices from previous iterations will
// point to later iteration's data. It is _not_ enough to simply re-slice
// r.Bounds
axis := [2]int32{}
copy(axis[:], r.Bounds[:2])
axes[a] = &DashboardRange{
Bounds: axis[:],
}
}
cells[i] = &DashboardCell{
ID: c.ID,
X: c.X,
@ -188,6 +201,7 @@ func MarshalDashboard(d chronograf.Dashboard) ([]byte, error) {
Name: c.Name,
Queries: queries,
Type: c.Type,
Axes: axes,
}
}
templates := make([]*Template, len(d.Templates))
@ -251,6 +265,13 @@ func UnmarshalDashboard(data []byte, d *chronograf.Dashboard) error {
}
}
axes := make(map[string]chronograf.DashboardRange, len(c.Axes))
for a, r := range c.Axes {
axis := chronograf.DashboardRange{}
copy(axis.Bounds[:], r.Bounds[:2])
axes[a] = axis
}
cells[i] = chronograf.DashboardCell{
ID: c.ID,
X: c.X,
@ -260,6 +281,7 @@ func UnmarshalDashboard(data []byte, d *chronograf.Dashboard) error {
Name: c.Name,
Queries: queries,
Type: c.Type,
Axes: axes,
}
}

View File

@ -12,6 +12,7 @@ It has these top-level messages:
Source
Dashboard
DashboardCell
DashboardRange
Template
TemplateValue
TemplateQuery
@ -85,14 +86,15 @@ func (m *Dashboard) GetTemplates() []*Template {
}
type DashboardCell struct {
X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"`
Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"`
W int32 `protobuf:"varint,3,opt,name=w,proto3" json:"w,omitempty"`
H int32 `protobuf:"varint,4,opt,name=h,proto3" json:"h,omitempty"`
Queries []*Query `protobuf:"bytes,5,rep,name=queries" json:"queries,omitempty"`
Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"`
ID string `protobuf:"bytes,8,opt,name=ID,proto3" json:"ID,omitempty"`
X int32 `protobuf:"varint,1,opt,name=x,proto3" json:"x,omitempty"`
Y int32 `protobuf:"varint,2,opt,name=y,proto3" json:"y,omitempty"`
W int32 `protobuf:"varint,3,opt,name=w,proto3" json:"w,omitempty"`
H int32 `protobuf:"varint,4,opt,name=h,proto3" json:"h,omitempty"`
Queries []*Query `protobuf:"bytes,5,rep,name=queries" json:"queries,omitempty"`
Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"`
ID string `protobuf:"bytes,8,opt,name=ID,proto3" json:"ID,omitempty"`
Axes map[string]*DashboardRange `protobuf:"bytes,9,rep,name=axes" json:"axes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"`
}
func (m *DashboardCell) Reset() { *m = DashboardCell{} }
@ -107,6 +109,22 @@ func (m *DashboardCell) GetQueries() []*Query {
return nil
}
func (m *DashboardCell) GetAxes() map[string]*DashboardRange {
if m != nil {
return m.Axes
}
return nil
}
type DashboardRange struct {
Bounds []int32 `protobuf:"varint,1,rep,name=bounds" json:"bounds,omitempty"`
}
func (m *DashboardRange) Reset() { *m = DashboardRange{} }
func (m *DashboardRange) String() string { return proto.CompactTextString(m) }
func (*DashboardRange) ProtoMessage() {}
func (*DashboardRange) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{3} }
type Template struct {
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
TempVar string `protobuf:"bytes,2,opt,name=temp_var,json=tempVar,proto3" json:"temp_var,omitempty"`
@ -119,7 +137,7 @@ type Template struct {
func (m *Template) Reset() { *m = Template{} }
func (m *Template) String() string { return proto.CompactTextString(m) }
func (*Template) ProtoMessage() {}
func (*Template) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{3} }
func (*Template) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{4} }
func (m *Template) GetValues() []*TemplateValue {
if m != nil {
@ -144,7 +162,7 @@ type TemplateValue struct {
func (m *TemplateValue) Reset() { *m = TemplateValue{} }
func (m *TemplateValue) String() string { return proto.CompactTextString(m) }
func (*TemplateValue) ProtoMessage() {}
func (*TemplateValue) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{4} }
func (*TemplateValue) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{5} }
type TemplateQuery struct {
Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"`
@ -158,7 +176,7 @@ type TemplateQuery struct {
func (m *TemplateQuery) Reset() { *m = TemplateQuery{} }
func (m *TemplateQuery) String() string { return proto.CompactTextString(m) }
func (*TemplateQuery) ProtoMessage() {}
func (*TemplateQuery) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{5} }
func (*TemplateQuery) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{6} }
type Server struct {
ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
@ -173,7 +191,7 @@ type Server struct {
func (m *Server) Reset() { *m = Server{} }
func (m *Server) String() string { return proto.CompactTextString(m) }
func (*Server) ProtoMessage() {}
func (*Server) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{6} }
func (*Server) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{7} }
type Layout struct {
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
@ -186,7 +204,7 @@ type Layout struct {
func (m *Layout) Reset() { *m = Layout{} }
func (m *Layout) String() string { return proto.CompactTextString(m) }
func (*Layout) ProtoMessage() {}
func (*Layout) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{7} }
func (*Layout) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{8} }
func (m *Layout) GetCells() []*Cell {
if m != nil {
@ -211,7 +229,7 @@ type Cell struct {
func (m *Cell) Reset() { *m = Cell{} }
func (m *Cell) String() string { return proto.CompactTextString(m) }
func (*Cell) ProtoMessage() {}
func (*Cell) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{8} }
func (*Cell) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{9} }
func (m *Cell) GetQueries() []*Query {
if m != nil {
@ -233,7 +251,7 @@ type Query struct {
func (m *Query) Reset() { *m = Query{} }
func (m *Query) String() string { return proto.CompactTextString(m) }
func (*Query) ProtoMessage() {}
func (*Query) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{9} }
func (*Query) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{10} }
func (m *Query) GetRange() *Range {
if m != nil {
@ -250,7 +268,7 @@ type Range struct {
func (m *Range) Reset() { *m = Range{} }
func (m *Range) String() string { return proto.CompactTextString(m) }
func (*Range) ProtoMessage() {}
func (*Range) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{10} }
func (*Range) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{11} }
type AlertRule struct {
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
@ -262,7 +280,7 @@ type AlertRule struct {
func (m *AlertRule) Reset() { *m = AlertRule{} }
func (m *AlertRule) String() string { return proto.CompactTextString(m) }
func (*AlertRule) ProtoMessage() {}
func (*AlertRule) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{11} }
func (*AlertRule) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{12} }
type User struct {
ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
@ -272,12 +290,13 @@ type User struct {
func (m *User) Reset() { *m = User{} }
func (m *User) String() string { return proto.CompactTextString(m) }
func (*User) ProtoMessage() {}
func (*User) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{12} }
func (*User) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{13} }
func init() {
proto.RegisterType((*Source)(nil), "internal.Source")
proto.RegisterType((*Dashboard)(nil), "internal.Dashboard")
proto.RegisterType((*DashboardCell)(nil), "internal.DashboardCell")
proto.RegisterType((*DashboardRange)(nil), "internal.DashboardRange")
proto.RegisterType((*Template)(nil), "internal.Template")
proto.RegisterType((*TemplateValue)(nil), "internal.TemplateValue")
proto.RegisterType((*TemplateQuery)(nil), "internal.TemplateQuery")
@ -293,59 +312,64 @@ func init() {
func init() { proto.RegisterFile("internal.proto", fileDescriptorInternal) }
var fileDescriptorInternal = []byte{
// 858 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xdd, 0x6e, 0xe3, 0x44,
0x14, 0xd6, 0xc4, 0x76, 0x62, 0x9f, 0xee, 0x16, 0x34, 0x5a, 0xb1, 0x06, 0x6e, 0x22, 0x0b, 0xa4,
0x82, 0x44, 0x41, 0xec, 0x13, 0xb4, 0xb5, 0x84, 0x42, 0xbb, 0x4b, 0x99, 0xb4, 0xe5, 0x0a, 0xad,
0x26, 0xc9, 0x49, 0x6b, 0xed, 0x24, 0x36, 0x63, 0xbb, 0x59, 0xbf, 0x02, 0x57, 0x3c, 0x01, 0x12,
0x12, 0x57, 0x5c, 0xf2, 0x02, 0x3c, 0x04, 0x2f, 0x84, 0xce, 0xcc, 0xf8, 0x27, 0x6c, 0x41, 0x7b,
0xb5, 0x77, 0xf3, 0x9d, 0x33, 0xf9, 0xe6, 0xfc, 0x7c, 0x9f, 0x03, 0x87, 0xd9, 0xb6, 0x42, 0xbd,
0x95, 0xea, 0xb8, 0xd0, 0x79, 0x95, 0xf3, 0xb0, 0xc5, 0xc9, 0xcf, 0x23, 0x18, 0xcf, 0xf3, 0x5a,
0x2f, 0x91, 0x1f, 0xc2, 0x68, 0x96, 0xc6, 0x6c, 0xca, 0x8e, 0x3c, 0x31, 0x9a, 0xa5, 0x9c, 0x83,
0xff, 0x42, 0x6e, 0x30, 0x1e, 0x4d, 0xd9, 0x51, 0x24, 0xcc, 0x99, 0x62, 0x57, 0x4d, 0x81, 0xb1,
0x67, 0x63, 0x74, 0xe6, 0x1f, 0x41, 0x78, 0x5d, 0x12, 0xdb, 0x06, 0x63, 0xdf, 0xc4, 0x3b, 0x4c,
0xb9, 0x4b, 0x59, 0x96, 0xbb, 0x5c, 0xaf, 0xe2, 0xc0, 0xe6, 0x5a, 0xcc, 0xdf, 0x07, 0xef, 0x5a,
0x5c, 0xc4, 0x63, 0x13, 0xa6, 0x23, 0x8f, 0x61, 0x92, 0xe2, 0x5a, 0xd6, 0xaa, 0x8a, 0x27, 0x53,
0x76, 0x14, 0x8a, 0x16, 0x12, 0xcf, 0x15, 0x2a, 0xbc, 0xd5, 0x72, 0x1d, 0x87, 0x96, 0xa7, 0xc5,
0xfc, 0x18, 0xf8, 0x6c, 0x5b, 0xe2, 0xb2, 0xd6, 0x38, 0x7f, 0x95, 0x15, 0x37, 0xa8, 0xb3, 0x75,
0x13, 0x47, 0x86, 0xe0, 0x81, 0x0c, 0xbd, 0xf2, 0x1c, 0x2b, 0x49, 0x6f, 0x83, 0xa1, 0x6a, 0x61,
0xf2, 0x0b, 0x83, 0x28, 0x95, 0xe5, 0xdd, 0x22, 0x97, 0x7a, 0xf5, 0x56, 0xf3, 0xf8, 0x02, 0x82,
0x25, 0x2a, 0x55, 0xc6, 0xde, 0xd4, 0x3b, 0x3a, 0xf8, 0xfa, 0xe9, 0x71, 0x37, 0xe8, 0x8e, 0xe7,
0x0c, 0x95, 0x12, 0xf6, 0x16, 0xff, 0x0a, 0xa2, 0x0a, 0x37, 0x85, 0x92, 0x15, 0x96, 0xb1, 0x6f,
0x7e, 0xc2, 0xfb, 0x9f, 0x5c, 0xb9, 0x94, 0xe8, 0x2f, 0x25, 0x7f, 0x30, 0x78, 0xbc, 0x47, 0xc5,
0x1f, 0x01, 0x7b, 0x6d, 0xaa, 0x0a, 0x04, 0x7b, 0x4d, 0xa8, 0x31, 0x15, 0x05, 0x82, 0x35, 0x84,
0x76, 0x66, 0x37, 0x81, 0x60, 0x3b, 0x42, 0x77, 0x66, 0x23, 0x81, 0x60, 0x77, 0xfc, 0x33, 0x98,
0xfc, 0x54, 0xa3, 0xce, 0xb0, 0x8c, 0x03, 0xf3, 0xf2, 0x7b, 0xfd, 0xcb, 0xdf, 0xd7, 0xa8, 0x1b,
0xd1, 0xe6, 0xa9, 0x53, 0xb3, 0x4d, 0xbb, 0x1a, 0x73, 0xa6, 0x58, 0x45, 0x9b, 0x9f, 0xd8, 0x18,
0x9d, 0xdd, 0x84, 0xec, 0x3e, 0x46, 0xb3, 0x34, 0xf9, 0x8b, 0xd1, 0x9a, 0x6c, 0xe9, 0x83, 0xf1,
0x99, 0x24, 0xff, 0x10, 0x42, 0x6a, 0xeb, 0xe5, 0xbd, 0xd4, 0x6e, 0x84, 0x13, 0xc2, 0x37, 0x52,
0xf3, 0x2f, 0x61, 0x7c, 0x2f, 0x55, 0x8d, 0x0f, 0x8c, 0xb1, 0xa5, 0xbb, 0xa1, 0xbc, 0x70, 0xd7,
0xba, 0x62, 0xfc, 0x41, 0x31, 0x4f, 0x20, 0x50, 0x72, 0x81, 0xca, 0xe9, 0xcc, 0x02, 0x5a, 0x10,
0x75, 0xd5, 0x98, 0x5e, 0x1e, 0x64, 0xb6, 0xbd, 0xdb, 0x5b, 0xc9, 0x35, 0x3c, 0xde, 0x7b, 0xb1,
0x7b, 0x89, 0xed, 0xbf, 0x64, 0xea, 0x70, 0x6d, 0x58, 0x40, 0x12, 0x2d, 0x51, 0xe1, 0xb2, 0xc2,
0x95, 0x59, 0x41, 0x28, 0x3a, 0x9c, 0xfc, 0xc6, 0x7a, 0x5e, 0xf3, 0x1e, 0x89, 0x70, 0x99, 0x6f,
0x36, 0x72, 0xbb, 0x72, 0xd4, 0x2d, 0xa4, 0xb9, 0xad, 0x16, 0x8e, 0x7a, 0xb4, 0x5a, 0x10, 0xd6,
0x85, 0x33, 0xdc, 0x48, 0x17, 0x7c, 0x0a, 0x07, 0x1b, 0x94, 0x65, 0xad, 0x71, 0x83, 0xdb, 0xca,
0x8d, 0x60, 0x18, 0xe2, 0x4f, 0x61, 0x52, 0xc9, 0xdb, 0x97, 0xaf, 0xb0, 0x71, 0xb3, 0x18, 0x57,
0xf2, 0xf6, 0x1c, 0x1b, 0xfe, 0x31, 0x44, 0xeb, 0x0c, 0xd5, 0xca, 0xa4, 0xec, 0x72, 0x43, 0x13,
0x38, 0xc7, 0x26, 0xf9, 0x9d, 0xc1, 0x78, 0x8e, 0xfa, 0x1e, 0xf5, 0x5b, 0x29, 0x7f, 0xe8, 0x7a,
0xef, 0x7f, 0x5c, 0xef, 0x3f, 0xec, 0xfa, 0xa0, 0x77, 0xfd, 0x13, 0x08, 0xe6, 0x7a, 0x39, 0x4b,
0x4d, 0x45, 0x9e, 0xb0, 0x80, 0x7f, 0x00, 0xe3, 0x93, 0x65, 0x95, 0xdd, 0xa3, 0xfb, 0x14, 0x38,
0x94, 0xfc, 0xca, 0x60, 0x7c, 0x21, 0x9b, 0xbc, 0xae, 0xde, 0x50, 0xd8, 0x14, 0x0e, 0x4e, 0x8a,
0x42, 0x65, 0x4b, 0x59, 0x65, 0xf9, 0xd6, 0x55, 0x3b, 0x0c, 0xd1, 0x8d, 0xe7, 0x83, 0xd9, 0xd9,
0xba, 0x87, 0x21, 0xfe, 0x09, 0x04, 0x67, 0xc6, 0xd0, 0xd6, 0x9d, 0x87, 0xbd, 0x5e, 0xac, 0x8f,
0x4d, 0x92, 0x1a, 0x3c, 0xa9, 0xab, 0x7c, 0xad, 0xf2, 0x9d, 0xe9, 0x24, 0x14, 0x1d, 0x4e, 0xfe,
0x66, 0xe0, 0xbf, 0x2b, 0xa3, 0x3e, 0x02, 0x96, 0xb9, 0x45, 0xb2, 0xac, 0xb3, 0xed, 0x64, 0x60,
0xdb, 0x18, 0x26, 0x8d, 0x96, 0xdb, 0x5b, 0x2c, 0xe3, 0x70, 0xea, 0x1d, 0x79, 0xa2, 0x85, 0x26,
0x63, 0x3c, 0x52, 0xc6, 0xd1, 0xd4, 0x23, 0x05, 0x3a, 0xd8, 0x69, 0x1e, 0x7a, 0xcd, 0x27, 0x7f,
0x32, 0x08, 0x3a, 0xe5, 0x9e, 0xed, 0x2b, 0xf7, 0xac, 0x57, 0x6e, 0x7a, 0xda, 0x2a, 0x37, 0x3d,
0x25, 0x2c, 0x2e, 0x5b, 0xe5, 0x8a, 0x4b, 0x9a, 0xda, 0x37, 0x3a, 0xaf, 0x8b, 0xd3, 0xc6, 0x8e,
0x37, 0x12, 0x1d, 0xa6, 0x75, 0xff, 0x70, 0x87, 0xda, 0xf5, 0x1c, 0x09, 0x87, 0x48, 0x1c, 0x17,
0xc6, 0xd5, 0xb6, 0x4b, 0x0b, 0xf8, 0xa7, 0x10, 0x08, 0xea, 0xc2, 0xb4, 0xba, 0x37, 0x20, 0x13,
0x16, 0x36, 0x9b, 0x3c, 0x73, 0xd7, 0x88, 0xe5, 0xba, 0x28, 0x50, 0x3b, 0x4d, 0x5b, 0x60, 0xb8,
0xf3, 0x1d, 0xda, 0xcf, 0x91, 0x27, 0x2c, 0x48, 0x7e, 0x84, 0xe8, 0x44, 0xa1, 0xae, 0x44, 0xad,
0xde, 0xfc, 0x88, 0x71, 0xf0, 0xbf, 0x9d, 0x7f, 0xf7, 0xa2, 0x75, 0x02, 0x9d, 0x7b, 0xfd, 0x7a,
0xff, 0xd2, 0xef, 0xb9, 0x2c, 0xe4, 0x2c, 0x35, 0x8b, 0xf5, 0x84, 0x43, 0xc9, 0xe7, 0xe0, 0x93,
0x4f, 0x06, 0xcc, 0xfe, 0x7f, 0x79, 0x6c, 0x31, 0x36, 0xff, 0xd6, 0xcf, 0xfe, 0x09, 0x00, 0x00,
0xff, 0xff, 0xa7, 0xc6, 0x53, 0x22, 0xbf, 0x07, 0x00, 0x00,
// 937 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xbc, 0x56, 0x51, 0x8f, 0xdb, 0x44,
0x10, 0xd6, 0xc6, 0x76, 0x12, 0xcf, 0xb5, 0x07, 0x5a, 0x55, 0x74, 0x29, 0x2f, 0xc1, 0x02, 0x29,
0x20, 0x11, 0x50, 0x2b, 0x24, 0xc4, 0x5b, 0x7a, 0x41, 0x28, 0xdc, 0xb5, 0x5c, 0x37, 0x77, 0xc7,
0x13, 0xaa, 0x36, 0xc9, 0xe4, 0xce, 0xaa, 0x13, 0x9b, 0xb5, 0x7d, 0x39, 0xff, 0x05, 0x9e, 0xf8,
0x05, 0x48, 0x48, 0xfc, 0x02, 0xc4, 0x3b, 0x3f, 0x82, 0x3f, 0x84, 0x66, 0x77, 0x6d, 0x27, 0x34,
0x45, 0x7d, 0xe2, 0xe9, 0xf6, 0x9b, 0xd9, 0xcc, 0x78, 0xbf, 0xf9, 0xe6, 0xd3, 0xc1, 0x71, 0xbc,
0x29, 0x50, 0x6f, 0x54, 0x32, 0xca, 0x74, 0x5a, 0xa4, 0xbc, 0x5f, 0xe3, 0xe8, 0xe7, 0x0e, 0x74,
0x67, 0x69, 0xa9, 0x17, 0xc8, 0x8f, 0xa1, 0x33, 0x9d, 0x08, 0x36, 0x60, 0x43, 0x4f, 0x76, 0xa6,
0x13, 0xce, 0xc1, 0x7f, 0xae, 0xd6, 0x28, 0x3a, 0x03, 0x36, 0x0c, 0xa5, 0x39, 0x53, 0xec, 0xa2,
0xca, 0x50, 0x78, 0x36, 0x46, 0x67, 0xfe, 0x08, 0xfa, 0x97, 0x39, 0x55, 0x5b, 0xa3, 0xf0, 0x4d,
0xbc, 0xc1, 0x94, 0x3b, 0x57, 0x79, 0xbe, 0x4d, 0xf5, 0x52, 0x04, 0x36, 0x57, 0x63, 0xfe, 0x2e,
0x78, 0x97, 0xf2, 0x4c, 0x74, 0x4d, 0x98, 0x8e, 0x5c, 0x40, 0x6f, 0x82, 0x2b, 0x55, 0x26, 0x85,
0xe8, 0x0d, 0xd8, 0xb0, 0x2f, 0x6b, 0x48, 0x75, 0x2e, 0x30, 0xc1, 0x6b, 0xad, 0x56, 0xa2, 0x6f,
0xeb, 0xd4, 0x98, 0x8f, 0x80, 0x4f, 0x37, 0x39, 0x2e, 0x4a, 0x8d, 0xb3, 0x57, 0x71, 0x76, 0x85,
0x3a, 0x5e, 0x55, 0x22, 0x34, 0x05, 0x0e, 0x64, 0xa8, 0xcb, 0x33, 0x2c, 0x14, 0xf5, 0x06, 0x53,
0xaa, 0x86, 0xd1, 0x2f, 0x0c, 0xc2, 0x89, 0xca, 0x6f, 0xe6, 0xa9, 0xd2, 0xcb, 0xb7, 0xe2, 0xe3,
0x33, 0x08, 0x16, 0x98, 0x24, 0xb9, 0xf0, 0x06, 0xde, 0xf0, 0xe8, 0xf1, 0xc3, 0x51, 0x43, 0x74,
0x53, 0xe7, 0x04, 0x93, 0x44, 0xda, 0x5b, 0xfc, 0x0b, 0x08, 0x0b, 0x5c, 0x67, 0x89, 0x2a, 0x30,
0x17, 0xbe, 0xf9, 0x09, 0x6f, 0x7f, 0x72, 0xe1, 0x52, 0xb2, 0xbd, 0x14, 0xfd, 0xd9, 0x81, 0xfb,
0x7b, 0xa5, 0xf8, 0x3d, 0x60, 0x77, 0xe6, 0xab, 0x02, 0xc9, 0xee, 0x08, 0x55, 0xe6, 0x8b, 0x02,
0xc9, 0x2a, 0x42, 0x5b, 0x33, 0x9b, 0x40, 0xb2, 0x2d, 0xa1, 0x1b, 0x33, 0x91, 0x40, 0xb2, 0x1b,
0xfe, 0x09, 0xf4, 0x7e, 0x2a, 0x51, 0xc7, 0x98, 0x8b, 0xc0, 0x74, 0x7e, 0xa7, 0xed, 0xfc, 0xa2,
0x44, 0x5d, 0xc9, 0x3a, 0x4f, 0x2f, 0x35, 0xd3, 0xb4, 0xa3, 0x31, 0x67, 0x8a, 0x15, 0x34, 0xf9,
0x9e, 0x8d, 0xd1, 0xd9, 0x31, 0x64, 0xe7, 0x41, 0x0c, 0x7d, 0x09, 0xbe, 0xba, 0xc3, 0x5c, 0x84,
0xa6, 0xfe, 0x87, 0x6f, 0x20, 0x63, 0x34, 0xbe, 0xc3, 0xfc, 0x9b, 0x4d, 0xa1, 0x2b, 0x69, 0xae,
0x3f, 0x7a, 0x01, 0x61, 0x13, 0x22, 0x55, 0xbc, 0xc2, 0xca, 0x3c, 0x30, 0x94, 0x74, 0xe4, 0x23,
0x08, 0x6e, 0x55, 0x52, 0x5a, 0xe2, 0x8f, 0x1e, 0x8b, 0x03, 0x65, 0xa5, 0xda, 0x5c, 0xa3, 0xb4,
0xd7, 0xbe, 0xee, 0x7c, 0xc5, 0xa2, 0x21, 0x1c, 0xef, 0x27, 0xf9, 0x7b, 0xd0, 0x9d, 0xa7, 0xe5,
0x66, 0x99, 0x0b, 0x36, 0xf0, 0x86, 0x81, 0x74, 0x28, 0xfa, 0x8b, 0x91, 0xb4, 0x2c, 0xdd, 0x3b,
0x23, 0xb7, 0x0f, 0x7a, 0x1f, 0xfa, 0x34, 0x8a, 0x97, 0xb7, 0x4a, 0xbb, 0xb1, 0xf7, 0x08, 0x5f,
0x29, 0xcd, 0x3f, 0x87, 0xae, 0x69, 0x77, 0x60, 0xf4, 0x75, 0xb9, 0x2b, 0xca, 0x4b, 0x77, 0xad,
0x21, 0xd0, 0xdf, 0x21, 0xf0, 0x01, 0x04, 0x89, 0x9a, 0x63, 0xe2, 0x76, 0xc3, 0x02, 0x12, 0x15,
0x4d, 0xa2, 0x32, 0xfc, 0x1f, 0xac, 0x6c, 0xe7, 0x65, 0x6f, 0x45, 0x97, 0x70, 0x7f, 0xaf, 0x63,
0xd3, 0x89, 0xed, 0x77, 0x6a, 0x49, 0x0c, 0x1d, 0x55, 0xb4, 0x56, 0x39, 0x26, 0xb8, 0x28, 0x70,
0x69, 0x64, 0xd3, 0x97, 0x0d, 0x8e, 0x7e, 0x63, 0x6d, 0x5d, 0xd3, 0x8f, 0x16, 0x67, 0x91, 0xae,
0xd7, 0x6a, 0xb3, 0x74, 0xa5, 0x6b, 0x48, 0xbc, 0x2d, 0xe7, 0xae, 0x74, 0x67, 0x39, 0x27, 0xac,
0x33, 0x67, 0x12, 0x1d, 0x9d, 0xf1, 0x01, 0x1c, 0xad, 0x51, 0xe5, 0xa5, 0xc6, 0x35, 0x6e, 0x0a,
0x47, 0xc1, 0x6e, 0x88, 0x3f, 0x84, 0x5e, 0xa1, 0xae, 0x5f, 0xd2, 0xe8, 0x2d, 0x17, 0xdd, 0x42,
0x5d, 0x9f, 0x62, 0xc5, 0x3f, 0x80, 0x70, 0x15, 0x63, 0xb2, 0x34, 0x29, 0x2b, 0xc8, 0xbe, 0x09,
0x9c, 0x62, 0x15, 0xfd, 0xce, 0xa0, 0x3b, 0x43, 0x7d, 0x8b, 0xfa, 0xad, 0xb6, 0x75, 0xd7, 0xa9,
0xbc, 0xff, 0x70, 0x2a, 0xff, 0xb0, 0x53, 0x05, 0xad, 0x53, 0x3d, 0x80, 0x60, 0xa6, 0x17, 0xd3,
0x89, 0xf9, 0x22, 0x4f, 0x5a, 0x40, 0x1a, 0x1b, 0x2f, 0x8a, 0xf8, 0x16, 0x9d, 0x7d, 0x39, 0x14,
0xfd, 0xca, 0xa0, 0x7b, 0xa6, 0xaa, 0xb4, 0x2c, 0x5e, 0x53, 0xd8, 0x00, 0x8e, 0xc6, 0x59, 0x96,
0xc4, 0x0b, 0x55, 0xc4, 0xe9, 0xc6, 0x7d, 0xed, 0x6e, 0x88, 0x6e, 0x3c, 0xdb, 0xe1, 0xce, 0x7e,
0xf7, 0x6e, 0x88, 0x7f, 0x04, 0xc1, 0x89, 0x31, 0x21, 0xeb, 0x28, 0xc7, 0xad, 0x5e, 0xac, 0xf7,
0x98, 0x24, 0x3d, 0x70, 0x5c, 0x16, 0xe9, 0x2a, 0x49, 0xb7, 0xe6, 0x25, 0x7d, 0xd9, 0xe0, 0xe8,
0x6f, 0x06, 0xfe, 0xff, 0x65, 0x2e, 0xf7, 0x80, 0xc5, 0x6e, 0x90, 0x2c, 0x6e, 0xac, 0xa6, 0xb7,
0x63, 0x35, 0x02, 0x7a, 0x95, 0xa6, 0xa5, 0xcd, 0x45, 0x7f, 0xe0, 0x0d, 0x3d, 0x59, 0x43, 0x93,
0x31, 0x3b, 0x62, 0x3d, 0x26, 0x94, 0x35, 0x6c, 0x34, 0x0f, 0xad, 0xe6, 0xa3, 0x3f, 0x18, 0x04,
0x8d, 0x72, 0x4f, 0xf6, 0x95, 0x7b, 0xd2, 0x2a, 0x77, 0xf2, 0xb4, 0x56, 0xee, 0xe4, 0x29, 0x61,
0x79, 0x5e, 0x2b, 0x57, 0x9e, 0x13, 0x6b, 0xdf, 0xea, 0xb4, 0xcc, 0x9e, 0x56, 0x96, 0xde, 0x50,
0x36, 0x98, 0xc6, 0xfd, 0xc3, 0x0d, 0x6a, 0xf7, 0xe6, 0x50, 0x3a, 0x44, 0xe2, 0x38, 0x33, 0x5b,
0x6d, 0x5f, 0x69, 0x01, 0xff, 0x18, 0x02, 0xe3, 0x44, 0xe6, 0xa9, 0x7b, 0x04, 0x39, 0xf7, 0x32,
0x7f, 0xa2, 0x27, 0xee, 0x1a, 0x55, 0xb9, 0xcc, 0x32, 0xd4, 0x4e, 0xd3, 0x16, 0x98, 0xda, 0xe9,
0x16, 0xad, 0x1d, 0x79, 0xd2, 0x82, 0xe8, 0x47, 0x08, 0xc7, 0x09, 0xea, 0x42, 0x96, 0xc9, 0xeb,
0x26, 0xc6, 0xc1, 0xff, 0x6e, 0xf6, 0xfd, 0xf3, 0x7a, 0x13, 0xe8, 0xdc, 0xea, 0xd7, 0xfb, 0x97,
0x7e, 0x4f, 0x55, 0xa6, 0xa6, 0x13, 0x33, 0x58, 0x4f, 0x3a, 0x14, 0x7d, 0x0a, 0x3e, 0xed, 0xc9,
0x4e, 0x65, 0xff, 0x4d, 0x3b, 0x36, 0xef, 0x9a, 0xff, 0x30, 0x9e, 0xfc, 0x13, 0x00, 0x00, 0xff,
0xff, 0xa5, 0xc4, 0x18, 0xb5, 0x73, 0x08, 0x00, 0x00,
}

View File

@ -22,14 +22,19 @@ message Dashboard {
}
message DashboardCell {
int32 x = 1; // X-coordinate of Cell in the Dashboard
int32 y = 2; // Y-coordinate of Cell in the Dashboard
int32 w = 3; // Width of Cell in the Dashboard
int32 h = 4; // Height of Cell in the Dashboard
repeated Query queries = 5; // Time-series data queries for Dashboard
string name = 6; // User-facing name for this Dashboard
string type = 7; // Dashboard visualization type
string ID = 8; // id is the unique id of the dashboard. MIGRATED FIELD added in 1.2.0-beta6
int32 x = 1; // X-coordinate of Cell in the Dashboard
int32 y = 2; // Y-coordinate of Cell in the Dashboard
int32 w = 3; // Width of Cell in the Dashboard
int32 h = 4; // Height of Cell in the Dashboard
repeated Query queries = 5; // Time-series data queries for Dashboard
string name = 6; // User-facing name for this Dashboard
string type = 7; // Dashboard visualization type
string ID = 8; // id is the unique id of the dashboard. MIGRATED FIELD added in 1.2.0-beta6
map<string, DashboardRange> axes = 9; // Axes represent the graphical viewport for a cell's visualizations
}
message DashboardRange {
repeated int32 bounds = 1; // bounds are an ordered 2-tuple consisting of lower and upper axis extents, respectively
}
message Template {

View File

@ -565,16 +565,22 @@ type Dashboard struct {
Name string `json:"name"`
}
// DashboardRange represents the visible extents of a visualization
type DashboardRange struct {
Bounds [2]int32 `json:"bounds"` // bounds are an ordered 2-tuple consisting of lower and upper axis extents, respectively
}
// DashboardCell holds visual and query information for a cell
type DashboardCell struct {
ID string `json:"i"`
X int32 `json:"x"`
Y int32 `json:"y"`
W int32 `json:"w"`
H int32 `json:"h"`
Name string `json:"name"`
Queries []DashboardQuery `json:"queries"`
Type string `json:"type"`
ID string `json:"i"`
X int32 `json:"x"`
Y int32 `json:"y"`
W int32 `json:"w"`
H int32 `json:"h"`
Name string `json:"name"`
Queries []DashboardQuery `json:"queries"`
Axes map[string]DashboardRange `json:"axes"`
Type string `json:"type"`
}
// DashboardsStore is the storage and retrieval of dashboards