83 lines
1.8 KiB
Go

package implapdex
import (
"context"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/modules/apdex"
"github.com/SigNoz/signoz/pkg/sqlstore"
"github.com/SigNoz/signoz/pkg/types/apdextypes"
"github.com/SigNoz/signoz/pkg/valuer"
"github.com/uptrace/bun"
)
const (
defaultApdexThreshold float64 = 0.5
)
type module struct {
sqlstore sqlstore.SQLStore
}
func NewModule(sqlstore sqlstore.SQLStore) apdex.Module {
return &module{
sqlstore: sqlstore,
}
}
func (module *module) Get(ctx context.Context, orgID string, services []string) ([]*apdextypes.Settings, error) {
var apdexSettings []*apdextypes.Settings
err := module.
sqlstore.
BunDB().
NewSelect().
Model(&apdexSettings).
Where("org_id = ?", orgID).
Where("service_name IN (?)", bun.In(services)).
Scan(ctx)
if err != nil {
return nil, module.sqlstore.WrapNotFoundErrf(err, errors.CodeNotFound, "apdex settings not found for services %v", services)
}
// add default apdex settings for services that don't have any
for _, service := range services {
var found bool
for _, apdexSetting := range apdexSettings {
if apdexSetting.ServiceName == service {
found = true
break
}
}
if !found {
apdexSettings = append(apdexSettings, &apdextypes.Settings{
ServiceName: service,
Threshold: defaultApdexThreshold,
})
}
}
return apdexSettings, nil
}
func (module *module) Set(ctx context.Context, orgID string, apdexSettings *apdextypes.Settings) error {
apdexSettings.OrgID = orgID
apdexSettings.Identifiable.ID = valuer.GenerateUUID()
_, err := module.
sqlstore.
BunDB().
NewInsert().
Model(apdexSettings).
On("CONFLICT (org_id, service_name) DO UPDATE").
Set("threshold = EXCLUDED.threshold").
Set("exclude_status_codes = EXCLUDED.exclude_status_codes").
Exec(ctx)
if err != nil {
return err
}
return nil
}