Skip to content

Commit

Permalink
removing top level app and adding locks
Browse files Browse the repository at this point in the history
  • Loading branch information
miguel-crespo-fdc committed Oct 10, 2024
1 parent c09f8cc commit 261415f
Show file tree
Hide file tree
Showing 19 changed files with 326 additions and 195 deletions.
5 changes: 3 additions & 2 deletions pkg/api/v1/api.proto
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,6 @@ message OverviewApplication {
}

message GetOverviewResponse {
map<string, Application> applications = 2;
repeated EnvironmentGroup environment_groups = 3;
string git_revision = 4;
string branch = 5;
Expand Down Expand Up @@ -591,10 +590,12 @@ message Environment {

string name = 1;
EnvironmentConfig config = 2;
map<string, Lock> locks = 3;
map<string, Lock> locks = 3; //Environment Locks. Lock ID -> Lock
map<string, Application> applications = 4;
uint32 distance_to_upstream = 5;
Priority priority = 6;
map<string, Locks> app_locks = 7; //Application Locks. AppName -> []Locks
map<string, Locks> team_locks = 8; //Team Locks. TeamName -> []Locks
}

message Release {
Expand Down
1 change: 0 additions & 1 deletion pkg/db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -5461,7 +5461,6 @@ func (h *DBHandler) ReadLatestOverviewCache(ctx context.Context, transaction *sq
result := &api.GetOverviewResponse{
Branch: "",
ManifestRepoUrl: "",
Applications: map[string]*api.Application{},
EnvironmentGroups: []*api.EnvironmentGroup{},
GitRevision: "",
}
Expand Down
90 changes: 45 additions & 45 deletions services/cd-service/pkg/repository/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -2489,58 +2489,17 @@ func (s *State) DBInsertEnvironmentWithOverview(ctx context.Context, tx *sql.Tx,

func (s *State) UpdateTopLevelAppInOverview(ctx context.Context, transaction *sql.Tx, appName string, result *api.GetOverviewResponse, deleteApp bool, allReleasesOfAllApps map[string][]int64) error {
if deleteApp {
delete(result.Applications, appName)
return nil
}
app := api.Application{
UndeploySummary: 0,
Warnings: nil,
Name: appName,
Releases: []*api.Release{},
SourceRepoUrl: "",
Team: "",
}
allReleasesOfApp, found := allReleasesOfAllApps[appName]
var rels []uint64
if found {
rels = conversion.ToUint64Slice(allReleasesOfApp)
} else {
retrievedReleasesOfApp, err := s.GetAllApplicationReleases(ctx, transaction, appName)
if err != nil {
logger.FromContext(ctx).Sugar().Warnf("app without releases: %v", err)
}
rels = retrievedReleasesOfApp
}
for _, id := range rels {
if rel, err := s.GetApplicationRelease(ctx, transaction, appName, id); err != nil {
return err
} else {
if rel == nil {
// ignore
} else {
release := rel.ToProto()
release.Version = id
release.UndeployVersion = rel.UndeployVersion
app.Releases = append(app.Releases, release)
}
}
}

if team, err := s.GetApplicationTeamOwner(ctx, transaction, appName); err != nil {
var team string
var err error
if team, err = s.GetApplicationTeamOwner(ctx, transaction, appName); err != nil {
return err
} else {
app.Team = team
}
if result == nil {
return nil
}
app.UndeploySummary = deriveUndeploySummary(appName, result.EnvironmentGroups)
app.Warnings = CalculateWarnings(ctx, app.Name, result.EnvironmentGroups)
if result.Applications == nil {
result.Applications = map[string]*api.Application{}
}
result.Applications[appName] = &app
result.LightweightApps = append(result.LightweightApps, &api.OverviewApplication{Name: appName, Team: app.Team})
result.LightweightApps = append(result.LightweightApps, &api.OverviewApplication{Name: appName, Team: team})
return nil
}

Expand Down Expand Up @@ -2814,6 +2773,8 @@ func (s *State) UpdateEnvironmentsInOverview(ctx context.Context, transaction *s
},
Locks: map[string]*api.Lock{},
Applications: map[string]*api.Environment_Application{},
AppLocks: make(map[string]*api.Locks),
TeamLocks: make(map[string]*api.Locks),
}
envInGroup.Config = env.Config
if locks, err := s.GetEnvironmentLocks(ctx, transaction, envName); err != nil {
Expand Down Expand Up @@ -2842,6 +2803,45 @@ func (s *State) UpdateEnvironmentsInOverview(ctx context.Context, transaction *s
return err
}
env.Applications[appName] = app
apiAppLocks := api.Locks{
Locks: make([]*api.Lock, 0),
}
if appLocks, err := s.GetEnvironmentApplicationLocks(ctx, transaction, envName, appName); err != nil {
return err
} else {
for lockId, lock := range appLocks {
apiAppLocks.Locks = append(apiAppLocks.Locks, &api.Lock{
Message: lock.Message,
LockId: lockId,
CreatedAt: timestamppb.New(lock.CreatedAt),
CreatedBy: &api.Actor{
Name: lock.CreatedBy.Name,
Email: lock.CreatedBy.Email,
},
})
}
env.AppLocks[appName] = &apiAppLocks
}

apiTeamLocks := api.Locks{
Locks: make([]*api.Lock, 0),
}
if teamLocks, err := s.GetEnvironmentTeamLocks(ctx, transaction, envName, app.Team); err != nil {
return err
} else {
for lockId, lock := range teamLocks {
apiTeamLocks.Locks = append(apiTeamLocks.Locks, &api.Lock{
Message: lock.Message,
LockId: lockId,
CreatedAt: timestamppb.New(lock.CreatedAt),
CreatedBy: &api.Actor{
Name: lock.CreatedBy.Name,
Email: lock.CreatedBy.Email,
},
})
}
env.TeamLocks[app.Team] = &apiTeamLocks
}
}
}
envInGroup.Applications = env.Applications
Expand Down
1 change: 0 additions & 1 deletion services/cd-service/pkg/repository/transformer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2753,7 +2753,6 @@ func (c *CreateEnvironment) Transform(
overview = &api.GetOverviewResponse{
Branch: "",
ManifestRepoUrl: "",
Applications: map[string]*api.Application{},
EnvironmentGroups: []*api.EnvironmentGroup{},
GitRevision: "0000000000000000000000000000000000000000",
}
Expand Down
178 changes: 90 additions & 88 deletions services/cd-service/pkg/service/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"github.com/freiheit-com/kuberpult/pkg/db"
"os"
"sort"
"strconv"
"strings"

api "github.com/freiheit-com/kuberpult/pkg/api/v1"
Expand Down Expand Up @@ -55,93 +54,96 @@ func (s *GitServer) GetGitTags(ctx context.Context, _ *api.GetGitTagsRequest) (*
}

func (s *GitServer) GetProductSummary(ctx context.Context, in *api.GetProductSummaryRequest) (*api.GetProductSummaryResponse, error) {
if in.Environment == nil && in.EnvironmentGroup == nil {
return nil, fmt.Errorf("Must have an environment or environmentGroup to get the product summary for")
}
if in.Environment != nil && in.EnvironmentGroup != nil {
if *in.Environment != "" && *in.EnvironmentGroup != "" {
return nil, fmt.Errorf("Can not have both an environment and environmentGroup to get the product summary for")
}
}
if in.ManifestRepoCommitHash == "" {
return nil, fmt.Errorf("Must have a commit to get the product summary for")
}
response, err := s.OverviewService.GetOverview(ctx, &api.GetOverviewRequest{GitRevision: in.ManifestRepoCommitHash})
if err != nil {
return nil, fmt.Errorf("unable to get overview for %s: %v", in.ManifestRepoCommitHash, err)
}

var summaryFromEnv []api.ProductSummary
if in.Environment != nil && *in.Environment != "" {
for _, group := range response.EnvironmentGroups {
for _, env := range group.Environments {
if env.Name == *in.Environment {
for _, app := range env.Applications {
summaryFromEnv = append(summaryFromEnv, api.ProductSummary{
CommitId: "",
DisplayVersion: "",
Team: "",
App: app.Name,
Version: strconv.FormatUint(app.Version, 10),
Environment: *in.Environment,
})
}
}
}
}
if len(summaryFromEnv) == 0 {
return &api.GetProductSummaryResponse{
ProductSummary: nil,
}, nil
}
sort.Slice(summaryFromEnv, func(i, j int) bool {
a := summaryFromEnv[i].App
b := summaryFromEnv[j].App
return a < b
})
} else {
for _, group := range response.EnvironmentGroups {
if *in.EnvironmentGroup == group.EnvironmentGroupName {
for _, env := range group.Environments {
var singleEnvSummary []api.ProductSummary
for _, app := range env.Applications {
singleEnvSummary = append(singleEnvSummary, api.ProductSummary{
CommitId: "",
DisplayVersion: "",
Team: "",
App: app.Name,
Version: strconv.FormatUint(app.Version, 10),
Environment: env.Name,
})
}
sort.Slice(singleEnvSummary, func(i, j int) bool {
a := singleEnvSummary[i].App
b := singleEnvSummary[j].App
return a < b
})
summaryFromEnv = append(summaryFromEnv, singleEnvSummary...)
}
}
}
if len(summaryFromEnv) == 0 {
return nil, nil
}
}

var productVersion []*api.ProductSummary
for _, row := range summaryFromEnv { //nolint: govet
for _, app := range response.Applications {
if row.App == app.Name {
for _, release := range app.Releases {
if strconv.FormatUint(release.Version, 10) == row.Version {
productVersion = append(productVersion, &api.ProductSummary{App: row.App, Version: row.Version, CommitId: release.SourceCommitId, DisplayVersion: release.DisplayVersion, Environment: row.Environment, Team: app.Team})
break
}
}
}
}
}
return &api.GetProductSummaryResponse{ProductSummary: productVersion}, nil
//if in.Environment == nil && in.EnvironmentGroup == nil {
// return nil, fmt.Errorf("Must have an environment or environmentGroup to get the product summary for")
//}
//if in.Environment != nil && in.EnvironmentGroup != nil {
// if *in.Environment != "" && *in.EnvironmentGroup != "" {
// return nil, fmt.Errorf("Can not have both an environment and environmentGroup to get the product summary for")
// }
//}
//if in.ManifestRepoCommitHash == "" {
// return nil, fmt.Errorf("Must have a commit to get the product summary for")
//}
//response, err := s.OverviewService.GetOverview(ctx, &api.GetOverviewRequest{GitRevision: in.ManifestRepoCommitHash})
//if err != nil {
// return nil, fmt.Errorf("unable to get overview for %s: %v", in.ManifestRepoCommitHash, err)
//}
//
//var summaryFromEnv []api.ProductSummary
//if in.Environment != nil && *in.Environment != "" {
// for _, group := range response.EnvironmentGroups {
// for _, env := range group.Environments {
// if env.Name == *in.Environment {
// for _, app := range env.Applications {
// summaryFromEnv = append(summaryFromEnv, api.ProductSummary{
// CommitId: "",
// DisplayVersion: "",
// Team: "",
// App: app.Name,
// Version: strconv.FormatUint(app.Version, 10),
// Environment: *in.Environment,
// })
// }
// }
// }
// }
// if len(summaryFromEnv) == 0 {
// return &api.GetProductSummaryResponse{
// ProductSummary: nil,
// }, nil
// }
// sort.Slice(summaryFromEnv, func(i, j int) bool {
// a := summaryFromEnv[i].App
// b := summaryFromEnv[j].App
// return a < b
// })
//} else {
// for _, group := range response.EnvironmentGroups {
// if *in.EnvironmentGroup == group.EnvironmentGroupName {
// for _, env := range group.Environments {
// var singleEnvSummary []api.ProductSummary
// for _, app := range env.Applications {
// singleEnvSummary = append(singleEnvSummary, api.ProductSummary{
// CommitId: "",
// DisplayVersion: "",
// Team: "",
// App: app.Name,
// Version: strconv.FormatUint(app.Version, 10),
// Environment: env.Name,
// })
// }
// sort.Slice(singleEnvSummary, func(i, j int) bool {
// a := singleEnvSummary[i].App
// b := singleEnvSummary[j].App
// return a < b
// })
// summaryFromEnv = append(summaryFromEnv, singleEnvSummary...)
// }
// }
// }
// if len(summaryFromEnv) == 0 {
// return nil, nil
// }
//}
//
//var productVersion []*api.ProductSummary
//for _, row := range summaryFromEnv { //nolint: govet
// for _, app := range response.Applications {
// if row.App == app.Name {
// for _, release := range app.Releases {
// if strconv.FormatUint(release.Version, 10) == row.Version {
// productVersion = append(productVersion, &api.ProductSummary{App: row.App, Version: row.Version, CommitId: release.SourceCommitId, DisplayVersion: release.DisplayVersion, Environment: row.Environment, Team: app.Team})
// break
// }
// }
// }
// }
//}
//return &api.GetProductSummaryResponse{ProductSummary: productVersion}, nil
return &api.GetProductSummaryResponse{
ProductSummary: nil,
}, nil
}

func (s *GitServer) GetCommitInfo(ctx context.Context, in *api.GetCommitInfoRequest) (*api.GetCommitInfoResponse, error) {
Expand Down
Loading

0 comments on commit 261415f

Please sign in to comment.