...

Source file src/edge-infra.dev/pkg/sds/etcd/manager/internal/observability/logging.go

Documentation: edge-infra.dev/pkg/sds/etcd/manager/internal/observability

     1  package observability
     2  
     3  import (
     4  	"edge-infra.dev/pkg/lib/fog"
     5  )
     6  
     7  type logger interface {
     8  	Info(msg string, keysAndValues ...interface{})
     9  }
    10  
    11  // StateLogger stores the state of the cluster when it was last logged
    12  type StateLogger struct {
    13  	firstLog  bool
    14  	lastState bool
    15  	log       logger
    16  }
    17  
    18  // NewStateLogger creates a new StateLogger with the given log level
    19  func NewStateLogger(level int) StateLogger {
    20  	return StateLogger{
    21  		firstLog: true,
    22  		log:      fog.New(fog.WithLevel(level)).WithName("etcd-manager-state-logger").WithValues("routine", "logger"),
    23  	}
    24  }
    25  
    26  // HasStateChanged returns true if the state has changed since the last time it was logged
    27  func (sl *StateLogger) HasStateChanged(state bool) bool {
    28  	return state != sl.lastState
    29  }
    30  
    31  // Log the current state of the cluster
    32  func (sl *StateLogger) Log(state bool) {
    33  	var msg string
    34  
    35  	switch state {
    36  	case true:
    37  		msg = "cluster is healthy"
    38  	case false:
    39  		msg = "cluster is unhealthy"
    40  	}
    41  
    42  	sl.log.Info(msg, "healthy", state)
    43  
    44  	sl.lastState = state
    45  }
    46  
    47  // LogIfStateChanged logs the current state of the cluster if it has changed since
    48  // the last time it was logged
    49  func (sl *StateLogger) LogIfStateChanged(state bool) {
    50  	if sl.HasStateChanged(state) || sl.firstLog {
    51  		sl.Log(state)
    52  	}
    53  	sl.firstLog = false
    54  }
    55  

View as plain text