Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04a2cb01ef | ||
|
|
05a981344d | ||
|
|
ebe777e989 | ||
|
|
6704b23bf1 | ||
|
|
aa1a2373ab | ||
|
|
32d09dbac6 |
@@ -43,16 +43,10 @@ func (j JobLocation) String() string {
|
|||||||
func (j Job) FormatMultilineText() string {
|
func (j Job) FormatMultilineText() string {
|
||||||
foo := func(client string) string {
|
foo := func(client string) string {
|
||||||
return fmt.Sprintf(
|
return fmt.Sprintf(
|
||||||
"--- %s: %s => %s ---\nPickup: %s\nDropoff: %s\nNotes: %d lbs, %d miles, %s\n%s",
|
"--- %s: %s => %s ---",
|
||||||
client,
|
client,
|
||||||
j.Pickup.State,
|
j.Pickup.State,
|
||||||
j.Dropoff.State,
|
j.Dropoff.State,
|
||||||
j.Pickup.String(),
|
|
||||||
j.Dropoff.String(),
|
|
||||||
j.Weight,
|
|
||||||
j.Miles,
|
|
||||||
j.Meta,
|
|
||||||
j.URI,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
out := ""
|
out := ""
|
||||||
@@ -61,10 +55,22 @@ func (j Job) FormatMultilineText() string {
|
|||||||
log.Printf("job multiline: %+v contains %s then use %v", clients[k].States, j.Pickup.State, k)
|
log.Printf("job multiline: %+v contains %s then use %v", clients[k].States, j.Pickup.State, k)
|
||||||
if strings.Contains(fmt.Sprint(clients[k].States), j.Pickup.State) {
|
if strings.Contains(fmt.Sprint(clients[k].States), j.Pickup.State) {
|
||||||
if len(out) > 0 {
|
if len(out) > 0 {
|
||||||
out += "\n\n"
|
out += "\n"
|
||||||
}
|
}
|
||||||
out += foo(k)
|
out += foo(k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(out) > 0 {
|
||||||
|
out = fmt.Sprintf(
|
||||||
|
"%s\nPickup: %s\nDropoff: %s\nNotes: %d lbs, %d miles, %s\n%s",
|
||||||
|
out,
|
||||||
|
j.Pickup.String(),
|
||||||
|
j.Dropoff.String(),
|
||||||
|
j.Weight,
|
||||||
|
j.Miles,
|
||||||
|
j.Meta,
|
||||||
|
j.URI,
|
||||||
|
)
|
||||||
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,74 @@ type ntgVisionJob struct {
|
|||||||
Weight int `json:"weight"`
|
Weight int `json:"weight"`
|
||||||
Equipment string `json:"equip"`
|
Equipment string `json:"equip"`
|
||||||
Temp string `json:"temp"`
|
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 !config.Get().Brokers.NTG.JobInfo {
|
||||||
|
return ntgJob.jobinfo, nil
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
time.Sleep(config.Get().Interval.JobInfo.Get())
|
||||||
|
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)
|
pickup, _ := time.ParseInLocation("01/02/06", ntgJob.PickupDate, time.Local)
|
||||||
dropoff, _ := time.ParseInLocation("01/02/06", ntgJob.DropoffDate, time.Local)
|
dropoff, _ := time.ParseInLocation("01/02/06", ntgJob.DropoffDate, time.Local)
|
||||||
return Job{
|
return Job{
|
||||||
@@ -53,7 +118,7 @@ func (ntgJob ntgVisionJob) Job() Job {
|
|||||||
},
|
},
|
||||||
Miles: ntgJob.Miles,
|
Miles: ntgJob.Miles,
|
||||||
Weight: ntgJob.Weight,
|
Weight: ntgJob.Weight,
|
||||||
Meta: fmt.Sprintf("equipment:%s", ntgJob.Equipment),
|
Meta: fmt.Sprintf("equipment:%s, secrets:%+v", ntgJob.Equipment, jobInfo),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +152,7 @@ func (ntg NTGVision) Search(states []config.State) ([]Job, error) {
|
|||||||
|
|
||||||
jobs := make([]Job, len(ntgjobs))
|
jobs := make([]Job, len(ntgjobs))
|
||||||
for i := range jobs {
|
for i := range jobs {
|
||||||
jobs[i] = ntgjobs[i].Job()
|
jobs[i] = ntgjobs[i].Job(true)
|
||||||
}
|
}
|
||||||
return jobs, err
|
return jobs, err
|
||||||
}
|
}
|
||||||
|
|||||||
12
config.json
12
config.json
@@ -2,7 +2,8 @@
|
|||||||
"Interval": {
|
"Interval": {
|
||||||
"Input": "5s..10s",
|
"Input": "5s..10s",
|
||||||
"OK": "6h0m0s..6h0m0s",
|
"OK": "6h0m0s..6h0m0s",
|
||||||
"Error": "6h0m0s..6h0m0s"
|
"Error": "6h0m0s..6h0m0s",
|
||||||
|
"JobInfo": "60s..90s"
|
||||||
},
|
},
|
||||||
"Images": {
|
"Images": {
|
||||||
"ClientID": "d9ac7cabe813d10",
|
"ClientID": "d9ac7cabe813d10",
|
||||||
@@ -19,14 +20,14 @@
|
|||||||
"DirectionsURIFormat": "https://maps.googleapis.com/maps/api/directions/json?origin=%s\u0026destination=%s\u0026mode=driving\u0026key=AIzaSyBkACm-LQkoSfsTO5_XAzBVZE9-JQzcNkg",
|
"DirectionsURIFormat": "https://maps.googleapis.com/maps/api/directions/json?origin=%s\u0026destination=%s\u0026mode=driving\u0026key=AIzaSyBkACm-LQkoSfsTO5_XAzBVZE9-JQzcNkg",
|
||||||
"PathedURIFormat": "https://maps.googleapis.com/maps/api/staticmap?size=250x250\u0026path=%s\u0026format=jpeg\u0026maptype=roadmap\u0026key=AIzaSyBkACm-LQkoSfsTO5_XAzBVZE9-JQzcNkg\u0026size=250x250\u0026markers=%s|%s\u0026zoom=5",
|
"PathedURIFormat": "https://maps.googleapis.com/maps/api/staticmap?size=250x250\u0026path=%s\u0026format=jpeg\u0026maptype=roadmap\u0026key=AIzaSyBkACm-LQkoSfsTO5_XAzBVZE9-JQzcNkg\u0026size=250x250\u0026markers=%s|%s\u0026zoom=5",
|
||||||
"URIFormat": "https://maps.googleapis.com/maps/api/staticmap?center=%s\u0026markers=label=A|%s\u0026zoom=5\u0026size=250x250\u0026scale=1\u0026format=jpeg\u0026maptype=roadmap\u0026key=AIzaSyBkACm-LQkoSfsTO5_XAzBVZE9-JQzcNkg",
|
"URIFormat": "https://maps.googleapis.com/maps/api/staticmap?center=%s\u0026markers=label=A|%s\u0026zoom=5\u0026size=250x250\u0026scale=1\u0026format=jpeg\u0026maptype=roadmap\u0026key=AIzaSyBkACm-LQkoSfsTO5_XAzBVZE9-JQzcNkg",
|
||||||
"Pathed": true,
|
"Pathed": false,
|
||||||
"Pickup": false,
|
"Pickup": false,
|
||||||
"Dropoff": false
|
"Dropoff": false
|
||||||
},
|
},
|
||||||
"Clients": {
|
"Clients": {
|
||||||
"bel": {
|
"bel": {
|
||||||
"States": [
|
"States": [
|
||||||
"NC"
|
"IL"
|
||||||
],
|
],
|
||||||
"IDs": {
|
"IDs": {
|
||||||
"Matrix": "@bel:m.bltrucks.top"
|
"Matrix": "@bel:m.bltrucks.top"
|
||||||
@@ -61,7 +62,7 @@
|
|||||||
"Matrix": {
|
"Matrix": {
|
||||||
"ReceiveEnabled": true,
|
"ReceiveEnabled": true,
|
||||||
"Mock": false,
|
"Mock": false,
|
||||||
"Continuation": "1314",
|
"Continuation": "1510",
|
||||||
"Homeserver": "https://m.bltrucks.top",
|
"Homeserver": "https://m.bltrucks.top",
|
||||||
"Username": "@bot.m.bltrucks.top",
|
"Username": "@bot.m.bltrucks.top",
|
||||||
"Token": "mvDWB96KXMF8XhOam8EC5XVdQvSEw0CDeClcSWocBcYkwZX3FPNWZ5uOnQk2EmT1cjpzfeuD7gDYPPjOuyZlI3bE9TE35UjNOlZgi0Tugm25s91iVsbIF6kMZsCIhVMSmEf6w3jxX6wQYOWvmDZ4mu6f5c8wr221EMDcOpEzQV09d1zuBSWgKLBgjqAkYHJZ5dTRIWpEDpPgujhOFZa2ld1HiAOxrJKlIrlfDBN0CUsTlGOGplujDAr4VtpFzNRS",
|
"Token": "mvDWB96KXMF8XhOam8EC5XVdQvSEw0CDeClcSWocBcYkwZX3FPNWZ5uOnQk2EmT1cjpzfeuD7gDYPPjOuyZlI3bE9TE35UjNOlZgi0Tugm25s91iVsbIF6kMZsCIhVMSmEf6w3jxX6wQYOWvmDZ4mu6f5c8wr221EMDcOpEzQV09d1zuBSWgKLBgjqAkYHJZ5dTRIWpEDpPgujhOFZa2ld1HiAOxrJKlIrlfDBN0CUsTlGOGplujDAr4VtpFzNRS",
|
||||||
@@ -72,9 +73,10 @@
|
|||||||
"Once": true,
|
"Once": true,
|
||||||
"Brokers": {
|
"Brokers": {
|
||||||
"NTG": {
|
"NTG": {
|
||||||
|
"JobInfo": false,
|
||||||
"Mock": true,
|
"Mock": true,
|
||||||
"LoadPageURIFormat": "https://ntgvision.com/LoadDetails?loadId=%d",
|
"LoadPageURIFormat": "https://ntgvision.com/LoadDetails?loadId=%d",
|
||||||
"Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzMTAyOSIsInVuaXF1ZV9uYW1lIjoibm9lYXN5cnVuc3RydWNraW5nQGdtYWlsLmNvbSIsImp0aSI6IjFmYzhmNjk1LTQzNTYtNGYzZS05NWY1LWZkNWVjMDJlMDkxNyIsImlhdCI6IjEvMTAvMjAyMiAxMTo1OTozNiBQTSIsIm50Z3ZSb2xlIjoiQ2FycmllckFwcHJvdmVkIiwidXNlckNhcnJpZXJzIjoiMTUzNDIzIiwib3RyVXNlciI6IkZhbHNlIiwibmJmIjoxNjQxODU5MTc2LCJleHAiOjE2NDE5NDE5NzYsImlzcyI6Ik5URyBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIiwiYXVkIjoiTlRHIn0.kpHOBTtcQhbdloAw7xEjnkzfxf4ToMgidrLCMomZmnmKQHlD_7OQuI8nQiCTHc_ntuGtt8Ui92kwWWUiLwN_2tT2vC7Jy6m9IjwqgbAzsgTLi4jAbIwITD-awiDh4FUKDwGq3XpEjs-i7XM3rI7tTk7jg9QSDId8EF3Pt5fJq6QhztC6y7-JaSFQZLMtkSCAWmOQx_TgKgVoVbgMeiqhHbZ2hhoA7TtpEIIL5Gnfq46t3E18ExdrsO96ZCGQGcBw5x8J1ustq2cwdlFKeg4ULNWAAd1ay1hojRa7jCHs98AcoJ3Nts9-o7yEMuN2rrfpK_nm68nciwFtF-ke1KoiBg",
|
"Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzMTAyOSIsInVuaXF1ZV9uYW1lIjoibm9lYXN5cnVuc3RydWNraW5nQGdtYWlsLmNvbSIsImp0aSI6IjI3OTQ2YWRkLWFhYmQtNGFhYi1iODg2LTg5MWRkMWRlZjQwNCIsImlhdCI6IjEvMTQvMjAyMiA2OjAxOjIwIEFNIiwibnRndlJvbGUiOiJDYXJyaWVyQXBwcm92ZWQiLCJ1c2VyQ2FycmllcnMiOiIxNTM0MjMiLCJvdHJVc2VyIjoiRmFsc2UiLCJuYmYiOjE2NDIxNDAwODAsImV4cCI6MTY0MjIyMjg4MCwiaXNzIjoiTlRHIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UiLCJhdWQiOiJOVEcifQ.ksvyfnoqvwYaG7HtBDX6iFUaVk9cPnJpf4Jga5YDz6CGEXk85Dk10oUiSx2SA25r3lYN9by5DZIcBbEMfk69kynC28n2Te3hOR03Q0t8p3scj9aTe99fXapVKgma2s7JG_AIdkElwg81VBgyPNo3Nvn2mPKdV3ueAOkyX2aAHK4VLMm_YcbbFxiv74mPtFgw2SwnRumtgpvlOQrW0b7SXhA0s78E3kiYAjCiSS5Y7jQE1-x3P-VOPpvfXx3c8E-nHNah210Ewp2cGFvnXEevIvB0LDGeT3_HxBocwRSVU_jCVFjWX6U96u91FQAyw3yjpgkeMhX_QU_n3Nt3uXXvew",
|
||||||
"Username": "noeasyrunstrucking@gmail.com",
|
"Username": "noeasyrunstrucking@gmail.com",
|
||||||
"Password": "thumper123"
|
"Password": "thumper123"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ import (
|
|||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Interval struct {
|
Interval struct {
|
||||||
Input Duration
|
Input Duration
|
||||||
OK Duration
|
OK Duration
|
||||||
Error Duration
|
Error Duration
|
||||||
|
JobInfo Duration
|
||||||
}
|
}
|
||||||
Images struct {
|
Images struct {
|
||||||
ClientID string
|
ClientID string
|
||||||
@@ -51,6 +52,7 @@ type Config struct {
|
|||||||
Once bool
|
Once bool
|
||||||
Brokers struct {
|
Brokers struct {
|
||||||
NTG struct {
|
NTG struct {
|
||||||
|
JobInfo bool
|
||||||
Mock bool
|
Mock bool
|
||||||
LoadPageURIFormat string
|
LoadPageURIFormat string
|
||||||
Token string
|
Token string
|
||||||
|
|||||||
Reference in New Issue
Block a user