...

Source file src/golang.conradwood.net/go-easyops/utils/faults.go

Documentation: golang.conradwood.net/go-easyops/utils

     1  package utils
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"sync"
     7  	"time"
     8  
     9  	"golang.yacloud.eu/apis/faultindicator"
    10  	"google.golang.org/grpc"
    11  )
    12  
    13  var (
    14  	fault_lock sync.Mutex
    15  	// public as implementation detail
    16  	Client_connector ClientConnector
    17  	faultcc          faultindicator.FaultIndicatorClient
    18  )
    19  
    20  type ClientConnector interface {
    21  	Connect(string) *grpc.ClientConn
    22  }
    23  
    24  // get the faultindicator client.
    25  func GetFaultIndicatorClient() faultindicator.FaultIndicatorClient {
    26  	fault_lock.Lock()
    27  	defer fault_lock.Unlock()
    28  	if faultcc != nil {
    29  		return faultcc
    30  	}
    31  	cc := Client_connector
    32  	if cc == nil {
    33  		fmt.Printf("No fault indicator client!\n")
    34  		time.Sleep(time.Duration(3) * time.Second)
    35  		return nil
    36  	}
    37  	con := cc.Connect("faultindicator.FaultIndicator")
    38  	faultcc = faultindicator.NewFaultIndicatorClient(con)
    39  	return faultcc
    40  }
    41  
    42  // This logs a fault to the faultindicator service.
    43  func LogFault(ctx context.Context, name, desc string) {
    44  
    45  	_, err := GetFaultIndicatorClient().LogFault(ctx, &faultindicator.LogFaultRequest{
    46  		Name:        name,
    47  		Description: desc,
    48  	})
    49  	if err != nil {
    50  		fmt.Printf("[go-easyops] --- failed to log fault: %s\n", ErrorString(err))
    51  	}
    52  }
    53  

View as plain text