Bump version to 1.0.51
This commit is contained in:
@@ -28,13 +28,16 @@ type Engine struct {
|
||||
}
|
||||
|
||||
type Event struct {
|
||||
Type string
|
||||
JobID int64
|
||||
MachineID int64
|
||||
Key string
|
||||
Value string
|
||||
Line string
|
||||
Stream string
|
||||
Type string
|
||||
JobID int64
|
||||
MachineID int64
|
||||
Key string
|
||||
Value string
|
||||
Line string
|
||||
Stream string
|
||||
Progress *ProgressFields
|
||||
TotalBytes int64
|
||||
SentBytes int64
|
||||
}
|
||||
|
||||
func New(database interface{ SQLDB() *sql.DB }, cfg *config.Config) *Engine {
|
||||
@@ -243,7 +246,17 @@ func (e *Engine) Run(ctx context.Context, jobID int64, pairID int64) error {
|
||||
}
|
||||
}
|
||||
|
||||
var lastFileName string
|
||||
onLine := func(stream, line string) {
|
||||
if stream == "stdout" && isProgressOnlyLine(line) {
|
||||
if p := parseProgressFields(line); p != nil {
|
||||
e.emit(Event{Type: "progress", JobID: jobID, Line: line, Stream: stream, Progress: p, Value: lastFileName})
|
||||
}
|
||||
return
|
||||
}
|
||||
if stream == "stdout" && isFileNameLine(line) {
|
||||
lastFileName = line
|
||||
}
|
||||
f, _ := os.OpenFile(logPath, os.O_APPEND|os.O_WRONLY, 0644)
|
||||
if f != nil {
|
||||
fmt.Fprintln(f, line)
|
||||
@@ -286,6 +299,11 @@ func (e *Engine) Run(ctx context.Context, jobID int64, pairID int64) error {
|
||||
}
|
||||
flush()
|
||||
|
||||
stats := result.Stats
|
||||
if stats != nil && stats.TotalSize > 0 {
|
||||
e.emit(Event{Type: "progress_total", JobID: jobID, TotalBytes: stats.TotalSize, SentBytes: stats.SentBytes})
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
if jobCtx.Err() != nil {
|
||||
code := "cancelled_shutdown"
|
||||
@@ -297,6 +315,7 @@ func (e *Engine) Run(ctx context.Context, jobID int64, pairID int64) error {
|
||||
e.setJobError(jobID, code, msg)
|
||||
e.setJobStatus(jobID, "cancelled")
|
||||
e.emit(Event{Type: "status", JobID: jobID, Key: "status", Value: "cancelled", Line: msg})
|
||||
e.persistAndClose(jobID)
|
||||
return jobCtx.Err()
|
||||
}
|
||||
e.setJobStatus(jobID, "failed")
|
||||
@@ -315,11 +334,15 @@ func (e *Engine) Run(ctx context.Context, jobID int64, pairID int64) error {
|
||||
e.setJobStatus(jobID, "failed")
|
||||
e.setJobError(jobID, errCode, errMsg)
|
||||
e.emit(Event{Type: "status", JobID: jobID, Key: "status", Value: "failed", Line: errMsg})
|
||||
e.persistAndClose(jobID)
|
||||
return fmt.Errorf("rsync exited with code %d: %s", result.ExitCode, result.Stderr)
|
||||
}
|
||||
|
||||
e.setJobStatus(jobID, "success")
|
||||
e.emit(Event{Type: "status", JobID: jobID, Key: "status", Value: "success"})
|
||||
if stats != nil {
|
||||
e.persistJobTotals(jobID, stats)
|
||||
}
|
||||
slog.Info("job completed", "job_id", jobID, "pair", pair.Name)
|
||||
e.persistAndClose(jobID)
|
||||
return nil
|
||||
@@ -327,6 +350,23 @@ func (e *Engine) Run(ctx context.Context, jobID int64, pairID int64) error {
|
||||
|
||||
func (e *Engine) persistAndClose(jobID int64) {
|
||||
e.eventBus.CloseJobChannels(jobID)
|
||||
logRepo := models.NewJobLogRepository(e.db)
|
||||
count, err := logRepo.CountByJobID(jobID)
|
||||
if err == nil && count > 2000 {
|
||||
if truncateErr := logRepo.TruncateKeepingHeaderTail(jobID, 50, 100); truncateErr != nil {
|
||||
slog.Warn("failed to truncate job logs", "job_id", jobID, "error", truncateErr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (e *Engine) persistJobTotals(jobID int64, stats *RsyncStats) {
|
||||
if stats == nil {
|
||||
return
|
||||
}
|
||||
jobRepo := models.NewJobRepository(e.db)
|
||||
if err := jobRepo.SetTotals(jobID, stats.TotalSize, stats.SentBytes); err != nil {
|
||||
slog.Warn("failed to persist job totals", "job_id", jobID, "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *Engine) resolveSSHKey(machine *models.Machine) (string, error) {
|
||||
|
||||
Reference in New Issue
Block a user