Skip to content

Commit aba92cf

Browse files
committed
Merge commit '972a0c84fd11ccc83b7f86a2dae84dc499b5cc2d' into backend/client-broker
2 parents cd59915 + 972a0c8 commit aba92cf

9 files changed

Lines changed: 330 additions & 95 deletions

File tree

backend/cmd/main.go

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,14 @@ func main() {
191191
}
192192

193193
err = loggerHandler.PushRecord(&data_logger.Record{
194-
Packet: p,
194+
Packet: p,
195+
From: packet.From,
196+
To: packet.To,
197+
Timestamp: packet.Timestamp,
195198
})
196199

197200
if err != nil {
198-
fmt.Println("Error pushing record to logger: ", err)
201+
fmt.Println("Error pushing record to data logger: ", err)
199202
}
200203

201204
case *info_packet.Packet:
@@ -205,11 +208,14 @@ func main() {
205208
}
206209

207210
err = loggerHandler.PushRecord(&messages_logger.Record{
208-
Packet: p,
211+
Packet: p,
212+
From: packet.From,
213+
To: packet.To,
214+
Timestamp: packet.Timestamp,
209215
})
210216

211217
if err != nil {
212-
fmt.Println("Error pushing record to logger: ", err)
218+
fmt.Println("Error pushing record to info logger: ", err)
213219
}
214220

215221
case *protection.Packet:
@@ -218,17 +224,20 @@ func main() {
218224
fmt.Println(err)
219225
}
220226

221-
packet := info_packet.NewPacket(p.Id())
222-
packet.BoardId = p.BoardId
223-
packet.Timestamp = p.Timestamp
224-
packet.Msg = info_packet.InfoData(fmt.Sprint(p))
227+
newPacket := info_packet.NewPacket(p.Id())
228+
newPacket.BoardId = p.BoardId
229+
newPacket.Timestamp = p.Timestamp
230+
newPacket.Msg = info_packet.InfoData(fmt.Sprint(p))
225231

226232
err = loggerHandler.PushRecord(&messages_logger.Record{
227-
Packet: packet,
233+
Packet: newPacket,
234+
From: packet.From,
235+
To: packet.To,
236+
Timestamp: packet.Timestamp,
228237
})
229238

230239
if err != nil {
231-
fmt.Println("Error pushing record to logger: ", err)
240+
fmt.Println("Error pushing record to info logger: ", err)
232241
}
233242

