Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

21
app/admin/main/open/BUILD Normal file
View File

@@ -0,0 +1,21 @@
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/admin/main/open/cmd:all-srcs",
"//app/admin/main/open/conf:all-srcs",
"//app/admin/main/open/dao:all-srcs",
"//app/admin/main/open/http:all-srcs",
"//app/admin/main/open/model:all-srcs",
"//app/admin/main/open/service:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,6 @@
#1.1.1
1.修改权限认证方式
#1.1.2
1.修改sappkey参数

View File

@@ -0,0 +1,10 @@
# Owner
zhapuyu
zhoushuguang
# Author
tuliang
# Reviewer
zhapuyu
zhoushuguang

View File

@@ -0,0 +1,16 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- tuliang
- zhapuyu
- zhoushuguang
labels:
- admin
- admin/main/open
- main
options:
no_parent_owners: true
reviewers:
- tuliang
- zhapuyu
- zhoushuguang

View File

View File

@@ -0,0 +1,43 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library",
)
go_binary(
name = "cmd",
embed = [":go_default_library"],
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = ["main.go"],
data = ["open-admin-test.toml"],
importpath = "go-common/app/admin/main/open/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/open/conf:go_default_library",
"//app/admin/main/open/http:go_default_library",
"//app/admin/main/open/service:go_default_library",
"//library/log:go_default_library",
"//library/net/trace:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,51 @@
package main
import (
"flag"
"os"
"os/signal"
"syscall"
"time"
"go-common/app/admin/main/open/conf"
"go-common/app/admin/main/open/http"
"go-common/app/admin/main/open/service"
"go-common/library/log"
"go-common/library/net/trace"
)
func main() {
flag.Parse()
if err := conf.Init(); err != nil {
log.Error("conf.Init() error(%v)", err)
panic(err)
}
// init log
log.Init(conf.Conf.Log)
trace.Init(conf.Conf.Tracer)
defer trace.Close()
defer func() {
log.Close()
// wait for a while to guarantee that all log messages are written
time.Sleep(10 * time.Millisecond)
}()
//service init
svc := service.New(conf.Conf)
http.Init(conf.Conf, svc)
// init signal
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
for {
s := <-c
log.Info("open-admin get a signal %s", s.String())
switch s {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGINT:
svc.Close()
return
case syscall.SIGHUP:
// TODO reload
default:
return
}
}
}

View File

@@ -0,0 +1,28 @@
version = "1.0.0"
user = "nobody"
pid = "/tmp/open-admin.pid"
dir = "./"
unameTicker = "1m"
[log]
dir = "/data/log/open-admin/"
[permit]
[permit.Memcache]
name = "go-business/auth"
proto = "tcp"
addr = "172.16.33.54:11211"
active = 10
idle = 10
dialTimeout = "1s"
readTimeout = "1s"
writeTimeout = "1s"
idleTimeout = "80s"
[orm]
dsn = "acc:123456@tcp(172.16.0.215:3306)/bilibili?timeout=5s&readTimeout=5s&writeTimeout=5s&parseTime=true&loc=Local&charset=utf8,utf8mb4"
active = 5
idle = 5
idleTimeout = "4h"

View File

@@ -0,0 +1,39 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["conf.go"],
importpath = "go-common/app/admin/main/open/conf",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/conf:go_default_library",
"//library/database/orm:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/permit:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/trace:go_default_library",
"//library/time:go_default_library",
"//vendor/github.com/BurntSushi/toml:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,94 @@
package conf
import (
"errors"
"flag"
"go-common/library/conf"
"go-common/library/database/orm"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
"go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/trace"
xtime "go-common/library/time"
"github.com/BurntSushi/toml"
)
// Config .
type Config struct {
App *bm.App
Log *log.Config
Verify *verify.Config
Tracer *trace.Config
ORM *orm.Config
Permit *permit.Config2
Cfg *cfg
// Uname load ticker
UnameTicker xtime.Duration
}
// HTTPServers is http servers .
type HTTPServers struct {
Inner *bm.ServerConfig
}
type cfg struct {
RankGroupMaxPs int
}
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
func init() {
flag.StringVar(&confPath, "conf", "", "config path")
}
// Init .
func Init() (err error) {
if confPath != "" {
return local()
}
return remote()
}
func local() (err error) {
_, err = toml.DecodeFile(confPath, &Conf)
return
}
func remote() (err error) {
if client, err = conf.New(); err != nil {
return
}
if err = load(); err != nil {
return
}
go func() {
for range client.Event() {
log.Info("config reload")
}
}()
return
}
func load() (err error) {
var (
s string
ok bool
tmpConf *Config
)
if s, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(s, &tmpConf); err != nil {
return errors.New("could not decode config")
}
*Conf = *tmpConf
return
}

View File

@@ -0,0 +1,55 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"app_test.go",
"dao_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/admin/main/open/conf:go_default_library",
"//app/admin/main/open/model:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"app.go",
"dao.go",
],
importpath = "go-common/app/admin/main/open/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/open/conf:go_default_library",
"//app/admin/main/open/model:go_default_library",
"//library/database/orm:go_default_library",
"//library/log:go_default_library",
"//vendor/github.com/jinzhu/gorm:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,35 @@
package dao
import (
"context"
"go-common/app/admin/main/open/model"
)
// AddApp .
func (d *Dao) AddApp(c context.Context, g *model.App) error {
return d.DB.Table("dm_apps").Create(g).Error
}
// DelApp .
func (d *Dao) DelApp(c context.Context, appid int64) error {
return d.DB.Table("dm_apps").Where("appid = ?", appid).Update("enabled", 0).Error
}
// UpdateApp .
func (d *Dao) UpdateApp(c context.Context, arg *model.AppParams) error {
return d.DB.Table("dm_apps").Where("appid = ?", arg.AppID).Update("app_name", arg.AppName).Error
}
// ListApp .
func (d *Dao) ListApp(c context.Context, t *model.AppListParams) (res []*model.App, err error) {
db := d.DB.Table("dm_apps").Where("enabled = ?", 1)
if t.AppKey != "" {
db = db.Where("appkey = ?", t.AppKey)
}
if t.AppName != "" {
db = db.Where("app_name = ?", t.AppName)
}
err = db.Find(&res).Error
return
}

