Skip to content

Commit c1097b6

Browse files
committed
feat: improve logging
1 parent 7c812b4 commit c1097b6

File tree

9 files changed

+132
-76
lines changed

9 files changed

+132
-76
lines changed

.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
GURA_DSN="host=localhost user=postgres password=postgres dbname=gura port=5432 sslmode=disable"
2+
GURA_DEV=1

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
GURA_DSN="host=localhost user=gorm password=gorm dbname=gura port=5432 sslmode=disable TimeZone=Asia/HongKong"
22
GURA_GITHUB_TOKENS=idk;idk;idk
3+
GURA_DEV=0

db/db.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ import (
66
"time"
77

88
"github.com/google/uuid"
9+
"github.com/terrapkg/gura/util"
10+
"go.uber.org/zap"
911
"gorm.io/datatypes"
1012
"gorm.io/driver/postgres"
1113
"gorm.io/gorm"
14+
"moul.io/zapgorm2"
1215
)
1316

1417
// RepoType represents repository type enum.
@@ -85,13 +88,11 @@ func SetupDB() {
8588
log.Fatalln("GURA_DSN environment variable is not set")
8689
}
8790

88-
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
89-
if err != nil {
90-
log.Fatalln("cannot open db: ", err)
91-
}
91+
logger := zapgorm2.New(util.SetupLog("gorm"))
92+
logger.SetAsDefault() // optional: configure gorm to use this zapgorm.Logger for callbacks
93+
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{Logger: logger})
94+
util.MaybeSuicide(logger, "cannot open db", err)
9295

9396
// AutoMigrate in an order that respects foreign keys.
94-
if err := DB.AutoMigrate(&Repo{}, &Pkg{}, &PkgMeta{}, &Stream{}); err != nil {
95-
log.Fatalln("auto migrate failed: ", err)
96-
}
97+
util.MaybeSuicide(logger, "auto migrate failed", DB.AutoMigrate(&Repo{}, &Pkg{}, &PkgMeta{}, &Stream{}))
9798
}

