Skip to content

Commit

Permalink
chore: 规范报错机制
Browse files Browse the repository at this point in the history
  • Loading branch information
twbworld committed Jan 12, 2024
1 parent 51bf294 commit a1aa828
Show file tree
Hide file tree
Showing 9 changed files with 184 additions and 149 deletions.
32 changes: 23 additions & 9 deletions controller/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package controller

import (
"encoding/json"
"github.com/twbworld/proxy/dao"
"github.com/twbworld/proxy/model"
"net/http"
"regexp"

"github.com/twbworld/proxy/dao"
"github.com/twbworld/proxy/global"
"github.com/twbworld/proxy/model"

"github.com/twbworld/proxy/service"

"github.com/gin-gonic/gin"
Expand All @@ -29,11 +31,23 @@ func Index(ctx *gin.Context) {
}

func Tg(ctx *gin.Context) {
if err := service.TgWebhookHandle(ctx); err != nil {
errMsg, _ := json.Marshal(map[string]string{"error": err.Error()})
ctx.Writer.WriteHeader(http.StatusBadRequest)
ctx.Writer.Header().Set("Content-Type", "application/json")
_, _ = ctx.Writer.Write(errMsg)
return
}
var err error

defer func() {
if p := recover(); p != nil || err != nil {
if p != nil {
global.Log.Errorln(p)
} else {
global.Log.Errorln(err)
}
service.TgSend(`系统错误, 请按"/start"重新设置`)
errMsg, _ := json.Marshal(map[string]string{"error": "系统出错"})
ctx.Writer.WriteHeader(http.StatusBadRequest)
ctx.Writer.Header().Set("Content-Type", "application/json")
_, _ = ctx.Writer.Write(errMsg)
}
}()

err = service.TgWebhookHandle(ctx)

}
86 changes: 50 additions & 36 deletions dao/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dao

import (
"encoding/json"
"errors"
"fmt"

"github.com/twbworld/proxy/global"
Expand All @@ -18,46 +19,46 @@ type db struct{}
type mysql struct{}
type sqlite struct{}
type class interface {
createTable()
createTable() error
}

func (d db) setDB(t string) class {
func (d db) setDB(t string) (class, error) {
switch t {
case "sqlite":
s := sqlite{}
err := s.connect()
if err != nil {
global.Log.Panicln("连接数据库失败[ifgofjn]: ", err)
}
return s
return s, err
case "mysql":
s := mysql{}
err := s.connect()
if err != nil {
global.Log.Panicln("连接数据库失败[ugyjkh]: ", err)
}
return s
m := mysql{}
err := m.connect()
return m, err
default:
return nil
return nil, errors.New("参数错误[okjdoi]: " + t)
}
}

func (s sqlite) createTable() {
func (s sqlite) createTable() (err error) {
var u []string
DB.Select(&u, "SELECT name _id FROM sqlite_master WHERE type ='table'")
err = DB.Select(&u, "SELECT name _id FROM sqlite_master WHERE type ='table'")
if err != nil {
return errors.New("错误[giosjfio]: " + err.Error())
}

tx, err := DB.Beginx()
if err != nil {
global.Log.Panicln("开启事务失败[iufghs]: ", err)
return errors.New("开启事务失败[iufghs]: " + err.Error())
}
defer func() {
if p := recover(); p != nil {
tx.Rollback()
global.Log.Println("错误[huiosdjghioa]", p)
} else if err != nil {
global.Log.Warnln("事务回滚[ijuyitg]: ", err)
tx.Rollback()
} else {
err = tx.Commit()
if err != nil {
err = errors.New("错误[fgdjgo]: " + err.Error())
}
}
}()

Expand All @@ -76,11 +77,11 @@ func (s sqlite) createTable() {
"expiryDate" text(10) NOT NULL DEFAULT ''
);`)
if err != nil {
return
return errors.New("错误[ugfdhsn]: " + err.Error())
}
_, err = tx.Exec(`CREATE INDEX "password" ON "users" ( "password" ASC );`)
if err != nil {
return
return errors.New("错误[jfgfds]: " + err.Error())
}

sql := "INSERT INTO `users`(`username`, `password`, `passwordShow`, `quota`) VALUES(:username, :password, :passwordShow, :quota)"
Expand All @@ -91,7 +92,7 @@ func (s sqlite) createTable() {
"quota": "-1",
})
if err != nil {
return
return errors.New("错误[tyudsfsadm]: " + err.Error())
}
}

Expand All @@ -105,33 +106,40 @@ func (s sqlite) createTable() {
"update_time" text NOT NULL DEFAULT ''
);`)
if err != nil {
return
return errors.New("错误[jdgfsrsag]: " + err.Error())
}

_, err = tx.Exec(`CREATE UNIQUE INDEX "idx_key" ON "system_info" ( "key" ASC );`)
if err != nil {
return
return errors.New("错误[hjdrsrtgf]: " + err.Error())
}
}

return
}

func (m mysql) createTable() {
func (m mysql) createTable() (err error) {
var u []string
DB.Select(&u, "SHOW TABLES")
if err != nil {
return errors.New("错误[hsfds]: " + err.Error())
}

tx, err := DB.Beginx()
if err != nil {
global.Log.Panicln("开启事务失败[iufghs]: ", err)
return errors.New("开启事务失败[khhdsfg]: " + err.Error())
}
defer func() {
if p := recover(); p != nil {
tx.Rollback()
global.Log.Println("错误[eoirtujge]", p)
} else if err != nil {
global.Log.Warnln("事务回滚[ijuyitg]: ", err)
tx.Rollback()
} else {
err = tx.Commit()
if err != nil {
err = errors.New("错误[kjdgsz]: " + err.Error())
}
}
}()

Expand All @@ -140,7 +148,7 @@ func (m mysql) createTable() {

_, err = tx.Exec("CREATE TABLE `users` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名', `password` char(56) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码', `passwordShow` varchar(255) NOT NULL, `quota` bigint NOT NULL DEFAULT '0' COMMENT '流量限制, 单位byte,1G=1073741824byte;-1:不限', `download` bigint unsigned NOT NULL DEFAULT '0' COMMENT '下行流量', `upload` bigint unsigned NOT NULL DEFAULT '0' COMMENT '上行流量', `useDays` int DEFAULT '0', `expiryDate` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '限期; 年-月-日', PRIMARY KEY (`id`), KEY `password` (`password`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';")
if err != nil {
return
return errors.New("错误[kghjffsd]: " + err.Error())
}

sql := "INSERT INTO `users`(`username`, `password`, `passwordShow`, `quota`) VALUES(:username, :password, :passwordShow, :quota)"
Expand All @@ -151,7 +159,7 @@ func (m mysql) createTable() {
"quota": "-1",
})
if err != nil {
return
return errors.New("错误[jghgsd]: " + err.Error())
}
}

Expand All @@ -161,21 +169,22 @@ func (m mysql) createTable() {
_, err = tx.Exec("CREATE TABLE `system_info` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_key` (`key`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';")

if err != nil {
return
return errors.New("错误[ghjdfgs]: " + err.Error())
}
}
return
}

func (s sqlite) connect() (err error) {
global.Log.Infoln("连接sqlite服务[poeriw]: ", global.Config.Env.Db.SqlitePath)

DB, err = sqlx.Open("sqlite3", global.Config.Env.Db.SqlitePath)
if err != nil {
global.Log.Panicln("数据库连接失败[huisdrd]: ", err)
return errors.New("数据库连接失败[jgadsfgas]: " + err.Error())
}
err = DB.Ping() //没有数据库会创建
if err != nil {
global.Log.Panicln("数据库连接失败[gggsdsfs]: ", err)
return errors.New("数据库连接失败[khdsfgs]: " + err.Error())
}
DB.SetMaxOpenConns(20)
DB.SetMaxIdleConns(10)
Expand All @@ -190,7 +199,7 @@ func (m mysql) connect() (err error) {
//也可以使用MustConnect连接不成功就panic
DB, err = sqlx.Connect("mysql", dsn)
if err != nil {
global.Log.Panicln("数据库连接失败[doaskodj]: ", err)
return errors.New("数据库连接失败[ujefaf]: " + err.Error())
}

DB.SetMaxOpenConns(20)
Expand All @@ -203,12 +212,17 @@ func Close() (err error) {
return DB.Close()
}

func Init() (err error) {
dbRes := new(db).setDB(global.Config.Env.Db.Type)
func Init() {
dbRes, err := new(db).setDB(global.Config.Env.Db.Type)
if err != nil {
panic(err)
}
if dbRes == nil {
b, _ := json.Marshal(global.Config.Env.Db)
global.Log.Panicln("缺少数据库信息[igoujsd]: ", string(b))
panic("缺少数据库信息[igoujsd]: " + string(b))
}
err = dbRes.createTable()
if err != nil {
panic(err)
}
dbRes.createTable()
return
}
8 changes: 8 additions & 0 deletions global/app.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package global

import (
"log"

"github.com/twbworld/proxy/config"

tg "github.com/go-telegram-bot-api/telegram-bot-api/v5"
Expand All @@ -15,6 +17,12 @@ var (
)

func Init() {
defer func() {
if p := recover(); p != nil {
log.Println(p)
}
}()

initConfig()
initLog(Config.AppConfig.RunLogPath)
initEnv(Config.AppConfig.EnvPath)
Expand Down
4 changes: 2 additions & 2 deletions global/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func initEnv(configPath string) {
v.SetConfigFile(configPath)
v.SetConfigType("json")
if err := v.ReadInConfig(); err != nil {
Log.Panicln("读取配置失败[u9ij]: ", err)
panic("读取配置失败[u9ij]: " + err.Error())
}

// 监听配置文件
Expand All @@ -50,7 +50,7 @@ func initEnv(configPath string) {

// 将配置赋值给全局变量
if err := v.Unmarshal(&Config.Env); err != nil {
Log.Panicln(err)
panic("出错[dhfal]: " + err.Error())
}

}
5 changes: 2 additions & 3 deletions global/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package global

import (
"io"
"log"
"os"

"github.com/sirupsen/logrus"
Expand All @@ -13,7 +12,7 @@ func initLog(runLogPath string) {

err := utils.CreateFile(runLogPath)
if err != nil {
log.Panicln("创建文件错误: ", err)
panic("创建文件错误[oirdtug]: " + err.Error())
}

Log = logrus.New()
Expand All @@ -22,7 +21,7 @@ func initLog(runLogPath string) {

runfile, err := os.OpenFile(runLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Panicln("打开文件错误: ", err)
panic("打开文件错误[0atrpf]: " + err.Error())
}
Log.SetOutput(io.MultiWriter(os.Stdout, runfile)) //同时输出到终端和日志
}
8 changes: 4 additions & 4 deletions initialize/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func Init() {

ginfile, err := os.OpenFile(global.Config.AppConfig.GinLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
global.Log.Panicln("打开文件错误: ", err)
panic("打开文件错误[nvcbjkdfgu]: " + err.Error())
}
gin.DefaultWriter = io.MultiWriter(ginfile) //记录所有日志
gin.DefaultErrorWriter = global.Log.Out
Expand All @@ -43,7 +43,7 @@ func Init() {
//协程启动服务
go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
global.Log.Panicln(err)
global.Log.Panic("服务出错[isjfio]: ", err.Error()) //外部并不能捕获Panic
}
}()

Expand Down Expand Up @@ -71,8 +71,8 @@ func Init() {
if err := server.Shutdown(timeoutCtx); err != nil {
global.Log.Panicln("服务关闭出错[oijojiud]", err)
}
service.TgSend("程序关闭成功")
service.TgSend("服务退出成功")
service.TgWebhookClear()
global.Log.Infoln("服务关闭!")
global.Log.Infoln("服务退出成功")

}
Loading

0 comments on commit a1aa828

Please sign in to comment.