Skip to content

Commit

Permalink
Modify code based on opinions
Browse files Browse the repository at this point in the history
  • Loading branch information
billie60 committed Jun 18, 2023
1 parent b86d62c commit fd34ce9
Showing 1 changed file with 34 additions and 88 deletions.
122 changes: 34 additions & 88 deletions cmd/prefetchfiles-nri-plugin/main.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Copyright (c) 2023. Nydus Developers. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
* Copyright (c) 2023. Nydus Developers. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/

package main
Expand All @@ -26,30 +26,21 @@ import (

"github.com/containerd/nri/pkg/api"
"github.com/containerd/nri/pkg/stub"
"github.com/containerd/nydus-snapshotter/pkg/fanotify"
"github.com/containerd/nydus-snapshotter/version"
"github.com/pelletier/go-toml"
)

const (
defaultEvents = "RunPodSandbox"
defaultServerPath = "/usr/local/bin/optimizer-server"
defaultPersistDir = "/opt/nri/optimizer/results"
endpointPL = "/api/v1/daemons/prefetch" //////////todo
defaultEvents = "RunPodSandbox"
defaulthttp = "http://system.sock"
defaultsockaddr = "/run/containerd-nydus/system.sock"
)

type PluginConfig struct {
Events []string `toml:"events"`
ServerPath string `toml:"server_path"`
PersistDir string `toml:"persist_dir"`
Timeout int `toml:"timeout"`
Overwrite bool `toml:"overwrite"`
}

type PluginArgs struct {
PluginName string
PluginIdx string
PluginEvents string
Config PluginConfig
Sockaddr string
}

type Flags struct {
Expand All @@ -69,35 +60,18 @@ func buildFlags(args *PluginArgs) []cli.Flag {
Usage: "plugin index to register to NRI",
Destination: &args.PluginIdx,
},
&cli.StringFlag{
Name: "sockaddr",
Value: defaultsockaddr,
Usage: "default unix domain socket address",
Destination: &args.Sockaddr,
},
&cli.StringFlag{
Name: "events",
Value: defaultEvents,
Usage: "the events that containerd subscribes to. DO NOT CHANGE THIS.",
Destination: &args.PluginEvents,
},
&cli.StringFlag{
Name: "server-path",
Value: defaultServerPath,
Usage: "the path of optimizer server binary",
Destination: &args.Config.ServerPath,
},
&cli.StringFlag{
Name: "persist-dir",
Value: defaultPersistDir,
Usage: "the directory to persist accessed files list for container",
Destination: &args.Config.PersistDir,
},
&cli.IntFlag{
Name: "timeout",
Value: 0,
Usage: "the timeout to kill optimizer server, 0 to disable it",
Destination: &args.Config.Timeout,
},
&cli.BoolFlag{
Name: "overwrite",
Usage: "whether to overwrite the existed persistent files",
Destination: &args.Config.Overwrite,
},
}
}

Expand All @@ -115,50 +89,24 @@ type plugin struct {
}

var (
cfg PluginConfig
log *logrus.Logger
logWriter *syslog.Writer
globalFanotifyServer = make(map[string]*fanotify.Server)
globalsock string
log *logrus.Logger
logWriter *syslog.Writer
)

func (p *plugin) Configure(config, runtime, version string) (stub.EventMask, error) {
log.Infof("got configuration data: %q from runtime %s %s", config, runtime, version)
if config == "" {
return p.mask, nil
}

tree, err := toml.Load(config)
if err != nil {
return 0, errors.Wrap(err, "parse TOML")
}
if err := tree.Unmarshal(&cfg); err != nil {
return 0, err
}

p.mask, err = api.ParseEventMask(cfg.Events...)
if err != nil {
return 0, errors.Wrap(err, "parse events in configuration")
}

log.Infof("configuration: %#v", cfg)

return p.mask, nil
}

func sendDataOverHTTP(data string, endpoint string) error {
url := "http://172.0.0.1:9110" + endpoint
func sendDataOverHTTP(data string, endpoint string, sock string) error {
url := defaulthttp + endpoint
req, err := http.NewRequest("POST",
url, bytes.NewBufferString(data))
if err != nil {
return err
}

conn, err := net.Dial("unix", "/run/containerd-nydus/system.sock")
conn, err := net.Dial("unix", sock)
if err != nil {
return err
}
defer conn.Close()

client := &http.Client{
Transport: &http.Transport{
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
Expand All @@ -174,44 +122,43 @@ func sendDataOverHTTP(data string, endpoint string) error {

return nil
}

func (p *plugin) RunPodSandbox(pod *api.PodSandbox) error {
name := pod.Name
parts := strings.Split(name, "-")
name = parts[0]
if pod.Annotations == nil {
log.Printf("error: Pod annotations is nil")
return nil
return errors.New("Pod annotations is nil")
}

prefetchList, ok := pod.Annotations["prefetch_list"]
if !ok {
errMsg := "Pod.yaml annotations don't have prefetch list."
log.Printf("error: %s", errMsg)
return nil
return errors.New(errMsg)
}

msg := fmt.Sprintf("%s : %s", name, prefetchList)
err := sendDataOverHTTP(msg, "/api/v1/daemons/prefetch")
err := sendDataOverHTTP(msg, endpointPL, globalsock)
if err != nil {
log.Printf("Failed to send data: %v\n", err)
} else {
log.Println("Data sent successfully")
return err
}

return nil
}

func (p *plugin) onClose() {
for _, fanotifyServer := range globalFanotifyServer {
fanotifyServer.StopServer()
}
os.Exit(0)
}

func main() {

flags := NewPluginFlags()
app := &cli.App{
Name: "optimizer-nri-plugin",
Usage: "Optimizer client for NRI plugin to manage optimizer server",
Name: "prefetchfiles-nri-plugin",
Usage: "NRI plugin for obtaining and transmitting prefetch files path",
Version: version.Version,
Flags: flags.F,
HideVersion: true,
Expand All @@ -221,13 +168,14 @@ func main() {
err error
)

cfg = flags.Args.Config
flags.Args.Sockaddr = c.String("sockaddr")
globalsock = flags.Args.Sockaddr

log = logrus.StandardLogger()
log.SetFormatter(&logrus.TextFormatter{
PadLevelText: true,
})
logWriter, err = syslog.New(syslog.LOG_INFO, "optimizer-nri-plugin")
logWriter, err = syslog.New(syslog.LOG_INFO, "prefetchfiles-nri-plugin")

if err == nil {
log.SetOutput(io.MultiWriter(os.Stdout, logWriter))
Expand All @@ -243,10 +191,8 @@ func main() {
p := &plugin{}

if p.mask, err = api.ParseEventMask(flags.Args.PluginEvents); err != nil {

log.Fatalf("failed to parse events: %v", err)
}
cfg.Events = strings.Split(flags.Args.PluginEvents, ",")

if p.stub, err = stub.New(p, append(opts, stub.WithOnClose(p.onClose))...); err != nil {
log.Fatalf("failed to create plugin stub: %v", err)
Expand All @@ -264,9 +210,9 @@ func main() {
if err := app.Run(os.Args); err != nil {

if errdefs.IsConnectionClosed(err) {
log.Info("optimizer NRI plugin exited")
log.Info("prefetchfiles NRI plugin exited")
} else {
log.WithError(err).Fatal("failed to start optimizer NRI plugin")
log.WithError(err).Fatal("failed to start prefetchfiles NRI plugin")
}
}
}

0 comments on commit fd34ce9

Please sign in to comment.