Skip to content

Commit

Permalink
Merge pull request #5 from NorskHelsenett/feature/dc-and-workspace-by-id
Browse files Browse the repository at this point in the history
Getting datacenter and workspaces by id instead of name
  • Loading branch information
rogerwesterbo authored Jan 13, 2025
2 parents e2f616d + 73c9e82 commit a1b691b
Show file tree
Hide file tree
Showing 12 changed files with 147 additions and 116 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ module github.com/NorskHelsenett/ror-api
go 1.23.1

require (
github.com/NorskHelsenett/ror v1.0.1
github.com/NorskHelsenett/ror v1.0.2
github.com/blang/semver/v4 v4.0.0
github.com/coreos/go-oidc/v3 v3.12.0
github.com/dotse/go-health v0.2.6
github.com/evanphx/json-patch/v5 v5.9.0
github.com/gin-contrib/cors v1.7.3
github.com/gin-contrib/gzip v1.1.0
github.com/gin-contrib/gzip v1.2.0
github.com/gin-contrib/pprof v1.5.2
github.com/gin-contrib/timeout v1.0.2
github.com/gin-gonic/gin v1.10.0
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 h1:kYRSnvJju5g
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/NorskHelsenett/ror v1.0.1 h1:R4TpDcWJQnjRoGQcDmQ4dcBEEuyg6oUFxACCyGF3OW8=
github.com/NorskHelsenett/ror v1.0.1/go.mod h1:JQCdcH8+H21yjDrzCLosliRslZKHA53CvCwzR1X8dnc=
github.com/NorskHelsenett/ror v1.0.2 h1:4aY3swXtLbCahRhHvLvF3UVv5KNB5u6CpaeX5drynW4=
github.com/NorskHelsenett/ror v1.0.2/go.mod h1:iGdBbDMjJYTYYpn16B1M7e6a+/yD+VNn2+fOcB4YyrA=
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI=
github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
Expand Down Expand Up @@ -68,8 +68,8 @@ github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3G
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
github.com/gin-contrib/cors v1.7.3 h1:hV+a5xp8hwJoTw7OY+a70FsL8JkVVFTXw9EcfrYUdns=
github.com/gin-contrib/cors v1.7.3/go.mod h1:M3bcKZhxzsvI+rlRSkkxHyljJt1ESd93COUvemZ79j4=
github.com/gin-contrib/gzip v1.1.0 h1:kVw7Nr9M+Z6Ch4qo7aGMbiqxDeyQFru+07MgAcUF62M=
github.com/gin-contrib/gzip v1.1.0/go.mod h1:iHJXCup4CWiKyPUEl+GwkHjchl+YyYuMKbOCiXujPIA=
github.com/gin-contrib/gzip v1.2.0 h1:JzN6DT3/xYL5zAdviN1ORNzKeklrwafXCIDKIR+qmUA=
github.com/gin-contrib/gzip v1.2.0/go.mod h1:C1a5cacjlDsS20cKnHlZRCPUu57D3qH6B2pV0rl+Y/s=
github.com/gin-contrib/pprof v1.5.2 h1:Kcq5W2bA2PBcVtF0MqkQjpvCpwJr+pd7zxcQh2csg7E=
github.com/gin-contrib/pprof v1.5.2/go.mod h1:a1W4CDXwAPm2zql2AKdnT7OVCJdV/oFPhJXVOrDs5Ns=
github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E=
Expand Down
8 changes: 4 additions & 4 deletions internal/apiservices/clustersService/clusters_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ func FindByName(ctx context.Context, clusterName string) (*apicontracts.Cluster,
return result, nil
}

func GetByWorkspace(ctx context.Context, filter *apicontracts.Filter, workspaceName string) (*apicontracts.PaginatedResult[apicontracts.Cluster], error) {
result, err := clustersRepo.GetByWorkspace(ctx, filter, workspaceName)
func GetByWorkspaceId(ctx context.Context, filter *apicontracts.Filter, workspaceId string) (*apicontracts.PaginatedResult[apicontracts.Cluster], error) {
result, err := clustersRepo.GetByWorkspaceId(ctx, filter, workspaceId)
if err != nil {
return nil, errors.New("could not get clusters")
}
Expand Down Expand Up @@ -247,8 +247,8 @@ func FindMachineClass(ctx context.Context, cluster *apicontracts.Cluster) {
}

//reading from the db in an optimal way
defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)
if results.RemainingBatchLength() == 0 {
rlog.Errorc(ctx, "", fmt.Errorf("no prices"))
Expand Down
16 changes: 8 additions & 8 deletions internal/apiservices/metricsService/metrics_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ func GetForDatacenters(ctx context.Context) (*apicontracts.MetricList, error) {
return metrics, nil
}

func GetForDatacenterName(ctx context.Context, datacenterName string) (*apicontracts.MetricItem, error) {
metrics, err := metricsrepo.GetForDatacenterName(ctx, datacenterName)
func GetForDatacenterId(ctx context.Context, datacenterName string) (*apicontracts.MetricItem, error) {
metrics, err := metricsrepo.GetForDatacenterId(ctx, datacenterName)
if err != nil {
return nil, errors.New("could not get metrics for datacenters")
}
Expand All @@ -95,17 +95,17 @@ func GetForWorkspaces(ctx context.Context, filter *apicontracts.Filter) (*apicon
return metrics, nil
}

func GetForWorkspacesByDatacenter(ctx context.Context, filter *apicontracts.Filter, datacenterName string) (*apicontracts.PaginatedResult[apicontracts.Metric], error) {
metrics, err := metricsrepo.GetForWorkspacesByDatacenter(ctx, filter, datacenterName)
func GetForWorkspacesByDatacenterId(ctx context.Context, filter *apicontracts.Filter, datacenterId string) (*apicontracts.PaginatedResult[apicontracts.Metric], error) {
metrics, err := metricsrepo.GetForWorkspacesByDatacenterId(ctx, filter, datacenterId)
if err != nil {
return nil, errors.New("could not get metrics for datacenters")
}

return metrics, nil
}

func GetForWorkspaceName(ctx context.Context, workspaceName string) (*apicontracts.MetricItem, error) {
metrics, err := metricsrepo.GetForWorkspaceName(ctx, workspaceName)
func GetForWorkspaceId(ctx context.Context, workspaceId string) (*apicontracts.MetricItem, error) {
metrics, err := metricsrepo.GetForWorkspaceId(ctx, workspaceId)
if err != nil {
return nil, errors.New("could not get metrics for workspace")
}
Expand All @@ -122,8 +122,8 @@ func GetForClusters(ctx context.Context) (*apicontracts.MetricList, error) {
return metrics, nil
}

func GetForClustersByWorkspace(ctx context.Context, workspaceName string) (*apicontracts.MetricList, error) {
metrics, err := metricsrepo.GetForClustersByWorkspace(ctx, workspaceName)
func GetForClustersByWorkspaceId(ctx context.Context, workspaceId string) (*apicontracts.MetricList, error) {
metrics, err := metricsrepo.GetForClustersByWorkspaceId(ctx, workspaceId)
if err != nil {
return nil, errors.New("could not get metrics for clusters")
}
Expand Down
12 changes: 6 additions & 6 deletions internal/controllers/clusterscontroller/clusters_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ func ClusterByFilter() gin.HandlerFunc {
}
}

// Get a []apicontracts.Cluster by a workspaceName .
// Get a []apicontracts.Cluster by a workspaceId
// Will only provide clusters the identity is authorized to view
//
// @Summary Get clusters by workspace
Expand All @@ -205,14 +205,14 @@ func ClusterByFilter() gin.HandlerFunc {
// @Failure 403 {string} Forbidden
// @Failure 401 {string} Unauthorized
// @Failure 500 {string} Failure message
// @Router /v1/clusters/workspace/{workspaceName}/filter [get]
// @Router /v1/clusters/workspace/{workspaceId}/filter [get]
// @Param filter body apicontracts.Filter true "Filter"
// @Param workspaceName path string true "workspaceName"
// @Param workspaceId path string true "workspaceId"
// @Security ApiKey || AccessToken
func ClusterGetByWorkspace() gin.HandlerFunc {
func ClusterGetByWorkspaceId() gin.HandlerFunc {
return func(c *gin.Context) {
ctx, cancel := gincontext.GetRorContextFromGinContext(c)
workspaceName := c.Param("workspaceName")
workspaceId := c.Param("workspaceId")
var filter apicontracts.Filter
defer cancel()

Expand Down Expand Up @@ -249,7 +249,7 @@ func ClusterGetByWorkspace() gin.HandlerFunc {
// importing apicontracts for swagger
var _ apicontracts.PaginatedResult[apicontracts.Cluster]

result, err := clustersservice.GetByWorkspace(ctx, &filter, workspaceName)
result, err := clustersservice.GetByWorkspaceId(ctx, &filter, workspaceId)
if err != nil {
c.JSON(http.StatusInternalServerError, rorerror.RorError{
Status: http.StatusInternalServerError,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,18 +64,18 @@ func GetForClusters() gin.HandlerFunc {
// @Failure 403 {string} Forbidden
// @Failure 401 {string} Unauthorized
// @Failure 500 {string} Failure message
// @Param workspaceName path string true "workspaceName"
// @Router /v1/metrics/clusters/workspace/{workspaceName} [get]
// @Param workspaceId path string true "workspaceId"
// @Router /v1/metrics/clusters/workspace/{workspaceId} [get]
// @Security ApiKey || AccessToken
func GetForClustersByWorkspace() gin.HandlerFunc {
func GetForClustersByWorkspaceId() gin.HandlerFunc {
return func(c *gin.Context) {
ctx, cancel := gincontext.GetRorContextFromGinContext(c)
workspaceName := c.Param("workspaceName")
workspaceId := c.Param("workspaceId")
defer cancel()

// importing apicontracts for swagger
var _ apicontracts.Datacenter
results, err := metricsservice.GetForClustersByWorkspace(ctx, workspaceName)
results, err := metricsservice.GetForClustersByWorkspaceId(ctx, workspaceId)
if err != nil {
c.JSON(http.StatusInternalServerError, rorerror.RorError{
Status: http.StatusInternalServerError,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,16 @@ func GetForDatacenters() gin.HandlerFunc {
// @Router /v1/metrics/datacenter/{datacenterName} [get]
// @Param datacenterName path string true "datacenterName"
// @Security ApiKey || AccessToken
func GetByDatacenterName() gin.HandlerFunc {
func GetByDatacenterId() gin.HandlerFunc {
return func(c *gin.Context) {
ctx, cancel := gincontext.GetRorContextFromGinContext(c)
datacenterName := c.Param("datacenterName")
datacenterId := c.Param("datacenterId")
defer cancel()

// importing apicontracts for swagger
var _ apicontracts.MetricItem

metrics, err := metricsservice.GetForDatacenterName(ctx, datacenterName)
metrics, err := metricsservice.GetForDatacenterId(ctx, datacenterId)
if err != nil {
c.JSON(http.StatusInternalServerError, rorerror.RorError{
Status: http.StatusInternalServerError,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,14 +115,14 @@ func GetForWorkspaces() gin.HandlerFunc {
// @Failure 403 {string} Forbidden
// @Failure 401 {string} Unauthorized
// @Failure 500 {string} Failure message
// @Param datacenterName path string true "datacenterName"
// @Router /v1/metrics/workspaces/datacenter/{datacenterName}/filter [post]
// @Param datacenterId path string true "datacenterId"
// @Router /v1/metrics/workspaces/datacenter/{datacenterId}/filter [post]
// @Param filter body apicontracts.Filter true "Filter"
// @Security ApiKey || AccessToken
func GetForWorkspacesByDatacenter() gin.HandlerFunc {
func GetForWorkspacesByDatacenterId() gin.HandlerFunc {
return func(c *gin.Context) {
ctx, cancel := gincontext.GetRorContextFromGinContext(c)
datacenterName := c.Param("datacenterName")
datacenterId := c.Param("datacenterId")
var filter apicontracts.Filter
defer cancel()

Expand Down Expand Up @@ -155,7 +155,7 @@ func GetForWorkspacesByDatacenter() gin.HandlerFunc {
}
}

result, err := metricsservice.GetForWorkspacesByDatacenter(ctx, &filter, datacenterName)
result, err := metricsservice.GetForWorkspacesByDatacenterId(ctx, &filter, datacenterId)
if err != nil {
c.JSON(http.StatusInternalServerError, rorerror.RorError{
Status: http.StatusNotFound,
Expand Down Expand Up @@ -186,16 +186,16 @@ func GetForWorkspacesByDatacenter() gin.HandlerFunc {
// @Failure 403 {string} Forbidden
// @Failure 401 {string} Unauthorized
// @Failure 500 {string} Failure message
// @Router /v1/metrics/workspace/{workspaceName} [get]
// @Param workspaceName path string true "workspaceName"
// @Router /v1/metrics/workspace/{workspaceId} [get]
// @Param workspaceId path string true "workspaceId"
// @Security ApiKey || AccessToken
func GetByWorkspaceName() gin.HandlerFunc {
func GetByWorkspaceId() gin.HandlerFunc {
return func(c *gin.Context) {
ctx, cancel := gincontext.GetRorContextFromGinContext(c)
workspaceName := c.Param("workspaceName")
workspaceId := c.Param("workspaceId")
defer cancel()

metrics, err := metricsservice.GetForWorkspaceName(ctx, workspaceName)
metrics, err := metricsservice.GetForWorkspaceId(ctx, workspaceId)
if err != nil {
c.JSON(http.StatusInternalServerError, rorerror.RorError{
Status: http.StatusInternalServerError,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ func GetByClusterId(ctx context.Context, clusterId string) (*apicontracts.Cluste
if err != nil {
return nil, errors.New("could not get cluster")
}
defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)

if results.RemainingBatchLength() == 0 {
Expand All @@ -120,8 +120,8 @@ func GetByClusterId(ctx context.Context, clusterId string) (*apicontracts.Cluste
return nil, errors.New("could not get error")
}

defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)

if len(clusters) > 1 {
Expand Down Expand Up @@ -246,11 +246,11 @@ func GetByFilter(ctx context.Context, filter *apicontracts.Filter) (*apicontract
_, span5 := otel.GetTracerProvider().Tracer(viper.GetString(configconsts.TRACER_ID)).Start(ctx, "Read data from db")
defer span5.End()

defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)
defer func(totalCountResult *mongo.Cursor, ctx context.Context) {
_ = totalCountResult.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(totalCountResult, ctx)

if results.RemainingBatchLength() == 0 {
Expand Down Expand Up @@ -329,8 +329,8 @@ func GetMetadata(ctx context.Context) (map[string][]string, error) {
metadataSlice = append(metadataSlice, metadata)
}

defer func(cursor *mongo.Cursor, ctx context.Context) {
_ = cursor.Close(ctx)
defer func(c *mongo.Cursor, databaseCtx context.Context) {
_ = c.Close(databaseCtx)
}(cursor, ctx)
if len(metadataSlice) > 0 {
return metadataSlice[0], nil
Expand All @@ -339,9 +339,13 @@ func GetMetadata(ctx context.Context) (map[string][]string, error) {
return nil, errors.New("missing metadata")
}

func GetByWorkspace(ctx context.Context,
func GetByWorkspaceId(ctx context.Context,
filter *apicontracts.Filter,
workspaceName string) (*apicontracts.PaginatedResult[apicontracts.Cluster], error) {
workspaceId string) (*apicontracts.PaginatedResult[apicontracts.Cluster], error) {
wId, err := primitive.ObjectIDFromHex(workspaceId)
if err != nil {
return nil, errors.New("could not get cluster by workspace")
}
db := mongodb.GetMongoDb()
bsonSort := bson.M{}
for i := 0; i < len(filter.Sort); i++ {
Expand Down Expand Up @@ -383,7 +387,7 @@ func GetByWorkspace(ctx context.Context,
},
},
},
{"$match": bson.M{"workspace.name": workspaceName}},
{"$match": bson.M{"workspace._id": wId}},
}
query = []bson.M{
accessQuery,
Expand All @@ -405,7 +409,7 @@ func GetByWorkspace(ctx context.Context,
},
},
},
{"$match": bson.M{"workspace.name": workspaceName}},
{"$match": bson.M{"workspace._id": wId}},
{"$sort": bsonSort},
{"$skip": filter.Skip},
{"$limit": filter.Limit},
Expand All @@ -426,8 +430,8 @@ func GetByWorkspace(ctx context.Context,
clusters := make([]apicontracts.Cluster, 0)

//reading from the db in an optimal way
defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)
if results.RemainingBatchLength() == 0 {
return nil, nil
Expand All @@ -442,11 +446,11 @@ func GetByWorkspace(ctx context.Context,
clusters = append(clusters, cluster)
}

defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)
defer func(countResult *mongo.Cursor, ctx context.Context) {
_ = countResult.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(countResult, ctx)

paginatedResult := apicontracts.PaginatedResult[apicontracts.Cluster]{}
Expand Down Expand Up @@ -532,8 +536,8 @@ func GetClusterIdByProjectId(ctx context.Context, projectId string) ([]*apicontr
if err != nil {
return nil, errors.New("could not get cluster")
}
defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)

if results.RemainingBatchLength() == 0 {
Expand All @@ -545,8 +549,8 @@ func GetClusterIdByProjectId(ctx context.Context, projectId string) ([]*apicontr
return nil, errors.New("could not get error")
}

defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)

return clusters, nil
Expand Down Expand Up @@ -783,8 +787,8 @@ func GetControlPlaneMetadata(ctx context.Context) ([]apicontracts.ClusterControl
if err != nil {
return nil, errors.New("could not get cluster control plane metadata")
}
defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)

if results.RemainingBatchLength() == 0 {
Expand All @@ -796,8 +800,8 @@ func GetControlPlaneMetadata(ctx context.Context) ([]apicontracts.ClusterControl
return nil, errors.New("could not get error")
}

defer func(results *mongo.Cursor, ctx context.Context) {
_ = results.Close(ctx)
defer func(cursor *mongo.Cursor, databaseCtx context.Context) {
_ = cursor.Close(databaseCtx)
}(results, ctx)

return metadata, nil
Expand Down
Loading

0 comments on commit a1b691b

Please sign in to comment.