github.com/google/fleetspeak@v0.1.15-0.20240426164851-4f31f62c1aea/cmd/fleetspeak_client/fleetspeak_client.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"os"
     6  
     7  	log "github.com/golang/glog"
     8  	"google.golang.org/protobuf/encoding/prototext"
     9  
    10  	"github.com/google/fleetspeak/fleetspeak/src/client"
    11  	"github.com/google/fleetspeak/fleetspeak/src/client/comms"
    12  	"github.com/google/fleetspeak/fleetspeak/src/client/daemonservice"
    13  	"github.com/google/fleetspeak/fleetspeak/src/client/entry"
    14  	"github.com/google/fleetspeak/fleetspeak/src/client/generic"
    15  	"github.com/google/fleetspeak/fleetspeak/src/client/https"
    16  	"github.com/google/fleetspeak/fleetspeak/src/client/service"
    17  	"github.com/google/fleetspeak/fleetspeak/src/client/socketservice"
    18  	"github.com/google/fleetspeak/fleetspeak/src/client/stats"
    19  	"github.com/google/fleetspeak/fleetspeak/src/client/stdinservice"
    20  
    21  	gpb "github.com/google/fleetspeak/fleetspeak/src/client/generic/proto/fleetspeak_client_generic"
    22  )
    23  
    24  var configFile = flag.String("config", "", "Client configuration file, required.")
    25  var profileDir = flag.String("profile-dir", "/tmp", "Profile directory.")
    26  
    27  func innerMain() {
    28  	flag.Parse()
    29  
    30  	b, err := os.ReadFile(*configFile)
    31  	if err != nil {
    32  		log.Exitf("Unable to read configuration file [%s]: %v", *configFile, err)
    33  	}
    34  	cfgPB := &gpb.Config{}
    35  	if err := prototext.Unmarshal(b, cfgPB); err != nil {
    36  		log.Exitf("Unable to parse configuration file [%s]: %v", *configFile, err)
    37  	}
    38  
    39  	cfg, err := generic.MakeConfiguration(cfgPB)
    40  	if err != nil {
    41  		log.Exitf("Error in configuration file: %v", err)
    42  	}
    43  
    44  	var com comms.Communicator
    45  	if cfgPB.Streaming {
    46  		com = &https.StreamingCommunicator{}
    47  	} else {
    48  		com = &https.Communicator{}
    49  	}
    50  
    51  	cl, err := client.New(cfg,
    52  		client.Components{
    53  			ServiceFactories: map[string]service.Factory{
    54  				"Daemon": daemonservice.Factory,
    55  				"NOOP":   service.NOOPFactory,
    56  				"Socket": socketservice.Factory,
    57  				"Stdin":  stdinservice.Factory,
    58  			},
    59  			Communicator: com,
    60  			Stats:        stats.NoopCollector{},
    61  		})
    62  	if err != nil {
    63  		log.Exitf("Error starting client: %v", err)
    64  	}
    65  
    66  	entry.Wait(cl, *profileDir)
    67  }
    68  
    69  func main() {
    70  	entry.RunMain(innerMain, "FleetspeakService")
    71  }