You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package misc
import (
"fmt"
"sync"
"github.com/mafanr/g"
"github.com/jmoiron/sqlx"
"go.uber.org/zap"
)
type API struct {
ID int `db:"id" json:"id"`
// 基本设置
Service string `db:"service" json:"service"`
APIID string `db:"api_id" json:"api_id"`
PathType int `db:"path_type" json:"path_type"`
Desc *string `db:"description" json:"desc"`
RouteType int `db:"route_type" json:"route_type"`
RouteAddr string `db:"route_addr" json:"route_addr"`
RouteProto int `db:"route_proto" json:"route_proto"`
MockData *string `db:"mock_data" json:"mock_data"`
// 通用策略
RetryStrategy int `db:"retry_strategy" json:"retry_strategy"`
BwStrategy int `db:"bw_strategy" json:"bw_strategy"`
TrafficStrategy int `db:"traffic_strategy" json:"traffic_strategy"`
// 流量路由
TrafficOn int `db:"traffic_on" json:"traffic_on"`
TrafficAPI string `db:"traffic_api" json:"traffic_api"`
TrafficRatio int `db:"traffic_ratio" json:"traffic_ratio"`
TrafficIPs string `db:"traffic_ips" json:"traffic_ips"`
// 参数验证
VerifyOn int `db:"verify_on" json:"verify_on"`
ParamTable *string `db:"param_rules" json:"param_rules"`
// 缓存
CachedTime int `db:"cached_time" json:"cached_time"`
// 标签分组
Label string `db:"label" json:"label"`
// API修订的版本号
ReviseVersion string `db:"revise_version" json:"revise_version"`
ReleaseVersion string `db:"release_version" json:"release_version"`
Status int `db:"status" json:"status"`
// 日期相关
CreateDate string `db:"create_date" json:"create_date"`
ModifyDate string `db:"modify_date" json:"modify_date"`
ParamRules *sync.Map
}
type Service struct {
ID int `db:"id"`
Name string `db:"name"`
Creator string `db:"creator"`
CreateDate string `db:"create_date"`
ModifyDate string `db:"modify_date"`
}
type BW struct {
Type int `json:"type"`
Key string `json:"key"`
Val string `json:"val"`
}
type ParamRule struct {
Param string `json:"param"`
ParamRule string `json:"rule"`
TestData string `json:"test_data"`
}
type Strategy struct {
ID int `db:"id" json:"id"`
Name string `db:"name" json:"name"`
Service string `db:"service" json:"service"`
Type int `db:"type" json:"type"`
SubType int `db:"sub_type" json:"sub_type"`
Content string `db:"content" json:"content"`
Status int `db:"status" json:"status"`
CreateDate string `db:"create_date" json:"create_date"`
ModifyDate string `db:"modify_date" json:"modify_date"`
DetailContent interface{} `json:"-"` // 把content翻译成具体的策略语言
}
type BwStrategy struct {
Type int // 黑 or 白
BwList []*BW
}
type RetryStrategy struct {
ReqTimeout int `json:"req_timeout"`
RetryTimes int `json:"retry_times"`
RetryInterval int `json:"retry_interval"`
}
type TrafficStrategy struct {
// 接口流量
QPS int `json:"qps"`
Concurrent int `json:"concurrent"`
// 用户流量
Param string `json:"param"` // 限制参数
Span int `json:"span"` // 限定时间
Times int `json:"times"` // 限定次数
// 熔断设置
FuseError int `json:"fuse_error"` // 熔断错误率,大于该值时,触发熔断保护
FuseErrorCount int `json:"fuse_error_count"` // 熔断触发的最小请求次数
FusePercent int `json:"fuse_percent"` // 熔断触发后允许访问的百分比例如100次请求只有50次允许通过
FuseRecover int `json:"fuse_recover"` // 熔断错误率小于该值时,取消熔断保护
FuseRecoverCount int `json:"fuse_recover_count"` // 熔断恢复的最小请求次数
}
var Apis = &sync.Map{}
var Strategies = &sync.Map{}
func InitMysql() {
var err error
// 初始化mysql连接
sqlConn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", Conf.Mysql.Acc, Conf.Mysql.Pw,
Conf.Mysql.Addr, Conf.Mysql.Port, Conf.Mysql.Database)
g.DB, err = sqlx.Open("mysql", sqlConn)
if err != nil {
g.L.Fatal("init mysql error", zap.Error(err))
}
// 测试db是否正常
err = g.DB.Ping()
if err != nil {
g.L.Fatal("init mysql, ping error", zap.Error(err))
}
}