Skip to content

Commit

Permalink
perf: 添加 session 活动日志
Browse files Browse the repository at this point in the history
  • Loading branch information
LeeEirc committed Jan 12, 2024
1 parent f8fe7c4 commit b2d625a
Show file tree
Hide file tree
Showing 10 changed files with 559 additions and 221 deletions.
15 changes: 14 additions & 1 deletion cmd/common/uploader_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ func (u *UploaderService) UploadReplay(sid, replayPath string) error {
logger.Errorf("Retrieve session %s detail failed: %s", sid, err)
return err
}
u.recordingSession(sid, model.ReplayUploadStart, "")
today := sess.DateStart.UTC().Format(dateTimeFormat)
absGzFile := replayPath
if !isGzipFile(absGzFile) {
Expand All @@ -172,17 +173,20 @@ func (u *UploaderService) UploadReplay(sid, replayPath string) error {
err = replayBackend.Upload(absGzFile, target)
replayBackendName := replayBackend.TypeName()
if err != nil && replayBackendName != "server" {
u.recordingSession(sid, model.ReplayUploadFailed, err.Error())
logger.Errorf("Uploader service replay backend %s error %s", replayBackendName, err)
logger.Error("Switch default server to upload replay %s.", absGzFile)
replayBackendName = "server"
u.recordingSession(sid, model.ReplayUploadStart, "")
err = u.apiClient.Upload(sid, absGzFile)
}
if err != nil {
u.recordingSession(sid, model.ReplayUploadFailed, err.Error())
logger.Errorf("Uploader service replay %s uploaded error: %s", absGzFile, err)
return err
}
logger.Infof("Uploader service replay file %s upload to %s", absGzFile, replayBackendName)

u.recordingSession(sid, model.ReplayUploadEnd, "")
if _, err = u.apiClient.FinishReply(sid); err != nil {
logger.Errorf("Finish %s replay api failed: %s", sid, err)
return err
Expand All @@ -208,13 +212,16 @@ func (u *UploaderService) UploadRemainReplays(replayDir string) (ret RemainRepla
logger.Debugf("Upload Remain %d replay files", len(allRemainReplays))
for replayPath := range allRemainReplays {
remainReplay := allRemainReplays[replayPath]
u.recordingSession(remainReplay.Id, model.ReplayUploadStart, "")
if err := u.uploadRemainReplay(&remainReplay); err != nil {
logger.Errorf("Uploader service clean remain replay %s failed: %s",
replayPath, err)
failureFiles = append(failureFiles, replayPath)
failureErrs = append(failureErrs, err.Error())
u.recordingSession(remainReplay.Id, model.ReplayUploadFailed, err.Error())
continue
}
u.recordingSession(remainReplay.Id, model.ReplayUploadEnd, "")
successFiles = append(successFiles, replayPath)
// 上传完成 删除原录像文件
if err := os.Remove(replayPath); err != nil {
Expand All @@ -232,6 +239,12 @@ func (u *UploaderService) UploadRemainReplays(replayDir string) (ret RemainRepla
return
}

func (u *UploaderService) recordingSession(sid string, stage model.ActionStage, msgErr string) {
if err := u.apiClient.RecordingActivityLog(sid, stage, msgErr); err != nil {
logger.Errorf("Record session %s activity %s failed: %s", sid, stage, err)
}
}

func (u *UploaderService) uploadRemainReplay(replay *RemainReplay) error {
replayAbsGzPath := replay.AbsFilePath
if !isGzipFile(replayAbsGzPath) {
Expand Down
35 changes: 35 additions & 0 deletions cmd/impl/jms_record_activity.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package impl

import (
"context"

"github.com/jumpserver/wisp/pkg/jms-sdk-go/model"
"github.com/jumpserver/wisp/pkg/logger"
pb "github.com/jumpserver/wisp/protobuf-go/protobuf"
)

func (j *JMServer) RecordSessionActivity(ctx context.Context, req *pb.SessionActivityRequest) (*pb.StatusResponse, error) {
var (
status pb.Status
errMsg string
stage model.ActionStage
)
data := req.GetData()
sessionId := req.GetSessionId()
logger.Infof("Request record session %s activity: %s", sessionId, data.String())
switch data.GetType() {
case pb.ActivityData_ConnectSuccess:
errMsg = ""
stage = model.ConnectSuccess
case pb.ActivityData_ConnectFailed:
errMsg = data.GetError()
stage = model.ConnectFailed
}
if err := j.apiClient.RecordingActivityLog(sessionId, stage, errMsg); err != nil {
logger.Errorf("Record session %s activity failed: %s", sessionId, err)
status.Err = err.Error()
return &pb.StatusResponse{Status: &status}, nil
}
status.Ok = true
return &pb.StatusResponse{Status: &status}, nil
}
10 changes: 10 additions & 0 deletions pkg/jms-sdk-go/model/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,13 @@ const (
LoginFromRT LabelFiled = "RT"
LoginFromDT LabelFiled = "DT"
)

type ActionStage string

const (
ConnectSuccess ActionStage = "connect_success"
ConnectFailed ActionStage = "connect_failed"
ReplayUploadStart ActionStage = "replay_upload_start"
ReplayUploadEnd ActionStage = "replay_upload_end"
ReplayUploadFailed ActionStage = "replay_upload_failed"
)
19 changes: 19 additions & 0 deletions pkg/jms-sdk-go/service/jms_session_record.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package service

import (
"fmt"

"github.com/jumpserver/wisp/pkg/jms-sdk-go/model"
)

func (s *JMService) RecordingActivityLog(sid string, action model.ActionStage, msgErr string) (err error) {
data := map[string]interface{}{
"type": action,
}
if msgErr != "" {
data["error"] = msgErr
}
reqURL := fmt.Sprintf(SessionActivityLogURL, sid)
_, err = s.authClient.Post(reqURL, data, nil)
return
}
2 changes: 2 additions & 0 deletions pkg/jms-sdk-go/service/url.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ const (
FinishTaskURL = "/api/v1/terminal/tasks/%s/"
JoinRoomValidateURL = "/api/v1/terminal/sessions/join/validate/"
FTPLogListURL = "/api/v1/audits/ftp-logs/" // 上传 ftp日志

SessionActivityLogURL = "/api/v1/terminal/sessions/%s/record-session-log/"
)

// 授权相关API
Expand Down
Loading

0 comments on commit b2d625a

Please sign in to comment.