Browse Source

fix(restapi): add name field for get rules response

Signed-off-by: Jianxiang Ran <rxan_embedded@163.com>
Jianxiang Ran 2 years ago
parent
commit
4cb82fe723
4 changed files with 31 additions and 25 deletions
  1. 9 9
      internal/processor/rule.go
  2. 1 1
      internal/server/rest.go
  3. 1 1
      internal/server/rpc.go
  4. 20 14
      internal/server/rule_manager.go

+ 9 - 9
internal/processor/rule.go

@@ -73,7 +73,7 @@ func (p *RuleProcessor) ExecUpdate(name, ruleJson string) (*api.Rule, error) {
 }
 }
 
 
 func (p *RuleProcessor) ExecReplaceRuleState(name string, triggered bool) (err error) {
 func (p *RuleProcessor) ExecReplaceRuleState(name string, triggered bool) (err error) {
-	rule, err := p.GetRuleByName(name)
+	rule, err := p.GetRuleById(name)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
@@ -93,22 +93,22 @@ func (p *RuleProcessor) ExecReplaceRuleState(name string, triggered bool) (err e
 	return err
 	return err
 }
 }
 
 
-func (p *RuleProcessor) GetRuleJson(name string) (string, error) {
+func (p *RuleProcessor) GetRuleJson(id string) (string, error) {
 	var s1 string
 	var s1 string
-	f, _ := p.db.Get(name, &s1)
+	f, _ := p.db.Get(id, &s1)
 	if !f {
 	if !f {
-		return "", errorx.NewWithCode(errorx.NOT_FOUND, fmt.Sprintf("Rule %s is not found.", name))
+		return "", errorx.NewWithCode(errorx.NOT_FOUND, fmt.Sprintf("Rule %s is not found.", id))
 	}
 	}
 	return s1, nil
 	return s1, nil
 }
 }
 
 
-func (p *RuleProcessor) GetRuleByName(name string) (*api.Rule, error) {
+func (p *RuleProcessor) GetRuleById(id string) (*api.Rule, error) {
 	var s1 string
 	var s1 string
-	f, _ := p.db.Get(name, &s1)
+	f, _ := p.db.Get(id, &s1)
 	if !f {
 	if !f {
-		return nil, errorx.NewWithCode(errorx.NOT_FOUND, fmt.Sprintf("Rule %s is not found.", name))
+		return nil, errorx.NewWithCode(errorx.NOT_FOUND, fmt.Sprintf("Rule %s is not found.", id))
 	}
 	}
-	return p.getRuleByJson(name, s1)
+	return p.getRuleByJson(id, s1)
 }
 }
 
 
 func (p *RuleProcessor) getDefaultRule(name, sql string) *api.Rule {
 func (p *RuleProcessor) getDefaultRule(name, sql string) *api.Rule {
@@ -143,7 +143,7 @@ func (p *RuleProcessor) getRuleByJson(id, ruleJson string) (*api.Rule, error) {
 		return nil, fmt.Errorf("Missing rule id.")
 		return nil, fmt.Errorf("Missing rule id.")
 	}
 	}
 	if id != "" && rule.Id != "" && id != rule.Id {
 	if id != "" && rule.Id != "" && id != rule.Id {
-		return nil, fmt.Errorf("Name is not consistent with rule id.")
+		return nil, fmt.Errorf("RuleId is not consistent with rule id.")
 	}
 	}
 	if rule.Id == "" {
 	if rule.Id == "" {
 		rule.Id = id
 		rule.Id = id

+ 1 - 1
internal/server/rest.go

@@ -419,7 +419,7 @@ func ruleHandler(w http.ResponseWriter, r *http.Request) {
 		w.WriteHeader(http.StatusOK)
 		w.WriteHeader(http.StatusOK)
 		w.Write([]byte(content))
 		w.Write([]byte(content))
 	case http.MethodPut:
 	case http.MethodPut:
-		_, err := ruleProcessor.GetRuleByName(name)
+		_, err := ruleProcessor.GetRuleById(name)
 		if err != nil {
 		if err != nil {
 			handleError(w, err, "not found this rule", logger)
 			handleError(w, err, "not found this rule", logger)
 			return
 			return

+ 1 - 1
internal/server/rpc.go

@@ -88,7 +88,7 @@ func (t *Server) CreateQuery(sql string, reply *string) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	} else {
 	} else {
-		rs := &RuleState{Name: QueryRuleId, Topology: tp, Triggered: true}
+		rs := &RuleState{RuleId: QueryRuleId, Topology: tp, Triggered: true}
 		registry.Store(QueryRuleId, rs)
 		registry.Store(QueryRuleId, rs)
 		msg := fmt.Sprintf("Query was submit successfully.")
 		msg := fmt.Sprintf("Query was submit successfully.")
 		logger.Println(msg)
 		logger.Println(msg)

+ 20 - 14
internal/server/rule_manager.go

@@ -32,7 +32,7 @@ import (
 var registry *RuleRegistry
 var registry *RuleRegistry
 
 
 type RuleState struct {
 type RuleState struct {
-	Name      string
+	RuleId    string
 	Topology  *topo.Topo
 	Topology  *topo.Topo
 	Triggered bool
 	Triggered bool
 	// temporary storage for topo graph to make sure even rule close, the graph is still available
 	// temporary storage for topo graph to make sure even rule close, the graph is still available
@@ -88,7 +88,7 @@ func (rr *RuleRegistry) Delete(key string) (*RuleState, bool) {
 
 
 func createRuleState(rule *api.Rule) (*RuleState, error) {
 func createRuleState(rule *api.Rule) (*RuleState, error) {
 	rs := &RuleState{
 	rs := &RuleState{
-		Name: rule.Id,
+		RuleId: rule.Id,
 	}
 	}
 	registry.Store(rule.Id, rs)
 	registry.Store(rule.Id, rs)
 	if tp, err := planner.Plan(rule); err != nil {
 	if tp, err := planner.Plan(rule); err != nil {
@@ -102,7 +102,7 @@ func createRuleState(rule *api.Rule) (*RuleState, error) {
 
 
 // Assume rs is started with topo instantiated
 // Assume rs is started with topo instantiated
 func doStartRule(rs *RuleState) error {
 func doStartRule(rs *RuleState) error {
-	err := ruleProcessor.ExecReplaceRuleState(rs.Name, true)
+	err := ruleProcessor.ExecReplaceRuleState(rs.RuleId, true)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
@@ -116,31 +116,37 @@ func doStartRule(rs *RuleState) error {
 		})
 		})
 		if err != nil {
 		if err != nil {
 			tp.GetContext().SetError(err)
 			tp.GetContext().SetError(err)
-			logger.Errorf("closing rule %s for error: %v", rs.Name, err)
+			logger.Errorf("closing rule %s for error: %v", rs.RuleId, err)
 			tp.Cancel()
 			tp.Cancel()
 			rs.Triggered = false
 			rs.Triggered = false
 		} else {
 		} else {
 			rs.Triggered = false
 			rs.Triggered = false
-			logger.Infof("closing rule %s", rs.Name)
+			logger.Infof("closing rule %s", rs.RuleId)
 		}
 		}
 	}()
 	}()
 	return nil
 	return nil
 }
 }
 
 
 func getAllRulesWithStatus() ([]map[string]interface{}, error) {
 func getAllRulesWithStatus() ([]map[string]interface{}, error) {
-	names, err := ruleProcessor.GetAllRules()
+	ruleIds, err := ruleProcessor.GetAllRules()
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
-	sort.Strings(names)
-	result := make([]map[string]interface{}, len(names))
-	for i, name := range names {
-		s, err := getRuleState(name)
+	sort.Strings(ruleIds)
+	result := make([]map[string]interface{}, len(ruleIds))
+	for i, id := range ruleIds {
+		ruleName := id
+		rule, _ := ruleProcessor.GetRuleById(id)
+		if rule != nil && rule.Name != "" {
+			ruleName = rule.Name
+		}
+		s, err := getRuleState(id)
 		if err != nil {
 		if err != nil {
 			s = fmt.Sprintf("error: %s", err)
 			s = fmt.Sprintf("error: %s", err)
 		}
 		}
 		result[i] = map[string]interface{}{
 		result[i] = map[string]interface{}{
-			"id":     name,
+			"id":     id,
+			"name":   ruleName,
 			"status": s,
 			"status": s,
 		}
 		}
 	}
 	}
@@ -236,7 +242,7 @@ func startRule(name string) error {
 	var rs *RuleState
 	var rs *RuleState
 	rs, ok := registry.Load(name)
 	rs, ok := registry.Load(name)
 	if !ok || (!rs.Triggered) {
 	if !ok || (!rs.Triggered) {
-		r, err := ruleProcessor.GetRuleByName(name)
+		r, err := ruleProcessor.GetRuleById(name)
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}
@@ -286,14 +292,14 @@ func restartRule(name string) error {
 }
 }
 
 
 func recoverRule(name string) string {
 func recoverRule(name string) string {
-	rule, err := ruleProcessor.GetRuleByName(name)
+	rule, err := ruleProcessor.GetRuleById(name)
 	if err != nil {
 	if err != nil {
 		return fmt.Sprintf("%v", err)
 		return fmt.Sprintf("%v", err)
 	}
 	}
 
 
 	if !rule.Triggered {
 	if !rule.Triggered {
 		rs := &RuleState{
 		rs := &RuleState{
-			Name: name,
+			RuleId: name,
 		}
 		}
 		registry.Store(name, rs)
 		registry.Store(name, rs)
 		return fmt.Sprintf("Rule %s was stopped.", name)
 		return fmt.Sprintf("Rule %s was stopped.", name)