Files

116 lines
4.2 KiB
Go

package rendercasting
import (
"context"
"strings"
"github.com/hanzoai/o11y-foundry/api/v1alpha1"
"github.com/hanzoai/o11y-foundry/api/v1alpha1/installation"
"github.com/hanzoai/o11y-foundry/internal/domain"
"github.com/hanzoai/o11y-foundry/internal/errors"
"github.com/hanzoai/o11y-foundry/internal/molding"
)
var _ molding.MoldingEnricher = (*renderMoldingEnricher)(nil)
type renderMoldingEnricher struct {
material domain.StructuredMaterial
}
func newRenderMoldingEnricher(config *installation.Casting) (*renderMoldingEnricher, error) {
material, err := getRenderMaterial(config, "render.yaml")
if err != nil {
return nil, errors.Wrapf(err, errors.TypeInternal, "failed to get render yaml material")
}
return &renderMoldingEnricher{material: material}, nil
}
func (enricher *renderMoldingEnricher) EnrichStatus(ctx context.Context, kind v1alpha1.MoldingKind, config *installation.Casting) error {
switch kind {
case v1alpha1.MoldingKindTelemetryStore:
// Get telemetrystore service names
serviceNames, err := enricher.material.GetStringSlice("services.#.name")
if err != nil {
return errors.Wrapf(err, errors.TypeInternal, "failed to get telemetrystore service names")
}
var addrs []string
var storeServiceNames []string
for _, serviceName := range serviceNames {
if strings.Contains(serviceName, "telemetrystore") && !strings.Contains(serviceName, "migrator") {
addrs = append(addrs, domain.MustNewAddress("tcp", serviceName, 9000).String())
storeServiceNames = append(storeServiceNames, serviceName)
}
}
config.Spec.TelemetryStore.Status.Addresses.TCP = addrs
// Store service names in extras for template usage
if config.Spec.TelemetryStore.Status.Extras == nil {
config.Spec.TelemetryStore.Status.Extras = make(map[string]string)
}
config.Spec.TelemetryStore.Status.Extras["service_names"] = strings.Join(storeServiceNames, ",")
case v1alpha1.MoldingKindO11y:
// Get telemetrystore service names
serviceNames, err := enricher.material.GetStringSlice("services.#.name")
if err != nil {
return errors.Wrapf(err, errors.TypeInternal, "failed to get telemetrystore service names")
}
var apiServerAddr []string
var opampAddr []string
for _, serviceName := range serviceNames {
if strings.Contains(serviceName, "-o11y") {
apiServerAddr = append(apiServerAddr, domain.MustNewAddress("tcp", serviceName, 8080).String())
opampAddr = append(opampAddr, domain.MustNewAddress("ws", serviceName, 4320).String())
}
}
config.Spec.O11y.Status.Addresses.APIServer = apiServerAddr
config.Spec.O11y.Status.Addresses.Opamp = opampAddr
case v1alpha1.MoldingKindTelemetryKeeper:
// Get telemetrykeeper service names
serviceNames, err := enricher.material.GetStringSlice("services.#.name")
if err != nil {
return errors.Wrapf(err, errors.TypeInternal, "failed to get telemetrykeeper service names")
}
var addrsClient []string
var addrsRaft []string
var keeperServiceNames []string
for _, serviceName := range serviceNames {
if strings.Contains(serviceName, "telemetrykeeper") {
addrsClient = append(addrsClient, domain.MustNewAddress("tcp", serviceName, 9181).String())
addrsRaft = append(addrsRaft, domain.MustNewAddress("tcp", serviceName, 9234).String())
keeperServiceNames = append(keeperServiceNames, serviceName)
}
}
config.Spec.TelemetryKeeper.Status.Addresses.Client = addrsClient
config.Spec.TelemetryKeeper.Status.Addresses.Raft = addrsRaft
// Store service names in extras for template usage
if config.Spec.TelemetryKeeper.Status.Extras == nil {
config.Spec.TelemetryKeeper.Status.Extras = make(map[string]string)
}
config.Spec.TelemetryKeeper.Status.Extras["service_names"] = strings.Join(keeperServiceNames, ",")
case v1alpha1.MoldingKindIngester:
// Get ingester service names
serviceNames, err := enricher.material.GetStringSlice("services.#.name")
if err != nil {
return errors.Wrapf(err, errors.TypeInternal, "failed to get ingester service names")
}
var addrs []string
for _, serviceName := range serviceNames {
if strings.Contains(serviceName, "ingester") {
addrs = append(addrs, domain.MustNewAddress("tcp", serviceName, 4318).String())
}
}
config.Spec.Ingester.Status.Addresses.OTLP = addrs
}
return nil
}