Skip to content

Commit e91961d

Browse files
authored
Merge pull request #411 from Hyperloop-UPV/backend/fixes
fix: minor fixes
2 parents 0458b40 + 91f96d7 commit e91961d

14 files changed

Lines changed: 86 additions & 59 deletions

File tree

backend/cmd/config.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ boards = ["BCU", "BMSL", "HVSCU", "HVSCU-Cabinet", "LCU", "PCU", "VCU", "BLCU"]
1919
[adj]
2020
branch = "main" # Leave blank when using ADJ as a submodule (like this: "")
2121

22-
# Network Configuration
23-
[network]
24-
manual = false # Manual network device selection
25-
2622
# Transport Configuration
2723
[transport]
2824
propagate_fault = false

backend/cmd/dev-config.toml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ boards = ["HVSCU", "HVSCU-Cabinet", "PCU", "LCU", "BCU", "BMSL"]
2020
[adj]
2121
branch = "software" # Leave blank when using ADJ as a submodule (like this: "")
2222

23-
# Network Configuration
24-
[network]
25-
manual = false # Manual network device selection
2623

2724
# Transport Configuration
2825
[transport]
@@ -77,11 +74,5 @@ upload_order_id = 0 # Order ID for upload operations (0 = use default)
7774

7875
# Logging Configuration
7976
[logging]
80-
level = "debug" # Logging level (trace, debug, info, warn, error, fatal)
81-
console = true # Enable console output
82-
file = "backend.log" # Log file path (empty to disable file logging)
83-
max_size_mb = 100 # Maximum log file size in MB
84-
max_backups = 3 # Number of backup files to keep
85-
max_age_days = 7 # Maximum age of log files in days
8677
time_unit = "us" # Time unit for log timestamps (ns, us, ms, s)
8778
logging_path = "."

backend/cmd/main.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package main
22

