mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-11 00:44:20 -05:00
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
|
/*
|
||
|
Copyright (c) Edgeless Systems GmbH
|
||
|
|
||
|
SPDX-License-Identifier: AGPL-3.0-only
|
||
|
*/
|
||
|
|
||
|
// grpclog provides a logging utilities for gRPC.
|
||
|
package grpclog
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"sync"
|
||
|
|
||
|
"google.golang.org/grpc/connectivity"
|
||
|
"google.golang.org/grpc/peer"
|
||
|
)
|
||
|
|
||
|
// PeerAddrFromContext returns a peer's address from context, or "unknown" if not found.
|
||
|
func PeerAddrFromContext(ctx context.Context) string {
|
||
|
p, ok := peer.FromContext(ctx)
|
||
|
if !ok {
|
||
|
return "unknown"
|
||
|
}
|
||
|
return p.Addr.String()
|
||
|
}
|
||
|
|
||
|
// LogStateChangesUntilReady logs the state changes of a gRPC connection.
|
||
|
func LogStateChangesUntilReady(ctx context.Context, conn getStater, log debugLog, wg *sync.WaitGroup, isReadyCallback func()) {
|
||
|
wg.Add(1)
|
||
|
go func() {
|
||
|
defer wg.Done()
|
||
|
state := conn.GetState()
|
||
|
log.Debugf("Connection state started as %s", state)
|
||
|
for ; state != connectivity.Ready && conn.WaitForStateChange(ctx, state); state = conn.GetState() {
|
||
|
log.Debugf("Connection state changed to %s", state)
|
||
|
}
|
||
|
if state == connectivity.Ready {
|
||
|
log.Debugf("Connection ready")
|
||
|
isReadyCallback()
|
||
|
} else {
|
||
|
log.Debugf("Connection state ended with %s", state)
|
||
|
}
|
||
|
}()
|
||
|
}
|
||
|
|
||
|
type getStater interface {
|
||
|
GetState() connectivity.State
|
||
|
WaitForStateChange(context.Context, connectivity.State) bool
|
||
|
}
|
||
|
|
||
|
type debugLog interface {
|
||
|
Debugf(format string, args ...any)
|
||
|
}
|