Compare commits

..

12 Commits

Author SHA1 Message Date
bel
cdabce7a56 SH 2022-01-31 09:35:56 -07:00
bel
0ab534624a NO 2022-01-31 09:31:40 -07:00
bel
b3ce49788b little 2022-01-30 08:43:57 -07:00
bel
bbe839bb88 make working hours, weekdays configurable by impl ntg 2022-01-30 08:34:14 -07:00
bel
60f19968e3 add ntg configurable work hours, weekdays 2022-01-30 08:29:06 -07:00
bel
c62d84b40a cache last ntg result for off hours 2022-01-29 18:59:16 -07:00
bel
1a072fee59 Merge branch 'master' of http://gogs.scratch.com:59515/bel/truckstop 2022-01-29 18:44:21 -07:00
bel
c4213e697d fuck backwards bool 2022-01-29 18:44:13 -07:00
bel
934a306bc9 log 2022-01-29 18:40:13 -07:00
Bel LaPointe
82bdbb1f3b todo 2022-01-27 20:18:13 -07:00
Bel LaPointe
b090cb86a5 fix offset to not need system timezone 2022-01-27 20:04:31 -07:00
Bel LaPointe
e42df54632 only do ntgvision searches 9-4 EST because 417s mean unauth until forced pw reset 2022-01-27 19:53:50 -07:00
7 changed files with 94 additions and 9 deletions

View File

@@ -221,7 +221,43 @@ func (ntg NTGVision) SearchZips(zips []string) ([]Job, error) {
return jobs, nil return jobs, nil
} }
func (ntg NTGVision) workingHours(now time.Time) bool {
// TODO assert M-F 9-4 EST
now = now.In(time.FixedZone("EST", -5*60*60))
working := config.Get().Brokers.NTG.Working
logtr.Debugf("ntg.workingHours: now=%s, weekday=%v, hour=%v (ok=%+v)", now.String(), now.Weekday(), now.Hour(), working)
if ok := func() bool {
for _, hr := range working.Hours {
if now.Hour() == hr {
return true
}
}
return false
}(); !ok {
return false
}
if ok := func() bool {
for _, weekday := range working.Weekdays {
if now.Weekday() == time.Weekday(weekday) {
return true
}
}
return false
}(); !ok {
return false
}
return true
}
func (ntg NTGVision) SearchStates(states []config.State) ([]Job, error) { func (ntg NTGVision) SearchStates(states []config.State) ([]Job, error) {
if !ntg.workingHours(time.Now()) {
lastNtgB, _ := config.Get().DB().Get("ntg_last_search_states")
var jobs []Job
json.Unmarshal(lastNtgB, &jobs)
logtr.Verbosef("ntg.SearchStates: outside of working hours so returning ntg_last_search_states: %+v", jobs)
return jobs, nil
}
rc, err := ntg.searcher.searchStates(states) rc, err := ntg.searcher.searchStates(states)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -237,12 +273,22 @@ func (ntg NTGVision) SearchStates(states []config.State) ([]Job, error) {
var ntgjobs []ntgVisionJob var ntgjobs []ntgVisionJob
err = json.Unmarshal(b, &ntgjobs) err = json.Unmarshal(b, &ntgjobs)
if err != nil {
return nil, err
}
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()
} }
return jobs, err
jobsB, err := json.Marshal(jobs)
if err == nil {
config.Get().DB().Set("ntg_last_search_states", jobsB)
logtr.Verbosef("ntg.SearchStates: in working hours so setting ntg_last_search_states: %+v", jobs)
}
return jobs, nil
} }
func getNTGTokenKey() string { func getNTGTokenKey() string {
@@ -334,7 +380,7 @@ func (ntg NTGVision) _searchStates(states []config.State) (io.ReadCloser, error)
request2, _ := ntg.newRequest(states) request2, _ := ntg.newRequest(states)
requestb, _ := ioutil.ReadAll(request2.Body) requestb, _ := ioutil.ReadAll(request2.Body)
logtr.Debugf("ntg auth bad status: url=%s, status=%v, body=%s, headers=%+v, request=%+v, requestb=%s", request.URL.String(), resp.StatusCode, b, resp.Header, request2, requestb) logtr.Debugf("ntg auth bad status: url=%s, status=%v, body=%s, headers=%+v, request=%+v, requestb=%s", request.URL.String(), resp.StatusCode, b, resp.Header, request2, requestb)
if resp.StatusCode > 400 && resp.StatusCode < 404 { if resp.StatusCode > 400 && resp.StatusCode < 404 || resp.StatusCode == 417 { // TODO wtf is 417 for
logtr.Debugf("ntg auth bad status: err no auth") logtr.Debugf("ntg auth bad status: err no auth")
return nil, ErrNoAuth return nil, ErrNoAuth
} }

22
broker/ntgvision_test.go Normal file
View File

@@ -0,0 +1,22 @@
package broker
import (
"local/truckstop/config"
"os"
"testing"
"time"
)
func TestWorkingHoursNTG(t *testing.T) {
os.Setenv("CONFIG", "../config.json")
if err := config.Refresh(nil); err != nil {
t.Fatal(err)
}
ntg := NTGVision{}
if !ntg.workingHours(time.Date(2022, 1, 27, 12, 0, 0, 0, time.FixedZone("MST", -7*60*60))) {
t.Fatal("noon MST not ok")
}
if ntg.workingHours(time.Date(2022, 1, 27, 23, 0, 0, 0, time.FixedZone("MST", -7*60*60))) {
t.Fatal("midnight MST ok")
}
}

View File

@@ -79,6 +79,10 @@
"UseZips": true, "UseZips": true,
"RadiusMiles": 200, "RadiusMiles": 200,
"NTG": { "NTG": {
"Working": {
"Hours": [6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"Weekdays": [1, 2, 3, 4, 5]
},
"Enabled": false, "Enabled": false,
"JobInfo": true, "JobInfo": true,
"Mock": true, "Mock": true,
@@ -94,4 +98,4 @@
"Password": "166647" "Password": "166647"
} }
} }
} }

