mirror of
https://github.com/lorsanstand/HomeOps-Hub.git
synced 2026-06-19 20:05:17 +03:00
feat: new hub service in hub
This commit is contained in:
@@ -6,15 +6,15 @@ import (
|
||||
"net"
|
||||
|
||||
grpcserv "github.com/lorsanstand/HomeOps-Hub/internal/hub/rpc"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/hub/service/hub_service"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/shared/config"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/shared/log"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
cfg *config.Config
|
||||
log zerolog.Logger
|
||||
server *grpcserv.HubHandler
|
||||
cfg *config.Config
|
||||
log zerolog.Logger
|
||||
}
|
||||
|
||||
func NewApp() *App {
|
||||
@@ -25,9 +25,7 @@ func NewApp() *App {
|
||||
|
||||
logger := log.NewLogger(cfg)
|
||||
|
||||
server := grpcserv.NewHubHandler(logger)
|
||||
|
||||
return &App{cfg: cfg, log: logger, server: server}
|
||||
return &App{cfg: cfg, log: logger}
|
||||
}
|
||||
|
||||
func (a *App) Run() {
|
||||
@@ -41,12 +39,16 @@ func (a *App) hubServe() error {
|
||||
address := fmt.Sprintf("0.0.0.0:%v", a.cfg.Port)
|
||||
a.log.Info().Str("address", "http://"+address).Msg("start GRPC server")
|
||||
|
||||
hub := hub_service.NewHubService(a.log)
|
||||
|
||||
server := grpcserv.NewHubHandler(hub, a.log)
|
||||
|
||||
lis, err := net.Listen("tcp", address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = a.server.GrpcServer.Serve(lis)
|
||||
err = server.GrpcServer.Serve(lis)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/domain"
|
||||
@@ -11,14 +10,19 @@ import (
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
type HubService interface {
|
||||
RegisterAgent(data domain.RegisterAgentRequest) domain.RegisterAgentResponse
|
||||
}
|
||||
|
||||
type HubHandler struct {
|
||||
pb.UnimplementedHubServer
|
||||
log zerolog.Logger
|
||||
GrpcServer *grpc.Server
|
||||
hub HubService
|
||||
}
|
||||
|
||||
func NewHubHandler(logger zerolog.Logger) *HubHandler {
|
||||
hub := &HubHandler{log: logger}
|
||||
func NewHubHandler(HubServ HubService, logger zerolog.Logger) *HubHandler {
|
||||
hub := &HubHandler{log: logger, hub: HubServ}
|
||||
|
||||
grpcServer := grpc.NewServer()
|
||||
pb.RegisterHubServer(grpcServer, hub)
|
||||
@@ -35,6 +39,6 @@ func (h *HubHandler) Ping(ctx context.Context, _ *emptypb.Empty) (*pb.PongRespon
|
||||
|
||||
func (h *HubHandler) RegisterAgent(ctx context.Context, request *pb.RegisterAgentRequest) (*pb.RegisterAgentResponse, error) {
|
||||
data := domain.ToDomainAgentRequest(request)
|
||||
fmt.Println(data)
|
||||
return &pb.RegisterAgentResponse{}, nil
|
||||
resp := h.hub.RegisterAgent(data)
|
||||
return domain.ToGRPCAgentResponse(resp), nil
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package hub_service
|
||||
|
||||
import (
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/domain"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/hub/utils/hasher"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
@@ -9,4 +10,20 @@ type HubService struct {
|
||||
log zerolog.Logger
|
||||
}
|
||||
|
||||
func NewHubService(request domain.RegisterAgentRequest)
|
||||
func NewHubService(logger zerolog.Logger) *HubService {
|
||||
return &HubService{log: logger}
|
||||
}
|
||||
|
||||
func (h *HubService) RegisterAgent(data domain.RegisterAgentRequest) domain.RegisterAgentResponse {
|
||||
AgentID := data.AgentId
|
||||
if data.AgentId == "" {
|
||||
var err error
|
||||
AgentID, err = hasher.MakeID(data.Host, data.AgentName)
|
||||
if err != nil {
|
||||
h.log.Error().Err(err).Msg("failed create agent id")
|
||||
AgentID = ""
|
||||
}
|
||||
}
|
||||
|
||||
return domain.RegisterAgentResponse{AgentID: AgentID, Heartbeat: 5}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package hasher
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/domain"
|
||||
)
|
||||
|
||||
func newSalt(n int) ([]byte, error) {
|
||||
b := make([]byte, n)
|
||||
_, err := rand.Read(b)
|
||||
return b, err
|
||||
}
|
||||
|
||||
func MakeID(info domain.HostInfo, AgentName string) (string, error) {
|
||||
salt, err := newSalt(10)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
s := fmt.Sprintf("v1|host=%s|distro=%s|name=%s|", info.Hostname, info.Arch, AgentName)
|
||||
h := sha256.Sum256(append([]byte(s), salt...))
|
||||
return hex.EncodeToString(h[:16]), nil
|
||||
}
|
||||
Reference in New Issue
Block a user