feat(executor/local): full result state
This commit is contained in:
		
							parent
							
								
									a708e768ec
								
							
						
					
					
						commit
						868154b440
					
				|  | @ -7,6 +7,7 @@ import ( | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/exec" | 	"os/exec" | ||||||
| 	"strings" | 	"strings" | ||||||
|  | 	"syscall" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/criyle/go-judge/envexec" | 	"github.com/criyle/go-judge/envexec" | ||||||
|  | @ -52,11 +53,31 @@ func (e *Local) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) { | ||||||
| 		err = execCmd.Wait() | 		err = execCmd.Wait() | ||||||
| 		endTime := time.Now() | 		endTime := time.Now() | ||||||
| 		runTime := endTime.Sub(startTime) | 		runTime := endTime.Sub(startTime) | ||||||
| 
 | 		processState := execCmd.ProcessState | ||||||
| 		result := stage.ExecutorResult{ | 		result := stage.ExecutorResult{ | ||||||
| 			Status:     stage.Status(envexec.StatusAccepted), | 			Status:     stage.Status(envexec.StatusAccepted), | ||||||
| 			ExitStatus: 0, | 			ExitStatus: processState.ExitCode(), | ||||||
| 			Error:      "", | 			Error:      "", | ||||||
|  | 			Time: func() uint64 { | ||||||
|  | 				nanos := processState.UserTime().Nanoseconds() | ||||||
|  | 				if nanos < 0 { | ||||||
|  | 					return 0 | ||||||
|  | 				} | ||||||
|  | 				return uint64(nanos) | ||||||
|  | 			}(), | ||||||
|  | 			Memory: func() uint64 { | ||||||
|  | 				usage := processState.SysUsage() | ||||||
|  | 				rusage, ok := usage.(*syscall.Rusage) | ||||||
|  | 				if !ok { | ||||||
|  | 					return 0 | ||||||
|  | 				} | ||||||
|  | 				maxRssKB := rusage.Maxrss | ||||||
|  | 				maxRssBytes := maxRssKB * 1024 | ||||||
|  | 				if maxRssBytes < 0 { | ||||||
|  | 					return 0 | ||||||
|  | 				} | ||||||
|  | 				return uint64(maxRssBytes) | ||||||
|  | 			}(), | ||||||
| 			RunTime: func() uint64 { | 			RunTime: func() uint64 { | ||||||
| 				nanos := runTime.Nanoseconds() | 				nanos := runTime.Nanoseconds() | ||||||
| 				if nanos < 0 { | 				if nanos < 0 { | ||||||
|  | @ -70,7 +91,6 @@ func (e *Local) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) { | ||||||
| 
 | 
 | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			if exitErr, ok := err.(*exec.ExitError); ok { | 			if exitErr, ok := err.(*exec.ExitError); ok { | ||||||
| 				result.ExitStatus = exitErr.ExitCode() |  | ||||||
| 				result.Status = stage.Status(envexec.StatusNonzeroExitStatus) | 				result.Status = stage.Status(envexec.StatusNonzeroExitStatus) | ||||||
| 				result.Error = exitErr.Error() | 				result.Error = exitErr.Error() | ||||||
| 			} else { | 			} else { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user