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  }