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))
|
|
//})
|
|
}
|