Skip to content

Commit e4df030

Browse files
committed
fix
1 parent 7bbf01a commit e4df030

File tree

9 files changed

+92
-73
lines changed

9 files changed

+92
-73
lines changed

components/common-go/experiments/configcat.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ package experiments
66

77
import (
88
"context"
9+
"fmt"
910

1011
configcat "github.com/configcat/go-sdk/v7"
12+
"github.com/gitpod-io/gitpod/common-go/log"
1113
"github.com/sirupsen/logrus"
1214
)
1315

@@ -31,20 +33,28 @@ type configCatClient struct {
3133
client *configcat.Client
3234
}
3335

34-
func (c *configCatClient) GetBoolValue(_ context.Context, experimentName string, defaultValue bool, attributes Attributes) bool {
35-
return c.client.GetBoolValue(experimentName, defaultValue, attributesToUser(attributes))
36+
func (c *configCatClient) GetBoolValue(ctx context.Context, experimentName string, defaultValue bool, attributes Attributes) bool {
37+
value := c.client.GetBoolValue(experimentName, defaultValue, attributesToUser(attributes))
38+
log.AddFields(ctx, logField(experimentName, value))
39+
return value
3640
}
3741

38-
func (c *configCatClient) GetIntValue(_ context.Context, experimentName string, defaultValue int, attributes Attributes) int {
39-
return c.client.GetIntValue(experimentName, defaultValue, attributesToUser(attributes))
42+
func (c *configCatClient) GetIntValue(ctx context.Context, experimentName string, defaultValue int, attributes Attributes) int {
43+
value := c.client.GetIntValue(experimentName, defaultValue, attributesToUser(attributes))
44+
log.AddFields(ctx, logField(experimentName, value))
45+
return value
4046
}
4147

42-
func (c *configCatClient) GetFloatValue(_ context.Context, experimentName string, defaultValue float64, attributes Attributes) float64 {
43-
return c.client.GetFloatValue(experimentName, defaultValue, attributesToUser(attributes))
48+
func (c *configCatClient) GetFloatValue(ctx context.Context, experimentName string, defaultValue float64, attributes Attributes) float64 {
49+
value := c.client.GetFloatValue(experimentName, defaultValue, attributesToUser(attributes))
50+
log.AddFields(ctx, logField(experimentName, value))
51+
return value
4452
}
4553

46-
func (c *configCatClient) GetStringValue(_ context.Context, experimentName string, defaultValue string, attributes Attributes) string {
47-
return c.client.GetStringValue(experimentName, defaultValue, attributesToUser(attributes))
54+
func (c *configCatClient) GetStringValue(ctx context.Context, experimentName string, defaultValue string, attributes Attributes) string {
55+
value := c.client.GetStringValue(experimentName, defaultValue, attributesToUser(attributes))
56+
log.AddFields(ctx, logField(experimentName, value))
57+
return value
4858
}
4959

5060
func attributesToUser(attributes Attributes) *configcat.UserData {
@@ -85,3 +95,9 @@ type configCatLogger struct {
8595
func (l *configCatLogger) GetLevel() configcat.LogLevel {
8696
return configcat.LogLevelError
8797
}
98+
99+
func logField(experimentName, value interface{}) logrus.Fields {
100+
return logrus.Fields{
101+
fmt.Sprintf("experiments.%s", experimentName): value,
102+
}
103+
}

components/common-go/experiments/flags.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
package experiments
66

7-
import "context"
7+
import (
8+
"context"
9+
)
810

911
const (
1012
PersonalAccessTokensEnabledFlag = "personalAccessTokensEnabled"

components/public-api-server/pkg/apiv1/ide_client.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import (
99
"fmt"
1010

1111
connect "github.com/bufbuild/connect-go"
12+
"github.com/gitpod-io/gitpod/common-go/log"
1213
v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"
1314
"github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1/v1connect"
1415
protocol "github.com/gitpod-io/gitpod/gitpod-protocol"
1516
"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"
16-
"github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus"
1717
)
1818

1919
func NewIDEClientService(pool proxy.ServerConnectionPool) *IDEClientService {
@@ -31,21 +31,19 @@ type IDEClientService struct {
3131
}
3232

3333
func (this *IDEClientService) SendHeartbeat(ctx context.Context, req *connect.Request[v1.SendHeartbeatRequest]) (*connect.Response[v1.SendHeartbeatResponse], error) {
34-
logger := ctxlogrus.Extract(ctx)
35-
3634
conn, err := getConnection(ctx, this.connectionPool)
3735
if err != nil {
3836
return nil, err
3937
}
4038

4139
workspace, err := conn.GetWorkspace(ctx, req.Msg.GetWorkspaceId())
4240
if err != nil {
43-
logger.WithError(err).Error("Failed to get workspace.")
41+
log.Extract(ctx).WithError(err).Error("Failed to get workspace.")
4442
return nil, proxy.ConvertError(err)
4543
}
4644

4745
if workspace.LatestInstance == nil {
48-
logger.WithError(err).Error("Failed to get latest instance.")
46+
log.Extract(ctx).WithError(err).Error("Failed to get latest instance.")
4947
return nil, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("instance not found"))
5048
}
5149

@@ -61,21 +59,19 @@ func (this *IDEClientService) SendHeartbeat(ctx context.Context, req *connect.Re
6159
}
6260

6361
func (this *IDEClientService) SendDidClose(ctx context.Context, req *connect.Request[v1.SendDidCloseRequest]) (*connect.Response[v1.SendDidCloseResponse], error) {
64-
logger := ctxlogrus.Extract(ctx)
65-
6662
conn, err := getConnection(ctx, this.connectionPool)
6763
if err != nil {
6864
return nil, err
6965
}
7066

7167
workspace, err := conn.GetWorkspace(ctx, req.Msg.GetWorkspaceId())
7268
if err != nil {
73-
logger.WithError(err).Error("Failed to get workspace.")
69+
log.Extract(ctx).WithError(err).Error("Failed to get workspace.")
7470
return nil, proxy.ConvertError(err)
7571
}
7672

7773
if workspace.LatestInstance == nil {
78-
logger.WithError(err).Error("Failed to get latest instance.")
74+
log.Extract(ctx).WithError(err).Error("Failed to get latest instance.")
7975
return nil, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("instance not found"))
8076
}
8177

components/public-api-server/pkg/apiv1/oidc.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/gitpod-io/gitpod/public-api-server/pkg/auth"
2424
"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"
2525
"github.com/google/uuid"
26+
"github.com/sirupsen/logrus"
2627
"google.golang.org/grpc/codes"
2728
"google.golang.org/grpc/status"
2829
"gorm.io/gorm"
@@ -58,8 +59,6 @@ func (s *OIDCService) CreateClientConfig(ctx context.Context, req *connect.Reque
5859
return nil, connect.NewError(connect.CodeInvalidArgument, err)
5960
}
6061

61-
logger := log.WithField("organization_id", organizationID.String())
62-
6362
conn, err := s.getConnection(ctx)
6463
if err != nil {
6564
return nil, err
@@ -75,7 +74,7 @@ func (s *OIDCService) CreateClientConfig(ctx context.Context, req *connect.Reque
7574

7675
data, err := db.EncryptJSON(s.cipher, toDbOIDCSpec(oauth2Config, oidcConfig))
7776
if err != nil {
78-
logger.WithError(err).Error("Failed to encrypt oidc client config.")
77+
log.Extract(ctx).WithError(err).Error("Failed to encrypt oidc client config.")
7978
return nil, status.Errorf(codes.Internal, "Failed to store OIDC client config.")
8079
}
8180

@@ -86,15 +85,17 @@ func (s *OIDCService) CreateClientConfig(ctx context.Context, req *connect.Reque
8685
Data: data,
8786
})
8887
if err != nil {
89-
logger.WithError(err).Error("Failed to store oidc client config in the database.")
88+
log.Extract(ctx).WithError(err).Error("Failed to store oidc client config in the database.")
9089
return nil, status.Errorf(codes.Internal, "Failed to store OIDC client config.")
9190
}
9291

93-
logger = log.WithField("oidc_client_config_id", created.ID.String())
92+
log.AddFields(ctx, logrus.Fields{
93+
"oidc_client_config_id": created.ID.String(),
94+
})
9495

9596
converted, err := dbOIDCClientConfigToAPI(created, s.cipher)
9697
if err != nil {
97-
logger.WithError(err).Error("Failed to convert OIDC Client config to response.")
98+
log.Extract(ctx).WithError(err).Error("Failed to convert OIDC Client config to response.")
9899
return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Failed to convert OIDC Client Config %s for Organization %s to API response", created.ID.String(), organizationID.String()))
99100
}
100101

@@ -104,18 +105,16 @@ func (s *OIDCService) CreateClientConfig(ctx context.Context, req *connect.Reque
104105
}
105106

106107
func (s *OIDCService) GetClientConfig(ctx context.Context, req *connect.Request[v1.GetClientConfigRequest]) (*connect.Response[v1.GetClientConfigResponse], error) {
107-
organizationID, err := validateOrganizationID(req.Msg.GetOrganizationId())
108+
organizationID, err := validateOrganizationID(ctx, req.Msg.GetOrganizationId())
108109
if err != nil {
109110
return nil, err
110111
}
111112

112-
clientConfigID, err := validateOIDCClientConfigID(req.Msg.GetId())
113+
clientConfigID, err := validateOIDCClientConfigID(ctx, req.Msg.GetId())
113114
if err != nil {
114115
return nil, err
115116
}
116117

117-
logger := log.WithField("oidc_client_config_id", clientConfigID.String()).WithField("organization_id", organizationID.String())
118-
119118
conn, err := s.getConnection(ctx)
120119
if err != nil {
121120
return nil, err
@@ -132,13 +131,13 @@ func (s *OIDCService) GetClientConfig(ctx context.Context, req *connect.Request[
132131
return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("OIDC Client Config %s for Organization %s does not exist", clientConfigID.String(), organizationID.String()))
133132
}
134133

135-
logger.WithError(err).Error("Failed to delete OIDC Client config.")
134+
log.Extract(ctx).WithError(err).Error("Failed to delete OIDC Client config.")
136135
return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Failed to delete OIDC Client Config %s for Organization %s", clientConfigID.String(), organizationID.String()))
137136
}
138137

139138
converted, err := dbOIDCClientConfigToAPI(record, s.cipher)
140139
if err != nil {
141-
logger.WithError(err).Error("Failed to convert OIDC Client config to response.")
140+
log.Extract(ctx).WithError(err).Error("Failed to convert OIDC Client config to response.")
142141
return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Failed to convert OIDC Client Config %s for Organization %s to API response", clientConfigID.String(), organizationID.String()))
143142
}
144143

@@ -194,18 +193,16 @@ func (s *OIDCService) UpdateClientConfig(ctx context.Context, req *connect.Reque
194193
}
195194

196195
func (s *OIDCService) DeleteClientConfig(ctx context.Context, req *connect.Request[v1.DeleteClientConfigRequest]) (*connect.Response[v1.DeleteClientConfigResponse], error) {
197-
organizationID, err := validateOrganizationID(req.Msg.GetOrganizationId())
196+
organizationID, err := validateOrganizationID(ctx, req.Msg.GetOrganizationId())
198197
if err != nil {
199198
return nil, err
200199
}
201200

202-
clientConfigID, err := validateOIDCClientConfigID(req.Msg.GetId())
201+
clientConfigID, err := validateOIDCClientConfigID(ctx, req.Msg.GetId())
203202
if err != nil {
204203
return nil, err
205204
}
206205

207-
logger := log.WithField("oidc_client_config_id", clientConfigID.String()).WithField("organization_id", organizationID.String())
208-
209206
conn, err := s.getConnection(ctx)
210207
if err != nil {
211208
return nil, err
@@ -222,7 +219,7 @@ func (s *OIDCService) DeleteClientConfig(ctx context.Context, req *connect.Reque
222219
return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("OIDC Client Config %s for Organization %s does not exist", clientConfigID.String(), organizationID.String()))
223220
}
224221

225-
logger.WithError(err).Error("Failed to delete OIDC Client config.")
222+
log.Extract(ctx).WithError(err).Error("Failed to delete OIDC Client config.")
226223
return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Failed to delete OIDC Client Config %s for Organization %s", clientConfigID.String(), organizationID.String()))
227224
}
228225

@@ -237,7 +234,7 @@ func (s *OIDCService) getConnection(ctx context.Context) (protocol.APIInterface,
237234

238235
conn, err := s.connectionPool.Get(ctx, token)
239236
if err != nil {
240-
log.Log.WithError(err).Error("Failed to get connection to server.")
237+
log.Extract(ctx).WithError(err).Error("Failed to get connection to server.")
241238
return nil, connect.NewError(connect.CodeInternal, errors.New("Failed to establish connection to downstream services. If this issue persists, please contact Gitpod Support."))
242239
}
243240

@@ -250,6 +247,12 @@ func (s *OIDCService) getUser(ctx context.Context, conn protocol.APIInterface) (
250247
return nil, uuid.Nil, proxy.ConvertError(err)
251248
}
252249

250+
log.AddFields(ctx, logrus.Fields{
251+
"user.id": user.ID,
252+
"user.blocked": user.Blocked,
253+
"user.prividged": user.Privileged,
254+
})
255+
253256
if !s.isFeatureEnabled(ctx, conn, user) {
254257
return nil, uuid.Nil, connect.NewError(connect.CodePermissionDenied, errors.New("This feature is currently in beta. If you would like to be part of the beta, please contact us."))
255258
}
@@ -273,7 +276,7 @@ func (s *OIDCService) isFeatureEnabled(ctx context.Context, conn protocol.APIInt
273276

274277
teams, err := conn.GetTeams(ctx)
275278
if err != nil {
276-
log.WithError(err).Warnf("Failed to retreive Teams for user %s, personal access token feature flag will not evaluate team membership.", user.ID)
279+
log.Extract(ctx).WithError(err).Warnf("Failed to retreive Teams for user %s, personal access token feature flag will not evaluate team membership.", user.ID)
277280
teams = nil
278281
}
279282
for _, team := range teams {

components/public-api-server/pkg/apiv1/project.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func (s *ProjectsService) getConnection(ctx context.Context) (protocol.APIInterf
171171

172172
conn, err := s.connectionPool.Get(ctx, token)
173173
if err != nil {
174-
log.Log.WithError(err).Error("Failed to get connection to server.")
174+
log.Extract(ctx).WithError(err).Error("Failed to get connection to server.")
175175
return nil, connect.NewError(connect.CodeInternal, errors.New("Failed to establish connection to downstream services. If this issue persists, please contact Gitpod Support."))
176176
}
177177

components/public-api-server/pkg/apiv1/team.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ func (s *TeamService) CreateTeam(ctx context.Context, req *connect.Request[v1.Cr
4242

4343
created, err := conn.CreateTeam(ctx, req.Msg.GetName())
4444
if err != nil {
45-
log.WithError(err).Error("Failed to create team.")
45+
log.Extract(ctx).Error("Failed to create team.")
4646
return nil, proxy.ConvertError(err)
4747
}
4848

4949
team, err := s.toTeamAPIResponse(ctx, conn, created)
5050
if err != nil {
51-
log.WithError(err).Error("Failed to populate team with details.")
51+
log.Extract(ctx).WithError(err).Error("Failed to populate team with details.")
5252
return nil, err
5353
}
5454

@@ -91,15 +91,15 @@ func (s *TeamService) ListTeams(ctx context.Context, req *connect.Request[v1.Lis
9191

9292
teams, err := conn.GetTeams(ctx)
9393
if err != nil {
94-
log.WithError(err).Error("Failed to list teams from server.")
94+
log.Extract(ctx).WithError(err).Error("Failed to list teams from server.")
9595
return nil, proxy.ConvertError(err)
9696
}
9797

9898
var response []*v1.Team
9999
for _, t := range teams {
100100
team, err := s.toTeamAPIResponse(ctx, conn, t)
101101
if err != nil {
102-
log.WithError(err).Error("Failed to populate team with details.")
102+
log.Extract(ctx).WithError(err).Error("Failed to populate team with details.")
103103
return nil, err
104104
}
105105

@@ -147,7 +147,7 @@ func (s *TeamService) JoinTeam(ctx context.Context, req *connect.Request[v1.Join
147147

148148
response, err := s.toTeamAPIResponse(ctx, conn, team)
149149
if err != nil {
150-
log.WithError(err).Error("Failed to populate team with details.")
150+
log.Extract(ctx).WithError(err).Error("Failed to populate team with details.")
151151
return nil, err
152152
}
153153

@@ -241,13 +241,13 @@ func (s *TeamService) DeleteTeamMember(ctx context.Context, req *connect.Request
241241
func (s *TeamService) toTeamAPIResponse(ctx context.Context, conn protocol.APIInterface, team *protocol.Team) (*v1.Team, error) {
242242
members, err := conn.GetTeamMembers(ctx, team.ID)
243243
if err != nil {
244-
log.WithError(err).Error("Failed to get team members.")
244+
log.Extract(ctx).WithError(err).Error("Failed to get team members.")
245245
return nil, proxy.ConvertError(err)
246246
}
247247

248248
invite, err := conn.GetGenericInvite(ctx, team.ID)
249249
if err != nil {
250-
log.WithError(err).Error("Failed to get generic invite.")
250+
log.Extract(ctx).WithError(err).Error("Failed to get generic invite.")
251251
return nil, proxy.ConvertError(err)
252252
}
253253

0 commit comments

Comments
 (0)