234243
case *blcu_packet.Ack:
@@ -238,11 +247,14 @@ func main() {
238247

239248
case *state.Space:
240249
err = loggerHandler.PushRecord(&state_logger.Record{
241-
Packet: p,
250+
Packet: p,
251+
From: packet.From,
252+
To: packet.To,
253+
Timestamp: packet.Timestamp,
242254
})
243255

244256
if err != nil {
245-
fmt.Println("Error pushing record to logger: ", err)
257+
fmt.Println("Error pushing record to state logger: ", err)
246258
}
247259

248260
case *order.Add:
@@ -281,7 +293,10 @@ func main() {
281293
}
282294

283295
err = loggerHandler.PushRecord(&order_logger.Record{
284-
Packet: packet,
296+
Packet: packet,
297+
From: "backend",
298+
To: idToBoard[uint16(packet.Id())],
299+
Timestamp: packet.Timestamp(),
285300
})
286301

287302
if err != nil {

backend/pkg/logger/data/logger.go

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"time"
1313

1414
"github.com/HyperloopUPV-H8/h9-backend/pkg/abstraction"
15-
"github.com/HyperloopUPV-H8/h9-backend/pkg/logger"
15+
loggerHandler "github.com/HyperloopUPV-H8/h9-backend/pkg/logger"
1616
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/data"
1717
)
1818

@@ -31,12 +31,13 @@ type Logger struct {
3131

3232
// Record is a struct that implements the abstraction.LoggerRecord interface
3333
type Record struct {
34-
Packet *data.Packet
34+
Packet *data.Packet
35+
From string
36+
To string
37+
Timestamp time.Time
3538
}
3639

37-
func (record *Record) Name() abstraction.LoggerName {
38-
return Name
39-
}
40+
func (*Record) Name() abstraction.LoggerName { return Name }
4041

4142
func NewLogger() *Logger {
4243
logger := &Logger{
@@ -66,15 +67,15 @@ type numeric interface {
6667

6768
func (sublogger *Logger) PushRecord(record abstraction.LoggerRecord) error {
6869
if !sublogger.running.Load() {
69-
return &logger.ErrLoggerNotRunning{
70+
return loggerHandler.ErrLoggerNotRunning{
7071
Name: Name,
7172
Timestamp: time.Now(),
7273
}
7374
}
7475

7576
dataRecord, ok := record.(*Record)
7677
if !ok {
77-
return &logger.ErrWrongRecordType{
78+
return loggerHandler.ErrWrongRecordType{
7879
Name: Name,
7980
Timestamp: time.Now(),
8081
Expected: &Record{},
@@ -107,12 +108,23 @@ func (sublogger *Logger) PushRecord(record abstraction.LoggerRecord) error {
107108

108109
file, ok := sublogger.valueFileSlice[valueName]
109110
if !ok {
110-
filename := path.Join("logger/data", fmt.Sprintf("data_%s", logger.Timestamp.Format(time.RFC3339)), fmt.Sprintf("%s.csv", valueName))
111-
os.MkdirAll(path.Dir(filename), os.ModePerm)
111+
filename := path.Join(
112+
"loggerHandler/data",
113+
fmt.Sprintf("data_%s", loggerHandler.Timestamp.Format(time.RFC3339)),
114+
fmt.Sprintf("%s.csv", valueName),
115+
)
116+
err := os.MkdirAll(path.Dir(filename), os.ModePerm)
117+
if err != nil {
118+
return loggerHandler.ErrCreatingAllDir{
119+
Name: Name,
120+
Timestamp: time.Now(),
121+
Path: filename,
122+
}
123+
}
112124

113125
f, err := os.Create(path.Join(filename))
114126
if err != nil {
115-
return &logger.ErrCreatingFile{
127+
return loggerHandler.ErrCreatingFile{
116128
Name: Name,
117129
Timestamp: time.Now(),
118130
Inner: err,
@@ -121,18 +133,28 @@ func (sublogger *Logger) PushRecord(record abstraction.LoggerRecord) error {
121133
sublogger.valueFileSlice[valueName] = f
122134
file = f
123135
}
124-
writer := csv.NewWriter(file) // TODO! use map/slice of writers
125-
defer writer.Flush()
126-
127-
err := writer.Write([]string{timestamp.Format(time.RFC3339), val})
136+
writer := csv.NewWriter(file) // TODO! use map/slice of writer
137+
138+
err := writer.Write([]string{
139+
timestamp.Format(time.RFC3339),
140+
val,
141+
dataRecord.From,
142+
dataRecord.To,
143+
dataRecord.Timestamp.Format(time.RFC3339),
144+
})
128145
if err != nil {
129-
writerErr = err
146+
writerErr = loggerHandler.ErrWritingFile{
147+
Name: Name,
148+
Timestamp: time.Now(),
149+
Inner: err,
150+
}
130151
}
152+
writer.Flush()
131153
}
132154
return writerErr
133155
}
134156

135-
func (sublogger *Logger) PullRecord(request abstraction.LoggerRequest) (abstraction.LoggerRecord, error) {
157+
func (sublogger *Logger) PullRecord(abstraction.LoggerRequest) (abstraction.LoggerRecord, error) {
136158
panic("TODO!")
137159
}
138160

@@ -142,10 +164,19 @@ func (sublogger *Logger) Stop() error {
142164
return nil
143165
}
144166

167+
closeErr := error(nil)
145168
for _, file := range sublogger.valueFileSlice {
146-
file.Close()
169+
err := file.Close()
170+
if err != nil {
171+
closeErr = loggerHandler.ErrClosingFile{
172+
Name: Name,
173+
Timestamp: time.Now(),
174+
}
175+
176+
fmt.Println(closeErr.Error())
177+
}
147178
}
148179

149180
fmt.Println("Logger stopped")
150-
return nil
181+
return closeErr
151182
}

backend/pkg/logger/errors.go

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import (
77
"github.com/HyperloopUPV-H8/h9-backend/pkg/abstraction"
88
)
99

10+
// TODO! Check methods using value and point receivers for the same function
11+
1012
type ErrLoggerNotFound struct {
1113
Name abstraction.LoggerName
1214
}
1315

1416
func (err ErrLoggerNotFound) Error() string {
15-
return fmt.Sprintf("Logger %s not found", err.Name)
17+
return fmt.Sprintf("Error %s logger not found", err.Name)
1618
}
1719

1820
type ErrCreatingFile struct {
@@ -21,7 +23,7 @@ type ErrCreatingFile struct {
2123
Inner error
2224
}
2325

24-
func (err *ErrCreatingFile) Error() string {
26+
func (err ErrCreatingFile) Error() string {
2527
return fmt.Sprintf("Error creating file for %s logger at %s", err.Name, err.Timestamp.Format(time.RFC3339))
2628
}
2729

@@ -34,8 +36,8 @@ type ErrLoggerNotRunning struct {
3436
Timestamp time.Time
3537
}
3638

37-
func (err *ErrLoggerNotRunning) Error() string {
38-
return fmt.Sprintf("Logger %s not running at %s", err.Name, err.Timestamp.Format(time.RFC3339))
39+
func (err ErrLoggerNotRunning) Error() string {
40+
return fmt.Sprintf("Error %s logger not running at %s", err.Name, err.Timestamp.Format(time.RFC3339))
3941
}
4042

4143
type ErrWrongRecordType struct {
@@ -45,14 +47,67 @@ type ErrWrongRecordType struct {
4547
Received abstraction.LoggerRecord
4648
}
4749

48-
func (err *ErrWrongRecordType) Error() string {
49-
return fmt.Sprintf("Wrong record type for logger %s at %s, expected %T, got %T", err.Name, err.Timestamp.Format(time.RFC3339), err.Expected.Name(), err.Received.Name())
50+
func (err ErrWrongRecordType) Error() string {
51+
return fmt.Sprintf("Error wrong record type for %s logger at %s, expected %T, got %T", err.Name, err.Timestamp.Format(time.RFC3339), err.Expected.Name(), err.Received.Name())
5052
}
5153

52-
type ErrParsingLoggerMap struct {
53-
Name abstraction.LoggerName
54+
type ErrStartingLogger struct {
55+
Name abstraction.LoggerName
56+
Timestamp time.Time
57+
}
58+
59+
func (err ErrStartingLogger) Error() string {
60+
return fmt.Sprintf("Error starting %s logger at %s", err.Name, err.Timestamp.Format(time.RFC3339))
61+
}
62+
63+
type ErrStoppingLogger struct {
64+
Name abstraction.LoggerName
65+
Timestamp time.Time
66+
}
67+
68+
func (err ErrStoppingLogger) Error() string {
69+
return fmt.Sprintf("Error stopping %s logger at %s", err.Name, err.Timestamp.Format(time.RFC3339))
70+
}
71+
72+
type ErrPushingRecord struct {
73+
Name abstraction.LoggerName
74+
Timestamp time.Time
75+
Inner error
76+
}
77+
78+
func (err ErrPushingRecord) Error() string {
79+
return fmt.Sprintf("Error pushing reord in %s logger at %s", err.Name, err.Timestamp.Format(time.RFC3339))
80+
}
81+
82+
func (err *ErrPushingRecord) Unwrap() error { return err.Inner }
83+
84+
type ErrWritingFile struct {
85+
Name abstraction.LoggerName
86+
Timestamp time.Time
87+
Inner error
88+
}
89+
90+
func (err ErrWritingFile) Error() string {
91+
return fmt.Sprintf("Error writing to file in %s logger at %s", err.Name, err.Timestamp.Format(time.RFC3339))
92+
}
93+
94+
func (err *ErrWritingFile) Unwrap() error { return err.Inner }
95+
96+
type ErrClosingFile struct {
97+
Name abstraction.LoggerName
98+
Timestamp time.Time
99+
}
100+
101+
func (err ErrClosingFile) Error() string {
102+
return fmt.Sprintf("Error closing file in %s logger at %s", err.Name, err.Timestamp.Format(time.RFC3339))
103+
}
104+
105+
type ErrCreatingAllDir struct {
106+
Name abstraction.LoggerName
107+
Timestamp time.Time
108+
Path string
54109
}
55110

56-
func (err ErrParsingLoggerMap) Error() string {
57-
return fmt.Sprintf("Error parsing logger map for logger %s", err.Name)
111+
func (err ErrCreatingAllDir) Error() string {
112+
return fmt.Sprintf("Error creating the directories for path %s in %s logger at %s", err.Path, err.Name, err.Timestamp.Format(time.RFC3339))
58113
}

0 commit comments

Comments
 (0)