balance.go 1.8 KB
Newer Older
Y
Your Name 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
package dao_version_config

import (
	"encoding/json"

	"github.com/eolinker/goku-api-gateway/common/database"
	"github.com/eolinker/goku-api-gateway/config"
	entity "github.com/eolinker/goku-api-gateway/server/entity/console-entity"
)

//GetBalances 获取balance信息
func GetBalances(clusters []*entity.Cluster) (map[string]map[string]*config.BalanceConfig, error) {
	db := database.GetConnection()
	sql := "SELECT goku_balance.balanceName,goku_balance.static,goku_balance.staticCluster,goku_balance.serviceName,goku_balance.appName,goku_service_config.driver FROM goku_balance INNER JOIN goku_service_config ON goku_service_config.`name` = goku_balance.serviceName"
	rows, err := db.Query(sql)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	balanceMaps := make(map[string]map[string]*config.BalanceConfig)
	for rows.Next() {
		var balanceName, static, staticCluster, serviceName, appName, driver string
		err = rows.Scan(&balanceName, &static, &staticCluster, &serviceName, &appName, &driver)
		staticMap := make(map[string]string)
		if staticCluster != "" {
			err := json.Unmarshal([]byte(staticCluster), &staticMap)
			if err != nil {
				return nil, err
			}
		}

		for _, c := range clusters {
			if _, ok := balanceMaps[c.Name]; !ok {
				balanceMaps[c.Name] = make(map[string]*config.BalanceConfig)
			}
			if driver != "static" {
				balanceMaps[c.Name][balanceName] = &config.BalanceConfig{
					Name:         balanceName,
					DiscoverName: serviceName,
					Config:       appName,
				}
				continue
			}
			staticBalance := static
			if v, ok := staticMap[c.Name]; ok {
				staticBalance = v
			}

			balanceMaps[c.Name][balanceName] = &config.BalanceConfig{
				Name:         balanceName,
				DiscoverName: serviceName,
				Config:       staticBalance,
			}
		}

	}
	return balanceMaps, nil
}