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  }