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.

136 lines
3.2 KiB

package utilities
import (
"LEIT_PM/web/supports"
"encoding/json"
"github.com/kardianos/service"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"log"
"os"
"path/filepath"
"reflect"
"strings"
)
func GetConfigFromJsonFile(filePath string, config interface{}) error {
currentPath, err := os.Executable()
if err != nil {
return err
}
filePtr, err := os.Open(filepath.Join(filepath.Dir(currentPath), filePath))
if err != nil {
return err
}
defer Close(filePtr)
if err := json.NewDecoder(filePtr).Decode(config); err != nil {
return err
}
return nil
}
func LaunchService(svr service.Interface, svrConfig *service.Config) error {
if svr, err := service.New(svr, svrConfig); err != nil {
return err
} else {
if len(os.Args) > 1 {
switch os.Args[1] {
case "install":
{
if err := svr.Install(); err != nil {
return err
} else {
log.Println("服务安装成功!")
return nil
}
}
case "remove":
{
if err := svr.Uninstall(); err != nil {
return err
} else {
log.Println("H务卸载成功!")
return nil
}
}
default:
{
log.Println("命令行参数解析错错误!")
}
}
return nil
}
if err = svr.Run(); err != nil {
return err
}
return nil
}
}
func Shrink(sp interface{}) {
pointerOfType := reflect.TypeOf(sp)
// 判断sp是否为指针
if reflect.TypeOf(sp).Kind() != reflect.Ptr {
log.Printf("sp must be a pointer")
return
}
structOfType := pointerOfType.Elem()
// 判断sp是否指向结构体
if structOfType.Kind() != reflect.Struct {
log.Printf("sp must be a pointer of struct")
return
}
value := reflect.ValueOf(sp)
for i := 0; i < structOfType.NumField(); i++ {
if structOfType.Field(i).Type.Name() == "string" {
field := value.Elem().Field(i)
field.Set(reflect.ValueOf(strings.TrimSpace(field.String())))
}
}
return
}
// 注册中间件、定义错误处理
func PreSettring(app *iris.Application) {
app.Logger().SetLevel("debug")
customLogger := logger.New(logger.Config{
//状态显示状态代码
Status: true,
// IP显示请求的远程地址
IP: true,
//方法显示http方法
Method: true,
// Path显示请求路径
Path: true,
// Query将url查询附加到Path。
Query: true,
//Columns:true,
// 如果不为空然后它的内容来自`ctx.Values(),Get("logger_message")
//将添加到日志中。
MessageContextKeys: []string{"logger_message"},
//如果不为空然后它的内容来自`ctx.GetHeader(“User-Agent”)
MessageHeaderKeys: []string{"User-Agent"},
})
app.Use(
customLogger,
)
app.OnErrorCode(iris.StatusNotFound, customLogger, func(ctx iris.Context) {
supports.Error(ctx, iris.StatusNotFound, supports.NotFound, nil)
})
//app.OnErrorCode(iris.StatusForbidden, customLogger, func(ctx iris.Context) {
// ctx.JSON(utils.Error(iris.StatusForbidden, "权限不足", nil))
//})
//捕获所有http错误:
//app.OnAnyErrorCode(customLogger, func(ctx iris.Context) {
// //这应该被添加到日志中,因为`logger.Config#MessageContextKey`
// ctx.Values().Set("logger_message", "a dynamic message passed to the logs")
// ctx.JSON(utils.Error(500, "服务器内部错误", nil))
//})
}