View File

@@ -0,0 +1,43 @@
package dao
import (
"context"
"testing"
"go-common/app/admin/main/open/model"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoAddApp(t *testing.T) {
convey.Convey("AddApp", t, func() {
p1 := d.AddApp(context.TODO(), nil)
convey.So(p1, convey.ShouldBeNil)
})
}
func TestDaoDelApp(t *testing.T) {
convey.Convey("DelApp", t, func() {
p1 := d.DelApp(context.TODO(), 0)
convey.So(p1, convey.ShouldBeNil)
})
}
func TestDaoUpdateApp(t *testing.T) {
bean := &model.AppParams{
AppID: 123,
AppName: "xxx",
}
convey.Convey("UpdateApp", t, func() {
p1 := d.UpdateApp(context.TODO(), bean)
convey.So(p1, convey.ShouldBeNil)
})
}
func TestDaoListApp(t *testing.T) {
convey.Convey("ListApp", t, func() {
res, err := d.ListApp(context.TODO(), nil)
convey.So(err, convey.ShouldBeNil)
convey.So(res, convey.ShouldNotBeNil)
})
}

View File

@@ -0,0 +1,47 @@
package dao
import (
"context"
"go-common/app/admin/main/open/conf"
"go-common/library/database/orm"
"go-common/library/log"
"github.com/jinzhu/gorm"
)
// Dao .
type Dao struct {
DB *gorm.DB
}
// New new a instance.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
// db
DB: orm.NewMySQL(c.ORM),
}
d.initORM()
return
}
func (d *Dao) initORM() {
d.DB.LogMode(true)
}
// Ping check connection of db , mc.
func (d *Dao) Ping(c context.Context) (err error) {
if d.DB != nil {
if err = d.DB.DB().PingContext(c); err != nil {
log.Error("d.PingContext error (%v)", err)
}
}
return
}
// Close close connection of db , mc.
func (d *Dao) Close() {
if d.DB != nil {
d.DB.Close()
}
}

View File

@@ -0,0 +1,41 @@
package dao
import (
"flag"
"os"
"path/filepath"
"testing"
"go-common/app/admin/main/open/conf"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "")
flag.Set("conf_token", "")
flag.Set("tree_id", "")
flag.Set("conf_version", "server-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
}
flag.Parse()
dir, _ := filepath.Abs("../cmd/open-admin-test.toml")
if err := flag.Set("conf", dir); err != nil {
panic(err)
}
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
m.Run()
os.Exit(1)
}

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"app.go",
"http.go",
],
importpath = "go-common/app/admin/main/open/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/open/conf:go_default_library",
"//app/admin/main/open/model:go_default_library",
"//app/admin/main/open/service:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,64 @@
package http
import (
"strconv"
"go-common/app/admin/main/open/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// addApp.
func addApp(c *bm.Context) {
appname := c.Request.Form.Get("app_name")
if appname == "" {
c.JSON(nil, ecode.RequestErr)
log.Error("appname is Empty")
return
}
c.JSON(nil, mngSvc.AddApp(c, appname))
}
// deleteApp.
func delApp(c *bm.Context) {
form := c.Request.Form
appid, _ := strconv.ParseInt(form.Get("appid"), 10, 64)
if appid <= 0 {
c.JSON(nil, ecode.RequestErr)
log.Error("appid (%d) is not exit", appid)
return
}
c.JSON(nil, mngSvc.DelApp(c, appid))
}
// updateApp.
func updateApp(c *bm.Context) {
arg := new(model.AppParams)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, mngSvc.UpdateApp(c, arg))
}
// listApp.
func listApp(c *bm.Context) {
t := &model.AppListParams{}
if err := c.Bind(t); err != nil {
return
}
data, total, err := mngSvc.ListApp(c, t)
if err != nil {
c.JSON(nil, err)
return
}
page := map[string]int64{
"num": t.PN,
"size": t.PS,
"total": total,
}
c.JSON(map[string]interface{}{
"page": page,
"data": data,
}, err)
}

