func()

in cluster/router/script/router.go [69:141]


func (s *ScriptRouter) Process(event *config_center.ConfigChangeEvent) {
	s.mu.Lock()
	defer s.mu.Unlock()

	rawConf, ok := event.Value.(string)
	if !ok {
		panic(ok)
	}
	cfg, err := parseRoute(rawConf)
	if err != nil {
		logger.Errorf("Parse route cfg failed: %v", err)
		return
	}

	switch event.ConfigType {
	case remoting.EventTypeAdd, remoting.EventTypeUpdate:
		//destroy old instance
		if s.enabled && s.scriptType != "" {
			in, err := ins.GetInstances(s.scriptType)
			if err != nil {
				logger.Errorf("GetInstances failed to Destroy: %v", err)
			} else {
				in.Destroy(s.rawScript)
			}
		}
		// check new config
		if "" == cfg.ScriptType {
			logger.Errorf("`type` field must be set in config")
			return
		}
		if "" == cfg.Script {
			logger.Errorf("`script` field must be set in config")
			return
		}
		if "" == cfg.Key {
			logger.Errorf("`applicationName` field must be set in config")
			return
		}
		if !*cfg.Enabled {
			logger.Infof("`enabled` field equiles false, this rule will be ignored :%s", cfg.Script)
		}
		// rewrite to ScriptRouter
		s.enabled = *cfg.Enabled
		s.rawScript = cfg.Script
		s.scriptType = cfg.ScriptType

		// compile script
		in, err := ins.GetInstances(s.scriptType)
		if err != nil {
			logger.Errorf("GetInstances failed: %v", err)
			s.enabled = false
			return
		}
		if s.enabled {
			err = in.Compile(s.rawScript)
			// fail, disable rule
			if err != nil {
				s.enabled = false
				logger.Errorf("Compile Script failed: %v", err)
			}
		}

	case remoting.EventTypeDel:
		in, _ := ins.GetInstances(s.scriptType)

		if in != nil && s.enabled {
			in.Destroy(s.rawScript)
		}
		s.enabled = false
		s.rawScript = ""
		s.scriptType = ""
	}
}