33
import (
4-
"flag"
54
_ "net/http/pprof"
65
"os"
76
"os/signal"
87

98
adj_module "github.com/HyperloopUPV-H8/h9-backend/internal/adj"
109
"github.com/HyperloopUPV-H8/h9-backend/internal/config"
10+
"github.com/HyperloopUPV-H8/h9-backend/internal/flags"
1111
"github.com/HyperloopUPV-H8/h9-backend/internal/pod_data"
1212
"github.com/HyperloopUPV-H8/h9-backend/internal/update_factory"
1313
vehicle_models "github.com/HyperloopUPV-H8/h9-backend/internal/vehicle/models"
14-
"github.com/HyperloopUPV-H8/h9-backend/pkg/abstraction"
1514
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport"
1615
"github.com/HyperloopUPV-H8/h9-backend/pkg/websocket"
1716
trace "github.com/rs/zerolog/log"
@@ -29,25 +28,13 @@ const (
2928
RemoveStateOrder = "remove_state_order"
3029
)
3130

32-
var configFile = flag.String("config", "config.toml", "path to configuration file")
33-
var traceLevel = flag.String("trace", "info", "set the trace level (\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\")")
34-
var traceFile = flag.String("log", "", "set the trace log file")
35-
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
36-
var enableSNTP = flag.Bool("sntp", false, "enables a simple SNTP server on port 123")
37-
var networkDevice = flag.Int("dev", -1, "index of the network device to use, overrides device prompt")
38-
var blockprofile = flag.Int("blockprofile", 0, "number of block profiles to include")
39-
var playbackFile = flag.String("playback", "", "")
40-
var versionFlag = flag.Bool("version", false, "Show the backend version")
41-
42-
type SubloggersMap map[abstraction.LoggerName]abstraction.Logger
43-
4431
func main() {
4532
// Parse command line flags
46-
flag.Parse()
33+
flags.Init()
4734
handleVersionFlag()
4835

4936
// Configure trace
50-
traceFile := initTrace(*traceLevel, *traceFile)
37+
traceFile := initTrace(flags.TraceLevel, flags.TraceFile)
5138
if traceFile != nil {
5239
defer traceFile.Close()
5340
}
@@ -57,7 +44,7 @@ func main() {
5744
defer cleanup()
5845

5946
// <--- config --->
60-
config, err := config.GetConfig(*configFile)
47+
config, err := config.GetConfig(flags.ConfigFile)
6148
if err != nil {
6249
trace.Fatal().Err(err).Msg("error unmarshaling toml file")
6350
}
@@ -139,6 +126,14 @@ func main() {
139126
os.Exit(1)
140127
}
141128

129+
// Start logger
130+
if flags.EnableLooger {
131+
err = loggerHandler.Start()
132+
if err != nil {
133+
trace.Fatal().Err(err).Msg("starting logger")
134+
}
135+
}
136+
142137
// Open browser tabs
143138
openBrowserTabs(config)
144139

backend/cmd/orchestrator.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
adj_module "github.com/HyperloopUPV-H8/h9-backend/internal/adj"
1111
"github.com/HyperloopUPV-H8/h9-backend/internal/config"
12+
"github.com/HyperloopUPV-H8/h9-backend/internal/flags"
1213
"github.com/HyperloopUPV-H8/h9-backend/internal/pod_data"
1314
"github.com/HyperloopUPV-H8/h9-backend/pkg/abstraction"
1415
"github.com/HyperloopUPV-H8/h9-backend/pkg/logger"
@@ -21,7 +22,7 @@ import (
2122
// Handle version flag
2223
func handleVersionFlag() {
2324

24-
if *versionFlag {
25+
if flags.Version {
2526
versionFile := "VERSION.txt"
2627
versionData, err := os.ReadFile(versionFile)
2728
if err == nil {
@@ -43,8 +44,8 @@ func setupRuntimeCPU() func() {
4344
cleanup := func() {}
4445

4546
runtime.GOMAXPROCS(runtime.NumCPU())
46-
if *cpuprofile != "" {
47-
f, err := os.Create(*cpuprofile)
47+
if flags.CPUProfile != "" {
48+
f, err := os.Create(flags.CPUProfile)
4849
if err != nil {
4950
f.Close()
5051
trace.Fatal().Stack().Err(err).Msg("could not set up CPU profiling")
@@ -57,7 +58,7 @@ func setupRuntimeCPU() func() {
5758
f.Close()
5859
}
5960
}
60-
runtime.SetBlockProfileRate(*blockprofile)
61+
runtime.SetBlockProfileRate(flags.BlockProfile)
6162

6263
return cleanup
6364
}
@@ -134,9 +135,9 @@ func createLookupTables(
134135
createBoardToPackets(podData)
135136
}
136137

137-
func setUpLogger(config config.Config) (*logger.Logger, SubloggersMap) {
138+
func setUpLogger(config config.Config) (*logger.Logger, abstraction.SubloggersMap) {
138139

139-
var subloggers = SubloggersMap{
140+
var subloggers = abstraction.SubloggersMap{
140141
data_logger.Name: data_logger.NewLogger(),
141142
order_logger.Name: order_logger.NewLogger(),
142143
}

backend/cmd/setup_vehicle.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88
"time"
99

10+
"github.com/HyperloopUPV-H8/h9-backend/internal/flags"
1011
vehicle_models "github.com/HyperloopUPV-H8/h9-backend/internal/vehicle/models"
1112
h "github.com/HyperloopUPV-H8/h9-backend/pkg/http"
1213
"github.com/HyperloopUPV-H8/h9-backend/pkg/websocket"
@@ -33,7 +34,7 @@ import (
3334
trace "github.com/rs/zerolog/log"
3435
)
3536

36-
func configureBroker(subloggers SubloggersMap, loggerHandler *logger.Logger, idToBoard map[abstraction.PacketId]string, connections chan *websocket.Client) (*broker.Broker, func()) {
37+
func configureBroker(subloggers abstraction.SubloggersMap, loggerHandler *logger.Logger, idToBoard map[abstraction.PacketId]string, connections chan *websocket.Client) (*broker.Broker, func()) {
3738

3839
broker := broker.New(trace.Logger)
3940

@@ -135,7 +136,7 @@ func configureVehicle(
135136

136137
func configureSNTP(adj adj_module.ADJ) bool {
137138

138-
if *enableSNTP {
139+
if flags.EnableSNTP {
139140
sntpAddr, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", adj.Info.Addresses[BACKEND], adj.Info.Ports[SNTP]))
140141
if err != nil {
141142
fmt.Fprintf(os.Stderr, "error resolving sntp address: %v\n", err)

backend/go.mod

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ require (
77
github.com/google/gopacket v1.1.19
88
github.com/google/uuid v1.3.0
99
github.com/gorilla/websocket v1.5.0
10-
github.com/hashicorp/go-version v1.7.0
1110
github.com/jmaralo/sntp v0.0.0-20240116111937-45a0a3419272
1211
github.com/pelletier/go-toml/v2 v2.0.7
1312
github.com/pin/tftp/v3 v3.0.0
1413
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
1514
github.com/rs/zerolog v1.29.0
16-
github.com/stretchr/testify v1.9.0
1715
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
1816
)
1917

@@ -23,7 +21,6 @@ require (
2321
github.com/ProtonMail/go-crypto v1.0.0 // indirect
2422
github.com/cloudflare/circl v1.3.7 // indirect
2523
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
26-
github.com/davecgh/go-spew v1.1.1 // indirect
2724
github.com/emirpasic/gods v1.18.1 // indirect
2825
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
2926
github.com/go-git/go-billy/v5 v5.5.0 // indirect
@@ -34,7 +31,6 @@ require (
3431
github.com/mattn/go-isatty v0.0.17 // indirect
3532
github.com/pjbgf/sha1cd v0.3.0 // indirect
3633
github.com/pkg/errors v0.9.1 // indirect
37-
github.com/pmezard/go-difflib v1.0.0 // indirect
3834
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
3935
github.com/skeema/knownhosts v1.2.2 // indirect
4036
github.com/xanzy/ssh-agent v0.3.3 // indirect
@@ -43,10 +39,8 @@ require (
4339
golang.org/x/sys v0.31.0 // indirect
4440
golang.org/x/tools v0.13.0 // indirect
4541
gopkg.in/warnings.v0 v0.1.2 // indirect
46-
gopkg.in/yaml.v3 v3.0.1 // indirect
4742
)
4843

4944
require (
50-
github.com/fatih/color v1.15.0
5145
golang.org/x/net v0.38.0 // indirect
5246
)

backend/internal/config/config.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66
"strings"
77

8+
"github.com/HyperloopUPV-H8/h9-backend/internal/flags"
89
"github.com/pelletier/go-toml/v2"
910
trace "github.com/rs/zerolog/log"
1011
)
@@ -22,8 +23,13 @@ func GetConfig(path string) (Config, error) {
2223

2324
var config Config
2425

25-
// TODO: add strict mode (DisallowUnkownFields)
26-
decodeErr := toml.NewDecoder(reader).Decode(&config)
26+
decode := toml.NewDecoder(reader)
27+
28+
// Set whether to disallow unknown fields based on the flag
29+
if !flags.ConfigAllowUnknown {
30+
decode.DisallowUnknownFields()
31+
}
32+
decodeErr := decode.Decode(&config)
2733

2834
if decodeErr != nil {
2935

backend/internal/config/config_types.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ type Adj struct {
1414
Branch string `toml:"branch"`
1515
}
1616

17-
type Network struct {
18-
Manual bool `toml:"manual"`
19-
}
20-
2117
type Transport struct {
2218
PropagateFault bool `toml:"propagate_fault"`
2319
}
@@ -55,7 +51,6 @@ type Config struct {
5551
Vehicle vehicle.Config
5652
Server server.Config
5753
Adj Adj
58-
Network Network
5954
Transport Transport
6055
TFTP TFTP
6156
TCP TCP

backend/internal/flags/flags.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Package flags defines command-line flags for the backend application.
2+
package flags
3+
4+
import "flag"
5+
6+
var (
7+
8+
// ConfigFile specifies the path to the configuration file.
9+
ConfigFile string
10+
// ConfigAllowUnknown enables non-strict mode for configuration parsing.
11+
ConfigAllowUnknown bool
12+
13+
// TraceLevel sets the logging level for tracing.
14+
TraceLevel string
15+
// TraceFile specifies the file to write trace logs to.
16+
TraceFile string
17+
18+
// CPUProfile specifies the file to write CPU profiling data to.
19+
CPUProfile string
20+
// EnableSNTP enables a simple SNTP server on port 123.
21+
EnableSNTP bool
22+
// BlockProfile sets the number of block profiles to include.
23+
BlockProfile int
24+
// Version shows the backend version when set.
25+
Version bool
26+
// EnableLooger enables logging (note: likely a typo for "Logger").
27+
EnableLooger bool
28+
)
29+
30+
// Init sets up the command-line flags with their default values and descriptions.
31+
func Init() {
32+
flag.StringVar(&ConfigFile, "config", "config.toml", "path to configuration file")
33+
flag.BoolVar(&ConfigAllowUnknown, "config-allow-unknown", false, "allow unknown fields in configuration file")
34+
flag.StringVar(&TraceLevel, "trace", "info", "set the trace level (\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\")")
35+
flag.StringVar(&TraceFile, "log", "", "set the trace log file")
36+
flag.StringVar(&CPUProfile, "cpuprofile", "", "write cpu profile to file")
37+
flag.BoolVar(&EnableSNTP, "sntp", false, "enables a simple SNTP server on port 123")
38+
flag.IntVar(&BlockProfile, "blockprofile", 0, "number of block profiles to include")
39+
flag.BoolVar(&Version, "version", false, "Show the backend version")
40+
flag.BoolVar(&EnableLooger, "L", false, "enable logging")
41+
42+
flag.Parse()
43+
}

backend/pkg/abstraction/logger.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// Package abstraction provides interfaces for logging functionality.
12
package abstraction
23

34
// LoggerName is the name of the logger that manages a piece of data
@@ -23,3 +24,6 @@ type Logger interface {
2324
// PullRecord will retrieve a record from disk
2425
PullRecord(LoggerRequest) (LoggerRecord, error)
2526
}
27+
28+
// SubloggersMap is a map of logger names to their respective loggers
29+
type SubloggersMap map[LoggerName]Logger

0 commit comments

Comments
 (0)