From dcb2b2fc68adbda254bfcd1e675b7f3d9e25ff5c Mon Sep 17 00:00:00 2001 From: David Janowski Date: Tue, 20 Feb 2024 19:11:34 +0100 Subject: [PATCH] feat: restructure to be a SDK --- .gitignore | 2 +- README.md | 16 ------ api/gRPC/.gitkeep | 0 build/package/Dockerfile | 24 -------- build/package/README.md | 34 ----------- cmd/main.go | 37 ------------ config/config.go | 36 ------------ deployment/.gitkeep | 1 - deployment/docker-compose.yaml | 12 ---- go.mod | 13 ++--- go.sum | 20 ++----- internal/database/graph/connect.go | 47 --------------- internal/utils/logging.go | 60 ------------------- pkg/.gitkeep | 0 pkg/otter/connect.go | 20 +++++++ pkg/plug/grpc.go | 92 ++++++++++++++++++++++++++++++ pkg/plug/server.go | 50 ++++++++++++++++ scripts/generate_grpc_files.ps1 | 24 +------- scripts/generate_grpc_files.sh | 13 +---- 19 files changed, 177 insertions(+), 324 deletions(-) delete mode 100644 README.md delete mode 100644 api/gRPC/.gitkeep delete mode 100644 build/package/Dockerfile delete mode 100644 build/package/README.md delete mode 100644 cmd/main.go delete mode 100644 config/config.go delete mode 100644 deployment/.gitkeep delete mode 100644 deployment/docker-compose.yaml delete mode 100644 internal/database/graph/connect.go delete mode 100644 internal/utils/logging.go delete mode 100644 pkg/.gitkeep create mode 100644 pkg/otter/connect.go create mode 100644 pkg/plug/grpc.go create mode 100644 pkg/plug/server.go diff --git a/.gitignore b/.gitignore index 8e75de2..b807c2a 100644 --- a/.gitignore +++ b/.gitignore @@ -190,5 +190,5 @@ $RECYCLE.BIN/ .idea/* /.run/* *.env -api/gRPC/* +*pb.go !**/.gitkeep \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index bbfbeb5..0000000 --- a/README.md +++ /dev/null @@ -1,16 +0,0 @@ - -After cloning: Look up the following README.md -- [Generate gRPC Code](scripts/README.md) -- [Build the Plug with Docker](build/package/README.md) - ---- - -# [PLUG_NAME] - -Scrapes users Favorite Posts and Upload them to a graph based database. - -## Environment Variables - -````dotenv - -```` diff --git a/api/gRPC/.gitkeep b/api/gRPC/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/build/package/Dockerfile b/build/package/Dockerfile deleted file mode 100644 index 74ae9ca..0000000 --- a/build/package/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM golang:alpine AS builder - -ARG PLUG_NAME - -WORKDIR /go/src/git.dragse.it/anthrove/plug-$PLUG_NAME - -RUN apk add -U --no-cache ca-certificates && update-ca-certificates - -COPY go.mod ./ -RUN go mod download - -COPY . ./ - -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags "-w -s" -o /app ./cmd/ - -FROM scratch - -WORKDIR / - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=builder /app ./ - -EXPOSE 8080 -CMD ["/app"] \ No newline at end of file diff --git a/build/package/README.md b/build/package/README.md deleted file mode 100644 index 0188b44..0000000 --- a/build/package/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Building a Plug - -When building a Plug use the following command and set the value of the ``PLUG_NAME`` with the plugs name. It is also im ortend that you are in the root folder of the project. -````bash -docker build --build-arg="PLUG_NAME=" -t test -f .\build\package\Dockerfile . -```` - -Dockerfile: -````dockerfile -FROM golang:alpine AS builder - -ARG PLUG_NAME - -WORKDIR /go/src/git.dragse.it/anthrove/plug-$PLUG_NAME - -RUN apk add -U --no-cache ca-certificates && update-ca-certificates - -COPY go.mod ./ -RUN go mod download - -COPY . ./ - -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags "-w -s" -o /app ./cmd/ - -FROM scratch - -WORKDIR / - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=builder /app ./ - -EXPOSE 8080 -CMD ["/app"] -```` \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go deleted file mode 100644 index f165de3..0000000 --- a/cmd/main.go +++ /dev/null @@ -1,37 +0,0 @@ -package main - -import ( - "context" - - "git.dragse.it/anthrove/plug-template/config" - "git.dragse.it/anthrove/plug-template/internal/database/graph" - "git.dragse.it/anthrove/plug-template/internal/utils" - log "github.com/sirupsen/logrus" -) - -// cfg holds the orchestrator configuration -var cfg config.PlugConfig - -// init is used to load the orchestrator configuration -func init() { - // Load the orchestrator configuration - localCfg, err := config.LoadConfig(cfg) - if err != nil { - log.Panic(err) - } - cfg = localCfg -} - -func main() { - // ctx is the root context for the main function - var ctx = context.Background() - - // Set up the logger based on the configuration - utils.SetupLogger(cfg.LogLevel, cfg.LogFormat) - - // Connect to the graph database - _, err := graph.ConnectToGraphDatabase(ctx) - if err != nil { - log.Panicf("main: %v", err) - } -} diff --git a/config/config.go b/config/config.go deleted file mode 100644 index 7bcdcc7..0000000 --- a/config/config.go +++ /dev/null @@ -1,36 +0,0 @@ -package config - -import ( - "fmt" - - "github.com/caarlos0/env/v10" - "github.com/go-playground/validator/v10" -) - -type PlugConfig struct { - LogLevel string `validate:"required,eq=FATAL|eq=ERROR|eq=WARN|eq=INFO|eq=DEBUG|eq=TRACE" env:"LOG_LEVEL" envDefault:"INFO" json:"log_level"` - LogFormat string `validate:"required,eq=PLAIN|eq=JSON" env:"LOG_FORMAT" envDefault:"PLAIN" json:"log_format"` -} - -type OtterSpaceConfig struct { - Type string `env:"DB_TYPE,required"` - Endpoint string `env:"DB_URL,required"` - Username string `env:"DB_USERNAME,required"` - Password string `env:"DB_PASSWORD,required,unset"` - Debug bool `env:"DB_DEBUG" envDefault:"FALSE"` -} - -// LoadConfig loads the configuration from environment variables and validates it. -func LoadConfig[T any](cfg T) (T, error) { - - if err := env.Parse(&cfg); err != nil { - return cfg, fmt.Errorf("config: error parsing configuration: %w", err) - } - - validate := validator.New() - if err := validate.Struct(cfg); err != nil { - return cfg, fmt.Errorf("config: validation error: %w", err) - } - - return cfg, nil -} diff --git a/deployment/.gitkeep b/deployment/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/deployment/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/deployment/docker-compose.yaml b/deployment/docker-compose.yaml deleted file mode 100644 index f3e8a29..0000000 --- a/deployment/docker-compose.yaml +++ /dev/null @@ -1,12 +0,0 @@ -version: '3.7' - -services: - plug: - image: anthrove/plug-[PLUG_NAME]:latest - build: - context: ../. - dockerfile: build/package/Dockerfile - env_file: plug.env - restart: on-failure - ports: - - "8080:8080" diff --git a/go.mod b/go.mod index 0a7048d..6bd5ff7 100644 --- a/go.mod +++ b/go.mod @@ -1,24 +1,19 @@ -module git.dragse.it/anthrove/plug-template +module git.dragse.it/anthrove/plug-sdk go 1.22.0 require ( git.dragse.it/anthrove/otter-space-sdk v1.0.0 - github.com/caarlos0/env/v10 v10.0.0 - github.com/go-playground/validator/v10 v10.18.0 - github.com/sirupsen/logrus v1.9.3 + github.com/matoous/go-nanoid/v2 v2.0.0 google.golang.org/grpc v1.61.1 google.golang.org/protobuf v1.32.0 ) require ( - github.com/gabriel-vasile/mimetype v1.4.3 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/leodido/go-urn v1.4.0 // indirect github.com/neo4j/neo4j-go-driver/v5 v5.17.0 // indirect - golang.org/x/crypto v0.19.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/stretchr/testify v1.8.4 // indirect golang.org/x/net v0.21.0 // indirect golang.org/x/sys v0.17.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/go.sum b/go.sum index 63093bc..a93002e 100644 --- a/go.sum +++ b/go.sum @@ -1,28 +1,17 @@ git.dragse.it/anthrove/otter-space-sdk v1.0.0 h1:sJ5d8yMFAosP9+315PxZc5yzYUdzAJEEyxoKDmc8YoE= git.dragse.it/anthrove/otter-space-sdk v1.0.0/go.mod h1:QI2W7gm1GflcAeipEoyLZ3hj86DlIgwT9Lisc4c99Vs= -github.com/caarlos0/env/v10 v10.0.0 h1:yIHUBZGsyqCnpTkbjk8asUlx6RFhhEs+h7TOBdgdzXA= -github.com/caarlos0/env/v10 v10.0.0/go.mod h1:ZfulV76NvVPw3tm591U4SwL3Xx9ldzBP9aGxzeN7G18= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.18.0 h1:BvolUXjp4zuvkZ5YN5t7ebzbhlUtPsPm2S9NAZ5nl9U= -github.com/go-playground/validator/v10 v10.18.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/matoous/go-nanoid v1.5.0/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= +github.com/matoous/go-nanoid/v2 v2.0.0 h1:d19kur2QuLeHmJBkvYkFdhFBzLoo1XVm2GgTpL+9Tj0= +github.com/matoous/go-nanoid/v2 v2.0.0/go.mod h1:FtS4aGPVfEkxKxhdWPAspZpZSh1cOjtM7Ej/So3hR0g= github.com/neo4j/neo4j-go-driver/v5 v5.17.0 h1:Bdqg1Y8Hd3uLYToXtBjysDYXTdMiP7zeUNUEwfbJkSo= github.com/neo4j/neo4j-go-driver/v5 v5.17.0/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -30,11 +19,10 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/internal/database/graph/connect.go b/internal/database/graph/connect.go deleted file mode 100644 index feffa73..0000000 --- a/internal/database/graph/connect.go +++ /dev/null @@ -1,47 +0,0 @@ -package graph - -import ( - "context" - "fmt" - "strings" - - "git.dragse.it/anthrove/otter-space-sdk/pkg/graph" - "git.dragse.it/anthrove/plug-template/config" - - log "github.com/sirupsen/logrus" -) - -var cfg config.OtterSpaceConfig - -func init() { - localCfg, err := config.LoadConfig[config.OtterSpaceConfig](cfg) - if err != nil { - log.Panic(err) - } - cfg = localCfg -} - -// ConnectToGraphDatabase establishes a connection to a graph database specified in the config. -// Currently, it only supports Neo4j. If the database type is not supported, it returns an error. -func ConnectToGraphDatabase(ctx context.Context) (graph.OtterSpace, error) { - var connection graph.OtterSpace - var err error - - switch strings.ToLower(cfg.Type) { - case "neo4j": - connection = graph.NewGraphConnection(cfg.Debug) - err = connection.Connect(ctx, cfg.Endpoint, cfg.Username, cfg.Password) - if err != nil { - return nil, fmt.Errorf("graph: failed to connect to Neo4j: %w", err) - } - default: - return nil, fmt.Errorf("graph: unsupported database type: %s", cfg.Type) - } - - log.WithFields(log.Fields{ - "graph_type": cfg.Type, - "graph_endpoint": cfg.Endpoint, - }, - ).Info("graph: successfully connected") - return connection, nil -} diff --git a/internal/utils/logging.go b/internal/utils/logging.go deleted file mode 100644 index e237f8c..0000000 --- a/internal/utils/logging.go +++ /dev/null @@ -1,60 +0,0 @@ -package utils - -import ( - "strings" - - log "github.com/sirupsen/logrus" -) - -// SetupLogger configures the logging level and format based on the provided input. -// It supports various log levels and two formats: plain text and JSON. -func SetupLogger(logLevel string, logFormat string) { - setLogLevel(logLevel) - setLogFormat(logFormat) - - log.WithFields(log.Fields{ - "log_level": log.GetLevel(), - "formatter": logFormat, - }).Info("Logger configuration set") -} - -// setLogLevel configures the logging level based on the provided input. -func setLogLevel(logLevel string) { - switch strings.ToUpper(logLevel) { - case "FATAL": - log.SetLevel(log.FatalLevel) - case "ERROR": - log.SetLevel(log.ErrorLevel) - case "WARN": - log.SetLevel(log.WarnLevel) - case "INFO": - log.SetLevel(log.InfoLevel) - case "DEBUG": - log.SetLevel(log.DebugLevel) - case "TRACE": - log.SetLevel(log.TraceLevel) - default: - log.Panic("No valid log level was set") - } -} - -// setLogFormat configures the logging format based on the provided input. -func setLogFormat(logFormat string) { - switch strings.ToUpper(logFormat) { - case "PLAIN": - log.SetFormatter(&log.TextFormatter{ - ForceColors: true, - ForceQuote: true, - DisableLevelTruncation: true, - PadLevelText: true, - FullTimestamp: true, - TimestampFormat: "2006-01-02 15:04:05", - }) - case "JSON": - log.SetFormatter(&log.JSONFormatter{ - TimestampFormat: "2006-01-02 15:04:05", - }) - default: - log.Panic("No valid formatter was set") - } -} diff --git a/pkg/.gitkeep b/pkg/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/pkg/otter/connect.go b/pkg/otter/connect.go new file mode 100644 index 0000000..f90479a --- /dev/null +++ b/pkg/otter/connect.go @@ -0,0 +1,20 @@ +package otter + +import ( + "context" + + "git.dragse.it/anthrove/otter-space-sdk/pkg/graph" +) + +func ConnectToDatabase(ctx context.Context, endpoint string, username string, password string, debug bool) (graph.OtterSpace, error) { + var graphConnection graph.OtterSpace + var err error + + graphConnection = graph.NewGraphConnection(debug) + err = graphConnection.Connect(ctx, endpoint, username, password) + if err != nil { + return nil, err + } + + return graphConnection, err +} diff --git a/pkg/plug/grpc.go b/pkg/plug/grpc.go new file mode 100644 index 0000000..36d3cfc --- /dev/null +++ b/pkg/plug/grpc.go @@ -0,0 +1,92 @@ +package plug + +import ( + "context" + "log" + + "git.dragse.it/anthrove/otter-space-sdk/pkg/graph" + "git.dragse.it/anthrove/otter-space-sdk/pkg/models" + gRPC "git.dragse.it/anthrove/plug-sdk/pkg/grpc" + gonanoid "github.com/matoous/go-nanoid/v2" +) + +type server struct { + gRPC.UnimplementedPlugConnectorServer + ctx map[string]context.CancelFunc + database graph.OtterSpace +} + +func NewGrpcServer(database graph.OtterSpace) gRPC.PlugConnectorServer { + return &server{ + ctx: make(map[string]context.CancelFunc), + database: database, + } +} + +func (s *server) TaskStart(ctx context.Context, creation *gRPC.PlugTaskCreation) (*gRPC.PlugTaskStatus, error) { + var anthroveUser models.AnthroveUser + var plugTaskState gRPC.PlugTaskStatus + var err error + + id, err := gonanoid.New() + if err != nil { + return nil, err + } + + plugTaskState.TaskId = id + plugTaskState.TaskState = gRPC.PlugTaskState_RUNNING + + anthroveUser.UserID = models.AnthroveUserID(creation.UserId) + + // gRPC closes the context after the call ended. So the whole scrapping stopped without waiting + // by using this method we assign a new context to each new request we get. + // This can be used for example to close the context with the given id + ctx, cancel := context.WithCancel(context.Background()) + s.ctx[id] = cancel + + go func() { + // FIXME: better implement this methode, works for now but needs refactoring + err := service.ScrapeUser(ctx, s.database, &s.e621Client, creation.UserSourceName, &anthroveUser, creation.DeepScrape, func() { + s.removeTask(id) + }) + if err != nil { + log.Print(err) + } + }() + + return &plugTaskState, nil +} + +func (s *server) TaskStatus(_ context.Context, task *gRPC.PlugTask) (*gRPC.PlugTaskStatus, error) { + var plugTaskState gRPC.PlugTaskStatus + + _, found := s.ctx[task.TaskId] + plugTaskState.TaskId = task.TaskId + + plugTaskState.TaskState = gRPC.PlugTaskState_RUNNING + + if !found { + plugTaskState.TaskState = gRPC.PlugTaskState_UNKNOWN + } + return &plugTaskState, nil +} + +func (s *server) TaskCancel(_ context.Context, task *gRPC.PlugTask) (*gRPC.PlugTaskStatus, error) { + var plugTaskState gRPC.PlugTaskStatus + + plugTaskState.TaskState = gRPC.PlugTaskState_STOPPED + plugTaskState.TaskId = task.TaskId + + s.removeTask(task.TaskId) + + return &plugTaskState, nil +} + +func (s *server) removeTask(taskID string) { + fn, exists := s.ctx[taskID] + if !exists { + return + } + fn() + delete(s.ctx, taskID) +} diff --git a/pkg/plug/server.go b/pkg/plug/server.go new file mode 100644 index 0000000..4a31cc6 --- /dev/null +++ b/pkg/plug/server.go @@ -0,0 +1,50 @@ +package plug + +import ( + "context" + "fmt" + "net" + + "git.dragse.it/anthrove/otter-space-sdk/pkg/graph" + pb "git.dragse.it/anthrove/plug-sdk/pkg/grpc" + "google.golang.org/grpc" +) + +type Server struct { + ctx context.Context + address string + port string + database graph.OtterSpace +} + +func NewServer(ctx context.Context, address string, port string) Server { + return Server{ + ctx: ctx, + address: address, + port: port, + } +} + +func (s Server) Listen() error { + var err error + + lis, err := net.Listen("tcp", fmt.Sprintf("%s:%s", s.address, s.port)) + if err != nil { + return err + } + + grpcServer := grpc.NewServer() + + pb.RegisterPlugConnectorServer(grpcServer, NewGrpcServer(s.database)) + + err = grpcServer.Serve(lis) + if err != nil { + return err + } + + return nil +} + +func (s Server) WithGraphConnection(graph graph.OtterSpace) { + s.database = graph +} diff --git a/scripts/generate_grpc_files.ps1 b/scripts/generate_grpc_files.ps1 index 9c57b2a..110163f 100644 --- a/scripts/generate_grpc_files.ps1 +++ b/scripts/generate_grpc_files.ps1 @@ -1,28 +1,10 @@ -New-Item -Path "api" -Name "gRPC" -ItemType Directory -Force - -$plugName = "" +New-Item -Path "pkg" -Name "grpc" -ItemType Directory -Force protoc ` --proto_path=third_party/grpc-proto ` - --go_out=api/gRPC ` + --go_out=pkg/grpc ` --go_opt=paths=source_relative ` - --go-grpc_out=api/gRPC ` + --go-grpc_out=pkg/grpc ` --go-grpc_opt=paths=source_relative ` third_party/grpc-proto/*.proto ` - -function Replace-Text { - param ( - [string]$Path, - [string]$OldText, - [string]$NewText - ) - - Get-ChildItem -Path $Path -Recurse -File | ForEach-Object { - $content = Get-Content $_.FullName - $content = $content -replace $OldText, $NewText - Set-Content -Path $_.FullName -Value $content - } -} - -Replace-Text -Path "./api/gRPC" -OldText "git.dragse.it/anthrove/plug-[REPLACE_ME]/api/gRPC" -NewText "git.dragse.it/anthrove/plug-$plugName/api/gRPC" diff --git a/scripts/generate_grpc_files.sh b/scripts/generate_grpc_files.sh index 091cd52..3455798 100644 --- a/scripts/generate_grpc_files.sh +++ b/scripts/generate_grpc_files.sh @@ -1,19 +1,12 @@ #!/bin/bash -mkdir -p "api/gRPC" - -plugName = "" +mkdir -p "pkg/grpc" protoc \ --proto_path=third_party/grpc-proto \ - --go_out=api/gRPC \ + --go_out=pkg/grpc \ --go_opt=paths=source_relative \ - --go-grpc_out=api/gRPC \ + --go-grpc_out=pkg/grpc \ --go-grpc_opt=paths=source_relative \ third_party/grpc-proto/*.proto -dir_path="./api/gRPC" -old_text="git.dragse.it/anthrove/plug-[REPLACE_ME]/api/gRPC" -new_text="git.dragse.it/anthrove/plug-$plugName/api/gRPC"" - -grep -rlZ "$old_text" "$dir_path" | xargs -0 sed -i "s#$old_text#$new_text#g"