grafana/pkg/services/live/database/storage.go

49 lines
1.4 KiB
Go

package database
import (
"fmt"
"time"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/localcache"
"github.com/grafana/grafana/pkg/services/live/model"
)
type Storage struct {
store db.DB
cache *localcache.CacheService
}
func NewStorage(store db.DB, cache *localcache.CacheService) *Storage {
return &Storage{store: store, cache: cache}
}
func getLiveMessageCacheKey(orgID int64, channel string) string {
return fmt.Sprintf("live_message_%d_%s", orgID, channel)
}
func (s *Storage) SaveLiveMessage(query *model.SaveLiveMessageQuery) error {
// Come back to saving into database after evaluating database structure.
s.cache.Set(getLiveMessageCacheKey(query.OrgID, query.Channel), model.LiveMessage{
ID: 0, // Not used actually.
OrgID: query.OrgID,
Channel: query.Channel,
Data: query.Data,
Published: time.Now(),
}, 0)
return nil
}
func (s *Storage) GetLiveMessage(query *model.GetLiveMessageQuery) (model.LiveMessage, bool, error) {
// Come back to saving into database after evaluating database structure.
m, ok := s.cache.Get(getLiveMessageCacheKey(query.OrgID, query.Channel))
if !ok {
return model.LiveMessage{}, false, nil
}
msg, ok := m.(model.LiveMessage)
if !ok {
return model.LiveMessage{}, false, fmt.Errorf("unexpected live message type in cache: %T", m)
}
return msg, true, nil
}