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) {
|
||||||
|
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{
|
return []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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
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