group-ratio.go 980 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package common
  2. import (
  3. "encoding/json"
  4. "errors"
  5. )
  6. var GroupRatio = map[string]float64{
  7. "default": 1,
  8. "vip": 1,
  9. "svip": 1,
  10. }
  11. func GroupRatio2JSONString() string {
  12. jsonBytes, err := json.Marshal(GroupRatio)
  13. if err != nil {
  14. SysError("error marshalling model ratio: " + err.Error())
  15. }
  16. return string(jsonBytes)
  17. }
  18. func UpdateGroupRatioByJSONString(jsonStr string) error {
  19. tempGroupRatio := make(map[string]float64)
  20. err := json.Unmarshal([]byte(jsonStr), &tempGroupRatio)
  21. err = checkGroupRatio(tempGroupRatio)
  22. if err != nil {
  23. return err
  24. }
  25. GroupRatio = tempGroupRatio
  26. return err
  27. }
  28. func GetGroupRatio(name string) float64 {
  29. ratio, ok := GroupRatio[name]
  30. if !ok {
  31. SysError("group ratio not found: " + name)
  32. return 1
  33. }
  34. return ratio
  35. }
  36. func checkGroupRatio(checkGroupRatio map[string]float64) error {
  37. for name, ratio := range checkGroupRatio {
  38. if ratio < 0 {
  39. return errors.New("group ratio must be greater than 0: " + name)
  40. }
  41. }
  42. return nil
  43. }