feat(parser/log): new parser
This commit is contained in:
		
							parent
							
								
									1bbc589897
								
							
						
					
					
						commit
						290b614159
					
				|  | @ -9,6 +9,7 @@ import ( | ||||||
| 	_ "github.com/joint-online-judge/JOJ3/internal/parser/dummy" | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/dummy" | ||||||
| 	_ "github.com/joint-online-judge/JOJ3/internal/parser/healthcheck" | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/healthcheck" | ||||||
| 	_ "github.com/joint-online-judge/JOJ3/internal/parser/keyword" | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/keyword" | ||||||
|  | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/log" | ||||||
| 	_ "github.com/joint-online-judge/JOJ3/internal/parser/resultdetail" | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/resultdetail" | ||||||
| 	_ "github.com/joint-online-judge/JOJ3/internal/parser/resultstatus" | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/resultstatus" | ||||||
| 	_ "github.com/joint-online-judge/JOJ3/internal/parser/sample" | 	_ "github.com/joint-online-judge/JOJ3/internal/parser/sample" | ||||||
|  |  | ||||||
							
								
								
									
										9
									
								
								internal/parser/log/meta.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								internal/parser/log/meta.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | package log | ||||||
|  | 
 | ||||||
|  | import "github.com/joint-online-judge/JOJ3/internal/stage" | ||||||
|  | 
 | ||||||
|  | var name = "log" | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	stage.RegisterParser(name, &Log{}) | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								internal/parser/log/parser.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								internal/parser/log/parser.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,52 @@ | ||||||
|  | package log | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fmt" | ||||||
|  | 	"log/slog" | ||||||
|  | 
 | ||||||
|  | 	"github.com/joint-online-judge/JOJ3/internal/stage" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Conf struct { | ||||||
|  | 	FileName string `default:"stdout"` | ||||||
|  | 	Msg      string `default:"log msg"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Log struct{} | ||||||
|  | 
 | ||||||
|  | func Parse(executorResult stage.ExecutorResult, conf Conf) stage.ParserResult { | ||||||
|  | 	content := executorResult.Files[conf.FileName] | ||||||
|  | 	var data map[string]any | ||||||
|  | 	err := json.Unmarshal([]byte(content), &data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		slog.Error(conf.Msg, "error", err) | ||||||
|  | 		return stage.ParserResult{ | ||||||
|  | 			Score:   0, | ||||||
|  | 			Comment: fmt.Sprintf("Failed to parse content: %s", err), | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	args := make([]any, 0, len(data)*2) | ||||||
|  | 	for key, value := range data { | ||||||
|  | 		args = append(args, key, value) | ||||||
|  | 	} | ||||||
|  | 	slog.Info(conf.Msg, args...) | ||||||
|  | 	return stage.ParserResult{ | ||||||
|  | 		Score:   0, | ||||||
|  | 		Comment: "", | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (*Log) Run(results []stage.ExecutorResult, confAny any) ( | ||||||
|  | 	[]stage.ParserResult, bool, error, | ||||||
|  | ) { | ||||||
|  | 	conf, err := stage.DecodeConf[Conf](confAny) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, true, err | ||||||
|  | 	} | ||||||
|  | 	var res []stage.ParserResult | ||||||
|  | 	for _, result := range results { | ||||||
|  | 		res = append(res, Parse(result, *conf)) | ||||||
|  | 	} | ||||||
|  | 	return res, false, nil | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user