mirror of
https://github.com/Warky-Devs/vecna.git
synced 2026-05-05 01:26:58 +00:00
feat(server): add support for extra maps in adapter configuration
* Introduced ExtraMapConfig to allow multiple adapter configurations. * Updated server and handler to utilize extra maps for routing. * Added dashboard handler for metrics visualization.
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/Warky-Devs/vecna.git/pkg/adapter"
|
||||
"github.com/Warky-Devs/vecna.git/pkg/config"
|
||||
"github.com/Warky-Devs/vecna.git/pkg/server"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -94,7 +95,37 @@ func openWriter(path string) (io.Writer, error) {
|
||||
|
||||
// buildAdapter constructs the Adapter from the loaded config.
|
||||
func buildAdapter(cfg *config.Config) (adapter.Adapter, error) {
|
||||
ac := cfg.Adapter
|
||||
return buildAdapterFromConfig(cfg.Adapter)
|
||||
}
|
||||
|
||||
// buildExtraMapAdapters builds a server.ExtraMap for each entry in cfg.ExtraMaps.
|
||||
// Unset adapter fields fall back to the global Adapter values.
|
||||
func buildExtraMapAdapters(cfg *config.Config) (map[string]server.ExtraMap, error) {
|
||||
result := make(map[string]server.ExtraMap, len(cfg.ExtraMaps))
|
||||
for name, mc := range cfg.ExtraMaps {
|
||||
ac := config.AdapterConfig{
|
||||
Type: coalesce(mc.Type, cfg.Adapter.Type),
|
||||
SourceDim: coalescei(mc.SourceDim, cfg.Adapter.SourceDim),
|
||||
TargetDim: mc.TargetDim,
|
||||
TruncateMode: coalesce(mc.TruncateMode, cfg.Adapter.TruncateMode),
|
||||
PadMode: coalesce(mc.PadMode, cfg.Adapter.PadMode),
|
||||
Seed: coalescei64(mc.Seed, cfg.Adapter.Seed),
|
||||
MatrixFile: coalesce(mc.MatrixFile, cfg.Adapter.MatrixFile),
|
||||
}
|
||||
adp, err := buildAdapterFromConfig(ac)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("extra_map %q: %w", name, err)
|
||||
}
|
||||
result[name] = server.ExtraMap{
|
||||
Adapter: adp,
|
||||
ForwardTarget: mc.ForwardTarget,
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// buildAdapterFromConfig constructs an Adapter from an AdapterConfig.
|
||||
func buildAdapterFromConfig(ac config.AdapterConfig) (adapter.Adapter, error) {
|
||||
if ac.SourceDim == 0 && ac.TargetDim == 0 {
|
||||
return adapter.NewPassthrough(), nil
|
||||
}
|
||||
@@ -124,6 +155,27 @@ func buildAdapter(cfg *config.Config) (adapter.Adapter, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func coalesce(a, b string) string {
|
||||
if a != "" {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func coalescei(a, b int) int {
|
||||
if a != 0 {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func coalescei64(a, b int64) int64 {
|
||||
if a != 0 {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func parseTruncateModes(truncMode, padMode string) (adapter.TruncateMode, adapter.PadMode, error) {
|
||||
var tm adapter.TruncateMode
|
||||
switch truncMode {
|
||||
|
||||
@@ -48,6 +48,11 @@ func runServe(cmd *cobra.Command, _ []string) error {
|
||||
return fmt.Errorf("build adapter: %w", err)
|
||||
}
|
||||
|
||||
extraMaps, err := buildExtraMapAdapters(cfg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("build extra_maps: %w", err)
|
||||
}
|
||||
|
||||
clients, err := buildClients(cfg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("build clients: %w", err)
|
||||
@@ -58,7 +63,7 @@ func runServe(cmd *cobra.Command, _ []string) error {
|
||||
reg = metrics.New()
|
||||
}
|
||||
|
||||
router, err := server.New(cfg, clients, adp, reg, logger)
|
||||
router, err := server.New(cfg, clients, adp, extraMaps, reg, logger)
|
||||
if err != nil {
|
||||
return fmt.Errorf("build router: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user