mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-12 06:19:03 +08:00
chore: remove feature usage code from manager (#5803)
This commit is contained in:
parent
4295a2756a
commit
44598e304d
@ -20,11 +20,9 @@ import (
|
|||||||
|
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
|
|
||||||
// opentracing "github.com/opentracing/opentracing-go"
|
|
||||||
am "go.signoz.io/signoz/pkg/query-service/integrations/alertManager"
|
am "go.signoz.io/signoz/pkg/query-service/integrations/alertManager"
|
||||||
"go.signoz.io/signoz/pkg/query-service/interfaces"
|
"go.signoz.io/signoz/pkg/query-service/interfaces"
|
||||||
"go.signoz.io/signoz/pkg/query-service/model"
|
"go.signoz.io/signoz/pkg/query-service/model"
|
||||||
v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
|
|
||||||
"go.signoz.io/signoz/pkg/query-service/telemetry"
|
"go.signoz.io/signoz/pkg/query-service/telemetry"
|
||||||
"go.signoz.io/signoz/pkg/query-service/utils/labels"
|
"go.signoz.io/signoz/pkg/query-service/utils/labels"
|
||||||
)
|
)
|
||||||
@ -240,20 +238,6 @@ func (m *Manager) EditRule(ctx context.Context, ruleStr string, id string) error
|
|||||||
|
|
||||||
parsedRule, errs := ParsePostableRule([]byte(ruleStr))
|
parsedRule, errs := ParsePostableRule([]byte(ruleStr))
|
||||||
|
|
||||||
currentRule, err := m.GetRule(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Error("failed to get the rule from rule db", zap.String("id", id), zap.Error(err))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !checkIfTraceOrLogQB(¤tRule.PostableRule) {
|
|
||||||
// check if the new rule uses any feature that is not enabled
|
|
||||||
err = m.checkFeatureUsage(parsedRule)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
zap.L().Error("failed to parse rules", zap.Errors("errors", errs))
|
zap.L().Error("failed to parse rules", zap.Errors("errors", errs))
|
||||||
// just one rule is being parsed so expect just one error
|
// just one rule is being parsed so expect just one error
|
||||||
@ -272,20 +256,6 @@ func (m *Manager) EditRule(ctx context.Context, ruleStr string, id string) error
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// update feature usage if the current rule is not a trace or log query builder
|
|
||||||
if !checkIfTraceOrLogQB(¤tRule.PostableRule) {
|
|
||||||
err = m.updateFeatureUsage(parsedRule, 1)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Error("error updating feature usage", zap.Error(err))
|
|
||||||
}
|
|
||||||
// update feature usage if the new rule is not a trace or log query builder and the current rule is
|
|
||||||
} else if !checkIfTraceOrLogQB(parsedRule) {
|
|
||||||
err = m.updateFeatureUsage(¤tRule.PostableRule, -1)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Error("error updating feature usage", zap.Error(err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,13 +305,6 @@ func (m *Manager) DeleteRule(ctx context.Context, id string) error {
|
|||||||
return fmt.Errorf("delete rule received an rule id in invalid format, must be a number")
|
return fmt.Errorf("delete rule received an rule id in invalid format, must be a number")
|
||||||
}
|
}
|
||||||
|
|
||||||
// update feature usage
|
|
||||||
rule, err := m.GetRule(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Error("failed to get the rule from rule db", zap.String("id", id), zap.Error(err))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
taskName := prepareTaskName(int64(idInt))
|
taskName := prepareTaskName(int64(idInt))
|
||||||
if !m.opts.DisableRules {
|
if !m.opts.DisableRules {
|
||||||
m.deleteTask(taskName)
|
m.deleteTask(taskName)
|
||||||
@ -352,11 +315,6 @@ func (m *Manager) DeleteRule(ctx context.Context, id string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = m.updateFeatureUsage(&rule.PostableRule, -1)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Error("error updating feature usage", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,12 +339,6 @@ func (m *Manager) deleteTask(taskName string) {
|
|||||||
func (m *Manager) CreateRule(ctx context.Context, ruleStr string) (*GettableRule, error) {
|
func (m *Manager) CreateRule(ctx context.Context, ruleStr string) (*GettableRule, error) {
|
||||||
parsedRule, errs := ParsePostableRule([]byte(ruleStr))
|
parsedRule, errs := ParsePostableRule([]byte(ruleStr))
|
||||||
|
|
||||||
// check if the rule uses any feature that is not enabled
|
|
||||||
err := m.checkFeatureUsage(parsedRule)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
zap.L().Error("failed to parse rules", zap.Errors("errors", errs))
|
zap.L().Error("failed to parse rules", zap.Errors("errors", errs))
|
||||||
// just one rule is being parsed so expect just one error
|
// just one rule is being parsed so expect just one error
|
||||||
@ -409,11 +361,6 @@ func (m *Manager) CreateRule(ctx context.Context, ruleStr string) (*GettableRule
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// update feature usage
|
|
||||||
err = m.updateFeatureUsage(parsedRule, 1)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Error("error updating feature usage", zap.Error(err))
|
|
||||||
}
|
|
||||||
gettableRule := &GettableRule{
|
gettableRule := &GettableRule{
|
||||||
Id: fmt.Sprintf("%d", lastInsertId),
|
Id: fmt.Sprintf("%d", lastInsertId),
|
||||||
PostableRule: *parsedRule,
|
PostableRule: *parsedRule,
|
||||||
@ -421,59 +368,6 @@ func (m *Manager) CreateRule(ctx context.Context, ruleStr string) (*GettableRule
|
|||||||
return gettableRule, nil
|
return gettableRule, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) updateFeatureUsage(parsedRule *PostableRule, usage int64) error {
|
|
||||||
isTraceOrLogQB := checkIfTraceOrLogQB(parsedRule)
|
|
||||||
if isTraceOrLogQB {
|
|
||||||
feature, err := m.featureFlags.GetFeatureFlag(model.QueryBuilderAlerts)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
feature.Usage += usage
|
|
||||||
if feature.Usage == feature.UsageLimit && feature.UsageLimit != -1 {
|
|
||||||
feature.Active = false
|
|
||||||
}
|
|
||||||
if feature.Usage < feature.UsageLimit || feature.UsageLimit == -1 {
|
|
||||||
feature.Active = true
|
|
||||||
}
|
|
||||||
err = m.featureFlags.UpdateFeatureFlag(feature)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manager) checkFeatureUsage(parsedRule *PostableRule) error {
|
|
||||||
isTraceOrLogQB := checkIfTraceOrLogQB(parsedRule)
|
|
||||||
if isTraceOrLogQB {
|
|
||||||
err := m.featureFlags.CheckFeature(model.QueryBuilderAlerts)
|
|
||||||
if err != nil {
|
|
||||||
switch err.(type) {
|
|
||||||
case model.ErrFeatureUnavailable:
|
|
||||||
zap.L().Error("feature unavailable", zap.String("featureKey", model.QueryBuilderAlerts), zap.Error(err))
|
|
||||||
return model.BadRequest(err)
|
|
||||||
default:
|
|
||||||
zap.L().Error("feature check failed", zap.String("featureKey", model.QueryBuilderAlerts), zap.Error(err))
|
|
||||||
return model.BadRequest(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkIfTraceOrLogQB(parsedRule *PostableRule) bool {
|
|
||||||
if parsedRule != nil {
|
|
||||||
if parsedRule.RuleCondition.QueryType() == v3.QueryTypeBuilder {
|
|
||||||
for _, query := range parsedRule.RuleCondition.CompositeQuery.BuilderQueries {
|
|
||||||
if query.DataSource == v3.DataSourceTraces || query.DataSource == v3.DataSourceLogs {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manager) addTask(rule *PostableRule, taskName string) error {
|
func (m *Manager) addTask(rule *PostableRule, taskName string) error {
|
||||||
m.mtx.Lock()
|
m.mtx.Lock()
|
||||||
defer m.mtx.Unlock()
|
defer m.mtx.Unlock()
|
||||||
@ -569,7 +463,7 @@ func (m *Manager) prepareTask(acquireLock bool, r *PostableRule, taskName string
|
|||||||
m.rules[ruleId] = pr
|
m.rules[ruleId] = pr
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf(fmt.Sprintf("unsupported rule type. Supported types: %s, %s", RuleTypeProm, RuleTypeThreshold))
|
return nil, fmt.Errorf("unsupported rule type. Supported types: %s, %s", RuleTypeProm, RuleTypeThreshold)
|
||||||
}
|
}
|
||||||
|
|
||||||
return task, nil
|
return task, nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user