go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ require (
88
github.com/hasura/go-graphql-client v0.14.4
99
github.com/joho/godotenv v1.5.1
1010
github.com/klauspost/compress v1.18.0
11+
github.com/mdobak/go-xerrors v1.0.0
12+
go.uber.org/zap v1.27.0
13+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
1114
gorm.io/datatypes v1.2.6
1215
gorm.io/driver/postgres v1.6.0
1316
gorm.io/gorm v1.30.3
@@ -40,8 +43,10 @@ require (
4043
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
4144
github.com/modern-go/reflect2 v1.0.2 // indirect
4245
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
46+
github.com/rogpeppe/go-internal v1.14.1 // indirect
4347
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
4448
github.com/ugorji/go/codec v1.2.12 // indirect
49+
go.uber.org/multierr v1.10.0 // indirect
4550
golang.org/x/arch v0.8.0 // indirect
4651
golang.org/x/crypto v0.41.0 // indirect
4752
golang.org/x/net v0.42.0 // indirect

go.sum

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQ
1111
github.com/coder/websocket v1.8.13 h1:f3QZdXy7uGVz+4uCJy2nTZyM0yTBj8yANEHhqlXZ9FE=
1212
github.com/coder/websocket v1.8.13/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
1313
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
14+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1415
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1516
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
1617
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
1718
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
1819
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
1920
github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=
2021
github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
22+
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
23+
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
2124
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
2225
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
2326
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
@@ -29,6 +32,12 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
2932
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
3033
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
3134
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
35+
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
36+
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
37+
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
38+
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
39+
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
40+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
3241
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
3342
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
3443
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -56,18 +65,31 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02
5665
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
5766
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
5867
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
68+
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
69+
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
70+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
71+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
5972
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
6073
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
6174
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
6275
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
76+
github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
77+
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
78+
github.com/mdobak/go-xerrors v1.0.0 h1:p4wqdfRm2p5oxRpBbmb+f1wP6PZlMxPT8MLiwfub0Wk=
79+
github.com/mdobak/go-xerrors v1.0.0/go.mod h1:YHIv92A99IdVUcyfj9FEKAH3Jr4ejCj4YxqWfcLpjkk=
80+
github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
81+
github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
6382
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
6483
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
6584
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
6685
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
6786
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
6887
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
6988
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
89+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
7090
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
91+
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
92+
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
7193
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
7294
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
7395
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -78,11 +100,18 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
78100
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
79101
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
80102
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
103+
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
81104
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
82105
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
83106
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
84107
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
85108
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
109+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
110+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
111+
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
112+
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
113+
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
114+
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
86115
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
87116
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
88117
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
@@ -98,9 +127,13 @@ golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
98127
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
99128
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
100129
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
130+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
131+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
101132
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
102133
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
103134
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
135+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
136+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
104137
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
105138
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
106139
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -110,6 +143,10 @@ gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
110143
gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
111144
gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4=
112145
gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo=
146+
gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU=
147+
gorm.io/driver/sqlite v1.4.3/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI=
148+
gorm.io/driver/sqlserver v1.6.0 h1:VZOBQVsVhkHU/NzNhRJKoANt5pZGQAS1Bwc6m6dgfnc=
149+
gorm.io/driver/sqlserver v1.6.0/go.mod h1:WQzt4IJo/WHKnckU9jXBLMJIVNMVeTu25dnOzehntWw=
113150
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
114151
gorm.io/gorm v1.30.3 h1:QiG8upl0Sg9ba2Zatfjy0fy4It2iNBL2/eMdvEkdXNs=
115152
gorm.io/gorm v1.30.3/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=

gura.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
package main
22

33
import (
4-
"log"
54
"os"
65

76
"github.com/joho/godotenv"
87
"github.com/terrapkg/gura/api"
98
"github.com/terrapkg/gura/db"
109
"github.com/terrapkg/gura/kudari"
1110
"github.com/terrapkg/gura/nobori"
11+
"github.com/terrapkg/gura/util"
12+
"go.uber.org/zap"
1213
)
1314

1415
var ver = "version is not set!"
16+
var l = util.SetupLog("gura")
1517

1618
func main() {
17-
err := godotenv.Load()
18-
if err != nil {
19-
log.Fatalln("cannot load .env", err)
20-
}
19+
zap.ReplaceGlobals(l)
20+
util.MaybeSuicide(l, "cannot load .env", godotenv.Load())
2121

2222
router_opts := api.RouterSetupOpts{
2323
Version: ver,

nobori/github.go

Lines changed: 27 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"encoding/json"
66
"io"
7-
"log"
87
"net/http"
98
"os"
109
"slices"
@@ -15,6 +14,7 @@ import (
1514
ql "github.com/hasura/go-graphql-client"
1615
"github.com/terrapkg/gura/db"
1716
"github.com/terrapkg/gura/util"
17+
"go.uber.org/zap"
1818
)
1919

2020
// ? https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#about-secondary-rate-limits
@@ -23,6 +23,7 @@ var pool_rest = make(chan db.Stream)
2323
var pool_ql = make(chan db.Stream)
2424
var tokens []Token
2525
var tokensql []Token
26+
var ghl = util.SetupLog("github")
2627

2728
type Token struct {
2829
key string
@@ -33,9 +34,7 @@ type Token struct {
3334
func fetchGitHub(stream db.Stream) {
3435
t, _ := util.SplitOnce(stream.Fetch, ' ')
3536
i, err := strconv.ParseUint(t, 10, 8)
36-
if err != nil {
37-
log.Fatalf("github: bad fetch [%s]: %v", stream.Fetch, err)
38-
}
37+
util.MaybeSuicide(ghl, "bad fetch", err, zap.String("stream.Fetch", stream.Fetch))
3938
switch GHFetchType(i) {
4039
case TAG, QL:
4140
pool_ql <- stream
@@ -51,33 +50,17 @@ func fillGitHubTokens() *Token {
5150
num++
5251
go func(token string) {
5352
req, err := http.NewRequest(http.MethodGet, "https://api.github.com/rate_limit", nil)
54-
if err != nil {
55-
log.Fatalln("github: can't swim new req:", err)
56-
}
53+
util.MaybeSuicide(ghl, "can't swim new req", err)
5754
req.Header.Add("Authorization", "Bearer "+token)
5855
resp, err := http.DefaultClient.Do(req)
59-
if err != nil {
60-
log.Printf("github: GET /rate_limit: %v\n"+
61-
"github: give up on token: %s", err, token)
56+
if util.Yeet(ghl, "GET /rate_limit -> give up token", err, zap.String("token", token)) {
6257
return
6358
}
64-
quota, err := strconv.ParseInt(resp.Header.Get("x-ratelimit-remaining"), 10, 16)
65-
if err != nil {
66-
log.Printf("github: strconv x-ratelimit-remaining: %v\n"+
67-
"github: give up on token: %s", err, token)
68-
return
69-
}
70-
reset, err := strconv.ParseInt(resp.Header.Get("x-ratelimit-reset"), 10, 64)
71-
if err != nil {
72-
log.Printf("github: strconv x-ratelimit-reset: %v\n"+
73-
"github: give up on token: %s", err, token)
74-
return
75-
}
76-
token_chan <- Token{
77-
key: token,
78-
quota: int16(quota),
79-
reset: time.Unix(reset, 0),
59+
t := Token{
60+
key: token,
8061
}
62+
updToken(&t, resp.Header)
63+
token_chan <- t
8164
}(token)
8265
}
8366
for ; num != 0; num-- {
@@ -96,7 +79,7 @@ func fillGitHubTokens() *Token {
9679
return +1
9780
})
9881
if len(tokens) == 0 {
99-
log.Fatalln("github: fatal: no tokens")
82+
ghl.Panic("no tokens from GURA_GITHUB_TOKENS")
10083
}
10184
return &tokens[0]
10285
}
@@ -116,13 +99,9 @@ func fillGitHubTokensQL() *Token {
11699
resetAt string
117100
}
118101
}
119-
if err := qlcli.Query(context.Background(), &q, nil); err != nil {
120-
log.Fatalln("github: can't query RateLimit for token", token)
121-
}
102+
util.MaybeSuicide(ghl, "can't query RateLimit", qlcli.Query(context.Background(), &q, nil), zap.String("token", token))
122103
reset, err := time.Parse(time.RFC3339, q.RateLimit.resetAt)
123-
if err != nil {
124-
log.Fatalln("github: cannot parse time:", q.RateLimit.resetAt)
125-
}
104+
util.MaybeSuicide(ghl, "parse time", err, zap.String("resetAt", q.RateLimit.resetAt))
126105
token_chan <- Token{
127106
key: token,
128107
quota: q.RateLimit.remaining,
@@ -146,7 +125,7 @@ func fillGitHubTokensQL() *Token {
146125
return +1
147126
})
148127
if len(tokens) == 0 {
149-
log.Fatalln("github: fatal: no tokens")
128+
ghl.Panic("no tokens from GURA_GITHUB_TOKENS")
150129
}
151130
return &tokensql[0]
152131
}
@@ -160,20 +139,15 @@ func thanksForAllTheFish(token *Token, token_idx *int, tokens *[]Token) {
160139
}
161140
func waitForFish(token Token) {
162141
if token.quota == 0 {
142+
ghl.Info("wait for token reset", zap.Time("reset", token.reset))
163143
time.Sleep(time.Until(token.reset))
164144
}
165145
}
166146
func updToken(token *Token, h http.Header) {
167147
q, err := strconv.ParseInt(h.Get("x-ratelimit-remaining"), 10, 16)
168-
if err != nil {
169-
log.Fatalf("github: strconv x-ratelimit-remaining: %v", err)
170-
return
171-
}
148+
util.MaybeSuicide(ghl, "strconv x-ratelimit-remaining", err)
172149
r, err := strconv.ParseInt(h.Get("x-ratelimit-reset"), 10, 64)
173-
if err != nil {
174-
log.Fatalf("github: strconv x-ratelimit-reset: %v", err)
175-
return
176-
}
150+
util.MaybeSuicide(ghl, "strconv x-ratelimit-reset", err)
177151
token.quota = int16(q)
178152
token.reset = time.Unix(r, 0)
179153
}
@@ -186,14 +160,13 @@ func swimGitHub() {
186160
func swimGitHubRest() {
187161
for i, token := 0, fillGitHubTokens(); noMoreFish(*token); thanksForAllTheFish(token, &i, &tokens) {
188162
waitForFish(*token)
189-
for {
163+
for !noMoreFish(*token) {
190164
stream := <-pool_rest
191-
go func(stream db.Stream) {
192-
fetch(&stream, token, nil)
193-
go schedule(stream)
194-
db.DB.Save(stream)
195-
}(stream)
165+
fetch(&stream, token, nil)
166+
go schedule(stream)
167+
go db.DB.Save(stream)
196168
}
169+
ghl.Info("ran out of fish", zap.Int("token_idx", i))
197170
}
198171
}
199172
func swimGitHubQL() {
@@ -217,21 +190,17 @@ func swimGitHubQL() {
217190
func rest_release(stream *db.Stream, remain string, token *Token) {
218191
prefix, remain := util.SplitOnce(remain, ' ')
219192
req, err := http.NewRequest(http.MethodGet, "https://api.github.com/repos/"+remain+"/releases", nil)
220-
if err != nil {
221-
log.Printf("github: req [%s]: %v", stream.Fetch, err)
193+
if util.Yeet(ghl, "req fail", err, zap.String("fetch", stream.Fetch)) {
222194
return
223195
}
224196
req.Header.Add("Authorization", "Bearer "+token.key)
225197
resp, err := http.DefaultClient.Do(req)
226-
if err != nil {
227-
log.Printf("github: resp [%s]: %v", stream.Fetch, err)
198+
if util.Yeet(ghl, "resp fail", err, zap.String("fetch", stream.Fetch)) {
228199
return
229200
}
230201
updToken(token, resp.Header)
231202
buf, err := io.ReadAll(resp.Body)
232-
if err != nil {
233-
log.Fatalln("github: can't read buf")
234-
}
203+
util.MaybeSuicide(ghl, "can't read buf", err)
235204
var v []struct {
236205
tag_name string
237206
}
@@ -245,7 +214,7 @@ func rest_release(stream *db.Stream, remain string, token *Token) {
245214
return
246215
}
247216
}
248-
log.Printf("github: [%s]: can't find prefix", stream.Fetch)
217+
ghl.Warn("can't find prefix", zap.String("fetch", stream.Fetch))
249218
}
250219

251220
type GHFetchType = uint8
@@ -289,12 +258,11 @@ func ql_tag(stream *db.Stream, remain string, token *Token, qlcli ql.Client) {
289258
} `graphql:"repository(owner: $owner, name: $name)"`
290259
}
291260
var headers http.Header
292-
if err := qlcli.Query(context.Background(), &q, map[string]any{
261+
if util.Yeet(ghl, "ql_tag", qlcli.Query(context.Background(), &q, map[string]any{
293262
"prefix": prefix,
294263
"owner": owner,
295264
"name": name,
296-
}, ql.BindResponseHeaders(&headers)); err != nil {
297-
log.Printf("github: ql_tag: %v", err)
265+
}, ql.BindResponseHeaders(&headers))) {
298266
return
299267
}
300268
if v := strings.TrimPrefix(q.Repository.Refs.edges[0].node.name, prefix); v != stream.Ver {

0 commit comments

Comments
 (0)