View File

@@ -83,6 +83,10 @@
"Password": "p" "Password": "p"
}, },
"NTG": { "NTG": {
"Working": {
"Hours": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
"Weekdays": [0, 1, 2, 3, 4, 5, 6]
},
"Enabled": true, "Enabled": true,
"JobInfo": true, "JobInfo": true,
"Mock": true, "Mock": true,

View File

@@ -67,6 +67,10 @@ type Config struct {
UseZips bool UseZips bool
RadiusMiles int RadiusMiles int
NTG struct { NTG struct {
Working struct {
Hours []int
Weekdays []int
}
Enabled bool Enabled bool
JobInfo bool JobInfo bool
Mock bool Mock bool

10
main.go
View File

@@ -126,7 +126,9 @@ func matrixrecv() error {
logtr.Errorf("failed to mark state gathered @%s: %v", key, err) logtr.Errorf("failed to mark state gathered @%s: %v", key, err)
} }
} }
setNewZips(zips) if config.Get().Brokers.UseZips {
setNewZips(zips)
}
}() }()
func() { func() {
logtr.Verbosef("looking for states") logtr.Verbosef("looking for states")
@@ -150,7 +152,9 @@ func matrixrecv() error {
logtr.Errorf("failed to mark state gathered @%s: %v", key, err) logtr.Errorf("failed to mark state gathered @%s: %v", key, err)
} }
} }
setNewStates(states) if !config.Get().Brokers.UseZips {
setNewStates(states)
}
}() }()
func() { func() {
logtr.Verbosef("looking for radius") logtr.Verbosef("looking for radius")
@@ -371,7 +375,7 @@ func __main() error {
logtr.Errorf("failed _main: %v", err) logtr.Errorf("failed _main: %v", err)
} }
if config.Get().Once { if config.Get().Once {
time.Sleep(3 * time.Second) time.Sleep(10 * time.Second)
return err return err
} }
if err != nil { if err != nil {

View File

@@ -1,7 +1,4 @@
todo: todo:
- fast exact does not use ID in UID because they spammy
- from states to zip codes w/ range
- modify old items once no longer available; drop stale jobs good candidate but requires new matrix interaction
- more than NTG; blue one - more than NTG; blue one
- !states emits current state - !states emits current state
- test each !command callbacks to matrix - test each !command callbacks to matrix
@@ -14,7 +11,11 @@ todo:
subtasks: subtasks:
- banlist criteria like vendors, brokers, metadata - banlist criteria like vendors, brokers, metadata
- set up copy for caleb, broc - set up copy for caleb, broc
- move from main() and make more functions
done: done:
- modify old items once no longer available; drop stale jobs good candidate but requires new matrix interaction
- from states to zip codes w/ range
- fast exact does not use ID in UID because they spammy
- fast exact is dumb or...? - fast exact is dumb or...?
- try search ntg by autoinc? - try search ntg by autoinc?
- TEST. Just like, refactor and test to shit. - TEST. Just like, refactor and test to shit.