View File

@@ -0,0 +1,53 @@
package http
import (
"net/http"
"go-common/app/admin/main/open/conf"
"go-common/app/admin/main/open/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
mngSvc *service.Service
idfSvc *verify.Verify
)
// Init init http sever instance.
func Init(c *conf.Config, s *service.Service) {
mngSvc = s
idfSvc = verify.New(c.Verify)
// init inner router
engineIn := bm.DefaultServer(nil)
innerRouter(engineIn)
// init inner server
if err := engineIn.Start(); err != nil {
log.Error("enginIn.Start.error", err)
panic(err)
}
}
// innerRouter.
func innerRouter(e *bm.Engine) {
e.Ping(ping)
g := e.Group("/x/admin/open")
{
gapp := g.Group("/app", idfSvc.Verify)
{
gapp.POST("/add", addApp)
gapp.POST("/delete", delApp)
gapp.POST("/update", updateApp)
gapp.GET("/list", listApp)
}
}
}
// ping check server ok.
func ping(c *bm.Context) {
if err := mngSvc.Ping(c); err != nil {
log.Error("service ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["app.go"],
importpath = "go-common/app/admin/main/open/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,24 @@
package model
// App represents App info.
type App struct {
AppID int64 `json:"appid" gorm:"column:appid"`
AppName string `json:"app_name" gorm:"column:app_name"`
AppKey string `json:"appkey" gorm:"column:appkey"`
AppSecret string `json:"app_secret" gorm:"column:app_secret"`
Enabled int64 `json:"enabled" gorm:"column:enabled" default:"1"`
}
// AppListParams represents SearchAppParams info.
type AppListParams struct {
AppKey string `form:"sappkey"`
AppName string `form:"app_name"`
PS int64 `form:"ps" default:"10"`
PN int64 `form:"pn" default:"1"`
}
// AppParams .
type AppParams struct {
AppID int64 `json:"appid" form:"appid" validate:"required"`
AppName string `json:"app_name" form:"app_name" validate:"required"`
}

View File

@@ -0,0 +1,37 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"app.go",
"service.go",
],
importpath = "go-common/app/admin/main/open/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/open/conf:go_default_library",
"//app/admin/main/open/dao:go_default_library",
"//app/admin/main/open/model:go_default_library",
"//library/log:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,73 @@
package service
import (
"context"
"crypto/md5"
"encoding/hex"
"math/rand"
"strconv"
"time"
"go-common/app/admin/main/open/model"
"go-common/library/log"
)
// AddApp represents add an app.
func (s *Service) AddApp(c context.Context, appname string) (err error) {
// Generate the secret and key
timestamp := strconv.Itoa((int)(time.Now().Unix()) + rand.Intn(1))
hashsec := md5.New()
hashsec.Write([]byte(timestamp))
appsecret := hex.EncodeToString(hashsec.Sum(nil))
hashkey := md5.New()
timestamp += "biliappkey"
hashkey.Write([]byte(timestamp))
appkey := hex.EncodeToString(hashkey.Sum(nil))
g := &model.App{
AppName: appname,
AppKey: appkey,
AppSecret: appsecret,
Enabled: 1,
}
if err = s.dao.AddApp(c, g); err != nil {
log.Error("s.dao.AddApp(%+v) error(%v)", g, err)
}
return
}
// DelApp represents delete an app.
func (s *Service) DelApp(c context.Context, appid int64) (err error) {
if err = s.dao.DelApp(c, appid); err != nil {
log.Error("s.DelApp(%d) error(%v)", appid, err)
}
return
}
// UpdateApp represents update an app.
func (s *Service) UpdateApp(c context.Context, arg *model.AppParams) (err error) {
if err = s.dao.UpdateApp(c, arg); err != nil {
log.Error("s.UpdateApps id (%d) appname(%s) error", arg.AppID, arg.AppName)
}
return
}
// ListApp represents search an app.
func (s *Service) ListApp(c context.Context, t *model.AppListParams) (res []*model.App, total int64, err error) {
if res, err = s.dao.ListApp(c, t); err != nil {
log.Error("s.dao.ListApp error (%v)", err)
return
}
// output the data
total = int64(len(res))
start := (t.PN - 1) * t.PS
if start >= total {
res = []*model.App{}
return
}
end := start + t.PS
if end > total {
end = total
}
res = res[start:end]
return
}

View File

@@ -0,0 +1,33 @@
package service
import (
"context"
"go-common/app/admin/main/open/conf"
"go-common/app/admin/main/open/dao"
)
// Service biz service def.
type Service struct {
c *conf.Config
dao *dao.Dao
}
// New new a Service and return.
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: dao.New(c),
}
return s
}
// Ping check dao health.
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
// Close close all dao.
func (s *Service) Close() {
s.dao.Close()
}