parent
ee3004130e
commit
ff91b9782b
8 changed files with 5 additions and 264 deletions
@ -1,45 +0,0 @@ |
|||||||
package random |
|
||||||
|
|
||||||
import ( |
|
||||||
"context" |
|
||||||
"git.diulo.com/mogfee/kit/selector" |
|
||||||
"math/rand" |
|
||||||
) |
|
||||||
|
|
||||||
type Option func(o *options) |
|
||||||
|
|
||||||
type options struct { |
|
||||||
} |
|
||||||
type Balancer struct { |
|
||||||
} |
|
||||||
|
|
||||||
func New(opts ...Option) selector.Selector { |
|
||||||
return NewBuilder(opts...).Build() |
|
||||||
} |
|
||||||
func (b *Balancer) Pick(ctx context.Context, nodes []selector.WeightedNode) (selector.WeightedNode, selector.DoneFunc, error) { |
|
||||||
if len(nodes) == 0 { |
|
||||||
return nil, nil, selector.ErrNoAvailable |
|
||||||
} |
|
||||||
cut := rand.Intn(len(nodes)) |
|
||||||
selected := nodes[cut] |
|
||||||
d := selected.Pick() |
|
||||||
return selected, d, nil |
|
||||||
} |
|
||||||
|
|
||||||
func NewBuilder(opts ...Option) selector.Builder { |
|
||||||
var option options |
|
||||||
for _, opt := range opts { |
|
||||||
opt(&option) |
|
||||||
} |
|
||||||
return &selector.DefaultBuilder{ |
|
||||||
Balancer: &Builder{}, |
|
||||||
Node: &direct.Builder{}, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// Builder is random builder
|
|
||||||
type Builder struct{} |
|
||||||
|
|
||||||
func (b *Builder) Builder() selector.Balancer { |
|
||||||
return &Balancer{} |
|
||||||
} |
|
@ -1,55 +0,0 @@ |
|||||||
package selector_test |
|
||||||
|
|
||||||
import ( |
|
||||||
"context" |
|
||||||
"git.diulo.com/mogfee/kit/registry" |
|
||||||
"git.diulo.com/mogfee/kit/selector" |
|
||||||
"git.diulo.com/mogfee/kit/selector/filter" |
|
||||||
"git.diulo.com/mogfee/kit/selector/random" |
|
||||||
"gopkg.in/go-playground/assert.v1" |
|
||||||
"testing" |
|
||||||
) |
|
||||||
|
|
||||||
func TestSelect(t *testing.T) { |
|
||||||
t.Run("没有可用服务", func(t *testing.T) { |
|
||||||
s := random.New() |
|
||||||
_, _, err := s.Select(context.Background()) |
|
||||||
assert.Equal(t, err, selector.ErrNoAvailable) |
|
||||||
}) |
|
||||||
t.Run("正常访问", func(t *testing.T) { |
|
||||||
s := random.New() |
|
||||||
s.Apply(nodes) |
|
||||||
selected, _, err := s.Select(context.Background()) |
|
||||||
assert.Equal(t, err, nil) |
|
||||||
assert.Equal(t, selected.Address(), nodes[0].Address()) |
|
||||||
|
|
||||||
selected, _, err = s.Select(context.Background()) |
|
||||||
assert.Equal(t, err, nil) |
|
||||||
assert.Equal(t, selected.Address(), nodes[1].Address()) |
|
||||||
}) |
|
||||||
|
|
||||||
t.Run("获取v2版本", func(t *testing.T) { |
|
||||||
s := random.New() |
|
||||||
s.Apply(nodes) |
|
||||||
selected, _, err := s.Select(context.Background(), selector.WithNodeFilter(filter.Version("v2.0.0"))) |
|
||||||
assert.Equal(t, err, nil) |
|
||||||
assert.Equal(t, selected.Address(), nodes[1].Address()) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
var nodes = []selector.Node{ |
|
||||||
selector.NewNode("http", "127.0.0.1:8080", ®istry.ServiceInstance{ |
|
||||||
ID: "127.0.0.1:8080", |
|
||||||
Name: "hello", |
|
||||||
Version: "v1.0.0", |
|
||||||
Metadata: map[string]string{"weight": "10"}, |
|
||||||
Endpoints: []string{"127.0.0.1:8080"}, |
|
||||||
}), |
|
||||||
selector.NewNode("http", "127.0.0.1:9090", ®istry.ServiceInstance{ |
|
||||||
ID: "127.0.0.1:9090", |
|
||||||
Name: "hello", |
|
||||||
Version: "v2.0.0", |
|
||||||
Metadata: map[string]string{"weight": "10"}, |
|
||||||
Endpoints: []string{"127.0.0.1:9090"}, |
|
||||||
}), |
|
||||||
} |
|
@ -1,22 +0,0 @@ |
|||||||
package main |
|
||||||
|
|
||||||
import ( |
|
||||||
"fmt" |
|
||||||
"github.com/spf13/cobra" |
|
||||||
) |
|
||||||
|
|
||||||
func main() { |
|
||||||
Cmd := &cobra.Command{ |
|
||||||
Use: "model", |
|
||||||
} |
|
||||||
mysqlCmd := &cobra.Command{ |
|
||||||
Use: "mysql", |
|
||||||
RunE: func(cmd *cobra.Command, args []string) error { |
|
||||||
fmt.Println("aaa") |
|
||||||
return nil |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
Cmd.AddCommand(mysqlCmd) |
|
||||||
Cmd.Execute() |
|
||||||
} |
|
@ -1 +0,0 @@ |
|||||||
package command |
|
@ -1,11 +0,0 @@ |
|||||||
package main |
|
||||||
|
|
||||||
import "git.diulo.com/mogfee/kit/tools/model/sql/gen" |
|
||||||
|
|
||||||
func main() { |
|
||||||
filenmae := "/Users/mogfee/web/sendmail_server_new/sendmail.sch.sql" |
|
||||||
err := gen.NewGenerator().StartFromDDL(filenmae, false, true, "sendmail") |
|
||||||
if err != nil { |
|
||||||
panic(err) |
|
||||||
} |
|
||||||
} |
|
@ -1,52 +0,0 @@ |
|||||||
package gen |
|
||||||
|
|
||||||
import "git.diulo.com/mogfee/kit/mysql/ddl" |
|
||||||
|
|
||||||
type ( |
|
||||||
defaultGenerator struct { |
|
||||||
dir string |
|
||||||
pkg string |
|
||||||
ignoreColumns []string |
|
||||||
} |
|
||||||
code struct { |
|
||||||
importsCode string |
|
||||||
varsCode string |
|
||||||
typesCode string |
|
||||||
newCode string |
|
||||||
insertCode string |
|
||||||
findCode string |
|
||||||
updateCode string |
|
||||||
deleteCode string |
|
||||||
cacheExtra string |
|
||||||
tableName string |
|
||||||
} |
|
||||||
codeTuple struct { |
|
||||||
modelCode string |
|
||||||
modelCustomCode string |
|
||||||
} |
|
||||||
) |
|
||||||
|
|
||||||
func NewGenerator() *defaultGenerator { |
|
||||||
return &defaultGenerator{} |
|
||||||
} |
|
||||||
|
|
||||||
func (g *defaultGenerator) StartFromDDL(filename string, withCache, strict bool, database string) error { |
|
||||||
modelList, err := g.genFromDDL(filename, withCache, strict, database) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
return g.createFile(modelList) |
|
||||||
} |
|
||||||
|
|
||||||
func (g *defaultGenerator) genFromDDL(filename string, cache bool, strict bool, database string) ( |
|
||||||
map[string]*codeTuple, error) { |
|
||||||
m := make(map[string]*codeTuple) |
|
||||||
err := ddl.Parser(filename, func(table *ddl.Table) error { |
|
||||||
code, err := g.genModel(e, cache) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
|
|
||||||
}) |
|
||||||
return m, err |
|
||||||
} |
|
@ -1,71 +0,0 @@ |
|||||||
package parser |
|
||||||
|
|
||||||
import ( |
|
||||||
"git.diulo.com/mogfee/kit/mysql/ddl" |
|
||||||
) |
|
||||||
|
|
||||||
const timeImport = "time.Time" |
|
||||||
|
|
||||||
type ( |
|
||||||
Table struct { |
|
||||||
Name string |
|
||||||
Db string |
|
||||||
PrimaryKey Primary |
|
||||||
UniqueIndex map[string][]*Field |
|
||||||
Fields []*Field |
|
||||||
} |
|
||||||
Primary struct { |
|
||||||
Field |
|
||||||
AutoIncrement bool |
|
||||||
} |
|
||||||
Field struct { |
|
||||||
NameOriginal string |
|
||||||
Name string |
|
||||||
DateType string |
|
||||||
Comment string |
|
||||||
SeqInIndex int |
|
||||||
OrdinalPosition int |
|
||||||
ContainsPQ bool |
|
||||||
} |
|
||||||
KeyType int |
|
||||||
) |
|
||||||
|
|
||||||
func parseNameOriginal(ts []*ddl.Table) (nameOriginals [][]string) { |
|
||||||
var columns []string |
|
||||||
for _, t := range ts { |
|
||||||
columns = []string{} |
|
||||||
for _, c := range t.Columns { |
|
||||||
columns = append(columns, c.Name) |
|
||||||
} |
|
||||||
nameOriginals = append(nameOriginals, columns) |
|
||||||
} |
|
||||||
return nameOriginals |
|
||||||
} |
|
||||||
|
|
||||||
func Parse(filename, database string, strict bool) ([]*Table, error) { |
|
||||||
list := make([]*Table, 0) |
|
||||||
err := ddl.Parser(filename, func(table *ddl.Table) error { |
|
||||||
|
|
||||||
list = append(list, &Table{ |
|
||||||
Name: table.Name, |
|
||||||
Db: "", |
|
||||||
PrimaryKey: Primary{ |
|
||||||
Field: Field{ |
|
||||||
NameOriginal: "", |
|
||||||
Name: "", |
|
||||||
DateType: "", |
|
||||||
Comment: "", |
|
||||||
SeqInIndex: 0, |
|
||||||
OrdinalPosition: 0, |
|
||||||
ContainsPQ: false, |
|
||||||
}, |
|
||||||
AutoIncrement: false, |
|
||||||
}, |
|
||||||
UniqueIndex: nil, |
|
||||||
Fields: nil, |
|
||||||
}) |
|
||||||
|
|
||||||
return nil |
|
||||||
}) |
|
||||||
return list, err |
|
||||||
} |
|
Loading…
Reference in new issue