From 4d2e04cb96eafff1def86bc477c23c04bbb03ad0 Mon Sep 17 00:00:00 2001 From: Chen Keinan Date: Sun, 15 Feb 2026 16:02:20 +0200 Subject: [PATCH 1/3] feat: feat: get dynamic dashboard item Signed-off-by: Chen Keinan --- pkg/dashboard/dashboard_service.go | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/pkg/dashboard/dashboard_service.go b/pkg/dashboard/dashboard_service.go index d7991b06..d5d3d130 100644 --- a/pkg/dashboard/dashboard_service.go +++ b/pkg/dashboard/dashboard_service.go @@ -1,8 +1,12 @@ package dashboard import ( + "github.com/OctopusDeploy/go-octopusdeploy/v2/internal" "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/constants" + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/newclient" + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources" "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/services" + "github.com/OctopusDeploy/go-octopusdeploy/v2/uritemplates" "github.com/dghubble/sling" ) @@ -12,9 +16,39 @@ type DashboardService struct { services.Service } +const ( + dashboardDynamicTemplate = "/api/{spaceId}/dashboard/dynamic{?projects,environments,includePrevious}" +) + + func NewDashboardService(sling *sling.Sling, uriTemplate string, dashboardDynamicPath string) *DashboardService { return &DashboardService{ dashboardDynamicPath: dashboardDynamicPath, Service: services.NewService(constants.ServiceDashboardService, sling, uriTemplate), } } + +func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQuery DashboardQuery) (*resources.Resources[*DashboardItem], error) { + spaceID, err := internal.GetSpaceID(spaceID, client.GetSpaceID()) + if err != nil { + return nil, err + } + + values, _ := uritemplates.Struct2map(dashboardQuery) + if values == nil { + values = map[string]any{} + } + values["spaceId"] = spaceID + + expandedUri, err := client.URITemplateCache().Expand(dashboardDynamicTemplate, values) + if err != nil { + return nil, err + } + + resp, err := newclient.Get[resources.Resources[*DashboardItem]](client.HttpSession(), expandedUri) + if err != nil { + return &resources.Resources[*DashboardItem]{}, err + } + + return resp, nil +} From 9a62c81f4a63708ef4f8f7c60405e04579a4944f Mon Sep 17 00:00:00 2001 From: Chen Keinan Date: Sun, 15 Feb 2026 16:11:05 +0200 Subject: [PATCH 2/3] feat: feat: get dynamic dashboard item Signed-off-by: Chen Keinan --- pkg/dashboard/dashboard_service.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/dashboard/dashboard_service.go b/pkg/dashboard/dashboard_service.go index d5d3d130..4c7a33f6 100644 --- a/pkg/dashboard/dashboard_service.go +++ b/pkg/dashboard/dashboard_service.go @@ -28,7 +28,7 @@ func NewDashboardService(sling *sling.Sling, uriTemplate string, dashboardDynami } } -func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQuery DashboardQuery) (*resources.Resources[*DashboardItem], error) { +func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQuery DashboardDynamicQuery) (*resources.Resources[*DashboardDynamicQuery], error) { spaceID, err := internal.GetSpaceID(spaceID, client.GetSpaceID()) if err != nil { return nil, err @@ -45,9 +45,9 @@ func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQu return nil, err } - resp, err := newclient.Get[resources.Resources[*DashboardItem]](client.HttpSession(), expandedUri) + resp, err := newclient.Get[resources.Resources[*DashboardDynamicQuery]](client.HttpSession(), expandedUri) if err != nil { - return &resources.Resources[*DashboardItem]{}, err + return &resources.Resources[*DashboardDynamicQuery]{}, err } return resp, nil From f0761d37b8a3137405b59ce603930ca3b59762f1 Mon Sep 17 00:00:00 2001 From: Chen Keinan Date: Sun, 15 Feb 2026 16:12:26 +0200 Subject: [PATCH 3/3] feat: feat: get dynamic dashboard item Signed-off-by: Chen Keinan --- pkg/dashboard/dashboard_service.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/dashboard/dashboard_service.go b/pkg/dashboard/dashboard_service.go index 4c7a33f6..c45df2da 100644 --- a/pkg/dashboard/dashboard_service.go +++ b/pkg/dashboard/dashboard_service.go @@ -28,7 +28,7 @@ func NewDashboardService(sling *sling.Sling, uriTemplate string, dashboardDynami } } -func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQuery DashboardDynamicQuery) (*resources.Resources[*DashboardDynamicQuery], error) { +func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQuery DashboardDynamicQuery) (*resources.Resources[*DashboardItem], error) { spaceID, err := internal.GetSpaceID(spaceID, client.GetSpaceID()) if err != nil { return nil, err @@ -45,9 +45,9 @@ func GetDynamicDashboardItem(client newclient.Client,spaceID string, dashboardQu return nil, err } - resp, err := newclient.Get[resources.Resources[*DashboardDynamicQuery]](client.HttpSession(), expandedUri) + resp, err := newclient.Get[resources.Resources[*DashboardItem]](client.HttpSession(), expandedUri) if err != nil { - return &resources.Resources[*DashboardDynamicQuery]{}, err + return &resources.Resources[*DashboardItem]{}, err } return resp, nil