github.com/Uptycs/basequery-go@v0.8.0/cmd/examples/config/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "flag" 6 "log" 7 "time" 8 9 osquery "github.com/Uptycs/basequery-go" 10 gen "github.com/Uptycs/basequery-go/gen/osquery" 11 "github.com/Uptycs/basequery-go/plugin/config" 12 ) 13 14 var ( 15 verbose = flag.Bool("verbose", false, "Log verbose") 16 socket = flag.String("socket", "", "Path to the extensions UNIX domain socket") 17 timeout = flag.Int("timeout", 5, "Seconds to wait for autoloaded extensions") 18 interval = flag.Int("interval", 5, "Seconds delay between connectivity checks") 19 ) 20 21 func main() { 22 flag.Parse() 23 24 if *socket == "" { 25 log.Fatalln("Missing required --socket argument") 26 } 27 28 serverTimeout := osquery.ServerTimeout( 29 time.Second * time.Duration(*timeout), 30 ) 31 serverPingInterval := osquery.ServerPingInterval( 32 time.Second * time.Duration(*interval), 33 ) 34 35 server, err := osquery.NewExtensionManagerServer( 36 "example_extension", 37 *socket, 38 serverTimeout, 39 serverPingInterval, 40 ) 41 42 if err != nil { 43 log.Fatalf("Error creating extension: %s\n", err) 44 } 45 server.RegisterPlugin(config.NewPlugin("example_config", GenerateConfigs, RefreshConfig)) 46 log.Println("Starting config extension") 47 if err := server.Run(); err != nil { 48 log.Fatal(err) 49 } 50 } 51 52 // RefreshConfig callback function invoked when config is refreshed. 53 func RefreshConfig(ctx context.Context, request gen.ExtensionPluginRequest) gen.ExtensionResponse { 54 log.Println("Example config extension got refresh request") 55 for k, v := range request { 56 log.Println(k, v) 57 } 58 return gen.ExtensionResponse{ 59 Status: &gen.ExtensionStatus{Code: 0, Message: "OK"}, 60 } 61 } 62 63 // GenerateConfigs callback function invoked to get the config. 64 func GenerateConfigs(ctx context.Context) (map[string]string, error) { 65 log.Println("Sending example extension config") 66 return map[string]string{ 67 "config1": ` 68 { 69 "options1": { 70 "host_identifier": "hostname", 71 "schedule_splay_percent": 10 72 }, 73 "schedule1": { 74 "macos_kextstat": { 75 "query": "SELECT * FROM kernel_extensions;", 76 "interval": 10 77 }, 78 "foobar": { 79 "query": "SELECT foo, bar, pid FROM foobar_table;", 80 "interval": 600 81 } 82 } 83 } 84 `, 85 }, nil 86 }