Skip to content

Commit 1d02905

Browse files
Log DisplayMessage in thrift responses
Signed-off-by: Raymond Cypher <[email protected]>
1 parent 6b4fce7 commit 1d02905

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

internal/client/client.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func (tsc *ThriftServiceClient) OpenSession(ctx context.Context, req *cli_servic
8686

8787
resp, err := tsc.TCLIServiceClient.OpenSession(ctx, req)
8888
log, ctx = LoggerAndContext(ctx, resp)
89+
logDisplayMessage(resp, log)
8990
defer log.Duration(msg, start)
9091
if err != nil {
9192
err = handleClientMethodError(ctx, err)
@@ -106,6 +107,7 @@ func (tsc *ThriftServiceClient) CloseSession(ctx context.Context, req *cli_servi
106107
defer log.Duration(logger.Track("CloseSession"))
107108

108109
resp, err := tsc.TCLIServiceClient.CloseSession(ctx, req)
110+
logDisplayMessage(resp, log)
109111
if err != nil {
110112
err = handleClientMethodError(ctx, err)
111113
return resp, err
@@ -125,6 +127,7 @@ func (tsc *ThriftServiceClient) FetchResults(ctx context.Context, req *cli_servi
125127
defer log.Duration(logger.Track("FetchResults"))
126128

127129
resp, err := tsc.TCLIServiceClient.FetchResults(ctx, req)
130+
logDisplayMessage(resp, log)
128131
if err != nil {
129132
err = handleClientMethodError(ctx, err)
130133
return resp, err
@@ -144,6 +147,7 @@ func (tsc *ThriftServiceClient) GetResultSetMetadata(ctx context.Context, req *c
144147
defer log.Duration(logger.Track("GetResultSetMetadata"))
145148

146149
resp, err := tsc.TCLIServiceClient.GetResultSetMetadata(ctx, req)
150+
logDisplayMessage(resp, log)
147151
if err != nil {
148152
err = handleClientMethodError(ctx, err)
149153
return resp, err
@@ -165,7 +169,9 @@ func (tsc *ThriftServiceClient) ExecuteStatement(ctx context.Context, req *cli_s
165169
// We use context.Background to fix a problem where on context done the query would not be cancelled.
166170
resp, err := tsc.TCLIServiceClient.ExecuteStatement(context.Background(), req)
167171
log, ctx = LoggerAndContext(ctx, resp)
172+
logDisplayMessage(resp, log)
168173
logExecStatementState(resp, log)
174+
169175
defer log.Duration(msg, start)
170176
if err != nil {
171177
err = handleClientMethodError(ctx, err)
@@ -184,6 +190,7 @@ func (tsc *ThriftServiceClient) GetOperationStatus(ctx context.Context, req *cli
184190
defer log.Duration(logger.Track("GetOperationStatus"))
185191

186192
resp, err := tsc.TCLIServiceClient.GetOperationStatus(ctx, req)
193+
logDisplayMessage(resp, log)
187194
if err != nil {
188195
err = handleClientMethodError(driverctx.NewContextWithQueryId(ctx, SprintGuid(req.OperationHandle.OperationId.GUID)), err)
189196
return resp, err
@@ -203,6 +210,7 @@ func (tsc *ThriftServiceClient) CloseOperation(ctx context.Context, req *cli_ser
203210
defer log.Duration(logger.Track("CloseOperation"))
204211

205212
resp, err := tsc.TCLIServiceClient.CloseOperation(ctx, req)
213+
logDisplayMessage(resp, log)
206214
if err != nil {
207215
err = handleClientMethodError(ctx, err)
208216
return resp, err
@@ -222,6 +230,7 @@ func (tsc *ThriftServiceClient) CancelOperation(ctx context.Context, req *cli_se
222230
defer log.Duration(logger.Track("CancelOperation"))
223231

224232
resp, err := tsc.TCLIServiceClient.CancelOperation(ctx, req)
233+
logDisplayMessage(resp, log)
225234
if err != nil {
226235
err = handleClientMethodError(ctx, err)
227236
return resp, err
@@ -439,13 +448,37 @@ func logExecStatementState(resp *cli_service.TExecuteStatementResp, log *logger.
439448
log.Debug().Msgf("execute statement state: %s", state)
440449
status := resp.DirectResults.GetOperationStatus().GetStatus().StatusCode
441450
log.Debug().Msgf("execute statement status: %s", status)
451+
logDisplayMessage(resp.DirectResults, log)
442452
} else {
443453
status := resp.GetStatus().StatusCode
444454
log.Debug().Msgf("execute statement status: %s", status)
445455
}
446456
}
447457
}
448458

459+
type hasGetStatus interface{ GetStatus() *cli_service.TStatus }
460+
type hasGetDisplayMessage interface{ GetDisplayMessage() string }
461+
type hasGetOperationStatus interface {
462+
GetOperationStatus() *cli_service.TGetOperationStatusResp
463+
}
464+
465+
func logDisplayMessage(c any, log *logger.DBSQLLogger) {
466+
if c == nil || reflect.ValueOf(c).IsNil() {
467+
return
468+
}
469+
470+
if hd, ok := c.(hasGetDisplayMessage); ok {
471+
dm := hd.GetDisplayMessage()
472+
if dm != "" {
473+
log.Debug().Msg(dm)
474+
}
475+
} else if gs, ok := c.(hasGetStatus); ok {
476+
logDisplayMessage(gs.GetStatus(), log)
477+
} else if gos, ok := c.(hasGetOperationStatus); ok {
478+
logDisplayMessage(gos.GetOperationStatus(), log)
479+
}
480+
}
481+
449482
var retryableStatusCodes = map[int]any{http.StatusTooManyRequests: struct{}{}, http.StatusServiceUnavailable: struct{}{}}
450483

451484
func isRetryableServerResponse(resp *http.Response) bool {

0 commit comments

Comments
 (0)