Skip to content

Commit 1b395a1

Browse files
feat: Provide description for Chart Types (#2585)
* chart description provided with the api call * added code to provide chart description with the api call * refined the code for poviding chart description * mitigated nil pointer exception in ChartService * refactoring * changes in sql files Co-authored-by: Manish Agrawal <[email protected]>
1 parent 8099445 commit 1b395a1

File tree

5 files changed

+66
-10
lines changed

5 files changed

+66
-10
lines changed

api/restHandler/BatchOperationRestHandler_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
package restHandler
1919

2020
import (
21-
"github.com/devtron-labs/devtron/pkg/apis/devtron/v1"
2221
"testing"
22+
23+
v1 "github.com/devtron-labs/devtron/pkg/apis/devtron/v1"
2324
)
2425

2526
func Test_validatePipeline(t *testing.T) {
@@ -82,3 +83,4 @@ func Test_validatePipeline(t *testing.T) {
8283
}
8384
})
8485
}
86+
}

pkg/chart/ChartService.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,15 @@ import (
2222
"context"
2323
"encoding/json"
2424
"fmt"
25+
2526
"github.com/devtron-labs/devtron/internal/constants"
27+
2628
//"github.com/devtron-labs/devtron/pkg/pipeline"
2729

2830
"github.com/devtron-labs/devtron/internal/sql/repository/app"
2931
chartRepoRepository "github.com/devtron-labs/devtron/pkg/chartRepo/repository"
3032
"github.com/devtron-labs/devtron/pkg/pipeline/history"
3133

32-
repository4 "github.com/devtron-labs/devtron/pkg/cluster/repository"
33-
"github.com/devtron-labs/devtron/pkg/sql"
34-
dirCopy "github.com/otiai10/copy"
3534
"io/ioutil"
3635
"net/http"
3736
"os"
@@ -41,6 +40,10 @@ import (
4140
"strings"
4241
"time"
4342

43+
repository4 "github.com/devtron-labs/devtron/pkg/cluster/repository"
44+
"github.com/devtron-labs/devtron/pkg/sql"
45+
dirCopy "github.com/otiai10/copy"
46+
4447
repository2 "github.com/argoproj/argo-cd/v2/pkg/apiclient/repository"
4548
"github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
4649
"github.com/devtron-labs/devtron/client/argocdServer/repository"
@@ -951,11 +954,16 @@ type chartRef struct {
951954
UserUploaded bool `json:"userUploaded"`
952955
}
953956

957+
type ChartRefMetaData struct {
958+
ChartDescription string `json:"chartDescription"`
959+
}
960+
954961
type chartRefResponse struct {
955-
ChartRefs []chartRef `json:"chartRefs"`
956-
LatestChartRef int `json:"latestChartRef"`
957-
LatestAppChartRef int `json:"latestAppChartRef"`
958-
LatestEnvChartRef int `json:"latestEnvChartRef,omitempty"`
962+
ChartRefs []chartRef `json:"chartRefs"`
963+
LatestChartRef int `json:"latestChartRef"`
964+
LatestAppChartRef int `json:"latestAppChartRef"`
965+
LatestEnvChartRef int `json:"latestEnvChartRef,omitempty"`
966+
ChartsMetadata map[string]ChartRefMetaData `json:"chartMetadata"` // chartName vs Metadata
959967
}
960968

961969
type ChartYamlStruct struct {
@@ -995,14 +1003,28 @@ func (impl ChartServiceImpl) ChartRefAutocomplete() ([]chartRef, error) {
9951003
}
9961004

9971005
func (impl ChartServiceImpl) ChartRefAutocompleteForAppOrEnv(appId int, envId int) (*chartRefResponse, error) {
998-
chartRefResponse := &chartRefResponse{}
1006+
chartRefResponse := &chartRefResponse{
1007+
ChartsMetadata: make(map[string]ChartRefMetaData),
1008+
}
9991009
var chartRefs []chartRef
1010+
10001011
results, err := impl.chartRefRepository.GetAll()
10011012
if err != nil {
10021013
impl.logger.Errorw("error in fetching chart config", "err", err)
10031014
return chartRefResponse, err
10041015
}
10051016

1017+
resultsMetadata, err := impl.chartRefRepository.GetAllChartMetadata()
1018+
if err != nil {
1019+
impl.logger.Errorw("error in fetching chart metadata", "err", err)
1020+
return chartRefResponse, err
1021+
}
1022+
for _, resultMetadata := range resultsMetadata {
1023+
chartRefMetadata := ChartRefMetaData{
1024+
ChartDescription: resultMetadata.ChartDescription,
1025+
}
1026+
chartRefResponse.ChartsMetadata[resultMetadata.ChartName] = chartRefMetadata
1027+
}
10061028
var LatestAppChartRef int
10071029
for _, result := range results {
10081030
if len(result.Name) == 0 {
@@ -1013,6 +1035,7 @@ func (impl ChartServiceImpl) ChartRefAutocompleteForAppOrEnv(appId int, envId in
10131035
LatestAppChartRef = result.Id
10141036
}
10151037
}
1038+
10161039
chart, err := impl.chartRepository.FindLatestChartForAppByAppId(appId)
10171040
if err != nil && err != pg.ErrNoRows {
10181041
impl.logger.Errorw("error in fetching latest chart", "err", err)

pkg/chartRepo/repository/ChartRepoRepository.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818
package chartRepoRepository
1919

2020
import (
21+
"strings"
22+
2123
"github.com/devtron-labs/devtron/internal/sql/models"
2224
"github.com/devtron-labs/devtron/internal/sql/repository"
2325
"github.com/devtron-labs/devtron/pkg/sql"
2426
"github.com/go-pg/pg"
25-
"strings"
2627
)
2728

2829
type Chart struct {
@@ -334,11 +335,18 @@ type ChartRef struct {
334335
sql.AuditLog
335336
}
336337

338+
type ChartRefMetaData struct {
339+
tableName struct{} `sql:"chart_ref_metadata" pg:",discard_unknown_columns"`
340+
ChartName string `sql:"chart_name,pk"`
341+
ChartDescription string `sql:"chart_description"`
342+
}
343+
337344
type ChartRefRepository interface {
338345
Save(chartRepo *ChartRef) error
339346
GetDefault() (*ChartRef, error)
340347
FindById(id int) (*ChartRef, error)
341348
GetAll() ([]*ChartRef, error)
349+
GetAllChartMetadata() ([]*ChartRefMetaData, error)
342350
FindByVersionAndName(name, version string) (*ChartRef, error)
343351
CheckIfDataExists(name string, version string) (bool, error)
344352
FetchChart(name string) ([]*ChartRef, error)
@@ -397,6 +405,12 @@ func (impl ChartRefRepositoryImpl) GetAll() ([]*ChartRef, error) {
397405
return chartRefs, err
398406
}
399407

408+
func (impl ChartRefRepositoryImpl) GetAllChartMetadata() ([]*ChartRefMetaData, error) {
409+
var chartRefMetaDatas []*ChartRefMetaData
410+
err := impl.dbConnection.Model(&chartRefMetaDatas).Select()
411+
return chartRefMetaDatas, err
412+
}
413+
400414
func (impl ChartRefRepositoryImpl) CheckIfDataExists(name string, version string) (bool, error) {
401415
repo := &ChartRef{}
402416
return impl.dbConnection.Model(repo).
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DROP TABLE "public"."chart_ref_metadata" CASCADE;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-- Table Definition
2+
CREATE TABLE "public"."chart_ref_metadata" (
3+
"chart_name" varchar(100) NOT NULL,
4+
"chart_description" text NOT NULL,
5+
PRIMARY KEY ("chart_name")
6+
);
7+
8+
---Inserting Records-----
9+
INSERT INTO "chart_ref_metadata" ("chart_name", "chart_description") VALUES
10+
('Rollout Deployment', 'Chart to deploy an advanced version of Deployment that supports blue-green and canary deployments. It requires a rollout controller to run inside the cluster to function.')
11+
INSERT INTO "chart_ref_metadata" ("chart_name", "chart_description") VALUES
12+
('CronJob & Job', 'Chart to deploy a Job/CronJob. Job is a controller object that represents a finite task and CronJob can be used to schedule creation of Jobs.')
13+
INSERT INTO "chart_ref_metadata" ("chart_name", "chart_description") VALUES
14+
('Knative', 'Chart to deploy an Open-Source Enterprise-level solution to deploy Serverless apps.')
15+
INSERT INTO "chart_ref_metadata" ("chart_name", "chart_description") VALUES
16+
('Deployment', 'Chart to deploy a Deployment that runs multiple replicas of your application and automatically replaces any instances that fail or become unresponsive.')

0 commit comments

Comments
 (0)