feat(cmd/joj3): support actor csv
This commit is contained in:
		
							parent
							
								
									a1f391d9de
								
							
						
					
					
						commit
						e4e7445645
					
				|  | @ -38,6 +38,7 @@ type ConfStage struct { | ||||||
| type Conf struct { | type Conf struct { | ||||||
| 	Name                string `default:"unknown"` | 	Name                string `default:"unknown"` | ||||||
| 	LogPath             string `default:""` | 	LogPath             string `default:""` | ||||||
|  | 	ActorCsvPath        string `default:""` | ||||||
| 	ExpireUnixTimestamp int64  `default:"-1"` | 	ExpireUnixTimestamp int64  `default:"-1"` | ||||||
| 	MaxTotalScore       int    `default:"-1"` | 	MaxTotalScore       int    `default:"-1"` | ||||||
| 	Stage               struct { | 	Stage               struct { | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								cmd/joj3/env/env.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								cmd/joj3/env/env.go
									
									
									
									
										vendored
									
									
								
							|  | @ -15,6 +15,8 @@ type Attribute struct { | ||||||
| 	Ref        string | 	Ref        string | ||||||
| 	Workflow   string | 	Workflow   string | ||||||
| 	RunNumber  string | 	RunNumber  string | ||||||
|  | 	ActorName  string | ||||||
|  | 	ActorID    string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var Attr Attribute | var Attr Attribute | ||||||
|  |  | ||||||
|  | @ -2,9 +2,12 @@ package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"encoding/csv" | ||||||
|  | 	"io" | ||||||
| 	"log/slog" | 	"log/slog" | ||||||
| 	"os" | 	"os" | ||||||
| 
 | 
 | ||||||
|  | 	"github.com/joint-online-judge/JOJ3/cmd/joj3/conf" | ||||||
| 	"github.com/joint-online-judge/JOJ3/cmd/joj3/env" | 	"github.com/joint-online-judge/JOJ3/cmd/joj3/env" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -50,17 +53,56 @@ func (h *multiHandler) WithGroup(name string) slog.Handler { | ||||||
| 	return &multiHandler{handlers: handlers} | 	return &multiHandler{handlers: handlers} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getSlogAttrs() []slog.Attr { | func getSlogAttrs(csvPath string) (attrs []slog.Attr) { | ||||||
| 	return []slog.Attr{ | 	attrs = []slog.Attr{ | ||||||
| 		slog.String("runID", env.Attr.RunID), | 		slog.String("runID", env.Attr.RunID), | ||||||
| 		slog.String("confName", env.Attr.ConfName), | 		slog.String("confName", env.Attr.ConfName), | ||||||
| 		slog.String("actor", env.Attr.Actor), | 		slog.String("actor", env.Attr.Actor), | ||||||
|  | 		slog.String("actorName", env.Attr.ActorName), | ||||||
|  | 		slog.String("actorID", env.Attr.ActorID), | ||||||
| 		slog.String("repository", env.Attr.Repository), | 		slog.String("repository", env.Attr.Repository), | ||||||
| 		slog.String("sha", env.Attr.Sha), | 		slog.String("sha", env.Attr.Sha), | ||||||
| 	} | 	} | ||||||
|  | 	file, err := os.Open(csvPath) | ||||||
|  | 	if err != nil { | ||||||
|  | 		slog.Error("open csv", "error", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	defer file.Close() | ||||||
|  | 	reader := csv.NewReader(file) | ||||||
|  | 	for { | ||||||
|  | 		row, err := reader.Read() | ||||||
|  | 		if err == io.EOF { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 		if err != nil { | ||||||
|  | 			slog.Error("read csv", "error", err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		if len(row) < 3 { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		actor := row[2] | ||||||
|  | 		slog.Info("actor", "actor", actor) | ||||||
|  | 		if actor == env.Attr.Actor { | ||||||
|  | 			env.Attr.ActorName = row[0] | ||||||
|  | 			env.Attr.ActorID = row[1] | ||||||
|  | 			return []slog.Attr{ | ||||||
|  | 				slog.String("runID", env.Attr.RunID), | ||||||
|  | 				slog.String("confName", env.Attr.ConfName), | ||||||
|  | 				slog.String("actor", env.Attr.Actor), | ||||||
|  | 				slog.String("actorName", env.Attr.ActorName), | ||||||
|  | 				slog.String("actorID", env.Attr.ActorID), | ||||||
|  | 				slog.String("repository", env.Attr.Repository), | ||||||
|  | 				slog.String("sha", env.Attr.Sha), | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func setupSlog(logPath string) error { | func setupSlog(conf *conf.Conf) error { | ||||||
|  | 	logPath := conf.LogPath | ||||||
| 	handlers := []slog.Handler{} | 	handlers := []slog.Handler{} | ||||||
| 	if logPath != "" { | 	if logPath != "" { | ||||||
| 		// Text file handler for debug logs
 | 		// Text file handler for debug logs
 | ||||||
|  | @ -99,7 +141,9 @@ func setupSlog(logPath string) error { | ||||||
| 	} | 	} | ||||||
| 	// Create a multi-handler
 | 	// Create a multi-handler
 | ||||||
| 	multiHandler := &multiHandler{handlers: handlers} | 	multiHandler := &multiHandler{handlers: handlers} | ||||||
| 	multiHandlerWithAttrs := multiHandler.WithAttrs(getSlogAttrs()) | 	multiHandlerWithAttrs := multiHandler.WithAttrs( | ||||||
|  | 		getSlogAttrs(conf.ActorCsvPath), | ||||||
|  | 	) | ||||||
| 	// Set the default logger
 | 	// Set the default logger
 | ||||||
| 	logger := slog.New(multiHandlerWithAttrs) | 	logger := slog.New(multiHandlerWithAttrs) | ||||||
| 	slog.SetDefault(logger) | 	slog.SetDefault(logger) | ||||||
|  |  | ||||||
|  | @ -60,7 +60,7 @@ func mainImpl() (err error) { | ||||||
| 			"error", err, | 			"error", err, | ||||||
| 		) | 		) | ||||||
| 	}() | 	}() | ||||||
| 	if err := setupSlog(""); err != nil { // before conf is loaded
 | 	if err := setupSlog(confObj); err != nil { // before conf is loaded
 | ||||||
| 		slog.Error("setup slog", "error", err) | 		slog.Error("setup slog", "error", err) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | @ -91,7 +91,7 @@ func mainImpl() (err error) { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	slog.Debug("conf loaded", "conf", confObj) | 	slog.Debug("conf loaded", "conf", confObj) | ||||||
| 	if err := setupSlog(confObj.LogPath); err != nil { // after conf is loaded
 | 	if err := setupSlog(confObj); err != nil { // after conf is loaded
 | ||||||
| 		slog.Error("setup slog", "error", err) | 		slog.Error("setup slog", "error", err) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user