Skip to content

Commit 59ff034

Browse files
authored
[public-api] Use context logger (#16686)
* Fix * Fix * Fix * Fix * Fix * [public-api] Use context logger * fix * Fix * fix * Fix * fix * fix * fix * fix * fix * Fix * fmt * fix * retest
1 parent c800175 commit 59ff034

File tree

10 files changed

+127
-110
lines changed

10 files changed

+127
-110
lines changed

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/identityprovider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ var _ v1connect.IdentityProviderServiceHandler = ((*IdentityProviderService)(nil
3838

3939
// GetIDToken implements v1connect.IDPServiceHandler
4040
func (srv *IdentityProviderService) GetIDToken(ctx context.Context, req *connect.Request[v1.GetIDTokenRequest]) (*connect.Response[v1.GetIDTokenResponse], error) {
41-
workspaceID, err := validateWorkspaceID(req.Msg.GetWorkspaceId())
41+
workspaceID, err := validateWorkspaceID(ctx, req.Msg.GetWorkspaceId())
4242
if err != nil {
4343
return nil, err
4444
}

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

Lines changed: 22 additions & 21 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"
@@ -48,7 +49,7 @@ type OIDCService struct {
4849
}
4950

5051
func (s *OIDCService) CreateClientConfig(ctx context.Context, req *connect.Request[v1.CreateClientConfigRequest]) (*connect.Response[v1.CreateClientConfigResponse], error) {
51-
organizationID, err := validateOrganizationID(req.Msg.Config.GetOrganizationId())
52+
organizationID, err := validateOrganizationID(ctx, req.Msg.Config.GetOrganizationId())
5253
if err != nil {
5354
return nil, err
5455
}
@@ -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+
"oidcClientConfigId": 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

@@ -148,7 +147,7 @@ func (s *OIDCService) GetClientConfig(ctx context.Context, req *connect.Request[
148147
}
149148

150149
func (s *OIDCService) ListClientConfigs(ctx context.Context, req *connect.Request[v1.ListClientConfigsRequest]) (*connect.Response[v1.ListClientConfigsResponse], error) {
151-
organizationID, err := validateOrganizationID(req.Msg.GetOrganizationId())
150+
organizationID, err := validateOrganizationID(ctx, req.Msg.GetOrganizationId())
152151
if err != nil {
153152
return nil, err
154153
}
@@ -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,10 @@ 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+
"userId": user.ID,
252+
})
253+
253254
if !s.isFeatureEnabled(ctx, conn, user) {
254255
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."))
255256
}
@@ -273,7 +274,7 @@ func (s *OIDCService) isFeatureEnabled(ctx context.Context, conn protocol.APIInt
273274

274275
teams, err := conn.GetTeams(ctx)
275276
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)
277+
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)
277278
teams = nil
278279
}
279280
for _, team := range teams {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func (s *ProjectsService) ListProjects(ctx context.Context, req *connect.Request
145145
}
146146

147147
func (s *ProjectsService) DeleteProject(ctx context.Context, req *connect.Request[v1.DeleteProjectRequest]) (*connect.Response[v1.DeleteProjectResponse], error) {
148-
projectID, err := validateProjectID(req.Msg.GetProjectId())
148+
projectID, err := validateProjectID(ctx, req.Msg.GetProjectId())
149149
if err != nil {
150150
return nil, err
151151
}
@@ -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: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ func (s *TeamService) CreateTeam(ctx context.Context, req *connect.Request[v1.Cr
4343

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

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

@@ -59,7 +59,7 @@ func (s *TeamService) CreateTeam(ctx context.Context, req *connect.Request[v1.Cr
5959
}
6060

6161
func (s *TeamService) GetTeam(ctx context.Context, req *connect.Request[v1.GetTeamRequest]) (*connect.Response[v1.GetTeamResponse], error) {
62-
teamID, err := validateTeamID(req.Msg.GetTeamId())
62+
teamID, err := validateTeamID(ctx, req.Msg.GetTeamId())
6363
if err != nil {
6464
return nil, err
6565
}
@@ -92,7 +92,7 @@ func (s *TeamService) ListTeams(ctx context.Context, req *connect.Request[v1.Lis
9292

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

@@ -124,7 +124,7 @@ func (s *TeamService) ListTeams(ctx context.Context, req *connect.Request[v1.Lis
124124
resultMap := map[string]*v1.Team{}
125125
for res := range resultsChan {
126126
if res.err != nil {
127-
log.WithError(err).Error("Failed to populate team with details.")
127+
log.Extract(ctx).WithError(err).Error("Failed to populate team with details.")
128128
return nil, err
129129
}
130130

@@ -143,7 +143,7 @@ func (s *TeamService) ListTeams(ctx context.Context, req *connect.Request[v1.Lis
143143
}
144144

145145
func (s *TeamService) DeleteTeam(ctx context.Context, req *connect.Request[v1.DeleteTeamRequest]) (*connect.Response[v1.DeleteTeamResponse], error) {
146-
teamID, err := validateTeamID(req.Msg.GetTeamId())
146+
teamID, err := validateTeamID(ctx, req.Msg.GetTeamId())
147147
if err != nil {
148148
return nil, err
149149
}
@@ -178,7 +178,7 @@ func (s *TeamService) JoinTeam(ctx context.Context, req *connect.Request[v1.Join
178178

179179
response, err := s.toTeamAPIResponse(ctx, conn, team)
180180
if err != nil {
181-
log.WithError(err).Error("Failed to populate team with details.")
181+
log.Extract(ctx).WithError(err).Error("Failed to populate team with details.")
182182
return nil, err
183183
}
184184

@@ -188,7 +188,7 @@ func (s *TeamService) JoinTeam(ctx context.Context, req *connect.Request[v1.Join
188188
}
189189

190190
func (s *TeamService) ResetTeamInvitation(ctx context.Context, req *connect.Request[v1.ResetTeamInvitationRequest]) (*connect.Response[v1.ResetTeamInvitationResponse], error) {
191-
teamID, err := validateTeamID(req.Msg.GetTeamId())
191+
teamID, err := validateTeamID(ctx, req.Msg.GetTeamId())
192192
if err != nil {
193193
return nil, err
194194
}
@@ -270,15 +270,16 @@ func (s *TeamService) DeleteTeamMember(ctx context.Context, req *connect.Request
270270
}
271271

272272
func (s *TeamService) toTeamAPIResponse(ctx context.Context, conn protocol.APIInterface, team *protocol.Team) (*v1.Team, error) {
273+
logger := log.Extract(ctx).WithField("teamId", team.ID)
273274
members, err := conn.GetTeamMembers(ctx, team.ID)
274275
if err != nil {
275-
log.WithError(err).Error("Failed to get team members.")
276+
logger.WithError(err).Error("Failed to get team members.")
276277
return nil, proxy.ConvertError(err)
277278
}
278279

279280
invite, err := conn.GetGenericInvite(ctx, team.ID)
280281
if err != nil {
281-
log.WithError(err).Error("Failed to get generic invite.")
282+
logger.WithError(err).Error("Failed to get generic invite.")
282283
return nil, proxy.ConvertError(err)
283284
}
284285

0 commit comments

Comments
 (0)