From e75518d2c2bdb3189806d49599e127262d0990c7 Mon Sep 17 00:00:00 2001 From: mayr0y Date: Fri, 25 Aug 2023 17:38:16 +0300 Subject: [PATCH 1/3] added multichecker and greetings --- cmd/agent/main.go | 12 ++++ cmd/server/main.go | 13 +++++ cmd/staticlint/main.go | 22 ++++++++ go.mod | 7 +++ go.sum | 10 ++++ internal/analyzer/analysis.go | 90 ++++++++++++++++++++++++++++++ internal/analyzer/analyzer_test.go | 12 ++++ internal/analyzer/maincheck.go | 39 +++++++++++++ internal/analyzer/staticcheck.go | 20 +++++++ internal/analyzer/testdata/main.go | 9 +++ internal/greetings/greetings.go | 40 +++++++++++++ 11 files changed, 274 insertions(+) create mode 100644 cmd/staticlint/main.go create mode 100644 internal/analyzer/analysis.go create mode 100644 internal/analyzer/analyzer_test.go create mode 100644 internal/analyzer/maincheck.go create mode 100644 internal/analyzer/staticcheck.go create mode 100644 internal/analyzer/testdata/main.go create mode 100644 internal/greetings/greetings.go diff --git a/cmd/agent/main.go b/cmd/agent/main.go index 9d43b8b..bc5f53a 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -2,13 +2,21 @@ package main import ( "context" + "log" "os/signal" "syscall" + "github.com/mayr0y/animated-octo-couscous.git/internal/greetings" "github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent" "github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config" ) +var ( + buildVersion string + buildDate string + buildCommit string +) + func main() { ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, @@ -17,6 +25,10 @@ func main() { ) defer stop() + if err := greetings.Hello(buildVersion, buildDate, buildCommit); err != nil { + log.Fatal(err) + } + cfg := config.NewAgentConfig() agent.StartClient(ctx, cfg) } diff --git a/cmd/server/main.go b/cmd/server/main.go index f5e9fe0..008132d 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,11 +1,24 @@ package main import ( + "log" + + "github.com/mayr0y/animated-octo-couscous.git/internal/greetings" "github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server" "github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config" ) +var ( + buildVersion string + buildDate string + buildCommit string +) + func main() { + if err := greetings.Hello(buildVersion, buildDate, buildCommit); err != nil { + log.Fatal(err) + } + cfg := config.NewServerConfig() server.StartListener(cfg) } diff --git a/cmd/staticlint/main.go b/cmd/staticlint/main.go new file mode 100644 index 0000000..f52fb94 --- /dev/null +++ b/cmd/staticlint/main.go @@ -0,0 +1,22 @@ +package main + +import ( + "github.com/mayr0y/animated-octo-couscous.git/internal/analyzer" + "golang.org/x/tools/go/analysis" + "golang.org/x/tools/go/analysis/multichecker" +) + +func main() { + multichecker.Main( + GetAnalyzers()..., + ) +} + +func GetAnalyzers() []*analysis.Analyzer { + var analyzersSlice []*analysis.Analyzer + analyzersSlice = append(analyzersSlice, analyzer.GetAnalysis()...) + analyzersSlice = append(analyzersSlice, analyzer.GetStaticCheckAnalyzers()...) + analyzersSlice = append(analyzersSlice, analyzer.ExitCheck) + + return analyzersSlice +} diff --git a/go.mod b/go.mod index 1b33d4d..cd2b6c8 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,12 @@ require ( github.com/jackc/pgx/v5 v5.3.1 github.com/shirou/gopsutil/v3 v3.23.5 github.com/sirupsen/logrus v1.9.2 + golang.org/x/tools v0.9.4-0.20230601214343-86c93e8732cc +) + +require ( + golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a // indirect + golang.org/x/mod v0.10.0 // indirect ) require ( @@ -23,4 +29,5 @@ require ( golang.org/x/crypto v0.6.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.7.0 // indirect + honnef.co/go/tools v0.4.5 ) diff --git a/go.sum b/go.sum index b6da1f4..9764890 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/caarlos0/env/v6 v6.10.1 h1:t1mPSxNpei6M5yAeu1qtRdPAK29Nbcf/n3G7x+b3/II= github.com/caarlos0/env/v6 v6.10.1/go.mod h1:hvp/ryKXKipEkcuYjs9mI4bBCg+UI0Yhgm5Zu0ddvwc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -47,6 +48,11 @@ github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFi github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE= +golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -55,8 +61,12 @@ golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.9.4-0.20230601214343-86c93e8732cc h1:mqZawFxUzsv+YVwGQO30cZegeV/YD6dAwsdGxi0tQQg= +golang.org/x/tools v0.9.4-0.20230601214343-86c93e8732cc/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.4.5 h1:YGD4H+SuIOOqsyoLOpZDWcieM28W47/zRO7f+9V3nvo= +honnef.co/go/tools v0.4.5/go.mod h1:GUV+uIBCLpdf0/v6UhHHG/yzI/z6qPskBeQCjcNB96k= diff --git a/internal/analyzer/analysis.go b/internal/analyzer/analysis.go new file mode 100644 index 0000000..9e79f14 --- /dev/null +++ b/internal/analyzer/analysis.go @@ -0,0 +1,90 @@ +package analyzer + +import ( + "golang.org/x/tools/go/analysis" + "golang.org/x/tools/go/analysis/passes/asmdecl" + "golang.org/x/tools/go/analysis/passes/assign" + "golang.org/x/tools/go/analysis/passes/atomic" + "golang.org/x/tools/go/analysis/passes/atomicalign" + "golang.org/x/tools/go/analysis/passes/bools" + "golang.org/x/tools/go/analysis/passes/buildssa" + "golang.org/x/tools/go/analysis/passes/buildtag" + "golang.org/x/tools/go/analysis/passes/cgocall" + "golang.org/x/tools/go/analysis/passes/composite" + "golang.org/x/tools/go/analysis/passes/copylock" + "golang.org/x/tools/go/analysis/passes/ctrlflow" + "golang.org/x/tools/go/analysis/passes/deepequalerrors" + "golang.org/x/tools/go/analysis/passes/errorsas" + "golang.org/x/tools/go/analysis/passes/fieldalignment" + "golang.org/x/tools/go/analysis/passes/findcall" + "golang.org/x/tools/go/analysis/passes/framepointer" + "golang.org/x/tools/go/analysis/passes/httpresponse" + "golang.org/x/tools/go/analysis/passes/ifaceassert" + "golang.org/x/tools/go/analysis/passes/inspect" + "golang.org/x/tools/go/analysis/passes/loopclosure" + "golang.org/x/tools/go/analysis/passes/lostcancel" + "golang.org/x/tools/go/analysis/passes/nilfunc" + "golang.org/x/tools/go/analysis/passes/nilness" + "golang.org/x/tools/go/analysis/passes/pkgfact" + "golang.org/x/tools/go/analysis/passes/printf" + "golang.org/x/tools/go/analysis/passes/reflectvaluecompare" + "golang.org/x/tools/go/analysis/passes/shadow" + "golang.org/x/tools/go/analysis/passes/shift" + "golang.org/x/tools/go/analysis/passes/sigchanyzer" + "golang.org/x/tools/go/analysis/passes/sortslice" + "golang.org/x/tools/go/analysis/passes/stdmethods" + "golang.org/x/tools/go/analysis/passes/stringintconv" + "golang.org/x/tools/go/analysis/passes/structtag" + "golang.org/x/tools/go/analysis/passes/testinggoroutine" + "golang.org/x/tools/go/analysis/passes/tests" + "golang.org/x/tools/go/analysis/passes/unmarshal" + "golang.org/x/tools/go/analysis/passes/unreachable" + "golang.org/x/tools/go/analysis/passes/unsafeptr" + "golang.org/x/tools/go/analysis/passes/unusedresult" + "golang.org/x/tools/go/analysis/passes/unusedwrite" +) + +func GetAnalysis() []*analysis.Analyzer { + return []*analysis.Analyzer{ + asmdecl.Analyzer, + assign.Analyzer, + atomic.Analyzer, + atomicalign.Analyzer, + bools.Analyzer, + buildssa.Analyzer, + buildtag.Analyzer, + cgocall.Analyzer, + composite.Analyzer, + copylock.Analyzer, + ctrlflow.Analyzer, + deepequalerrors.Analyzer, + errorsas.Analyzer, + fieldalignment.Analyzer, + findcall.Analyzer, + framepointer.Analyzer, + httpresponse.Analyzer, + ifaceassert.Analyzer, + inspect.Analyzer, + loopclosure.Analyzer, + lostcancel.Analyzer, + nilfunc.Analyzer, + nilness.Analyzer, + pkgfact.Analyzer, + printf.Analyzer, + reflectvaluecompare.Analyzer, + shadow.Analyzer, + shift.Analyzer, + sigchanyzer.Analyzer, + sortslice.Analyzer, + stdmethods.Analyzer, + stringintconv.Analyzer, + structtag.Analyzer, + testinggoroutine.Analyzer, + tests.Analyzer, + unmarshal.Analyzer, + unreachable.Analyzer, + unsafeptr.Analyzer, + unusedresult.Analyzer, + unusedwrite.Analyzer, + } +} diff --git a/internal/analyzer/analyzer_test.go b/internal/analyzer/analyzer_test.go new file mode 100644 index 0000000..06c3cc0 --- /dev/null +++ b/internal/analyzer/analyzer_test.go @@ -0,0 +1,12 @@ +package analyzer_test + +import ( + "testing" + + "github.com/mayr0y/animated-octo-couscous.git/internal/analyzer" + "golang.org/x/tools/go/analysis/analysistest" +) + +func TestExitAnalyzer(t *testing.T) { + analysistest.Run(t, analysistest.TestData(), analyzer.ExitCheck, "./...") +} diff --git a/internal/analyzer/maincheck.go b/internal/analyzer/maincheck.go new file mode 100644 index 0000000..78794fc --- /dev/null +++ b/internal/analyzer/maincheck.go @@ -0,0 +1,39 @@ +package analyzer + +import ( + "go/ast" + "strings" + + "golang.org/x/tools/go/analysis" + "honnef.co/go/tools/analysis/code" +) + +var ExitCheck = &analysis.Analyzer{ + Name: "exitcheck", + Doc: "checks for os.Exit call in main", + Run: run, +} + +func run(pass *analysis.Pass) (interface{}, error) { + for _, file := range pass.Files { + filename := pass.Fset.Position(file.Pos()).Filename + + if !strings.HasSuffix(filename, ".go") { + continue + } + + if strings.HasSuffix(filename, "_test.go") { + continue + } + + if code.IsMain(pass) { + ast.Inspect(file, func(node ast.Node) bool { + if _, ok := node.(*ast.CallExpr); ok && code.IsCallTo(pass, node, "os.Exit") && !code.IsInTest(pass, node) { + pass.Reportf(node.Pos(), "call to os.Exit() in main") + } + return true + }) + } + } + return nil, nil +} diff --git a/internal/analyzer/staticcheck.go b/internal/analyzer/staticcheck.go new file mode 100644 index 0000000..55fbc1e --- /dev/null +++ b/internal/analyzer/staticcheck.go @@ -0,0 +1,20 @@ +package analyzer + +import ( + "golang.org/x/tools/go/analysis" + "honnef.co/go/tools/simple" + "honnef.co/go/tools/staticcheck" +) + +func GetStaticCheckAnalyzers() []*analysis.Analyzer { + analyzers := make([]*analysis.Analyzer, 0, len(staticcheck.Analyzers)+1) + for _, v := range staticcheck.Analyzers { + analyzers = append(analyzers, v.Analyzer) + } + + for _, v := range simple.Analyzers { + analyzers = append(analyzers, v.Analyzer) + } + + return analyzers +} diff --git a/internal/analyzer/testdata/main.go b/internal/analyzer/testdata/main.go new file mode 100644 index 0000000..e9c84d6 --- /dev/null +++ b/internal/analyzer/testdata/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "os" +) + +func main() { + os.Exit(1) // want `call to os.Exit\(\) in main` +} diff --git a/internal/greetings/greetings.go b/internal/greetings/greetings.go new file mode 100644 index 0000000..e168fb4 --- /dev/null +++ b/internal/greetings/greetings.go @@ -0,0 +1,40 @@ +package greetings + +import ( + "os" + "text/template" +) + +const greetingsTemplate = ` +Build version: <{{.BuildVersion}}> +Build date: <{{.BuildDate}}> +Build commit: <{{.BuildCommit}}> +` + +type Greetings struct { + BuildVersion string + BuildDate string + BuildCommit string +} + +func Hello(buildVersion, buildDate, buildCommit string) error { + greetings := Greetings{ + BuildVersion: buildVersion, + BuildDate: buildDate, + BuildCommit: buildCommit, + } + + if greetings.BuildVersion == "" { + greetings.BuildVersion = "N/A" + } + if greetings.BuildDate == "" { + greetings.BuildDate = "N/A" + } + if greetings.BuildCommit == "" { + greetings.BuildCommit = "N/A" + } + + tmpl := template.Must(template.New("greetings").Parse(greetingsTemplate)) + + return tmpl.Execute(os.Stdout, greetings) +} From 73f37127d07fb85a504447e522f674cf05a54f19 Mon Sep 17 00:00:00 2001 From: mayr0y Date: Mon, 4 Sep 2023 17:21:22 +0300 Subject: [PATCH 2/3] working on pr --- go.mod | 2 + go.sum | 27 + internal/analyzer/maincheck.go | 40 +- internal/analyzer/testdata/main.go | 2 +- internal/greetings/greetings.go | 4 +- internal/greetings/greetings_test.go | 50 ++ internal/pkg/storage/dbstore.go | 4 + internal/pkg/storage/dbstore_test.go | 230 ++++++++ internal/pkg/storage/mock/mock_dbstore.go | 178 +++++++ profile.cov | 605 ++++++++++++++++++++++ 10 files changed, 1131 insertions(+), 11 deletions(-) create mode 100644 internal/greetings/greetings_test.go create mode 100644 internal/pkg/storage/dbstore_test.go create mode 100644 internal/pkg/storage/mock/mock_dbstore.go create mode 100644 profile.cov diff --git a/go.mod b/go.mod index c44582f..ad480af 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,10 @@ module github.com/mayr0y/animated-octo-couscous.git go 1.20 require ( + github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/caarlos0/env/v6 v6.10.1 github.com/go-chi/chi/v5 v5.0.8 + github.com/golang/mock v1.6.0 github.com/jackc/pgx/v5 v5.3.1 github.com/shirou/gopsutil/v3 v3.23.5 github.com/sirupsen/logrus v1.9.2 diff --git a/go.sum b/go.sum index 2ce98e5..aefd397 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,6 @@ github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/caarlos0/env/v6 v6.10.1 h1:t1mPSxNpei6M5yAeu1qtRdPAK29Nbcf/n3G7x+b3/II= github.com/caarlos0/env/v6 v6.10.1/go.mod h1:hvp/ryKXKipEkcuYjs9mI4bBCg+UI0Yhgm5Zu0ddvwc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -9,6 +11,8 @@ github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -51,26 +55,49 @@ github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+Kd github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE= golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.9.4-0.20230601214343-86c93e8732cc h1:mqZawFxUzsv+YVwGQO30cZegeV/YD6dAwsdGxi0tQQg= golang.org/x/tools v0.9.4-0.20230601214343-86c93e8732cc/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/analyzer/maincheck.go b/internal/analyzer/maincheck.go index 78794fc..6b74096 100644 --- a/internal/analyzer/maincheck.go +++ b/internal/analyzer/maincheck.go @@ -5,7 +5,6 @@ import ( "strings" "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/analysis/code" ) var ExitCheck = &analysis.Analyzer{ @@ -15,6 +14,20 @@ var ExitCheck = &analysis.Analyzer{ } func run(pass *analysis.Pass) (interface{}, error) { + isExit := func(call *ast.CallExpr) bool { + if fn, ok := call.Fun.(*ast.SelectorExpr); ok { + p, ok1 := fn.X.(*ast.Ident) + + if !ok1 || p.Name != "os" || fn.Sel.Name != "Exit" { + return false + } + + return true + } + + return false + } + for _, file := range pass.Files { filename := pass.Fset.Position(file.Pos()).Filename @@ -26,14 +39,25 @@ func run(pass *analysis.Pass) (interface{}, error) { continue } - if code.IsMain(pass) { - ast.Inspect(file, func(node ast.Node) bool { - if _, ok := node.(*ast.CallExpr); ok && code.IsCallTo(pass, node, "os.Exit") && !code.IsInTest(pass, node) { - pass.Reportf(node.Pos(), "call to os.Exit() in main") - } - return true - }) + if file.Name.Name != "main" { + continue } + + ast.Inspect(file, func(node ast.Node) bool { + if fn, ok := node.(*ast.FuncDecl); ok && fn.Name.Name == "main" { + for _, nd := range fn.Body.List { + if expr, ok := nd.(*ast.ExprStmt); ok { + if x, ok := expr.X.(*ast.CallExpr); ok && isExit(x) { + pass.Reportf(x.Pos(), "os.Exit call in main package") + + break + } + } + } + } + + return true + }) } return nil, nil } diff --git a/internal/analyzer/testdata/main.go b/internal/analyzer/testdata/main.go index e9c84d6..03da02e 100644 --- a/internal/analyzer/testdata/main.go +++ b/internal/analyzer/testdata/main.go @@ -5,5 +5,5 @@ import ( ) func main() { - os.Exit(1) // want `call to os.Exit\(\) in main` + os.Exit(1) } diff --git a/internal/greetings/greetings.go b/internal/greetings/greetings.go index e168fb4..df8d0e2 100644 --- a/internal/greetings/greetings.go +++ b/internal/greetings/greetings.go @@ -17,6 +17,8 @@ type Greetings struct { BuildCommit string } +var tmpl = template.Must(template.New("greetings").Parse(greetingsTemplate)) + func Hello(buildVersion, buildDate, buildCommit string) error { greetings := Greetings{ BuildVersion: buildVersion, @@ -34,7 +36,5 @@ func Hello(buildVersion, buildDate, buildCommit string) error { greetings.BuildCommit = "N/A" } - tmpl := template.Must(template.New("greetings").Parse(greetingsTemplate)) - return tmpl.Execute(os.Stdout, greetings) } diff --git a/internal/greetings/greetings_test.go b/internal/greetings/greetings_test.go new file mode 100644 index 0000000..48f3393 --- /dev/null +++ b/internal/greetings/greetings_test.go @@ -0,0 +1,50 @@ +package greetings + +import "testing" + +func TestHello(t *testing.T) { + type args struct { + buildVersion string + buildDate string + buildCommit string + } + tests := []struct { + name string + args args + want *Greetings + }{ + { + name: "check emty", + args: args{ + buildVersion: "", + buildDate: "", + buildCommit: "", + }, + want: &Greetings{ + BuildVersion: "N/A", + BuildDate: "N/A", + BuildCommit: "N/A", + }, + }, + { + name: "check positive test", + args: args{ + buildVersion: "1", + buildDate: "2", + buildCommit: "3", + }, + want: &Greetings{ + BuildVersion: "1", + BuildDate: "2", + BuildCommit: "3", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := Hello(tt.args.buildVersion, tt.args.buildDate, tt.args.buildCommit); err != nil { + t.Errorf("Hello() error = %v, wantErr %v", err, tt.want) + } + }) + } +} diff --git a/internal/pkg/storage/dbstore.go b/internal/pkg/storage/dbstore.go index 17427bf..65f415d 100644 --- a/internal/pkg/storage/dbstore.go +++ b/internal/pkg/storage/dbstore.go @@ -20,6 +20,10 @@ type DBStore struct { connection *sql.DB } +func NewDBStore(db *sql.DB) *DBStore { + return &DBStore{connection: db} +} + func NewDBMetrics(databaseDSN string) (*DBStore, error) { db, err := sql.Open(driverName, databaseDSN) if err != nil { diff --git a/internal/pkg/storage/dbstore_test.go b/internal/pkg/storage/dbstore_test.go new file mode 100644 index 0000000..f09f6e5 --- /dev/null +++ b/internal/pkg/storage/dbstore_test.go @@ -0,0 +1,230 @@ +package storage + +import ( + "context" + "errors" + "testing" + + "github.com/DATA-DOG/go-sqlmock" + _ "github.com/jackc/pgx/v5/stdlib" + "github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics" + "github.com/stretchr/testify/assert" +) + +func TestDBStore_UpdateCounterMetric(t *testing.T) { + ctx := context.Background() + + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("an error '%s' was not expected when opening a stub database connection", err) + } + defer db.Close() + + r := NewDBStore(db) + + type args struct { + ctx context.Context + name string + value metrics.Counter + } + + type mockBehavior func(args args, value metrics.Counter) + + tests := []struct { + name string + mock mockBehavior + input args + want metrics.Counter + wantErr bool + }{ + { + name: "ok", + input: args{ + ctx: ctx, + name: "test", + value: 1, + }, + want: 1, + mock: func(args args, value metrics.Counter) { + mock.ExpectBegin() + + mock.ExpectQuery("INSERT INTO counter"). + WithArgs(args.name, args.value). + WillReturnRows(mock.NewRows([]string{"value"}).AddRow(value)) + + mock.ExpectCommit() + }, + }, + { + name: "failed test", + input: args{ + ctx: ctx, + name: "test", + value: 1, + }, + want: 1, + mock: func(args args, value metrics.Counter) { + mock.ExpectBegin() + + mock.ExpectQuery("INSERT INTO counter"). + WithArgs(args.name, args.value). + WillReturnRows(mock.NewRows([]string{"value"}). + AddRow(value). + RowError(0, errors.New("insert error"))) + + mock.ExpectCommit() + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := r.UpdateCounterMetric(tt.input.ctx, tt.input.name, tt.input.value) + if tt.wantErr { + assert.Error(t, err) + } + assert.NoError(t, mock.ExpectationsWereMet()) + }) + } +} + +func TestDBStore_UpdateGaugeMetric(t *testing.T) { + ctx := context.Background() + + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("an error '%s' was not expected when opening a stub database connection", err) + } + defer db.Close() + + r := NewDBStore(db) + + type args struct { + ctx context.Context + name string + value metrics.Gauge + } + + type mockBehavior func(args args, value metrics.Gauge) + + tests := []struct { + name string + mock mockBehavior + input args + want metrics.Gauge + wantErr bool + }{ + { + name: "ok", + input: args{ + ctx: ctx, + name: "test", + value: 1.0, + }, + want: 1.0, + mock: func(args args, value metrics.Gauge) { + mock.ExpectBegin() + + mock.ExpectQuery("INSERT INTO gauge"). + WithArgs(args.name, args.value). + WillReturnRows(mock.NewRows([]string{"value"}).AddRow(value)) + + mock.ExpectCommit() + }, + }, + { + name: "failed test", + input: args{ + ctx: ctx, + name: "test", + value: 1.0, + }, + want: 1, + mock: func(args args, value metrics.Gauge) { + mock.ExpectBegin() + + mock.ExpectQuery("INSERT INTO gauge"). + WithArgs(args.name, args.value). + WillReturnRows(mock.NewRows([]string{"value"}). + AddRow(value). + RowError(0, errors.New("insert error"))) + + mock.ExpectCommit() + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := r.UpdateGaugeMetric(tt.input.ctx, tt.input.name, tt.input.value) + if tt.wantErr { + assert.Error(t, err) + } + assert.NoError(t, mock.ExpectationsWereMet()) + }) + } +} + +func TestDBStore_Ping(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("an error '%s' was not expected when opening a stub database connection", err) + } + defer db.Close() + + r := NewDBStore(db) + + tests := []struct { + name string + args *sqlmock.ExpectedPing + wantErr bool + }{ + { + name: "ok", + args: mock.ExpectPing(), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := r.Ping() + if tt.wantErr { + assert.Error(t, err) + } + assert.NoError(t, mock.ExpectationsWereMet()) + }) + } +} + +func TestDBStore_Close(t *testing.T) { + db, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("an error '%s' was not expected when opening a stub database connection", err) + } + defer db.Close() + + r := NewDBStore(db) + + tests := []struct { + name string + args *sqlmock.ExpectedClose + wantErr bool + }{ + { + name: "ok", + args: mock.ExpectClose(), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := r.Close() + if tt.wantErr { + assert.Error(t, err) + } + assert.NoError(t, mock.ExpectationsWereMet()) + }) + } +} diff --git a/internal/pkg/storage/mock/mock_dbstore.go b/internal/pkg/storage/mock/mock_dbstore.go new file mode 100644 index 0000000..504ea66 --- /dev/null +++ b/internal/pkg/storage/mock/mock_dbstore.go @@ -0,0 +1,178 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: repository.go + +// Package mocks is a generated GoMock package. +package mocks + +import ( + context "context" + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + metrics "github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics" +) + +// MockStore is a mock of Store interface. +type MockStore struct { + ctrl *gomock.Controller + recorder *MockStoreMockRecorder +} + +// MockStoreMockRecorder is the mock recorder for MockStore. +type MockStoreMockRecorder struct { + mock *MockStore +} + +// NewMockStore creates a new mock instance. +func NewMockStore(ctrl *gomock.Controller) *MockStore { + mock := &MockStore{ctrl: ctrl} + mock.recorder = &MockStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockStore) EXPECT() *MockStoreMockRecorder { + return m.recorder +} + +// Close mocks base method. +func (m *MockStore) Close() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Close") + ret0, _ := ret[0].(error) + return ret0 +} + +// Close indicates an expected call of Close. +func (mr *MockStoreMockRecorder) Close() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockStore)(nil).Close)) +} + +// GetMetric mocks base method. +func (m *MockStore) GetMetric(ctx context.Context, name, metricType string) (*metrics.Metrics, bool) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMetric", ctx, name, metricType) + ret0, _ := ret[0].(*metrics.Metrics) + ret1, _ := ret[1].(bool) + return ret0, ret1 +} + +// GetMetric indicates an expected call of GetMetric. +func (mr *MockStoreMockRecorder) GetMetric(ctx, name, metricType interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetric", reflect.TypeOf((*MockStore)(nil).GetMetric), ctx, name, metricType) +} + +// GetMetrics mocks base method. +func (m *MockStore) GetMetrics(ctx context.Context) (map[string]*metrics.Metrics, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMetrics", ctx) + ret0, _ := ret[0].(map[string]*metrics.Metrics) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMetrics indicates an expected call of GetMetrics. +func (mr *MockStoreMockRecorder) GetMetrics(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetrics", reflect.TypeOf((*MockStore)(nil).GetMetrics), ctx) +} + +// LoadMetrics mocks base method. +func (m *MockStore) LoadMetrics(filePath string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LoadMetrics", filePath) + ret0, _ := ret[0].(error) + return ret0 +} + +// LoadMetrics indicates an expected call of LoadMetrics. +func (mr *MockStoreMockRecorder) LoadMetrics(filePath interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadMetrics", reflect.TypeOf((*MockStore)(nil).LoadMetrics), filePath) +} + +// Ping mocks base method. +func (m *MockStore) Ping() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ping") + ret0, _ := ret[0].(error) + return ret0 +} + +// Ping indicates an expected call of Ping. +func (mr *MockStoreMockRecorder) Ping() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*MockStore)(nil).Ping)) +} + +// ResetCounterMetric mocks base method. +func (m *MockStore) ResetCounterMetric(ctx context.Context, name string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ResetCounterMetric", ctx, name) + ret0, _ := ret[0].(error) + return ret0 +} + +// ResetCounterMetric indicates an expected call of ResetCounterMetric. +func (mr *MockStoreMockRecorder) ResetCounterMetric(ctx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResetCounterMetric", reflect.TypeOf((*MockStore)(nil).ResetCounterMetric), ctx, name) +} + +// SaveMetrics mocks base method. +func (m *MockStore) SaveMetrics(filePath string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SaveMetrics", filePath) + ret0, _ := ret[0].(error) + return ret0 +} + +// SaveMetrics indicates an expected call of SaveMetrics. +func (mr *MockStoreMockRecorder) SaveMetrics(filePath interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveMetrics", reflect.TypeOf((*MockStore)(nil).SaveMetrics), filePath) +} + +// UpdateCounterMetric mocks base method. +func (m *MockStore) UpdateCounterMetric(ctx context.Context, name string, value metrics.Counter) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateCounterMetric", ctx, name, value) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateCounterMetric indicates an expected call of UpdateCounterMetric. +func (mr *MockStoreMockRecorder) UpdateCounterMetric(ctx, name, value interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateCounterMetric", reflect.TypeOf((*MockStore)(nil).UpdateCounterMetric), ctx, name, value) +} + +// UpdateGaugeMetric mocks base method. +func (m *MockStore) UpdateGaugeMetric(ctx context.Context, name string, value metrics.Gauge) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateGaugeMetric", ctx, name, value) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateGaugeMetric indicates an expected call of UpdateGaugeMetric. +func (mr *MockStoreMockRecorder) UpdateGaugeMetric(ctx, name, value interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateGaugeMetric", reflect.TypeOf((*MockStore)(nil).UpdateGaugeMetric), ctx, name, value) +} + +// UpdateMetrics mocks base method. +func (m *MockStore) UpdateMetrics(ctx context.Context, metricBatch []*metrics.Metrics) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateMetrics", ctx, metricBatch) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateMetrics indicates an expected call of UpdateMetrics. +func (mr *MockStoreMockRecorder) UpdateMetrics(ctx, metricBatch interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateMetrics", reflect.TypeOf((*MockStore)(nil).UpdateMetrics), ctx, metricBatch) +} diff --git a/profile.cov b/profile.cov new file mode 100644 index 0000000..d53cd59 --- /dev/null +++ b/profile.cov @@ -0,0 +1,605 @@ +mode: set +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:20.63,27.34 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:27.34,29.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:30.2,30.31 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:30.31,32.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:33.2,33.33 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:33.33,35.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/greetings/greetings.go:37.2,39.43 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:24.57,28.46 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:28.46,30.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:32.2,32.18 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:35.35,36.17 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:37.23,38.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:39.25,40.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:41.10,42.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:26.38,30.23 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:30.23,32.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:34.2,34.40 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:34.40,37.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:38.2,38.13 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:41.31,49.2 7 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:26.36,30.23 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:30.23,32.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:34.2,34.40 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:34.40,37.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:38.2,38.13 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:41.30,48.2 6 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:24.57,28.46 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:28.46,30.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:32.2,32.18 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:35.35,36.17 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:37.23,38.39 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:39.25,40.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:41.10,42.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:11.78,12.46 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:12.46,13.72 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:13.72,14.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:14.22,16.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:18.4,18.40 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:18.40,21.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:22.4,23.18 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:23.18,26.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:28.4,28.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:28.22,31.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:33.4,38.18 5 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:38.18,41.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:43.4,43.37 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:43.37,46.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/crypt.go:48.4,50.24 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/logger.go:10.56,11.71 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/middleware/logger.go:11.71,18.3 5 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:26.54,32.2 5 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:34.56,35.28 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:35.28,38.3 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:41.59,42.28 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:42.28,45.3 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:48.54,49.28 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:49.28,50.59 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:50.59,51.35 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:51.35,53.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:54.4,54.32 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:59.82,60.54 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:60.54,63.17 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:63.17,65.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:67.3,68.17 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:68.17,72.4 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:73.3,77.10 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:77.10,81.4 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:83.3,84.17 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:84.17,87.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:89.3,92.17 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:92.17,94.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:98.62,99.28 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:99.28,100.60 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:100.60,103.18 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:103.18,105.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:107.4,108.18 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:108.18,111.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:113.4,117.18 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:117.18,119.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:120.4,120.32 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:125.85,126.54 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:126.54,132.17 5 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:132.17,134.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:135.3,136.17 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:136.17,139.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:141.3,141.23 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:142.34,143.27 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:143.27,145.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:146.4,147.18 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:147.18,149.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:150.4,150.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:151.32,152.27 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:152.27,154.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:155.4,156.18 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:156.18,158.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:159.4,159.32 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:160.11,161.58 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:166.63,167.28 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:167.28,168.59 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:168.59,174.18 5 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:174.18,176.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:178.4,179.18 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:179.18,182.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:187.78,188.54 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:188.54,197.21 6 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:198.34,200.10 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:200.10,202.5 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:202.10,205.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:206.32,208.10 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:208.10,210.5 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:210.10,213.5 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:214.11,216.10 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:218.3,219.17 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:219.17,223.4 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:227.88,228.54 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:228.54,237.21 7 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:238.34,239.73 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:240.32,241.71 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:242.11,243.56 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:245.3,245.17 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:245.17,247.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:251.107,253.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:253.16,255.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:257.2,257.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:260.109,262.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:262.16,264.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/handlers.go:266.2,266.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:17.44,29.25 7 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:29.25,31.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:31.8,31.36 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:31.36,33.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:33.8,35.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:37.2,37.16 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:37.16,40.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:42.2,61.15 6 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:61.15,62.67 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:62.67,64.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:66.2,66.25 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:66.25,69.13 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:69.13,70.30 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:70.30,72.19 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:72.19,74.6 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:78.2,81.12 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:81.12,84.45 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:84.45,86.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:90.2,90.58 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:90.58,93.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/server.go:95.2,95.11 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:26.38,30.23 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:30.23,32.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:34.2,34.40 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:34.40,37.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:38.2,38.13 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/server/config/config.go:41.31,49.2 7 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:23.38,25.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:27.57,29.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:29.16,31.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:33.2,38.16 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:38.16,41.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:43.2,43.19 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:46.37,50.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:50.16,53.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:55.2,58.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:58.16,61.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:63.2,63.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:66.94,68.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:68.16,70.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:71.2,87.38 9 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:87.38,88.89 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:88.89,97.12 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:99.3,99.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:102.2,104.30 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:104.30,105.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:106.45,110.14 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:111.43,115.12 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:119.2,119.35 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:119.35,120.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:121.48,124.18 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:124.18,126.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:127.50,130.18 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:130.18,132.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:136.2,136.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:139.103,141.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:141.16,143.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:144.2,150.74 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:150.74,152.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:154.2,154.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:157.79,159.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:159.16,161.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:162.2,169.73 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:169.73,171.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:173.2,173.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:176.99,178.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:178.16,180.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:181.2,187.72 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:187.72,189.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:191.2,191.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:194.108,200.20 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:201.33,207.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:207.61,210.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:211.3,211.26 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:213.31,219.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:219.61,222.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:223.3,223.24 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:224.10,225.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:228.2,228.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:231.89,237.16 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:237.16,239.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:240.2,240.29 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:240.29,242.17 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:242.17,244.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:247.2,247.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:247.22,254.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:254.61,256.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:258.3,258.34 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:261.2,262.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:262.16,264.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:266.2,269.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:269.16,271.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:272.2,272.29 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:272.29,274.17 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:274.17,276.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:279.2,279.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:279.20,287.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:287.61,289.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:291.3,291.34 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:294.2,295.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:295.16,297.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:299.2,299.24 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:302.33,304.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:306.34,309.2 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:311.48,313.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:315.48,317.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:24.32,28.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:30.85,38.2 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:40.94,44.37 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:44.37,46.10 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:47.84,48.38 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:49.84,50.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:51.86,52.45 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:53.86,54.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:55.11,56.33 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:60.2,60.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:63.112,68.9 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:69.40,70.39 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:71.40,72.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:73.10,78.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:80.2,80.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:83.116,88.9 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:89.40,90.40 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:91.40,92.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:93.10,98.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:101.2,101.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:104.106,108.2 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:110.90,112.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:114.86,120.9 5 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:121.40,122.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:123.40,124.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:125.10,130.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:132.2,132.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:135.58,136.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:136.20,138.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:139.2,140.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:140.16,141.25 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:141.25,143.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:144.3,144.13 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:146.2,149.39 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:152.58,153.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:153.20,155.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:156.2,157.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:157.16,159.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:160.2,163.35 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:166.36,168.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:170.37,172.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:24.57,28.46 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:28.46,30.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:32.2,32.18 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:35.35,36.17 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:37.23,38.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:39.25,40.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:41.10,42.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:23.38,25.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:27.57,29.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:29.16,31.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:33.2,38.16 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:38.16,41.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:43.2,43.19 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:46.37,50.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:50.16,53.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:55.2,58.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:58.16,61.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:63.2,63.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:66.94,68.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:68.16,70.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:71.2,87.38 9 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:87.38,88.89 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:88.89,97.12 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:99.3,99.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:102.2,104.30 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:104.30,105.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:106.45,110.14 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:111.43,115.12 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:119.2,119.35 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:119.35,120.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:121.48,124.18 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:124.18,126.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:127.50,130.18 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:130.18,132.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:136.2,136.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:139.103,141.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:141.16,143.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:144.2,150.74 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:150.74,152.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:154.2,154.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:157.79,159.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:159.16,161.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:162.2,169.73 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:169.73,171.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:173.2,173.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:176.99,178.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:178.16,180.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:181.2,187.72 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:187.72,189.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:191.2,191.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:194.108,200.20 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:201.33,207.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:207.61,210.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:211.3,211.26 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:213.31,219.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:219.61,222.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:223.3,223.24 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:224.10,225.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:228.2,228.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:231.89,237.16 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:237.16,239.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:240.2,240.29 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:240.29,242.17 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:242.17,244.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:247.2,247.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:247.22,254.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:254.61,256.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:258.3,258.34 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:261.2,262.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:262.16,264.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:266.2,269.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:269.16,271.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:272.2,272.29 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:272.29,274.17 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:274.17,276.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:279.2,279.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:279.20,287.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:287.61,289.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:291.3,291.34 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:294.2,295.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:295.16,297.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:299.2,299.24 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:302.33,304.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:306.34,309.2 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:311.48,313.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:315.48,317.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:24.32,28.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:30.85,38.2 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:40.94,44.37 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:44.37,46.10 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:47.84,48.38 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:49.84,50.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:51.86,52.45 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:53.86,54.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:55.11,56.33 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:60.2,60.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:63.112,68.9 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:69.40,70.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:71.40,72.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:73.10,78.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:80.2,80.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:83.116,88.9 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:89.40,90.40 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:91.40,92.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:93.10,98.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:101.2,101.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:104.106,108.2 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:110.90,112.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:114.86,120.9 5 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:121.40,122.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:123.40,124.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:125.10,130.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:132.2,132.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:135.58,136.20 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:136.20,138.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:139.2,140.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:140.16,141.25 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:141.25,143.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:144.3,144.13 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:146.2,149.39 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:152.58,153.20 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:153.20,155.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:156.2,157.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:157.16,159.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:160.2,163.35 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:166.36,168.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:170.37,172.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/analysis.go:47.41,90.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:17.52,18.34 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:18.34,21.42 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:21.42,22.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:25.3,25.46 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:25.46,26.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:29.3,29.24 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:29.24,30.47 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:30.47,31.112 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:31.112,33.6 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:34.5,34.16 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/maincheck.go:38.2,38.17 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/staticcheck.go:9.53,11.42 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/staticcheck.go:11.42,13.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/staticcheck.go:15.2,15.37 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/staticcheck.go:15.37,17.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/analyzer/staticcheck.go:19.2,19.18 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/agent.go:13.62,28.12 11 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/agent.go:28.12,31.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/agent.go:33.2,33.35 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/agent.go:33.35,35.13 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/agent.go:35.13,38.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/agent.go:41.2,41.11 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:22.95,23.6 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:23.6,24.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:25.21,26.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:27.25,28.48 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:28.48,30.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:35.64,70.16 33 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:70.16,72.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:74.2,75.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:75.16,77.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:79.2,85.36 5 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:85.36,87.17 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:87.17,89.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:92.2,93.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:93.16,95.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:97.2,97.26 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:97.26,99.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/poller.go:99.8,101.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:21.108,22.6 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:22.6,23.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:24.21,25.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:26.25,28.18 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:28.18,30.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:31.4,31.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:31.10,32.65 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:32.65,34.6 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:40.108,42.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:42.16,45.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:47.2,48.31 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:48.31,50.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:52.2,54.65 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:54.65,56.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:57.2,57.18 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:60.87,62.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:62.16,64.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:66.2,68.41 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:68.41,70.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:72.2,73.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:73.16,75.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:77.2,78.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:78.16,80.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:82.2,85.20 3 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:85.20,90.3 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:92.2,93.16 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:93.16,95.3 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:97.2,99.38 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:99.38,101.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/reporter.go:103.2,103.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:26.36,30.23 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:30.23,32.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:34.2,34.40 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:34.40,37.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:38.2,38.13 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/agent/config/config.go:41.30,48.2 6 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:24.57,28.46 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:28.46,30.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:32.2,32.18 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:35.35,36.17 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:37.23,38.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:39.25,40.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/metrics/metrics.go:41.10,42.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:23.38,25.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:27.57,29.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:29.16,31.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:33.2,38.16 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:38.16,41.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:43.2,43.19 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:46.37,50.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:50.16,53.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:55.2,58.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:58.16,61.3 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:63.2,63.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:66.94,68.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:68.16,70.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:71.2,87.38 9 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:87.38,88.89 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:88.89,97.12 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:99.3,99.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:102.2,104.30 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:104.30,105.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:106.45,110.14 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:111.43,115.12 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:119.2,119.35 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:119.35,120.10 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:121.48,124.18 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:124.18,126.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:127.50,130.18 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:130.18,132.5 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:136.2,136.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:139.103,141.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:141.16,143.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:144.2,150.74 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:150.74,152.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:154.2,154.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:157.79,159.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:159.16,161.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:162.2,169.73 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:169.73,171.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:173.2,173.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:176.99,178.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:178.16,180.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:181.2,187.72 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:187.72,189.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:191.2,191.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:194.108,200.20 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:201.33,207.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:207.61,210.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:211.3,211.26 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:213.31,219.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:219.61,222.4 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:223.3,223.24 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:224.10,225.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:228.2,228.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:231.89,237.16 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:237.16,239.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:240.2,240.29 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:240.29,242.17 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:242.17,244.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:247.2,247.22 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:247.22,254.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:254.61,256.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:258.3,258.34 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:261.2,262.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:262.16,264.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:266.2,269.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:269.16,271.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:272.2,272.29 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:272.29,274.17 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:274.17,276.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:279.2,279.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:279.20,287.61 4 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:287.61,289.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:291.3,291.34 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:294.2,295.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:295.16,297.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:299.2,299.24 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:302.33,304.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:306.34,309.2 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:311.48,313.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/dbstore.go:315.48,317.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:24.32,28.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:30.85,38.2 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:40.94,44.37 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:44.37,46.10 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:47.84,48.38 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:49.84,50.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:51.86,52.45 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:53.86,54.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:55.11,56.33 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:60.2,60.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:63.112,68.9 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:69.40,70.39 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:71.40,72.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:73.10,78.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:80.2,80.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:83.116,88.9 4 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:89.40,90.40 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:91.40,92.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:93.10,98.4 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:101.2,101.12 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:104.106,108.2 2 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:110.90,112.2 1 1 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:114.86,120.9 5 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:121.40,122.32 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:123.40,124.83 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:125.10,130.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:132.2,132.12 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:135.58,136.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:136.20,138.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:139.2,140.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:140.16,141.25 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:141.25,143.4 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:144.3,144.13 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:146.2,149.39 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:152.58,153.20 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:153.20,155.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:156.2,157.16 2 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:157.16,159.3 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:160.2,163.35 3 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:166.36,168.2 1 0 +github.com/mayr0y/animated-octo-couscous.git/internal/pkg/storage/memorystore.go:170.37,172.2 1 0 From af73cee1773eaab53682f65f1048850fc88c619d Mon Sep 17 00:00:00 2001 From: Alexander Lazarev Date: Sun, 22 Oct 2023 14:37:22 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=B8=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/staticlint/main.go | 9 +++++++++ internal/analyzer/analysis.go | 26 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/cmd/staticlint/main.go b/cmd/staticlint/main.go index f52fb94..6b6355a 100644 --- a/cmd/staticlint/main.go +++ b/cmd/staticlint/main.go @@ -6,6 +6,15 @@ import ( "golang.org/x/tools/go/analysis/multichecker" ) +// This package defines the main function for an analysis driver +// with several analyzers from packages go/analysis and staticcheck.io +// Usage: +// `go run cmd/staticlint/main.go ` + +// Examples: +// Checking all files in the current folder with all analyzers +// go run cmd/staticlint/main.go ./... + func main() { multichecker.Main( GetAnalyzers()..., diff --git a/internal/analyzer/analysis.go b/internal/analyzer/analysis.go index 9e79f14..fc952fd 100644 --- a/internal/analyzer/analysis.go +++ b/internal/analyzer/analysis.go @@ -44,6 +44,32 @@ import ( "golang.org/x/tools/go/analysis/passes/unusedwrite" ) +// В состастав staticlint входят следующие статические анализаторы. +// - assign - обнаруживает бесполезные присвоения. +// - atomic - проверяет распространенные ошибки с помощью пакета sync/atomic. +// - atomicalign - проверяет аргументы, не выровненные по 64 битам, для функций синхронизации/атомарных функций. +// - bools - обнаруживает распространенные ошибки, связанные с логическими операторами. +// - buildtag - проверяет корректность тегов сборки. +// - composite - проверяет наличие составных литералов без ключей. +// - copylock - проверяет наличие блокировок, ошибочно переданных по значению. +// - deepequalerrors - проверяет использование Reflection.DeepEqual со значениями ошибок. +// - errorsas - проверяет, что второй аргумент error.As является указателем на ошибку реализации типа. +// - httpresponse - проверяет наличие ошибок обработки HTTP-ответов. +// - ifaceassert - помечает невозможные утверждения типа интерфейса. +// - loopclosure - проверяет наличие ссылок на переменные цикла внутри вложенных функций. +// - lostcancel - проверяет отсутствие вызова функции отмены контекста. +// - nilfunc - проверяет бесполезные сравнения с nil. +// - printf - проверяет согласованность строк и аргументов формата Printf. +// - shadow - проверяет наличие затененных переменных. +// - sigchanyzer - обнаруживает неправильное использование небуферизованного сигнала в качестве аргумента signal.Notify. +// - sortslice - проверяет вызовы sort.Slice, которые не используют тип слайса в качестве первого аргумента. +// - stdmethods - проверяет наличие орфографических ошибок в сигнатурах методов, аналогичных общеизвестным интерфейсам. +// - stringintconv - помечает преобразования типов из целых чисел в строки вида string(x), где x - целое число. +// - unmarshal - проверяет передачу типов, не являющихся указателями или неинтерфейсами, для функций демаршалинга и декодирования. +// - unreachable - проверяет наличие недостижимого кода. +// - unusedresult - проверяет неиспользуемые результаты вызовов некоторых функций. +// - unusedwrite - проверяет наличие неиспользуемых записей в элементы объекта структуры или массива. + func GetAnalysis() []*analysis.Analyzer { return []*analysis.Analyzer{ asmdecl.Analyzer,