mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Storage: raise errors when timestamps cannot be parsed (#79405)
* raise errors when timestamps cannot be parsed * return partial origin info if timestamp parsing fails
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package kinds
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -79,15 +80,16 @@ func (m *GrafanaResourceMetadata) get(key string) string {
|
||||
return m.Annotations[key]
|
||||
}
|
||||
|
||||
func (m *GrafanaResourceMetadata) GetUpdatedTimestamp() *time.Time {
|
||||
func (m *GrafanaResourceMetadata) GetUpdatedTimestamp() (*time.Time, error) {
|
||||
v, ok := m.Annotations[annoKeyUpdatedTimestamp]
|
||||
if ok {
|
||||
t, err := time.Parse(time.RFC3339, v)
|
||||
if err != nil {
|
||||
return &t
|
||||
}
|
||||
if !ok || v == "" {
|
||||
return nil, nil
|
||||
}
|
||||
return nil
|
||||
t, err := time.Parse(time.RFC3339, v)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid updated timestamp: %s", err.Error())
|
||||
}
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
func (m *GrafanaResourceMetadata) SetUpdatedTimestampMillis(v int64) {
|
||||
@@ -163,17 +165,18 @@ func (m *GrafanaResourceMetadata) SetOriginInfo(info *ResourceOriginInfo) {
|
||||
}
|
||||
|
||||
// GetOriginInfo returns the origin info stored in k8s metadata annotations
|
||||
func (m *GrafanaResourceMetadata) GetOriginInfo() *ResourceOriginInfo {
|
||||
func (m *GrafanaResourceMetadata) GetOriginInfo() (*ResourceOriginInfo, error) {
|
||||
v, ok := m.Annotations[annoKeyOriginName]
|
||||
if !ok {
|
||||
return nil
|
||||
return nil, nil
|
||||
}
|
||||
t, err := m.GetOriginTimestamp()
|
||||
return &ResourceOriginInfo{
|
||||
Name: v,
|
||||
Path: m.GetOriginPath(),
|
||||
Key: m.GetOriginKey(),
|
||||
Timestamp: m.GetOriginTimestamp(),
|
||||
}
|
||||
Timestamp: t,
|
||||
}, err
|
||||
}
|
||||
|
||||
func (m *GrafanaResourceMetadata) GetOriginName() string {
|
||||
@@ -188,21 +191,21 @@ func (m *GrafanaResourceMetadata) GetOriginKey() string {
|
||||
return m.Annotations[annoKeyOriginKey]
|
||||
}
|
||||
|
||||
func (m *GrafanaResourceMetadata) GetOriginTimestamp() *time.Time {
|
||||
func (m *GrafanaResourceMetadata) GetOriginTimestamp() (*time.Time, error) {
|
||||
v, ok := m.Annotations[annoKeyOriginTimestamp]
|
||||
if !ok {
|
||||
return nil
|
||||
if !ok || v == "" {
|
||||
return nil, nil
|
||||
}
|
||||
t, err := time.Parse(time.RFC3339, v)
|
||||
if err != nil {
|
||||
return nil
|
||||
return nil, fmt.Errorf("invalid origin timestamp: %s", err.Error())
|
||||
}
|
||||
return &t
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
// Accessor functions for k8s objects
|
||||
type GrafanaResourceMetaAccessor interface {
|
||||
GetUpdatedTimestamp() *time.Time
|
||||
GetUpdatedTimestamp() (*time.Time, error)
|
||||
SetUpdatedTimestamp(v *time.Time)
|
||||
GetCreatedBy() string
|
||||
SetCreatedBy(user string)
|
||||
@@ -214,12 +217,12 @@ type GrafanaResourceMetaAccessor interface {
|
||||
SetSlug(v string)
|
||||
GetTitle() string
|
||||
SetTitle(v string)
|
||||
GetOriginInfo() *ResourceOriginInfo
|
||||
GetOriginInfo() (*ResourceOriginInfo, error)
|
||||
SetOriginInfo(info *ResourceOriginInfo)
|
||||
GetOriginName() string
|
||||
GetOriginPath() string
|
||||
GetOriginKey() string
|
||||
GetOriginTimestamp() *time.Time
|
||||
GetOriginTimestamp() (*time.Time, error)
|
||||
}
|
||||
|
||||
var _ GrafanaResourceMetaAccessor = (*grafanaResourceMetaAccessor)(nil)
|
||||
@@ -252,16 +255,16 @@ func (m *grafanaResourceMetaAccessor) get(key string) string {
|
||||
return m.obj.GetAnnotations()[key]
|
||||
}
|
||||
|
||||
func (m *grafanaResourceMetaAccessor) GetUpdatedTimestamp() *time.Time {
|
||||
func (m *grafanaResourceMetaAccessor) GetUpdatedTimestamp() (*time.Time, error) {
|
||||
v, ok := m.obj.GetAnnotations()[annoKeyUpdatedTimestamp]
|
||||
if !ok {
|
||||
return nil
|
||||
if !ok || v == "" {
|
||||
return nil, nil
|
||||
}
|
||||
t, err := time.Parse(time.RFC3339, v)
|
||||
if err != nil {
|
||||
return nil
|
||||
return nil, fmt.Errorf("invalid updated timestamp: %s", err.Error())
|
||||
}
|
||||
return &t
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
func (m *grafanaResourceMetaAccessor) SetUpdatedTimestampMillis(v int64) {
|
||||
@@ -348,17 +351,18 @@ func (m *grafanaResourceMetaAccessor) SetOriginInfo(info *ResourceOriginInfo) {
|
||||
m.obj.SetAnnotations(anno)
|
||||
}
|
||||
|
||||
func (m *grafanaResourceMetaAccessor) GetOriginInfo() *ResourceOriginInfo {
|
||||
func (m *grafanaResourceMetaAccessor) GetOriginInfo() (*ResourceOriginInfo, error) {
|
||||
v, ok := m.obj.GetAnnotations()[annoKeyOriginName]
|
||||
if !ok {
|
||||
return nil
|
||||
return nil, nil
|
||||
}
|
||||
t, err := m.GetOriginTimestamp()
|
||||
return &ResourceOriginInfo{
|
||||
Name: v,
|
||||
Path: m.GetOriginPath(),
|
||||
Key: m.GetOriginKey(),
|
||||
Timestamp: m.GetOriginTimestamp(),
|
||||
}
|
||||
Timestamp: t,
|
||||
}, err
|
||||
}
|
||||
|
||||
func (m *grafanaResourceMetaAccessor) GetOriginName() string {
|
||||
@@ -373,14 +377,14 @@ func (m *grafanaResourceMetaAccessor) GetOriginKey() string {
|
||||
return m.get(annoKeyOriginKey)
|
||||
}
|
||||
|
||||
func (m *grafanaResourceMetaAccessor) GetOriginTimestamp() *time.Time {
|
||||
func (m *grafanaResourceMetaAccessor) GetOriginTimestamp() (*time.Time, error) {
|
||||
v, ok := m.obj.GetAnnotations()[annoKeyOriginTimestamp]
|
||||
if !ok {
|
||||
return nil
|
||||
if !ok || v == "" {
|
||||
return nil, nil
|
||||
}
|
||||
t, err := time.Parse(time.RFC3339, v)
|
||||
if err != nil {
|
||||
return nil
|
||||
return nil, fmt.Errorf("invalid origin timestamp: %s", err.Error())
|
||||
}
|
||||
return &t
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ func getLegacyID(item *unstructured.Unstructured) int64 {
|
||||
meta := kinds.GrafanaResourceMetadata{
|
||||
Annotations: item.GetAnnotations(),
|
||||
}
|
||||
info := meta.GetOriginInfo()
|
||||
info, _ := meta.GetOriginInfo()
|
||||
if info != nil && info.Name == "SQL" {
|
||||
i, err := strconv.ParseInt(info.Key, 10, 64)
|
||||
if err == nil {
|
||||
|
||||
@@ -126,11 +126,19 @@ func resourceToEntity(key string, res runtime.Object, requestInfo *request.Reque
|
||||
Labels: metaAccessor.GetLabels(),
|
||||
}
|
||||
|
||||
if t := grafanaAccessor.GetUpdatedTimestamp(); t != nil {
|
||||
t, err := grafanaAccessor.GetUpdatedTimestamp()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if t != nil {
|
||||
rsp.UpdatedAt = t.UnixMilli()
|
||||
}
|
||||
|
||||
if t := grafanaAccessor.GetOriginTimestamp(); t != nil {
|
||||
t, err = grafanaAccessor.GetOriginTimestamp()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if t != nil {
|
||||
rsp.Origin.Time = t.UnixMilli()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user