Skip to content

Commit af3fe89

Browse files
authored
Merge pull request #178 from HyperloopUPV-H8/backend/v2-beta
Backend/v2 beta
2 parents ba8f0cd + 144c3a6 commit af3fe89

6 files changed

Lines changed: 187 additions & 174 deletions

File tree

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
build
22
profiles
33

4-
# GOOGLE API KEY
5-
secret.json
4+
# ADJ
5+
JSON_ADE
66

77
# MacOS Files
88
.DS_Store

backend/cmd/main.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -256,16 +256,11 @@ func main() {
256256
}
257257
}
258258

259-
boardIps := make([]net.IP, 0)
260-
for boardName, _ := range adj.Info.BoardIds {
259+
boardIps := make([]net.IP, 0, len(adj.Info.BoardIds))
260+
for boardName := range adj.Info.BoardIds {
261261
boardIps = append(boardIps, net.ParseIP(adj.Info.Addresses[boardName]))
262262
}
263263

264-
boardIpsStr := make([]string, 0)
265-
for boardName, _ := range adj.Info.BoardIds {
266-
boardIpsStr = append(boardIpsStr, adj.Info.Addresses[boardName])
267-
}
268-
269264
filter := getFilter(boardIps, net.ParseIP(adj.Info.Addresses[BACKEND]), adj.Info.Ports[UDP])
270265
trace.Warn().Str("filter", filter).Msg("filter")
271266
err = source.SetBPFFilter(filter)

backend/internal/adj/adj.go

Lines changed: 117 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,70 @@ package adj
22

33
import (
44
"encoding/json"
5-
"github.com/go-git/go-git/v5"
65
"os"
6+
"path"
7+
8+
"github.com/HyperloopUPV-H8/h9-backend/internal/utils"
9+
"github.com/go-git/go-git/v5"
710
)
811

912
const (
1013
RepoUrl = "https://github.com/HyperloopUPV-H8/JSON_ADE.git" // URL of the ADJ repository
1114
RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned
1215
)
1316

14-
func NewADJ() (*ADJ, error) {
17+
func NewADJ() (ADJ, error) {
1518
infoRaw, boardsRaw, err := downloadADJ()
1619
if err != nil {
17-
return nil, err
20+
return ADJ{}, err
21+
}
22+
23+
var infoJSON InfoJSON
24+
if err := json.Unmarshal(infoRaw, &infoJSON); err != nil {
25+
println("Info JSON unmarshal error")
26+
return ADJ{}, err
27+
}
28+
29+
var info Info = Info{
30+
Ports: infoJSON.Ports,
31+
MessageIds: infoJSON.MessageIds,
32+
Units: make(map[string]utils.Operations),
33+
}
34+
for key, value := range infoJSON.Units {
35+
info.Units[key], err = utils.NewOperations(value)
36+
if err != nil {
37+
return ADJ{}, err
38+
}
1839
}
1940

20-
var info Info
21-
if err := json.Unmarshal(infoRaw, &info); err != nil {
22-
return nil, err
41+
type BoardList struct {
42+
Boards map[string]string `json:"boards"`
2343
}
2444

25-
var boardsList map[string]string
45+
var boardsList BoardList
2646
if err := json.Unmarshal(boardsRaw, &boardsList); err != nil {
27-
return nil, err
47+
return ADJ{}, err
48+
}
49+
50+
boards, err := getBoards(boardsList.Boards)
51+
if err != nil {
52+
return ADJ{}, err
2853
}
2954

30-
boards, err := getBoards(info, boardsList)
55+
info.BoardIds, err = getBoardIds(boardsList.Boards)
56+
if err != nil {
57+
return ADJ{}, err
58+
}
3159

32-
info.BoardIds, err = getBoardIds(boardsList)
60+
info.Addresses, err = getAddresses(boards)
61+
if err != nil {
62+
return ADJ{}, err
63+
}
64+
for target, address := range infoJSON.Addresses {
65+
info.Addresses[target] = address
66+
}
3367

34-
adj := &ADJ{
68+
adj := ADJ{
3569
Info: info,
3670
Boards: boards,
3771
}
@@ -71,14 +105,11 @@ func checkRepo() bool {
71105
return true
72106
}
73107

74-
func getBoards(info Info, boardsList map[string]string) (map[string]Board, error) {
75-
var boards map[string]Board
108+
func getBoards(boardsList map[string]string) (map[string]Board, error) {
109+
boards := make(map[string]Board, len(boardsList))
76110
for boardName, boardPath := range boardsList {
77-
if _, err := os.Stat(boardPath); os.IsNotExist(err) {
78-
return nil, err
79-
}
80-
81-
boardRaw, err := os.ReadFile(boardPath)
111+
fullPath := path.Join(RepoPath, boardPath)
112+
boardRaw, err := os.ReadFile(fullPath)
82113
if err != nil {
83114
return nil, err
84115
}
@@ -88,10 +119,22 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
88119
return nil, err
89120
}
90121

91-
var board Board
92-
board.Name = boardName
93-
board.IP = boardJSON.IP
122+
measPathsFr := make([]string, 0)
123+
for _, measPath := range boardJSON.MeasurementsPaths {
124+
measPathsFr = append(measPathsFr, path.Join(RepoPath, "boards", boardName, measPath))
125+
}
126+
boardJSON.MeasurementsPaths = measPathsFr
127+
128+
packetPathsFr := make([]string, 0)
129+
for _, packetPath := range boardJSON.PacketsPaths {
130+
packetPathsFr = append(packetPathsFr, path.Join(RepoPath, "boards", boardName, packetPath))
131+
}
132+
boardJSON.PacketsPaths = packetPathsFr
94133

134+
board := Board{
135+
Name: boardName,
136+
IP: boardJSON.IP,
137+
}
95138
board.Packets, err = getBoardPackets(boardJSON.PacketsPaths)
96139
if err != nil {
97140
return nil, err
@@ -101,6 +144,12 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
101144
if err != nil {
102145
return nil, err
103146
}
147+
board.LookUpMeasurements = make(map[string]Measurement, len(board.Measurements))
148+
149+
for _, measurement := range board.Measurements {
150+
board.LookUpMeasurements[measurement.Id] = measurement
151+
}
152+
board.Structures = getBoardStructures(board)
104153

105154
boards[boardName] = board
106155
}
@@ -109,7 +158,7 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
109158
}
110159

111160
func getBoardPackets(packetsPaths []string) ([]Packet, error) {
112-
var packets []Packet
161+
packets := make([]Packet, 0)
113162
for _, packetPath := range packetsPaths {
114163
if _, err := os.Stat(packetPath); os.IsNotExist(err) {
115164
continue
@@ -120,19 +169,26 @@ func getBoardPackets(packetsPaths []string) ([]Packet, error) {
120169
return nil, err
121170
}
122171

123-
var packet Packet
124-
if err = json.Unmarshal(packetRaw, &packet); err != nil {
125-
return nil, err
172+
// Magic happens here
173+
type PacketJSON struct {
174+
Packet []Packet `json:"packets"`
126175
}
127176

128-
packets = append(packets, packet)
177+
packetsJSON := PacketJSON{}
178+
if err = json.Unmarshal(packetRaw, &packetsJSON); err != nil {
179+
return nil, err
180+
}
181+
for _, packetTMP := range packetsJSON.Packet {
182+
packets = append(packets, packetTMP)
183+
}
129184
}
130185

131186
return packets, nil
132187
}
133188

134189
func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) {
135-
var measurements []Measurement
190+
measurements := make([]Measurement, 0)
191+
136192
for _, measurementPath := range measurementsPaths {
137193
if _, err := os.Stat(measurementPath); os.IsNotExist(err) {
138194
continue
@@ -143,25 +199,28 @@ func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) {
143199
return nil, err
144200
}
145201

146-
var measurement Measurement
147-
if err = json.Unmarshal(measurementRaw, &measurement); err != nil {
148-
return nil, err
202+
// Absolutely doing tricks on it AGAIN - @msanlli
203+
type MeasurementJSON struct {
204+
Measurements []Measurement `json:"measurements"`
149205
}
150206

151-
measurements = append(measurements, measurement)
207+
measurementsJSON := MeasurementJSON{}
208+
if err = json.Unmarshal(measurementRaw, &measurementsJSON); err != nil {
209+
return nil, err
210+
}
211+
for _, measurementTMP := range measurementsJSON.Measurements {
212+
measurements = append(measurements, measurementTMP)
213+
}
152214
}
153215

154216
return measurements, nil
155217
}
156218

157219
func getBoardIds(boards map[string]string) (map[string]uint16, error) {
158-
var boardIds map[string]uint16
220+
boardIds := make(map[string]uint16, len(boards))
159221
for boardName, boardPath := range boards {
160-
if _, err := os.Stat(boardPath); os.IsNotExist(err) {
161-
return nil, err
162-
}
163-
164-
boardRaw, err := os.ReadFile(boardPath)
222+
fullPath := path.Join(RepoPath, boardPath)
223+
boardRaw, err := os.ReadFile(fullPath)
165224
if err != nil {
166225
return nil, err
167226
}
@@ -176,3 +235,24 @@ func getBoardIds(boards map[string]string) (map[string]uint16, error) {
176235

177236
return boardIds, nil
178237
}
238+
239+
func getBoardStructures(board Board) []Structure {
240+
structures := make([]Structure, len(board.Packets))
241+
for i, packet := range board.Packets {
242+
structures[i] = Structure{
243+
Packet: packet,
244+
Measurements: board.Measurements,
245+
}
246+
}
247+
248+
return structures
249+
}
250+
251+
func getAddresses(boards map[string]Board) (map[string]string, error) {
252+
addresses := make(map[string]string, len(boards))
253+
for boardName, board := range boards {
254+
addresses[boardName] = board.IP
255+
}
256+
257+
return addresses, nil
258+
}

backend/internal/adj/models.go

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ type ADJ struct {
77
Boards map[string]Board
88
}
99

10-
type Info struct {
11-
Ports map[string]uint16 `json:"ports"`
12-
Addresses map[string]string `json:"addresses"`
13-
Units map[string]utils.Operations `json:"units"`
14-
MessageIds map[string]uint16 `json:"message_ids"`
10+
type InfoJSON struct {
11+
Ports map[string]uint16 `json:"ports"`
12+
Addresses map[string]string
13+
Units map[string]string `json:"units"`
14+
MessageIds map[string]uint16 `json:"message_ids"`
1515
BoardIds map[string]uint16
1616
}
1717

18-
type Board struct {
19-
Name string
20-
IP string
21-
Packets []Packet
22-
Measurements []Measurement
23-
Structures []Structure
18+
type Info struct {
19+
Ports map[string]uint16
20+
Addresses map[string]string
21+
Units map[string]utils.Operations
22+
MessageIds map[string]uint16
23+
BoardIds map[string]uint16
2424
}
2525

2626
type BoardJSON struct {
@@ -30,23 +30,34 @@ type BoardJSON struct {
3030
PacketsPaths []string `json:"packets"`
3131
}
3232

33+
type Board struct {
34+
Name string
35+
IP string
36+
Packets []Packet
37+
Measurements []Measurement
38+
Structures []Structure
39+
LookUpMeasurements map[string]Measurement
40+
}
41+
3342
type Packet struct {
34-
Id string
35-
Name string
36-
Type string
43+
Id string `json:"id"`
44+
Name string `json:"name"`
45+
Type string `json:"type"`
46+
Variables []Measurement `json:"variables"`
3747
}
3848

3949
type Measurement struct {
40-
Id string
41-
Name string
42-
Type string
43-
PodUnits string
44-
DisplayUnits string
45-
SafeRange string
46-
WarningRange string
50+
Id string `json:"id"`
51+
Name string `json:"name"`
52+
Type string `json:"type"`
53+
PodUnits string `json:"podUnits"`
54+
DisplayUnits string `json:"displayUnits"`
55+
SafeRange []*float64 `json:"safeRange"`
56+
WarningRange []*float64 `json:"warningRange"`
57+
EnumValues []string `json:"enumValues"`
4758
}
4859

4960
type Structure struct {
50-
Packet string
51-
Measurements []string
61+
Packet Packet
62+
Measurements []Measurement
5263
}

0 commit comments

Comments
 (0)