blob: 07c38b58c73351651f683bd010956bbc3fab789b [file] [log] [blame]
package gerrit
import (
"fmt"
"net/url"
)
// DashboardSectionInfo entity contains information about a section in a dashboard.
type DashboardSectionInfo struct {
Name string `json:"name"`
Query string `json:"query"`
}
// DashboardInput entity contains information to create/update a project dashboard.
type DashboardInput struct {
ID string `json:"id,omitempty"`
CommitMessage string `json:"commit_message,omitempty"`
}
// DashboardInfo entity contains information about a project dashboard.
type DashboardInfo struct {
ID string `json:"id"`
Project string `json:"project"`
DefiningProject string `json:"defining_project"`
Ref string `json:"ref"`
Path string `json:"path"`
Description string `json:"description,omitempty"`
Foreach string `json:"foreach,omitempty"`
URL string `json:"url"`
Default bool `json:"default"`
Title string `json:"title,omitempty"`
Sections []DashboardSectionInfo `json:"sections"`
}
// ListDashboards list custom dashboards for a project.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#list-dashboards
func (s *ProjectsService) ListDashboards(projectName string) (*[]DashboardInfo, *Response, error) {
u := fmt.Sprintf("projects/%s/dashboards/", url.QueryEscape(projectName))
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new([]DashboardInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// GetDashboard list custom dashboards for a project.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#get-dashboard
func (s *ProjectsService) GetDashboard(projectName, dashboardName string) (*DashboardInfo, *Response, error) {
u := fmt.Sprintf("projects/%s/dashboards/%s", url.QueryEscape(projectName), url.QueryEscape(dashboardName))
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
v := new(DashboardInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// SetDashboard updates/Creates a project dashboard.
// Currently only supported for the default dashboard.
//
// The creation/update information for the dashboard must be provided in the request body as a DashboardInput entity.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#set-dashboard
func (s *ProjectsService) SetDashboard(projectName, dashboardID string, input *DashboardInput) (*DashboardInfo, *Response, error) {
u := fmt.Sprintf("projects/%s/dashboards/%s", url.QueryEscape(projectName), url.QueryEscape(dashboardID))
req, err := s.client.NewRequest("PUT", u, input)
if err != nil {
return nil, nil, err
}
v := new(DashboardInfo)
resp, err := s.client.Do(req, v)
if err != nil {
return nil, resp, err
}
return v, resp, err
}
// DeleteDashboard deletes a project dashboard.
// Currently only supported for the default dashboard.
//
// The request body does not need to include a DashboardInput entity if no commit message is specified.
// Please note that some proxies prohibit request bodies for DELETE requests.
//
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#delete-dashboard
func (s *ProjectsService) DeleteDashboard(projectName, dashboardID string, input *DashboardInput) (*Response, error) {
u := fmt.Sprintf("projects/%s/dashboards/%s", url.QueryEscape(projectName), url.QueryEscape(dashboardID))
return s.client.DeleteRequest(u, input)
}