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 {
|
||||
Name string `default:"unknown"`
|
||||
LogPath string `default:""`
|
||||
ActorCsvPath string `default:""`
|
||||
ExpireUnixTimestamp int64 `default:"-1"`
|
||||
MaxTotalScore int `default:"-1"`
|
||||
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
|
||||
Workflow string
|
||||
RunNumber string
|
||||
ActorName string
|
||||
ActorID string
|
||||
}
|
||||
|
||||
var Attr Attribute
|
||||
|
|
|
@ -2,9 +2,12 @@ package main
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/csv"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"github.com/joint-online-judge/JOJ3/cmd/joj3/conf"
|
||||
"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}
|
||||
}
|
||||
|
||||
func getSlogAttrs() []slog.Attr {
|
||||
return []slog.Attr{
|
||||
func getSlogAttrs(csvPath string) (attrs []slog.Attr) {
|
||||
attrs = []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),
|
||||
}
|
||||
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{}
|
||||
if logPath != "" {
|
||||
// Text file handler for debug logs
|
||||
|
@ -99,7 +141,9 @@ func setupSlog(logPath string) error {
|
|||
}
|
||||
// Create a multi-handler
|
||||
multiHandler := &multiHandler{handlers: handlers}
|
||||
multiHandlerWithAttrs := multiHandler.WithAttrs(getSlogAttrs())
|
||||
multiHandlerWithAttrs := multiHandler.WithAttrs(
|
||||
getSlogAttrs(conf.ActorCsvPath),
|
||||
)
|
||||
// Set the default logger
|
||||
logger := slog.New(multiHandlerWithAttrs)
|
||||
slog.SetDefault(logger)
|
||||
|
|
|
@ -60,7 +60,7 @@ func mainImpl() (err error) {
|
|||
"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)
|
||||
return err
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ func mainImpl() (err error) {
|
|||
return err
|
||||
}
|
||||
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)
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user