github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/health/checks/signalrclient.go (about) 1 package checks 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "github.com/mdaxf/iac-signalr/signalr" 9 ) 10 11 type SignalClientCheck struct { 12 Ctx context.Context 13 SignalClient signalr.Client 14 Error error 15 } 16 17 func NewSignalClientCheck(ctx context.Context, client signalr.Client) SignalClientCheck { 18 return SignalClientCheck{ 19 Ctx: ctx, 20 SignalClient: client, 21 Error: nil, 22 } 23 } 24 25 func CheckSignalClientStatus(ctx context.Context, client signalr.Client) error { 26 check := NewSignalClientCheck(ctx, client) 27 return check.CheckStatus() 28 } 29 30 func (check SignalClientCheck) CheckStatus() error { 31 client := check.SignalClient 32 var checkErr error 33 checkErr = nil 34 go func() { 35 defer func() { 36 if r := recover(); r != nil { 37 return 38 } 39 }() 40 41 ticker := time.NewTicker(30 * time.Second) 42 for range ticker.C { 43 if client.State() != signalr.ClientConnected { 44 checkErr = fmt.Errorf("SignalR Client is not connected") 45 check.Error = checkErr 46 } 47 } 48 }() 49 return checkErr 50 }