Skip to content

Commit bad92cc

Browse files
committed
refactor(constants, utils): extract reusable methods and constants for deployment metrics handling
1 parent 893307f commit bad92cc

3 files changed

Lines changed: 46 additions & 37 deletions

File tree

lens/pkg/DeploymentMetricService.go

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,14 @@
1717
package pkg
1818

1919
import (
20-
"fmt"
21-
"time"
22-
2320
"github.com/devtron-labs/common-lib/utils"
2421
"github.com/devtron-labs/lens/internal/dto"
2522
"github.com/devtron-labs/lens/internal/sql"
23+
"github.com/devtron-labs/lens/pkg/constants"
24+
utils2 "github.com/devtron-labs/lens/pkg/utils"
2625
"go.uber.org/zap"
2726
)
2827

29-
const (
30-
layout = "2006-01-02T15:04:05.000Z"
31-
)
32-
3328
type DeploymentMetricService interface {
3429
GetDeploymentMetrics(request *dto.MetricRequest) (*dto.Metrics, error)
3530
GetBulkDeploymentMetrics(request *dto.BulkMetricRequest) (*dto.BulkMetricsResponse, error)
@@ -56,7 +51,7 @@ func NewDeploymentMetricServiceImpl(
5651
}
5752

5853
func (impl DeploymentMetricServiceImpl) GetDeploymentMetrics(request *dto.MetricRequest) (*dto.Metrics, error) {
59-
from, to, err := impl.parseDateRange(request.From, request.To)
54+
from, to, err := utils2.ParseDateRange(request.From, request.To)
6055
if err != nil {
6156
return nil, err
6257
}
@@ -68,7 +63,7 @@ func (impl DeploymentMetricServiceImpl) GetDeploymentMetrics(request *dto.Metric
6863
}
6964

7065
if len(releases) == 0 {
71-
return impl.createEmptyMetrics(), nil
66+
return utils2.CreateEmptyMetrics(), nil
7267
}
7368
var releaseIds []int
7469
for _, v := range releases {
@@ -117,7 +112,7 @@ func (impl DeploymentMetricServiceImpl) GetBulkDeploymentMetrics(request *dto.Bu
117112
}
118113

119114
func (impl DeploymentMetricServiceImpl) getBulkDeploymentMetricsWithBulkQueries(request *dto.BulkMetricRequest, response *dto.BulkMetricsResponse) (*dto.BulkMetricsResponse, error) {
120-
from, to, err := impl.parseDateRange(request.From, request.To)
115+
from, to, err := utils2.ParseDateRange(request.From, request.To)
121116
if err != nil {
122117
impl.logger.Errorw("error parsing date range", "from", request.From, "to", request.To, "err", err)
123118
return nil, err
@@ -135,7 +130,7 @@ func (impl DeploymentMetricServiceImpl) getBulkDeploymentMetricsWithBulkQueries(
135130
var allReleaseIds []int
136131

137132
for _, release := range allReleases {
138-
key := impl.generateAppEnvKey(release.AppId, release.EnvironmentId)
133+
key := utils2.GenerateAppEnvKey(release.AppId, release.EnvironmentId)
139134
releasesByAppEnv[key] = append(releasesByAppEnv[key], release)
140135
allReleaseIds = append(allReleaseIds, release.Id)
141136
}
@@ -167,7 +162,7 @@ func (impl DeploymentMetricServiceImpl) getBulkDeploymentMetricsWithBulkQueries(
167162

168163
// Step 5: Process each app-env pair
169164
for i, pair := range request.AppEnvPairs {
170-
key := impl.generateAppEnvKey(pair.AppId, pair.EnvId)
165+
key := utils2.GenerateAppEnvKey(pair.AppId, pair.EnvId)
171166
releases := releasesByAppEnv[key]
172167

173168
appEnvMetric := dto.AppEnvMetrics{
@@ -176,7 +171,7 @@ func (impl DeploymentMetricServiceImpl) getBulkDeploymentMetricsWithBulkQueries(
176171
}
177172

178173
if len(releases) == 0 {
179-
appEnvMetric.Metrics = impl.createEmptyMetrics()
174+
appEnvMetric.Metrics = utils2.CreateEmptyMetrics()
180175
} else {
181176
metrics, err := impl.processAppEnvMetrics(releases, allMaterials, allLeadTimes, previousReleases[key])
182177
if err != nil {
@@ -193,29 +188,6 @@ func (impl DeploymentMetricServiceImpl) getBulkDeploymentMetricsWithBulkQueries(
193188
return response, nil
194189
}
195190

196-
// parseDateRange parses from and to date strings
197-
func (impl DeploymentMetricServiceImpl) parseDateRange(from, to string) (time.Time, time.Time, error) {
198-
fromTime, err := time.Parse(layout, from)
199-
if err != nil {
200-
return time.Time{}, time.Time{}, err
201-
}
202-
toTime, err := time.Parse(layout, to)
203-
if err != nil {
204-
return time.Time{}, time.Time{}, err
205-
}
206-
return fromTime, toTime, nil
207-
}
208-
209-
// generateAppEnvKey creates a consistent key for app-env pair mapping
210-
func (impl DeploymentMetricServiceImpl) generateAppEnvKey(appId, envId int) string {
211-
return fmt.Sprintf("%d-%d", appId, envId)
212-
}
213-
214-
// createEmptyMetrics creates an empty metrics response
215-
func (impl DeploymentMetricServiceImpl) createEmptyMetrics() *dto.Metrics {
216-
return &dto.Metrics{Series: []*dto.Metric{}}
217-
}
218-
219191
// processAppEnvMetrics processes metrics for a single app-env pair
220192
func (impl DeploymentMetricServiceImpl) processAppEnvMetrics(releases []sql.AppRelease, allMaterials []*sql.PipelineMaterial, allLeadTimes []sql.LeadTime, previousRelease *sql.AppRelease) (*dto.Metrics, error) {
221193
releaseIds := make([]int, len(releases))
@@ -325,7 +297,7 @@ func (impl DeploymentMetricServiceImpl) calculateChangeFailureRateAndRecoveryTim
325297
for _, v := range releases {
326298
if v.ReleaseStatus == dto.Failure {
327299
if metrics.LastFailedTime == "" {
328-
metrics.LastFailedTime = v.ReleaseTime.Format(layout)
300+
metrics.LastFailedTime = v.ReleaseTime.Format(constants.Layout)
329301
}
330302
//if i != 0 {
331303
// releases[i].RecoveryTime = releases[i].ReleaseTime.Sub(releases[i+1].ReleaseTime)

lens/pkg/constants/constants.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package constants
2+
3+
const (
4+
Layout = "2006-01-02T15:04:05.000Z"
5+
)

lens/pkg/utils/utils.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package utils
2+
3+
import (
4+
"fmt"
5+
"time"
6+
7+
"github.com/devtron-labs/lens/internal/dto"
8+
"github.com/devtron-labs/lens/pkg/constants"
9+
)
10+
11+
// ParseDateRange parses from and to date strings
12+
func ParseDateRange(from, to string) (time.Time, time.Time, error) {
13+
fromTime, err := time.Parse(constants.Layout, from)
14+
if err != nil {
15+
return time.Time{}, time.Time{}, err
16+
}
17+
toTime, err := time.Parse(constants.Layout, to)
18+
if err != nil {
19+
return time.Time{}, time.Time{}, err
20+
}
21+
return fromTime, toTime, nil
22+
}
23+
24+
// GenerateAppEnvKey creates a consistent key for app-env pair mapping
25+
func GenerateAppEnvKey(appId, envId int) string {
26+
return fmt.Sprintf("%d-%d", appId, envId)
27+
}
28+
29+
// CreateEmptyMetrics creates an empty metrics response
30+
func CreateEmptyMetrics() *dto.Metrics {
31+
return &dto.Metrics{Series: []*dto.Metric{}}
32+
}

0 commit comments

Comments
 (0)