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