From 2041c154cfb5672b064f850a007051670e350af1 Mon Sep 17 00:00:00 2001 From: Alexander Date: Thu, 7 May 2026 12:00:37 +0200 Subject: [PATCH] Add the proxing to metadata-agregator --- buf.gen.yaml | 3 ++ cmd/music-agregator/main.go | 6 ++++ internal/config/config.go | 4 +++ internal/metadata/client.go | 24 +++++++++++++ internal/metadata/server.go | 72 +++++++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 internal/metadata/client.go create mode 100644 internal/metadata/server.go diff --git a/buf.gen.yaml b/buf.gen.yaml index 98f0b86..1453b6c 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -1,4 +1,7 @@ version: v2 +inputs: + - directory: proto + - directory: ../metadata-agregator/proto plugins: - remote: buf.build/protocolbuffers/go out: gen diff --git a/cmd/music-agregator/main.go b/cmd/music-agregator/main.go index 498b150..aa31dea 100644 --- a/cmd/music-agregator/main.go +++ b/cmd/music-agregator/main.go @@ -25,6 +25,7 @@ import ( "homelab.lan/music-agregator/internal/config" "homelab.lan/music-agregator/internal/hello" "homelab.lan/music-agregator/internal/indexer" + "homelab.lan/music-agregator/internal/metadata" "homelab.lan/music-agregator/internal/torrent" ) @@ -101,11 +102,16 @@ func serveGrpc(config config.Config) { if err != nil { log.Fatal().Err(err).Msg("failed to create TorrentServer") } + metadataServer, err := metadata.NewMetadataServer(config) + if err != nil { + log.Fatal().Err(err).Msg("failed to create MetadataServer") + } services := []internal.Registrable{ hello.NewHelloServer(), indexerServer, torrentServer, + metadataServer, } for _, service := range services { diff --git a/internal/config/config.go b/internal/config/config.go index a89af01..c14eb86 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -34,6 +34,10 @@ type Config struct { Username string `yaml:"username"` Password string `yaml:"password"` } `yaml:"torrent"` + + Metadata struct { + Endpoint string `yaml:"endpoint"` + } `yaml:"metadata"` } func (t *IndexerType) UnmarshalYAML(unmarshal func(any) error) error { diff --git a/internal/metadata/client.go b/internal/metadata/client.go new file mode 100644 index 0000000..de3b91d --- /dev/null +++ b/internal/metadata/client.go @@ -0,0 +1,24 @@ +package metadata + +import ( + "fmt" + + "github.com/rs/zerolog/log" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + + pb "homelab.lan/music-agregator/gen/metadata/v1" +) + +func newMetadataClient(endpoint string) (pb.MetadataServiceClient, *grpc.ClientConn, error) { + log.Trace().Str("endpoint", endpoint).Msg("connecting to metadata service") + + conn, err := grpc.NewClient(endpoint, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return nil, nil, fmt.Errorf("connecting to metadata service: %w", err) + } + + log.Info().Str("endpoint", endpoint).Msg("metadata service connected") + + return pb.NewMetadataServiceClient(conn), conn, nil +} diff --git a/internal/metadata/server.go b/internal/metadata/server.go new file mode 100644 index 0000000..d44d8df --- /dev/null +++ b/internal/metadata/server.go @@ -0,0 +1,72 @@ +package metadata + +import ( + "context" + + "github.com/rs/zerolog/log" + "google.golang.org/grpc" + + pb "homelab.lan/music-agregator/gen/metadata/v1" + "homelab.lan/music-agregator/internal/config" +) + +type MetadataServer struct { + client pb.MetadataServiceClient + conn *grpc.ClientConn + pb.UnimplementedMetadataServiceServer +} + +func NewMetadataServer(cfg config.Config) (*MetadataServer, error) { + client, conn, err := newMetadataClient(cfg.Metadata.Endpoint) + if err != nil { + log.Err(err).Msg("failed to initialize MetadataServer") + return nil, err + } + + return &MetadataServer{client: client, conn: conn}, nil +} + +func (s *MetadataServer) Close() { + if s.conn != nil { + s.conn.Close() + } +} + +func (s *MetadataServer) Register(server *grpc.Server) { + pb.RegisterMetadataServiceServer(server, s) +} + +func (s *MetadataServer) GetArtist(ctx context.Context, req *pb.GetArtistRequest) (*pb.Artist, error) { + log.Debug().Msg("metadata GetArtist") + return s.client.GetArtist(ctx, req) +} + +func (s *MetadataServer) SearchArtists(ctx context.Context, req *pb.SearchArtistsRequest) (*pb.SearchArtistsResponse, error) { + log.Debug().Str("query", req.GetQuery()).Int32("limit", req.GetLimit()).Msg("metadata SearchArtists") + return s.client.SearchArtists(ctx, req) +} + +func (s *MetadataServer) GetAlbum(ctx context.Context, req *pb.GetAlbumRequest) (*pb.Album, error) { + log.Debug().Msg("metadata GetAlbum") + return s.client.GetAlbum(ctx, req) +} + +func (s *MetadataServer) GetArtistAlbums(ctx context.Context, req *pb.GetArtistAlbumsRequest) (*pb.GetArtistAlbumsResponse, error) { + log.Debug().Str("artist_id", req.GetArtistId()).Msg("metadata GetArtistAlbums") + return s.client.GetArtistAlbums(ctx, req) +} + +func (s *MetadataServer) GetTrack(ctx context.Context, req *pb.GetTrackRequest) (*pb.Track, error) { + log.Debug().Msg("metadata GetTrack") + return s.client.GetTrack(ctx, req) +} + +func (s *MetadataServer) GetAlbumTracks(ctx context.Context, req *pb.GetAlbumTracksRequest) (*pb.GetAlbumTracksResponse, error) { + log.Debug().Str("album_id", req.GetAlbumId()).Msg("metadata GetAlbumTracks") + return s.client.GetAlbumTracks(ctx, req) +} + +func (s *MetadataServer) SyncArtist(ctx context.Context, req *pb.SyncArtistRequest) (*pb.SyncArtistResponse, error) { + log.Debug().Msg("metadata SyncArtist") + return s.client.SyncArtist(ctx, req) +}