Parser now almost complete
This commit is contained in:
parent
362779f7de
commit
9526f7da9d
@ -3,7 +3,7 @@ module git.fjla.uk/owlboard/mq-client
|
|||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.fjla.uk/owlboard/go-types v0.0.0-20230720100930-1cbfb1d074d2
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720203835-cf2b2d98e86a
|
||||||
github.com/go-stomp/stomp/v3 v3.0.5
|
github.com/go-stomp/stomp/v3 v3.0.5
|
||||||
go.mongodb.org/mongo-driver v1.12.0
|
go.mongodb.org/mongo-driver v1.12.0
|
||||||
go.uber.org/zap v1.24.0
|
go.uber.org/zap v1.24.0
|
||||||
|
14
src/go.sum
14
src/go.sum
@ -14,6 +14,20 @@ git.fjla.uk/owlboard/go-types v0.0.0-20230720095555-ad24002a6acc h1:7s+svu/FOU/q
|
|||||||
git.fjla.uk/owlboard/go-types v0.0.0-20230720095555-ad24002a6acc/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720095555-ad24002a6acc/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
git.fjla.uk/owlboard/go-types v0.0.0-20230720100930-1cbfb1d074d2 h1:FOLnHCAL/2fnjC/TLpQkt4WSMzijcDrtyf0YdiyZIbo=
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720100930-1cbfb1d074d2 h1:FOLnHCAL/2fnjC/TLpQkt4WSMzijcDrtyf0YdiyZIbo=
|
||||||
git.fjla.uk/owlboard/go-types v0.0.0-20230720100930-1cbfb1d074d2/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720100930-1cbfb1d074d2/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720185107-816f023a60b5 h1:oNEoHfifZc/F/z+4T8wJ8Ky68vzt/OxL7E0iFhLoh9s=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720185107-816f023a60b5/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720190235-ff722287f36d h1:NIVo66/uvUXV5lvfdLHLyFRXMGXk/iG+IemDU1Iu5JM=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720190235-ff722287f36d/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720194730-1085e35a688e h1:KhnFsS2lumpPwhgVQKTGWXiIOd2KCh0phVSH4/JATAE=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720194730-1085e35a688e/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720195742-5fda10022220 h1:XsxDYTm5s2O9WQPDtl7LvvtlrKnmaKCZCvZpXl6xaDs=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720195742-5fda10022220/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720201551-a582c3495e07 h1:jGnHCl5UZi9y65Uqy2nW65UD4zJEBTWB9+10qHlbCTg=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720201551-a582c3495e07/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720202112-4df6f0456ea4 h1:HeHukiRnDzXNDp/NaqI2n9WWChoglx1yRS620rgvj6o=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720202112-4df6f0456ea4/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720203835-cf2b2d98e86a h1:JvDUM2sIawyyLKhIOgciAj0PpVWziYlXb+RA2IgphMg=
|
||||||
|
git.fjla.uk/owlboard/go-types v0.0.0-20230720203835-cf2b2d98e86a/go.mod h1:kG+BX9UF+yJaAVnln/QSKlTdrtKRRReezMeSk1ZLMzY=
|
||||||
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.fjla.uk/owlboard/go-types/pkg/database"
|
"git.fjla.uk/owlboard/go-types/pkg/database"
|
||||||
@ -14,25 +15,29 @@ import (
|
|||||||
|
|
||||||
// Unmarshals the JSON data and runs it through the formatData() function and returns the data in a DB ready Struct
|
// Unmarshals the JSON data and runs it through the formatData() function and returns the data in a DB ready Struct
|
||||||
func unmarshalData(jsonData string) database.Service {
|
func unmarshalData(jsonData string) database.Service {
|
||||||
log.Msg.Debug("Unmarshalling message body")
|
var schedule upstreamApi.MsgData
|
||||||
fmt.Println(jsonData)
|
err := json.Unmarshal([]byte(jsonData), &schedule)
|
||||||
log.Msg.Debug("Converting to byte array")
|
|
||||||
jsonDataBytes := []byte(jsonData)
|
|
||||||
var schedule upstreamApi.VstpMsg
|
|
||||||
err := json.Unmarshal(jsonDataBytes, &schedule)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Msg.Error("Unable to unmarshal message body: " + err.Error())
|
log.Msg.Error("Unable to unmarshal message body: " + err.Error())
|
||||||
//return err
|
//return err
|
||||||
}
|
}
|
||||||
log.Msg.Debug("Unmarshalling Complete")
|
log.Msg.Debug("Unmarshalling Complete")
|
||||||
fmt.Println(schedule)
|
|
||||||
saveToFile(schedule, "unmarshalled")
|
if schedule.Data.CIFMsg.ScheduleSegment == nil {
|
||||||
return formatData(schedule.CIFMsg)
|
log.Msg.Warn("ScheduleSegment is nil")
|
||||||
|
return database.Service{}
|
||||||
|
} else if len(schedule.Data.CIFMsg.ScheduleSegment) == 0 {
|
||||||
|
log.Msg.Warn("ScheduleSegment is empty")
|
||||||
|
return database.Service{}
|
||||||
|
}
|
||||||
|
saveToFile(schedule, "unmarshalled") // For Debugging Only
|
||||||
|
return formatData(&schedule.Data.CIFMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transforms the upstreamApi.Schedule type into a database.Service type
|
// Transforms the upstreamApi.Schedule type into a database.Service type
|
||||||
func formatData(dataInput *upstreamApi.Schedule) database.Service {
|
func formatData(dataInput *upstreamApi.Schedule) database.Service {
|
||||||
log.Msg.Debug("ScheduleSegment length: " + fmt.Sprint(len(dataInput.ScheduleSegment)))
|
log.Msg.Debug("ScheduleSegment length: " + fmt.Sprint(len(dataInput.ScheduleSegment)))
|
||||||
|
log.Msg.Debug("Printing dataInput to console:")
|
||||||
service := database.Service{
|
service := database.Service{
|
||||||
TransactionType: dataInput.TransactionType,
|
TransactionType: dataInput.TransactionType,
|
||||||
StpIndicator: dataInput.CIFSTPIndicator,
|
StpIndicator: dataInput.CIFSTPIndicator,
|
||||||
@ -60,8 +65,8 @@ func parseSpeed(CIFSpeed string) int32 {
|
|||||||
|
|
||||||
speed, err := strconv.ParseInt(actualSpeed, 10, 32)
|
speed, err := strconv.ParseInt(actualSpeed, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Msg.Warn("Unable to parse speed: " + CIFSpeed + " " + actualSpeed)
|
log.Msg.Warn("Unable to parse speed: " + CIFSpeed + ", returning nil")
|
||||||
return 0
|
return int32(0)
|
||||||
}
|
}
|
||||||
return int32(speed)
|
return int32(speed)
|
||||||
}
|
}
|
||||||
@ -74,7 +79,6 @@ func parseDate(dateString string, end bool) time.Time {
|
|||||||
log.Msg.Error("Unable to parse date: " + dateString)
|
log.Msg.Error("Unable to parse date: " + dateString)
|
||||||
return time.Time{}
|
return time.Time{}
|
||||||
}
|
}
|
||||||
log.Msg.Debug("Parsed date: " + date.String())
|
|
||||||
|
|
||||||
var hour, minute, second, nanosecond int
|
var hour, minute, second, nanosecond int
|
||||||
location := time.UTC
|
location := time.UTC
|
||||||
@ -85,6 +89,7 @@ func parseDate(dateString string, end bool) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dateWithTime := time.Date(date.Year(), date.Month(), date.Day(), hour, minute, second, nanosecond, location)
|
dateWithTime := time.Date(date.Year(), date.Month(), date.Day(), hour, minute, second, nanosecond, location)
|
||||||
|
log.Msg.Debug("Parsed date: " + dateWithTime.String())
|
||||||
return dateWithTime
|
return dateWithTime
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,12 +112,12 @@ func parseStops(inputStops []upstreamApi.ScheduleLocation) []database.Stop {
|
|||||||
|
|
||||||
for _, loc := range inputStops {
|
for _, loc := range inputStops {
|
||||||
stop := database.Stop{
|
stop := database.Stop{
|
||||||
PublicDeparture: getStringPointer(loc.PublicDepartureTime),
|
PublicDeparture: parseTimeStrings(loc.PublicDepartureTime),
|
||||||
WttDeparture: getStringPointer(loc.ScheduledDepartureTime),
|
WttDeparture: parseTimeStrings(loc.ScheduledDepartureTime),
|
||||||
PublicArrival: getStringPointer(loc.PublicArrivalTime),
|
PublicArrival: parseTimeStrings(loc.PublicArrivalTime),
|
||||||
WttArrival: getStringPointer(loc.ScheduledArrivalTime),
|
WttArrival: parseTimeStrings(loc.ScheduledArrivalTime),
|
||||||
IsPublic: loc.PublicDepartureTime != "" || loc.PublicArrivalTime != "",
|
IsPublic: strings.TrimSpace(loc.PublicDepartureTime) != "" || strings.TrimSpace(loc.PublicArrivalTime) != "",
|
||||||
Tiploc: loc.Location.Tiploc.TiplocID,
|
Tiploc: loc.Tiploc.Tiploc.TiplocId,
|
||||||
}
|
}
|
||||||
|
|
||||||
stops = append(stops, stop)
|
stops = append(stops, stop)
|
||||||
@ -121,9 +126,15 @@ func parseStops(inputStops []upstreamApi.ScheduleLocation) []database.Stop {
|
|||||||
return stops
|
return stops
|
||||||
}
|
}
|
||||||
|
|
||||||
func getStringPointer(s string) *string {
|
func parseTimeStrings(t string) string {
|
||||||
if s == "" {
|
if t == "" {
|
||||||
return nil
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
strippedT := strings.TrimSpace(t)
|
||||||
|
if strippedT == "" {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return strippedT[:4]
|
||||||
}
|
}
|
||||||
return &s
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user