Skip to content
This repository has been archived by the owner on Dec 10, 2024. It is now read-only.

Commit

Permalink
Tweak new DORA metrics code
Browse files Browse the repository at this point in the history
  • Loading branch information
svanharmelen committed May 5, 2024
1 parent bd2b78d commit 0e45c6f
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 37 deletions.
38 changes: 26 additions & 12 deletions dora_metrics.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,34 @@
//
// 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 (
"fmt"
"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
Expand All @@ -25,24 +49,16 @@ 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"`

// Deprecated, use environment tiers instead
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:
Expand All @@ -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)
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions dora_metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
})
Expand Down Expand Up @@ -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,
})
Expand Down
49 changes: 26 additions & 23 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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:
Expand All @@ -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)
}
Expand All @@ -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:
Expand All @@ -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)
}
Expand All @@ -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:
Expand All @@ -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)
}
Expand Down Expand Up @@ -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 (
Expand All @@ -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 (
Expand All @@ -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"
Expand All @@ -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 (
Expand All @@ -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.
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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"
)

Expand Down

0 comments on commit 0e45c6f

Please sign in to comment.