79ab4460bc
Adds a temporary admin endpoint to query log_message by ID, returning the full record including context (JSON) and digest fields that the existing /error_message/detail endpoint omits. Co-authored-by: multica-agent <github@multica.ai>
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package log
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/perfect-panel/server/internal/svc"
|
|
"github.com/perfect-panel/server/internal/types"
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
"github.com/perfect-panel/server/pkg/xerr"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type GetLogMessageRawLogic struct {
|
|
logger.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewGetLogMessageRawLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetLogMessageRawLogic {
|
|
return &GetLogMessageRawLogic{Logger: logger.WithContext(ctx), ctx: ctx, svcCtx: svcCtx}
|
|
}
|
|
|
|
func (l *GetLogMessageRawLogic) GetLogMessageRaw(req *types.GetLogMessageRawRequest) (resp *types.GetLogMessageRawResponse, err error) {
|
|
row, err := l.svcCtx.LogMessageModel.FindOne(l.ctx, req.Id)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "FindOne log_message id=%d: %v", req.Id, err)
|
|
}
|
|
|
|
var contextJSON json.RawMessage
|
|
if row.Context != "" {
|
|
if json.Valid([]byte(row.Context)) {
|
|
contextJSON = json.RawMessage(row.Context)
|
|
} else {
|
|
b, _ := json.Marshal(row.Context)
|
|
contextJSON = b
|
|
}
|
|
}
|
|
|
|
var occurredAt int64
|
|
if row.OccurredAt != nil {
|
|
occurredAt = row.OccurredAt.UnixMilli()
|
|
}
|
|
|
|
return &types.GetLogMessageRawResponse{
|
|
Id: row.Id,
|
|
Platform: row.Platform,
|
|
AppVersion: row.AppVersion,
|
|
OsName: row.OsName,
|
|
OsVersion: row.OsVersion,
|
|
DeviceId: row.DeviceId,
|
|
UserId: row.UserId,
|
|
SessionId: row.SessionId,
|
|
Level: row.Level,
|
|
ErrorCode: row.ErrorCode,
|
|
Message: row.Message,
|
|
Stack: row.Stack,
|
|
Context: contextJSON,
|
|
ClientIP: row.ClientIP,
|
|
UserAgent: row.UserAgent,
|
|
Locale: row.Locale,
|
|
Digest: row.Digest,
|
|
OccurredAt: occurredAt,
|
|
CreatedAt: row.CreatedAt.UnixMilli(),
|
|
}, nil
|
|
}
|