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 }