From 0e45c6f6894dc34910745f0ee034c78e49aaaef1 Mon Sep 17 00:00:00 2001 From: Sander van Harmelen Date: Sun, 5 May 2024 11:36:22 +0200 Subject: [PATCH] Tweak new DORA metrics code --- dora_metrics.go | 38 +++++++++++++++++++++++----------- dora_metrics_test.go | 4 ++-- types.go | 49 +++++++++++++++++++++++--------------------- 3 files changed, 54 insertions(+), 37 deletions(-) diff --git a/dora_metrics.go b/dora_metrics.go index 769171d7a..a2ad418eb 100644 --- a/dora_metrics.go +++ b/dora_metrics.go @@ -1,3 +1,19 @@ +// +// Copyright 2021, Sander van Harmelen +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + package gitlab import ( @@ -5,6 +21,14 @@ import ( "net/http" ) +// DORAMetricsService handles communication with the DORA metrics related methods +// of the GitLab API. +// +// Gitlab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html +type DORAMetricsService struct { + client *Client +} + // DORAMetric represents a single DORA metric data point. // // Gitlab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html @@ -25,9 +49,9 @@ func (m DORAMetric) String() string { // // GitLab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html type GetDORAMetricsOptions struct { - Metric DORAMetricType `url:"metric,omitempty" json:"metric,omitempty"` + Metric *DORAMetricType `url:"metric,omitempty" json:"metric,omitempty"` EndDate *ISOTime `url:"end_date,omitempty" json:"end_date,omitempty"` - EnvironmentTiers *[]string `url:"environment_tiers,omitempty" del:"," json:"environment_tiers,omitempty"` + EnvironmentTiers *[]string `url:"environment_tiers,comma,omitempty" json:"environment_tiers,omitempty"` Interval *DORAMetricInterval `url:"interval,omitempty" json:"interval,omitempty"` StartDate *ISOTime `url:"start_date,omitempty" json:"start_date,omitempty"` @@ -35,14 +59,6 @@ type GetDORAMetricsOptions struct { EnvironmentTier *string `url:"environment_tier,omitempty" json:"environment_tier,omitempty"` } -// DORAMetricsService handles communication with the DORA metrics related methods -// of the GitLab API -// -// Gitlab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html -type DORAMetricsService struct { - client *Client -} - // GetProjectDORAMetrics gets the DORA metrics for a project. // // GitLab API Docs: @@ -52,7 +68,6 @@ func (s *DORAMetricsService) GetProjectDORAMetrics(pid interface{}, opt GetDORAM if err != nil { return nil, nil, err } - u := fmt.Sprintf("projects/%s/dora/metrics", PathEscape(project)) req, err := s.client.NewRequest(http.MethodGet, u, opt, options) @@ -78,7 +93,6 @@ func (s *DORAMetricsService) GetGroupDORAMetrics(gid interface{}, opt GetDORAMet if err != nil { return nil, nil, err } - u := fmt.Sprintf("groups/%s/dora/metrics", PathEscape(group)) req, err := s.client.NewRequest(http.MethodGet, u, opt, options) diff --git a/dora_metrics_test.go b/dora_metrics_test.go index 3e7414b6a..4e6ec0952 100644 --- a/dora_metrics_test.go +++ b/dora_metrics_test.go @@ -54,7 +54,7 @@ func TestDORAMetrics_GetProjectDORAMetrics(t *testing.T) { endDate := ISOTime(time.Date(2021, time.March, 8, 0, 0, 0, 0, time.UTC)) d, resp, err := client.DORAMetrics.GetProjectDORAMetrics(1, GetDORAMetricsOptions{ - Metric: DORAMetricDeploymentFrequency, + Metric: Ptr(DORAMetricDeploymentFrequency), StartDate: &startDate, EndDate: &endDate, }) @@ -108,7 +108,7 @@ func TestDORAMetrics_GetGroupDORAMetrics(t *testing.T) { endDate := ISOTime(time.Date(2021, time.March, 8, 0, 0, 0, 0, time.UTC)) d, resp, err := client.DORAMetrics.GetGroupDORAMetrics(1, GetDORAMetricsOptions{ - Metric: DORAMetricDeploymentFrequency, + Metric: Ptr(DORAMetricDeploymentFrequency), StartDate: &startDate, EndDate: &endDate, }) diff --git a/types.go b/types.go index 9e477c040..c87c248e5 100644 --- a/types.go +++ b/types.go @@ -62,7 +62,7 @@ func AccessControl(v AccessControlValue) *AccessControlValue { // GitLab API docs: https://docs.gitlab.com/ee/user/permissions.html type AccessLevelValue int -// List of available access levels +// List of available access levels. // // GitLab API docs: https://docs.gitlab.com/ee/user/permissions.html const ( @@ -113,7 +113,7 @@ func ApproverIDs(v interface{}) *ApproverIDsValue { } } -// EncodeValues implements the query.Encoder interface +// EncodeValues implements the query.Encoder interface. func (a *ApproverIDsValue) EncodeValues(key string, v *url.Values) error { switch value := a.value.(type) { case UserIDValue: @@ -128,12 +128,12 @@ func (a *ApproverIDsValue) EncodeValues(key string, v *url.Values) error { return nil } -// MarshalJSON implements the json.Marshaler interface +// MarshalJSON implements the json.Marshaler interface. func (a ApproverIDsValue) MarshalJSON() ([]byte, error) { return json.Marshal(a.value) } -// UnmarshalJSON implements the json.Unmarshaler interface +// UnmarshalJSON implements the json.Unmarshaler interface. func (a *ApproverIDsValue) UnmarshalJSON(bytes []byte) error { return json.Unmarshal(bytes, a.value) } @@ -153,7 +153,7 @@ func AssigneeID(v interface{}) *AssigneeIDValue { } } -// EncodeValues implements the query.Encoder interface +// EncodeValues implements the query.Encoder interface. func (a *AssigneeIDValue) EncodeValues(key string, v *url.Values) error { switch value := a.value.(type) { case UserIDValue: @@ -164,12 +164,12 @@ func (a *AssigneeIDValue) EncodeValues(key string, v *url.Values) error { return nil } -// MarshalJSON implements the json.Marshaler interface +// MarshalJSON implements the json.Marshaler interface. func (a AssigneeIDValue) MarshalJSON() ([]byte, error) { return json.Marshal(a.value) } -// UnmarshalJSON implements the json.Unmarshaler interface +// UnmarshalJSON implements the json.Unmarshaler interface. func (a *AssigneeIDValue) UnmarshalJSON(bytes []byte) error { return json.Unmarshal(bytes, a.value) } @@ -189,7 +189,7 @@ func ReviewerID(v interface{}) *ReviewerIDValue { } } -// EncodeValues implements the query.Encoder interface +// EncodeValues implements the query.Encoder interface. func (a *ReviewerIDValue) EncodeValues(key string, v *url.Values) error { switch value := a.value.(type) { case UserIDValue: @@ -200,12 +200,12 @@ func (a *ReviewerIDValue) EncodeValues(key string, v *url.Values) error { return nil } -// MarshalJSON implements the json.Marshaler interface +// MarshalJSON implements the json.Marshaler interface. func (a ReviewerIDValue) MarshalJSON() ([]byte, error) { return json.Marshal(a.value) } -// UnmarshalJSON implements the json.Unmarshaler interface +// UnmarshalJSON implements the json.Unmarshaler interface. func (a *ReviewerIDValue) UnmarshalJSON(bytes []byte) error { return json.Unmarshal(bytes, a.value) } @@ -285,12 +285,12 @@ func DeploymentStatus(v DeploymentStatusValue) *DeploymentStatusValue { return Ptr(v) } -// DORAMetricType represents the name of the four types of metric in DORA +// DORAMetricType represents all valid DORA metrics types. // // GitLab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html type DORAMetricType string -// List of available DORA metric type names +// List of available DORA metric type names. // // GitLab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html const ( @@ -301,12 +301,12 @@ const ( ) // DORAMetricInterval represents the time period over which the -// metrics are aggregated +// metrics are aggregated. // // GitLab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html type DORAMetricInterval string -// List of available DORA metric interval types +// List of available DORA metric interval types. // // GitLab API docs: https://docs.gitlab.com/ee/api/dora/metrics.html const ( @@ -315,12 +315,13 @@ const ( DORAMetricIntervalAll DORAMetricInterval = "all" ) -// EventTypeValue represents actions type for contribution events +// EventTypeValue represents actions type for contribution events. type EventTypeValue string -// List of available action type +// List of available action type. // -// GitLab API docs: https://docs.gitlab.com/ee/user/profile/contributions_calendar.html#user-contribution-events +// GitLab API docs: +// https://docs.gitlab.com/ee/user/profile/contributions_calendar.html#user-contribution-events const ( CreatedEventType EventTypeValue = "created" UpdatedEventType EventTypeValue = "updated" @@ -335,10 +336,10 @@ const ( ExpiredEventType EventTypeValue = "expired" ) -// EventTargetTypeValue represents actions type value for contribution events +// EventTargetTypeValue represents actions type value for contribution events. type EventTargetTypeValue string -// List of available action type +// List of available action type. // // GitLab API docs: https://docs.gitlab.com/ee/api/events.html#target-types const ( @@ -353,7 +354,8 @@ const ( // FileActionValue represents the available actions that can be performed on a file. // -// GitLab API docs: https://docs.gitlab.com/ee/api/commits.html#create-a-commit-with-multiple-files-and-actions +// GitLab API docs: +// https://docs.gitlab.com/ee/api/commits.html#create-a-commit-with-multiple-files-and-actions type FileActionValue string // The available file actions. @@ -409,7 +411,7 @@ func GenericPackageStatus(v GenericPackageStatusValue) *GenericPackageStatusValu // ISOTime represents an ISO 8601 formatted date. type ISOTime time.Time -// ISO 8601 date format +// ISO 8601 date format. const iso8601 = "2006-01-02" // ParseISOTime parses an ISO 8601 formatted date. @@ -487,7 +489,7 @@ func (l *LabelOptions) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, (*alias)(l)) } -// EncodeValues implements the query.EncodeValues interface +// EncodeValues implements the query.EncodeValues interface. func (l *LabelOptions) EncodeValues(key string, v *url.Values) error { v.Set(key, strings.Join(*l, ",")) return nil @@ -684,7 +686,8 @@ const ( DisabledAndOverridableSharedRunnersSettingValue SharedRunnersSettingValue = "disabled_and_overridable" DisabledAndUnoverridableSharedRunnersSettingValue SharedRunnersSettingValue = "disabled_and_unoverridable" - // Deprecated: DisabledWithOverrideSharedRunnersSettingValue is deprecated in favor of DisabledAndOverridableSharedRunnersSettingValue + // Deprecated: DisabledWithOverrideSharedRunnersSettingValue is deprecated + // in favor of DisabledAndOverridableSharedRunnersSettingValue. DisabledWithOverrideSharedRunnersSettingValue SharedRunnersSettingValue = "disabled_with_override" )