Add the proxing to metadata-agregator
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
version: v2
|
version: v2
|
||||||
|
inputs:
|
||||||
|
- directory: proto
|
||||||
|
- directory: ../metadata-agregator/proto
|
||||||
plugins:
|
plugins:
|
||||||
- remote: buf.build/protocolbuffers/go
|
- remote: buf.build/protocolbuffers/go
|
||||||
out: gen
|
out: gen
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import (
|
|||||||
"homelab.lan/music-agregator/internal/config"
|
"homelab.lan/music-agregator/internal/config"
|
||||||
"homelab.lan/music-agregator/internal/hello"
|
"homelab.lan/music-agregator/internal/hello"
|
||||||
"homelab.lan/music-agregator/internal/indexer"
|
"homelab.lan/music-agregator/internal/indexer"
|
||||||
|
"homelab.lan/music-agregator/internal/metadata"
|
||||||
"homelab.lan/music-agregator/internal/torrent"
|
"homelab.lan/music-agregator/internal/torrent"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -101,11 +102,16 @@ func serveGrpc(config config.Config) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("failed to create TorrentServer")
|
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{
|
services := []internal.Registrable{
|
||||||
hello.NewHelloServer(),
|
hello.NewHelloServer(),
|
||||||
indexerServer,
|
indexerServer,
|
||||||
torrentServer,
|
torrentServer,
|
||||||
|
metadataServer,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, service := range services {
|
for _, service := range services {
|
||||||
|
|||||||
@@ -34,6 +34,10 @@ type Config struct {
|
|||||||
Username string `yaml:"username"`
|
Username string `yaml:"username"`
|
||||||
Password string `yaml:"password"`
|
Password string `yaml:"password"`
|
||||||
} `yaml:"torrent"`
|
} `yaml:"torrent"`
|
||||||
|
|
||||||
|
Metadata struct {
|
||||||
|
Endpoint string `yaml:"endpoint"`
|
||||||
|
} `yaml:"metadata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *IndexerType) UnmarshalYAML(unmarshal func(any) error) error {
|
func (t *IndexerType) UnmarshalYAML(unmarshal func(any) error) error {
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user