From 95a9ee75718489353ddb45fc596652973e3ade06 Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Tue, 17 Aug 2021 05:56:56 +0300 Subject: [PATCH] Add a build script to automatically build extensions from a known path and load them --- Makefile | 10 ++-------- build_extensions.sh | 12 ++++++++++++ tap/extensions/amqp/go.mod | 3 +++ tap/extensions/amqp/main.go | 18 ++++++++++++++++++ tap/extensions/http/go.sum | 20 -------------------- tap/extensions/http/main.go | 8 ++++++-- tap/extensions/kafka/go.mod | 3 +++ tap/extensions/kafka/main.go | 18 ++++++++++++++++++ tap/passive_tapper.go | 33 +++++++++++++++++++++------------ 9 files changed, 83 insertions(+), 42 deletions(-) create mode 100755 build_extensions.sh create mode 100644 tap/extensions/amqp/go.mod create mode 100644 tap/extensions/amqp/main.go delete mode 100644 tap/extensions/http/go.sum create mode 100644 tap/extensions/kafka/go.mod create mode 100644 tap/extensions/kafka/main.go diff --git a/Makefile b/Makefile index bdabb325e..a82fed4ec 100644 --- a/Makefile +++ b/Makefile @@ -66,11 +66,5 @@ clean-cli: ## Clean CLI. clean-docker: @(echo "DOCKER cleanup - NOT IMPLEMENTED YET " ) -extensions: extension-http - -extension-http: - cd tap/extensions/http && \ - go build -buildmode=plugin -o ../http.so . - cd ../../.. - mkdir -p agent/build/extensions - cp tap/extensions/http.so agent/build/extensions +extensions: + ./build_extensions.sh diff --git a/build_extensions.sh b/build_extensions.sh new file mode 100755 index 000000000..855f1c44a --- /dev/null +++ b/build_extensions.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +for f in tap/extensions/*; do + if [ -d "$f" ]; then + extension=$(basename $f) && \ + cd tap/extensions/${extension} && \ + go build -buildmode=plugin -o ../${extension}.so . && \ + cd ../../.. && \ + mkdir -p agent/build/extensions && \ + cp tap/extensions/${extension}.so agent/build/extensions + fi +done diff --git a/tap/extensions/amqp/go.mod b/tap/extensions/amqp/go.mod new file mode 100644 index 000000000..ff01d605e --- /dev/null +++ b/tap/extensions/amqp/go.mod @@ -0,0 +1,3 @@ +module github.com/up9inc/mizu/tap/extensions/amqp + +go 1.16 diff --git a/tap/extensions/amqp/main.go b/tap/extensions/amqp/main.go new file mode 100644 index 000000000..e089f1f3b --- /dev/null +++ b/tap/extensions/amqp/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "log" +) + +func init() { + log.Println("Initializing AMQP extension.") +} + +type greeting string + +func (g greeting) Greet() { + log.Println("Hello from AMQP extension.") +} + +// exported as symbol named "Greeter" +var Greeter greeting diff --git a/tap/extensions/http/go.sum b/tap/extensions/http/go.sum deleted file mode 100644 index d7824c2dc..000000000 --- a/tap/extensions/http/go.sum +++ /dev/null @@ -1,20 +0,0 @@ -github.com/bradleyfalzon/tlsx v0.0.0-20170624122154-28fd0e59bac4 h1:NJOOlc6ZJjix0A1rAU+nxruZtR8KboG1848yqpIUo4M= -github.com/bradleyfalzon/tlsx v0.0.0-20170624122154-28fd0e59bac4/go.mod h1:DQPxZS994Ld1Y8uwnJT+dRL04XPD0cElP/pHH/zEBHM= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc h1:Ak86L+yDSOzKFa7WM5bf5itSOo1e3Xh8bm5YCMUXIjQ= -github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= -github.com/romana/rlog v0.0.0-20171115192701-f018bc92e7d7 h1:jkvpcEatpwuMF5O5LVxTnehj6YZ/aEZN4NWD/Xml4pI= -github.com/romana/rlog v0.0.0-20171115192701-f018bc92e7d7/go.mod h1:KTrHyWpO1sevuXPZwyeZc72ddWRFqNSKDFl7uVWKpg0= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758 h1:aEpZnXcAmXkd6AvLb2OPt+EN1Zu/8Ne3pCqPjja5PXY= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/tap/extensions/http/main.go b/tap/extensions/http/main.go index a7fd32544..123165dd0 100644 --- a/tap/extensions/http/main.go +++ b/tap/extensions/http/main.go @@ -1,13 +1,17 @@ package main import ( - "fmt" + "log" ) +func init() { + log.Println("Initializing HTTP extension.") +} + type greeting string func (g greeting) Greet() { - fmt.Println("Hello HTTP") + log.Println("Hello from HTTP extension.") } // exported as symbol named "Greeter" diff --git a/tap/extensions/kafka/go.mod b/tap/extensions/kafka/go.mod new file mode 100644 index 000000000..8f5ef9de6 --- /dev/null +++ b/tap/extensions/kafka/go.mod @@ -0,0 +1,3 @@ +module github.com/up9inc/mizu/tap/extensions/kafka + +go 1.16 diff --git a/tap/extensions/kafka/main.go b/tap/extensions/kafka/main.go new file mode 100644 index 000000000..a5adc91fc --- /dev/null +++ b/tap/extensions/kafka/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "log" +) + +func init() { + log.Println("Initializing Kafka extension.") +} + +type greeting string + +func (g greeting) Greet() { + log.Println("Hello from Kafka extension.") +} + +// exported as symbol named "Greeter" +var Greeter greeting diff --git a/tap/passive_tapper.go b/tap/passive_tapper.go index afb3e1a9f..9c3d56192 100644 --- a/tap/passive_tapper.go +++ b/tap/passive_tapper.go @@ -12,6 +12,7 @@ import ( "encoding/hex" "flag" "fmt" + "io/ioutil" "log" "os" "os/signal" @@ -253,19 +254,27 @@ func startMemoryProfiler() { func loadExtensions() { dir, _ := filepath.Abs(filepath.Dir(os.Args[0])) - abspath := path.Join(dir, "./extensions/http.so") - fmt.Printf("abspath: %v\n", abspath) - extension := &Extension{ - Name: "http", - Path: abspath, - } - plug, _ := plugin.Open(extension.Path) - extension.Plug = plug - symGreeter, _ := plug.Lookup("Greeter") + extensionsDir := path.Join(dir, "./extensions/") - var greeter Greeter - greeter, _ = symGreeter.(Greeter) - greeter.Greet() + files, err := ioutil.ReadDir(extensionsDir) + if err != nil { + log.Fatal(err) + } + for _, file := range files { + filename := file.Name() + log.Printf("Loading extension: %s\n", filename) + extension := &Extension{ + Name: strings.TrimSuffix(filename, filepath.Ext(filename)), + Path: path.Join(extensionsDir, filename), + } + plug, _ := plugin.Open(extension.Path) + extension.Plug = plug + symGreeter, _ := plug.Lookup("Greeter") + + var greeter Greeter + greeter, _ = symGreeter.(Greeter) + greeter.Greet() + } } func startPassiveTapper(outboundLinkWriter *OutboundLinkWriter) {