diff --git a/src/go/apps/auction-item-stat-scraper/converter/converter.go b/src/go/apps/auction-item-stat-scraper/converter/converter.go index 4e9a90d2..7a7c45c2 100644 --- a/src/go/apps/auction-item-stat-scraper/converter/converter.go +++ b/src/go/apps/auction-item-stat-scraper/converter/converter.go @@ -2,7 +2,7 @@ package converter import ( "fmt" - "log" + "log/slog" "github.com/KubrickCode/loa-work/src/go/libs/loadb" "github.com/KubrickCode/loa-work/src/go/libs/loadb/models" @@ -42,7 +42,7 @@ func (s *Converter) Start() error { } } - log.Println("Auction Item Stats Converted To Content Reward Item Price Done") + slog.Info("auction item stats converted to content reward item price") return nil }) @@ -91,6 +91,6 @@ func (s *Converter) updateAuctionItems(tx loadb.DB) error { } } - log.Println("Auction Items Updated With Recent Stats") + slog.Info("auction items updated with recent stats") return nil } diff --git a/src/go/apps/auction-item-stat-scraper/go.mod b/src/go/apps/auction-item-stat-scraper/go.mod index 59104702..e0e2beaf 100644 --- a/src/go/apps/auction-item-stat-scraper/go.mod +++ b/src/go/apps/auction-item-stat-scraper/go.mod @@ -9,11 +9,11 @@ require ( github.com/KubrickCode/loa-work/src/go/libs/loaApi v0.0.0 github.com/KubrickCode/loa-work/src/go/libs/loadb v0.0.0 github.com/KubrickCode/loa-work/src/go/libs/monitoring v0.0.0 + github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 github.com/KubrickCode/loa-work/src/go/libs/schedule v0.0.0 github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640 github.com/stretchr/testify v1.10.0 go.uber.org/mock v0.5.0 - golang.org/x/time v0.11.0 ) require ( @@ -54,6 +54,7 @@ require ( golang.org/x/net v0.33.0 // indirect golang.org/x/sys v0.33.0 // indirect golang.org/x/text v0.25.0 // indirect + golang.org/x/time v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect google.golang.org/protobuf v1.36.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/src/go/apps/auction-item-stat-scraper/go.sum b/src/go/apps/auction-item-stat-scraper/go.sum index 662f5976..4fe7098b 100644 --- a/src/go/apps/auction-item-stat-scraper/go.sum +++ b/src/go/apps/auction-item-stat-scraper/go.sum @@ -1,5 +1,8 @@ github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/KubrickCode/loa-work v0.6.0/go.mod h1:mPas6BO4aLkSEkMywgPiBTJhmNggG96TD+VY9/sYYuA= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 h1:WYpwceot0m65VAGE0/ZjYVP1EIqyM8xcv6sDAbTd1io= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213/go.mod h1:mCzEqNf/LoxckZqoWCc9LELHqFWwwuYlWmfxmrPMU8s= github.com/aarondl/inflect v0.0.2 h1:XvH8K5g1wKS921tMmDOUsZ3zS1Eo8WwK5RHC0IGGT2s= github.com/aarondl/inflect v0.0.2/go.mod h1:zjmCfdXHUDQ9jFOV6SeHknpo0Au6rQhV8GchS4Vzv/0= github.com/aarondl/null/v8 v8.1.3 h1:ZJcvvj34BkXAguqU7xzDqEmzG86cSBgM8HYxcqeK0+8= diff --git a/src/go/apps/auction-item-stat-scraper/main.go b/src/go/apps/auction-item-stat-scraper/main.go index 7c15a1ca..a89288b0 100644 --- a/src/go/apps/auction-item-stat-scraper/main.go +++ b/src/go/apps/auction-item-stat-scraper/main.go @@ -1,7 +1,8 @@ package main import ( - "log" + "log/slog" + "os" "strconv" "time" @@ -15,9 +16,12 @@ import ( ) func main() { + slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil))) + metricsPort, err := strconv.Atoi(env.GetEnvFallback("METRICS_PORT", "3002")) if err != nil { - log.Fatal(err) + slog.Error("failed to parse METRICS_PORT", "error", err) + os.Exit(1) } monitor := monitoring.NewMonitor("auction-item-stat-scraper", metricsPort) @@ -25,7 +29,8 @@ func main() { db, err := loadb.New() if err != nil { - log.Fatal(err) + slog.Error("failed to initialize database", "error", err) + os.Exit(1) } client := request.NewClient() @@ -43,6 +48,7 @@ func main() { scheduler.AddTask(schedule.NewTask("Auction item stat scraping and converting", 10*time.Minute, combinedTask)) if err := scheduler.Run(); err != nil { - log.Fatal(err) + slog.Error("scheduler failed", "error", err) + os.Exit(1) } } diff --git a/src/go/apps/auction-item-stat-scraper/scraper/scraper.go b/src/go/apps/auction-item-stat-scraper/scraper/scraper.go index a9e692cb..7ab33f39 100644 --- a/src/go/apps/auction-item-stat-scraper/scraper/scraper.go +++ b/src/go/apps/auction-item-stat-scraper/scraper/scraper.go @@ -3,7 +3,7 @@ package scraper import ( "context" "fmt" - "log" + "log/slog" "time" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" @@ -136,7 +136,7 @@ func (s *Scraper) saveItemStats(items []*models.AuctionItem) error { } } - log.Println("Auction item stat saved successfully") + slog.Info("auction item stat saved successfully") return nil }) } diff --git a/src/go/apps/market-item-category-scraper/go.mod b/src/go/apps/market-item-category-scraper/go.mod index 664c0c2c..b671f66e 100644 --- a/src/go/apps/market-item-category-scraper/go.mod +++ b/src/go/apps/market-item-category-scraper/go.mod @@ -1,36 +1,43 @@ module github.com/KubrickCode/loa-work/src/go/apps/market-item-category-scraper -go 1.23 +go 1.23.0 + +toolchain go1.23.12 require ( github.com/KubrickCode/loa-work/src/go/libs/loaApi v0.0.0 github.com/KubrickCode/loa-work/src/go/libs/loadb v0.0.0 + github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 ) require ( github.com/KubrickCode/loa-work/src/go/libs/env v0.0.0 // indirect github.com/KubrickCode/loa-work/src/go/libs/httpclient v0.0.0 // indirect + github.com/aarondl/inflect v0.0.2 // indirect + github.com/aarondl/null/v8 v8.1.3 // indirect + github.com/aarondl/randomize v0.0.2 // indirect + github.com/aarondl/sqlboiler/v4 v4.19.5 // indirect + github.com/aarondl/strmangle v0.0.9 // indirect + github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640 // indirect + github.com/friendsofgo/errors v0.9.2 // indirect github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.22.1 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.1 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect + github.com/gofrs/uuid v4.2.0+incompatible // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/leodido/go-urn v1.4.0 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/shopspring/decimal v1.4.0 // indirect + github.com/spf13/cast v1.5.0 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.38.0 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect - golang.org/x/text v0.20.0 // indirect - gorm.io/driver/postgres v1.5.9 // indirect - gorm.io/gorm v1.25.12 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect + golang.org/x/time v0.9.0 // indirect + golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect ) replace ( diff --git a/src/go/apps/market-item-category-scraper/go.sum b/src/go/apps/market-item-category-scraper/go.sum index 13f276e8..8dfc8209 100644 --- a/src/go/apps/market-item-category-scraper/go.sum +++ b/src/go/apps/market-item-category-scraper/go.sum @@ -1,6 +1,29 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM= +github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 h1:WYpwceot0m65VAGE0/ZjYVP1EIqyM8xcv6sDAbTd1io= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213/go.mod h1:mCzEqNf/LoxckZqoWCc9LELHqFWwwuYlWmfxmrPMU8s= +github.com/aarondl/inflect v0.0.2 h1:XvH8K5g1wKS921tMmDOUsZ3zS1Eo8WwK5RHC0IGGT2s= +github.com/aarondl/inflect v0.0.2/go.mod h1:zjmCfdXHUDQ9jFOV6SeHknpo0Au6rQhV8GchS4Vzv/0= +github.com/aarondl/null/v8 v8.1.3 h1:ZJcvvj34BkXAguqU7xzDqEmzG86cSBgM8HYxcqeK0+8= +github.com/aarondl/null/v8 v8.1.3/go.mod h1:t30s8PEiGWof1orkBNQ6WKpxjoP8UZHJr7D0AHX3G/A= +github.com/aarondl/randomize v0.0.2 h1:JP+3DMqbIMI/ndNFD3GojA8GXi3aRdN39wZL7EIw+HE= +github.com/aarondl/randomize v0.0.2/go.mod h1:/4icd0VTMi5WGrfWGK/YY8UsHghSck8EWSfi2AFVbUM= +github.com/aarondl/sqlboiler/v4 v4.19.5 h1:/UW1qvOA+ytXjhDg85E7fDW6iqIGP9xDdqFbtqZ3xL8= +github.com/aarondl/sqlboiler/v4 v4.19.5/go.mod h1:PqsFMK0K44NPrqcO24fnft2ePqK2avLvbqxWqsTXXHk= +github.com/aarondl/strmangle v0.0.9 h1:VCT+O1FqRSE9DTK3qR0zRHtB384fdRzuyKfx2ux2xms= +github.com/aarondl/strmangle v0.0.9/go.mod h1:ezNIwvvnuVGuKedP5qt2T+wvzPD8yuOoMzamifXNMlk= +github.com/apmckinlay/gsuneido v0.0.0-20190404155041-0b6cd442a18f/go.mod h1:JU2DOj5Fc6rol0yaT79Csr47QR0vONGwJtBNGRD7jmc= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640 h1:VMAacqPM03GapxpfNORtKNl9o6Uws1BQYL54WjmolN0= +github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640/go.mod h1:mdYyfAkzn9kyJ/kMk/7WE9ufl9lflh+2NvecQ5mAghs= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= +github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -11,48 +34,57 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= -github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= +github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= -github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= +golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8= -gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= -gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= -gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= diff --git a/src/go/apps/market-item-category-scraper/main.go b/src/go/apps/market-item-category-scraper/main.go index 01cc6f05..73fbcf7e 100644 --- a/src/go/apps/market-item-category-scraper/main.go +++ b/src/go/apps/market-item-category-scraper/main.go @@ -1,7 +1,8 @@ package main import ( - "log" + "log/slog" + "os" "github.com/KubrickCode/loa-work/src/go/apps/market-item-category-scraper/scraper" "github.com/KubrickCode/loa-work/src/go/libs/loaApi/request" @@ -9,9 +10,12 @@ import ( ) func main() { + slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil))) + db, err := loadb.New() if err != nil { - log.Fatal(err) + slog.Error("failed to initialize database", "error", err) + os.Exit(1) } client := request.NewClient() @@ -19,6 +23,7 @@ func main() { err = scraper.Start() if err != nil { - log.Fatal(err) + slog.Error("scraper failed", "error", err) + os.Exit(1) } } diff --git a/src/go/apps/market-item-category-scraper/scraper/scraper.go b/src/go/apps/market-item-category-scraper/scraper/scraper.go index d0097bc0..aa474776 100644 --- a/src/go/apps/market-item-category-scraper/scraper/scraper.go +++ b/src/go/apps/market-item-category-scraper/scraper/scraper.go @@ -4,7 +4,7 @@ import ( "context" "errors" "fmt" - "log" + "log/slog" "time" "github.com/KubrickCode/loa-work/src/go/libs/loaApi/request" @@ -45,7 +45,7 @@ func (s *Scraper) Start() error { return fmt.Errorf("failed to create market item categories: %w", err) } - log.Println("Market item categories created successfully") + slog.Info("market item categories created successfully") return nil } diff --git a/src/go/apps/market-item-scraper/go.mod b/src/go/apps/market-item-scraper/go.mod index 228485b8..10664855 100644 --- a/src/go/apps/market-item-scraper/go.mod +++ b/src/go/apps/market-item-scraper/go.mod @@ -1,36 +1,43 @@ module github.com/KubrickCode/loa-work/src/go/apps/market-item-scraper -go 1.23 +go 1.23.0 + +toolchain go1.23.12 require ( github.com/KubrickCode/loa-work/src/go/libs/loaApi v0.0.0 github.com/KubrickCode/loa-work/src/go/libs/loadb v0.0.0 + github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 ) require ( github.com/KubrickCode/loa-work/src/go/libs/env v0.0.0 // indirect github.com/KubrickCode/loa-work/src/go/libs/httpclient v0.0.0 // indirect + github.com/aarondl/inflect v0.0.2 // indirect + github.com/aarondl/null/v8 v8.1.3 // indirect + github.com/aarondl/randomize v0.0.2 // indirect + github.com/aarondl/sqlboiler/v4 v4.19.5 // indirect + github.com/aarondl/strmangle v0.0.9 // indirect + github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640 // indirect + github.com/friendsofgo/errors v0.9.2 // indirect github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.22.1 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.1 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect + github.com/gofrs/uuid v4.2.0+incompatible // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/leodido/go-urn v1.4.0 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/shopspring/decimal v1.4.0 // indirect + github.com/spf13/cast v1.5.0 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.38.0 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect - golang.org/x/text v0.20.0 // indirect - gorm.io/driver/postgres v1.5.9 // indirect - gorm.io/gorm v1.25.12 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect + golang.org/x/time v0.9.0 // indirect + golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect ) replace ( diff --git a/src/go/apps/market-item-scraper/go.sum b/src/go/apps/market-item-scraper/go.sum index 13f276e8..8dfc8209 100644 --- a/src/go/apps/market-item-scraper/go.sum +++ b/src/go/apps/market-item-scraper/go.sum @@ -1,6 +1,29 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM= +github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 h1:WYpwceot0m65VAGE0/ZjYVP1EIqyM8xcv6sDAbTd1io= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213/go.mod h1:mCzEqNf/LoxckZqoWCc9LELHqFWwwuYlWmfxmrPMU8s= +github.com/aarondl/inflect v0.0.2 h1:XvH8K5g1wKS921tMmDOUsZ3zS1Eo8WwK5RHC0IGGT2s= +github.com/aarondl/inflect v0.0.2/go.mod h1:zjmCfdXHUDQ9jFOV6SeHknpo0Au6rQhV8GchS4Vzv/0= +github.com/aarondl/null/v8 v8.1.3 h1:ZJcvvj34BkXAguqU7xzDqEmzG86cSBgM8HYxcqeK0+8= +github.com/aarondl/null/v8 v8.1.3/go.mod h1:t30s8PEiGWof1orkBNQ6WKpxjoP8UZHJr7D0AHX3G/A= +github.com/aarondl/randomize v0.0.2 h1:JP+3DMqbIMI/ndNFD3GojA8GXi3aRdN39wZL7EIw+HE= +github.com/aarondl/randomize v0.0.2/go.mod h1:/4icd0VTMi5WGrfWGK/YY8UsHghSck8EWSfi2AFVbUM= +github.com/aarondl/sqlboiler/v4 v4.19.5 h1:/UW1qvOA+ytXjhDg85E7fDW6iqIGP9xDdqFbtqZ3xL8= +github.com/aarondl/sqlboiler/v4 v4.19.5/go.mod h1:PqsFMK0K44NPrqcO24fnft2ePqK2avLvbqxWqsTXXHk= +github.com/aarondl/strmangle v0.0.9 h1:VCT+O1FqRSE9DTK3qR0zRHtB384fdRzuyKfx2ux2xms= +github.com/aarondl/strmangle v0.0.9/go.mod h1:ezNIwvvnuVGuKedP5qt2T+wvzPD8yuOoMzamifXNMlk= +github.com/apmckinlay/gsuneido v0.0.0-20190404155041-0b6cd442a18f/go.mod h1:JU2DOj5Fc6rol0yaT79Csr47QR0vONGwJtBNGRD7jmc= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640 h1:VMAacqPM03GapxpfNORtKNl9o6Uws1BQYL54WjmolN0= +github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640/go.mod h1:mdYyfAkzn9kyJ/kMk/7WE9ufl9lflh+2NvecQ5mAghs= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= +github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -11,48 +34,57 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= -github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= +github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= -github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= +golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8= -gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= -gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= -gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= diff --git a/src/go/apps/market-item-scraper/main.go b/src/go/apps/market-item-scraper/main.go index f96029fc..b7010e29 100644 --- a/src/go/apps/market-item-scraper/main.go +++ b/src/go/apps/market-item-scraper/main.go @@ -1,7 +1,8 @@ package main import ( - "log" + "log/slog" + "os" "github.com/KubrickCode/loa-work/src/go/apps/market-item-scraper/scraper" "github.com/KubrickCode/loa-work/src/go/libs/loaApi/request" @@ -9,9 +10,12 @@ import ( ) func main() { + slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil))) + db, err := loadb.New() if err != nil { - log.Fatal(err) + slog.Error("failed to initialize database", "error", err) + os.Exit(1) } client := request.NewClient() @@ -19,6 +23,7 @@ func main() { err = scraper.Start() if err != nil { - log.Fatal(err) + slog.Error("scraper failed", "error", err) + os.Exit(1) } } diff --git a/src/go/apps/market-item-scraper/scraper/scraper.go b/src/go/apps/market-item-scraper/scraper/scraper.go index a85fd8f6..cdc6ad8d 100644 --- a/src/go/apps/market-item-scraper/scraper/scraper.go +++ b/src/go/apps/market-item-scraper/scraper/scraper.go @@ -3,7 +3,7 @@ package scraper import ( "context" "fmt" - "log" + "log/slog" "time" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" @@ -91,8 +91,7 @@ func (s *Scraper) getItemsToSave(categories []*models.MarketItemCategory) ([]*mo uniqueKey := fmt.Sprintf("%s-%s", item.Name, item.Grade) if seenItems[uniqueKey] { - log.Printf("중복 아이템 스킵: 이름=%s, 등급=%s, ID=%d", - item.Name, item.Grade, item.ID) + slog.Debug("duplicate item skipped", "name", item.Name, "grade", item.Grade, "id", item.ID) continue } @@ -124,7 +123,7 @@ func (s *Scraper) getItemsToSave(categories []*models.MarketItemCategory) ([]*mo } func (s *Scraper) saveItems(items []*models.MarketItem) error { - log.Println("Market items saved successfully") + slog.Info("market items saved successfully") return s.db.MarketItem().UpsertMany(items) } diff --git a/src/go/apps/market-item-stat-scraper/converter/converter.go b/src/go/apps/market-item-stat-scraper/converter/converter.go index 69b2b5fe..bc21efef 100644 --- a/src/go/apps/market-item-stat-scraper/converter/converter.go +++ b/src/go/apps/market-item-stat-scraper/converter/converter.go @@ -1,7 +1,7 @@ package converter import ( - "log" + "log/slog" "github.com/KubrickCode/loa-work/src/go/libs/loadb" "github.com/KubrickCode/loa-work/src/go/libs/loadb/models" @@ -47,7 +47,7 @@ func (s *Converter) Start() error { } } - log.Println("Market Item Stats Converted To Content Reward Item Price Done") + slog.Info("market item stats converted to content reward item price") return nil }) @@ -107,7 +107,7 @@ func (s *Converter) updateMarketItems(tx loadb.DB) error { } } - log.Println("Market Item Stats Converted To Market Item Done") + slog.Info("market item stats converted to market item") return nil } diff --git a/src/go/apps/market-item-stat-scraper/go.mod b/src/go/apps/market-item-stat-scraper/go.mod index 41185178..0975b585 100644 --- a/src/go/apps/market-item-stat-scraper/go.mod +++ b/src/go/apps/market-item-stat-scraper/go.mod @@ -9,11 +9,11 @@ require ( github.com/KubrickCode/loa-work/src/go/libs/loaApi v0.0.0 github.com/KubrickCode/loa-work/src/go/libs/loadb v0.0.0 github.com/KubrickCode/loa-work/src/go/libs/monitoring v0.0.0 + github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 github.com/KubrickCode/loa-work/src/go/libs/schedule v0.0.0 github.com/ericlagergren/decimal v0.0.0-20190420051523-6335edbaa640 github.com/stretchr/testify v1.10.0 go.uber.org/mock v0.5.0 - golang.org/x/time v0.11.0 ) require ( @@ -54,6 +54,7 @@ require ( golang.org/x/net v0.33.0 // indirect golang.org/x/sys v0.33.0 // indirect golang.org/x/text v0.25.0 // indirect + golang.org/x/time v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect google.golang.org/protobuf v1.36.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/src/go/apps/market-item-stat-scraper/go.sum b/src/go/apps/market-item-stat-scraper/go.sum index 662f5976..4fe7098b 100644 --- a/src/go/apps/market-item-stat-scraper/go.sum +++ b/src/go/apps/market-item-stat-scraper/go.sum @@ -1,5 +1,8 @@ github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/KubrickCode/loa-work v0.6.0/go.mod h1:mPas6BO4aLkSEkMywgPiBTJhmNggG96TD+VY9/sYYuA= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213 h1:WYpwceot0m65VAGE0/ZjYVP1EIqyM8xcv6sDAbTd1io= +github.com/KubrickCode/loa-work/src/go/libs/ratelimit v0.0.0-20251127142251-a379535be213/go.mod h1:mCzEqNf/LoxckZqoWCc9LELHqFWwwuYlWmfxmrPMU8s= github.com/aarondl/inflect v0.0.2 h1:XvH8K5g1wKS921tMmDOUsZ3zS1Eo8WwK5RHC0IGGT2s= github.com/aarondl/inflect v0.0.2/go.mod h1:zjmCfdXHUDQ9jFOV6SeHknpo0Au6rQhV8GchS4Vzv/0= github.com/aarondl/null/v8 v8.1.3 h1:ZJcvvj34BkXAguqU7xzDqEmzG86cSBgM8HYxcqeK0+8= diff --git a/src/go/apps/market-item-stat-scraper/main.go b/src/go/apps/market-item-stat-scraper/main.go index 567113c6..6f145c63 100644 --- a/src/go/apps/market-item-stat-scraper/main.go +++ b/src/go/apps/market-item-stat-scraper/main.go @@ -1,7 +1,8 @@ package main import ( - "log" + "log/slog" + "os" "strconv" "time" @@ -15,9 +16,12 @@ import ( ) func main() { + slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil))) + metricsPort, err := strconv.Atoi(env.GetEnvFallback("METRICS_PORT", "3003")) if err != nil { - log.Fatal(err) + slog.Error("failed to parse METRICS_PORT", "error", err) + os.Exit(1) } monitor := monitoring.NewMonitor("market-item-stat-scraper", metricsPort) @@ -25,7 +29,8 @@ func main() { db, err := loadb.New() if err != nil { - log.Fatal(err) + slog.Error("failed to initialize database", "error", err) + os.Exit(1) } client := request.NewClient() @@ -47,6 +52,7 @@ func main() { scheduler.AddTask(schedule.NewTask("Market item scraping and converting", 1*time.Hour, scraper.ScrapeItem)) if err := scheduler.Run(); err != nil { - log.Fatal(err) + slog.Error("scheduler failed", "error", err) + os.Exit(1) } } diff --git a/src/go/apps/market-item-stat-scraper/scraper/scraper.go b/src/go/apps/market-item-stat-scraper/scraper/scraper.go index 4210a659..937fccce 100644 --- a/src/go/apps/market-item-stat-scraper/scraper/scraper.go +++ b/src/go/apps/market-item-stat-scraper/scraper/scraper.go @@ -3,7 +3,7 @@ package scraper import ( "context" "fmt" - "log" + "log/slog" "time" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" @@ -90,7 +90,7 @@ func (s *Scraper) saveItemStats(items []*models.MarketItem) error { } } - log.Println("Market item stat saved successfully") + slog.Info("market item stat saved successfully") return nil } @@ -184,8 +184,7 @@ func (s *Scraper) getItemsToSave(categories []*models.MarketItemCategory) ([]*mo uniqueKey := fmt.Sprintf("%s-%s", item.Name, item.Grade) if seenItems[uniqueKey] { - log.Printf("중복 아이템 스킵: 이름=%s, 등급=%s, ID=%d", - item.Name, item.Grade, item.ID) + slog.Debug("duplicate item skipped", "name", item.Name, "grade", item.Grade, "id", item.ID) continue } @@ -217,7 +216,7 @@ func (s *Scraper) getItemsToSave(categories []*models.MarketItemCategory) ([]*mo } func (s *Scraper) saveItems(items []*models.MarketItem) error { - log.Println("Market items saved successfully") + slog.Info("market items saved successfully") return s.db.MarketItem().UpsertMany(items) } diff --git a/src/go/libs/http-client/client.go b/src/go/libs/http-client/client.go index 1b4fe89e..47f0445d 100644 --- a/src/go/libs/http-client/client.go +++ b/src/go/libs/http-client/client.go @@ -5,20 +5,21 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" - "log" + "log/slog" "net/http" "time" "github.com/go-playground/validator/v10" "github.com/hashicorp/go-retryablehttp" - "github.com/pkg/errors" ) const ( - maxRetries = 5 - retryInterval = time.Minute * 1 - timeOut = time.Second * 30 + maxRetries = 5 + retryInterval = time.Minute * 1 + timeOut = time.Second * 30 + maxBodyInError = 1024 ) type Client struct { @@ -34,7 +35,7 @@ func NewClient() *Client { retryClient.Logger = nil retryClient.CheckRetry = func(ctx context.Context, resp *http.Response, err error) (bool, error) { if err != nil { - log.Printf("failed to send request: %s, retrying in %v...", err, retryInterval) + slog.Warn("request failed, retrying", "error", err, "retryInterval", retryInterval) return true, nil } if resp.StatusCode < 200 || resp.StatusCode >= 300 { @@ -42,8 +43,8 @@ func NewClient() *Client { resp.Body.Close() resp.Body = io.NopCloser(bytes.NewReader(bodyBytes)) - log.Printf("failed to send request: received non-2xx response status: %v body: %s, retrying in %v...", - resp.StatusCode, string(bodyBytes), retryInterval) + slog.Warn("received non-2xx response, retrying", + "status", resp.StatusCode, "body", truncateBody(bodyBytes), "retryInterval", retryInterval) return true, nil } return false, nil @@ -57,12 +58,12 @@ func NewClient() *Client { func (c *Client) Do(req *http.Request, out interface{}) error { retryReq, err := retryablehttp.FromRequest(req) if err != nil { - return errors.Wrapf(err, "failed to convert request") + return fmt.Errorf("http-client: convert request: %w", err) } resp, err := c.Client.Do(retryReq) if err != nil { - return err + return fmt.Errorf("http-client: do request: %w", err) } defer resp.Body.Close() @@ -72,7 +73,7 @@ func (c *Client) Do(req *http.Request, out interface{}) error { func (c *Client) DoRaw(req *http.Request) (resp *http.Response, err error) { retryReq, err := retryablehttp.FromRequest(req) if err != nil { - return nil, errors.Wrapf(err, "failed to convert request") + return nil, fmt.Errorf("http-client: convert request: %w", err) } return c.Client.Do(retryReq) @@ -81,21 +82,28 @@ func (c *Client) DoRaw(req *http.Request) (resp *http.Response, err error) { func parseResponse(body io.Reader, out interface{}) error { bodyBytes, err := io.ReadAll(body) if err != nil { - return errors.Wrapf(err, "failed to read response body") + return fmt.Errorf("http-client: read response body: %w", err) } decoder := json.NewDecoder(bufio.NewReader(bytes.NewBuffer(bodyBytes))) decoder.DisallowUnknownFields() err = decoder.Decode(out) if err != nil { - return errors.Wrapf(err, "failed to decode JSON response: %s", string(bodyBytes)) + return fmt.Errorf("http-client: decode JSON response [%s]: %w", truncateBody(bodyBytes), err) } validate := validator.New(validator.WithRequiredStructEnabled()) err = validate.Struct(out) if err != nil { - return errors.Wrapf(err, "validation failed: %s", string(bodyBytes)) + return fmt.Errorf("http-client: validation failed [%s]: %w", truncateBody(bodyBytes), err) } return nil } + +func truncateBody(body []byte) string { + if len(body) > maxBodyInError { + return string(body[:maxBodyInError]) + "..." + } + return string(body) +} diff --git a/src/go/libs/http-client/go.mod b/src/go/libs/http-client/go.mod index 7d7b8c6b..3e2b11a5 100644 --- a/src/go/libs/http-client/go.mod +++ b/src/go/libs/http-client/go.mod @@ -5,7 +5,6 @@ go 1.23 require ( github.com/go-playground/validator/v10 v10.22.1 github.com/hashicorp/go-retryablehttp v0.7.7 - github.com/pkg/errors v0.9.1 ) require ( diff --git a/src/go/libs/http-client/go.sum b/src/go/libs/http-client/go.sum index cb1eee91..fa84ced7 100644 --- a/src/go/libs/http-client/go.sum +++ b/src/go/libs/http-client/go.sum @@ -24,8 +24,6 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= diff --git a/src/go/libs/loa-api/client.go b/src/go/libs/loa-api/client.go index f6f44133..1d08eb47 100644 --- a/src/go/libs/loa-api/client.go +++ b/src/go/libs/loa-api/client.go @@ -7,7 +7,6 @@ import ( "github.com/KubrickCode/loa-work/src/go/libs/env" "github.com/KubrickCode/loa-work/src/go/libs/httpclient" - "github.com/pkg/errors" ) const loaApiBaseURL = "https://developer-lostark.game.onstove.com" @@ -42,7 +41,7 @@ func (c *Client) Do(req *http.Request, out interface{}) error { _, err = json.Marshal(out) if err != nil { - return errors.Wrapf(err, "failed to marshal output to check ResponseBase") + return fmt.Errorf("loa-api: marshal output: %w", err) } return nil diff --git a/src/go/libs/loa-api/go.mod b/src/go/libs/loa-api/go.mod index 576703c7..59298e96 100644 --- a/src/go/libs/loa-api/go.mod +++ b/src/go/libs/loa-api/go.mod @@ -9,7 +9,6 @@ go 1.23 require ( github.com/KubrickCode/loa-work/src/go/libs/env v0.0.0-00010101000000-000000000000 github.com/KubrickCode/loa-work/src/go/libs/httpclient v0.0.0-00010101000000-000000000000 - github.com/pkg/errors v0.9.1 ) require ( diff --git a/src/go/libs/loa-api/go.sum b/src/go/libs/loa-api/go.sum index cb1eee91..fa84ced7 100644 --- a/src/go/libs/loa-api/go.sum +++ b/src/go/libs/loa-api/go.sum @@ -24,8 +24,6 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= diff --git a/src/go/libs/loa-api/request/get-auction-item-list.go b/src/go/libs/loa-api/request/get-auction-item-list.go index 574e833c..3eef6af5 100644 --- a/src/go/libs/loa-api/request/get-auction-item-list.go +++ b/src/go/libs/loa-api/request/get-auction-item-list.go @@ -1,10 +1,10 @@ package request import ( + "fmt" "net/http" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" - "github.com/pkg/errors" ) func (c *Client) GetAuctionItemList(params *loaApi.GetAuctionItemListParams) (*loaApi.GetAuctionItemListResponse, error) { @@ -14,12 +14,12 @@ func (c *Client) GetAuctionItemList(params *loaApi.GetAuctionItemListParams) (*l JSON(params). Build() if err != nil { - return nil, errors.Wrap(err, "RequestBuilder") + return nil, fmt.Errorf("loa-api: build request: %w", err) } var resp loaApi.GetAuctionItemListResponse if err = c.api.Do(req, &resp); err != nil { - return nil, errors.Wrap(err, "GetAuctionItemList") + return nil, fmt.Errorf("loa-api: get auction item list: %w", err) } return &resp, nil diff --git a/src/go/libs/loa-api/request/get-category-list.go b/src/go/libs/loa-api/request/get-category-list.go index 537ee1c9..23d0769b 100644 --- a/src/go/libs/loa-api/request/get-category-list.go +++ b/src/go/libs/loa-api/request/get-category-list.go @@ -1,10 +1,10 @@ package request import ( + "fmt" "net/http" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" - "github.com/pkg/errors" ) func (c *Client) GetCategoryList() (*loaApi.GetCategoryListResponse, error) { @@ -13,12 +13,12 @@ func (c *Client) GetCategoryList() (*loaApi.GetCategoryListResponse, error) { Path("/markets/options"). Build() if err != nil { - return nil, errors.Wrap(err, "RequestBuilder") + return nil, fmt.Errorf("loa-api: build request: %w", err) } var resp loaApi.GetCategoryListResponse if err = c.api.Do(req, &resp); err != nil { - return nil, errors.Wrap(err, "GetCategoryList") + return nil, fmt.Errorf("loa-api: get category list: %w", err) } return &resp, nil diff --git a/src/go/libs/loa-api/request/get-market-item-list.go b/src/go/libs/loa-api/request/get-market-item-list.go index 5b1fa8de..ed3ba58b 100644 --- a/src/go/libs/loa-api/request/get-market-item-list.go +++ b/src/go/libs/loa-api/request/get-market-item-list.go @@ -1,10 +1,10 @@ package request import ( + "fmt" "net/http" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" - "github.com/pkg/errors" ) func (c *Client) GetMarketItemList(params *loaApi.GetMarketItemListParams) (*loaApi.GetMarketItemListResponse, error) { @@ -14,12 +14,12 @@ func (c *Client) GetMarketItemList(params *loaApi.GetMarketItemListParams) (*loa JSON(params). Build() if err != nil { - return nil, errors.Wrap(err, "RequestBuilder") + return nil, fmt.Errorf("loa-api: build request: %w", err) } var resp loaApi.GetMarketItemListResponse if err = c.api.Do(req, &resp); err != nil { - return nil, errors.Wrap(err, "GetMarketItemList") + return nil, fmt.Errorf("loa-api: get market item list: %w", err) } return &resp, nil diff --git a/src/go/libs/loa-api/request/get-market-item.go b/src/go/libs/loa-api/request/get-market-item.go index 435e10ed..8688dc20 100644 --- a/src/go/libs/loa-api/request/get-market-item.go +++ b/src/go/libs/loa-api/request/get-market-item.go @@ -5,7 +5,6 @@ import ( "net/http" "github.com/KubrickCode/loa-work/src/go/libs/loaApi" - "github.com/pkg/errors" ) // 특정 거래소 아이템 정보를 조회하는 API. @@ -17,20 +16,20 @@ func (c *Client) GetMarketItem(params *loaApi.GetMarketItemParams) (*loaApi.GetM JSON(params). Build() if err != nil { - return nil, errors.Wrap(err, "RequestBuilder") + return nil, fmt.Errorf("loa-api: build request: %w", err) } var resp loaApi.GetMarketItemListResponse if err = c.api.Do(req, &resp); err != nil { - return nil, errors.Wrap(err, "GetMarketItem") + return nil, fmt.Errorf("loa-api: get market item: %w", err) } if len(resp.Items) == 0 { - return nil, fmt.Errorf("no items found for params: %+v", params) + return nil, fmt.Errorf("loa-api: no items found for params: %+v", params) } if len(resp.Items) > 1 { - return nil, fmt.Errorf("multiple items found for params: %+v", params) + return nil, fmt.Errorf("loa-api: multiple items found for params: %+v", params) } return &resp.Items[0], nil diff --git a/src/go/libs/monitoring/monitor.go b/src/go/libs/monitoring/monitor.go index d4613ba7..296b4e92 100644 --- a/src/go/libs/monitoring/monitor.go +++ b/src/go/libs/monitoring/monitor.go @@ -2,7 +2,7 @@ package monitoring import ( "fmt" - "log" + "log/slog" "net/http" "sync" "time" @@ -60,9 +60,9 @@ func (m *Monitor) Start() { m.serviceUp.WithLabelValues(m.jobName).Set(1) go func() { http.Handle("/metrics", promhttp.Handler()) - log.Printf("Starting metrics server on :%d for job %s", m.metricsPort, m.jobName) + slog.Info("starting metrics server", "port", m.metricsPort, "job", m.jobName) if err := http.ListenAndServe(fmt.Sprintf(":%d", m.metricsPort), nil); err != nil { - log.Fatalf("Failed to start metrics server: %v", err) + slog.Error("failed to start metrics server", "error", err) m.SetServiceUp(false) } }() @@ -76,11 +76,11 @@ func (m *Monitor) MonitorTask(task Task) error { if err != nil { m.IncrementFailure() m.SetServiceUp(false) - log.Printf("Task failed for job %s: %v", m.jobName, err) + slog.Error("task failed", "job", m.jobName, "error", err) } else { m.IncrementSuccess() m.SetServiceUp(true) - log.Printf("Task completed for job %s in %v", m.jobName, time.Since(startTime)) + slog.Info("task completed", "job", m.jobName, "duration", time.Since(startTime)) } return err } diff --git a/src/go/libs/schedule/schedule.go b/src/go/libs/schedule/schedule.go index a8d893f0..fff6140e 100644 --- a/src/go/libs/schedule/schedule.go +++ b/src/go/libs/schedule/schedule.go @@ -1,7 +1,7 @@ package schedule import ( - "log" + "log/slog" "os" "os/signal" "syscall" @@ -55,14 +55,14 @@ func (s *Scheduler) Run() error { gocron.WithStartAt(gocron.WithStartImmediately()), gocron.WithEventListeners( gocron.AfterJobRunsWithError(func(jobID uuid.UUID, jobName string, err error) { - log.Printf("job failed: name=%s, error=%v", jobName, err) + slog.Error("job failed", "name", jobName, "error", err) }), ), ) if err != nil { return err } - log.Printf("%s started.", task.Name) + slog.Info("job started", "name", task.Name) } s.s.Start() @@ -71,6 +71,6 @@ func (s *Scheduler) Run() error { signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT) <-sigChan - log.Println("Shutting down scheduler...") + slog.Info("shutting down scheduler...") return s.s.Shutdown() }