diff --git a/app/consoler/consoler_test.go b/app/consoler/consoler_test.go index 2bb0e6ba..2ca1e9ed 100644 --- a/app/consoler/consoler_test.go +++ b/app/consoler/consoler_test.go @@ -38,9 +38,9 @@ func TestSystemCommands(t *testing.T) { configurator.FixtureMigrator(func(dbpath types.Dbpath) { channelID, _ := configurator.FixtureChannel(dbpath) cons := NewConsoler(dbpath) - result := cons.Execute(settings.Env.ConsolerPrefix+` player --help`, channelID) + result := cons.Execute(settings.Env.ConsolerPrefix+` base --help`, channelID) _ = result - assert.Contains(t, result, "System commands") + assert.Contains(t, result, "Base commands") }) } diff --git a/app/scrappy/base/api.go b/app/scrappy/base/api.go deleted file mode 100644 index 1125c239..00000000 --- a/app/scrappy/base/api.go +++ /dev/null @@ -1,26 +0,0 @@ -package base - -import ( - "github.com/darklab8/fl-darkbot/app/scrappy/shared/api" - "github.com/darklab8/fl-darkbot/app/settings" - "github.com/darklab8/fl-darkbot/app/settings/types" -) - -type basesAPI struct { - api.APIrequest - url types.APIurl -} - -func (b basesAPI) GetBaseData() ([]byte, error) { - return b.GetData(b.url) -} - -type IbaseAPI interface { - GetBaseData() ([]byte, error) -} - -func NewBaseApi() IbaseAPI { - b := basesAPI{} - b.url = types.APIurl(settings.Env.ScrappyBaseUrl) - return b -} diff --git a/app/scrappy/base/fixture.go b/app/scrappy/base/fixture.go new file mode 100644 index 00000000..99d9fb5b --- /dev/null +++ b/app/scrappy/base/fixture.go @@ -0,0 +1,11 @@ +package base + +import "github.com/darklab8/fl-darkbot/app/scrappy/shared/api" + +func FixtureBaseApiMock() BaseApi { + return api.DarkstatHttp +} + +func NewBaseApi() BaseApi { + return api.DarkstatHttp +} diff --git a/app/scrappy/base/fixtures.go b/app/scrappy/base/fixtures.go deleted file mode 100644 index d21a518d..00000000 --- a/app/scrappy/base/fixtures.go +++ /dev/null @@ -1,5 +0,0 @@ -package base - -func (s *BaseStorage) FixtureSetAPI(base_api IbaseAPI) { - s.api = base_api -} diff --git a/app/scrappy/base/mock.go b/app/scrappy/base/mock.go deleted file mode 100644 index 2756b4ef..00000000 --- a/app/scrappy/base/mock.go +++ /dev/null @@ -1,35 +0,0 @@ -package base - -import ( - "os" - "path" - - "github.com/darklab8/fl-darkbot/app/scrappy/tests" - "github.com/darklab8/fl-darkbot/app/settings/logus" -) - -// SPY - -type APIspy struct { - Filename string -} - -type apiBaseSpy struct { - APIspy -} - -func NewMock(filename string) IbaseAPI { - return apiBaseSpy{APIspy{Filename: filename}} -} - -func FixtureBaseApiMock() IbaseAPI { - return NewMock("basedata.json") -} - -func (a apiBaseSpy) GetBaseData() ([]byte, error) { - path_testdata := tests.FixtureCreateTestDataFolder() - path_testfile := path.Join(path_testdata, a.Filename) - data, err := os.ReadFile(path_testfile) - logus.Log.CheckFatal(err, "unable to read file") - return data, nil -} diff --git a/app/scrappy/base/mock_test.go b/app/scrappy/base/mock_test.go deleted file mode 100644 index bf17fc06..00000000 --- a/app/scrappy/base/mock_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package base - -import ( - "os" - "path" - "testing" - - "github.com/darklab8/fl-darkbot/app/scrappy/tests" - "github.com/darklab8/fl-darkbot/app/settings/logus" - - "github.com/darklab8/go-utils/utils" -) - -func TestRegenerateBaseData(t *testing.T) { - utils.RegenerativeTest(func() error { - data, _ := NewBaseApi().GetBaseData() - path_testdata := tests.FixtureCreateTestDataFolder() - path_testfile := path.Join(path_testdata, "basedata.json") - err := os.WriteFile(path_testfile, data, os.ModePerm) - logus.Log.CheckFatal(err, "unable to write file") - return nil - }) -} diff --git a/app/scrappy/base/parser.go b/app/scrappy/base/parser.go index 79f43569..07bc35cb 100644 --- a/app/scrappy/base/parser.go +++ b/app/scrappy/base/parser.go @@ -1,40 +1,18 @@ package base import ( - "encoding/json" - "github.com/darklab8/fl-darkbot/app/scrappy/shared/records" - "github.com/darklab8/fl-darkbot/app/settings/logus" + "github.com/darklab8/fl-darkstat/darkstat/configs_export" ) -type baseSerializer struct { - Affiliation string `json:"affiliation"` - Health float64 `json:"health"` - Tid int `json:"tid"` -} - type baseParser struct { } -func (b baseParser) Parse(body []byte) (records.StampedObjects[Base], error) { - record := records.NewStampedObjects[Base]() - - bases := map[string]baseSerializer{} - if err := json.Unmarshal(body, &bases); err != nil { - logus.Log.CheckWarn(err, "unable to unmarshal base request", logus.Body(body)) - logus.Log.Warn("unable to marshal base body=") - return record, err - } +func (b baseParser) Parse(pobs []*configs_export.PoB) (records.StampedObjects[*configs_export.PoB], error) { + record := records.NewStampedObjects[*configs_export.PoB]() - for name, serializer := range bases { - record.Add( - Base{ - Name: name, - Affiliation: serializer.Affiliation, - Health: serializer.Health, - Tid: serializer.Tid, - }, - ) + for _, base := range pobs { + record.Add(base) } return record, nil } diff --git a/app/scrappy/base/storage.go b/app/scrappy/base/storage.go index 38e1e992..839b7604 100644 --- a/app/scrappy/base/storage.go +++ b/app/scrappy/base/storage.go @@ -1,9 +1,9 @@ package base import ( - "github.com/darklab8/fl-darkbot/app/scrappy/shared/parser" - "github.com/darklab8/fl-darkbot/app/scrappy/shared/records" + "github.com/darklab8/fl-darkstat/darkstat/configs_export" + "github.com/darklab8/fl-darkbot/app/scrappy/shared/records" "github.com/darklab8/fl-darkbot/app/settings/logus" ) @@ -14,29 +14,59 @@ type Base struct { Name string } +// converted for old tests +func NewPoB1(base Base) *configs_export.PoB { + return &configs_export.PoB{ + PoBCore: configs_export.PoBCore{ + Name: base.Name, + FactionName: &base.Affiliation, + Health: &base.Health, + }, + } +} + type BaseStorage struct { - records.Records[records.StampedObjects[Base]] - api IbaseAPI - parser parser.Parser[records.StampedObjects[Base]] + records.Records[records.StampedObjects[*configs_export.PoB]] + parser baseParser + + api BaseApi + + // pobs []*configs_export.PoB + // err error +} + +type BaseData struct { + List []*configs_export.PoB +} + +type BaseApi interface { + GetPobs() ([]*configs_export.PoB, error) } +// func (b *BaseStorage) GetLatestRecord() (BaseData, error) { +// return BaseData{ +// List: b.pobs, +// }, b.err +// } +// func (b *BaseStorage) Length() int { +// return len(b.pobs) +// } + // Conveniently born some factory func (b *BaseStorage) Update() { - data, err := b.api.GetBaseData() + pobs, err := b.api.GetPobs() if logus.Log.CheckWarn(err, "quering API with error in BaseStorage") { + err = err return } - record, err := b.parser.Parse(data) - if logus.Log.CheckWarn(err, "received bad parser parsing result in BaseStorage. Ignoring.") { - return - } - b.Add(record) + + b.parser.Parse(pobs) + logus.Log.Info("updated base storage") } -func NewBaseStorage(api IbaseAPI) *BaseStorage { +func NewBaseStorage(api BaseApi) *BaseStorage { b := &BaseStorage{} - b.parser = baseParser{} b.api = api return b } diff --git a/app/scrappy/main.go b/app/scrappy/main.go index cf61a456..c44583e0 100644 --- a/app/scrappy/main.go +++ b/app/scrappy/main.go @@ -14,7 +14,7 @@ type ScrappyStorage struct { baseAttackStorage *baseattack.BaseAttackStorage } -func NewScrapyStorage(base_api base.IbaseAPI, base_attack baseattack.IbaseAttackAPI, opts ...StorageParam) *ScrappyStorage { +func NewScrapyStorage(base_api base.BaseApi, base_attack baseattack.IbaseAttackAPI, opts ...StorageParam) *ScrappyStorage { s := &ScrappyStorage{} s.baseStorage = base.NewBaseStorage(base_api) s.baseAttackStorage = baseattack.NewBaseAttackStorage(base_attack) diff --git a/app/scrappy/shared/api/darkstat.go b/app/scrappy/shared/api/darkstat.go new file mode 100644 index 00000000..98dc5c6e --- /dev/null +++ b/app/scrappy/shared/api/darkstat.go @@ -0,0 +1,8 @@ +package api + +import ( + "github.com/darklab8/fl-darkbot/app/settings" + "github.com/darklab8/fl-darkstat/darkapis/darkhttp" +) + +var DarkstatHttp = darkhttp.NewClient(settings.Env.DarkstatApiUrl) diff --git a/app/scrappy/shared/api/interface.go b/app/scrappy/shared/api/interface.go deleted file mode 100644 index 28d226e8..00000000 --- a/app/scrappy/shared/api/interface.go +++ /dev/null @@ -1,5 +0,0 @@ -/* -Reusable API code to request []byte code of smth. Reusable for player and base. -*/ - -package api diff --git a/app/scrappy/shared/api/request.go b/app/scrappy/shared/api/request.go index 661063a6..8677980e 100644 --- a/app/scrappy/shared/api/request.go +++ b/app/scrappy/shared/api/request.go @@ -1,3 +1,7 @@ +/* +Reusable API code to request []byte code of smth. Reusable for player and base. +*/ + package api import ( diff --git a/app/settings/main.go b/app/settings/main.go index b5e00498..1d48a081 100644 --- a/app/settings/main.go +++ b/app/settings/main.go @@ -14,8 +14,7 @@ import ( type DarkbotEnv struct { utils_settings.UtilsEnvs - ScrappyBaseUrl string - ScrappyPlayerUrl string + DarkstatApiUrl string ScrappyBaseAttackUrl string DiscorderBotToken string @@ -51,9 +50,8 @@ func init() { func LoadEnv(envs *enverant.Enverant) { Env = DarkbotEnv{ UtilsEnvs: utils_settings.GetEnvs(), - DevEnvMockApi: envs.GetBoolOr("DEV_ENV_MOCK_API", true), - ScrappyBaseUrl: envs.GetStrOr("SCRAPPY_BASE_URL", ""), - ScrappyPlayerUrl: envs.GetStrOr("SCRAPPY_PLAYER_URL", ""), + DevEnvMockApi: envs.GetBoolOr("DEV_ENV_MOCK_API", false), // no longer point present with no private apis. TODO consider delete + DarkstatApiUrl: envs.GetStrOr("DARKSTAT_API", "https://darkstat.dd84ai.com"), ScrappyBaseAttackUrl: envs.GetStrOr("SCRAPPY_BASE_ATTACK_URL", "https://discoverygc.com/forums/showthread.php?tid=110046&action=lastpost"), DiscorderBotToken: envs.GetStr("DISCORDER_BOT_TOKEN"), @@ -74,15 +72,6 @@ func LoadEnv(envs *enverant.Enverant) { } Workdir = filepath.Dir(filepath.Dir(utils_os.GetCurrentFolder().ToString())) Dbpath = NewDBPath(Env.ConfiguratorDbname) - - if !Env.DevEnvMockApi { - if Env.ScrappyBaseUrl == "" { - log.Panic("DevEnvMockApi=false, Expected SCRAPPY_BASE_URL env var to be defined") - } - if Env.ScrappyPlayerUrl == "" { - log.Panic("DevEnvMockApi=false, Expected SCRAPPY_PLAYER_URL env var to be defined") - } - } } var Dbpath types.Dbpath diff --git a/app/viewer/views/baseview/base.go b/app/viewer/views/baseview/base.go index fe79d194..271c000e 100644 --- a/app/viewer/views/baseview/base.go +++ b/app/viewer/views/baseview/base.go @@ -9,12 +9,12 @@ import ( "text/template" "github.com/darklab8/fl-darkbot/app/configurator/models" - "github.com/darklab8/fl-darkbot/app/scrappy/base" "github.com/darklab8/fl-darkbot/app/settings/logus" "github.com/darklab8/fl-darkbot/app/settings/types" "github.com/darklab8/fl-darkbot/app/viewer/apis" "github.com/darklab8/fl-darkbot/app/viewer/views" "github.com/darklab8/fl-darkbot/app/viewer/views/viewer_msg" + "github.com/darklab8/fl-darkstat/darkstat/configs_export" "github.com/darklab8/go-utils/utils" "github.com/darklab8/go-utils/utils/utils_types" @@ -75,7 +75,7 @@ func NewTemplateBase(api *apis.API, channelID types.DiscordChannelID) *TemplateB } type TemplateAugmentedBase struct { - base.Base + *configs_export.PoB HealthChange string IsHealthDecreasing bool IsUnderAttack bool @@ -83,7 +83,7 @@ type TemplateAugmentedBase struct { UnderAttackPhrase string } -func BaseContainsTag(bas base.Base, tags []types.Tag) bool { +func BaseContainsTag(bas *configs_export.PoB, tags []types.Tag) bool { for _, tag := range tags { if strings.Contains(bas.Name, string(tag)) { return true @@ -93,8 +93,8 @@ func BaseContainsTag(bas base.Base, tags []types.Tag) bool { return false } -func MatchBases(bases []base.Base, tags []types.Tag) []base.Base { - result := []base.Base{} +func MatchBases(bases []*configs_export.PoB, tags []types.Tag) []*configs_export.PoB { + result := []*configs_export.PoB{} for _, base := range bases { if !BaseContainsTag(base, tags) { @@ -114,7 +114,14 @@ func ErrorForbiddenOrderKey(order_key types.OrderKey) ForbiddenOrderKey { func (f ForbiddenOrderKey) Error() string { return fmt.Sprintf("Forbidden order key=%s", f.order_key) } -func (b *TemplateBase) sortBases(bases []base.Base, order_key types.OrderKey) ([]base.Base, error) { +func GetPtrStrAsStr(value *string) string { + if value == nil { + return "" + } + return *value +} + +func (b *TemplateBase) sortBases(bases []*configs_export.PoB, order_key types.OrderKey) ([]*configs_export.PoB, error) { switch order_key { case models.BaseKeyName: @@ -123,7 +130,7 @@ func (b *TemplateBase) sortBases(bases []base.Base, order_key types.OrderKey) ([ }) case models.BaseKeyAffiliation: sort.Slice(bases, func(i, j int) bool { - return bases[i].Affiliation < bases[j].Affiliation + return GetPtrStrAsStr(bases[i].FactionName) < GetPtrStrAsStr(bases[j].FactionName) }) default: logus.Log.Error(fmt.Sprintf("forbidden order order_key=%s, only keys=%v are allowed", order_key, models.ConfigBaseOrderingKeyAllowedTags)) @@ -135,12 +142,19 @@ func (b *TemplateBase) sortBases(bases []base.Base, order_key types.OrderKey) ([ const HealthRateDecreasingThreshold = -0.01 +func GetFloat64PtrAsInt(value *float64) float64 { + if value == nil { + return 0 + } + return *value +} + func (b *TemplateBase) GenerateRecords() error { record, err := b.api.Scrappy.GetBaseStorage().GetLatestRecord() if logus.Log.CheckWarn(err, "unable to query bases from storage in Template base Generate records") { return err } - sort.Slice(record.List, func(i, j int) bool { + sort.Slice(record, func(i, j int) bool { return record.List[i].Name < record.List[j].Name }) @@ -179,7 +193,7 @@ func (b *TemplateBase) GenerateRecords() error { } baseVars := TemplateAugmentedBase{ - Base: base, + PoB: base, HealthChange: healthDeritive, IsHealthDecreasing: HealthDecreasing, IsUnderAttack: UnderAttack, @@ -196,10 +210,10 @@ func (b *TemplateBase) GenerateRecords() error { if healthThreshold, err := b.api.Alerts.BaseHealthLowerThan.Status(b.channelID); err == nil { for _, base := range bases { - if int(base.Health) < healthThreshold { + if GetFloat64PtrAsInt(base.Health) < float64(healthThreshold) { b.alertHealthLowerThan.SetHeader(views.RenderAlertTemplate( b.channelID, - fmt.Sprintf("Base %s has health %d lower than threshold %d", base.Name, int(base.Health), healthThreshold), + fmt.Sprintf("Base %s has health %d lower than threshold %d", base.Name, int(GetFloat64PtrAsInt(base.Health)), healthThreshold), b.api, )) b.alertHealthLowerThan.AppendRecord("") @@ -213,7 +227,7 @@ func (b *TemplateBase) GenerateRecords() error { if base.IsHealthDecreasing { b.alertHealthIsDecreasing.SetHeader(views.RenderAlertTemplate( b.channelID, - fmt.Sprintf("Base %s health %d is decreasing with value %s", base.Name, int(base.Health), base.HealthChange), + fmt.Sprintf("Base %s health %d is decreasing with value %s", base.Name, int(GetFloat64PtrAsInt(base.Health)), base.HealthChange), b.api, )) b.alertHealthIsDecreasing.AppendRecord("") @@ -229,9 +243,7 @@ func (b *TemplateBase) GenerateRecords() error { b.channelID, fmt.Sprintf("Base %s health %d is under attack, because we detected base name at forum attack declaration thread.", base.Name, - int(base.Health), - base.HealthChange, - HealthRateDecreasingThreshold, + int(GetFloat64PtrAsInt(base.Health)), ), b.api, )) diff --git a/app/viewer/views/baseview/base_test.go b/app/viewer/views/baseview/base_test.go index ae674ee9..04db25c1 100644 --- a/app/viewer/views/baseview/base_test.go +++ b/app/viewer/views/baseview/base_test.go @@ -14,6 +14,7 @@ import ( "github.com/darklab8/fl-darkbot/app/settings/logus" "github.com/darklab8/fl-darkbot/app/settings/types" "github.com/darklab8/fl-darkbot/app/viewer/apis" + "github.com/darklab8/fl-darkstat/darkstat/configs_export" "github.com/stretchr/testify/assert" ) @@ -27,9 +28,9 @@ func TestBaseViewerMocked(t *testing.T) { scrapper := scrappy.FixtureMockedStorage() scrapper.Update() - record := records.NewStampedObjects[base.Base]() - record.Add(base.Base{Name: "Station1", Affiliation: "Abc", Health: 100}) - record.Add(base.Base{Name: "Station2", Affiliation: "Qwe", Health: 100}) + record := records.NewStampedObjects[*configs_export.PoB]() + record.Add(base.NewPoB1(base.Base{Name: "Station1", Affiliation: "Abc", Health: 100})) + record.Add(base.NewPoB1(base.Base{Name: "Station2", Affiliation: "Qwe", Health: 100})) scrapper.GetBaseStorage().Add(record) api := apis.NewAPI(dbpath, scrapper) @@ -48,9 +49,9 @@ func TestBaseViewerMocked(t *testing.T) { isEnabled, _ := baseAlertDecreasing.Status(channelID) assert.False(t, isEnabled) - record = records.NewStampedObjects[base.Base]() - record.Add(base.Base{Name: "Station1", Affiliation: "Abc", Health: 100}) - record.Add(base.Base{Name: "Station2", Affiliation: "Qwe", Health: 50}) + record = records.NewStampedObjects[*configs_export.PoB]() + record.Add(base.NewPoB1(base.Base{Name: "Station1", Affiliation: "Abc", Health: 100})) + record.Add(base.NewPoB1(base.Base{Name: "Station2", Affiliation: "Qwe", Health: 50})) scrapper.GetBaseStorage().Add(record) baseAlertDecreasing.Enable(channelID) @@ -87,8 +88,8 @@ func TestBaseViewerMocked(t *testing.T) { assert.True(t, render.alertHealthLowerThan.HasRecords()) assert.False(t, render.alertBaseUnderAttack.HasRecords()) - record = records.NewStampedObjects[base.Base]() - record.Add(base.Base{Name: "Bank of Bretonia", Affiliation: "Abc", Health: 100}) + record = records.NewStampedObjects[*configs_export.PoB]() + record.Add(base.NewPoB1(base.Base{Name: "Bank of Bretonia", Affiliation: "Abc", Health: 100})) scrapper.GetBaseStorage().Add(record) cg.TagsAdd(channelID, []types.Tag{"Bank"}...) render = NewTemplateBase(api, channelID) @@ -113,14 +114,15 @@ func TestBaseViewerRealData(t *testing.T) { cg.TagsAdd(channelID, []types.Tag{"Station"}...) scrapper := scrappy.NewScrapyStorage( - base.NewMock("basedata.json"), + base.FixtureBaseApiMock(), + // base.NewMock("basedata.json"), baseattack.FixtureBaseAttackAPIMock(), ) api := apis.NewAPI(dbpath, scrapper) scrapper.Update() - scrapper.GetBaseStorage().FixtureSetAPI(base.NewMock("basedata2.json")) + // scrapper.GetBaseStorage().FixtureSetAPI(base.NewMock("basedata2.json")) scrapper.Update() - scrapper.GetBaseStorage().Records.List(func(values []records.StampedObjects[base.Base]) { + scrapper.GetBaseStorage().Records.List(func(values []records.StampedObjects[*configs_export.PoB]) { values[1].Timestamp = values[0].Timestamp.Add(time.Minute * 15) }) @@ -135,7 +137,11 @@ func TestGetDerivativeBaseHealth(t *testing.T) { logus.Log.Debug("1") tags := []types.Tag{""} logus.Log.Debug("2") - scrapper := scrappy.NewScrapyStorage(base.NewMock("basedata.json"), baseattack.FixtureBaseAttackAPIMock()) + scrapper := scrappy.NewScrapyStorage( + // base.NewMock("basedata.json"), + base.FixtureBaseApiMock(), + baseattack.FixtureBaseAttackAPIMock(), + ) logus.Log.Debug("2.1") logus.Log.Debug("2.2") scrapper.Update() @@ -143,17 +149,17 @@ func TestGetDerivativeBaseHealth(t *testing.T) { api := apis.NewAPI(dbpath, scrapper) - scrapper.GetBaseStorage().FixtureSetAPI(base.NewMock("basedata2.json")) + // scrapper.GetBaseStorage().FixtureSetAPI(base.NewMock("basedata2.json")) scrapper.Update() - scrapper.GetBaseStorage().Records.List(func(values []records.StampedObjects[base.Base]) { + scrapper.GetBaseStorage().Records.List(func(values []records.StampedObjects[*configs_export.PoB]) { values[1].Timestamp = values[0].Timestamp.Add(time.Minute * 15) }) logus.Log.Debug("3") - result1 := make(map[string]base.Base) - result2 := make(map[string]base.Base) - scrapper.GetBaseStorage().Records.List(func(values []records.StampedObjects[base.Base]) { + result1 := make(map[string]*configs_export.PoB) + result2 := make(map[string]*configs_export.PoB) + scrapper.GetBaseStorage().Records.List(func(values []records.StampedObjects[*configs_export.PoB]) { for _, base := range values[0].List { result1[base.Name] = base } @@ -191,11 +197,11 @@ func TestDetectAttackOnLPBase(t *testing.T) { assert.True(t, strings.Contains(string(scrapper.GetBaseAttackStorage().GetData()), "LP-7743")) bases := scrapper.GetBaseStorage() - record := records.NewStampedObjects[base.Base]() - record.Add(base.Base{Name: "LP-7743", Affiliation: "Abc", Health: 5}) + record := records.NewStampedObjects[*configs_export.PoB]() + record.Add(base.NewPoB1(base.Base{Name: "LP-7743", Affiliation: "Abc", Health: 5})) bases.Add(record) - record2 := records.NewStampedObjects[base.Base]() - record2.Add(base.Base{Name: "LP-7743", Affiliation: "Abc", Health: 6}) + record2 := records.NewStampedObjects[*configs_export.PoB]() + record2.Add(base.NewPoB1(base.Base{Name: "LP-7743", Affiliation: "Abc", Health: 6})) record2.Timestamp = record2.Timestamp.Add(time.Hour * 1) bases.Add(record2) diff --git a/app/viewer/views/baseview/derivatives.go b/app/viewer/views/baseview/derivatives.go index 9f6cd998..3eb8f3c9 100644 --- a/app/viewer/views/baseview/derivatives.go +++ b/app/viewer/views/baseview/derivatives.go @@ -3,11 +3,11 @@ package baseview import ( "math" - "github.com/darklab8/fl-darkbot/app/scrappy/base" "github.com/darklab8/fl-darkbot/app/scrappy/shared/records" "github.com/darklab8/fl-darkbot/app/settings/logus" "github.com/darklab8/fl-darkbot/app/settings/types" "github.com/darklab8/fl-darkbot/app/viewer/apis" + "github.com/darklab8/fl-darkstat/darkstat/configs_export" ) type ErrorCalculatingDerivative struct { @@ -30,8 +30,8 @@ func (t WarningNoNonZeroDerivatives) Error() string { func CalculateDerivates(tags []types.Tag, api *apis.API) (map[string]float64, error) { baseHealths := make(map[string][]float64) - var res_records []records.StampedObjects[base.Base] - api.Scrappy.GetBaseStorage().Records.List(func(records2 []records.StampedObjects[base.Base]) { + var res_records []records.StampedObjects[*configs_export.PoB] + api.Scrappy.GetBaseStorage().Records.List(func(records2 []records.StampedObjects[*configs_export.PoB]) { res_records = records2 }) @@ -52,7 +52,7 @@ func CalculateDerivates(tags []types.Tag, api *apis.API) (map[string]float64, er if _, ok := baseHealths[base.Name]; !ok { baseHealths[base.Name] = make([]float64, 0) } - baseHealths[base.Name] = append(baseHealths[base.Name], base.Health) + baseHealths[base.Name] = append(baseHealths[base.Name], *base.Health) } } diff --git a/go.mod b/go.mod index 3d566cbf..9be6612f 100644 --- a/go.mod +++ b/go.mod @@ -5,46 +5,89 @@ go 1.25.1 require ( github.com/anaskhan96/soup v1.2.5 github.com/bwmarrin/discordgo v0.29.0 - github.com/darklab8/fl-darkstat v1.86.4 - github.com/darklab8/go-utils v0.29.0 + github.com/darklab8/fl-darkstat v1.99.4 + github.com/darklab8/go-utils v0.30.0 github.com/pkg/profile v1.7.0 github.com/prometheus/client_golang v1.23.2 - github.com/prometheus/common v0.66.1 + github.com/prometheus/common v0.67.5 github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 - golang.org/x/net v0.43.0 + golang.org/x/net v0.50.0 gorm.io/driver/sqlite v1.6.0 gorm.io/gorm v1.30.2 ) require ( - github.com/a-h/templ v0.3.857 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/a-h/templ v0.3.977 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/darklab8/fl-data-discovery v0.4.0 // indirect + github.com/darklab8/fl-data-discovery v0.4.5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/fgprof v0.9.5 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.22.4 // indirect + github.com/go-openapi/jsonreference v0.21.4 // indirect + github.com/go-openapi/spec v0.22.3 // indirect + github.com/go-openapi/swag v0.25.4 // indirect + github.com/go-openapi/swag/cmdutils v0.25.4 // indirect + github.com/go-openapi/swag/conv v0.25.4 // indirect + github.com/go-openapi/swag/fileutils v0.25.4 // indirect + github.com/go-openapi/swag/jsonname v0.25.4 // indirect + github.com/go-openapi/swag/jsonutils v0.25.4 // indirect + github.com/go-openapi/swag/loading v0.25.4 // indirect + github.com/go-openapi/swag/mangling v0.25.4 // indirect + github.com/go-openapi/swag/netutils v0.25.4 // indirect + github.com/go-openapi/swag/stringutils v0.25.4 // indirect + github.com/go-openapi/swag/typeutils v0.25.4 // indirect + github.com/go-openapi/swag/yamlutils v0.25.4 // indirect github.com/google/pprof v0.0.0-20250902223643-43af68c56e86 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.8 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/mailru/easyjson v0.9.1 // indirect github.com/mattn/go-sqlite3 v1.14.32 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/procfs v0.17.0 // indirect + github.com/prometheus/procfs v0.19.2 // indirect github.com/spf13/pflag v1.0.10 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.38.0 // indirect - go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/trace v1.38.0 // indirect - go.yaml.in/yaml/v2 v2.4.2 // indirect - golang.org/x/crypto v0.41.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/text v0.29.0 // indirect - google.golang.org/protobuf v1.36.8 // indirect + github.com/swaggo/files v1.0.1 // indirect + github.com/swaggo/http-swagger v1.3.4 // indirect + github.com/swaggo/swag v1.16.6 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect + go.opentelemetry.io/otel v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.16.0 // indirect + go.opentelemetry.io/otel/log v0.16.0 // indirect + go.opentelemetry.io/otel/metric v1.40.0 // indirect + go.opentelemetry.io/otel/sdk v1.40.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.16.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect + go.opentelemetry.io/otel/trace v1.40.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/crypto v0.48.0 // indirect + golang.org/x/mod v0.33.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.41.0 // indirect + golang.org/x/text v0.34.0 // indirect + golang.org/x/tools v0.42.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect + google.golang.org/grpc v1.79.1 // indirect + google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 4707f45b..f2e6a3e2 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,17 @@ +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/a-h/templ v0.3.857 h1:6EqcJuGZW4OL+2iZ3MD+NnIcG7nGkaQeF2Zq5kf9ZGg= github.com/a-h/templ v0.3.857/go.mod h1:qhrhAkRFubE7khxLZHsBFHfX+gWwVNKbzKeF9GlPV4M= +github.com/a-h/templ v0.3.977 h1:kiKAPXTZE2Iaf8JbtM21r54A8bCNsncrfnokZZSrSDg= +github.com/a-h/templ v0.3.977/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo= github.com/anaskhan96/soup v1.2.5 h1:V/FHiusdTrPrdF4iA1YkVxsOpdNcgvqT1hG+YtcZ5hM= github.com/anaskhan96/soup v1.2.5/go.mod h1:6YnEp9A2yywlYdM4EgDz9NEHclocMepEtku7wg6Cq3s= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bwmarrin/discordgo v0.29.0 h1:FmWeXFaKUwrcL3Cx65c20bTRW+vOb6k8AnaP+EgjDno= github.com/bwmarrin/discordgo v0.29.0/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= @@ -20,21 +26,61 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/darklab8/fl-darkstat v1.86.4 h1:nUu2BOLEZ2V13COhoWJ61G8IvnqaIHYkunvBU3gZRGY= github.com/darklab8/fl-darkstat v1.86.4/go.mod h1:wuWjyKHjmdCk3TETukXTdeLDdpXVFNa8RC3+zBxZFek= +github.com/darklab8/fl-darkstat v1.99.1 h1:wlNgDgze+zdcfZjH91yeosUznd/vEPsJNoD58AtS8O4= +github.com/darklab8/fl-darkstat v1.99.1/go.mod h1:rFdb9dB9AatvHPr/nKwcXksfs6zlJa/KkcNjetBKW4M= +github.com/darklab8/fl-darkstat v1.99.4 h1:yMXA1oVL0JPoFTKXTm0JuAH+zgAitNBy5AKRYbCBkqg= +github.com/darklab8/fl-darkstat v1.99.4/go.mod h1:rFdb9dB9AatvHPr/nKwcXksfs6zlJa/KkcNjetBKW4M= github.com/darklab8/fl-data-discovery v0.4.0 h1:cUacP+N04/PrYl4cmw687BAaQWVJI32scePjLfmqxEI= github.com/darklab8/fl-data-discovery v0.4.0/go.mod h1:SgRh0N3cWrhslXVkc5LJXK52Mw4+Fdsbmv+0qkNJ6QI= +github.com/darklab8/fl-data-discovery v0.4.5 h1:9DD1w+7QN7LLiR4teWZs1uo57XiOQF6z/RKjhs+4qsI= +github.com/darklab8/fl-data-discovery v0.4.5/go.mod h1:SgRh0N3cWrhslXVkc5LJXK52Mw4+Fdsbmv+0qkNJ6QI= github.com/darklab8/go-utils v0.29.0 h1:D9JE0kMalMy7k7muDItWl9G1gLgNtsX6/NISTUVSZlo= github.com/darklab8/go-utils v0.29.0/go.mod h1:PGseWy8mvz/clHH8fpq5Qi5gaBKX+tK2Fc3MV74cFgY= +github.com/darklab8/go-utils v0.30.0 h1:IkTt+SDg6ngxh1P5we3AlDJ7fDkVvARkaXxo75RGtN0= +github.com/darklab8/go-utils v0.30.0/go.mod h1:PGseWy8mvz/clHH8fpq5Qi5gaBKX+tK2Fc3MV74cFgY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY= github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.22.4 h1:dZtK82WlNpVLDW2jlA1YCiVJFVqkED1MegOUy9kR5T4= +github.com/go-openapi/jsonpointer v0.22.4/go.mod h1:elX9+UgznpFhgBuaMQ7iu4lvvX1nvNsesQ3oxmYTw80= +github.com/go-openapi/jsonreference v0.21.4 h1:24qaE2y9bx/q3uRK/qN+TDwbok1NhbSmGjjySRCHtC8= +github.com/go-openapi/jsonreference v0.21.4/go.mod h1:rIENPTjDbLpzQmQWCj5kKj3ZlmEh+EFVbz3RTUh30/4= +github.com/go-openapi/spec v0.22.3 h1:qRSmj6Smz2rEBxMnLRBMeBWxbbOvuOoElvSvObIgwQc= +github.com/go-openapi/spec v0.22.3/go.mod h1:iIImLODL2loCh3Vnox8TY2YWYJZjMAKYyLH2Mu8lOZs= +github.com/go-openapi/swag v0.25.4 h1:OyUPUFYDPDBMkqyxOTkqDYFnrhuhi9NR6QVUvIochMU= +github.com/go-openapi/swag v0.25.4/go.mod h1:zNfJ9WZABGHCFg2RnY0S4IOkAcVTzJ6z2Bi+Q4i6qFQ= +github.com/go-openapi/swag/cmdutils v0.25.4 h1:8rYhB5n6WawR192/BfUu2iVlxqVR9aRgGJP6WaBoW+4= +github.com/go-openapi/swag/cmdutils v0.25.4/go.mod h1:pdae/AFo6WxLl5L0rq87eRzVPm/XRHM3MoYgRMvG4A0= +github.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4= +github.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU= +github.com/go-openapi/swag/fileutils v0.25.4 h1:2oI0XNW5y6UWZTC7vAxC8hmsK/tOkWXHJQH4lKjqw+Y= +github.com/go-openapi/swag/fileutils v0.25.4/go.mod h1:cdOT/PKbwcysVQ9Tpr0q20lQKH7MGhOEb6EwmHOirUk= +github.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI= +github.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag= +github.com/go-openapi/swag/jsonutils v0.25.4 h1:VSchfbGhD4UTf4vCdR2F4TLBdLwHyUDTd1/q4i+jGZA= +github.com/go-openapi/swag/jsonutils v0.25.4/go.mod h1:7OYGXpvVFPn4PpaSdPHJBtF0iGnbEaTk8AvBkoWnaAY= +github.com/go-openapi/swag/loading v0.25.4 h1:jN4MvLj0X6yhCDduRsxDDw1aHe+ZWoLjW+9ZQWIKn2s= +github.com/go-openapi/swag/loading v0.25.4/go.mod h1:rpUM1ZiyEP9+mNLIQUdMiD7dCETXvkkC30z53i+ftTE= +github.com/go-openapi/swag/mangling v0.25.4 h1:2b9kBJk9JvPgxr36V23FxJLdwBrpijI26Bx5JH4Hp48= +github.com/go-openapi/swag/mangling v0.25.4/go.mod h1:6dxwu6QyORHpIIApsdZgb6wBk/DPU15MdyYj/ikn0Hg= +github.com/go-openapi/swag/netutils v0.25.4 h1:Gqe6K71bGRb3ZQLusdI8p/y1KLgV4M/k+/HzVSqT8H0= +github.com/go-openapi/swag/netutils v0.25.4/go.mod h1:m2W8dtdaoX7oj9rEttLyTeEFFEBvnAx9qHd5nJEBzYg= +github.com/go-openapi/swag/stringutils v0.25.4 h1:O6dU1Rd8bej4HPA3/CLPciNBBDwZj9HiEpdVsb8B5A8= +github.com/go-openapi/swag/stringutils v0.25.4/go.mod h1:GTsRvhJW5xM5gkgiFe0fV3PUlFm0dr8vki6/VSRaZK0= +github.com/go-openapi/swag/typeutils v0.25.4 h1:1/fbZOUN472NTc39zpa+YGHn3jzHWhv42wAJSN91wRw= +github.com/go-openapi/swag/typeutils v0.25.4/go.mod h1:Ou7g//Wx8tTLS9vG0UmzfCsjZjKhpjxayRKTHXf2pTE= +github.com/go-openapi/swag/yamlutils v0.25.4 h1:6jdaeSItEUb7ioS9lFoCZ65Cne1/RZtPBZ9A56h92Sw= +github.com/go-openapi/swag/yamlutils v0.25.4/go.mod h1:MNzq1ulQu+yd8Kl7wPOut/YHAAU/H6hL91fF+E2RFwc= github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= @@ -44,9 +90,13 @@ github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8I github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/pprof v0.0.0-20250902223643-43af68c56e86 h1:VWSt0ptkdpMxQNipJjijbKe7OnY8r85FeQbVfhQPvDE= github.com/google/pprof v0.0.0-20250902223643-43af68c56e86/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.8 h1:NpbJl/eVbvrGE0MJ6X16X9SAifesl6Fwxg/YmCvubRI= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.8/go.mod h1:mi7YA+gCzVem12exXy46ZespvGtX/lZmD/RLnQhVW7U= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -55,6 +105,7 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= @@ -66,6 +117,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8= +github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= @@ -81,10 +134,15 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= +github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= +github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= +github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= +github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= @@ -98,41 +156,122 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= +github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= +github.com/swaggo/http-swagger v1.3.4 h1:q7t/XLx0n15H1Q9/tk3Y9L4n210XzJF5WtnDX64a5ww= +github.com/swaggo/http-swagger v1.3.4/go.mod h1:9dAh0unqMBAlbp1uE2Uc2mQTxNMU/ha4UbucIg1MFkQ= +github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= +github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 h1:djrxvDxAe44mJUrKataUbOhCKhR3F8QCyWucO16hTQs= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0/go.mod h1:dt3nxpQEiSoKvfTVxp3TUg5fHPLhKtbcnN3Z1I1ePD0= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0 h1:9y5sHvAxWzft1WQ4BwqcvA+IFVUJ1Ya75mSAUnFEVwE= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0/go.mod h1:eQqT90eR3X5Dbs1g9YSM30RavwLF725Ris5/XSXWvqE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.16.0 h1:ivlbaajBWJqhcCPniDqDJmRwj4lc6sRT+dCAVKNmxlQ= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.16.0/go.mod h1:u/G56dEKDDwXNCVLsbSrllB2o8pbtFLUC4HpR66r2dc= +go.opentelemetry.io/otel/log v0.16.0 h1:DeuBPqCi6pQwtCK0pO4fvMB5eBq6sNxEnuTs88pjsN4= +go.opentelemetry.io/otel/log v0.16.0/go.mod h1:rWsmqNVTLIA8UnwYVOItjyEZDbKIkMxdQunsIhpUMes= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/sdk/log v0.16.0 h1:e/b4bdlQwC5fnGtG3dlXUrNOnP7c8YLVSpSfEBIkTnI= +go.opentelemetry.io/otel/sdk/log v0.16.0/go.mod h1:JKfP3T6ycy7QEuv3Hj8oKDy7KItrEkus8XJE6EoSzw4= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= 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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= +google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= 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/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=