mirror of
https://github.com/peridotbuild/peridot.git
synced 2024-06-16 06:40:16 +00:00
Add Create and DeleteWorker methods
This commit is contained in:
parent
cc62ca763e
commit
06211bf2d2
|
@ -20,8 +20,11 @@ import (
|
||||||
base "go.resf.org/peridot/base/go"
|
base "go.resf.org/peridot/base/go"
|
||||||
mshipadminpb "go.resf.org/peridot/tools/mothership/admin/pb"
|
mshipadminpb "go.resf.org/peridot/tools/mothership/admin/pb"
|
||||||
mothership_db "go.resf.org/peridot/tools/mothership/db"
|
mothership_db "go.resf.org/peridot/tools/mothership/db"
|
||||||
|
"google.golang.org/genproto/googleapis/rpc/errdetails"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
"google.golang.org/protobuf/types/known/emptypb"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *Server) GetWorker(_ context.Context, req *mshipadminpb.GetWorkerRequest) (*mshipadminpb.Worker, error) {
|
func (s *Server) GetWorker(_ context.Context, req *mshipadminpb.GetWorkerRequest) (*mshipadminpb.Worker, error) {
|
||||||
|
@ -52,3 +55,60 @@ func (s *Server) ListWorkers(_ context.Context, req *mshipadminpb.ListWorkersReq
|
||||||
NextPageToken: nt,
|
NextPageToken: nt,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) CreateWorker(_ context.Context, req *mshipadminpb.CreateWorkerRequest) (*mshipadminpb.Worker, error) {
|
||||||
|
// Verify that the id is at least 4 characters long.
|
||||||
|
if len(req.WorkerId) < 4 {
|
||||||
|
return nil, status.Error(codes.InvalidArgument, "worker id must be at least 4 characters long")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the worker.
|
||||||
|
name := base.NameGen("workers")
|
||||||
|
worker := &mothership_db.Worker{
|
||||||
|
Name: name,
|
||||||
|
WorkerID: req.WorkerId,
|
||||||
|
ApiSecret: base.NameGen(name),
|
||||||
|
}
|
||||||
|
|
||||||
|
err := base.Q[mothership_db.Worker](s.db).Create(worker)
|
||||||
|
if err != nil {
|
||||||
|
// if the error is a duplicate key error, return an already exists error.
|
||||||
|
if strings.Contains(err.Error(), "duplicate key") {
|
||||||
|
st, _ := status.
|
||||||
|
New(codes.AlreadyExists, "worker already exists").
|
||||||
|
WithDetails(&errdetails.LocalizedMessage{
|
||||||
|
Locale: "en-US",
|
||||||
|
Message: "Worker with given ID already exists.",
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil, st.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
base.LogErrorf("failed to create worker: %v", err)
|
||||||
|
return nil, status.Error(codes.Internal, "failed to create worker")
|
||||||
|
}
|
||||||
|
pb := worker.ToPB()
|
||||||
|
pb.ApiSecret = worker.ApiSecret
|
||||||
|
|
||||||
|
return pb, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) DeleteWorker(_ context.Context, req *mshipadminpb.DeleteWorkerRequest) (*emptypb.Empty, error) {
|
||||||
|
worker, err := base.Q[mothership_db.Worker](s.db).F("name", req.Name).GetOrNil()
|
||||||
|
if err != nil {
|
||||||
|
base.LogErrorf("failed to get worker: %v", err)
|
||||||
|
return nil, status.Error(codes.Internal, "failed to get worker")
|
||||||
|
}
|
||||||
|
|
||||||
|
if worker == nil {
|
||||||
|
return nil, status.Error(codes.NotFound, "worker not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = base.Q[mothership_db.Worker](s.db).D(worker)
|
||||||
|
if err != nil {
|
||||||
|
base.LogErrorf("failed to delete worker: %v", err)
|
||||||
|
return nil, status.Error(codes.Internal, "failed to delete worker")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &emptypb.Empty{}, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user