influxdb/canned/bin.go

84 lines
2.2 KiB
Go

package canned
import (
"context"
"encoding/json"
"fmt"
"github.com/influxdata/chronograf"
)
//go:generate go-bindata -o bin_gen.go -ignore README|apps|.sh|go -pkg canned .
// BinLayoutStore represents a layout store using data generated by go-bindata
type BinLayoutStore struct {
Logger chronograf.Logger
}
// All returns the set of all layouts
func (s *BinLayoutStore) All(ctx context.Context) ([]chronograf.Layout, error) {
names := AssetNames()
layouts := make([]chronograf.Layout, len(names))
for i, name := range names {
octets, err := Asset(name)
if err != nil {
s.Logger.
WithField("component", "apps").
WithField("name", name).
Error("Invalid Layout: ", err)
return nil, chronograf.ErrLayoutInvalid
}
var layout chronograf.Layout
if err = json.Unmarshal(octets, &layout); err != nil {
s.Logger.
WithField("component", "apps").
WithField("name", name).
Error("Unable to read layout:", err)
return nil, chronograf.ErrLayoutInvalid
}
layouts[i] = layout
}
return layouts, nil
}
// Add is not support by BinLayoutStore
func (s *BinLayoutStore) Add(ctx context.Context, layout chronograf.Layout) (chronograf.Layout, error) {
return chronograf.Layout{}, fmt.Errorf("Add to BinLayoutStore not supported")
}
// Delete is not support by BinLayoutStore
func (s *BinLayoutStore) Delete(ctx context.Context, layout chronograf.Layout) error {
return fmt.Errorf("Delete to BinLayoutStore not supported")
}
// Get retrieves Layout if `ID` exists.
func (s *BinLayoutStore) Get(ctx context.Context, ID string) (chronograf.Layout, error) {
layouts, err := s.All(ctx)
if err != nil {
s.Logger.
WithField("component", "apps").
WithField("name", ID).
Error("Invalid Layout: ", err)
return chronograf.Layout{}, chronograf.ErrLayoutInvalid
}
for _, layout := range layouts {
if layout.ID == ID {
return layout, nil
}
}
s.Logger.
WithField("component", "apps").
WithField("name", ID).
Error("Layout not found")
return chronograf.Layout{}, chronograf.ErrLayoutNotFound
}
// Update not supported
func (s *BinLayoutStore) Update(ctx context.Context, layout chronograf.Layout) error {
return fmt.Errorf("Update to BinLayoutStore not supported")
}