Skip to content

Commit

Permalink
Merge pull request #206 from K-Phoen/dashboards-links
Browse files Browse the repository at this point in the history
Dashboards links
  • Loading branch information
K-Phoen committed Mar 12, 2023
2 parents cc6d9a1 + dbc8df6 commit 1b30229
Show file tree
Hide file tree
Showing 17 changed files with 195 additions and 44 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/K-Phoen/dark
go 1.19

require (
github.com/K-Phoen/grabana v0.21.13
github.com/K-Phoen/grabana v0.21.14
github.com/K-Phoen/sdk v0.12.0
github.com/go-logr/logr v1.2.3
github.com/onsi/ginkgo v1.16.5
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/K-Phoen/grabana v0.21.13 h1:JtvwhZonUOmOfSyNe16pG+5eJ723kZDX9E9vQ3jUzYY=
github.com/K-Phoen/grabana v0.21.13/go.mod h1:HDl99djdna5Auu7RcOgxE64HnvQ9UBIpqc+A2A5XnL8=
github.com/K-Phoen/grabana v0.21.14 h1:sosOZQ5APT4s08F6amqLEbv7b+//7YFyzSdWazIQPsQ=
github.com/K-Phoen/grabana v0.21.14/go.mod h1:HDl99djdna5Auu7RcOgxE64HnvQ9UBIpqc+A2A5XnL8=
github.com/K-Phoen/sdk v0.12.0 h1:+0QqHoDZbO6zetFMggM3zKF48GKRu744Ycc9w4oyY0E=
github.com/K-Phoen/sdk v0.12.0/go.mod h1:wp7qXARaIhCYktmoOjRZ+TDMlek5nbayC+waN7vigxI=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
Expand Down
26 changes: 26 additions & 0 deletions internal/pkg/converter/dashboardlink.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package converter

import (
grabana "github.com/K-Phoen/grabana/decoder"
"github.com/K-Phoen/sdk"
)

func (converter *JSON) convertDashboardLink(link sdk.Link) *grabana.DashboardInternalLink {
extLink := &grabana.DashboardInternalLink{
Title: link.Title,
Tags: link.Tags,
IncludeVariableValues: link.IncludeVars,
}

if link.AsDropdown != nil {
extLink.AsDropdown = *link.AsDropdown
}
if link.TargetBlank != nil {
extLink.OpenInNewTab = *link.TargetBlank
}
if link.KeepTime != nil {
extLink.IncludeTimeRange = *link.KeepTime
}

return extLink
}
32 changes: 32 additions & 0 deletions internal/pkg/converter/dashboardlink_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package converter

import (
"testing"

"github.com/K-Phoen/sdk"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)

func TestConvertDashboardLink(t *testing.T) {
req := require.New(t)

externalLink := sdk.Link{
Title: "joe",
Tags: []string{"my-service"},
Type: "dashboards",
IncludeVars: true,
AsDropdown: boolPtr(true),
KeepTime: boolPtr(true),
TargetBlank: boolPtr(true),
}
converter := NewJSON(zap.NewNop())
link := converter.convertDashboardLink(externalLink)

req.Equal("joe", link.Title)
req.ElementsMatch([]string{"my-service"}, link.Tags)
req.True(link.OpenInNewTab)
req.True(link.IncludeTimeRange)
req.True(link.AsDropdown)
req.True(link.IncludeVariableValues)
}
16 changes: 0 additions & 16 deletions internal/pkg/converter/externallink.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,7 @@ import (
"go.uber.org/zap"
)

func (converter *JSON) convertExternalLinks(links []sdk.Link, dashboard *grabana.DashboardModel) {
for _, link := range links {
extLink := converter.convertExternalLink(link)
if extLink == nil {
continue
}

dashboard.ExternalLinks = append(dashboard.ExternalLinks, *extLink)
}
}

func (converter *JSON) convertExternalLink(link sdk.Link) *grabana.DashboardExternalLink {
if link.Type != "link" {
converter.logger.Warn("unhandled link type: skipped", zap.String("type", link.Type), zap.String("title", link.Title))
return nil
}

if link.URL == nil || *link.URL == "" {
converter.logger.Warn("link URL empty: skipped", zap.String("title", link.Title))
return nil
Expand Down
13 changes: 1 addition & 12 deletions internal/pkg/converter/externallink_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package converter
import (
"testing"

grabana "github.com/K-Phoen/grabana/decoder"
"github.com/K-Phoen/sdk"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
Expand All @@ -22,18 +21,8 @@ func TestConvertExternalLink(t *testing.T) {
Tooltip: strPtr("description"),
URL: strPtr("http://lala"),
}
dashLink := sdk.Link{
Title: "not link",
}

converter := NewJSON(zap.NewNop())

dashboard := &grabana.DashboardModel{}
converter.convertExternalLinks([]sdk.Link{externalLink, dashLink}, dashboard)

req.Len(dashboard.ExternalLinks, 1)

link := dashboard.ExternalLinks[0]
link := converter.convertExternalLink(externalLink)

req.Equal("joe", link.Title)
req.Equal("description", link.Description)
Expand Down
25 changes: 24 additions & 1 deletion internal/pkg/converter/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,12 +119,35 @@ func (converter *JSON) parseInput(input io.Reader) (*grabana.DashboardModel, err
converter.convertGeneralSettings(board, dashboard)
converter.convertVariables(board.Templating.List, dashboard)
converter.convertAnnotations(board.Annotations.List, dashboard)
converter.convertExternalLinks(board.Links, dashboard)
converter.convertLinks(board.Links, dashboard)
converter.convertPanels(board.Panels, dashboard)

return dashboard, nil
}

func (converter *JSON) convertLinks(links []sdk.Link, dashboard *grabana.DashboardModel) {
for _, link := range links {
switch link.Type {
case "link":
extLink := converter.convertExternalLink(link)
if extLink == nil {
continue
}

dashboard.ExternalLinks = append(dashboard.ExternalLinks, *extLink)
case "dashboards":
dashLink := converter.convertDashboardLink(link)
if dashLink == nil {
continue
}

dashboard.DashboardLinks = append(dashboard.DashboardLinks, *dashLink)
default:
converter.logger.Warn("unhandled link type: skipped", zap.String("type", link.Type), zap.String("title", link.Title))
}
}
}

func (converter *JSON) convertGeneralSettings(board *sdk.Board, dashboard *grabana.DashboardModel) {
dashboard.Title = board.Title
dashboard.SharedCrosshair = board.SharedCrosshair
Expand Down
28 changes: 28 additions & 0 deletions internal/pkg/converter/json_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,34 @@ func TestConvertGeneralSettings(t *testing.T) {
req.True(dashboard.SharedCrosshair)
}

func TestConvertLinks(t *testing.T) {
req := require.New(t)

links := []sdk.Link{
{
Title: "ext link",
Type: "link",
URL: strPtr("https://foo"),
},
{
Title: "dash link",
Type: "dashboards",
Tags: []string{"foo"},
},
{
Title: "some link",
Type: "unknown",
},
}

converter := NewJSON(zap.NewNop())
dashboard := &grabana.DashboardModel{}
converter.convertLinks(links, dashboard)

req.Equal(1, len(dashboard.DashboardLinks))
req.Equal(1, len(dashboard.ExternalLinks))
}

func strPtr(input string) *string {
return &input
}
Expand Down
2 changes: 1 addition & 1 deletion vendor/github.com/K-Phoen/grabana/Makefile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion vendor/github.com/K-Phoen/grabana/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions vendor/github.com/K-Phoen/grabana/client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 14 additions & 2 deletions vendor/github.com/K-Phoen/grabana/dashboard/dashboard.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 25 additions & 1 deletion vendor/github.com/K-Phoen/grabana/dashboard/link.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions vendor/github.com/K-Phoen/grabana/decoder/dashboard.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions vendor/github.com/K-Phoen/grabana/decoder/dashboardlink.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions vendor/github.com/K-Phoen/grabana/decoder/row.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# github.com/K-Phoen/grabana v0.21.13
# github.com/K-Phoen/grabana v0.21.14
## explicit; go 1.19
github.com/K-Phoen/grabana
github.com/K-Phoen/grabana/alert
Expand Down

0 comments on commit 1b30229

Please sign in to comment.