-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
101 lines (91 loc) · 2.69 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"github.com/jbeshir/moonbird-auth-frontend/aengine"
"github.com/jbeshir/moonbird-predictor-frontend/controllers"
"github.com/jbeshir/moonbird-predictor-frontend/mlclient"
"github.com/jbeshir/moonbird-predictor-frontend/pbook"
"github.com/jbeshir/moonbird-predictor-frontend/responders"
"github.com/jbeshir/predictionbook-extractor/htmlfetcher"
"github.com/jbeshir/predictionbook-extractor/predictions"
"golang.org/x/time/rate"
"google.golang.org/api/ml/v1"
"google.golang.org/api/storage/v1"
"google.golang.org/appengine"
"google.golang.org/appengine/memcache"
"net/http"
"os"
"time"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
contextMaker := &aengine.ContextMaker{
Namespace: "moonbird-predictor-frontend",
}
pbSource := predictions.NewSource(
htmlfetcher.NewFetcher(rate.NewLimiter(1, 2), 2),
"https://predictionbook.com")
exampleLister := &pbook.Lister{
PredictionSource: pbSource,
CacheStore: &aengine.CacheStore{
Prefix: "pbook-",
Codec: memcache.Gob,
},
PersistentStore: &aengine.PersistentStore{
Prefix: "pbook-",
},
}
predictionCacheStore := &aengine.CacheStore{
Prefix: "~",
Codec: aengine.BinaryMemcacheCodec,
}
predictionMaker := &mlclient.PredictionMaker{
CacheStorage: predictionCacheStore,
HttpClientMaker: &aengine.AuthenticatedClientMaker{
Scope: []string{
ml.CloudPlatformScope,
},
},
}
indexController := &controllers.Index{
ExampleLister: exampleLister,
PredictionMaker: predictionMaker,
}
indexResponder := &responders.WebIndexResponder{}
http.Handle("/", indexController.HandleFunc(contextMaker, indexResponder))
cronResponder := &responders.WebSimpleResponder{
ExposeErrors: true,
}
pbUpdateController := &controllers.ExamplesUpdate{
ExampleLister: exampleLister,
}
http.Handle("/cron/pb-update", pbUpdateController.HandleFunc(contextMaker, cronResponder))
modelTrainer := &mlclient.Trainer{
PersistentStore: &aengine.PersistentStore{
Prefix: "model-",
},
FileStore: &aengine.GcsFileStore{
Bucket: "moonbird-data",
Prefix: "predictor/",
},
PredictionSource: pbSource,
ModelPath: "moonbird-models/predictor",
DataPath: "moonbird-data/predictor",
SleepFunc: time.Sleep,
TrainPackage: "gs://moonbird-models/predictor/trainer.tar.gz",
HttpClientMaker: &aengine.AuthenticatedClientMaker{
Scope: []string{
ml.CloudPlatformScope,
storage.CloudPlatformScope,
},
},
}
mlRetrainController := &controllers.ModelRetrain{
Trainer: modelTrainer,
PredictionCache: predictionCacheStore,
}
http.Handle("/cron/ml-retrain", mlRetrainController.HandleFunc(contextMaker, cronResponder))
appengine.Main()
}