浏览代码

update, in progress

joe 4 年之前
父节点
当前提交
54edf51124

+ 0 - 0
conf/hostname


+ 0 - 0
conf/hosts


+ 0 - 0
conf/resolv.conf


+ 3 - 0
go.mod

@@ -24,7 +24,9 @@ require (
 	github.com/grpc-ecosystem/grpc-gateway v1.9.0 // indirect
 	github.com/jonboulle/clockwork v0.1.0 // indirect
 	github.com/modern-go/reflect2 v1.0.1 // indirect
+	github.com/mojocn/base64Captcha v1.3.1 // indirect
 	github.com/natefinch/lumberjack v2.0.0+incompatible
+	github.com/nats-io/nats-server/v2 v2.1.9 // indirect
 	github.com/onsi/ginkgo v1.14.2 // indirect
 	github.com/onsi/gomega v1.10.4 // indirect
 	github.com/prometheus/client_golang v0.9.3 // indirect
@@ -36,6 +38,7 @@ require (
 	github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
 	go.etcd.io/bbolt v1.3.2 // indirect
 	go.uber.org/zap v1.16.0
+	golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb // indirect
 	golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
 	golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc // indirect
 	google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a // indirect

+ 25 - 0
go.sum

@@ -64,6 +64,8 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
 github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk=
@@ -136,9 +138,24 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mojocn/base64Captcha v1.3.1 h1:2Wbkt8Oc8qjmNJ5GyOfSo4tgVQPsbKMftqASnq8GlT0=
+github.com/mojocn/base64Captcha v1.3.1/go.mod h1:wAQCKEc5bDujxKRmbT6/vTnTt5CjStQ8bRfPWUuz/iY=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
 github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
+github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
+github.com/nats-io/jwt v1.1.0 h1:+vOlgtM0ZsF46GbmUoadq0/2rChNS45gtxHEa3H1gqM=
+github.com/nats-io/jwt v1.1.0/go.mod h1:n3cvmLfBfnpV4JJRN7lRYCyZnw48ksGsbThGXEk4w9M=
+github.com/nats-io/nats-server v1.4.1 h1:Ul1oSOGNV/L8kjr4v6l2f9Yet6WY+LevH1/7cRZ/qyA=
+github.com/nats-io/nats-server/v2 v2.1.9 h1:Sxr2zpaapgpBT9ElTxTVe62W+qjnhPcKY/8W5cnA/Qk=
+github.com/nats-io/nats-server/v2 v2.1.9/go.mod h1:9qVyoewoYXzG1ME9ox0HwkkzyYvnlBDugfR4Gg/8uHU=
+github.com/nats-io/nats.go v1.10.0 h1:L8qnKaofSfNFbXg0C5F71LdjPRnmQwSsA4ukmkt1TvY=
+github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE=
+github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
+github.com/nats-io/nkeys v0.1.4 h1:aEsHIssIk6ETN5m2/MD8Y4B2X7FfXrBAUdkyRvbVYzA=
+github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s=
+github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
 github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
@@ -211,9 +228,15 @@ go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/image v0.0.0-20190501045829-6d32002ffd75 h1:TbGuee8sSq15Iguxu4deQ7+Bqq/d2rsQejGcEtADAMQ=
+golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk=
+golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -246,6 +269,7 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -291,6 +315,7 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=

+ 0 - 1
mq/internal/kafka.go

@@ -1 +0,0 @@
-package internal

+ 0 - 1
mq/internal/nats.go

@@ -1 +0,0 @@
-package internal

+ 0 - 1
mq/internal/rabbit.go

@@ -1 +0,0 @@
-package internal

+ 1 - 0
mq/mqsvr/kafka.go

@@ -0,0 +1 @@
+package mqsvr

+ 73 - 0
mq/mqsvr/nats.go

@@ -0,0 +1,73 @@
+package mqsvr
+
+import (
+	"github.com/nats-io/nats.go"
+	"strings"
+	"time"
+)
+
+type NatsCbSubsribe func(subj string, data []byte)
+type NatsCbQueueSubsribe func(subj, queue string, data []byte)
+
+type NatsClient struct {
+	addrs []string
+	conn  *nats.Conn
+}
+
+func NewNatsClient(addrs []string, username, password, name string) (*NatsClient, error) {
+	nc, err := nats.Connect(strings.Join(addrs, ","),
+		nats.NoEcho(),
+		nats.Name(name),
+		nats.Timeout(3*time.Second),
+		nats.MaxReconnects(100),
+		nats.ReconnectWait(5*time.Second),
+		nats.UserInfo(username, password),
+		nats.DisconnectErrHandler(func(nc *nats.Conn, err error) {
+			//fmt.Println()
+		}),
+		nats.ReconnectHandler(func(nc *nats.Conn) {
+			//fmt.
+		}),
+		nats.ClosedHandler(func(nc *nats.Conn) {
+			//fmt
+		}))
+	if nil != err {
+		return nil, err
+	}
+	return &NatsClient{addrs: addrs, conn: nc}, nil
+}
+
+func (self *NatsClient) Close() {
+	self.conn.Close()
+}
+
+func (self *NatsClient) Pub(subj string, content []byte, timeout time.Duration) error {
+	err := self.conn.Publish(subj, content)
+	if err != nil {
+		return err
+	}
+	//self.conn.FlushTimeout(timeout)
+	return nil
+}
+
+func (self *NatsClient) Sub(subj string, cb NatsCbSubsribe) (*nats.Subscription, error) {
+	s, err := self.conn.Subscribe(subj, func(msg *nats.Msg) {
+		cb(msg.Subject, msg.Data)
+	})
+	if err != nil {
+		return nil, err
+	}
+	//self.conn.Flush()
+	return s, nil
+}
+
+func (self *NatsClient) QSub(subj, q string, cb NatsCbQueueSubsribe) (*nats.Subscription, error) {
+	s, err := self.conn.QueueSubscribe(subj, q, func(msg *nats.Msg) {
+		cb(msg.Subject, msg.Sub.Queue, msg.Data)
+	})
+	if err != nil {
+		return nil, err
+	}
+	//self.conn.Flush()
+	return s, nil
+}

+ 1 - 0
mq/mqsvr/nats_test.go

@@ -0,0 +1 @@
+package mqsvr

+ 1 - 0
mq/mqsvr/rabbit.go

@@ -0,0 +1 @@
+package mqsvr

+ 1 - 0
oss/osssvr/aliyun.go

@@ -0,0 +1 @@
+package osssvr

+ 1 - 1
oss/providers/qiniu.go → oss/osssvr/qiniu.go

@@ -1,4 +1,4 @@
-package providers
+package osssvr
 
 import (
 	"context"

+ 1 - 0
oss/osssvr/qiniu_test.go

@@ -0,0 +1 @@
+package osssvr

+ 0 - 1
oss/providers/aliyun.go

@@ -1 +0,0 @@
-package providers

+ 0 - 1
oss/providers/qiniu_test.go

@@ -1 +0,0 @@
-package providers

+ 1 - 0
rds/client_test.go

@@ -0,0 +1 @@
+package rds

+ 14 - 5
rds/script.go

@@ -5,6 +5,7 @@ import (
 	"io/ioutil"
 	"os"
 	"path/filepath"
+	"strings"
 )
 
 /**
@@ -65,15 +66,15 @@ func NewLuaScripts(handle luablocker) *LuaScripts {
 	}
 }
 
-func (self *LuaScripts) Run(name string, keys []string, args ...interface{})*redis.Cmd{
+func (self *LuaScripts) Exec(name string, keys []string, args ...interface{}) *redis.Cmd {
 	luablock, ok := self.m[name]
 	if !ok {
 		panic("not load lua script:" + name)
 	}
-	return luablock.Run(self.h, keys, args)
+	return luablock.EvalSha(self.h, keys, args)
 }
 
-func (self * LuaScripts)LoadString(name string, block string) error {
+func (self *LuaScripts) LoadString(name string, block string) error {
 	_, err := self.h.ScriptLoad(block).Result()
 	if err != nil {
 		return err
@@ -87,7 +88,8 @@ func (self *LuaScripts) LoadFile(f string) error {
 	if err != nil {
 		return err
 	}
-	name := filepath.Base(f)
+	filename := filepath.Base(f)            // xxx.lua
+	name := strings.Split(filename, ".")[0] //xxx
 
 	return self.LoadString(name, string(data))
 }
@@ -97,7 +99,14 @@ func (self *LuaScripts) LoadPath(p string) error {
 		if err != nil {
 			return err
 		}
+		fi, err := os.Stat(path)
+		if err != nil {
+			return err
+		}
+		if fi.IsDir() {
+			return nil
+		}
 		return self.LoadFile(path)
 	})
 	return err
-}
+}

+ 1 - 0
rds/script_test.go

@@ -0,0 +1 @@
+package rds

+ 1 - 1
sms/providers/aliyun.go → sms/smsplat/aliyun.go

@@ -1,4 +1,4 @@
-package providers
+package smsplat
 
 import (
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"

+ 1 - 1
sms/providers/aliyun_test.go → sms/smsplat/aliyun_test.go

@@ -1,4 +1,4 @@
-package providers
+package smsplat
 
 import "testing"
 

+ 1 - 1
sms/providers/smsbao.go → sms/smsplat/smsbao.go

@@ -1,4 +1,4 @@
-package providers
+package smsplat
 
 import (
 	"fmt"

+ 1 - 1
utl/bufPool.go

@@ -9,7 +9,7 @@ var (
 )
 
 func init() {
-	DefBufPool = NewBufPool(uint32(1024 * 4))
+	DefBufPool = NewBufPool(uint32(1024 * 2))
 }
 
 type BufPool struct {

+ 34 - 0
utl/catpcha.go

@@ -1 +1,35 @@
 package utl
+
+import (
+	"github.com/mojocn/base64Captcha"
+)
+
+var (
+	store = base64Captcha.DefaultMemStore
+)
+
+type DigitCatpcha struct {
+	h *base64Captcha.Captcha
+}
+
+func NewDigitCatpcha(length int) *DigitCatpcha {
+	driver := &base64Captcha.DriverDigit{
+		Height:   80,
+		Width:    240,
+		Length:   length,
+		MaxSkew:  0.7,
+		DotCount: 80,
+	}
+	return &DigitCatpcha{
+		h: base64Captcha.NewCaptcha(driver, store),
+	}
+}
+
+func (self *DigitCatpcha) Gen() (id, b64 string, err error) {
+	id, b64, err = self.h.Generate()
+	return
+}
+
+func (self *DigitCatpcha) Verify(id, value string) bool {
+	return store.Verify(id, value, true)
+}

+ 3 - 0
utl/catpcha_test.go

@@ -0,0 +1,3 @@
+package utl
+
+

+ 1 - 0
utl/smtp_test.go

@@ -0,0 +1 @@
+package utl

+ 2 - 0
wkrp/dispatcher_test.go

@@ -8,10 +8,12 @@ import (
 
 func TestNewDispacher(t *testing.T) {
 	d := NewDispacher(16)
+	defer d.Stop()
 
 	d.Do(IJobFn(func() error {
 		time.Sleep(time.Second)
 		fmt.Println("did")
 		return nil
 	}))
+	time.Sleep(2 * time.Second)
 }