Add the proxing to metadata-agregator

This commit is contained in:
Alexander
2026-05-07 12:00:37 +02:00
parent 97a57c10fd
commit 2041c154cf
5 changed files with 109 additions and 0 deletions
+3
View File
@@ -1,4 +1,7 @@
version: v2
inputs:
- directory: proto
- directory: ../metadata-agregator/proto
plugins:
- remote: buf.build/protocolbuffers/go
out: gen
+6
View File
@@ -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 {
+4
View File
@@ -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 {
+24
View File
@@ -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
}
+72
View File
@@ -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)
}