osq-exts/main.go (73 lines of code) (raw):
package main
import (
"flag"
"github.com/osquery/osquery-go"
"github.com/osquery/osquery-go/plugin/logger"
"github.com/osquery/osquery-go/plugin/table"
"github.com/uber/client-platform-engineering/osq-exts/tables/crowdstrikefalconagent"
"github.com/uber/client-platform-engineering/osq-exts/tables/ima"
"github.com/uber/client-platform-engineering/osq-exts/tables/opendns"
"log"
"os"
"time"
)
const (
_EXT_MANAGER = "osq-exts"
_ERR_FMT = "err %v\n"
_ERR_SOCKET = "socket undefined."
)
var (
socket = flag.String("socket", "", "Path to the extensions UNIX domain socket")
timeout = flag.Int("timeout", 3, "Seconds to wait for autoloaded extensions")
interval = flag.Int("interval", 3, "Seconds delay between connectivity checks")
verbose = flag.Bool("verbose", false, "enable verbose messaging")
)
func listOfPlugins() (plugins []osquery.OsqueryPlugin) {
if csfa, err := crowdstrikefalconagent.New(); err == nil {
plugins = append(plugins, table.NewPlugin(csfa.Register()))
plugins = append(plugins, logger.NewPlugin(csfa.Logger()))
}
if imasubsys, err := ima.NewIMA(); err == nil {
plugins = append(plugins, table.NewPlugin(imasubsys.Register()))
}
if measurements, err := ima.NewMeasurements(); err == nil {
plugins = append(plugins, table.NewPlugin(measurements.Register()))
}
if opendns, err := opendns.New(); err == nil {
plugins = append(plugins, table.NewPlugin(opendns.Register()))
plugins = append(plugins, logger.NewPlugin(opendns.Logger()))
}
return
}
func checkError(err error) {
if err != nil {
log.Fatalf(_ERR_FMT, err)
}
}
func main() {
flag.Parse()
if *socket == "" {
flag.PrintDefaults()
log.Fatal(_ERR_SOCKET)
}
_, err := os.Stat(*socket)
checkError(err)
serverTimeout := osquery.ServerTimeout(
time.Second * time.Duration(*timeout),
)
serverPingInterval := osquery.ServerPingInterval(
time.Second * time.Duration(*interval),
)
server, err := osquery.NewExtensionManagerServer(
_EXT_MANAGER,
*socket,
serverTimeout,
serverPingInterval,
)
checkError(err)
for _, v := range listOfPlugins() {
server.RegisterPlugin(v)
}
err = server.Run()
checkError(err)
}