Skip to content

Commit 4c9316f

Browse files
committed
Refactor logger code
1 parent 62d0812 commit 4c9316f

1 file changed

Lines changed: 63 additions & 42 deletions

File tree

protocol/logger/job_logger.go

Lines changed: 63 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,39 @@ func (logger *WebsocketLivelogger) SendLog(lines *protocol.TimelineRecordFeedLin
109109
return wsjson.Write(ctx, ws, lines)
110110
}
111111

112+
func (logger *WebsocketLivelogger) ReConnectAndSendLog(lines *protocol.TimelineRecordFeedLinesWrapper) error {
113+
if err := logger.Connect(); err != nil {
114+
return err
115+
}
116+
if err := logger.SendLog(lines); err != nil {
117+
return err
118+
}
119+
return nil
120+
}
121+
122+
type currentLogger struct {
123+
logger LiveLogger
124+
wsLogger *WebsocketLivelogger
125+
}
126+
127+
func (c *currentLogger) isValid() bool {
128+
return c != nil && c.logger != nil
129+
}
130+
112131
type WebsocketLiveloggerWithFallback struct {
113132
JobRequest *protocol.AgentJobRequestMessage
114133
Connection *protocol.VssConnection
115-
currentLogger atomic.Pointer[LiveLogger]
134+
currentLogger atomic.Pointer[currentLogger]
116135
FeedStreamURL string
117136
ForceWebsock bool
118137
}
119138

120-
func (logger *WebsocketLiveloggerWithFallback) initializeVssLogger() LiveLogger {
121-
l := &VssLiveLogger{
122-
JobRequest: logger.JobRequest,
123-
Connection: logger.Connection,
139+
func (logger *WebsocketLiveloggerWithFallback) initializeVssLogger() *currentLogger {
140+
l := &currentLogger{
141+
logger: &VssLiveLogger{
142+
JobRequest: logger.JobRequest,
143+
Connection: logger.Connection,
144+
},
124145
}
125146
_ = logger.replace(l) // Ignore error for cleanup
126147
return l
@@ -130,7 +151,7 @@ func (logger *WebsocketLiveloggerWithFallback) InitializeVssLogger() {
130151
logger.initializeVssLogger()
131152
}
132153

133-
func (logger *WebsocketLiveloggerWithFallback) initialize() LiveLogger {
154+
func (logger *WebsocketLiveloggerWithFallback) initialize() *currentLogger {
134155
if logger.FeedStreamURL != "" {
135156
wslogger := &WebsocketLivelogger{
136157
JobRequest: logger.JobRequest,
@@ -139,8 +160,12 @@ func (logger *WebsocketLiveloggerWithFallback) initialize() LiveLogger {
139160
}
140161
err := wslogger.Connect()
141162
if err == nil {
142-
_ = logger.replace(wslogger) // Ignore error for cleanup
143-
return wslogger
163+
cl := &currentLogger{
164+
logger: wslogger,
165+
wsLogger: wslogger,
166+
}
167+
_ = logger.replace(cl) // Ignore error for cleanup
168+
return cl
144169
} else if logger.Connection.Trace {
145170
fmt.Printf("Failed to connect to websocket %s, fallback to vsslogger\n", err.Error())
146171
}
@@ -170,65 +195,61 @@ func (e *errorLogger) SendLog(lines *protocol.TimelineRecordFeedLinesWrapper) er
170195
return ErrMissingLoggerConnection
171196
}
172197

173-
func makePointer[T any](p T) *T {
174-
return &p
175-
}
176-
177-
func getPointer[T any](p *T) T {
178-
if p == nil {
179-
var zero T
180-
return zero
181-
}
182-
return *p
183-
}
184-
185-
func (logger *WebsocketLiveloggerWithFallback) replace(n LiveLogger) error {
186-
if currentLogger := logger.currentLogger.Swap(makePointer(n)); getPointer(currentLogger) != nil {
187-
return (*currentLogger).Close()
198+
func (logger *WebsocketLiveloggerWithFallback) replace(n *currentLogger) error {
199+
if currentLogger := logger.currentLogger.Swap(n); currentLogger.isValid() {
200+
return currentLogger.logger.Close()
188201
}
189202
return nil
190203
}
191204

192205
func (logger *WebsocketLiveloggerWithFallback) Close() error {
193-
return logger.replace(&errorLogger{})
206+
return logger.replace(&currentLogger{
207+
logger: &errorLogger{},
208+
})
194209
}
195210

196211
func (logger *WebsocketLiveloggerWithFallback) sendLogFallback(
197-
err error, reason string, wrapper *protocol.TimelineRecordFeedLinesWrapper,
212+
err error, wrapper *protocol.TimelineRecordFeedLinesWrapper,
198213
) error {
199214
if !logger.ForceWebsock {
200215
if logger.Connection.Trace {
201-
fmt.Printf("Failed to %s to websocket %s, fallback to vsslogger\n", reason, err.Error())
216+
fmt.Printf("Failed to send to websocket %s, fallback to vsslogger\n", err.Error())
202217
}
203218
currentLogger := logger.initializeVssLogger()
204219
if currentLogger == nil {
205-
return fmt.Errorf("failed to initialize VSS logger after websocket %s failure: %w", reason, err)
220+
return fmt.Errorf("failed to initialize VSS logger after websocket send failure: %w", err)
206221
}
207-
return currentLogger.SendLog(wrapper)
222+
return currentLogger.logger.SendLog(wrapper)
208223
}
209224
return err
210225
}
211226

227+
func (logger *WebsocketLiveloggerWithFallback) getOrInitializeLogger() (*currentLogger, error) {
228+
currentLogger := logger.currentLogger.Load()
229+
if currentLogger.isValid() {
230+
return currentLogger, nil
231+
}
232+
currentLogger = logger.initialize()
233+
if currentLogger.isValid() {
234+
return currentLogger, nil
235+
}
236+
return nil, fmt.Errorf("failed to initialize live logger: no logger instance available (ForceWebsock=%t)", logger.ForceWebsock)
237+
}
238+
212239
func (logger *WebsocketLiveloggerWithFallback) SendLog(wrapper *protocol.TimelineRecordFeedLinesWrapper) error {
213-
currentLogger := getPointer(logger.currentLogger.Load())
214-
if currentLogger == nil {
215-
currentLogger = logger.initialize()
216-
if currentLogger == nil {
217-
return fmt.Errorf("failed to initialize live logger: no logger instance available (ForceWebsock=%t)", logger.ForceWebsock)
218-
}
240+
currentLogger, err := logger.getOrInitializeLogger()
241+
if err != nil {
242+
return err
219243
}
220-
err := currentLogger.SendLog(wrapper)
244+
err = currentLogger.logger.SendLog(wrapper)
221245
if err != nil {
222246
if logger.Connection.Trace {
223247
fmt.Printf("Failed to send webconsole log %s\n", err.Error())
224248
}
225-
if wslogger, ok := currentLogger.(*WebsocketLivelogger); ok {
226-
if err = wslogger.Connect(); err != nil {
227-
return logger.sendLogFallback(err, "reconnect", wrapper)
228-
}
229-
err = currentLogger.SendLog(wrapper)
230-
if err != nil {
231-
return logger.sendLogFallback(err, "send", wrapper)
249+
wsLogger := currentLogger.wsLogger
250+
if wsLogger != nil {
251+
if err = currentLogger.wsLogger.ReConnectAndSendLog(wrapper); err != nil {
252+
return logger.sendLogFallback(err, wrapper)
232253
}
233254
return nil
234255
}

0 commit comments

Comments
 (0)