diff --git a/broker/ntgvision.go b/broker/ntgvision.go index ac10a7d..cf8429d 100644 --- a/broker/ntgvision.go +++ b/broker/ntgvision.go @@ -33,9 +33,70 @@ type ntgVisionJob struct { Weight int `json:"weight"` Equipment string `json:"equip"` Temp string `json:"temp"` + jobinfo ntgVisionJobInfo } -func (ntgJob ntgVisionJob) Job() Job { +type ntgVisionJobInfo struct { + StopsInfo []struct { + StopHours string `json:"stopHours"` + AppointmentTime string `json:"appointmentTime"` + Instructions string `json:"instructions"` + IsDropTrailer bool `json:"isDropTrailer"` + } `json:"stopinfos"` + PayUpTo float32 `json:"payUpTo"` + LoadState string `json:"loadStatus"` + CanBidNow bool `json:"canBidNow"` +} + +func (ntgJob *ntgVisionJob) JobInfo() (ntgVisionJobInfo, error) { + if fmt.Sprint(ntgJob.jobinfo) != fmt.Sprint(ntgVisionJobInfo{}) { + return ntgJob.jobinfo, nil + } + ji, err := ntgJob.jobInfo() + if err == ErrNoAuth { + if err := NewNTGVision().refreshAuth(); err != nil { + return ntgVisionJobInfo{}, err + } + ji, err = ntgJob.jobInfo() + } + ntgJob.jobinfo = ji + return ji, err +} + +func (ntgJob *ntgVisionJob) jobInfo() (ntgVisionJobInfo, error) { + request, err := http.NewRequest(http.MethodGet, fmt.Sprintf(`https://ntgvision.com/api/v1/load/LoadDetails?loadId=%v`, ntgJob.ID), nil) + if err != nil { + return ntgVisionJobInfo{}, err + } + setNTGHeaders(request) + request.Header.Set("Authorization", "Bearer "+config.Get().Brokers.NTG.Token) + resp, err := do(request) + if err != nil { + return ntgVisionJobInfo{}, err + } + defer resp.Body.Close() + b, _ := ioutil.ReadAll(resp.Body) + log.Printf("fetch ntg job info %+v: %d: %s", request, resp.StatusCode, b) + if resp.StatusCode > 400 && resp.StatusCode < 500 && resp.StatusCode != 404 && resp.StatusCode != 410 { + return ntgVisionJobInfo{}, ErrNoAuth + } + var result ntgVisionJobInfo + err = json.Unmarshal(b, &result) + return result, err +} + +func (ntgJob *ntgVisionJob) Job(info ...bool) Job { + if len(info) == 0 || !info[0] { + return ntgJob.job(ntgVisionJobInfo{}) + } + jobInfo, err := ntgJob.JobInfo() + if err != nil { + log.Printf("failed to get jobinfo: %v", err) + } + return ntgJob.job(jobInfo) +} + +func (ntgJob *ntgVisionJob) job(jobInfo ntgVisionJobInfo) Job { pickup, _ := time.ParseInLocation("01/02/06", ntgJob.PickupDate, time.Local) dropoff, _ := time.ParseInLocation("01/02/06", ntgJob.DropoffDate, time.Local) return Job{ @@ -53,7 +114,7 @@ func (ntgJob ntgVisionJob) Job() Job { }, Miles: ntgJob.Miles, Weight: ntgJob.Weight, - Meta: fmt.Sprintf("equipment:%s", ntgJob.Equipment), + Meta: fmt.Sprintf("equipment:%s, secrets:%+v", ntgJob.Equipment, jobInfo), } } @@ -87,7 +148,7 @@ func (ntg NTGVision) Search(states []config.State) ([]Job, error) { jobs := make([]Job, len(ntgjobs)) for i := range jobs { - jobs[i] = ntgjobs[i].Job() + jobs[i] = ntgjobs[i].Job(true) } return jobs, err } diff --git a/config.json b/config.json index f2fb86f..01ce5d6 100644 --- a/config.json +++ b/config.json @@ -61,7 +61,7 @@ "Matrix": { "ReceiveEnabled": true, "Mock": false, - "Continuation": "1318", + "Continuation": "410", "Homeserver": "https://m.bltrucks.top", "Username": "@bot.m.bltrucks.top", "Token": "mvDWB96KXMF8XhOam8EC5XVdQvSEw0CDeClcSWocBcYkwZX3FPNWZ5uOnQk2EmT1cjpzfeuD7gDYPPjOuyZlI3bE9TE35UjNOlZgi0Tugm25s91iVsbIF6kMZsCIhVMSmEf6w3jxX6wQYOWvmDZ4mu6f5c8wr221EMDcOpEzQV09d1zuBSWgKLBgjqAkYHJZ5dTRIWpEDpPgujhOFZa2ld1HiAOxrJKlIrlfDBN0CUsTlGOGplujDAr4VtpFzNRS", @@ -72,9 +72,9 @@ "Once": true, "Brokers": { "NTG": { - "Mock": true, + "Mock": false, "LoadPageURIFormat": "https://ntgvision.com/LoadDetails?loadId=%d", - "Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzMTAyOSIsInVuaXF1ZV9uYW1lIjoibm9lYXN5cnVuc3RydWNraW5nQGdtYWlsLmNvbSIsImp0aSI6IjFmYzhmNjk1LTQzNTYtNGYzZS05NWY1LWZkNWVjMDJlMDkxNyIsImlhdCI6IjEvMTAvMjAyMiAxMTo1OTozNiBQTSIsIm50Z3ZSb2xlIjoiQ2FycmllckFwcHJvdmVkIiwidXNlckNhcnJpZXJzIjoiMTUzNDIzIiwib3RyVXNlciI6IkZhbHNlIiwibmJmIjoxNjQxODU5MTc2LCJleHAiOjE2NDE5NDE5NzYsImlzcyI6Ik5URyBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIiwiYXVkIjoiTlRHIn0.kpHOBTtcQhbdloAw7xEjnkzfxf4ToMgidrLCMomZmnmKQHlD_7OQuI8nQiCTHc_ntuGtt8Ui92kwWWUiLwN_2tT2vC7Jy6m9IjwqgbAzsgTLi4jAbIwITD-awiDh4FUKDwGq3XpEjs-i7XM3rI7tTk7jg9QSDId8EF3Pt5fJq6QhztC6y7-JaSFQZLMtkSCAWmOQx_TgKgVoVbgMeiqhHbZ2hhoA7TtpEIIL5Gnfq46t3E18ExdrsO96ZCGQGcBw5x8J1ustq2cwdlFKeg4ULNWAAd1ay1hojRa7jCHs98AcoJ3Nts9-o7yEMuN2rrfpK_nm68nciwFtF-ke1KoiBg", + "Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzMTAyOSIsInVuaXF1ZV9uYW1lIjoibm9lYXN5cnVuc3RydWNraW5nQGdtYWlsLmNvbSIsImp0aSI6ImJiYjY1MzRhLTE4NTctNDkyMy1hMmZiLWMzYTA0MDE3YTViMCIsImlhdCI6IjEvMTQvMjAyMiA1OjU1OjMwIEFNIiwibnRndlJvbGUiOiJDYXJyaWVyQXBwcm92ZWQiLCJ1c2VyQ2FycmllcnMiOiIxNTM0MjMiLCJvdHJVc2VyIjoiRmFsc2UiLCJuYmYiOjE2NDIxMzk3MzAsImV4cCI6MTY0MjIyMjUzMCwiaXNzIjoiTlRHIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UiLCJhdWQiOiJOVEcifQ.sFYo30JkKcBnmpNVqzUYudlmKoXRVwY6X2sCmbRdEephRCiEXrVbZxNg3CJS2BZHRzj9JxGQkDQXUtsCnoOlLQpY-cBsQldpZ90oO-SaGeEsbi2FZe9zC9b5ll1L1l6QZQUBkWjsg41IOFRMD4JaaO2jfJVB4rgTBf2roerF74gQe7V1_JCnRArEhOQLRb7OnJP4dChr6VegtXq2nIZOR3o1hzU_dVEw01W_MgoeUIn-tg7C-pb_zrKYBu-dKoRGjLC-OAaqwLj3e09I-0Z7TlEXikHw81SZ87dV3eUXBSsN3cYcnLSylGvMNcqfzYwSbWMOpH92fGntzcJqvUae-g", "Username": "noeasyrunstrucking@gmail.com", "Password": "thumper123" }