From 8a1c0851b7f7aca6cd84fccb82e9a8d54efd6a7a Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Thu, 11 Nov 2021 09:26:51 +0530 Subject: [PATCH 01/18] refactor: remove init function from cmd files --- .gitignore | 1 + cmd/config.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ cmd/migrate.go | 18 ++++++------- cmd/root.go | 13 +++++++--- cmd/serve.go | 16 ++++++------ cmd/upload.go | 7 +++--- 6 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 cmd/config.go diff --git a/.gitignore b/.gitignore index ee881e37..ffe5e46f 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ vendor/ .env config.yaml .air.toml +.siren.yaml bin/air tmp dist/ diff --git a/cmd/config.go b/cmd/config.go new file mode 100644 index 00000000..91a44709 --- /dev/null +++ b/cmd/config.go @@ -0,0 +1,68 @@ +package cmd + +import ( + "fmt" + "io/ioutil" + + "github.com/spf13/cobra" + "gopkg.in/yaml.v3" +) + +var ( + DefaultHost = "localhost" + FileName = ".siren" + FileExtension = "yaml" +) + +type configuration struct { + Host string `yaml:"host"` +} + +func configCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "config", + Short: "manage siren CLI configuration", + } + cmd.AddCommand(configInitCommand()) + return cmd +} + +func configInitCommand() *cobra.Command { + return &cobra.Command{ + Use: "init", + Short: "initialize CLI configuration", + RunE: func(cmd *cobra.Command, args []string) error { + config := configuration{ + Host: DefaultHost, + } + + b, err := yaml.Marshal(config) + if err != nil { + return err + } + + filepath := fmt.Sprintf("%v.%v", FileName, FileExtension) + if err := ioutil.WriteFile(filepath, b, 0655); err != nil { + return err + } + fmt.Printf("config created: %v", filepath) + + return nil + }, + } +} + +func readConfig() (*configuration, error) { + var c configuration + filepath := fmt.Sprintf("%v.%v", FileName, FileExtension) + b, err := ioutil.ReadFile(filepath) + if err != nil { + return nil, err + } + + if err := yaml.Unmarshal(b, &c); err != nil { + return nil, err + } + + return &c, nil +} diff --git a/cmd/migrate.go b/cmd/migrate.go index 74809865..dc66fa9d 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -6,15 +6,13 @@ import ( "github.com/spf13/cobra" ) -func init() { - rootCmd.AddCommand(&cobra.Command{ +func migrateCommand() *cobra.Command { + return &cobra.Command{ Use: "migrate", - Short: "Run DB migrations", - RunE: migrate, - }) -} - -func migrate(cmd *cobra.Command, args []string) error { - c := config.LoadConfig() - return app.RunMigrations(c) + Short: "Migrate database schema", + RunE: func(cmd *cobra.Command, args []string) error { + c := config.LoadConfig() + return app.RunMigrations(c) + }, + } } diff --git a/cmd/root.go b/cmd/root.go index 3be9915f..ac6103e4 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -7,12 +7,17 @@ import ( "github.com/spf13/cobra" ) -var rootCmd = &cobra.Command{ - Use: "siren", -} - // Execute runs the command line interface func Execute() { + rootCmd := &cobra.Command{ + Use: "siren", + } + + rootCmd.AddCommand(configCommand()) + rootCmd.AddCommand(serveCommand()) + rootCmd.AddCommand(migrateCommand()) + rootCmd.AddCommand(uploadCommand()) + if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) diff --git a/cmd/serve.go b/cmd/serve.go index f398b27a..949c7650 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -6,15 +6,13 @@ import ( "github.com/spf13/cobra" ) -func init() { - rootCmd.AddCommand(&cobra.Command{ +func serveCommand() *cobra.Command { + return &cobra.Command{ Use: "serve", Short: "Run server", - RunE: serve, - }) -} - -func serve(cmd *cobra.Command, args []string) error { - c := config.LoadConfig() - return app.RunServer(c) + RunE: func(cmd *cobra.Command, args []string) error { + c := config.LoadConfig() + return app.RunServer(c) + }, + } } diff --git a/cmd/upload.go b/cmd/upload.go index 2fe618fc..a5565752 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -3,18 +3,19 @@ package cmd import ( "errors" "fmt" + "github.com/odpf/siren/client" "github.com/odpf/siren/config" "github.com/odpf/siren/pkg/uploader" "github.com/spf13/cobra" ) -func init() { - rootCmd.AddCommand(&cobra.Command{ +func uploadCommand() *cobra.Command { + return &cobra.Command{ Use: "upload", Short: "Upload Rules or Templates YAML file", RunE: upload, - }) + } } func upload(cmd *cobra.Command, args []string) error { From 24e033dab7bc73fa479dcc501314ef42c8fac161 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Thu, 11 Nov 2021 13:10:54 +0530 Subject: [PATCH 02/18] feat: provide provider CURD support in cli --- cmd/config.go | 2 +- cmd/grpc.go | 35 ++++++ cmd/migrate.go | 2 +- cmd/provider.go | 294 ++++++++++++++++++++++++++++++++++++++++++++++++ cmd/root.go | 14 ++- cmd/serve.go | 2 +- cmd/upload.go | 2 +- cmd/utils.go | 33 ++++++ go.mod | 32 +++--- go.sum | 179 +++++++++++++++++++++++++++++ 10 files changed, 574 insertions(+), 21 deletions(-) create mode 100644 cmd/grpc.go create mode 100644 cmd/provider.go create mode 100644 cmd/utils.go diff --git a/cmd/config.go b/cmd/config.go index 91a44709..e142a13c 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -18,7 +18,7 @@ type configuration struct { Host string `yaml:"host"` } -func configCommand() *cobra.Command { +func configCmd() *cobra.Command { cmd := &cobra.Command{ Use: "config", Short: "manage siren CLI configuration", diff --git a/cmd/grpc.go b/cmd/grpc.go new file mode 100644 index 00000000..d27869af --- /dev/null +++ b/cmd/grpc.go @@ -0,0 +1,35 @@ +package cmd + +import ( + "context" + "time" + + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "google.golang.org/grpc" +) + +func createConnection(ctx context.Context, host string) (*grpc.ClientConn, error) { + opts := []grpc.DialOption{ + grpc.WithInsecure(), + grpc.WithBlock(), + } + + return grpc.DialContext(ctx, host, opts...) +} + +func createClient(ctx context.Context, host string) (sirenv1.SirenServiceClient, func(), error) { + dialTimeoutCtx, dialCancel := context.WithTimeout(ctx, time.Second*2) + conn, err := createConnection(dialTimeoutCtx, host) + if err != nil { + dialCancel() + return nil, nil, err + } + + cancel := func() { + dialCancel() + conn.Close() + } + + client := sirenv1.NewSirenServiceClient(conn) + return client, cancel, nil +} diff --git a/cmd/migrate.go b/cmd/migrate.go index dc66fa9d..bdda9e29 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -6,7 +6,7 @@ import ( "github.com/spf13/cobra" ) -func migrateCommand() *cobra.Command { +func migrateCmd() *cobra.Command { return &cobra.Command{ Use: "migrate", Short: "Migrate database schema", diff --git a/cmd/provider.go b/cmd/provider.go new file mode 100644 index 00000000..0a1eb26f --- /dev/null +++ b/cmd/provider.go @@ -0,0 +1,294 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "strconv" + + "github.com/MakeNowJust/heredoc" + "github.com/odpf/salt/printer" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/spf13/cobra" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/structpb" +) + +func providersCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "provider", + Aliases: []string{"providers"}, + Short: "Manage providers", + Long: heredoc.Doc(` + Work with providers. + + Providers are the system for which we intend to mange monitoring and alerting. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + } + + cmd.AddCommand(listProvidersCmd(c)) + cmd.AddCommand(createProviderCmd(c)) + cmd.AddCommand(getProviderCmd(c)) + cmd.AddCommand(updateProviderCmd(c)) + cmd.AddCommand(deleteProviderCmd(c)) + return cmd +} + +func listProvidersCmd(c *configuration) *cobra.Command { + return &cobra.Command{ + Use: "list", + Short: "List providers", + Long: heredoc.Doc(` + List all registered providers. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.ListProviders(ctx, &emptypb.Empty{}) + if err != nil { + return err + } + + providers := res.Providers + report := [][]string{} + + fmt.Printf(" \nShowing %d of %d providers\n \n", len(providers), len(providers)) + report = append(report, []string{"ID", "TYPE", "URN", "NAME"}) + + for _, p := range providers { + report = append(report, []string{ + fmt.Sprintf("%v", p.GetId()), + p.GetType(), + p.GetUrn(), + p.GetName(), + }) + } + printer.Table(os.Stdout, report) + + fmt.Println("\nFor details on a provider, try: siren provider view ") + return nil + }, + } +} + +func createProviderCmd(c *configuration) *cobra.Command { + var filePath string + cmd := &cobra.Command{ + Use: "create", + Short: "Register a new provider", + Long: heredoc.Doc(` + Register a new provider. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var providerConfig domain.Provider + if err := parseFile(filePath, &providerConfig); err != nil { + return err + } + + grpcCredentials, err := structpb.NewStruct(providerConfig.Credentials) + if err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.CreateProvider(ctx, &sirenv1.CreateProviderRequest{ + Host: providerConfig.Host, + Urn: providerConfig.Urn, + Name: providerConfig.Name, + Type: providerConfig.Type, + Credentials: grpcCredentials, + Labels: providerConfig.Labels, + }) + + if err != nil { + return err + } + + fmt.Printf("Provider created with id: %v\n", res.GetId()) + + return nil + }, + } + + cmd.Flags().StringVarP(&filePath, "file", "f", "", "path to the provider config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func getProviderCmd(c *configuration) *cobra.Command { + var format string + cmd := &cobra.Command{ + Use: "view", + Short: "View a provider details", + Long: heredoc.Doc(` + View a provider. + + Display the Id, name, and other information about a provider. + `), + Example: heredoc.Doc(` + $ siren provider view 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + id, err := strconv.ParseUint(args[0], 10, 32) + if err != nil { + return fmt.Errorf("invalid provider id: %v", err) + } + + res, err := client.GetProvider(ctx, &sirenv1.GetProviderRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + provider := &domain.Provider{ + Id: res.GetId(), + Host: res.GetHost(), + Urn: res.GetUrn(), + Name: res.GetName(), + Type: res.GetType(), + Credentials: res.GetCredentials().AsMap(), + Labels: res.GetLabels(), + CreatedAt: res.CreatedAt.AsTime(), + UpdatedAt: res.UpdatedAt.AsTime(), + } + + if err := printer.Text(provider, format); err != nil { + return fmt.Errorf("failed to format provider: %v", err) + } + return nil + }, + } + + cmd.Flags().StringVar(&format, "format", "yaml", "Print output with the selected format") + + return cmd +} + +func updateProviderCmd(c *configuration) *cobra.Command { + var id uint64 + var filePath string + cmd := &cobra.Command{ + Use: "edit", + Short: "Edit a provider", + Long: heredoc.Doc(` + Edit an existing provider. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var providerConfig domain.Provider + if err := parseFile(filePath, &providerConfig); err != nil { + return err + } + + grpcCredentials, err := structpb.NewStruct(providerConfig.Credentials) + if err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + _, err = client.UpdateProvider(ctx, &sirenv1.UpdateProviderRequest{ + Id: id, + Host: providerConfig.Host, + Name: providerConfig.Name, + Type: providerConfig.Type, + Credentials: grpcCredentials, + Labels: providerConfig.Labels, + }) + if err != nil { + return err + } + + fmt.Println("Successfully updated provider") + + return nil + }, + } + + cmd.Flags().Uint64Var(&id, "id", 0, "provider id") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&filePath, "file", "f", "", "Path to the provider config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func deleteProviderCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "delete", + Short: "Delete a provider details", + Example: heredoc.Doc(` + $ siren provider delete 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + id, err := strconv.ParseUint(args[0], 10, 32) + if err != nil { + return fmt.Errorf("invalid provider id: %v", err) + } + + _, err = client.DeleteProvider(ctx, &sirenv1.DeleteProviderRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + fmt.Println("Successfully deleted provider") + return nil + }, + } + + return cmd +} diff --git a/cmd/root.go b/cmd/root.go index ac6103e4..f5161fc0 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -13,10 +13,16 @@ func Execute() { Use: "siren", } - rootCmd.AddCommand(configCommand()) - rootCmd.AddCommand(serveCommand()) - rootCmd.AddCommand(migrateCommand()) - rootCmd.AddCommand(uploadCommand()) + cliConfig, err := readConfig() + if err != nil { + fmt.Println(err) + } + + rootCmd.AddCommand(configCmd()) + rootCmd.AddCommand(serveCmd()) + rootCmd.AddCommand(migrateCmd()) + rootCmd.AddCommand(uploadCmd()) + rootCmd.AddCommand(providersCmd(cliConfig)) if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) diff --git a/cmd/serve.go b/cmd/serve.go index 949c7650..01c0c78d 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -6,7 +6,7 @@ import ( "github.com/spf13/cobra" ) -func serveCommand() *cobra.Command { +func serveCmd() *cobra.Command { return &cobra.Command{ Use: "serve", Short: "Run server", diff --git a/cmd/upload.go b/cmd/upload.go index a5565752..95d479ad 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -10,7 +10,7 @@ import ( "github.com/spf13/cobra" ) -func uploadCommand() *cobra.Command { +func uploadCmd() *cobra.Command { return &cobra.Command{ Use: "upload", Short: "Upload Rules or Templates YAML file", diff --git a/cmd/utils.go b/cmd/utils.go new file mode 100644 index 00000000..fb0350cb --- /dev/null +++ b/cmd/utils.go @@ -0,0 +1,33 @@ +package cmd + +import ( + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "path/filepath" + + "gopkg.in/yaml.v3" +) + +func parseFile(filePath string, v interface{}) error { + b, err := ioutil.ReadFile(filePath) + if err != nil { + return err + } + + switch filepath.Ext(filePath) { + case ".json": + if err := json.Unmarshal(b, v); err != nil { + return fmt.Errorf("invalid json: %w", err) + } + case ".yaml", ".yml": + if err := yaml.Unmarshal(b, v); err != nil { + return fmt.Errorf("invalid yaml: %w", err) + } + default: + return errors.New("unsupported file type") + } + + return nil +} diff --git a/go.mod b/go.mod index d2347ffe..e36f1385 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,10 @@ go 1.16 require ( github.com/DATA-DOG/go-sqlmock v1.5.0 + github.com/MakeNowJust/heredoc v1.0.0 github.com/antihax/optional v1.0.0 + github.com/coreos/bbolt v1.3.2 // indirect + github.com/coreos/etcd v3.3.13+incompatible // indirect github.com/envoyproxy/protoc-gen-validate v0.1.0 github.com/go-openapi/loads v0.20.1 // indirect github.com/go-openapi/runtime v0.19.26 @@ -12,38 +15,41 @@ require ( github.com/go-playground/universal-translator v0.17.0 // indirect github.com/grafana/cortex-tools v0.7.2 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.5.0 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0 github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69 github.com/jeremywohl/flatten v1.0.1 + github.com/kataras/tablewriter v0.0.0-20180708051242-e063d29b7c23 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/lib/pq v1.3.0 - github.com/magiconair/properties v1.8.4 // indirect + github.com/magiconair/properties v1.8.5 // indirect github.com/mcuadros/go-defaults v1.2.0 github.com/mitchellh/mapstructure v1.4.1 github.com/newrelic/go-agent/v3 v3.12.0 github.com/newrelic/go-agent/v3/integrations/nrgrpc v1.3.1 - github.com/pelletier/go-toml v1.8.1 // indirect + github.com/odpf/salt v0.0.0-20211028100023-de463ef825e1 + github.com/pelletier/go-toml v1.9.3 // indirect github.com/pkg/errors v0.9.1 github.com/prometheus/alertmanager v0.21.1-0.20200911160112-1fdff6b3f939 github.com/prometheus/prometheus v1.8.2-0.20201014093524-73e2ce1bd643 + github.com/prometheus/tsdb v0.7.1 // indirect github.com/slack-go/slack v0.9.3 - github.com/spf13/afero v1.4.1 // indirect + github.com/spf13/afero v1.6.0 // indirect github.com/spf13/cast v1.3.1 // indirect - github.com/spf13/cobra v1.1.3 + github.com/spf13/cobra v1.2.1 github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.7.1 - github.com/stretchr/testify v1.6.1 - go.uber.org/zap v1.14.1 + github.com/spf13/viper v1.8.1 + github.com/stretchr/testify v1.7.0 + go.uber.org/zap v1.19.0 golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392 // indirect golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d - golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 - google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced - google.golang.org/grpc v1.38.0 - google.golang.org/protobuf v1.26.0 + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f + google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 + google.golang.org/grpc v1.40.0 + google.golang.org/protobuf v1.27.1 gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 gopkg.in/ini.v1 v1.62.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gorm.io/driver/postgres v1.0.8 gorm.io/gorm v1.20.12 ) diff --git a/go.sum b/go.sum index 392958a6..6f59c464 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,11 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -98,6 +103,8 @@ github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtix github.com/HdrHistogram/hdrhistogram-go v0.9.0 h1:dpujRju0R4M/QZzcnR1LH1qm+TVG3UzkWdp5tH1WMcg= github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qEclQKK70g0KxO61gFFZD4= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/squirrel v0.0.0-20161115235646-20f192218cf5/go.mod h1:xnKTFzjGUiZtiOagBsfnvomW+nJg2usB1ZpordQWqNM= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= @@ -124,9 +131,12 @@ github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3 github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= github.com/alecthomas/chroma v0.7.0/go.mod h1:1U/PfCsTALWWYHDnsIQkxEBM0+6LLe0v8+RSVMOwxeY= +github.com/alecthomas/chroma v0.8.2 h1:x3zkuE2lUk/RIekyAJ3XRqSCP4zwWDfcw/YJCuCAACg= +github.com/alecthomas/chroma v0.8.2/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= github.com/alecthomas/kong v0.1.17-0.20190424132513-439c674f7ae0/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= +github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= github.com/alecthomas/kong-hcl v0.1.8-0.20190615233001-b21fea9723c8/go.mod h1:MRgZdU3vrFd05IQ89AxUZ0aYdF39BYoNFa324SodPCA= github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= @@ -174,8 +184,11 @@ github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.35.5/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -183,6 +196,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/bmatcuk/doublestar v1.2.2/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= @@ -204,6 +218,8 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charmbracelet/glamour v0.3.0 h1:3H+ZrKlSg8s+WU6V7eF2eRVYt8lCueffbi7r2+ffGkc= +github.com/charmbracelet/glamour v0.3.0/go.mod h1:TzF0koPZhqq0YVBNL100cPHznAAjVj7fksX2RInwjGw= github.com/chromedp/cdproto v0.0.0-20200116234248-4da64dd111ac/go.mod h1:PfAWWKJqjlGFYJEidUM6aVIWPr0EpobeyVWEEmplX7g= github.com/chromedp/cdproto v0.0.0-20200424080200-0de008e41fa0/go.mod h1:PfAWWKJqjlGFYJEidUM6aVIWPr0EpobeyVWEEmplX7g= github.com/chromedp/chromedp v0.5.3/go.mod h1:YLdPtndaHQ4rCpSpBG+IPpy9JvX0VD+7aaLxYgYj28w= @@ -215,7 +231,9 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= @@ -234,6 +252,7 @@ github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cortexproject/cortex v0.6.1-0.20200228110116-92ab6cbe0995/go.mod h1:3Xa3DjJxtpXqxcMGdk850lcIRb81M0fyY1MQ6udY134= @@ -256,6 +275,7 @@ github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65/go.mod h1:q2w6Bg5je github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/cznic/zappy v0.0.0-20160723133515-2533cb5b45cc/go.mod h1:Y1SNZ4dRUOKXshKUbwUapqNncRrho4mkjQebgEHZLj8= github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= +github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -276,6 +296,7 @@ github.com/digitalocean/godo v1.42.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2x github.com/digitalocean/godo v1.42.1/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= github.com/digitalocean/godo v1.46.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/distribution v2.7.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -312,7 +333,10 @@ github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4s github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= @@ -348,6 +372,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= @@ -505,6 +530,7 @@ github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhD github.com/gocql/gocql v0.0.0-20200121121104-95d072f1b5bb/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= github.com/gocql/gocql v0.0.0-20200526081602-cd04bd7f22a7/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= github.com/godbus/dbus v0.0.0-20190402143921-271e53dc4968/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= @@ -527,6 +553,7 @@ github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgR github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -541,6 +568,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -555,7 +583,9 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -583,6 +613,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -594,6 +626,7 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190723021845-34ac40c74b70/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -605,6 +638,10 @@ github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200615235658-03e1cf38a040/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201007051231-1066cbb265c7/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -631,10 +668,13 @@ github.com/gopherjs/gopherjs v0.0.0-20191106031601-ce3c9ade29de h1:F7WD09S8QB4Lr github.com/gopherjs/gopherjs v0.0.0-20191106031601-ce3c9ade29de/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/csrf v1.6.0/go.mod h1:7tSf8kmjNYr7IWDCYhd3U8Ck34iQ/Yw5CJu7bAkHEGI= +github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/handlers v1.4.1/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -657,8 +697,12 @@ github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= github.com/grpc-ecosystem/grpc-gateway v1.15.0 h1:ntPNC9TD/6l2XDenJZe6T5lSMg95thpV9sGAqHX4WU8= github.com/grpc-ecosystem/grpc-gateway v1.15.0/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.5.0 h1:ajue7SzQMywqRjg2fK7dcpc0QhFGpTR2plWfV4EZWR4= github.com/grpc-ecosystem/grpc-gateway/v2 v2.5.0/go.mod h1:r1hZAcvfFXuYmcKyCJI9wlyOPIZUJl6FCB8Cpca/NLE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0 h1:rgxjzoDmDXw5q8HONgyHhBas4to0/XWRo/gPpJhsUNQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0/go.mod h1:qrJPVzv9YlhsrxJc3P/Q85nr0w1lIRikTl4JlhdDH5w= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69 h1:7xsUJsB2NrdcttQPa7JLEaGzvdbk7KvfrjgHZXOQRo0= github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69/go.mod h1:YLEMZOtU+AZ7dhN9T/IpGhXVGly2bvkJQ+zxj3WeVQo= @@ -696,6 +740,7 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -722,6 +767,7 @@ github.com/hodgesds/perf-utils v0.0.8/go.mod h1:F6TfvsbtrF88i++hou29dTXlI2sfsJv+ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -829,6 +875,7 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= @@ -842,6 +889,8 @@ github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kataras/tablewriter v0.0.0-20180708051242-e063d29b7c23 h1:M8exrBzuhWcU6aoHJlHWPe4qFjVKzkMGRal78f5jRRU= +github.com/kataras/tablewriter v0.0.0-20180708051242-e063d29b7c23/go.mod h1:kBSna6b0/RzsOcOZf515vAXwSsXYusl2U7SA0XP09yI= github.com/kevinbheda/cortex-tools v0.8.0 h1:N3knpcJvifrv7t0mh/howWWcXSWEp9xhLfRfNLnAAww= github.com/kevinbheda/cortex-tools v0.8.0/go.mod h1:f4Br/FRc41kxdTdOKhMjyOO3XFpz4gX3m2Ok4zaK3KQ= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -891,11 +940,15 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.0/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt17nSPdS3K5e+ZTBY= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY= github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -924,11 +977,17 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= @@ -945,6 +1004,8 @@ github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqc github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= github.com/mdlayher/wifi v0.0.0-20190303161829-b1436901ddee/go.mod h1:Evt/EIne46u9PtQbeTx2NTcqURpr5K4SvKtGmBuDPN8= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/microcosm-cc/bluemonday v1.0.6 h1:ZOvqHKtnx0fUpnbQm3m3zKFWE+DRC+XB1onh8JoEObE= +github.com/microcosm-cc/bluemonday v1.0.6/go.mod h1:HOT/6NaBlR0f9XlxD3zolN6Z3N8Lp4pvhp+jLS5ihnI= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= @@ -986,6 +1047,11 @@ github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7P github.com/mozillazg/go-cos v0.13.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/muesli/reflow v0.2.0 h1:2o0UBJPHHH4fa2GCXU4Rg4DwOtWPMekCeyc5EWbAQp0= +github.com/muesli/reflow v0.2.0/go.mod h1:qT22vjVmM9MIUeLgsVYe/Ye7eZlbv9dZjL3dVhUqLX8= +github.com/muesli/termenv v0.8.1/go.mod h1:kzt/D/4a88RoheZmwfqorY3A+tnsSMA9HJC/fQSFKo0= +github.com/muesli/termenv v0.9.0 h1:wnbOaGz+LUR3jNT0zOzinPnyDaCZUQRZj9GxK8eRVl8= +github.com/muesli/termenv v0.9.0/go.mod h1:R/LzAKf+suGs4IsO95y7+7DpFHO0KABgnZqtlyx2mBw= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= @@ -1008,6 +1074,8 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/odpf/salt v0.0.0-20211028100023-de463ef825e1 h1:iFoq6ugjCrjmZ4eS4AS/HoFwX+uQVSxVpX/qJF4lMzs= +github.com/odpf/salt v0.0.0-20211028100023-de463ef825e1/go.mod h1:NVnVQaXur70W/1wo06X6DYu6utZIUI/bMeMGyvFIwyo= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= @@ -1017,6 +1085,8 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -1064,6 +1134,8 @@ github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUr github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= @@ -1105,6 +1177,8 @@ github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1128,6 +1202,8 @@ github.com/prometheus/common v0.11.1/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.12.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.14.0 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4= github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289/go.mod h1:FGbBv5OPKjch+jNUJmEQpMZytIdyW0NdBtWFcfSKusc= github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1143,6 +1219,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= github.com/prometheus/prometheus v0.0.0-20190818123050-43acd0e2e93f/go.mod h1:rMTlmxGCvukf2KMu3fClMDKLLoJ5hl61MhcJ7xKakf0= github.com/prometheus/prometheus v1.8.2-0.20200107122003-4708915ac6ef/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI= @@ -1158,6 +1236,9 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1206,6 +1287,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/slack-go/slack v0.9.3 h1:H1UwldF1zWQakjaSymbHMgG3Pg1BiClez/a7JRLdxKc= github.com/slack-go/slack v0.9.3/go.mod h1:wWL//kk0ho+FcQXcBTmEafUI5dz4qz5f4mMk8oIkioQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -1215,6 +1298,7 @@ github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:s github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a/go.mod h1:LeFCbQYJ3KJlPs/FvPz2dy1tkpxyeNESVyCNNzRXFR0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1224,12 +1308,16 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ= github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1241,6 +1329,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1256,6 +1346,8 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/thanos-io/thanos v0.8.1-0.20200109203923-552ffa4c1a0d/go.mod h1:usT/TxtJQ7DzinTt+G9kinDQmRS5sxwu0unVKZ9vdcw= @@ -1305,10 +1397,16 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.3/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.3.5 h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os= +github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= +go.buf.build/odpf/gw/grpc-ecosystem/grpc-gateway v1.1.35/go.mod h1:/LuddrGPi0fwj7ay6Orutt8oFfPz8Y3c8qdBkacJq1A= +go.buf.build/odpf/gw/odpf/proton v1.1.9/go.mod h1:I9E8CF7w/690vRNWqBU6qDcUbi3Pi2THdn1yycBVTDQ= go.elastic.co/apm v1.5.0/go.mod h1:OdB9sPtM6Vt7oz3VXt7+KR96i9li74qrxBGHTQygFvk= go.elastic.co/apm/module/apmhttp v1.5.0/go.mod h1:1FbmNuyD3ddauwzgVwFB0fqY6KbZt3JkV187tGCYYhY= go.elastic.co/apm/module/apmot v1.5.0/go.mod h1:d2KYwhJParTpyw2WnTNy8geNlHKKFX+4oK3YLlsesWE= @@ -1319,6 +1417,9 @@ go.etcd.io/bbolt v1.3.5-0.20200615073812-232d8fc87f50/go.mod h1:G5EMThwa9y8QZGBC go.etcd.io/etcd v0.0.0-20190709142735-eb7dd97135a5/go.mod h1:N0RPWo9FXJYZQI4BTkDtQylrstIigYHeR18ONnyTufk= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.5.0-alpha.5.0.20200520232829-54ba9589114f/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -1338,7 +1439,10 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1355,6 +1459,8 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+ go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -1362,6 +1468,9 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20180608092829-8ac0e0d97ce4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1421,6 +1530,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= @@ -1431,6 +1541,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1484,10 +1596,15 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1499,8 +1616,16 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns= golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1512,6 +1637,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200930132711-30421366ff76/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1580,6 +1706,7 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1598,10 +1725,21 @@ golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201008064518-c1f3e3309c71/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1702,9 +1840,17 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201008025239-9df69603baec/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201030143252-cf7a54d06671/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3 h1:L69ShwSZEyCsLKoAxDKeMvLDZkumEe8gXUZAjab0tX8= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1738,6 +1884,12 @@ google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1747,6 +1899,8 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180608181217-32ee49c4dd80/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1790,8 +1944,20 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus= google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1815,8 +1981,17 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1830,6 +2005,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1875,6 +2052,8 @@ gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/postgres v1.0.8 h1:PAgM+PaHOSAeroTjHkCHCBIHHoBIf9RgPWGo8dF2DA8= gorm.io/driver/postgres v1.0.8/go.mod h1:4eOzrI1MUfm6ObJU/UcmbXyiHSs8jSwH95G5P5dxcAg= gorm.io/gorm v1.20.12 h1:ebZ5KrSHzet+sqOCVdH9mTjW91L298nX3v5lVxAzSUY= From fb531ced9ff61a8348a3adcf534ead8d1f9338da Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Thu, 11 Nov 2021 15:03:07 +0530 Subject: [PATCH 03/18] feat: provide namespace CURD support in cli --- cmd/namespace.go | 289 +++++++++++++++++++++++++++++++++++++++++++++++ cmd/provider.go | 4 +- cmd/root.go | 1 + 3 files changed, 292 insertions(+), 2 deletions(-) create mode 100644 cmd/namespace.go diff --git a/cmd/namespace.go b/cmd/namespace.go new file mode 100644 index 00000000..d95f299c --- /dev/null +++ b/cmd/namespace.go @@ -0,0 +1,289 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "strconv" + + "github.com/MakeNowJust/heredoc" + "github.com/odpf/salt/printer" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/spf13/cobra" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/structpb" +) + +func namespacesCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "namespace", + Aliases: []string{"namespaces"}, + Short: "Manage namespaces", + Long: heredoc.Doc(` + Work with namespaces. + + namespaces are used for multi-tenancy for a givin provider. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + } + + cmd.AddCommand(listNamespacesCmd(c)) + cmd.AddCommand(createNamespaceCmd(c)) + cmd.AddCommand(getNamespaceCmd(c)) + cmd.AddCommand(updateNamespaceCmd(c)) + cmd.AddCommand(deleteNamespaceCmd(c)) + return cmd +} + +func listNamespacesCmd(c *configuration) *cobra.Command { + return &cobra.Command{ + Use: "list", + Short: "List namespaces", + Long: heredoc.Doc(` + List all registered namespaces. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.ListNamespaces(ctx, &emptypb.Empty{}) + if err != nil { + return err + } + + namespaces := res.Namespaces + report := [][]string{} + + fmt.Printf(" \nShowing %d of %d namespaces\n \n", len(namespaces), len(namespaces)) + report = append(report, []string{"ID", "URN", "NAME"}) + + for _, p := range namespaces { + report = append(report, []string{ + fmt.Sprintf("%v", p.GetId()), + p.GetUrn(), + p.GetName(), + }) + } + printer.Table(os.Stdout, report) + + fmt.Println("\nFor details on a namespace, try: siren namespace view ") + return nil + }, + } +} + +func createNamespaceCmd(c *configuration) *cobra.Command { + var filePath string + cmd := &cobra.Command{ + Use: "create", + Short: "Create a new namespace", + Long: heredoc.Doc(` + Create a new namespace. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var namespaceConfig domain.Namespace + if err := parseFile(filePath, &namespaceConfig); err != nil { + return err + } + + grpcCredentials, err := structpb.NewStruct(namespaceConfig.Credentials) + if err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.CreateNamespace(ctx, &sirenv1.CreateNamespaceRequest{ + Provider: namespaceConfig.Provider, + Urn: namespaceConfig.Urn, + Name: namespaceConfig.Name, + Credentials: grpcCredentials, + Labels: namespaceConfig.Labels, + }) + + if err != nil { + return err + } + + fmt.Printf("namespace created with id: %v\n", res.GetId()) + + return nil + }, + } + + cmd.Flags().StringVarP(&filePath, "file", "f", "", "path to the namespace config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func getNamespaceCmd(c *configuration) *cobra.Command { + var format string + cmd := &cobra.Command{ + Use: "view", + Short: "View a namespace details", + Long: heredoc.Doc(` + View a namespace. + + Display the Id, name, and other information about a namespace. + `), + Example: heredoc.Doc(` + $ siren namespace view 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + id, err := strconv.ParseUint(args[0], 10, 32) + if err != nil { + return fmt.Errorf("invalid namespace id: %v", err) + } + + res, err := client.GetNamespace(ctx, &sirenv1.GetNamespaceRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + namespace := &domain.Namespace{ + Id: res.GetId(), + Urn: res.GetUrn(), + Name: res.GetName(), + Credentials: res.GetCredentials().AsMap(), + Labels: res.GetLabels(), + CreatedAt: res.CreatedAt.AsTime(), + UpdatedAt: res.UpdatedAt.AsTime(), + } + + if err := printer.Text(namespace, format); err != nil { + return fmt.Errorf("failed to format namespace: %v", err) + } + return nil + }, + } + + cmd.Flags().StringVar(&format, "format", "yaml", "Print output with the selected format") + + return cmd +} + +func updateNamespaceCmd(c *configuration) *cobra.Command { + var id uint64 + var filePath string + cmd := &cobra.Command{ + Use: "edit", + Short: "Edit a namespace", + Long: heredoc.Doc(` + Edit an existing namespace. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var namespaceConfig domain.Namespace + if err := parseFile(filePath, &namespaceConfig); err != nil { + return err + } + + grpcCredentials, err := structpb.NewStruct(namespaceConfig.Credentials) + if err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + _, err = client.UpdateNamespace(ctx, &sirenv1.UpdateNamespaceRequest{ + Id: id, + Provider: namespaceConfig.Provider, + Name: namespaceConfig.Name, + Credentials: grpcCredentials, + Labels: namespaceConfig.Labels, + }) + if err != nil { + return err + } + + fmt.Println("Successfully updated namespace") + + return nil + }, + } + + cmd.Flags().Uint64Var(&id, "id", 0, "namespace id") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&filePath, "file", "f", "", "Path to the namespace config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func deleteNamespaceCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "delete", + Short: "Delete a namespace details", + Example: heredoc.Doc(` + $ siren namespace delete 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + id, err := strconv.ParseUint(args[0], 10, 32) + if err != nil { + return fmt.Errorf("invalid namespace id: %v", err) + } + + _, err = client.DeleteNamespace(ctx, &sirenv1.DeleteNamespaceRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + fmt.Println("Successfully deleted namespace") + return nil + }, + } + + return cmd +} diff --git a/cmd/provider.go b/cmd/provider.go index 0a1eb26f..91631d3f 100644 --- a/cmd/provider.go +++ b/cmd/provider.go @@ -87,9 +87,9 @@ func createProviderCmd(c *configuration) *cobra.Command { var filePath string cmd := &cobra.Command{ Use: "create", - Short: "Register a new provider", + Short: "Create a new provider", Long: heredoc.Doc(` - Register a new provider. + Create a new provider. `), Annotations: map[string]string{ "group:core": "true", diff --git a/cmd/root.go b/cmd/root.go index f5161fc0..c54d4946 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -23,6 +23,7 @@ func Execute() { rootCmd.AddCommand(migrateCmd()) rootCmd.AddCommand(uploadCmd()) rootCmd.AddCommand(providersCmd(cliConfig)) + rootCmd.AddCommand(namespacesCmd(cliConfig)) if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) From 9b651c9f9cc2ae3d4ab194c6e5be75356198b93a Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Thu, 11 Nov 2021 16:45:00 +0530 Subject: [PATCH 04/18] feat: provide receiver CURD support in cli --- cmd/receiver.go | 349 ++++++++++++++++++++++++++++++++++++++++++++++++ cmd/root.go | 1 + 2 files changed, 350 insertions(+) create mode 100644 cmd/receiver.go diff --git a/cmd/receiver.go b/cmd/receiver.go new file mode 100644 index 00000000..d90936d7 --- /dev/null +++ b/cmd/receiver.go @@ -0,0 +1,349 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "strconv" + + "github.com/MakeNowJust/heredoc" + "github.com/odpf/salt/printer" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/spf13/cobra" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/structpb" +) + +func receiversCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "receiver", + Aliases: []string{"receivers"}, + Short: "Manage receivers", + Long: heredoc.Doc(` + Work with receivers. + + Receivers are the medium to send notification for which we intend to mange configuration. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + } + + cmd.AddCommand(listReceiversCmd(c)) + cmd.AddCommand(createReceiverCmd(c)) + cmd.AddCommand(getReceiverCmd(c)) + cmd.AddCommand(updateReceiverCmd(c)) + cmd.AddCommand(deleteReceiverCmd(c)) + cmd.AddCommand(sendReceiverNotificationCmd(c)) + return cmd +} + +func listReceiversCmd(c *configuration) *cobra.Command { + return &cobra.Command{ + Use: "list", + Short: "List receivers", + Long: heredoc.Doc(` + List all registered receivers. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.ListReceivers(ctx, &emptypb.Empty{}) + if err != nil { + return err + } + + receivers := res.Receivers + report := [][]string{} + + fmt.Printf(" \nShowing %d of %d receivers\n \n", len(receivers), len(receivers)) + report = append(report, []string{"ID", "TYPE", "NAME"}) + + for _, p := range receivers { + report = append(report, []string{ + fmt.Sprintf("%v", p.GetId()), + p.GetType(), + p.GetName(), + }) + } + printer.Table(os.Stdout, report) + + fmt.Println("\nFor details on a receiver, try: siren receiver view ") + return nil + }, + } +} + +func createReceiverCmd(c *configuration) *cobra.Command { + var filePath string + cmd := &cobra.Command{ + Use: "create", + Short: "Create a new receiver", + Long: heredoc.Doc(` + Create a new receiver. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var receiverConfig domain.Receiver + if err := parseFile(filePath, &receiverConfig); err != nil { + return err + } + + grpcConfigurations, err := structpb.NewStruct(receiverConfig.Configurations) + if err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.CreateReceiver(ctx, &sirenv1.CreateReceiverRequest{ + Name: receiverConfig.Name, + Type: receiverConfig.Type, + Configurations: grpcConfigurations, + Labels: receiverConfig.Labels, + }) + + if err != nil { + return err + } + + fmt.Printf("Receiver created with id: %v\n", res.GetId()) + + return nil + }, + } + + cmd.Flags().StringVarP(&filePath, "file", "f", "", "path to the receiver config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func getReceiverCmd(c *configuration) *cobra.Command { + var format string + cmd := &cobra.Command{ + Use: "view", + Short: "View a receiver details", + Long: heredoc.Doc(` + View a receiver. + + Display the Id, name, and other information about a receiver. + `), + Example: heredoc.Doc(` + $ siren receiver view 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + id, err := strconv.ParseUint(args[0], 10, 32) + if err != nil { + return fmt.Errorf("invalid receiver id: %v", err) + } + + res, err := client.GetReceiver(ctx, &sirenv1.GetReceiverRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + receiver := &domain.Receiver{ + Id: res.GetId(), + Name: res.GetName(), + Type: res.GetType(), + Configurations: res.GetConfigurations().AsMap(), + Labels: res.GetLabels(), + Data: res.GetData().AsMap(), + CreatedAt: res.CreatedAt.AsTime(), + UpdatedAt: res.UpdatedAt.AsTime(), + } + + if err := printer.Text(receiver, format); err != nil { + return fmt.Errorf("failed to format receiver: %v", err) + } + return nil + }, + } + + cmd.Flags().StringVar(&format, "format", "yaml", "Print output with the selected format") + + return cmd +} + +func updateReceiverCmd(c *configuration) *cobra.Command { + var id uint64 + var filePath string + cmd := &cobra.Command{ + Use: "edit", + Short: "Edit a receiver", + Long: heredoc.Doc(` + Edit an existing receiver. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var receiverConfig domain.Receiver + if err := parseFile(filePath, &receiverConfig); err != nil { + return err + } + + grpcConfigurations, err := structpb.NewStruct(receiverConfig.Configurations) + if err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + _, err = client.UpdateReceiver(ctx, &sirenv1.UpdateReceiverRequest{ + Id: id, + Name: receiverConfig.Name, + Type: receiverConfig.Type, + Configurations: grpcConfigurations, + Labels: receiverConfig.Labels, + }) + if err != nil { + return err + } + + fmt.Println("Successfully updated receiver") + + return nil + }, + } + + cmd.Flags().Uint64Var(&id, "id", 0, "receiver id") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&filePath, "file", "f", "", "Path to the receiver config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func deleteReceiverCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "delete", + Short: "Delete a receiver details", + Example: heredoc.Doc(` + $ siren receiver delete 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + id, err := strconv.ParseUint(args[0], 10, 32) + if err != nil { + return fmt.Errorf("invalid receiver id: %v", err) + } + + _, err = client.DeleteReceiver(ctx, &sirenv1.DeleteReceiverRequest{ + Id: uint64(id), + }) + if err != nil { + return err + } + + fmt.Println("Successfully deleted receiver") + return nil + }, + } + + return cmd +} + +func sendReceiverNotificationCmd(c *configuration) *cobra.Command { + var id uint64 + var filePath string + cmd := &cobra.Command{ + Use: "send", + Short: "Send a receiver notification", + Long: heredoc.Doc(` + Send a notification to receiver. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var notificationConfig sirenv1.SendReceiverNotificationRequest + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + receiver, err := client.GetReceiver(ctx, &sirenv1.GetReceiverRequest{ + Id: id, + }) + if err != nil { + return err + } + + notificationConfig.Id = id + switch receiver.Type { + case "slack": + var slackConfig *sirenv1.SendReceiverNotificationRequest_Slack + if err := parseFile(filePath, &slackConfig); err != nil { + return err + } + + notificationConfig.Data = slackConfig + } + + _, err = client.SendReceiverNotification(ctx, ¬ificationConfig) + if err != nil { + return err + } + + fmt.Println("Successfully send receiver notification") + + return nil + }, + } + + cmd.Flags().Uint64Var(&id, "id", 0, "receiver id") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&filePath, "file", "f", "", "Path to the receiver notification config") + cmd.MarkFlagRequired("file") + + return cmd +} diff --git a/cmd/root.go b/cmd/root.go index c54d4946..190a3d5f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -24,6 +24,7 @@ func Execute() { rootCmd.AddCommand(uploadCmd()) rootCmd.AddCommand(providersCmd(cliConfig)) rootCmd.AddCommand(namespacesCmd(cliConfig)) + rootCmd.AddCommand(receiversCmd(cliConfig)) if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) From 535083e1f84bbc589badad6b334e29024543a3db Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Fri, 12 Nov 2021 15:58:34 +0530 Subject: [PATCH 05/18] feat: provide template CURD support in cli --- cmd/root.go | 1 + cmd/template.go | 299 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 300 insertions(+) create mode 100644 cmd/template.go diff --git a/cmd/root.go b/cmd/root.go index 190a3d5f..fc4133bd 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -25,6 +25,7 @@ func Execute() { rootCmd.AddCommand(providersCmd(cliConfig)) rootCmd.AddCommand(namespacesCmd(cliConfig)) rootCmd.AddCommand(receiversCmd(cliConfig)) + rootCmd.AddCommand(templatesCmd(cliConfig)) if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) diff --git a/cmd/template.go b/cmd/template.go new file mode 100644 index 00000000..d113602e --- /dev/null +++ b/cmd/template.go @@ -0,0 +1,299 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "strings" + + "github.com/MakeNowJust/heredoc" + "github.com/odpf/salt/printer" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/spf13/cobra" +) + +func templatesCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "template", + Aliases: []string{"templates"}, + Short: "Manage templates", + Long: heredoc.Doc(` + Work with templates. + + templates are used for alert abstraction. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + } + + cmd.AddCommand(listTemplatesCmd(c)) + cmd.AddCommand(upsertTemplateCmd(c)) + cmd.AddCommand(getTemplateCmd(c)) + cmd.AddCommand(deleteTemplateCmd(c)) + cmd.AddCommand(renderTemplateCmd(c)) + + return cmd +} + +func listTemplatesCmd(c *configuration) *cobra.Command { + var tag string + cmd := &cobra.Command{ + Use: "list", + Short: "List templates", + Long: heredoc.Doc(` + List all registered templates. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.ListTemplates(ctx, &sirenv1.ListTemplatesRequest{ + Tag: tag, + }) + if err != nil { + return err + } + + templates := res.Templates + report := [][]string{} + + fmt.Printf(" \nShowing %d of %d templates\n \n", len(templates), len(templates)) + report = append(report, []string{"ID", "NAME", "TAGS"}) + + for _, p := range templates { + report = append(report, []string{ + fmt.Sprintf("%v", p.GetId()), + p.GetName(), + strings.Join(p.GetTags(), ","), + }) + } + printer.Table(os.Stdout, report) + + fmt.Println("\nFor details on a template, try: siren template view ") + return nil + }, + } + + cmd.Flags().StringVar(&tag, "tag", "", "template tag name") + + return cmd +} + +func upsertTemplateCmd(c *configuration) *cobra.Command { + var filePath string + cmd := &cobra.Command{ + Use: "upsert", + Short: "Create or edit a new template", + Long: heredoc.Doc(` + Create or edit a new template. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var templateConfig domain.Template + if err := parseFile(filePath, &templateConfig); err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + variables := make([]*sirenv1.TemplateVariables, 0) + for _, variable := range templateConfig.Variables { + variables = append(variables, &sirenv1.TemplateVariables{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + + res, err := client.UpsertTemplate(ctx, &sirenv1.UpsertTemplateRequest{ + Name: templateConfig.Name, + Body: templateConfig.Body, + Tags: templateConfig.Tags, + Variables: variables, + }) + + if err != nil { + return err + } + + fmt.Printf("template created with id: %v\n", res.GetTemplate().GetId()) + + return nil + }, + } + + cmd.Flags().StringVarP(&filePath, "file", "f", "", "path to the template config") + cmd.MarkFlagRequired("file") + + return cmd +} + +func getTemplateCmd(c *configuration) *cobra.Command { + var format string + cmd := &cobra.Command{ + Use: "view", + Short: "View a template details", + Long: heredoc.Doc(` + View a template. + + Display the Id, name, and other information about a template. + `), + Example: heredoc.Doc(` + $ siren template view + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + name := args[0] + res, err := client.GetTemplateByName(ctx, &sirenv1.GetTemplateByNameRequest{ + Name: name, + }) + if err != nil { + return err + } + + templateData := res.Template + + variables := make([]domain.Variable, 0) + for _, variable := range templateData.GetVariables() { + variables = append(variables, domain.Variable{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + + template := &domain.Template{ + ID: uint(templateData.GetId()), + Name: templateData.GetName(), + Body: templateData.GetBody(), + Tags: templateData.GetTags(), + Variables: variables, + CreatedAt: templateData.CreatedAt.AsTime(), + UpdatedAt: templateData.UpdatedAt.AsTime(), + } + + if err := printer.Text(template, format); err != nil { + return fmt.Errorf("failed to format template: %v", err) + } + return nil + }, + } + + cmd.Flags().StringVar(&format, "format", "yaml", "Print output with the selected format") + + return cmd +} + +func deleteTemplateCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "delete", + Short: "Delete a template details", + Example: heredoc.Doc(` + $ siren template delete 1 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + name := args[0] + _, err = client.DeleteTemplate(ctx, &sirenv1.DeleteTemplateRequest{ + Name: name, + }) + if err != nil { + return err + } + + fmt.Println("Successfully deleted template") + return nil + }, + } + + return cmd +} + +func renderTemplateCmd(c *configuration) *cobra.Command { + var name string + var filePath string + var format string + cmd := &cobra.Command{ + Use: "render", + Short: "Render a template details", + + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var variableConfig struct { + Variables map[string]string + } + if err := parseFile(filePath, &variableConfig); err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + template, err := client.RenderTemplate(ctx, &sirenv1.RenderTemplateRequest{ + Name: name, + Variables: variableConfig.Variables, + }) + if err != nil { + return err + } + + if err := printer.Text(template, format); err != nil { + return fmt.Errorf("failed to format template: %v", err) + } + return nil + + }, + } + + cmd.Flags().StringVar(&name, "name", "", "template name") + cmd.MarkFlagRequired("name") + cmd.Flags().StringVarP(&filePath, "file", "f", "", "path to the template config") + cmd.MarkFlagRequired("file") + cmd.Flags().StringVar(&format, "format", "yaml", "Print output with the selected format") + + return cmd +} From f82402795dd187a59659c64de6a5ca8ac3edb1f8 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Fri, 12 Nov 2021 16:05:30 +0530 Subject: [PATCH 06/18] refactor: template APIs into seprate file --- api/handlers/v1/grpc.go | 123 ---------- api/handlers/v1/grpc_template.go | 133 +++++++++++ api/handlers/v1/grpc_template_test.go | 325 ++++++++++++++++++++++++++ api/handlers/v1/grpc_test.go | 310 ------------------------ 4 files changed, 458 insertions(+), 433 deletions(-) create mode 100644 api/handlers/v1/grpc_template.go create mode 100644 api/handlers/v1/grpc_template_test.go diff --git a/api/handlers/v1/grpc.go b/api/handlers/v1/grpc.go index 99b59fda..fe4322ec 100644 --- a/api/handlers/v1/grpc.go +++ b/api/handlers/v1/grpc.go @@ -10,7 +10,6 @@ import ( "go.uber.org/zap" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/timestamppb" ) type GRPCServer struct { @@ -120,125 +119,3 @@ func (s *GRPCServer) UpdateAlertCredentials(_ context.Context, req *sirenv1.Upda return &sirenv1.UpdateAlertCredentialsResponse{}, nil } -func (s *GRPCServer) ListTemplates(_ context.Context, req *sirenv1.ListTemplatesRequest) (*sirenv1.ListTemplatesResponse, error) { - templates, err := s.container.TemplatesService.Index(req.GetTag()) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - - res := &sirenv1.ListTemplatesResponse{Templates: make([]*sirenv1.Template, 0)} - for _, template := range templates { - variables := make([]*sirenv1.TemplateVariables, 0) - for _, variable := range template.Variables { - variables = append(variables, &sirenv1.TemplateVariables{ - Name: variable.Name, - Type: variable.Type, - Default: variable.Default, - Description: variable.Description, - }) - } - res.Templates = append(res.Templates, &sirenv1.Template{ - Id: uint64(template.ID), - Name: template.Name, - Body: template.Body, - Tags: template.Tags, - CreatedAt: timestamppb.New(template.CreatedAt), - UpdatedAt: timestamppb.New(template.UpdatedAt), - Variables: variables, - }) - } - - return res, nil -} - -func (s *GRPCServer) GetTemplateByName(_ context.Context, req *sirenv1.GetTemplateByNameRequest) (*sirenv1.TemplateResponse, error) { - template, err := s.container.TemplatesService.GetByName(req.GetName()) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - - variables := make([]*sirenv1.TemplateVariables, 0) - for _, variable := range template.Variables { - variables = append(variables, &sirenv1.TemplateVariables{ - Name: variable.Name, - Type: variable.Type, - Default: variable.Default, - Description: variable.Description, - }) - } - res := &sirenv1.TemplateResponse{ - Template: &sirenv1.Template{ - Id: uint64(template.ID), - Name: template.Name, - Body: template.Body, - Tags: template.Tags, - CreatedAt: timestamppb.New(template.CreatedAt), - UpdatedAt: timestamppb.New(template.UpdatedAt), - Variables: variables, - }, - } - return res, nil -} - -func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1.UpsertTemplateRequest) (*sirenv1.TemplateResponse, error) { - variables := make([]domain.Variable, 0) - for _, variable := range req.GetVariables() { - variables = append(variables, domain.Variable{ - Name: variable.Name, - Type: variable.Type, - Default: variable.Default, - Description: variable.Description, - }) - } - payload := &domain.Template{ - ID: uint(req.GetId()), - Name: req.GetName(), - Body: req.GetBody(), - Tags: req.GetTags(), - Variables: variables, - } - template, err := s.container.TemplatesService.Upsert(payload) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - - templateVariables := make([]*sirenv1.TemplateVariables, 0) - for _, variable := range template.Variables { - templateVariables = append(templateVariables, &sirenv1.TemplateVariables{ - Name: variable.Name, - Type: variable.Type, - Default: variable.Default, - Description: variable.Description, - }) - } - res := &sirenv1.TemplateResponse{ - Template: &sirenv1.Template{ - Id: uint64(template.ID), - Name: template.Name, - Body: template.Body, - Tags: template.Tags, - CreatedAt: timestamppb.New(template.CreatedAt), - UpdatedAt: timestamppb.New(template.UpdatedAt), - Variables: templateVariables, - }, - } - return res, nil -} - -func (s *GRPCServer) DeleteTemplate(_ context.Context, req *sirenv1.DeleteTemplateRequest) (*sirenv1.DeleteTemplateResponse, error) { - err := s.container.TemplatesService.Delete(req.GetName()) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - return &sirenv1.DeleteTemplateResponse{}, nil -} - -func (s *GRPCServer) RenderTemplate(_ context.Context, req *sirenv1.RenderTemplateRequest) (*sirenv1.RenderTemplateResponse, error) { - body, err := s.container.TemplatesService.Render(req.GetName(), req.GetVariables()) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - return &sirenv1.RenderTemplateResponse{ - Body: body, - }, nil -} diff --git a/api/handlers/v1/grpc_template.go b/api/handlers/v1/grpc_template.go new file mode 100644 index 00000000..8242ac43 --- /dev/null +++ b/api/handlers/v1/grpc_template.go @@ -0,0 +1,133 @@ +package v1 + +import ( + "context" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/odpf/siren/helper" + "google.golang.org/grpc/codes" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func (s *GRPCServer) ListTemplates(_ context.Context, req *sirenv1.ListTemplatesRequest) (*sirenv1.ListTemplatesResponse, error) { + templates, err := s.container.TemplatesService.Index(req.GetTag()) + if err != nil { + return nil, helper.GRPCLogError(s.logger, codes.Internal, err) + } + + res := &sirenv1.ListTemplatesResponse{Templates: make([]*sirenv1.Template, 0)} + for _, template := range templates { + variables := make([]*sirenv1.TemplateVariables, 0) + for _, variable := range template.Variables { + variables = append(variables, &sirenv1.TemplateVariables{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + res.Templates = append(res.Templates, &sirenv1.Template{ + Id: uint64(template.ID), + Name: template.Name, + Body: template.Body, + Tags: template.Tags, + CreatedAt: timestamppb.New(template.CreatedAt), + UpdatedAt: timestamppb.New(template.UpdatedAt), + Variables: variables, + }) + } + + return res, nil +} + +func (s *GRPCServer) GetTemplateByName(_ context.Context, req *sirenv1.GetTemplateByNameRequest) (*sirenv1.TemplateResponse, error) { + template, err := s.container.TemplatesService.GetByName(req.GetName()) + if err != nil { + return nil, helper.GRPCLogError(s.logger, codes.Internal, err) + } + + variables := make([]*sirenv1.TemplateVariables, 0) + for _, variable := range template.Variables { + variables = append(variables, &sirenv1.TemplateVariables{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + res := &sirenv1.TemplateResponse{ + Template: &sirenv1.Template{ + Id: uint64(template.ID), + Name: template.Name, + Body: template.Body, + Tags: template.Tags, + CreatedAt: timestamppb.New(template.CreatedAt), + UpdatedAt: timestamppb.New(template.UpdatedAt), + Variables: variables, + }, + } + return res, nil +} + +func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1.UpsertTemplateRequest) (*sirenv1.TemplateResponse, error) { + variables := make([]domain.Variable, 0) + for _, variable := range req.GetVariables() { + variables = append(variables, domain.Variable{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + payload := &domain.Template{ + ID: uint(req.GetId()), + Name: req.GetName(), + Body: req.GetBody(), + Tags: req.GetTags(), + Variables: variables, + } + template, err := s.container.TemplatesService.Upsert(payload) + if err != nil { + return nil, helper.GRPCLogError(s.logger, codes.Internal, err) + } + + templateVariables := make([]*sirenv1.TemplateVariables, 0) + for _, variable := range template.Variables { + templateVariables = append(templateVariables, &sirenv1.TemplateVariables{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + res := &sirenv1.TemplateResponse{ + Template: &sirenv1.Template{ + Id: uint64(template.ID), + Name: template.Name, + Body: template.Body, + Tags: template.Tags, + CreatedAt: timestamppb.New(template.CreatedAt), + UpdatedAt: timestamppb.New(template.UpdatedAt), + Variables: templateVariables, + }, + } + return res, nil +} + +func (s *GRPCServer) DeleteTemplate(_ context.Context, req *sirenv1.DeleteTemplateRequest) (*sirenv1.DeleteTemplateResponse, error) { + err := s.container.TemplatesService.Delete(req.GetName()) + if err != nil { + return nil, helper.GRPCLogError(s.logger, codes.Internal, err) + } + return &sirenv1.DeleteTemplateResponse{}, nil +} + +func (s *GRPCServer) RenderTemplate(_ context.Context, req *sirenv1.RenderTemplateRequest) (*sirenv1.RenderTemplateResponse, error) { + body, err := s.container.TemplatesService.Render(req.GetName(), req.GetVariables()) + if err != nil { + return nil, helper.GRPCLogError(s.logger, codes.Internal, err) + } + return &sirenv1.RenderTemplateResponse{ + Body: body, + }, nil +} diff --git a/api/handlers/v1/grpc_template_test.go b/api/handlers/v1/grpc_template_test.go new file mode 100644 index 00000000..f983ba0e --- /dev/null +++ b/api/handlers/v1/grpc_template_test.go @@ -0,0 +1,325 @@ +package v1 + +import ( + "context" + "errors" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/odpf/siren/mocks" + "github.com/odpf/siren/service" + "github.com/stretchr/testify/assert" + "go.uber.org/zap/zaptest" + "testing" +) + +func TestGRPCServer_ListTemplates(t *testing.T) { + t.Run("should return list of all templates", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.ListTemplatesRequest{} + dummyResult := []domain.Template{ + { + ID: 1, + Name: "foo", + Body: "bar", + Tags: []string{"foo", "bar"}, + Variables: []domain.Variable{ + { + Name: "foo", + Type: "bar", + Default: "", + Description: "", + }, + }, + }, + } + + mockedTemplatesService. + On("Index", ""). + Return(dummyResult, nil).Once() + res, err := dummyGRPCServer.ListTemplates(context.Background(), dummyReq) + assert.Nil(t, err) + assert.Equal(t, 1, len(res.GetTemplates())) + assert.Equal(t, "foo", res.GetTemplates()[0].GetName()) + assert.Equal(t, "bar", res.GetTemplates()[0].GetBody()) + assert.Equal(t, 1, len(res.GetTemplates()[0].GetVariables())) + assert.Equal(t, "foo", res.GetTemplates()[0].GetVariables()[0].GetName()) + }) + + t.Run("should return list of all templates matching particular tag", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.ListTemplatesRequest{ + Tag: "foo", + } + + dummyResult := []domain.Template{ + { + ID: 1, + Name: "foo", + Body: "bar", + Tags: []string{"foo", "bar"}, + Variables: []domain.Variable{ + { + Name: "foo", + Type: "bar", + Default: "", + Description: "", + }, + }, + }, + } + + mockedTemplatesService. + On("Index", "foo"). + Return(dummyResult, nil).Once() + res, err := dummyGRPCServer.ListTemplates(context.Background(), dummyReq) + assert.Nil(t, err) + assert.Equal(t, 1, len(res.GetTemplates())) + assert.Equal(t, "foo", res.GetTemplates()[0].GetName()) + assert.Equal(t, "bar", res.GetTemplates()[0].GetBody()) + assert.Equal(t, 1, len(res.GetTemplates()[0].GetVariables())) + assert.Equal(t, "foo", res.GetTemplates()[0].GetVariables()[0].GetName()) + }) + + t.Run("should return error code 13 if getting templates failed", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.ListTemplatesRequest{ + Tag: "foo", + } + mockedTemplatesService. + On("Index", "foo"). + Return(nil, errors.New("random error")).Once() + res, err := dummyGRPCServer.ListTemplates(context.Background(), dummyReq) + assert.Nil(t, res) + assert.EqualError(t, err, "rpc error: code = Internal desc = random error") + }) +} + +func TestGRPCServer_GetTemplateByName(t *testing.T) { + t.Run("should return template by name", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.GetTemplateByNameRequest{ + Name: "foo", + } + dummyResult := &domain.Template{ + ID: 1, + Name: "foo", + Body: "bar", + Tags: []string{"foo", "bar"}, + Variables: []domain.Variable{ + { + Name: "foo", + Type: "bar", + Default: "", + Description: "", + }, + }, + } + + mockedTemplatesService. + On("GetByName", "foo"). + Return(dummyResult, nil).Once() + res, err := dummyGRPCServer.GetTemplateByName(context.Background(), dummyReq) + assert.Nil(t, err) + assert.Equal(t, uint64(1), res.GetTemplate().GetId()) + assert.Equal(t, "foo", res.GetTemplate().GetName()) + assert.Equal(t, "bar", res.GetTemplate().GetBody()) + assert.Equal(t, "foo", res.GetTemplate().GetVariables()[0].GetName()) + mockedTemplatesService.AssertCalled(t, "GetByName", dummyReq.Name) + }) + + t.Run("should return error code 13 if getting template by name failed", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.GetTemplateByNameRequest{ + Name: "foo", + } + mockedTemplatesService. + On("GetByName", "foo"). + Return(nil, errors.New("random error")).Once() + res, err := dummyGRPCServer.GetTemplateByName(context.Background(), dummyReq) + assert.Nil(t, res) + assert.EqualError(t, err, "rpc error: code = Internal desc = random error") + }) +} + +func TestGRPCServer_UpsertTemplate(t *testing.T) { + dummyReq := &sirenv1.UpsertTemplateRequest{ + Id: 1, + Name: "foo", + Body: "bar", + Tags: []string{"foo", "bar"}, + Variables: []*sirenv1.TemplateVariables{ + { + Name: "foo", + Type: "bar", + Default: "", + Description: "", + }, + }, + } + template := &domain.Template{ + ID: 1, + Name: "foo", + Body: "bar", + Tags: []string{"foo", "bar"}, + Variables: []domain.Variable{ + { + Name: "foo", + Type: "bar", + Default: "", + Description: "", + }, + }, + } + + t.Run("should return template by name", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + + mockedTemplatesService. + On("Upsert", template). + Return(template, nil).Once() + res, err := dummyGRPCServer.UpsertTemplate(context.Background(), dummyReq) + assert.Nil(t, err) + assert.Equal(t, uint64(1), res.GetTemplate().GetId()) + assert.Equal(t, "foo", res.GetTemplate().GetName()) + assert.Equal(t, "bar", res.GetTemplate().GetBody()) + assert.Equal(t, "foo", res.GetTemplate().GetVariables()[0].GetName()) + mockedTemplatesService.AssertCalled(t, "Upsert", template) + }) + + t.Run("should return error code 13 if upsert template failed", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + mockedTemplatesService. + On("Upsert", template). + Return(nil, errors.New("random error")).Once() + res, err := dummyGRPCServer.UpsertTemplate(context.Background(), dummyReq) + assert.Nil(t, res) + assert.EqualError(t, err, "rpc error: code = Internal desc = random error") + }) +} + +func TestGRPCServer_DeleteTemplate(t *testing.T) { + t.Run("should delete template", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.DeleteTemplateRequest{ + Name: "foo", + } + + mockedTemplatesService. + On("Delete", "foo"). + Return(nil).Once() + res, err := dummyGRPCServer.DeleteTemplate(context.Background(), dummyReq) + assert.Nil(t, err) + assert.Equal(t, &sirenv1.DeleteTemplateResponse{}, res) + mockedTemplatesService.AssertCalled(t, "Delete", "foo") + }) + + t.Run("should return error code 13 if deleting template failed", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + dummyReq := &sirenv1.DeleteTemplateRequest{ + Name: "foo", + } + mockedTemplatesService. + On("Delete", "foo"). + Return(errors.New("random error")).Once() + res, err := dummyGRPCServer.DeleteTemplate(context.Background(), dummyReq) + assert.Nil(t, res) + assert.EqualError(t, err, "rpc error: code = Internal desc = random error") + }) +} + +func TestGRPCServer_RenderTemplate(t *testing.T) { + dummyReq := &sirenv1.RenderTemplateRequest{ + Name: "foo", + Variables: map[string]string{ + "foo": "bar", + }, + } + + t.Run("should render template", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + + mockedTemplatesService. + On("Render", "foo", dummyReq.GetVariables()). + Return("random", nil).Once() + res, err := dummyGRPCServer.RenderTemplate(context.Background(), dummyReq) + assert.Nil(t, err) + assert.Equal(t, "random", res.GetBody()) + mockedTemplatesService.AssertCalled(t, "Render", "foo", dummyReq.GetVariables()) + }) + + t.Run("should return error code 13 if rendering template failed", func(t *testing.T) { + mockedTemplatesService := &mocks.TemplatesService{} + dummyGRPCServer := GRPCServer{ + container: &service.Container{ + TemplatesService: mockedTemplatesService, + }, + logger: zaptest.NewLogger(t), + } + mockedTemplatesService. + On("Render", "foo", dummyReq.GetVariables()). + Return("", errors.New("random error")).Once() + res, err := dummyGRPCServer.RenderTemplate(context.Background(), dummyReq) + assert.Empty(t, res) + assert.EqualError(t, err, "rpc error: code = Internal desc = random error") + }) +} diff --git a/api/handlers/v1/grpc_test.go b/api/handlers/v1/grpc_test.go index 46d84cbe..27813414 100644 --- a/api/handlers/v1/grpc_test.go +++ b/api/handlers/v1/grpc_test.go @@ -298,317 +298,7 @@ func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { }) } -func TestGRPCServer_ListTemplates(t *testing.T) { - t.Run("should return list of all templates", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.ListTemplatesRequest{} - dummyResult := []domain.Template{ - { - ID: 1, - Name: "foo", - Body: "bar", - Tags: []string{"foo", "bar"}, - Variables: []domain.Variable{ - { - Name: "foo", - Type: "bar", - Default: "", - Description: "", - }, - }, - }, - } - - mockedTemplatesService. - On("Index", ""). - Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListTemplates(context.Background(), dummyReq) - assert.Nil(t, err) - assert.Equal(t, 1, len(res.GetTemplates())) - assert.Equal(t, "foo", res.GetTemplates()[0].GetName()) - assert.Equal(t, "bar", res.GetTemplates()[0].GetBody()) - assert.Equal(t, 1, len(res.GetTemplates()[0].GetVariables())) - assert.Equal(t, "foo", res.GetTemplates()[0].GetVariables()[0].GetName()) - }) - - t.Run("should return list of all templates matching particular tag", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.ListTemplatesRequest{ - Tag: "foo", - } - - dummyResult := []domain.Template{ - { - ID: 1, - Name: "foo", - Body: "bar", - Tags: []string{"foo", "bar"}, - Variables: []domain.Variable{ - { - Name: "foo", - Type: "bar", - Default: "", - Description: "", - }, - }, - }, - } - - mockedTemplatesService. - On("Index", "foo"). - Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListTemplates(context.Background(), dummyReq) - assert.Nil(t, err) - assert.Equal(t, 1, len(res.GetTemplates())) - assert.Equal(t, "foo", res.GetTemplates()[0].GetName()) - assert.Equal(t, "bar", res.GetTemplates()[0].GetBody()) - assert.Equal(t, 1, len(res.GetTemplates()[0].GetVariables())) - assert.Equal(t, "foo", res.GetTemplates()[0].GetVariables()[0].GetName()) - }) - t.Run("should return error code 13 if getting templates failed", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.ListTemplatesRequest{ - Tag: "foo", - } - mockedTemplatesService. - On("Index", "foo"). - Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.ListTemplates(context.Background(), dummyReq) - assert.Nil(t, res) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - }) -} - -func TestGRPCServer_GetTemplateByName(t *testing.T) { - t.Run("should return template by name", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.GetTemplateByNameRequest{ - Name: "foo", - } - dummyResult := &domain.Template{ - ID: 1, - Name: "foo", - Body: "bar", - Tags: []string{"foo", "bar"}, - Variables: []domain.Variable{ - { - Name: "foo", - Type: "bar", - Default: "", - Description: "", - }, - }, - } - - mockedTemplatesService. - On("GetByName", "foo"). - Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.GetTemplateByName(context.Background(), dummyReq) - assert.Nil(t, err) - assert.Equal(t, uint64(1), res.GetTemplate().GetId()) - assert.Equal(t, "foo", res.GetTemplate().GetName()) - assert.Equal(t, "bar", res.GetTemplate().GetBody()) - assert.Equal(t, "foo", res.GetTemplate().GetVariables()[0].GetName()) - mockedTemplatesService.AssertCalled(t, "GetByName", dummyReq.Name) - }) - - t.Run("should return error code 13 if getting template by name failed", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.GetTemplateByNameRequest{ - Name: "foo", - } - mockedTemplatesService. - On("GetByName", "foo"). - Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.GetTemplateByName(context.Background(), dummyReq) - assert.Nil(t, res) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - }) -} - -func TestGRPCServer_UpsertTemplate(t *testing.T) { - dummyReq := &sirenv1.UpsertTemplateRequest{ - Id: 1, - Name: "foo", - Body: "bar", - Tags: []string{"foo", "bar"}, - Variables: []*sirenv1.TemplateVariables{ - { - Name: "foo", - Type: "bar", - Default: "", - Description: "", - }, - }, - } - template := &domain.Template{ - ID: 1, - Name: "foo", - Body: "bar", - Tags: []string{"foo", "bar"}, - Variables: []domain.Variable{ - { - Name: "foo", - Type: "bar", - Default: "", - Description: "", - }, - }, - } - - t.Run("should return template by name", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - - mockedTemplatesService. - On("Upsert", template). - Return(template, nil).Once() - res, err := dummyGRPCServer.UpsertTemplate(context.Background(), dummyReq) - assert.Nil(t, err) - assert.Equal(t, uint64(1), res.GetTemplate().GetId()) - assert.Equal(t, "foo", res.GetTemplate().GetName()) - assert.Equal(t, "bar", res.GetTemplate().GetBody()) - assert.Equal(t, "foo", res.GetTemplate().GetVariables()[0].GetName()) - mockedTemplatesService.AssertCalled(t, "Upsert", template) - }) - - t.Run("should return error code 13 if upsert template failed", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - mockedTemplatesService. - On("Upsert", template). - Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.UpsertTemplate(context.Background(), dummyReq) - assert.Nil(t, res) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - }) -} - -func TestGRPCServer_DeleteTemplate(t *testing.T) { - t.Run("should delete template", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.DeleteTemplateRequest{ - Name: "foo", - } - - mockedTemplatesService. - On("Delete", "foo"). - Return(nil).Once() - res, err := dummyGRPCServer.DeleteTemplate(context.Background(), dummyReq) - assert.Nil(t, err) - assert.Equal(t, &sirenv1.DeleteTemplateResponse{}, res) - mockedTemplatesService.AssertCalled(t, "Delete", "foo") - }) - - t.Run("should return error code 13 if deleting template failed", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1.DeleteTemplateRequest{ - Name: "foo", - } - mockedTemplatesService. - On("Delete", "foo"). - Return(errors.New("random error")).Once() - res, err := dummyGRPCServer.DeleteTemplate(context.Background(), dummyReq) - assert.Nil(t, res) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - }) -} - -func TestGRPCServer_RenderTemplate(t *testing.T) { - dummyReq := &sirenv1.RenderTemplateRequest{ - Name: "foo", - Variables: map[string]string{ - "foo": "bar", - }, - } - - t.Run("should render template", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - - mockedTemplatesService. - On("Render", "foo", dummyReq.GetVariables()). - Return("random", nil).Once() - res, err := dummyGRPCServer.RenderTemplate(context.Background(), dummyReq) - assert.Nil(t, err) - assert.Equal(t, "random", res.GetBody()) - mockedTemplatesService.AssertCalled(t, "Render", "foo", dummyReq.GetVariables()) - }) - - t.Run("should return error code 13 if rendering template failed", func(t *testing.T) { - mockedTemplatesService := &mocks.TemplatesService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - TemplatesService: mockedTemplatesService, - }, - logger: zaptest.NewLogger(t), - } - mockedTemplatesService. - On("Render", "foo", dummyReq.GetVariables()). - Return("", errors.New("random error")).Once() - res, err := dummyGRPCServer.RenderTemplate(context.Background(), dummyReq) - assert.Empty(t, res) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - }) -} From f96cccdb4679ec9b38479cc972ae1cb7b116575c Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Fri, 12 Nov 2021 16:45:46 +0530 Subject: [PATCH 07/18] feat: provide rule CURD support in cli --- cmd/root.go | 1 + cmd/rule.go | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 cmd/rule.go diff --git a/cmd/root.go b/cmd/root.go index fc4133bd..614681ec 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -26,6 +26,7 @@ func Execute() { rootCmd.AddCommand(namespacesCmd(cliConfig)) rootCmd.AddCommand(receiversCmd(cliConfig)) rootCmd.AddCommand(templatesCmd(cliConfig)) + rootCmd.AddCommand(rulesCmd(cliConfig)) if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) diff --git a/cmd/rule.go b/cmd/rule.go new file mode 100644 index 00000000..77972893 --- /dev/null +++ b/cmd/rule.go @@ -0,0 +1,160 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "strconv" + + "github.com/MakeNowJust/heredoc" + "github.com/odpf/salt/printer" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" + "github.com/spf13/cobra" +) + +func rulesCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "rule", + Aliases: []string{"rules"}, + Short: "Manage rules", + Long: heredoc.Doc(` + Work with rules. + + rules are used for alerting within a provider. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + } + + cmd.AddCommand(listRulesCmd(c)) + cmd.AddCommand(updateRuleCmd(c)) + + return cmd +} + +func listRulesCmd(c *configuration) *cobra.Command { + var name string + var namespace string + var groupName string + var template string + var providerNamespace uint64 + cmd := &cobra.Command{ + Use: "list", + Short: "List rules", + Long: heredoc.Doc(` + List all rules. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.ListRules(ctx, &sirenv1.ListRulesRequest{ + Name: name, + GroupName: groupName, + Namespace: namespace, + ProviderNamespace: providerNamespace, + }) + if err != nil { + return err + } + + rules := res.Rules + report := [][]string{} + + fmt.Printf(" \nShowing %d of %d rules\n \n", len(rules), len(rules)) + report = append(report, []string{"ID", "NAME", "GROUP_NAME", "TEMPLATE", "ENABLED"}) + + for _, p := range rules { + report = append(report, []string{ + fmt.Sprintf("%v", p.GetId()), + p.GetName(), + p.GetGroupName(), + p.GetTemplate(), + strconv.FormatBool(p.GetEnabled()), + }) + } + printer.Table(os.Stdout, report) + + fmt.Println("\nFor details on a rule, try: siren rule view ") + return nil + }, + } + + cmd.Flags().StringVar(&name, "name", "", "rule name") + cmd.Flags().StringVar(&namespace, "namespace", "", "rule namespace") + cmd.Flags().StringVar(&groupName, "groupName", "", "rule group name") + cmd.Flags().StringVar(&template, "template", "", "rule template") + cmd.Flags().Uint64Var(&providerNamespace, "providerNamespace", 0, "rule provider namespace id") + + return cmd +} + +func updateRuleCmd(c *configuration) *cobra.Command { + var id uint64 + var filePath string + cmd := &cobra.Command{ + Use: "edit", + Short: "Edit a rule", + Long: heredoc.Doc(` + Edit an existing rule. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + var ruleConfig domain.Rule + if err := parseFile(filePath, &ruleConfig); err != nil { + return err + } + + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + variables := make([]*sirenv1.Variables, 0) + for _, variable := range ruleConfig.Variables { + variables = append(variables, &sirenv1.Variables{ + Name: variable.Name, + Type: variable.Type, + Value: variable.Value, + Description: variable.Description, + }) + } + + _, err = client.UpdateRule(ctx, &sirenv1.UpdateRuleRequest{ + Enabled: ruleConfig.Enabled, + GroupName: ruleConfig.GroupName, + Namespace: ruleConfig.Namespace, + Template: ruleConfig.Template, + Variables: variables, + ProviderNamespace: ruleConfig.ProviderNamespace, + }) + if err != nil { + return err + } + + fmt.Println("Successfully updated rule") + + return nil + }, + } + + cmd.Flags().Uint64Var(&id, "id", 0, "rule id") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&filePath, "file", "f", "", "Path to the rule config") + cmd.MarkFlagRequired("file") + + return cmd +} From 72accd1e3e0013d83fff6f62048b5ac03fa881ac Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Mon, 15 Nov 2021 12:28:18 +0530 Subject: [PATCH 08/18] feat: provide alert support in cli --- cmd/alert.go | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++ cmd/root.go | 2 + 2 files changed, 106 insertions(+) create mode 100644 cmd/alert.go diff --git a/cmd/alert.go b/cmd/alert.go new file mode 100644 index 00000000..58ad9ce5 --- /dev/null +++ b/cmd/alert.go @@ -0,0 +1,104 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "strconv" + + "github.com/MakeNowJust/heredoc" + "github.com/odpf/salt/printer" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/spf13/cobra" +) + +func alertsCmd(c *configuration) *cobra.Command { + cmd := &cobra.Command{ + Use: "alert", + Aliases: []string{"alerts"}, + Short: "Manage alerts", + Long: heredoc.Doc(` + Work with alerts. + + alerts are historical events triggered by alerting providers like cortex, influx etc. + `), + Example: heredoc.Doc(` + $ siren alert list --provider-name=cortex --provider-id=1 --resource-name=demo + $ siren alert list --provider-name=cortex --provider-id=1 --resource-name=demo --start-time=1636959300000 --end-time=1636959369716 + `), + Annotations: map[string]string{ + "group:core": "true", + }, + } + + cmd.AddCommand(listAlertsCmd(c)) + + return cmd +} + +func listAlertsCmd(c *configuration) *cobra.Command { + var providerName string + var providerId uint64 + var resouceName string + var startTime uint64 + var endTime uint64 + cmd := &cobra.Command{ + Use: "list", + Short: "List alerts", + Long: heredoc.Doc(` + List all alerts. + `), + Annotations: map[string]string{ + "group:core": "true", + }, + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + res, err := client.ListAlerts(ctx, &sirenv1.ListAlertsRequest{ + ProviderName: providerName, + ProviderId: providerId, + ResourceName: resouceName, + StartTime: startTime, + EndTime: endTime, + }) + if err != nil { + return err + } + + alerts := res.Alerts + report := [][]string{} + + fmt.Printf(" \nShowing %d of %d alerts\n \n", len(alerts), len(alerts)) + report = append(report, []string{"ID", "PROVIDER_ID", "RESOURCE_NAME", "METRIC_NAME", "METRIC_VALUE", "SEVERITY"}) + + for _, p := range alerts { + report = append(report, []string{ + fmt.Sprintf("%v", p.GetId()), + strconv.FormatUint(p.GetProviderId(), 10), + p.GetResourceName(), + p.GetMetricName(), + p.GetMetricValue(), + p.GetSeverity(), + }) + } + printer.Table(os.Stdout, report) + + fmt.Println("\nFor details on a alert, try: siren alert view ") + return nil + }, + } + + cmd.Flags().StringVar(&providerName, "provider-name", "", "provider name") + cmd.MarkFlagRequired("provider-name") + cmd.Flags().Uint64Var(&providerId, "provider-id", 0, "provider id") + cmd.MarkFlagRequired("provider-id") + cmd.Flags().StringVar(&resouceName, "resource-name", "", "resource name") + cmd.Flags().Uint64Var(&startTime, "start-time", 0, "start time") + cmd.Flags().Uint64Var(&endTime, "end-time", 0, "end time") + return cmd +} diff --git a/cmd/root.go b/cmd/root.go index 614681ec..624cb082 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -27,6 +27,8 @@ func Execute() { rootCmd.AddCommand(receiversCmd(cliConfig)) rootCmd.AddCommand(templatesCmd(cliConfig)) rootCmd.AddCommand(rulesCmd(cliConfig)) + rootCmd.AddCommand(alertsCmd(cliConfig)) + rootCmd.CompletionOptions.DisableDescriptions = true if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) From 88a8fec1238c4c498456889fcb8822e025e02f48 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Mon, 15 Nov 2021 12:30:14 +0530 Subject: [PATCH 09/18] fix: cli flag names --- cmd/rule.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/rule.go b/cmd/rule.go index 77972893..2e13e3e7 100644 --- a/cmd/rule.go +++ b/cmd/rule.go @@ -91,9 +91,9 @@ func listRulesCmd(c *configuration) *cobra.Command { cmd.Flags().StringVar(&name, "name", "", "rule name") cmd.Flags().StringVar(&namespace, "namespace", "", "rule namespace") - cmd.Flags().StringVar(&groupName, "groupName", "", "rule group name") + cmd.Flags().StringVar(&groupName, "group-name", "", "rule group name") cmd.Flags().StringVar(&template, "template", "", "rule template") - cmd.Flags().Uint64Var(&providerNamespace, "providerNamespace", 0, "rule provider namespace id") + cmd.Flags().Uint64Var(&providerNamespace, "provider-namespace", 0, "rule provider namespace id") return cmd } From 30857b1ab36758769da7bcd3b52b1fa627a3f0df Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Mon, 15 Nov 2021 16:28:09 +0530 Subject: [PATCH 10/18] fix: upload cli command --- cmd/root.go | 2 +- cmd/upload.go | 261 +++++++++++++++++++--- pkg/uploader/mocks/RulesAPICaller.go | 80 ------- pkg/uploader/mocks/TemplatesAPICaller.go | 48 ---- pkg/uploader/model.go | 46 ---- pkg/uploader/service.go | 186 ---------------- pkg/uploader/service_test.go | 272 ----------------------- 7 files changed, 236 insertions(+), 659 deletions(-) delete mode 100644 pkg/uploader/mocks/RulesAPICaller.go delete mode 100644 pkg/uploader/mocks/TemplatesAPICaller.go delete mode 100644 pkg/uploader/model.go delete mode 100644 pkg/uploader/service.go delete mode 100644 pkg/uploader/service_test.go diff --git a/cmd/root.go b/cmd/root.go index 624cb082..821df62f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -21,7 +21,7 @@ func Execute() { rootCmd.AddCommand(configCmd()) rootCmd.AddCommand(serveCmd()) rootCmd.AddCommand(migrateCmd()) - rootCmd.AddCommand(uploadCmd()) + rootCmd.AddCommand(uploadCmd(cliConfig)) rootCmd.AddCommand(providersCmd(cliConfig)) rootCmd.AddCommand(namespacesCmd(cliConfig)) rootCmd.AddCommand(receiversCmd(cliConfig)) diff --git a/cmd/upload.go b/cmd/upload.go index 95d479ad..468cb9d9 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -1,64 +1,273 @@ package cmd import ( + "context" "errors" "fmt" - - "github.com/odpf/siren/client" - "github.com/odpf/siren/config" - "github.com/odpf/siren/pkg/uploader" + sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + "github.com/odpf/siren/domain" "github.com/spf13/cobra" + "gopkg.in/yaml.v3" + "io/ioutil" + "strings" ) -func uploadCmd() *cobra.Command { +type variables struct { + Name string `yaml:"name"` + Value string `yaml:"value"` +} + +type rule struct { + Template string `yaml:"template"` + Status string `yaml:"status"` + Variables []variables `yaml:"variables"` +} + +type ruleYaml struct { + ApiVersion string `yaml:"apiVersion"` + Entity string `yaml:"entity"` + Type string `yaml:"type"` + Namespace string `yaml:"namespace"` + Rules map[string]rule `yaml:"rules"` +} + +type templatedRule struct { + Record string `yaml:"record,omitempty"` + Alert string `yaml:"alert,omitempty"` + Expr string `yaml:"expr"` + For string `yaml:"for,omitempty"` + Labels map[string]string `yaml:"labels,omitempty"` + Annotations map[string]string `yaml:"annotations,omitempty"` +} + +type template struct { + Name string `yaml:"name"` + ApiVersion string `yaml:"apiVersion"` + Type string `yaml:"type"` + Body []templatedRule `yaml:"body"` + Tags []string `yaml:"tags"` + Variables []domain.Variable `yaml:"variables"` +} + +type yamlObject struct { + Type string `yaml:"type"` +} + +func uploadCmd(c *configuration) *cobra.Command { return &cobra.Command{ Use: "upload", Short: "Upload Rules or Templates YAML file", - RunE: upload, + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + s := UploaderService(client) + result, err := s.Upload(args[0]) + + //print all resources(succeed or failed in upsert) + if err != nil { + fmt.Println(err) + return err + } + switch obj := result.(type) { + case *sirenv1.Template: + printTemplate(obj) + case []*sirenv1.Rule: + printRules(obj) + default: + return errors.New("unknown response") + } + return nil + }, + } +} + +//Service talks to siren's HTTP Client +type Service struct { + SirenClient sirenv1.SirenServiceClient +} + +func UploaderService(siren sirenv1.SirenServiceClient) *Service { + return &Service{ + SirenClient: siren, + } +} + +var fileReader = ioutil.ReadFile + +func (s Service) Upload(fileName string) (interface{}, error) { + yamlFile, err := fileReader(fileName) + if err != nil { + fmt.Printf("Error reading YAML file: %s\n", err) + return nil, err + } + var y yamlObject + err = yaml.Unmarshal(yamlFile, &y) + if err != nil { + return nil, err + } + if strings.ToLower(y.Type) == "template" { + return s.UploadTemplates(yamlFile) + } else if strings.ToLower(y.Type) == "rule" { + return s.UploadRules(yamlFile) + } else { + return nil, errors.New("unknown type given") } } -func upload(cmd *cobra.Command, args []string) error { - c := config.LoadConfig() - s := uploader.NewService(&c.SirenService) - result, err := s.Upload(args[0]) - //print all resources(succeed or failed in upsert) +func (s Service) UploadTemplates(yamlFile []byte) (*sirenv1.Template, error) { + var t template + err := yaml.Unmarshal(yamlFile, &t) if err != nil { - fmt.Println(err) - return err + return nil, err } - switch obj := result.(type) { - case *client.Template: - printTemplate(obj) - case []*client.Rule: - printRules(obj) - default: - return errors.New("unknown response") + body, err := yaml.Marshal(t.Body) + if err != nil { + return nil, err + } + + variables := make([]*sirenv1.TemplateVariables, 0) + for _, variable := range t.Variables { + variables = append(variables, &sirenv1.TemplateVariables{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + + template, err := s.SirenClient.UpsertTemplate(context.Background(), &sirenv1.UpsertTemplateRequest{ + Name: t.Name, + Body: string(body), + Variables: variables, + Tags: t.Tags, + }) + if err != nil { + return nil, err + } + + //update associated rules for this template + data, err := s.SirenClient.ListRules(context.Background(), &sirenv1.ListRulesRequest{ + Template: t.Name, + }) + if err != nil { + return nil, err + } + + associatedRules := data.Rules + for i := 0; i < len(associatedRules); i++ { + associatedRule := associatedRules[i] + + var updatedVariables []*sirenv1.Variables + for j := 0; j < len(associatedRules[i].Variables); j++ { + ruleVar := &sirenv1.Variables{ + Name: associatedRules[i].Variables[j].Name, + Value: associatedRules[i].Variables[j].Value, + Type: associatedRules[i].Variables[j].Type, + Description: associatedRules[i].Variables[j].Description, + } + updatedVariables = append(updatedVariables, ruleVar) + } + + _, err := s.SirenClient.UpdateRule(context.Background(), &sirenv1.UpdateRuleRequest{ + GroupName: associatedRule.GroupName, + Namespace: associatedRule.Namespace, + Template: associatedRule.Template, + Variables: updatedVariables, + ProviderNamespace: associatedRule.ProviderNamespace, + Enabled: associatedRule.Enabled, + }) + + if err != nil { + fmt.Println("failed to update rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) + return nil, err + } + fmt.Println("successfully updated rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) } - return nil + return template.Template, nil } -func printRules(rules []*client.Rule) { +func (s Service) UploadRules(yamlFile []byte) ([]*sirenv1.Rule, error) { + var yamlBody ruleYaml + err := yaml.Unmarshal(yamlFile, &yamlBody) + if err != nil { + return nil, err + } + var successfullyUpsertedRules []*sirenv1.Rule + + for groupName, v := range yamlBody.Rules { + var enabled bool + var ruleVariables []*sirenv1.Variables + for i := 0; i < len(v.Variables); i++ { + v := &sirenv1.Variables{ + Name: v.Variables[i].Name, + Value: v.Variables[i].Value, + } + ruleVariables = append(ruleVariables, v) + } + + // Fix for as per current implementation + enabled = false + if v.Status == "enabled" { + enabled = true + } + + payload := &sirenv1.UpdateRuleRequest{ + GroupName: groupName, + Namespace: yamlBody.Namespace, + Template: v.Template, + Variables: ruleVariables, + ProviderNamespace: 1, + Enabled: enabled, + } + + result, err := s.SirenClient.UpdateRule(context.Background(), payload) + if err != nil { + fmt.Println(fmt.Sprintf("rule %s/%s/%s upload error", + payload.Namespace, payload.GroupName, payload.Template), err) + return successfullyUpsertedRules, err + } else { + successfullyUpsertedRules = append(successfullyUpsertedRules, result.Rule) + fmt.Println(fmt.Sprintf("successfully uploaded %s/%s/%s", + payload.Namespace, payload.GroupName, payload.Template)) + } + } + return successfullyUpsertedRules, nil +} + +func printRules(rules []*sirenv1.Rule) { for i := 0; i < len(rules); i++ { fmt.Println("Upserted Rule") fmt.Println("ID:", rules[i].Id) fmt.Println("Name:", rules[i].Name) - fmt.Println("Name:", rules[i].Status) + fmt.Println("Name:", rules[i].Enabled) + fmt.Println("Group Name:", rules[i].GroupName) + fmt.Println("Namespace:", rules[i].Namespace) + fmt.Println("Template:", rules[i].Template) fmt.Println("CreatedAt At:", rules[i].CreatedAt) fmt.Println("UpdatedAt At:", rules[i].UpdatedAt) fmt.Println() } } -func printTemplate(template *client.Template) { +func printTemplate(template *sirenv1.Template) { if template == nil { return } fmt.Println("Upserted Template") fmt.Println("ID:", template.Id) fmt.Println("Name:", template.Name) - fmt.Println("CreatedAt At:", template.CreatedAt) - fmt.Println("UpdatedAt At:", template.UpdatedAt) fmt.Println("Tags:", template.Tags) fmt.Println("Variables:", template.Variables) + fmt.Println("CreatedAt At:", template.CreatedAt) + fmt.Println("UpdatedAt At:", template.UpdatedAt) + } diff --git a/pkg/uploader/mocks/RulesAPICaller.go b/pkg/uploader/mocks/RulesAPICaller.go deleted file mode 100644 index f72545a2..00000000 --- a/pkg/uploader/mocks/RulesAPICaller.go +++ /dev/null @@ -1,80 +0,0 @@ -// Code generated by mockery v2.6.0. DO NOT EDIT. - -package mocks - -import ( - context "context" - - client "github.com/odpf/siren/client" - - http "net/http" - - mock "github.com/stretchr/testify/mock" -) - -// RulesAPICaller is an autogenerated mock type for the RulesAPICaller type -type RulesAPICaller struct { - mock.Mock -} - -// CreateRuleRequest provides a mock function with given fields: ctx, localVarOptionals -func (_m *RulesAPICaller) CreateRuleRequest(ctx context.Context, localVarOptionals *client.RulesApiCreateRuleRequestOpts) (client.Rule, *http.Response, error) { - ret := _m.Called(ctx, localVarOptionals) - - var r0 client.Rule - if rf, ok := ret.Get(0).(func(context.Context, *client.RulesApiCreateRuleRequestOpts) client.Rule); ok { - r0 = rf(ctx, localVarOptionals) - } else { - r0 = ret.Get(0).(client.Rule) - } - - var r1 *http.Response - if rf, ok := ret.Get(1).(func(context.Context, *client.RulesApiCreateRuleRequestOpts) *http.Response); ok { - r1 = rf(ctx, localVarOptionals) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*http.Response) - } - } - - var r2 error - if rf, ok := ret.Get(2).(func(context.Context, *client.RulesApiCreateRuleRequestOpts) error); ok { - r2 = rf(ctx, localVarOptionals) - } else { - r2 = ret.Error(2) - } - - return r0, r1, r2 -} - -// ListRulesRequest provides a mock function with given fields: ctx, localVarOptionals -func (_m *RulesAPICaller) ListRulesRequest(ctx context.Context, localVarOptionals *client.RulesApiListRulesRequestOpts) ([]client.Rule, *http.Response, error) { - ret := _m.Called(ctx, localVarOptionals) - - var r0 []client.Rule - if rf, ok := ret.Get(0).(func(context.Context, *client.RulesApiListRulesRequestOpts) []client.Rule); ok { - r0 = rf(ctx, localVarOptionals) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]client.Rule) - } - } - - var r1 *http.Response - if rf, ok := ret.Get(1).(func(context.Context, *client.RulesApiListRulesRequestOpts) *http.Response); ok { - r1 = rf(ctx, localVarOptionals) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*http.Response) - } - } - - var r2 error - if rf, ok := ret.Get(2).(func(context.Context, *client.RulesApiListRulesRequestOpts) error); ok { - r2 = rf(ctx, localVarOptionals) - } else { - r2 = ret.Error(2) - } - - return r0, r1, r2 -} diff --git a/pkg/uploader/mocks/TemplatesAPICaller.go b/pkg/uploader/mocks/TemplatesAPICaller.go deleted file mode 100644 index 1fa26bf8..00000000 --- a/pkg/uploader/mocks/TemplatesAPICaller.go +++ /dev/null @@ -1,48 +0,0 @@ -// Code generated by mockery v2.6.0. DO NOT EDIT. - -package mocks - -import ( - context "context" - - client "github.com/odpf/siren/client" - - http "net/http" - - mock "github.com/stretchr/testify/mock" -) - -// TemplatesAPICaller is an autogenerated mock type for the TemplatesAPICaller type -type TemplatesAPICaller struct { - mock.Mock -} - -// CreateTemplateRequest provides a mock function with given fields: ctx, localVarOptionals -func (_m *TemplatesAPICaller) CreateTemplateRequest(ctx context.Context, localVarOptionals *client.TemplatesApiCreateTemplateRequestOpts) (client.Template, *http.Response, error) { - ret := _m.Called(ctx, localVarOptionals) - - var r0 client.Template - if rf, ok := ret.Get(0).(func(context.Context, *client.TemplatesApiCreateTemplateRequestOpts) client.Template); ok { - r0 = rf(ctx, localVarOptionals) - } else { - r0 = ret.Get(0).(client.Template) - } - - var r1 *http.Response - if rf, ok := ret.Get(1).(func(context.Context, *client.TemplatesApiCreateTemplateRequestOpts) *http.Response); ok { - r1 = rf(ctx, localVarOptionals) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*http.Response) - } - } - - var r2 error - if rf, ok := ret.Get(2).(func(context.Context, *client.TemplatesApiCreateTemplateRequestOpts) error); ok { - r2 = rf(ctx, localVarOptionals) - } else { - r2 = ret.Error(2) - } - - return r0, r1, r2 -} diff --git a/pkg/uploader/model.go b/pkg/uploader/model.go deleted file mode 100644 index 62bc18f7..00000000 --- a/pkg/uploader/model.go +++ /dev/null @@ -1,46 +0,0 @@ -package uploader - -import ( - "github.com/odpf/siren/domain" -) - -type variables struct { - Name string `yaml:"name"` - Value string `yaml:"value"` -} - -type rule struct { - Template string `yaml:"template"` - Status string `yaml:"status"` - Variables []variables `yaml:"variables"` -} - -type ruleYaml struct { - ApiVersion string `yaml:"apiVersion"` - Entity string `yaml:"entity"` - Type string `yaml:"type"` - Namespace string `yaml:"namespace"` - Rules map[string]rule `yaml:"rules"` -} - -type templatedRule struct { - Record string `yaml:"record,omitempty"` - Alert string `yaml:"alert,omitempty"` - Expr string `yaml:"expr"` - For string `yaml:"for,omitempty"` - Labels map[string]string `yaml:"labels,omitempty"` - Annotations map[string]string `yaml:"annotations,omitempty"` -} - -type template struct { - Name string `yaml:"name"` - ApiVersion string `yaml:"apiVersion"` - Type string `yaml:"type"` - Body []templatedRule `yaml:"body"` - Tags []string `yaml:"tags"` - Variables []domain.Variable `yaml:"variables"` -} - -type yamlObject struct { - Type string `yaml:"type"` -} diff --git a/pkg/uploader/service.go b/pkg/uploader/service.go deleted file mode 100644 index d2fee69b..00000000 --- a/pkg/uploader/service.go +++ /dev/null @@ -1,186 +0,0 @@ -package uploader - -import ( - "context" - "errors" - "fmt" - "github.com/antihax/optional" - "github.com/odpf/siren/client" - "github.com/odpf/siren/domain" - "gopkg.in/yaml.v3" - "io/ioutil" - "net/http" - "strings" -) - -type RulesAPICaller interface { - CreateRuleRequest(ctx context.Context, localVarOptionals *client.RulesApiCreateRuleRequestOpts) (client.Rule, *http.Response, error) - ListRulesRequest(ctx context.Context, localVarOptionals *client.RulesApiListRulesRequestOpts) ([]client.Rule, *http.Response, error) -} - -type TemplatesAPICaller interface { - CreateTemplateRequest(ctx context.Context, localVarOptionals *client.TemplatesApiCreateTemplateRequestOpts) (client.Template, *http.Response, error) -} - -type SirenClient struct { - client *client.APIClient - RulesAPI RulesAPICaller - TemplatesAPI TemplatesAPICaller -} - -func NewSirenClient(host string) *SirenClient { - cfg := &client.Configuration{ - BasePath: host, - } - apiClient := client.NewAPIClient(cfg) - return &SirenClient{ - client: apiClient, - RulesAPI: apiClient.RulesApi, - TemplatesAPI: apiClient.TemplatesApi, - } -} - -type Uploader interface { - Upload(string) (interface{}, error) - UploadTemplates([]byte) (client.Template, error) - UploadRules([]byte) ([]*client.Rule, error) -} - -//Service talks to siren's HTTP Client -type Service struct { - SirenClient *SirenClient -} - -func NewService(c *domain.SirenServiceConfig) *Service { - return &Service{ - SirenClient: NewSirenClient(c.Host), - } -} - -var fileReader = ioutil.ReadFile - -func (s Service) Upload(fileName string) (interface{}, error) { - yamlFile, err := fileReader(fileName) - if err != nil { - fmt.Printf("Error reading YAML file: %s\n", err) - return nil, err - } - var y yamlObject - err = yaml.Unmarshal(yamlFile, &y) - if err != nil { - return nil, err - } - if strings.ToLower(y.Type) == "template" { - return s.UploadTemplates(yamlFile) - } else if strings.ToLower(y.Type) == "rule" { - return s.UploadRules(yamlFile) - } else { - return nil, errors.New("unknown type given") - } -} - -func (s Service) UploadTemplates(yamlFile []byte) (*client.Template, error) { - var t template - err := yaml.Unmarshal(yamlFile, &t) - if err != nil { - return nil, err - } - body, err := yaml.Marshal(t.Body) - if err != nil { - return nil, err - } - payload := domain.Template{ - Body: string(body), - Name: t.Name, - Variables: t.Variables, - Tags: t.Tags, - } - options := &client.TemplatesApiCreateTemplateRequestOpts{ - Body: optional.NewInterface(payload), - } - result, _, err := s.SirenClient.TemplatesAPI.CreateTemplateRequest(context.Background(), options) - if err != nil { - return nil, err - } - //update associated rules for this template - associatedRules, _, err := s.SirenClient.RulesAPI.ListRulesRequest(context.Background(), &client.RulesApiListRulesRequestOpts{ - Template: optional.NewString(t.Name), - }) - if err != nil { - return &result, err - } - for i := 0; i < len(associatedRules); i++ { - associatedRule := associatedRules[i] - var updatedVariables []domain.RuleVariable - for j := 0; j < len(associatedRules[i].Variables); j++ { - ruleVar := domain.RuleVariable{ - Name: associatedRules[i].Variables[j].Name, - Value: associatedRules[i].Variables[j].Value, - Type: associatedRules[i].Variables[j].Type_, - Description: associatedRules[i].Variables[j].Description, - } - updatedVariables = append(updatedVariables, ruleVar) - } - // FIXME: support enabled & provider namespace - updateRulePayload := domain.Rule{ - Namespace: associatedRule.Namespace, - GroupName: associatedRule.GroupName, - Template: associatedRule.Template, - Variables: updatedVariables, - } - updateOptions := &client.RulesApiCreateRuleRequestOpts{ - Body: optional.NewInterface(updateRulePayload), - } - _, _, err := s.SirenClient.RulesAPI.CreateRuleRequest(context.Background(), updateOptions) - if err != nil { - fmt.Println("failed to update rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) - return &result, err - } else { - fmt.Println("successfully updated rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) - } - } - return &result, nil -} - -func (s Service) UploadRules(yamlFile []byte) ([]*client.Rule, error) { - var yamlBody ruleYaml - err := yaml.Unmarshal(yamlFile, &yamlBody) - if err != nil { - return nil, err - } - var successfullyUpsertedRules []*client.Rule - - for k, v := range yamlBody.Rules { - var vars []domain.RuleVariable - for i := 0; i < len(v.Variables); i++ { - v := domain.RuleVariable{ - Name: v.Variables[i].Name, - Value: v.Variables[i].Value, - } - vars = append(vars, v) - } - - // FIXME: support enabled & provider namespace - payload := domain.Rule{ - Namespace: yamlBody.Namespace, - GroupName: k, - Template: v.Template, - Enabled: true, - Variables: vars, - } - options := &client.RulesApiCreateRuleRequestOpts{ - Body: optional.NewInterface(payload), - } - result, _, err := s.SirenClient.RulesAPI.CreateRuleRequest(context.Background(), options) - if err != nil { - fmt.Println(fmt.Sprintf("rule %s/%s/%s upload error", - payload.Namespace, payload.GroupName, payload.Template), err) - return successfullyUpsertedRules, err - } else { - successfullyUpsertedRules = append(successfullyUpsertedRules, &result) - fmt.Println(fmt.Sprintf("successfully uploaded %s/%s/%s", - payload.Namespace, payload.GroupName, payload.Template)) - } - } - return successfullyUpsertedRules, nil -} diff --git a/pkg/uploader/service_test.go b/pkg/uploader/service_test.go deleted file mode 100644 index 942fa4b5..00000000 --- a/pkg/uploader/service_test.go +++ /dev/null @@ -1,272 +0,0 @@ -package uploader - -import ( - "errors" - "github.com/odpf/siren/client" - "github.com/odpf/siren/pkg/uploader/mocks" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "testing" -) - -func TestService_Upload(t *testing.T) { - templateBody := `apiVersion: v2 -type: template -name: test -body: - - alert: test - expr: avg by (host) (cpu_usage_user{cpu=\"cpu-total\"}) > 20 - for: "[[.for]]" - labels: - severity: WARNING - annotations: - description: test -variables: - - name: for - type: string - default: 10m -tags: - - systems -` - ruleBody := `apiVersion: v2 -type: rule -namespace: test -entity: real -rules: - CPUHigh: - template: test - status: enabled - variables: - - name: for - value: 1m -` - badYaml := `abcd` - - t.Run("should call siren's cortex API with proper payload for template upsert and updates associated rules", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - templatesAPIMock.On("CreateTemplateRequest", mock.Anything, mock.Anything).Return(client.Template{ - Name: "test", - }, nil, nil) - rulesAPIMock.On("ListRulesRequest", mock.Anything, mock.Anything). - Return([]client.Rule{{ - Id: 31, - Name: "test-rule", - Variables: []client.RuleVariable{{ - Name: "varName", Description: "test-description", Type_: "int", Value: "30", - }, - }}}, nil, nil) - rulesAPIMock.On("CreateRuleRequest", mock.Anything, mock.Anything).Return(client.Rule{ - Name: "test-rule", - }, nil, nil) - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(templateBody), nil - } - tmp, err := dummyService.Upload("test.txt") - temp := tmp.(*client.Template) - assert.Equal(t, temp.Name, "test") - assert.Nil(t, err) - }) - - t.Run("should handle error in siren's cortex API call in template upsert", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - templatesAPIMock.On("CreateTemplateRequest", mock.Anything, mock.Anything).Return(client.Template{}, nil, errors.New("random error")) - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(templateBody), nil - } - tmp, err := dummyService.Upload("test.txt") - assert.EqualError(t, err, "random error") - assert.Nil(t, tmp) - }) - - t.Run("should handle errors in getting associated rules after template upsert", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - templatesAPIMock.On("CreateTemplateRequest", mock.Anything, mock.Anything).Return(client.Template{ - Name: "test", - }, nil, nil) - rulesAPIMock.On("ListRulesRequest", mock.Anything, mock.Anything). - Return([]client.Rule{{ - Id: 31, - Name: "test-rule", - Variables: []client.RuleVariable{{ - Name: "varName", Description: "test-description", Type_: "int", Value: "30", - }, - }}}, nil, errors.New("random error")) - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(templateBody), nil - } - tmp, err := dummyService.Upload("test.txt") - temp := tmp.(*client.Template) - assert.Equal(t, temp.Name, "test") - assert.EqualError(t, err, "random error") - }) - - t.Run("should handle errors in updating associated rules after template upsert", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - templatesAPIMock.On("CreateTemplateRequest", mock.Anything, mock.Anything).Return(client.Template{ - Name: "test", - }, nil, nil) - rulesAPIMock.On("ListRulesRequest", mock.Anything, mock.Anything). - Return([]client.Rule{{ - Id: 31, - Name: "test-rule", - Variables: []client.RuleVariable{{ - Name: "varName", Description: "test-description", Type_: "int", Value: "30", - }, - }}}, nil, nil) - rulesAPIMock.On("CreateRuleRequest", mock.Anything, mock.Anything).Return(client.Rule{}, nil, errors.New("random error")) - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(templateBody), nil - } - tmp, err := dummyService.Upload("test.txt") - temp := tmp.(*client.Template) - assert.Equal(t, temp.Name, "test") - assert.EqualError(t, err, "random error") - }) - - t.Run("should call siren's cortex API with proper payload for rule upsert", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - rulesAPIMock.On("CreateRuleRequest", mock.Anything, mock.Anything).Return(client.Rule{ - Name: "foo", - }, nil, nil) - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(ruleBody), nil - } - result, err := dummyService.Upload("test.txt") - rules := result.([]*client.Rule) - assert.Equal(t, 1, len(rules)) - assert.Equal(t, "foo", rules[0].Name) - assert.Nil(t, err) - }) - - t.Run("should handle error in siren's cortex API call in template rule upsert", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - rulesAPIMock.On("CreateRuleRequest", mock.Anything, mock.Anything). - Return(client.Rule{}, nil, errors.New("random error")) - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(ruleBody), nil - } - result, err := dummyService.Upload("test.txt") - rules := result.([]*client.Rule) - assert.Equal(t, 0, len(rules)) - assert.EqualError(t, err, "random error") - }) - - t.Run("should handle file read errors", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return nil, errors.New("random error") - } - tmp, err := dummyService.Upload("test.txt") - assert.EqualError(t, err, "random error") - assert.Nil(t, tmp) - }) - - t.Run("should handle errors with bad yaml files", func(t *testing.T) { - rulesAPIMock := &mocks.RulesAPICaller{} - templatesAPIMock := &mocks.TemplatesAPICaller{} - mockedClient := &SirenClient{ - RulesAPI: rulesAPIMock, - TemplatesAPI: templatesAPIMock, - } - dummyService := &Service{ - SirenClient: mockedClient, - } - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - return []byte(badYaml), nil - } - tmp, err := dummyService.Upload("test.txt") - assert.EqualError(t, err, "yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `abcd` into uploader.yamlObject") - assert.Nil(t, tmp) - }) - - t.Run("should handle unknown types", func(t *testing.T) { - mockedClient := &SirenClient{ - RulesAPI: &mocks.RulesAPICaller{}, - TemplatesAPI: &mocks.TemplatesAPICaller{ - }} - dummyService := &Service{ - SirenClient: mockedClient, - } - oldFileReader := fileReader - defer func() { fileReader = oldFileReader }() - fileReader = func(_ string) ([]byte, error) { - body := `type: abcd` - return []byte(body), nil - } - res, err := dummyService.Upload("test.txt") - assert.Nil(t, res) - assert.EqualError(t, err, "unknown type given") - }) -} From 8823a52b63c32a64bfabe73599ff65ac6a0eb745 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Mon, 15 Nov 2021 18:44:07 +0530 Subject: [PATCH 11/18] fix: add filters in provider list api & fix upload rule --- api/handlers/v1/grpc_provider.go | 7 +- api/handlers/v1/grpc_provider_test.go | 22 +- api/proto/odpf/siren/v1/siren.pb.go | 2441 +++++++++--------- api/proto/odpf/siren/v1/siren.pb.gw.go | 22 +- api/proto/odpf/siren/v1/siren.pb.validate.go | 105 + api/proto/odpf/siren/v1/siren_grpc.pb.go | 12 +- cmd/provider.go | 3 +- cmd/upload.go | 37 +- domain/provider.go | 2 +- go.mod | 10 - go.sum | 65 +- mocks/ProviderService.go | 16 +- pkg/provider/model.go | 2 +- pkg/provider/repository.go | 25 +- pkg/provider/repository_mock.go | 14 +- pkg/provider/repository_test.go | 44 +- pkg/provider/service.go | 6 +- pkg/provider/service_test.go | 12 +- 18 files changed, 1528 insertions(+), 1317 deletions(-) diff --git a/api/handlers/v1/grpc_provider.go b/api/handlers/v1/grpc_provider.go index be5f58ba..d981be13 100644 --- a/api/handlers/v1/grpc_provider.go +++ b/api/handlers/v1/grpc_provider.go @@ -13,8 +13,11 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" ) -func (s *GRPCServer) ListProviders(_ context.Context, _ *emptypb.Empty) (*sirenv1.ListProvidersResponse, error) { - providers, err := s.container.ProviderService.ListProviders() +func (s *GRPCServer) ListProviders(_ context.Context, req *sirenv1.ListProvidersRequest) (*sirenv1.ListProvidersResponse, error) { + providers, err := s.container.ProviderService.ListProviders(map[string]interface{}{ + "urn": req.GetUrn(), + "type": req.GetType(), + }) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } diff --git a/api/handlers/v1/grpc_provider_test.go b/api/handlers/v1/grpc_provider_test.go index 48e02aac..aee50dda 100644 --- a/api/handlers/v1/grpc_provider_test.go +++ b/api/handlers/v1/grpc_provider_test.go @@ -10,7 +10,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "go.uber.org/zap/zaptest" - "google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/structpb" "strings" "testing" @@ -45,9 +44,12 @@ func TestGRPCServer_ListProvider(t *testing.T) { } mockedProviderService. - On("ListProviders"). + On("ListProviders", map[string]interface{}{ + "type": "", + "urn": "", + }). Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListProviders(context.Background(), &emptypb.Empty{}) + res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{}) assert.Nil(t, err) assert.Equal(t, 1, len(res.GetProviders())) assert.Equal(t, "foo", res.GetProviders()[0].GetHost()) @@ -65,9 +67,12 @@ func TestGRPCServer_ListProvider(t *testing.T) { } mockedProviderService. - On("ListProviders"). + On("ListProviders", map[string]interface{}{ + "type": "", + "urn": "", + }). Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.ListProviders(context.Background(), &emptypb.Empty{}) + res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{}) assert.Nil(t, res) assert.EqualError(t, err, "rpc error: code = Internal desc = random error") }) @@ -96,9 +101,12 @@ func TestGRPCServer_ListProvider(t *testing.T) { } mockedProviderService. - On("ListProviders"). + On("ListProviders", map[string]interface{}{ + "type": "", + "urn": "", + }). Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListProviders(context.Background(), &emptypb.Empty{}) + res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{}) assert.Nil(t, res) assert.Equal(t, strings.Replace(err.Error(), "\u00a0", " ", -1), "rpc error: code = Internal desc = proto: invalid UTF-8 in string: \"\\xff\"") diff --git a/api/proto/odpf/siren/v1/siren.pb.go b/api/proto/odpf/siren/v1/siren.pb.go index 19fb9d1e..c386817a 100644 --- a/api/proto/odpf/siren/v1/siren.pb.go +++ b/api/proto/odpf/siren/v1/siren.pb.go @@ -266,6 +266,61 @@ func (x *Provider) GetUpdatedAt() *timestamppb.Timestamp { return nil } +type ListProvidersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Urn string `protobuf:"bytes,1,opt,name=urn,proto3" json:"urn,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *ListProvidersRequest) Reset() { + *x = ListProvidersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_siren_v1_siren_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListProvidersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListProvidersRequest) ProtoMessage() {} + +func (x *ListProvidersRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_siren_v1_siren_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListProvidersRequest.ProtoReflect.Descriptor instead. +func (*ListProvidersRequest) Descriptor() ([]byte, []int) { + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{3} +} + +func (x *ListProvidersRequest) GetUrn() string { + if x != nil { + return x.Urn + } + return "" +} + +func (x *ListProvidersRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + type ListProvidersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -277,7 +332,7 @@ type ListProvidersResponse struct { func (x *ListProvidersResponse) Reset() { *x = ListProvidersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[3] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -290,7 +345,7 @@ func (x *ListProvidersResponse) String() string { func (*ListProvidersResponse) ProtoMessage() {} func (x *ListProvidersResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[3] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -303,7 +358,7 @@ func (x *ListProvidersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProvidersResponse.ProtoReflect.Descriptor instead. func (*ListProvidersResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{3} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{4} } func (x *ListProvidersResponse) GetProviders() []*Provider { @@ -329,7 +384,7 @@ type CreateProviderRequest struct { func (x *CreateProviderRequest) Reset() { *x = CreateProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[4] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -342,7 +397,7 @@ func (x *CreateProviderRequest) String() string { func (*CreateProviderRequest) ProtoMessage() {} func (x *CreateProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[4] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -355,7 +410,7 @@ func (x *CreateProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateProviderRequest.ProtoReflect.Descriptor instead. func (*CreateProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{4} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{5} } func (x *CreateProviderRequest) GetHost() string { @@ -411,7 +466,7 @@ type GetProviderRequest struct { func (x *GetProviderRequest) Reset() { *x = GetProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[5] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -424,7 +479,7 @@ func (x *GetProviderRequest) String() string { func (*GetProviderRequest) ProtoMessage() {} func (x *GetProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[5] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -437,7 +492,7 @@ func (x *GetProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProviderRequest.ProtoReflect.Descriptor instead. func (*GetProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{5} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{6} } func (x *GetProviderRequest) GetId() uint64 { @@ -463,7 +518,7 @@ type UpdateProviderRequest struct { func (x *UpdateProviderRequest) Reset() { *x = UpdateProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[6] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -476,7 +531,7 @@ func (x *UpdateProviderRequest) String() string { func (*UpdateProviderRequest) ProtoMessage() {} func (x *UpdateProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[6] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -489,7 +544,7 @@ func (x *UpdateProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateProviderRequest.ProtoReflect.Descriptor instead. func (*UpdateProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{6} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{7} } func (x *UpdateProviderRequest) GetId() uint64 { @@ -545,7 +600,7 @@ type DeleteProviderRequest struct { func (x *DeleteProviderRequest) Reset() { *x = DeleteProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[7] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -558,7 +613,7 @@ func (x *DeleteProviderRequest) String() string { func (*DeleteProviderRequest) ProtoMessage() {} func (x *DeleteProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[7] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -571,7 +626,7 @@ func (x *DeleteProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteProviderRequest.ProtoReflect.Descriptor instead. func (*DeleteProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{7} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{8} } func (x *DeleteProviderRequest) GetId() uint64 { @@ -599,7 +654,7 @@ type Namespace struct { func (x *Namespace) Reset() { *x = Namespace{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[8] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -612,7 +667,7 @@ func (x *Namespace) String() string { func (*Namespace) ProtoMessage() {} func (x *Namespace) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[8] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -625,7 +680,7 @@ func (x *Namespace) ProtoReflect() protoreflect.Message { // Deprecated: Use Namespace.ProtoReflect.Descriptor instead. func (*Namespace) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{8} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{9} } func (x *Namespace) GetId() uint64 { @@ -695,7 +750,7 @@ type ListNamespacesResponse struct { func (x *ListNamespacesResponse) Reset() { *x = ListNamespacesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[9] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -708,7 +763,7 @@ func (x *ListNamespacesResponse) String() string { func (*ListNamespacesResponse) ProtoMessage() {} func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[9] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -721,7 +776,7 @@ func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNamespacesResponse.ProtoReflect.Descriptor instead. func (*ListNamespacesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{9} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{10} } func (x *ListNamespacesResponse) GetNamespaces() []*Namespace { @@ -748,7 +803,7 @@ type CreateNamespaceRequest struct { func (x *CreateNamespaceRequest) Reset() { *x = CreateNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[10] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -761,7 +816,7 @@ func (x *CreateNamespaceRequest) String() string { func (*CreateNamespaceRequest) ProtoMessage() {} func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[10] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -774,7 +829,7 @@ func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateNamespaceRequest.ProtoReflect.Descriptor instead. func (*CreateNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{10} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{11} } func (x *CreateNamespaceRequest) GetName() string { @@ -837,7 +892,7 @@ type GetNamespaceRequest struct { func (x *GetNamespaceRequest) Reset() { *x = GetNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[11] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -850,7 +905,7 @@ func (x *GetNamespaceRequest) String() string { func (*GetNamespaceRequest) ProtoMessage() {} func (x *GetNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[11] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -863,7 +918,7 @@ func (x *GetNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNamespaceRequest.ProtoReflect.Descriptor instead. func (*GetNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{11} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{12} } func (x *GetNamespaceRequest) GetId() uint64 { @@ -888,7 +943,7 @@ type UpdateNamespaceRequest struct { func (x *UpdateNamespaceRequest) Reset() { *x = UpdateNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[12] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -901,7 +956,7 @@ func (x *UpdateNamespaceRequest) String() string { func (*UpdateNamespaceRequest) ProtoMessage() {} func (x *UpdateNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[12] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -914,7 +969,7 @@ func (x *UpdateNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateNamespaceRequest.ProtoReflect.Descriptor instead. func (*UpdateNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{12} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{13} } func (x *UpdateNamespaceRequest) GetId() uint64 { @@ -963,7 +1018,7 @@ type DeleteNamespaceRequest struct { func (x *DeleteNamespaceRequest) Reset() { *x = DeleteNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[13] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -976,7 +1031,7 @@ func (x *DeleteNamespaceRequest) String() string { func (*DeleteNamespaceRequest) ProtoMessage() {} func (x *DeleteNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[13] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -989,7 +1044,7 @@ func (x *DeleteNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNamespaceRequest.ProtoReflect.Descriptor instead. func (*DeleteNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{13} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{14} } func (x *DeleteNamespaceRequest) GetId() uint64 { @@ -1017,7 +1072,7 @@ type Receiver struct { func (x *Receiver) Reset() { *x = Receiver{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[14] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1030,7 +1085,7 @@ func (x *Receiver) String() string { func (*Receiver) ProtoMessage() {} func (x *Receiver) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[14] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1043,7 +1098,7 @@ func (x *Receiver) ProtoReflect() protoreflect.Message { // Deprecated: Use Receiver.ProtoReflect.Descriptor instead. func (*Receiver) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{14} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{15} } func (x *Receiver) GetId() uint64 { @@ -1113,7 +1168,7 @@ type ListReceiversResponse struct { func (x *ListReceiversResponse) Reset() { *x = ListReceiversResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[15] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1126,7 +1181,7 @@ func (x *ListReceiversResponse) String() string { func (*ListReceiversResponse) ProtoMessage() {} func (x *ListReceiversResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[15] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1139,7 +1194,7 @@ func (x *ListReceiversResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListReceiversResponse.ProtoReflect.Descriptor instead. func (*ListReceiversResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{15} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{16} } func (x *ListReceiversResponse) GetReceivers() []*Receiver { @@ -1163,7 +1218,7 @@ type CreateReceiverRequest struct { func (x *CreateReceiverRequest) Reset() { *x = CreateReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[16] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1176,7 +1231,7 @@ func (x *CreateReceiverRequest) String() string { func (*CreateReceiverRequest) ProtoMessage() {} func (x *CreateReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[16] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1189,7 +1244,7 @@ func (x *CreateReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateReceiverRequest.ProtoReflect.Descriptor instead. func (*CreateReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{16} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{17} } func (x *CreateReceiverRequest) GetName() string { @@ -1231,7 +1286,7 @@ type GetReceiverRequest struct { func (x *GetReceiverRequest) Reset() { *x = GetReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[17] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1244,7 +1299,7 @@ func (x *GetReceiverRequest) String() string { func (*GetReceiverRequest) ProtoMessage() {} func (x *GetReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[17] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1257,7 +1312,7 @@ func (x *GetReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReceiverRequest.ProtoReflect.Descriptor instead. func (*GetReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{17} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{18} } func (x *GetReceiverRequest) GetId() uint64 { @@ -1282,7 +1337,7 @@ type UpdateReceiverRequest struct { func (x *UpdateReceiverRequest) Reset() { *x = UpdateReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[18] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1295,7 +1350,7 @@ func (x *UpdateReceiverRequest) String() string { func (*UpdateReceiverRequest) ProtoMessage() {} func (x *UpdateReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[18] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1308,7 +1363,7 @@ func (x *UpdateReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateReceiverRequest.ProtoReflect.Descriptor instead. func (*UpdateReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{18} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{19} } func (x *UpdateReceiverRequest) GetId() uint64 { @@ -1357,7 +1412,7 @@ type DeleteReceiverRequest struct { func (x *DeleteReceiverRequest) Reset() { *x = DeleteReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[19] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1370,7 +1425,7 @@ func (x *DeleteReceiverRequest) String() string { func (*DeleteReceiverRequest) ProtoMessage() {} func (x *DeleteReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[19] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1383,7 +1438,7 @@ func (x *DeleteReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteReceiverRequest.ProtoReflect.Descriptor instead. func (*DeleteReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{19} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{20} } func (x *DeleteReceiverRequest) GetId() uint64 { @@ -1408,7 +1463,7 @@ type ListAlertsRequest struct { func (x *ListAlertsRequest) Reset() { *x = ListAlertsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[20] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1421,7 +1476,7 @@ func (x *ListAlertsRequest) String() string { func (*ListAlertsRequest) ProtoMessage() {} func (x *ListAlertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[20] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1434,7 +1489,7 @@ func (x *ListAlertsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAlertsRequest.ProtoReflect.Descriptor instead. func (*ListAlertsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{20} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{21} } func (x *ListAlertsRequest) GetProviderName() string { @@ -1483,7 +1538,7 @@ type Alerts struct { func (x *Alerts) Reset() { *x = Alerts{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[21] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1496,7 +1551,7 @@ func (x *Alerts) String() string { func (*Alerts) ProtoMessage() {} func (x *Alerts) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[21] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1509,7 +1564,7 @@ func (x *Alerts) ProtoReflect() protoreflect.Message { // Deprecated: Use Alerts.ProtoReflect.Descriptor instead. func (*Alerts) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{21} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{22} } func (x *Alerts) GetAlerts() []*Alert { @@ -1537,7 +1592,7 @@ type Alert struct { func (x *Alert) Reset() { *x = Alert{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[22] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1550,7 +1605,7 @@ func (x *Alert) String() string { func (*Alert) ProtoMessage() {} func (x *Alert) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[22] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1563,7 +1618,7 @@ func (x *Alert) ProtoReflect() protoreflect.Message { // Deprecated: Use Alert.ProtoReflect.Descriptor instead. func (*Alert) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{22} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{23} } func (x *Alert) GetId() uint64 { @@ -1634,7 +1689,7 @@ type CreateCortexAlertsRequest struct { func (x *CreateCortexAlertsRequest) Reset() { *x = CreateCortexAlertsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[23] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1647,7 +1702,7 @@ func (x *CreateCortexAlertsRequest) String() string { func (*CreateCortexAlertsRequest) ProtoMessage() {} func (x *CreateCortexAlertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[23] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1660,7 +1715,7 @@ func (x *CreateCortexAlertsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateCortexAlertsRequest.ProtoReflect.Descriptor instead. func (*CreateCortexAlertsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{23} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{24} } func (x *CreateCortexAlertsRequest) GetProviderId() uint64 { @@ -1691,7 +1746,7 @@ type CortexAlert struct { func (x *CortexAlert) Reset() { *x = CortexAlert{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[24] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1704,7 +1759,7 @@ func (x *CortexAlert) String() string { func (*CortexAlert) ProtoMessage() {} func (x *CortexAlert) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[24] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1717,7 +1772,7 @@ func (x *CortexAlert) ProtoReflect() protoreflect.Message { // Deprecated: Use CortexAlert.ProtoReflect.Descriptor instead. func (*CortexAlert) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{24} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{25} } func (x *CortexAlert) GetAnnotations() *Annotations { @@ -1762,7 +1817,7 @@ type Annotations struct { func (x *Annotations) Reset() { *x = Annotations{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[25] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1775,7 +1830,7 @@ func (x *Annotations) String() string { func (*Annotations) ProtoMessage() {} func (x *Annotations) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[25] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1788,7 +1843,7 @@ func (x *Annotations) ProtoReflect() protoreflect.Message { // Deprecated: Use Annotations.ProtoReflect.Descriptor instead. func (*Annotations) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{25} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{26} } func (x *Annotations) GetMetricName() string { @@ -1830,7 +1885,7 @@ type Labels struct { func (x *Labels) Reset() { *x = Labels{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[26] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1843,7 +1898,7 @@ func (x *Labels) String() string { func (*Labels) ProtoMessage() {} func (x *Labels) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[26] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1856,7 +1911,7 @@ func (x *Labels) ProtoReflect() protoreflect.Message { // Deprecated: Use Labels.ProtoReflect.Descriptor instead. func (*Labels) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{26} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{27} } func (x *Labels) GetSeverity() string { @@ -1878,7 +1933,7 @@ type SlackWorkspace struct { func (x *SlackWorkspace) Reset() { *x = SlackWorkspace{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[27] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1891,7 +1946,7 @@ func (x *SlackWorkspace) String() string { func (*SlackWorkspace) ProtoMessage() {} func (x *SlackWorkspace) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[27] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1904,7 +1959,7 @@ func (x *SlackWorkspace) ProtoReflect() protoreflect.Message { // Deprecated: Use SlackWorkspace.ProtoReflect.Descriptor instead. func (*SlackWorkspace) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{27} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{28} } func (x *SlackWorkspace) GetId() string { @@ -1932,7 +1987,7 @@ type ListWorkspaceChannelsRequest struct { func (x *ListWorkspaceChannelsRequest) Reset() { *x = ListWorkspaceChannelsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[28] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1945,7 +2000,7 @@ func (x *ListWorkspaceChannelsRequest) String() string { func (*ListWorkspaceChannelsRequest) ProtoMessage() {} func (x *ListWorkspaceChannelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[28] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1958,7 +2013,7 @@ func (x *ListWorkspaceChannelsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkspaceChannelsRequest.ProtoReflect.Descriptor instead. func (*ListWorkspaceChannelsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{28} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{29} } func (x *ListWorkspaceChannelsRequest) GetWorkspaceName() string { @@ -1979,7 +2034,7 @@ type ListWorkspaceChannelsResponse struct { func (x *ListWorkspaceChannelsResponse) Reset() { *x = ListWorkspaceChannelsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[29] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1992,7 +2047,7 @@ func (x *ListWorkspaceChannelsResponse) String() string { func (*ListWorkspaceChannelsResponse) ProtoMessage() {} func (x *ListWorkspaceChannelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[29] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2005,7 +2060,7 @@ func (x *ListWorkspaceChannelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkspaceChannelsResponse.ProtoReflect.Descriptor instead. func (*ListWorkspaceChannelsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{29} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{30} } func (x *ListWorkspaceChannelsResponse) GetData() []*SlackWorkspace { @@ -2027,7 +2082,7 @@ type ExchangeCodeRequest struct { func (x *ExchangeCodeRequest) Reset() { *x = ExchangeCodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[30] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2040,7 +2095,7 @@ func (x *ExchangeCodeRequest) String() string { func (*ExchangeCodeRequest) ProtoMessage() {} func (x *ExchangeCodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[30] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2053,7 +2108,7 @@ func (x *ExchangeCodeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeCodeRequest.ProtoReflect.Descriptor instead. func (*ExchangeCodeRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{30} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{31} } func (x *ExchangeCodeRequest) GetCode() string { @@ -2081,7 +2136,7 @@ type ExchangeCodeResponse struct { func (x *ExchangeCodeResponse) Reset() { *x = ExchangeCodeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[31] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2094,7 +2149,7 @@ func (x *ExchangeCodeResponse) String() string { func (*ExchangeCodeResponse) ProtoMessage() {} func (x *ExchangeCodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[31] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2107,7 +2162,7 @@ func (x *ExchangeCodeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeCodeResponse.ProtoReflect.Descriptor instead. func (*ExchangeCodeResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{31} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{32} } func (x *ExchangeCodeResponse) GetOk() bool { @@ -2128,7 +2183,7 @@ type GetAlertCredentialsRequest struct { func (x *GetAlertCredentialsRequest) Reset() { *x = GetAlertCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[32] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2141,7 +2196,7 @@ func (x *GetAlertCredentialsRequest) String() string { func (*GetAlertCredentialsRequest) ProtoMessage() {} func (x *GetAlertCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[32] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2154,7 +2209,7 @@ func (x *GetAlertCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAlertCredentialsRequest.ProtoReflect.Descriptor instead. func (*GetAlertCredentialsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{32} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{33} } func (x *GetAlertCredentialsRequest) GetTeamName() string { @@ -2175,7 +2230,7 @@ type Critical struct { func (x *Critical) Reset() { *x = Critical{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[33] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2188,7 +2243,7 @@ func (x *Critical) String() string { func (*Critical) ProtoMessage() {} func (x *Critical) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[33] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2201,7 +2256,7 @@ func (x *Critical) ProtoReflect() protoreflect.Message { // Deprecated: Use Critical.ProtoReflect.Descriptor instead. func (*Critical) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{33} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{34} } func (x *Critical) GetChannel() string { @@ -2222,7 +2277,7 @@ type Warning struct { func (x *Warning) Reset() { *x = Warning{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[34] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2235,7 +2290,7 @@ func (x *Warning) String() string { func (*Warning) ProtoMessage() {} func (x *Warning) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[34] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2248,7 +2303,7 @@ func (x *Warning) ProtoReflect() protoreflect.Message { // Deprecated: Use Warning.ProtoReflect.Descriptor instead. func (*Warning) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{34} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{35} } func (x *Warning) GetChannel() string { @@ -2270,7 +2325,7 @@ type SlackConfig struct { func (x *SlackConfig) Reset() { *x = SlackConfig{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[35] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2283,7 +2338,7 @@ func (x *SlackConfig) String() string { func (*SlackConfig) ProtoMessage() {} func (x *SlackConfig) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[35] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2296,7 +2351,7 @@ func (x *SlackConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SlackConfig.ProtoReflect.Descriptor instead. func (*SlackConfig) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{35} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{36} } func (x *SlackConfig) GetCritical() *Critical { @@ -2327,7 +2382,7 @@ type GetAlertCredentialsResponse struct { func (x *GetAlertCredentialsResponse) Reset() { *x = GetAlertCredentialsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[36] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2340,7 +2395,7 @@ func (x *GetAlertCredentialsResponse) String() string { func (*GetAlertCredentialsResponse) ProtoMessage() {} func (x *GetAlertCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[36] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2353,7 +2408,7 @@ func (x *GetAlertCredentialsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAlertCredentialsResponse.ProtoReflect.Descriptor instead. func (*GetAlertCredentialsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{36} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{37} } func (x *GetAlertCredentialsResponse) GetEntity() string { @@ -2398,7 +2453,7 @@ type UpdateAlertCredentialsRequest struct { func (x *UpdateAlertCredentialsRequest) Reset() { *x = UpdateAlertCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[37] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2411,7 +2466,7 @@ func (x *UpdateAlertCredentialsRequest) String() string { func (*UpdateAlertCredentialsRequest) ProtoMessage() {} func (x *UpdateAlertCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[37] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2424,7 +2479,7 @@ func (x *UpdateAlertCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAlertCredentialsRequest.ProtoReflect.Descriptor instead. func (*UpdateAlertCredentialsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{37} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{38} } func (x *UpdateAlertCredentialsRequest) GetEntity() string { @@ -2464,7 +2519,7 @@ type UpdateAlertCredentialsResponse struct { func (x *UpdateAlertCredentialsResponse) Reset() { *x = UpdateAlertCredentialsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[38] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2477,7 +2532,7 @@ func (x *UpdateAlertCredentialsResponse) String() string { func (*UpdateAlertCredentialsResponse) ProtoMessage() {} func (x *UpdateAlertCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[38] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2490,7 +2545,7 @@ func (x *UpdateAlertCredentialsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAlertCredentialsResponse.ProtoReflect.Descriptor instead. func (*UpdateAlertCredentialsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{38} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{39} } type SendReceiverNotificationRequest struct { @@ -2507,7 +2562,7 @@ type SendReceiverNotificationRequest struct { func (x *SendReceiverNotificationRequest) Reset() { *x = SendReceiverNotificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[39] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2520,7 +2575,7 @@ func (x *SendReceiverNotificationRequest) String() string { func (*SendReceiverNotificationRequest) ProtoMessage() {} func (x *SendReceiverNotificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[39] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2533,7 +2588,7 @@ func (x *SendReceiverNotificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SendReceiverNotificationRequest.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{39} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{40} } func (x *SendReceiverNotificationRequest) GetId() uint64 { @@ -2578,7 +2633,7 @@ type SendReceiverNotificationResponse struct { func (x *SendReceiverNotificationResponse) Reset() { *x = SendReceiverNotificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[40] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2591,7 +2646,7 @@ func (x *SendReceiverNotificationResponse) String() string { func (*SendReceiverNotificationResponse) ProtoMessage() {} func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[40] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2604,7 +2659,7 @@ func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SendReceiverNotificationResponse.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{40} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{41} } func (x *SendReceiverNotificationResponse) GetOk() bool { @@ -2629,7 +2684,7 @@ type ListRulesRequest struct { func (x *ListRulesRequest) Reset() { *x = ListRulesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[41] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2642,7 +2697,7 @@ func (x *ListRulesRequest) String() string { func (*ListRulesRequest) ProtoMessage() {} func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[41] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2655,7 +2710,7 @@ func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRulesRequest.ProtoReflect.Descriptor instead. func (*ListRulesRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{41} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{42} } func (x *ListRulesRequest) GetName() string { @@ -2707,7 +2762,7 @@ type Variables struct { func (x *Variables) Reset() { *x = Variables{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[42] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2720,7 +2775,7 @@ func (x *Variables) String() string { func (*Variables) ProtoMessage() {} func (x *Variables) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[42] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2733,7 +2788,7 @@ func (x *Variables) ProtoReflect() protoreflect.Message { // Deprecated: Use Variables.ProtoReflect.Descriptor instead. func (*Variables) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{42} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{43} } func (x *Variables) GetName() string { @@ -2784,7 +2839,7 @@ type Rule struct { func (x *Rule) Reset() { *x = Rule{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[43] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2797,7 +2852,7 @@ func (x *Rule) String() string { func (*Rule) ProtoMessage() {} func (x *Rule) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[43] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2810,7 +2865,7 @@ func (x *Rule) ProtoReflect() protoreflect.Message { // Deprecated: Use Rule.ProtoReflect.Descriptor instead. func (*Rule) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{43} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{44} } func (x *Rule) GetId() uint64 { @@ -2894,7 +2949,7 @@ type ListRulesResponse struct { func (x *ListRulesResponse) Reset() { *x = ListRulesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[44] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2907,7 +2962,7 @@ func (x *ListRulesResponse) String() string { func (*ListRulesResponse) ProtoMessage() {} func (x *ListRulesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[44] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2920,7 +2975,7 @@ func (x *ListRulesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRulesResponse.ProtoReflect.Descriptor instead. func (*ListRulesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{44} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{45} } func (x *ListRulesResponse) GetRules() []*Rule { @@ -2941,7 +2996,7 @@ type UpdateRuleResponse struct { func (x *UpdateRuleResponse) Reset() { *x = UpdateRuleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[45] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2954,7 +3009,7 @@ func (x *UpdateRuleResponse) String() string { func (*UpdateRuleResponse) ProtoMessage() {} func (x *UpdateRuleResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[45] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2967,7 +3022,7 @@ func (x *UpdateRuleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRuleResponse.ProtoReflect.Descriptor instead. func (*UpdateRuleResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{45} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{46} } func (x *UpdateRuleResponse) GetRule() *Rule { @@ -2993,7 +3048,7 @@ type UpdateRuleRequest struct { func (x *UpdateRuleRequest) Reset() { *x = UpdateRuleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[46] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3006,7 +3061,7 @@ func (x *UpdateRuleRequest) String() string { func (*UpdateRuleRequest) ProtoMessage() {} func (x *UpdateRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[46] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3019,7 +3074,7 @@ func (x *UpdateRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRuleRequest.ProtoReflect.Descriptor instead. func (*UpdateRuleRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{46} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{47} } func (x *UpdateRuleRequest) GetEnabled() bool { @@ -3075,7 +3130,7 @@ type ListTemplatesRequest struct { func (x *ListTemplatesRequest) Reset() { *x = ListTemplatesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[47] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3088,7 +3143,7 @@ func (x *ListTemplatesRequest) String() string { func (*ListTemplatesRequest) ProtoMessage() {} func (x *ListTemplatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[47] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3101,7 +3156,7 @@ func (x *ListTemplatesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplatesRequest.ProtoReflect.Descriptor instead. func (*ListTemplatesRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{47} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{48} } func (x *ListTemplatesRequest) GetTag() string { @@ -3125,7 +3180,7 @@ type TemplateVariables struct { func (x *TemplateVariables) Reset() { *x = TemplateVariables{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[48] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3138,7 +3193,7 @@ func (x *TemplateVariables) String() string { func (*TemplateVariables) ProtoMessage() {} func (x *TemplateVariables) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[48] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3151,7 +3206,7 @@ func (x *TemplateVariables) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateVariables.ProtoReflect.Descriptor instead. func (*TemplateVariables) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{48} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{49} } func (x *TemplateVariables) GetName() string { @@ -3199,7 +3254,7 @@ type Template struct { func (x *Template) Reset() { *x = Template{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[49] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3212,7 +3267,7 @@ func (x *Template) String() string { func (*Template) ProtoMessage() {} func (x *Template) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[49] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3225,7 +3280,7 @@ func (x *Template) ProtoReflect() protoreflect.Message { // Deprecated: Use Template.ProtoReflect.Descriptor instead. func (*Template) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{49} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{50} } func (x *Template) GetId() uint64 { @@ -3288,7 +3343,7 @@ type TemplateResponse struct { func (x *TemplateResponse) Reset() { *x = TemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[50] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3301,7 +3356,7 @@ func (x *TemplateResponse) String() string { func (*TemplateResponse) ProtoMessage() {} func (x *TemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[50] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3314,7 +3369,7 @@ func (x *TemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateResponse.ProtoReflect.Descriptor instead. func (*TemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{50} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{51} } func (x *TemplateResponse) GetTemplate() *Template { @@ -3339,7 +3394,7 @@ type UpsertTemplateRequest struct { func (x *UpsertTemplateRequest) Reset() { *x = UpsertTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[51] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3352,7 +3407,7 @@ func (x *UpsertTemplateRequest) String() string { func (*UpsertTemplateRequest) ProtoMessage() {} func (x *UpsertTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[51] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3365,7 +3420,7 @@ func (x *UpsertTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertTemplateRequest.ProtoReflect.Descriptor instead. func (*UpsertTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{51} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{52} } func (x *UpsertTemplateRequest) GetId() uint64 { @@ -3414,7 +3469,7 @@ type ListTemplatesResponse struct { func (x *ListTemplatesResponse) Reset() { *x = ListTemplatesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[52] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3427,7 +3482,7 @@ func (x *ListTemplatesResponse) String() string { func (*ListTemplatesResponse) ProtoMessage() {} func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[52] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3440,7 +3495,7 @@ func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplatesResponse.ProtoReflect.Descriptor instead. func (*ListTemplatesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{52} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{53} } func (x *ListTemplatesResponse) GetTemplates() []*Template { @@ -3461,7 +3516,7 @@ type GetTemplateByNameRequest struct { func (x *GetTemplateByNameRequest) Reset() { *x = GetTemplateByNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[53] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3474,7 +3529,7 @@ func (x *GetTemplateByNameRequest) String() string { func (*GetTemplateByNameRequest) ProtoMessage() {} func (x *GetTemplateByNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[53] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3487,7 +3542,7 @@ func (x *GetTemplateByNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTemplateByNameRequest.ProtoReflect.Descriptor instead. func (*GetTemplateByNameRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{53} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{54} } func (x *GetTemplateByNameRequest) GetName() string { @@ -3508,7 +3563,7 @@ type DeleteTemplateRequest struct { func (x *DeleteTemplateRequest) Reset() { *x = DeleteTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[54] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3521,7 +3576,7 @@ func (x *DeleteTemplateRequest) String() string { func (*DeleteTemplateRequest) ProtoMessage() {} func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[54] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3534,7 +3589,7 @@ func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTemplateRequest.ProtoReflect.Descriptor instead. func (*DeleteTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{54} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{55} } func (x *DeleteTemplateRequest) GetName() string { @@ -3553,7 +3608,7 @@ type DeleteTemplateResponse struct { func (x *DeleteTemplateResponse) Reset() { *x = DeleteTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[55] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3566,7 +3621,7 @@ func (x *DeleteTemplateResponse) String() string { func (*DeleteTemplateResponse) ProtoMessage() {} func (x *DeleteTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[55] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3579,7 +3634,7 @@ func (x *DeleteTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTemplateResponse.ProtoReflect.Descriptor instead. func (*DeleteTemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{55} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{56} } type RenderTemplateRequest struct { @@ -3594,7 +3649,7 @@ type RenderTemplateRequest struct { func (x *RenderTemplateRequest) Reset() { *x = RenderTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[56] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3607,7 +3662,7 @@ func (x *RenderTemplateRequest) String() string { func (*RenderTemplateRequest) ProtoMessage() {} func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[56] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3620,7 +3675,7 @@ func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTemplateRequest.ProtoReflect.Descriptor instead. func (*RenderTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{56} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{57} } func (x *RenderTemplateRequest) GetName() string { @@ -3648,7 +3703,7 @@ type RenderTemplateResponse struct { func (x *RenderTemplateResponse) Reset() { *x = RenderTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[57] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3661,7 +3716,7 @@ func (x *RenderTemplateResponse) String() string { func (*RenderTemplateResponse) ProtoMessage() {} func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[57] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3674,7 +3729,7 @@ func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTemplateResponse.ProtoReflect.Descriptor instead. func (*RenderTemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{57} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{58} } func (x *RenderTemplateResponse) GetBody() string { @@ -3698,7 +3753,7 @@ type SendReceiverNotificationRequest_SlackPayload struct { func (x *SendReceiverNotificationRequest_SlackPayload) Reset() { *x = SendReceiverNotificationRequest_SlackPayload{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[67] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3711,7 +3766,7 @@ func (x *SendReceiverNotificationRequest_SlackPayload) String() string { func (*SendReceiverNotificationRequest_SlackPayload) ProtoMessage() {} func (x *SendReceiverNotificationRequest_SlackPayload) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[67] + mi := &file_odpf_siren_v1_siren_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3724,7 +3779,7 @@ func (x *SendReceiverNotificationRequest_SlackPayload) ProtoReflect() protorefle // Deprecated: Use SendReceiverNotificationRequest_SlackPayload.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationRequest_SlackPayload) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{39, 0} + return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{40, 0} } func (x *SendReceiverNotificationRequest_SlackPayload) GetMessage() string { @@ -3806,42 +3861,22 @@ var file_odpf_siren_v1_siren_proto_rawDesc = []byte{ 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4e, 0x0a, 0x15, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0xf0, 0x02, 0x0a, - 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, - 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, - 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, - 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, - 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd5, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1c, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2b, 0x0a, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x14, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4e, 0x0a, 0x15, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0xf0, 0x02, 0x0a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, 0x68, 0x6f, + 0x73, 0x74, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, @@ -3852,783 +3887,808 @@ var file_odpf_siren_v1_siren_proto_rawDesc = []byte{ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, - 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x87, 0x03, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, - 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x52, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x22, 0xc3, 0x03, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, - 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x03, - 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x24, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xd5, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, + 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, - 0x2b, 0x24, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, + 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x87, 0x03, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, + 0x3c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, + 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x22, 0xc3, 0x03, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, + 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, + 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, + 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, + 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, + 0xb2, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, + 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, + 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x22, 0xb2, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, - 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, - 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, - 0x22, 0xbd, 0x03, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x4e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x22, 0xbe, 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, - 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2e, 0x2d, 0x5d, - 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, - 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, - 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xce, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbd, + 0x03, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, - 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0d, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, - 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x6e, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x2c, - 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, - 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, - 0x72, 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, - 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, - 0x70, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, - 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, - 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, - 0x74, 0x12, 0x3c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x2d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, - 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x41, 0x74, 0x22, - 0x89, 0x01, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x34, 0x0a, 0x0e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x13, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x35, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, - 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, - 0x52, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, - 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x3d, 0x0a, 0x08, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, - 0x31, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x22, 0x3c, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, + 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4e, + 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x22, 0xbe, + 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, + 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, + 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, + 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xce, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, + 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, 0x1a, + 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x72, + 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, + 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, + 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, + 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, + 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x05, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, + 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x3d, + 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x70, 0x0a, + 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, + 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x61, + 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x74, + 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, + 0xcb, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, + 0x3c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x41, 0x74, 0x22, 0x89, 0x01, + 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, + 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, + 0x34, 0x0a, 0x0e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, + 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x13, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2c, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x2e, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x35, + 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x52, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x74, + 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, + 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x3d, 0x0a, 0x08, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x22, 0x88, 0x01, 0x0a, 0x0b, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, - 0x3a, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0xc6, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x33, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, - 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x84, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, - 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, - 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, - 0x79, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, - 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x14, 0x70, 0x61, - 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, - 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x0a, 0x1e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe3, 0x02, - 0x0a, 0x1f, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x53, 0x0a, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, - 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x1a, 0xd2, 0x01, 0x0a, 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, - 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, - 0x24, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x52, 0x07, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x52, 0x0c, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x32, 0x0a, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x22, 0x3c, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, + 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, + 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x88, + 0x01, 0x0a, 0x0b, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, + 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x3a, 0x0a, + 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0xc6, 0x01, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, + 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, + 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x84, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, + 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, - 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x03, 0x0a, 0x04, 0x52, 0x75, 0x6c, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, - 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x3d, - 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0xb8, 0x02, - 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, - 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x06, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, - 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, - 0x24, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x08, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, - 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x28, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, - 0x61, 0x67, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x14, 0x70, 0x61, 0x67, 0x65, + 0x72, 0x64, 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x73, 0x6c, + 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x1f, + 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x53, 0x0a, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, + 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, + 0x6c, 0x61, 0x63, 0x6b, 0x1a, 0xd2, 0x01, 0x0a, 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, - 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd2, - 0x02, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, - 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, - 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, + 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x32, 0x0a, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x03, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x0a, 0x11, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x3d, 0x0a, 0x12, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0xb8, 0x02, 0x0a, 0x11, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, + 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, + 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x28, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, + 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, + 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd2, 0x02, 0x0a, + 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, + 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, + 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x22, 0x47, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x15, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x09, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x61, 0x67, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x4e, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xd0, 0x01, 0x0a, - 0x15, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, - 0x4e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, - 0x47, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, - 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, - 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xd5, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x74, 0x65, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x47, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x2a, 0x13, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0a, - 0x0a, 0x06, 0x43, 0x4f, 0x52, 0x54, 0x45, 0x58, 0x10, 0x00, 0x32, 0xb9, 0x21, 0x0a, 0x0c, 0x53, - 0x69, 0x72, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x04, 0x50, - 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x92, 0x41, - 0x0c, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x07, 0x12, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x7e, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, - 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x0e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x35, 0x92, 0x41, - 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x12, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x34, - 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x67, - 0x65, 0x74, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, - 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, - 0x01, 0x2a, 0x12, 0x87, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x37, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x2a, 0x0f, 0x2f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x01, 0x0a, - 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, - 0x92, 0x41, 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, - 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x10, 0x22, 0x0b, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x37, 0x92, 0x41, 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x0f, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3d, - 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x1a, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, - 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x3a, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x7e, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, - 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, - 0x12, 0x0a, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x86, 0x01, 0x0a, - 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd5, 0x01, + 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, + 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x2a, 0x13, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0a, 0x0a, 0x06, + 0x43, 0x4f, 0x52, 0x54, 0x45, 0x58, 0x10, 0x00, 0x32, 0xc7, 0x21, 0x0a, 0x0c, 0x53, 0x69, 0x72, + 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x04, 0x50, 0x69, 0x6e, + 0x67, 0x12, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x92, 0x41, 0x0c, 0x0a, + 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x07, 0x12, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x8b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x23, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x35, - 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x22, 0x34, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, - 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, - 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x1a, 0x0f, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x87, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x2a, 0x0f, 0x2f, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, - 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x20, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x15, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x44, 0x92, 0x41, 0x14, 0x0a, 0x05, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x12, 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, - 0x18, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x29, 0x0a, - 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, - 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x73, 0x65, 0x6e, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x9e, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x28, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, - 0x47, 0x92, 0x41, 0x1d, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x14, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x2f, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xa6, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x73, 0x12, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x73, 0x12, 0x76, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x35, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, + 0x22, 0x0a, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, + 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x34, 0x92, 0x41, 0x1a, 0x0a, + 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, + 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, + 0x0f, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x87, + 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x37, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x2a, 0x0f, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x1c, 0x0a, + 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x6c, 0x69, 0x73, 0x74, + 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0d, 0x12, 0x0b, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x8c, + 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x22, 0x38, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, + 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x37, 0x92, 0x41, + 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x67, 0x65, + 0x74, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1f, 0x0a, + 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x15, 0x1a, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3a, 0x92, 0x41, + 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x7e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x35, 0x92, 0x41, 0x1d, 0x0a, + 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x12, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x34, 0x92, 0x41, + 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, + 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x11, 0x12, 0x0f, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, + 0x12, 0x87, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x37, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x2a, 0x0f, 0x2f, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0a, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, + 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x73, 0x22, 0x44, 0x92, 0x41, 0x14, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0b, + 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x27, 0x12, 0x25, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x29, 0x0a, 0x08, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x6e, 0x64, + 0x3a, 0x01, 0x2a, 0x12, 0x9e, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x47, 0x92, 0x41, 0x1d, + 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x72, + 0x74, 0x65, 0x78, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xa6, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2b, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2c, 0x12, 0x2a, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x76, 0x0a, + 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x22, 0x12, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, - 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, + 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, + 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x29, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, - 0x12, 0x1e, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x12, 0xa0, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, - 0x1a, 0x1e, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, - 0x12, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x23, 0x92, 0x41, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0a, - 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, - 0x12, 0x06, 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, - 0x19, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x11, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, - 0x1a, 0x06, 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x23, 0x2e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x74, + 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0xa0, 0x01, 0x0a, + 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, + 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x74, + 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, + 0x73, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x1a, 0x0a, 0x08, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x21, - 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x15, 0x61, 0x64, 0x64, 0x2f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x1a, 0x0a, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0xa2, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x43, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x11, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x42, 0xa8, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x42, - 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, - 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, - 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2f, - 0x76, 0x31, 0x3b, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x76, 0x31, 0x92, 0x41, 0x54, 0x12, 0x4f, 0x0a, - 0x0a, 0x53, 0x69, 0x72, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x73, 0x12, 0x3a, 0x44, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, - 0x72, 0x20, 0x53, 0x69, 0x72, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x67, 0x52, 0x50, 0x43, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x32, 0x05, 0x30, 0x2e, 0x33, 0x2e, 0x30, 0x2a, 0x01, - 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x23, 0x92, 0x41, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0a, 0x6c, 0x69, 0x73, 0x74, + 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x12, 0x06, 0x2f, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x19, 0x0a, 0x04, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x11, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, + 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x1a, 0x06, 0x2f, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x92, 0x01, + 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x15, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0f, 0x1a, 0x0a, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa2, 0x01, + 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, + 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x3a, + 0x01, 0x2a, 0x42, 0xa8, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x42, 0x0e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x27, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x76, 0x31, 0x92, 0x41, 0x54, 0x12, 0x4f, 0x0a, 0x0a, 0x53, 0x69, 0x72, + 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x73, 0x12, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x69, + 0x72, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, + 0x43, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x32, 0x05, 0x30, 0x2e, 0x33, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4644,199 +4704,200 @@ func file_odpf_siren_v1_siren_proto_rawDescGZIP() []byte { } var file_odpf_siren_v1_siren_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_odpf_siren_v1_siren_proto_msgTypes = make([]protoimpl.MessageInfo, 69) +var file_odpf_siren_v1_siren_proto_msgTypes = make([]protoimpl.MessageInfo, 70) var file_odpf_siren_v1_siren_proto_goTypes = []interface{}{ (Types)(0), // 0: odpf.siren.v1.Types (*PingRequest)(nil), // 1: odpf.siren.v1.PingRequest (*PingResponse)(nil), // 2: odpf.siren.v1.PingResponse (*Provider)(nil), // 3: odpf.siren.v1.Provider - (*ListProvidersResponse)(nil), // 4: odpf.siren.v1.ListProvidersResponse - (*CreateProviderRequest)(nil), // 5: odpf.siren.v1.CreateProviderRequest - (*GetProviderRequest)(nil), // 6: odpf.siren.v1.GetProviderRequest - (*UpdateProviderRequest)(nil), // 7: odpf.siren.v1.UpdateProviderRequest - (*DeleteProviderRequest)(nil), // 8: odpf.siren.v1.DeleteProviderRequest - (*Namespace)(nil), // 9: odpf.siren.v1.Namespace - (*ListNamespacesResponse)(nil), // 10: odpf.siren.v1.ListNamespacesResponse - (*CreateNamespaceRequest)(nil), // 11: odpf.siren.v1.CreateNamespaceRequest - (*GetNamespaceRequest)(nil), // 12: odpf.siren.v1.GetNamespaceRequest - (*UpdateNamespaceRequest)(nil), // 13: odpf.siren.v1.UpdateNamespaceRequest - (*DeleteNamespaceRequest)(nil), // 14: odpf.siren.v1.DeleteNamespaceRequest - (*Receiver)(nil), // 15: odpf.siren.v1.Receiver - (*ListReceiversResponse)(nil), // 16: odpf.siren.v1.ListReceiversResponse - (*CreateReceiverRequest)(nil), // 17: odpf.siren.v1.CreateReceiverRequest - (*GetReceiverRequest)(nil), // 18: odpf.siren.v1.GetReceiverRequest - (*UpdateReceiverRequest)(nil), // 19: odpf.siren.v1.UpdateReceiverRequest - (*DeleteReceiverRequest)(nil), // 20: odpf.siren.v1.DeleteReceiverRequest - (*ListAlertsRequest)(nil), // 21: odpf.siren.v1.ListAlertsRequest - (*Alerts)(nil), // 22: odpf.siren.v1.Alerts - (*Alert)(nil), // 23: odpf.siren.v1.Alert - (*CreateCortexAlertsRequest)(nil), // 24: odpf.siren.v1.CreateCortexAlertsRequest - (*CortexAlert)(nil), // 25: odpf.siren.v1.CortexAlert - (*Annotations)(nil), // 26: odpf.siren.v1.Annotations - (*Labels)(nil), // 27: odpf.siren.v1.Labels - (*SlackWorkspace)(nil), // 28: odpf.siren.v1.SlackWorkspace - (*ListWorkspaceChannelsRequest)(nil), // 29: odpf.siren.v1.ListWorkspaceChannelsRequest - (*ListWorkspaceChannelsResponse)(nil), // 30: odpf.siren.v1.ListWorkspaceChannelsResponse - (*ExchangeCodeRequest)(nil), // 31: odpf.siren.v1.ExchangeCodeRequest - (*ExchangeCodeResponse)(nil), // 32: odpf.siren.v1.ExchangeCodeResponse - (*GetAlertCredentialsRequest)(nil), // 33: odpf.siren.v1.GetAlertCredentialsRequest - (*Critical)(nil), // 34: odpf.siren.v1.Critical - (*Warning)(nil), // 35: odpf.siren.v1.Warning - (*SlackConfig)(nil), // 36: odpf.siren.v1.SlackConfig - (*GetAlertCredentialsResponse)(nil), // 37: odpf.siren.v1.GetAlertCredentialsResponse - (*UpdateAlertCredentialsRequest)(nil), // 38: odpf.siren.v1.UpdateAlertCredentialsRequest - (*UpdateAlertCredentialsResponse)(nil), // 39: odpf.siren.v1.UpdateAlertCredentialsResponse - (*SendReceiverNotificationRequest)(nil), // 40: odpf.siren.v1.SendReceiverNotificationRequest - (*SendReceiverNotificationResponse)(nil), // 41: odpf.siren.v1.SendReceiverNotificationResponse - (*ListRulesRequest)(nil), // 42: odpf.siren.v1.ListRulesRequest - (*Variables)(nil), // 43: odpf.siren.v1.Variables - (*Rule)(nil), // 44: odpf.siren.v1.Rule - (*ListRulesResponse)(nil), // 45: odpf.siren.v1.ListRulesResponse - (*UpdateRuleResponse)(nil), // 46: odpf.siren.v1.UpdateRuleResponse - (*UpdateRuleRequest)(nil), // 47: odpf.siren.v1.UpdateRuleRequest - (*ListTemplatesRequest)(nil), // 48: odpf.siren.v1.ListTemplatesRequest - (*TemplateVariables)(nil), // 49: odpf.siren.v1.TemplateVariables - (*Template)(nil), // 50: odpf.siren.v1.Template - (*TemplateResponse)(nil), // 51: odpf.siren.v1.TemplateResponse - (*UpsertTemplateRequest)(nil), // 52: odpf.siren.v1.UpsertTemplateRequest - (*ListTemplatesResponse)(nil), // 53: odpf.siren.v1.ListTemplatesResponse - (*GetTemplateByNameRequest)(nil), // 54: odpf.siren.v1.GetTemplateByNameRequest - (*DeleteTemplateRequest)(nil), // 55: odpf.siren.v1.DeleteTemplateRequest - (*DeleteTemplateResponse)(nil), // 56: odpf.siren.v1.DeleteTemplateResponse - (*RenderTemplateRequest)(nil), // 57: odpf.siren.v1.RenderTemplateRequest - (*RenderTemplateResponse)(nil), // 58: odpf.siren.v1.RenderTemplateResponse - nil, // 59: odpf.siren.v1.Provider.LabelsEntry - nil, // 60: odpf.siren.v1.CreateProviderRequest.LabelsEntry - nil, // 61: odpf.siren.v1.UpdateProviderRequest.LabelsEntry - nil, // 62: odpf.siren.v1.Namespace.LabelsEntry - nil, // 63: odpf.siren.v1.CreateNamespaceRequest.LabelsEntry - nil, // 64: odpf.siren.v1.UpdateNamespaceRequest.LabelsEntry - nil, // 65: odpf.siren.v1.Receiver.LabelsEntry - nil, // 66: odpf.siren.v1.CreateReceiverRequest.LabelsEntry - nil, // 67: odpf.siren.v1.UpdateReceiverRequest.LabelsEntry - (*SendReceiverNotificationRequest_SlackPayload)(nil), // 68: odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload - nil, // 69: odpf.siren.v1.RenderTemplateRequest.VariablesEntry - (*structpb.Struct)(nil), // 70: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 71: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 72: google.protobuf.Empty + (*ListProvidersRequest)(nil), // 4: odpf.siren.v1.ListProvidersRequest + (*ListProvidersResponse)(nil), // 5: odpf.siren.v1.ListProvidersResponse + (*CreateProviderRequest)(nil), // 6: odpf.siren.v1.CreateProviderRequest + (*GetProviderRequest)(nil), // 7: odpf.siren.v1.GetProviderRequest + (*UpdateProviderRequest)(nil), // 8: odpf.siren.v1.UpdateProviderRequest + (*DeleteProviderRequest)(nil), // 9: odpf.siren.v1.DeleteProviderRequest + (*Namespace)(nil), // 10: odpf.siren.v1.Namespace + (*ListNamespacesResponse)(nil), // 11: odpf.siren.v1.ListNamespacesResponse + (*CreateNamespaceRequest)(nil), // 12: odpf.siren.v1.CreateNamespaceRequest + (*GetNamespaceRequest)(nil), // 13: odpf.siren.v1.GetNamespaceRequest + (*UpdateNamespaceRequest)(nil), // 14: odpf.siren.v1.UpdateNamespaceRequest + (*DeleteNamespaceRequest)(nil), // 15: odpf.siren.v1.DeleteNamespaceRequest + (*Receiver)(nil), // 16: odpf.siren.v1.Receiver + (*ListReceiversResponse)(nil), // 17: odpf.siren.v1.ListReceiversResponse + (*CreateReceiverRequest)(nil), // 18: odpf.siren.v1.CreateReceiverRequest + (*GetReceiverRequest)(nil), // 19: odpf.siren.v1.GetReceiverRequest + (*UpdateReceiverRequest)(nil), // 20: odpf.siren.v1.UpdateReceiverRequest + (*DeleteReceiverRequest)(nil), // 21: odpf.siren.v1.DeleteReceiverRequest + (*ListAlertsRequest)(nil), // 22: odpf.siren.v1.ListAlertsRequest + (*Alerts)(nil), // 23: odpf.siren.v1.Alerts + (*Alert)(nil), // 24: odpf.siren.v1.Alert + (*CreateCortexAlertsRequest)(nil), // 25: odpf.siren.v1.CreateCortexAlertsRequest + (*CortexAlert)(nil), // 26: odpf.siren.v1.CortexAlert + (*Annotations)(nil), // 27: odpf.siren.v1.Annotations + (*Labels)(nil), // 28: odpf.siren.v1.Labels + (*SlackWorkspace)(nil), // 29: odpf.siren.v1.SlackWorkspace + (*ListWorkspaceChannelsRequest)(nil), // 30: odpf.siren.v1.ListWorkspaceChannelsRequest + (*ListWorkspaceChannelsResponse)(nil), // 31: odpf.siren.v1.ListWorkspaceChannelsResponse + (*ExchangeCodeRequest)(nil), // 32: odpf.siren.v1.ExchangeCodeRequest + (*ExchangeCodeResponse)(nil), // 33: odpf.siren.v1.ExchangeCodeResponse + (*GetAlertCredentialsRequest)(nil), // 34: odpf.siren.v1.GetAlertCredentialsRequest + (*Critical)(nil), // 35: odpf.siren.v1.Critical + (*Warning)(nil), // 36: odpf.siren.v1.Warning + (*SlackConfig)(nil), // 37: odpf.siren.v1.SlackConfig + (*GetAlertCredentialsResponse)(nil), // 38: odpf.siren.v1.GetAlertCredentialsResponse + (*UpdateAlertCredentialsRequest)(nil), // 39: odpf.siren.v1.UpdateAlertCredentialsRequest + (*UpdateAlertCredentialsResponse)(nil), // 40: odpf.siren.v1.UpdateAlertCredentialsResponse + (*SendReceiverNotificationRequest)(nil), // 41: odpf.siren.v1.SendReceiverNotificationRequest + (*SendReceiverNotificationResponse)(nil), // 42: odpf.siren.v1.SendReceiverNotificationResponse + (*ListRulesRequest)(nil), // 43: odpf.siren.v1.ListRulesRequest + (*Variables)(nil), // 44: odpf.siren.v1.Variables + (*Rule)(nil), // 45: odpf.siren.v1.Rule + (*ListRulesResponse)(nil), // 46: odpf.siren.v1.ListRulesResponse + (*UpdateRuleResponse)(nil), // 47: odpf.siren.v1.UpdateRuleResponse + (*UpdateRuleRequest)(nil), // 48: odpf.siren.v1.UpdateRuleRequest + (*ListTemplatesRequest)(nil), // 49: odpf.siren.v1.ListTemplatesRequest + (*TemplateVariables)(nil), // 50: odpf.siren.v1.TemplateVariables + (*Template)(nil), // 51: odpf.siren.v1.Template + (*TemplateResponse)(nil), // 52: odpf.siren.v1.TemplateResponse + (*UpsertTemplateRequest)(nil), // 53: odpf.siren.v1.UpsertTemplateRequest + (*ListTemplatesResponse)(nil), // 54: odpf.siren.v1.ListTemplatesResponse + (*GetTemplateByNameRequest)(nil), // 55: odpf.siren.v1.GetTemplateByNameRequest + (*DeleteTemplateRequest)(nil), // 56: odpf.siren.v1.DeleteTemplateRequest + (*DeleteTemplateResponse)(nil), // 57: odpf.siren.v1.DeleteTemplateResponse + (*RenderTemplateRequest)(nil), // 58: odpf.siren.v1.RenderTemplateRequest + (*RenderTemplateResponse)(nil), // 59: odpf.siren.v1.RenderTemplateResponse + nil, // 60: odpf.siren.v1.Provider.LabelsEntry + nil, // 61: odpf.siren.v1.CreateProviderRequest.LabelsEntry + nil, // 62: odpf.siren.v1.UpdateProviderRequest.LabelsEntry + nil, // 63: odpf.siren.v1.Namespace.LabelsEntry + nil, // 64: odpf.siren.v1.CreateNamespaceRequest.LabelsEntry + nil, // 65: odpf.siren.v1.UpdateNamespaceRequest.LabelsEntry + nil, // 66: odpf.siren.v1.Receiver.LabelsEntry + nil, // 67: odpf.siren.v1.CreateReceiverRequest.LabelsEntry + nil, // 68: odpf.siren.v1.UpdateReceiverRequest.LabelsEntry + (*SendReceiverNotificationRequest_SlackPayload)(nil), // 69: odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload + nil, // 70: odpf.siren.v1.RenderTemplateRequest.VariablesEntry + (*structpb.Struct)(nil), // 71: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 72: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 73: google.protobuf.Empty } var file_odpf_siren_v1_siren_proto_depIdxs = []int32{ - 70, // 0: odpf.siren.v1.Provider.credentials:type_name -> google.protobuf.Struct - 59, // 1: odpf.siren.v1.Provider.labels:type_name -> odpf.siren.v1.Provider.LabelsEntry - 71, // 2: odpf.siren.v1.Provider.created_at:type_name -> google.protobuf.Timestamp - 71, // 3: odpf.siren.v1.Provider.updated_at:type_name -> google.protobuf.Timestamp + 71, // 0: odpf.siren.v1.Provider.credentials:type_name -> google.protobuf.Struct + 60, // 1: odpf.siren.v1.Provider.labels:type_name -> odpf.siren.v1.Provider.LabelsEntry + 72, // 2: odpf.siren.v1.Provider.created_at:type_name -> google.protobuf.Timestamp + 72, // 3: odpf.siren.v1.Provider.updated_at:type_name -> google.protobuf.Timestamp 3, // 4: odpf.siren.v1.ListProvidersResponse.providers:type_name -> odpf.siren.v1.Provider - 70, // 5: odpf.siren.v1.CreateProviderRequest.credentials:type_name -> google.protobuf.Struct - 60, // 6: odpf.siren.v1.CreateProviderRequest.labels:type_name -> odpf.siren.v1.CreateProviderRequest.LabelsEntry - 70, // 7: odpf.siren.v1.UpdateProviderRequest.credentials:type_name -> google.protobuf.Struct - 61, // 8: odpf.siren.v1.UpdateProviderRequest.labels:type_name -> odpf.siren.v1.UpdateProviderRequest.LabelsEntry - 70, // 9: odpf.siren.v1.Namespace.credentials:type_name -> google.protobuf.Struct - 62, // 10: odpf.siren.v1.Namespace.labels:type_name -> odpf.siren.v1.Namespace.LabelsEntry - 71, // 11: odpf.siren.v1.Namespace.created_at:type_name -> google.protobuf.Timestamp - 71, // 12: odpf.siren.v1.Namespace.updated_at:type_name -> google.protobuf.Timestamp - 9, // 13: odpf.siren.v1.ListNamespacesResponse.namespaces:type_name -> odpf.siren.v1.Namespace - 70, // 14: odpf.siren.v1.CreateNamespaceRequest.credentials:type_name -> google.protobuf.Struct - 63, // 15: odpf.siren.v1.CreateNamespaceRequest.labels:type_name -> odpf.siren.v1.CreateNamespaceRequest.LabelsEntry - 71, // 16: odpf.siren.v1.CreateNamespaceRequest.created_at:type_name -> google.protobuf.Timestamp - 71, // 17: odpf.siren.v1.CreateNamespaceRequest.updated_at:type_name -> google.protobuf.Timestamp - 70, // 18: odpf.siren.v1.UpdateNamespaceRequest.credentials:type_name -> google.protobuf.Struct - 64, // 19: odpf.siren.v1.UpdateNamespaceRequest.labels:type_name -> odpf.siren.v1.UpdateNamespaceRequest.LabelsEntry - 65, // 20: odpf.siren.v1.Receiver.labels:type_name -> odpf.siren.v1.Receiver.LabelsEntry - 70, // 21: odpf.siren.v1.Receiver.configurations:type_name -> google.protobuf.Struct - 70, // 22: odpf.siren.v1.Receiver.data:type_name -> google.protobuf.Struct - 71, // 23: odpf.siren.v1.Receiver.created_at:type_name -> google.protobuf.Timestamp - 71, // 24: odpf.siren.v1.Receiver.updated_at:type_name -> google.protobuf.Timestamp - 15, // 25: odpf.siren.v1.ListReceiversResponse.receivers:type_name -> odpf.siren.v1.Receiver - 66, // 26: odpf.siren.v1.CreateReceiverRequest.labels:type_name -> odpf.siren.v1.CreateReceiverRequest.LabelsEntry - 70, // 27: odpf.siren.v1.CreateReceiverRequest.configurations:type_name -> google.protobuf.Struct - 67, // 28: odpf.siren.v1.UpdateReceiverRequest.labels:type_name -> odpf.siren.v1.UpdateReceiverRequest.LabelsEntry - 70, // 29: odpf.siren.v1.UpdateReceiverRequest.configurations:type_name -> google.protobuf.Struct - 23, // 30: odpf.siren.v1.Alerts.alerts:type_name -> odpf.siren.v1.Alert - 71, // 31: odpf.siren.v1.Alert.triggered_at:type_name -> google.protobuf.Timestamp - 25, // 32: odpf.siren.v1.CreateCortexAlertsRequest.alerts:type_name -> odpf.siren.v1.CortexAlert - 26, // 33: odpf.siren.v1.CortexAlert.annotations:type_name -> odpf.siren.v1.Annotations - 27, // 34: odpf.siren.v1.CortexAlert.labels:type_name -> odpf.siren.v1.Labels - 71, // 35: odpf.siren.v1.CortexAlert.starts_at:type_name -> google.protobuf.Timestamp - 28, // 36: odpf.siren.v1.ListWorkspaceChannelsResponse.data:type_name -> odpf.siren.v1.SlackWorkspace - 34, // 37: odpf.siren.v1.SlackConfig.critical:type_name -> odpf.siren.v1.Critical - 35, // 38: odpf.siren.v1.SlackConfig.warning:type_name -> odpf.siren.v1.Warning - 36, // 39: odpf.siren.v1.GetAlertCredentialsResponse.slack_config:type_name -> odpf.siren.v1.SlackConfig - 36, // 40: odpf.siren.v1.UpdateAlertCredentialsRequest.slack_config:type_name -> odpf.siren.v1.SlackConfig - 68, // 41: odpf.siren.v1.SendReceiverNotificationRequest.slack:type_name -> odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload - 43, // 42: odpf.siren.v1.Rule.variables:type_name -> odpf.siren.v1.Variables - 71, // 43: odpf.siren.v1.Rule.created_at:type_name -> google.protobuf.Timestamp - 71, // 44: odpf.siren.v1.Rule.updated_at:type_name -> google.protobuf.Timestamp - 44, // 45: odpf.siren.v1.ListRulesResponse.rules:type_name -> odpf.siren.v1.Rule - 44, // 46: odpf.siren.v1.UpdateRuleResponse.rule:type_name -> odpf.siren.v1.Rule - 43, // 47: odpf.siren.v1.UpdateRuleRequest.variables:type_name -> odpf.siren.v1.Variables - 71, // 48: odpf.siren.v1.Template.created_at:type_name -> google.protobuf.Timestamp - 71, // 49: odpf.siren.v1.Template.updated_at:type_name -> google.protobuf.Timestamp - 49, // 50: odpf.siren.v1.Template.variables:type_name -> odpf.siren.v1.TemplateVariables - 50, // 51: odpf.siren.v1.TemplateResponse.template:type_name -> odpf.siren.v1.Template - 49, // 52: odpf.siren.v1.UpsertTemplateRequest.variables:type_name -> odpf.siren.v1.TemplateVariables - 50, // 53: odpf.siren.v1.ListTemplatesResponse.templates:type_name -> odpf.siren.v1.Template - 69, // 54: odpf.siren.v1.RenderTemplateRequest.variables:type_name -> odpf.siren.v1.RenderTemplateRequest.VariablesEntry - 70, // 55: odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload.blocks:type_name -> google.protobuf.Struct + 71, // 5: odpf.siren.v1.CreateProviderRequest.credentials:type_name -> google.protobuf.Struct + 61, // 6: odpf.siren.v1.CreateProviderRequest.labels:type_name -> odpf.siren.v1.CreateProviderRequest.LabelsEntry + 71, // 7: odpf.siren.v1.UpdateProviderRequest.credentials:type_name -> google.protobuf.Struct + 62, // 8: odpf.siren.v1.UpdateProviderRequest.labels:type_name -> odpf.siren.v1.UpdateProviderRequest.LabelsEntry + 71, // 9: odpf.siren.v1.Namespace.credentials:type_name -> google.protobuf.Struct + 63, // 10: odpf.siren.v1.Namespace.labels:type_name -> odpf.siren.v1.Namespace.LabelsEntry + 72, // 11: odpf.siren.v1.Namespace.created_at:type_name -> google.protobuf.Timestamp + 72, // 12: odpf.siren.v1.Namespace.updated_at:type_name -> google.protobuf.Timestamp + 10, // 13: odpf.siren.v1.ListNamespacesResponse.namespaces:type_name -> odpf.siren.v1.Namespace + 71, // 14: odpf.siren.v1.CreateNamespaceRequest.credentials:type_name -> google.protobuf.Struct + 64, // 15: odpf.siren.v1.CreateNamespaceRequest.labels:type_name -> odpf.siren.v1.CreateNamespaceRequest.LabelsEntry + 72, // 16: odpf.siren.v1.CreateNamespaceRequest.created_at:type_name -> google.protobuf.Timestamp + 72, // 17: odpf.siren.v1.CreateNamespaceRequest.updated_at:type_name -> google.protobuf.Timestamp + 71, // 18: odpf.siren.v1.UpdateNamespaceRequest.credentials:type_name -> google.protobuf.Struct + 65, // 19: odpf.siren.v1.UpdateNamespaceRequest.labels:type_name -> odpf.siren.v1.UpdateNamespaceRequest.LabelsEntry + 66, // 20: odpf.siren.v1.Receiver.labels:type_name -> odpf.siren.v1.Receiver.LabelsEntry + 71, // 21: odpf.siren.v1.Receiver.configurations:type_name -> google.protobuf.Struct + 71, // 22: odpf.siren.v1.Receiver.data:type_name -> google.protobuf.Struct + 72, // 23: odpf.siren.v1.Receiver.created_at:type_name -> google.protobuf.Timestamp + 72, // 24: odpf.siren.v1.Receiver.updated_at:type_name -> google.protobuf.Timestamp + 16, // 25: odpf.siren.v1.ListReceiversResponse.receivers:type_name -> odpf.siren.v1.Receiver + 67, // 26: odpf.siren.v1.CreateReceiverRequest.labels:type_name -> odpf.siren.v1.CreateReceiverRequest.LabelsEntry + 71, // 27: odpf.siren.v1.CreateReceiverRequest.configurations:type_name -> google.protobuf.Struct + 68, // 28: odpf.siren.v1.UpdateReceiverRequest.labels:type_name -> odpf.siren.v1.UpdateReceiverRequest.LabelsEntry + 71, // 29: odpf.siren.v1.UpdateReceiverRequest.configurations:type_name -> google.protobuf.Struct + 24, // 30: odpf.siren.v1.Alerts.alerts:type_name -> odpf.siren.v1.Alert + 72, // 31: odpf.siren.v1.Alert.triggered_at:type_name -> google.protobuf.Timestamp + 26, // 32: odpf.siren.v1.CreateCortexAlertsRequest.alerts:type_name -> odpf.siren.v1.CortexAlert + 27, // 33: odpf.siren.v1.CortexAlert.annotations:type_name -> odpf.siren.v1.Annotations + 28, // 34: odpf.siren.v1.CortexAlert.labels:type_name -> odpf.siren.v1.Labels + 72, // 35: odpf.siren.v1.CortexAlert.starts_at:type_name -> google.protobuf.Timestamp + 29, // 36: odpf.siren.v1.ListWorkspaceChannelsResponse.data:type_name -> odpf.siren.v1.SlackWorkspace + 35, // 37: odpf.siren.v1.SlackConfig.critical:type_name -> odpf.siren.v1.Critical + 36, // 38: odpf.siren.v1.SlackConfig.warning:type_name -> odpf.siren.v1.Warning + 37, // 39: odpf.siren.v1.GetAlertCredentialsResponse.slack_config:type_name -> odpf.siren.v1.SlackConfig + 37, // 40: odpf.siren.v1.UpdateAlertCredentialsRequest.slack_config:type_name -> odpf.siren.v1.SlackConfig + 69, // 41: odpf.siren.v1.SendReceiverNotificationRequest.slack:type_name -> odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload + 44, // 42: odpf.siren.v1.Rule.variables:type_name -> odpf.siren.v1.Variables + 72, // 43: odpf.siren.v1.Rule.created_at:type_name -> google.protobuf.Timestamp + 72, // 44: odpf.siren.v1.Rule.updated_at:type_name -> google.protobuf.Timestamp + 45, // 45: odpf.siren.v1.ListRulesResponse.rules:type_name -> odpf.siren.v1.Rule + 45, // 46: odpf.siren.v1.UpdateRuleResponse.rule:type_name -> odpf.siren.v1.Rule + 44, // 47: odpf.siren.v1.UpdateRuleRequest.variables:type_name -> odpf.siren.v1.Variables + 72, // 48: odpf.siren.v1.Template.created_at:type_name -> google.protobuf.Timestamp + 72, // 49: odpf.siren.v1.Template.updated_at:type_name -> google.protobuf.Timestamp + 50, // 50: odpf.siren.v1.Template.variables:type_name -> odpf.siren.v1.TemplateVariables + 51, // 51: odpf.siren.v1.TemplateResponse.template:type_name -> odpf.siren.v1.Template + 50, // 52: odpf.siren.v1.UpsertTemplateRequest.variables:type_name -> odpf.siren.v1.TemplateVariables + 51, // 53: odpf.siren.v1.ListTemplatesResponse.templates:type_name -> odpf.siren.v1.Template + 70, // 54: odpf.siren.v1.RenderTemplateRequest.variables:type_name -> odpf.siren.v1.RenderTemplateRequest.VariablesEntry + 71, // 55: odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload.blocks:type_name -> google.protobuf.Struct 1, // 56: odpf.siren.v1.SirenService.Ping:input_type -> odpf.siren.v1.PingRequest - 72, // 57: odpf.siren.v1.SirenService.ListProviders:input_type -> google.protobuf.Empty - 5, // 58: odpf.siren.v1.SirenService.CreateProvider:input_type -> odpf.siren.v1.CreateProviderRequest - 6, // 59: odpf.siren.v1.SirenService.GetProvider:input_type -> odpf.siren.v1.GetProviderRequest - 7, // 60: odpf.siren.v1.SirenService.UpdateProvider:input_type -> odpf.siren.v1.UpdateProviderRequest - 8, // 61: odpf.siren.v1.SirenService.DeleteProvider:input_type -> odpf.siren.v1.DeleteProviderRequest - 72, // 62: odpf.siren.v1.SirenService.ListNamespaces:input_type -> google.protobuf.Empty - 11, // 63: odpf.siren.v1.SirenService.CreateNamespace:input_type -> odpf.siren.v1.CreateNamespaceRequest - 12, // 64: odpf.siren.v1.SirenService.GetNamespace:input_type -> odpf.siren.v1.GetNamespaceRequest - 13, // 65: odpf.siren.v1.SirenService.UpdateNamespace:input_type -> odpf.siren.v1.UpdateNamespaceRequest - 14, // 66: odpf.siren.v1.SirenService.DeleteNamespace:input_type -> odpf.siren.v1.DeleteNamespaceRequest - 72, // 67: odpf.siren.v1.SirenService.ListReceivers:input_type -> google.protobuf.Empty - 17, // 68: odpf.siren.v1.SirenService.CreateReceiver:input_type -> odpf.siren.v1.CreateReceiverRequest - 18, // 69: odpf.siren.v1.SirenService.GetReceiver:input_type -> odpf.siren.v1.GetReceiverRequest - 19, // 70: odpf.siren.v1.SirenService.UpdateReceiver:input_type -> odpf.siren.v1.UpdateReceiverRequest - 20, // 71: odpf.siren.v1.SirenService.DeleteReceiver:input_type -> odpf.siren.v1.DeleteReceiverRequest - 21, // 72: odpf.siren.v1.SirenService.ListAlerts:input_type -> odpf.siren.v1.ListAlertsRequest - 40, // 73: odpf.siren.v1.SirenService.SendReceiverNotification:input_type -> odpf.siren.v1.SendReceiverNotificationRequest - 24, // 74: odpf.siren.v1.SirenService.CreateCortexAlerts:input_type -> odpf.siren.v1.CreateCortexAlertsRequest - 29, // 75: odpf.siren.v1.SirenService.ListWorkspaceChannels:input_type -> odpf.siren.v1.ListWorkspaceChannelsRequest - 31, // 76: odpf.siren.v1.SirenService.ExchangeCode:input_type -> odpf.siren.v1.ExchangeCodeRequest - 33, // 77: odpf.siren.v1.SirenService.GetAlertCredentials:input_type -> odpf.siren.v1.GetAlertCredentialsRequest - 38, // 78: odpf.siren.v1.SirenService.UpdateAlertCredentials:input_type -> odpf.siren.v1.UpdateAlertCredentialsRequest - 42, // 79: odpf.siren.v1.SirenService.ListRules:input_type -> odpf.siren.v1.ListRulesRequest - 47, // 80: odpf.siren.v1.SirenService.UpdateRule:input_type -> odpf.siren.v1.UpdateRuleRequest - 48, // 81: odpf.siren.v1.SirenService.ListTemplates:input_type -> odpf.siren.v1.ListTemplatesRequest - 54, // 82: odpf.siren.v1.SirenService.GetTemplateByName:input_type -> odpf.siren.v1.GetTemplateByNameRequest - 52, // 83: odpf.siren.v1.SirenService.UpsertTemplate:input_type -> odpf.siren.v1.UpsertTemplateRequest - 55, // 84: odpf.siren.v1.SirenService.DeleteTemplate:input_type -> odpf.siren.v1.DeleteTemplateRequest - 57, // 85: odpf.siren.v1.SirenService.RenderTemplate:input_type -> odpf.siren.v1.RenderTemplateRequest + 4, // 57: odpf.siren.v1.SirenService.ListProviders:input_type -> odpf.siren.v1.ListProvidersRequest + 6, // 58: odpf.siren.v1.SirenService.CreateProvider:input_type -> odpf.siren.v1.CreateProviderRequest + 7, // 59: odpf.siren.v1.SirenService.GetProvider:input_type -> odpf.siren.v1.GetProviderRequest + 8, // 60: odpf.siren.v1.SirenService.UpdateProvider:input_type -> odpf.siren.v1.UpdateProviderRequest + 9, // 61: odpf.siren.v1.SirenService.DeleteProvider:input_type -> odpf.siren.v1.DeleteProviderRequest + 73, // 62: odpf.siren.v1.SirenService.ListNamespaces:input_type -> google.protobuf.Empty + 12, // 63: odpf.siren.v1.SirenService.CreateNamespace:input_type -> odpf.siren.v1.CreateNamespaceRequest + 13, // 64: odpf.siren.v1.SirenService.GetNamespace:input_type -> odpf.siren.v1.GetNamespaceRequest + 14, // 65: odpf.siren.v1.SirenService.UpdateNamespace:input_type -> odpf.siren.v1.UpdateNamespaceRequest + 15, // 66: odpf.siren.v1.SirenService.DeleteNamespace:input_type -> odpf.siren.v1.DeleteNamespaceRequest + 73, // 67: odpf.siren.v1.SirenService.ListReceivers:input_type -> google.protobuf.Empty + 18, // 68: odpf.siren.v1.SirenService.CreateReceiver:input_type -> odpf.siren.v1.CreateReceiverRequest + 19, // 69: odpf.siren.v1.SirenService.GetReceiver:input_type -> odpf.siren.v1.GetReceiverRequest + 20, // 70: odpf.siren.v1.SirenService.UpdateReceiver:input_type -> odpf.siren.v1.UpdateReceiverRequest + 21, // 71: odpf.siren.v1.SirenService.DeleteReceiver:input_type -> odpf.siren.v1.DeleteReceiverRequest + 22, // 72: odpf.siren.v1.SirenService.ListAlerts:input_type -> odpf.siren.v1.ListAlertsRequest + 41, // 73: odpf.siren.v1.SirenService.SendReceiverNotification:input_type -> odpf.siren.v1.SendReceiverNotificationRequest + 25, // 74: odpf.siren.v1.SirenService.CreateCortexAlerts:input_type -> odpf.siren.v1.CreateCortexAlertsRequest + 30, // 75: odpf.siren.v1.SirenService.ListWorkspaceChannels:input_type -> odpf.siren.v1.ListWorkspaceChannelsRequest + 32, // 76: odpf.siren.v1.SirenService.ExchangeCode:input_type -> odpf.siren.v1.ExchangeCodeRequest + 34, // 77: odpf.siren.v1.SirenService.GetAlertCredentials:input_type -> odpf.siren.v1.GetAlertCredentialsRequest + 39, // 78: odpf.siren.v1.SirenService.UpdateAlertCredentials:input_type -> odpf.siren.v1.UpdateAlertCredentialsRequest + 43, // 79: odpf.siren.v1.SirenService.ListRules:input_type -> odpf.siren.v1.ListRulesRequest + 48, // 80: odpf.siren.v1.SirenService.UpdateRule:input_type -> odpf.siren.v1.UpdateRuleRequest + 49, // 81: odpf.siren.v1.SirenService.ListTemplates:input_type -> odpf.siren.v1.ListTemplatesRequest + 55, // 82: odpf.siren.v1.SirenService.GetTemplateByName:input_type -> odpf.siren.v1.GetTemplateByNameRequest + 53, // 83: odpf.siren.v1.SirenService.UpsertTemplate:input_type -> odpf.siren.v1.UpsertTemplateRequest + 56, // 84: odpf.siren.v1.SirenService.DeleteTemplate:input_type -> odpf.siren.v1.DeleteTemplateRequest + 58, // 85: odpf.siren.v1.SirenService.RenderTemplate:input_type -> odpf.siren.v1.RenderTemplateRequest 2, // 86: odpf.siren.v1.SirenService.Ping:output_type -> odpf.siren.v1.PingResponse - 4, // 87: odpf.siren.v1.SirenService.ListProviders:output_type -> odpf.siren.v1.ListProvidersResponse + 5, // 87: odpf.siren.v1.SirenService.ListProviders:output_type -> odpf.siren.v1.ListProvidersResponse 3, // 88: odpf.siren.v1.SirenService.CreateProvider:output_type -> odpf.siren.v1.Provider 3, // 89: odpf.siren.v1.SirenService.GetProvider:output_type -> odpf.siren.v1.Provider 3, // 90: odpf.siren.v1.SirenService.UpdateProvider:output_type -> odpf.siren.v1.Provider - 72, // 91: odpf.siren.v1.SirenService.DeleteProvider:output_type -> google.protobuf.Empty - 10, // 92: odpf.siren.v1.SirenService.ListNamespaces:output_type -> odpf.siren.v1.ListNamespacesResponse - 9, // 93: odpf.siren.v1.SirenService.CreateNamespace:output_type -> odpf.siren.v1.Namespace - 9, // 94: odpf.siren.v1.SirenService.GetNamespace:output_type -> odpf.siren.v1.Namespace - 9, // 95: odpf.siren.v1.SirenService.UpdateNamespace:output_type -> odpf.siren.v1.Namespace - 72, // 96: odpf.siren.v1.SirenService.DeleteNamespace:output_type -> google.protobuf.Empty - 16, // 97: odpf.siren.v1.SirenService.ListReceivers:output_type -> odpf.siren.v1.ListReceiversResponse - 15, // 98: odpf.siren.v1.SirenService.CreateReceiver:output_type -> odpf.siren.v1.Receiver - 15, // 99: odpf.siren.v1.SirenService.GetReceiver:output_type -> odpf.siren.v1.Receiver - 15, // 100: odpf.siren.v1.SirenService.UpdateReceiver:output_type -> odpf.siren.v1.Receiver - 72, // 101: odpf.siren.v1.SirenService.DeleteReceiver:output_type -> google.protobuf.Empty - 22, // 102: odpf.siren.v1.SirenService.ListAlerts:output_type -> odpf.siren.v1.Alerts - 41, // 103: odpf.siren.v1.SirenService.SendReceiverNotification:output_type -> odpf.siren.v1.SendReceiverNotificationResponse - 22, // 104: odpf.siren.v1.SirenService.CreateCortexAlerts:output_type -> odpf.siren.v1.Alerts - 30, // 105: odpf.siren.v1.SirenService.ListWorkspaceChannels:output_type -> odpf.siren.v1.ListWorkspaceChannelsResponse - 32, // 106: odpf.siren.v1.SirenService.ExchangeCode:output_type -> odpf.siren.v1.ExchangeCodeResponse - 37, // 107: odpf.siren.v1.SirenService.GetAlertCredentials:output_type -> odpf.siren.v1.GetAlertCredentialsResponse - 39, // 108: odpf.siren.v1.SirenService.UpdateAlertCredentials:output_type -> odpf.siren.v1.UpdateAlertCredentialsResponse - 45, // 109: odpf.siren.v1.SirenService.ListRules:output_type -> odpf.siren.v1.ListRulesResponse - 46, // 110: odpf.siren.v1.SirenService.UpdateRule:output_type -> odpf.siren.v1.UpdateRuleResponse - 53, // 111: odpf.siren.v1.SirenService.ListTemplates:output_type -> odpf.siren.v1.ListTemplatesResponse - 51, // 112: odpf.siren.v1.SirenService.GetTemplateByName:output_type -> odpf.siren.v1.TemplateResponse - 51, // 113: odpf.siren.v1.SirenService.UpsertTemplate:output_type -> odpf.siren.v1.TemplateResponse - 56, // 114: odpf.siren.v1.SirenService.DeleteTemplate:output_type -> odpf.siren.v1.DeleteTemplateResponse - 58, // 115: odpf.siren.v1.SirenService.RenderTemplate:output_type -> odpf.siren.v1.RenderTemplateResponse + 73, // 91: odpf.siren.v1.SirenService.DeleteProvider:output_type -> google.protobuf.Empty + 11, // 92: odpf.siren.v1.SirenService.ListNamespaces:output_type -> odpf.siren.v1.ListNamespacesResponse + 10, // 93: odpf.siren.v1.SirenService.CreateNamespace:output_type -> odpf.siren.v1.Namespace + 10, // 94: odpf.siren.v1.SirenService.GetNamespace:output_type -> odpf.siren.v1.Namespace + 10, // 95: odpf.siren.v1.SirenService.UpdateNamespace:output_type -> odpf.siren.v1.Namespace + 73, // 96: odpf.siren.v1.SirenService.DeleteNamespace:output_type -> google.protobuf.Empty + 17, // 97: odpf.siren.v1.SirenService.ListReceivers:output_type -> odpf.siren.v1.ListReceiversResponse + 16, // 98: odpf.siren.v1.SirenService.CreateReceiver:output_type -> odpf.siren.v1.Receiver + 16, // 99: odpf.siren.v1.SirenService.GetReceiver:output_type -> odpf.siren.v1.Receiver + 16, // 100: odpf.siren.v1.SirenService.UpdateReceiver:output_type -> odpf.siren.v1.Receiver + 73, // 101: odpf.siren.v1.SirenService.DeleteReceiver:output_type -> google.protobuf.Empty + 23, // 102: odpf.siren.v1.SirenService.ListAlerts:output_type -> odpf.siren.v1.Alerts + 42, // 103: odpf.siren.v1.SirenService.SendReceiverNotification:output_type -> odpf.siren.v1.SendReceiverNotificationResponse + 23, // 104: odpf.siren.v1.SirenService.CreateCortexAlerts:output_type -> odpf.siren.v1.Alerts + 31, // 105: odpf.siren.v1.SirenService.ListWorkspaceChannels:output_type -> odpf.siren.v1.ListWorkspaceChannelsResponse + 33, // 106: odpf.siren.v1.SirenService.ExchangeCode:output_type -> odpf.siren.v1.ExchangeCodeResponse + 38, // 107: odpf.siren.v1.SirenService.GetAlertCredentials:output_type -> odpf.siren.v1.GetAlertCredentialsResponse + 40, // 108: odpf.siren.v1.SirenService.UpdateAlertCredentials:output_type -> odpf.siren.v1.UpdateAlertCredentialsResponse + 46, // 109: odpf.siren.v1.SirenService.ListRules:output_type -> odpf.siren.v1.ListRulesResponse + 47, // 110: odpf.siren.v1.SirenService.UpdateRule:output_type -> odpf.siren.v1.UpdateRuleResponse + 54, // 111: odpf.siren.v1.SirenService.ListTemplates:output_type -> odpf.siren.v1.ListTemplatesResponse + 52, // 112: odpf.siren.v1.SirenService.GetTemplateByName:output_type -> odpf.siren.v1.TemplateResponse + 52, // 113: odpf.siren.v1.SirenService.UpsertTemplate:output_type -> odpf.siren.v1.TemplateResponse + 57, // 114: odpf.siren.v1.SirenService.DeleteTemplate:output_type -> odpf.siren.v1.DeleteTemplateResponse + 59, // 115: odpf.siren.v1.SirenService.RenderTemplate:output_type -> odpf.siren.v1.RenderTemplateResponse 86, // [86:116] is the sub-list for method output_type 56, // [56:86] is the sub-list for method input_type 56, // [56:56] is the sub-list for extension type_name @@ -4887,7 +4948,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProvidersResponse); i { + switch v := v.(*ListProvidersRequest); i { case 0: return &v.state case 1: @@ -4899,7 +4960,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateProviderRequest); i { + switch v := v.(*ListProvidersResponse); i { case 0: return &v.state case 1: @@ -4911,7 +4972,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderRequest); i { + switch v := v.(*CreateProviderRequest); i { case 0: return &v.state case 1: @@ -4923,7 +4984,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateProviderRequest); i { + switch v := v.(*GetProviderRequest); i { case 0: return &v.state case 1: @@ -4935,7 +4996,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProviderRequest); i { + switch v := v.(*UpdateProviderRequest); i { case 0: return &v.state case 1: @@ -4947,7 +5008,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Namespace); i { + switch v := v.(*DeleteProviderRequest); i { case 0: return &v.state case 1: @@ -4959,7 +5020,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNamespacesResponse); i { + switch v := v.(*Namespace); i { case 0: return &v.state case 1: @@ -4971,7 +5032,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateNamespaceRequest); i { + switch v := v.(*ListNamespacesResponse); i { case 0: return &v.state case 1: @@ -4983,7 +5044,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNamespaceRequest); i { + switch v := v.(*CreateNamespaceRequest); i { case 0: return &v.state case 1: @@ -4995,7 +5056,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateNamespaceRequest); i { + switch v := v.(*GetNamespaceRequest); i { case 0: return &v.state case 1: @@ -5007,7 +5068,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteNamespaceRequest); i { + switch v := v.(*UpdateNamespaceRequest); i { case 0: return &v.state case 1: @@ -5019,7 +5080,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Receiver); i { + switch v := v.(*DeleteNamespaceRequest); i { case 0: return &v.state case 1: @@ -5031,7 +5092,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListReceiversResponse); i { + switch v := v.(*Receiver); i { case 0: return &v.state case 1: @@ -5043,7 +5104,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateReceiverRequest); i { + switch v := v.(*ListReceiversResponse); i { case 0: return &v.state case 1: @@ -5055,7 +5116,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReceiverRequest); i { + switch v := v.(*CreateReceiverRequest); i { case 0: return &v.state case 1: @@ -5067,7 +5128,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateReceiverRequest); i { + switch v := v.(*GetReceiverRequest); i { case 0: return &v.state case 1: @@ -5079,7 +5140,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteReceiverRequest); i { + switch v := v.(*UpdateReceiverRequest); i { case 0: return &v.state case 1: @@ -5091,7 +5152,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAlertsRequest); i { + switch v := v.(*DeleteReceiverRequest); i { case 0: return &v.state case 1: @@ -5103,7 +5164,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Alerts); i { + switch v := v.(*ListAlertsRequest); i { case 0: return &v.state case 1: @@ -5115,7 +5176,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Alert); i { + switch v := v.(*Alerts); i { case 0: return &v.state case 1: @@ -5127,7 +5188,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCortexAlertsRequest); i { + switch v := v.(*Alert); i { case 0: return &v.state case 1: @@ -5139,7 +5200,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CortexAlert); i { + switch v := v.(*CreateCortexAlertsRequest); i { case 0: return &v.state case 1: @@ -5151,7 +5212,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Annotations); i { + switch v := v.(*CortexAlert); i { case 0: return &v.state case 1: @@ -5163,7 +5224,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Labels); i { + switch v := v.(*Annotations); i { case 0: return &v.state case 1: @@ -5175,7 +5236,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SlackWorkspace); i { + switch v := v.(*Labels); i { case 0: return &v.state case 1: @@ -5187,7 +5248,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkspaceChannelsRequest); i { + switch v := v.(*SlackWorkspace); i { case 0: return &v.state case 1: @@ -5199,7 +5260,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkspaceChannelsResponse); i { + switch v := v.(*ListWorkspaceChannelsRequest); i { case 0: return &v.state case 1: @@ -5211,7 +5272,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeCodeRequest); i { + switch v := v.(*ListWorkspaceChannelsResponse); i { case 0: return &v.state case 1: @@ -5223,7 +5284,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeCodeResponse); i { + switch v := v.(*ExchangeCodeRequest); i { case 0: return &v.state case 1: @@ -5235,7 +5296,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAlertCredentialsRequest); i { + switch v := v.(*ExchangeCodeResponse); i { case 0: return &v.state case 1: @@ -5247,7 +5308,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Critical); i { + switch v := v.(*GetAlertCredentialsRequest); i { case 0: return &v.state case 1: @@ -5259,7 +5320,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Warning); i { + switch v := v.(*Critical); i { case 0: return &v.state case 1: @@ -5271,7 +5332,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SlackConfig); i { + switch v := v.(*Warning); i { case 0: return &v.state case 1: @@ -5283,7 +5344,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAlertCredentialsResponse); i { + switch v := v.(*SlackConfig); i { case 0: return &v.state case 1: @@ -5295,7 +5356,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateAlertCredentialsRequest); i { + switch v := v.(*GetAlertCredentialsResponse); i { case 0: return &v.state case 1: @@ -5307,7 +5368,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateAlertCredentialsResponse); i { + switch v := v.(*UpdateAlertCredentialsRequest); i { case 0: return &v.state case 1: @@ -5319,7 +5380,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendReceiverNotificationRequest); i { + switch v := v.(*UpdateAlertCredentialsResponse); i { case 0: return &v.state case 1: @@ -5331,7 +5392,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendReceiverNotificationResponse); i { + switch v := v.(*SendReceiverNotificationRequest); i { case 0: return &v.state case 1: @@ -5343,7 +5404,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRulesRequest); i { + switch v := v.(*SendReceiverNotificationResponse); i { case 0: return &v.state case 1: @@ -5355,7 +5416,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Variables); i { + switch v := v.(*ListRulesRequest); i { case 0: return &v.state case 1: @@ -5367,7 +5428,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Rule); i { + switch v := v.(*Variables); i { case 0: return &v.state case 1: @@ -5379,7 +5440,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRulesResponse); i { + switch v := v.(*Rule); i { case 0: return &v.state case 1: @@ -5391,7 +5452,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateRuleResponse); i { + switch v := v.(*ListRulesResponse); i { case 0: return &v.state case 1: @@ -5403,7 +5464,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateRuleRequest); i { + switch v := v.(*UpdateRuleResponse); i { case 0: return &v.state case 1: @@ -5415,7 +5476,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplatesRequest); i { + switch v := v.(*UpdateRuleRequest); i { case 0: return &v.state case 1: @@ -5427,7 +5488,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TemplateVariables); i { + switch v := v.(*ListTemplatesRequest); i { case 0: return &v.state case 1: @@ -5439,7 +5500,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Template); i { + switch v := v.(*TemplateVariables); i { case 0: return &v.state case 1: @@ -5451,7 +5512,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TemplateResponse); i { + switch v := v.(*Template); i { case 0: return &v.state case 1: @@ -5463,7 +5524,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertTemplateRequest); i { + switch v := v.(*TemplateResponse); i { case 0: return &v.state case 1: @@ -5475,7 +5536,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTemplatesResponse); i { + switch v := v.(*UpsertTemplateRequest); i { case 0: return &v.state case 1: @@ -5487,7 +5548,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTemplateByNameRequest); i { + switch v := v.(*ListTemplatesResponse); i { case 0: return &v.state case 1: @@ -5499,7 +5560,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTemplateRequest); i { + switch v := v.(*GetTemplateByNameRequest); i { case 0: return &v.state case 1: @@ -5511,7 +5572,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTemplateResponse); i { + switch v := v.(*DeleteTemplateRequest); i { case 0: return &v.state case 1: @@ -5523,7 +5584,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RenderTemplateRequest); i { + switch v := v.(*DeleteTemplateResponse); i { case 0: return &v.state case 1: @@ -5535,6 +5596,18 @@ func file_odpf_siren_v1_siren_proto_init() { } } file_odpf_siren_v1_siren_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RenderTemplateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_siren_v1_siren_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RenderTemplateResponse); i { case 0: return &v.state @@ -5546,7 +5619,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1_siren_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendReceiverNotificationRequest_SlackPayload); i { case 0: return &v.state @@ -5559,7 +5632,7 @@ func file_odpf_siren_v1_siren_proto_init() { } } } - file_odpf_siren_v1_siren_proto_msgTypes[39].OneofWrappers = []interface{}{ + file_odpf_siren_v1_siren_proto_msgTypes[40].OneofWrappers = []interface{}{ (*SendReceiverNotificationRequest_Slack)(nil), } type x struct{} @@ -5568,7 +5641,7 @@ func file_odpf_siren_v1_siren_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_odpf_siren_v1_siren_proto_rawDesc, NumEnums: 1, - NumMessages: 69, + NumMessages: 70, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/odpf/siren/v1/siren.pb.gw.go b/api/proto/odpf/siren/v1/siren.pb.gw.go index 9e1519dc..4bcd4a1f 100644 --- a/api/proto/odpf/siren/v1/siren.pb.gw.go +++ b/api/proto/odpf/siren/v1/siren.pb.gw.go @@ -50,19 +50,37 @@ func local_request_SirenService_Ping_0(ctx context.Context, marshaler runtime.Ma } +var ( + filter_SirenService_ListProviders_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + func request_SirenService_ListProviders_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty + var protoReq ListProvidersRequest var metadata runtime.ServerMetadata + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SirenService_ListProviders_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.ListProviders(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } func local_request_SirenService_ListProviders_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty + var protoReq ListProvidersRequest var metadata runtime.ServerMetadata + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SirenService_ListProviders_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.ListProviders(ctx, &protoReq) return msg, metadata, err diff --git a/api/proto/odpf/siren/v1/siren.pb.validate.go b/api/proto/odpf/siren/v1/siren.pb.validate.go index 255db1fd..18e4d745 100644 --- a/api/proto/odpf/siren/v1/siren.pb.validate.go +++ b/api/proto/odpf/siren/v1/siren.pb.validate.go @@ -441,6 +441,111 @@ var _Provider_Type_InLookup = map[string]struct{}{ "cortex": {}, } +// Validate checks the field values on ListProvidersRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListProvidersRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProvidersRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListProvidersRequestMultiError, or nil if none found. +func (m *ListProvidersRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProvidersRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Urn + + // no validation rules for Type + + if len(errors) > 0 { + return ListProvidersRequestMultiError(errors) + } + return nil +} + +// ListProvidersRequestMultiError is an error wrapping multiple validation +// errors returned by ListProvidersRequest.ValidateAll() if the designated +// constraints aren't met. +type ListProvidersRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProvidersRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListProvidersRequestMultiError) AllErrors() []error { return m } + +// ListProvidersRequestValidationError is the validation error returned by +// ListProvidersRequest.Validate if the designated constraints aren't met. +type ListProvidersRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListProvidersRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListProvidersRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListProvidersRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListProvidersRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListProvidersRequestValidationError) ErrorName() string { + return "ListProvidersRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListProvidersRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListProvidersRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListProvidersRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListProvidersRequestValidationError{} + // Validate checks the field values on ListProvidersResponse with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. diff --git a/api/proto/odpf/siren/v1/siren_grpc.pb.go b/api/proto/odpf/siren/v1/siren_grpc.pb.go index 6757fc77..ee629829 100644 --- a/api/proto/odpf/siren/v1/siren_grpc.pb.go +++ b/api/proto/odpf/siren/v1/siren_grpc.pb.go @@ -20,7 +20,7 @@ const _ = grpc.SupportPackageIsVersion7 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type SirenServiceClient interface { Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) - ListProviders(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListProvidersResponse, error) + ListProviders(ctx context.Context, in *ListProvidersRequest, opts ...grpc.CallOption) (*ListProvidersResponse, error) CreateProvider(ctx context.Context, in *CreateProviderRequest, opts ...grpc.CallOption) (*Provider, error) GetProvider(ctx context.Context, in *GetProviderRequest, opts ...grpc.CallOption) (*Provider, error) UpdateProvider(ctx context.Context, in *UpdateProviderRequest, opts ...grpc.CallOption) (*Provider, error) @@ -68,7 +68,7 @@ func (c *sirenServiceClient) Ping(ctx context.Context, in *PingRequest, opts ... return out, nil } -func (c *sirenServiceClient) ListProviders(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListProvidersResponse, error) { +func (c *sirenServiceClient) ListProviders(ctx context.Context, in *ListProvidersRequest, opts ...grpc.CallOption) (*ListProvidersResponse, error) { out := new(ListProvidersResponse) err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListProviders", in, out, opts...) if err != nil { @@ -334,7 +334,7 @@ func (c *sirenServiceClient) RenderTemplate(ctx context.Context, in *RenderTempl // for forward compatibility type SirenServiceServer interface { Ping(context.Context, *PingRequest) (*PingResponse, error) - ListProviders(context.Context, *emptypb.Empty) (*ListProvidersResponse, error) + ListProviders(context.Context, *ListProvidersRequest) (*ListProvidersResponse, error) CreateProvider(context.Context, *CreateProviderRequest) (*Provider, error) GetProvider(context.Context, *GetProviderRequest) (*Provider, error) UpdateProvider(context.Context, *UpdateProviderRequest) (*Provider, error) @@ -373,7 +373,7 @@ type UnimplementedSirenServiceServer struct { func (UnimplementedSirenServiceServer) Ping(context.Context, *PingRequest) (*PingResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") } -func (UnimplementedSirenServiceServer) ListProviders(context.Context, *emptypb.Empty) (*ListProvidersResponse, error) { +func (UnimplementedSirenServiceServer) ListProviders(context.Context, *ListProvidersRequest) (*ListProvidersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListProviders not implemented") } func (UnimplementedSirenServiceServer) CreateProvider(context.Context, *CreateProviderRequest) (*Provider, error) { @@ -492,7 +492,7 @@ func _SirenService_Ping_Handler(srv interface{}, ctx context.Context, dec func(i } func _SirenService_ListProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) + in := new(ListProvidersRequest) if err := dec(in); err != nil { return nil, err } @@ -504,7 +504,7 @@ func _SirenService_ListProviders_Handler(srv interface{}, ctx context.Context, d FullMethod: "/odpf.siren.v1.SirenService/ListProviders", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SirenServiceServer).ListProviders(ctx, req.(*emptypb.Empty)) + return srv.(SirenServiceServer).ListProviders(ctx, req.(*ListProvidersRequest)) } return interceptor(ctx, in, info, handler) } diff --git a/cmd/provider.go b/cmd/provider.go index 91631d3f..8e64395b 100644 --- a/cmd/provider.go +++ b/cmd/provider.go @@ -11,7 +11,6 @@ import ( sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" - "google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/structpb" ) @@ -56,7 +55,7 @@ func listProvidersCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.ListProviders(ctx, &emptypb.Empty{}) + res, err := client.ListProviders(ctx, &sirenv1.ListProvidersRequest{}) if err != nil { return err } diff --git a/cmd/upload.go b/cmd/upload.go index 468cb9d9..5dc36d84 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -24,11 +24,12 @@ type rule struct { } type ruleYaml struct { - ApiVersion string `yaml:"apiVersion"` - Entity string `yaml:"entity"` - Type string `yaml:"type"` - Namespace string `yaml:"namespace"` - Rules map[string]rule `yaml:"rules"` + ApiVersion string `yaml:"apiVersion"` + Entity string `yaml:"entity"` + Type string `yaml:"type"` + Namespace string `yaml:"namespace"` + ProviderNamespace string `yaml:"providerNamespace"` + Rules map[string]rule `yaml:"rules"` } type templatedRule struct { @@ -115,15 +116,15 @@ func (s Service) Upload(fileName string) (interface{}, error) { return nil, err } if strings.ToLower(y.Type) == "template" { - return s.UploadTemplates(yamlFile) + return s.UploadTemplate(yamlFile) } else if strings.ToLower(y.Type) == "rule" { - return s.UploadRules(yamlFile) + return s.UploadRule(yamlFile) } else { return nil, errors.New("unknown type given") } } -func (s Service) UploadTemplates(yamlFile []byte) (*sirenv1.Template, error) { +func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { var t template err := yaml.Unmarshal(yamlFile, &t) if err != nil { @@ -195,7 +196,7 @@ func (s Service) UploadTemplates(yamlFile []byte) (*sirenv1.Template, error) { return template.Template, nil } -func (s Service) UploadRules(yamlFile []byte) ([]*sirenv1.Rule, error) { +func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { var yamlBody ruleYaml err := yaml.Unmarshal(yamlFile, &yamlBody) if err != nil { @@ -220,12 +221,28 @@ func (s Service) UploadRules(yamlFile []byte) ([]*sirenv1.Rule, error) { enabled = true } + if yamlBody.ProviderNamespace == "" { + return nil, errors.New("provider namespace is required") + } + + data, err := s.SirenClient.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{ + Urn: yamlBody.ProviderNamespace, + }) + if err != nil { + return nil, err + } + + provideres := data.Providers + if len(provideres) == 0 { + return nil, errors.New(fmt.Sprintf("no provider found with urn: %s", yamlBody.ProviderNamespace)) + } + payload := &sirenv1.UpdateRuleRequest{ GroupName: groupName, Namespace: yamlBody.Namespace, Template: v.Template, Variables: ruleVariables, - ProviderNamespace: 1, + ProviderNamespace: provideres[0].Id, Enabled: enabled, } diff --git a/domain/provider.go b/domain/provider.go index 47472e62..351c34fd 100644 --- a/domain/provider.go +++ b/domain/provider.go @@ -15,7 +15,7 @@ type Provider struct { } type ProviderService interface { - ListProviders() ([]*Provider, error) + ListProviders(map[string]interface{}) ([]*Provider, error) CreateProvider(*Provider) (*Provider, error) GetProvider(uint64) (*Provider, error) UpdateProvider(*Provider) (*Provider, error) diff --git a/go.mod b/go.mod index e36f1385..7745269b 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,6 @@ require ( github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/MakeNowJust/heredoc v1.0.0 github.com/antihax/optional v1.0.0 - github.com/coreos/bbolt v1.3.2 // indirect - github.com/coreos/etcd v3.3.13+incompatible // indirect github.com/envoyproxy/protoc-gen-validate v0.1.0 github.com/go-openapi/loads v0.20.1 // indirect github.com/go-openapi/runtime v0.19.26 @@ -18,25 +16,18 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0 github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69 github.com/jeremywohl/flatten v1.0.1 - github.com/kataras/tablewriter v0.0.0-20180708051242-e063d29b7c23 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/lib/pq v1.3.0 - github.com/magiconair/properties v1.8.5 // indirect github.com/mcuadros/go-defaults v1.2.0 github.com/mitchellh/mapstructure v1.4.1 github.com/newrelic/go-agent/v3 v3.12.0 github.com/newrelic/go-agent/v3/integrations/nrgrpc v1.3.1 github.com/odpf/salt v0.0.0-20211028100023-de463ef825e1 - github.com/pelletier/go-toml v1.9.3 // indirect github.com/pkg/errors v0.9.1 github.com/prometheus/alertmanager v0.21.1-0.20200911160112-1fdff6b3f939 github.com/prometheus/prometheus v1.8.2-0.20201014093524-73e2ce1bd643 - github.com/prometheus/tsdb v0.7.1 // indirect github.com/slack-go/slack v0.9.3 - github.com/spf13/afero v1.6.0 // indirect - github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cobra v1.2.1 - github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/viper v1.8.1 github.com/stretchr/testify v1.7.0 go.uber.org/zap v1.19.0 @@ -48,7 +39,6 @@ require ( google.golang.org/protobuf v1.27.1 gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 - gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gorm.io/driver/postgres v1.0.8 gorm.io/gorm v1.20.12 diff --git a/go.sum b/go.sum index 6f59c464..db570b75 100644 --- a/go.sum +++ b/go.sum @@ -90,7 +90,6 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= @@ -129,16 +128,19 @@ github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U= github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= github.com/alecthomas/chroma v0.7.0/go.mod h1:1U/PfCsTALWWYHDnsIQkxEBM0+6LLe0v8+RSVMOwxeY= github.com/alecthomas/chroma v0.8.2 h1:x3zkuE2lUk/RIekyAJ3XRqSCP4zwWDfcw/YJCuCAACg= github.com/alecthomas/chroma v0.8.2/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= +github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo= github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= github.com/alecthomas/kong v0.1.17-0.20190424132513-439c674f7ae0/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= github.com/alecthomas/kong-hcl v0.1.8-0.20190615233001-b21fea9723c8/go.mod h1:MRgZdU3vrFd05IQ89AxUZ0aYdF39BYoNFa324SodPCA= github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 h1:GDQdwm/gAcJcLAKQQZGOJ4knlw+7rfEQQcmwTbt4p5E= github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -188,6 +190,7 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -195,7 +198,6 @@ 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= @@ -243,8 +245,6 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE github.com/containerd/containerd v1.2.7/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -286,7 +286,6 @@ github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zA github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dhui/dktest v0.3.0/go.mod h1:cyzIUfGsBEbZ6BT7tnXqAShHSXCZhSNmFl70sZ7c1yc= @@ -551,11 +550,9 @@ github.com/golang-migrate/migrate/v4 v4.7.0/go.mod h1:Qvut3N4xKWjoH3sokBccML6WyH github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -682,7 +679,6 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/loki v1.6.2-0.20201117140412-14a5fda15b07/go.mod h1:Rcg4a7v6TsdiC8T127YLYj+DOYQyeiiSMri3X+xCIUo= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -690,17 +686,13 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= -github.com/grpc-ecosystem/grpc-gateway v1.15.0 h1:ntPNC9TD/6l2XDenJZe6T5lSMg95thpV9sGAqHX4WU8= github.com/grpc-ecosystem/grpc-gateway v1.15.0/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.5.0 h1:ajue7SzQMywqRjg2fK7dcpc0QhFGpTR2plWfV4EZWR4= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.5.0/go.mod h1:r1hZAcvfFXuYmcKyCJI9wlyOPIZUJl6FCB8Cpca/NLE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0 h1:rgxjzoDmDXw5q8HONgyHhBas4to0/XWRo/gPpJhsUNQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0/go.mod h1:qrJPVzv9YlhsrxJc3P/Q85nr0w1lIRikTl4JlhdDH5w= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= @@ -889,8 +881,6 @@ github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/kataras/tablewriter v0.0.0-20180708051242-e063d29b7c23 h1:M8exrBzuhWcU6aoHJlHWPe4qFjVKzkMGRal78f5jRRU= -github.com/kataras/tablewriter v0.0.0-20180708051242-e063d29b7c23/go.mod h1:kBSna6b0/RzsOcOZf515vAXwSsXYusl2U7SA0XP09yI= github.com/kevinbheda/cortex-tools v0.8.0 h1:N3knpcJvifrv7t0mh/howWWcXSWEp9xhLfRfNLnAAww= github.com/kevinbheda/cortex-tools v0.8.0/go.mod h1:f4Br/FRc41kxdTdOKhMjyOO3XFpz4gX3m2Ok4zaK3KQ= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -907,7 +897,6 @@ github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH6 github.com/knq/sysutil v0.0.0-20191005231841-15668db23d08/go.mod h1:dFWs1zEqDjFtnBXsd1vPOZaLsESovai349994nHx3e0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -944,9 +933,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY= -github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -983,7 +969,6 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= @@ -1129,11 +1114,8 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= @@ -1166,7 +1148,6 @@ github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.2.0/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= @@ -1175,7 +1156,6 @@ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeD github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= -github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= @@ -1188,10 +1168,8 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= @@ -1200,7 +1178,6 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.11.1/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.12.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.14.0 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4= github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= @@ -1210,14 +1187,12 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.6/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= @@ -1232,7 +1207,6 @@ github.com/prometheus/prometheus v1.8.2-0.20200819132913-cb830b0a9c78/go.mod h1: github.com/prometheus/prometheus v1.8.2-0.20200923143134-7e2db3d092f3/go.mod h1:9VNWoDFHOMovlubld5uKKxfCDcPBj2GMOCjcUFXkYaM= github.com/prometheus/prometheus v1.8.2-0.20201014093524-73e2ce1bd643 h1:BDAexvKlOVjE5A8MlqRxzwkEpPl1/v6ydU1/J7kJtZc= github.com/prometheus/prometheus v1.8.2-0.20201014093524-73e2ce1bd643/go.mod h1:XYjkJiog7fyQu3puQNivZPI2pNq1C/775EIoHfDvuvY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= @@ -1267,6 +1241,7 @@ github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfP github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sercand/kuberesolver v2.1.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= github.com/sercand/kuberesolver v2.4.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc h1:jUIKcSPO9MoMJBbEoyE/RJoE8vz7Mb8AjvifMMwSyvY= @@ -1285,7 +1260,6 @@ github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= -github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -1304,21 +1278,15 @@ github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a/go.mod h1:LeFC github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ= -github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -1326,9 +1294,6 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1344,7 +1309,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -1411,7 +1375,6 @@ go.elastic.co/apm v1.5.0/go.mod h1:OdB9sPtM6Vt7oz3VXt7+KR96i9li74qrxBGHTQygFvk= go.elastic.co/apm/module/apmhttp v1.5.0/go.mod h1:1FbmNuyD3ddauwzgVwFB0fqY6KbZt3JkV187tGCYYhY= go.elastic.co/apm/module/apmot v1.5.0/go.mod h1:d2KYwhJParTpyw2WnTNy8geNlHKKFX+4oK3YLlsesWE= go.elastic.co/fastjson v1.0.0/go.mod h1:PmeUOMMtLHQr9ZS9J9owrAVg0FkaZDRZJEFTTGHtchs= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5-0.20200615073812-232d8fc87f50/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20190709142735-eb7dd97135a5/go.mod h1:N0RPWo9FXJYZQI4BTkDtQylrstIigYHeR18ONnyTufk= @@ -1457,16 +1420,13 @@ go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= @@ -1543,7 +1503,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1622,8 +1581,6 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns= -golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1736,7 +1693,6 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1847,8 +1803,6 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3 h1:L69ShwSZEyCsLKoAxDKeMvLDZkumEe8gXUZAjab0tX8= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1897,7 +1851,6 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -1954,8 +1907,6 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus= -google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1987,7 +1938,6 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= @@ -2003,7 +1953,6 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -2050,7 +1999,6 @@ gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -2067,7 +2015,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= k8s.io/api v0.0.0-20190813020757-36bff7324fb7/go.mod h1:3Iy+myeAORNCLgjd/Xu9ebwN7Vh59Bw0vh9jhoX+V58= diff --git a/mocks/ProviderService.go b/mocks/ProviderService.go index 77e7562b..434d118f 100644 --- a/mocks/ProviderService.go +++ b/mocks/ProviderService.go @@ -3,7 +3,7 @@ package mocks import ( - "github.com/odpf/siren/domain" + domain "github.com/odpf/siren/domain" mock "github.com/stretchr/testify/mock" ) @@ -72,13 +72,13 @@ func (_m *ProviderService) GetProvider(_a0 uint64) (*domain.Provider, error) { return r0, r1 } -// ListProviders provides a mock function with given fields: -func (_m *ProviderService) ListProviders() ([]*domain.Provider, error) { - ret := _m.Called() +// ListProviders provides a mock function with given fields: _a0 +func (_m *ProviderService) ListProviders(_a0 map[string]interface{}) ([]*domain.Provider, error) { + ret := _m.Called(_a0) var r0 []*domain.Provider - if rf, ok := ret.Get(0).(func() []*domain.Provider); ok { - r0 = rf() + if rf, ok := ret.Get(0).(func(map[string]interface{}) []*domain.Provider); ok { + r0 = rf(_a0) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]*domain.Provider) @@ -86,8 +86,8 @@ func (_m *ProviderService) ListProviders() ([]*domain.Provider, error) { } var r1 error - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() + if rf, ok := ret.Get(1).(func(map[string]interface{}) error); ok { + r1 = rf(_a0) } else { r1 = ret.Error(1) } diff --git a/pkg/provider/model.go b/pkg/provider/model.go index eef9c2e5..6924c967 100644 --- a/pkg/provider/model.go +++ b/pkg/provider/model.go @@ -89,7 +89,7 @@ func (provider *Provider) toDomain() *domain.Provider { type ProviderRepository interface { Migrate() error - List() ([]*Provider, error) + List(map[string]interface{}) ([]*Provider, error) Create(*Provider) (*Provider, error) Get(uint64) (*Provider, error) Update(*Provider) (*Provider, error) diff --git a/pkg/provider/repository.go b/pkg/provider/repository.go index 6df40d34..ba1d16de 100644 --- a/pkg/provider/repository.go +++ b/pkg/provider/repository.go @@ -3,24 +3,41 @@ package provider import ( "errors" "fmt" + "github.com/mitchellh/mapstructure" "gorm.io/gorm" ) +type Filters struct { + Urn string `mapstructure:"urn" validate:"omitempty"` + Type string `mapstructure:"type" validate:"omitempty"` +} + // Repository talks to the store to read or insert data type Repository struct { db *gorm.DB } - // NewRepository returns repository struct func NewRepository(db *gorm.DB) *Repository { return &Repository{db} } -func (r Repository) List() ([]*Provider, error) { +func (r Repository) List(filters map[string]interface{}) ([]*Provider, error) { var providers []*Provider - selectQuery := fmt.Sprintf("select * from providers") - result := r.db.Raw(selectQuery).Find(&providers) + var conditions Filters + if err := mapstructure.Decode(filters, &conditions); err != nil { + return nil, err + } + + db := r.db + if conditions.Urn != "" { + db = db.Where(`"urn" = ?`, conditions.Urn) + } + if conditions.Type != "" { + db = db.Where(`"type" = ?`, conditions.Type) + } + + result := db.Find(&providers) if result.Error != nil { return nil, result.Error } diff --git a/pkg/provider/repository_mock.go b/pkg/provider/repository_mock.go index 46d3505d..c8e33f29 100644 --- a/pkg/provider/repository_mock.go +++ b/pkg/provider/repository_mock.go @@ -69,13 +69,13 @@ func (_m *MockProviderRepository) Get(_a0 uint64) (*Provider, error) { return r0, r1 } -// List provides a mock function with given fields: -func (_m *MockProviderRepository) List() ([]*Provider, error) { - ret := _m.Called() +// List provides a mock function with given fields: _a0 +func (_m *MockProviderRepository) List(_a0 map[string]interface{}) ([]*Provider, error) { + ret := _m.Called(_a0) var r0 []*Provider - if rf, ok := ret.Get(0).(func() []*Provider); ok { - r0 = rf() + if rf, ok := ret.Get(0).(func(map[string]interface{}) []*Provider); ok { + r0 = rf(_a0) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]*Provider) @@ -83,8 +83,8 @@ func (_m *MockProviderRepository) List() ([]*Provider, error) { } var r1 error - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() + if rf, ok := ret.Get(1).(func(map[string]interface{}) error); ok { + r1 = rf(_a0) } else { r1 = ret.Error(1) } diff --git a/pkg/provider/repository_test.go b/pkg/provider/repository_test.go index 94c550f2..3d72e201 100644 --- a/pkg/provider/repository_test.go +++ b/pkg/provider/repository_test.go @@ -42,7 +42,7 @@ func (s *RepositoryTestSuite) TearDownTest() { func (s *RepositoryTestSuite) TestList() { s.Run("should get all providers", func() { - expectedQuery := regexp.QuoteMeta(`select * from providers`) + expectedQuery := regexp.QuoteMeta(`SELECT * FROM "providers"`) credentials := make(StringInterfaceMap) credentials["foo"] = "bar" labels := make(StringStringMap) @@ -67,16 +67,50 @@ func (s *RepositoryTestSuite) TestList() { json.RawMessage(`{"foo": "bar"}`), provider.CreatedAt, provider.UpdatedAt) s.dbmock.ExpectQuery(expectedQuery).WillReturnRows(expectedRows) - actualProviders, err := s.repository.List() + actualProviders, err := s.repository.List(map[string]interface{}{}) + s.Equal(expectedProviders, actualProviders) + s.Nil(err) + }) + + s.Run("should get all providers by filters", func() { + expectedQuery := regexp.QuoteMeta(`SELECT * FROM "providers"`) + credentials := make(StringInterfaceMap) + credentials["foo"] = "bar" + labels := make(StringStringMap) + labels["foo"] = "bar" + + provider := &Provider{ + Id: 1, + Host: "foo", + Type: "bar", + Urn: "foo", + Name: "foo", + Credentials: credentials, + Labels: labels, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + } + expectedProviders := []*Provider{provider} + + expectedRows := sqlmock. + NewRows([]string{"id", "host", "type", "urn", "name", "credentials", "labels", "created_at", "updated_at"}). + AddRow(provider.Id, provider.Host, provider.Type, provider.Urn, provider.Name, json.RawMessage(`{"foo": "bar"}`), + json.RawMessage(`{"foo": "bar"}`), provider.CreatedAt, provider.UpdatedAt) + s.dbmock.ExpectQuery(expectedQuery).WillReturnRows(expectedRows) + + actualProviders, err := s.repository.List(map[string]interface{}{ + "urn": "foo", + "type": "bar", + }) s.Equal(expectedProviders, actualProviders) s.Nil(err) }) s.Run("should return error if any", func() { - expectedQuery := regexp.QuoteMeta(`select * from providers`) + expectedQuery := regexp.QuoteMeta(`SELECT * FROM "providers"`) s.dbmock.ExpectQuery(expectedQuery).WillReturnError(errors.New("random error")) - actualProviders, err := s.repository.List() + actualProviders, err := s.repository.List(map[string]interface{}{}) s.Nil(actualProviders) s.EqualError(err, "random error") }) @@ -415,7 +449,7 @@ func (s *RepositoryTestSuite) TestUpdate() { AnyTime{}, AnyTime{}, expectedProvider.Id, expectedProvider.Id). WillReturnResult(sqlmock.NewResult(10, 1)) s.dbmock.ExpectQuery(secondSelectQuery).WillReturnError(errors.New("random error")) - + actualProvider, err := s.repository.Update(input) s.Nil(actualProvider) s.EqualError(err, "random error") diff --git a/pkg/provider/service.go b/pkg/provider/service.go index 094237c4..640787b1 100644 --- a/pkg/provider/service.go +++ b/pkg/provider/service.go @@ -16,8 +16,8 @@ func NewService(db *gorm.DB) domain.ProviderService { return &Service{NewRepository(db)} } -func (service Service) ListProviders() ([]*domain.Provider, error) { - providers, err := service.repository.List() +func (service Service) ListProviders(filters map[string]interface{}) ([]*domain.Provider, error) { + providers, err := service.repository.List(filters) if err != nil { return nil, errors.Wrap(err, "service.repository.List") } @@ -57,7 +57,7 @@ func (service Service) UpdateProvider(provider *domain.Provider) (*domain.Provid if err != nil { return nil, err } - + return newProvider.toDomain(), nil } diff --git a/pkg/provider/service_test.go b/pkg/provider/service_test.go index 926c0428..61f2727d 100644 --- a/pkg/provider/service_test.go +++ b/pkg/provider/service_test.go @@ -41,23 +41,23 @@ func TestListProviders(t *testing.T) { UpdatedAt: time.Now(), }, } - repositoryMock.On("List").Return(providers, nil).Once() - result, err := dummyService.ListProviders() + repositoryMock.On("List", map[string]interface{}{}).Return(providers, nil).Once() + result, err := dummyService.ListProviders(map[string]interface{}{}) assert.Nil(t, err) assert.Equal(t, len(dummyProviders), len(result)) assert.Equal(t, dummyProviders[0].Name, result[0].Name) - repositoryMock.AssertCalled(t, "List") + repositoryMock.AssertCalled(t, "List", map[string]interface{}{}) }) t.Run("should call repository List method and return error if any", func(t *testing.T) { repositoryMock := &MockProviderRepository{} dummyService := Service{repository: repositoryMock} - repositoryMock.On("List"). + repositoryMock.On("List", map[string]interface{}{}). Return(nil, errors.New("random error")).Once() - result, err := dummyService.ListProviders() + result, err := dummyService.ListProviders(map[string]interface{}{}) assert.Nil(t, result) assert.EqualError(t, err, "service.repository.List: random error") - repositoryMock.AssertCalled(t, "List") + repositoryMock.AssertCalled(t, "List", map[string]interface{}{}) }) } From 7207dfa700cdc62809dc9c8eaa80910f8ee91225 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Mon, 15 Nov 2021 18:59:50 +0530 Subject: [PATCH 12/18] doc: update cli info section --- cmd/root.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 821df62f..8a6465b2 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "github.com/MakeNowJust/heredoc" "os" "github.com/spf13/cobra" @@ -10,7 +11,26 @@ import ( // Execute runs the command line interface func Execute() { rootCmd := &cobra.Command{ - Use: "siren", + Use: "siren [flags]", + Short: "siren", + Long: heredoc.Doc(` + Siren. + + Siren provides alerting on metrics of your applications using Cortex metrics + in a simple DIY configuration. With Siren, you can define templates(using go templates), and + create/edit/enable/disable prometheus rules on demand.`), + SilenceUsage: true, + SilenceErrors: true, + Annotations: map[string]string{ + "group:core": "true", + "help:learn": heredoc.Doc(` + Use 'siren --help' for more information about a command. + Read the manual at https://odpf.gitbook.io/siren/ + `), + "help:feedback": heredoc.Doc(` + Open an issue here https://github.com/odpf/siren/issues + `), + }, } cliConfig, err := readConfig() @@ -28,7 +48,6 @@ func Execute() { rootCmd.AddCommand(templatesCmd(cliConfig)) rootCmd.AddCommand(rulesCmd(cliConfig)) rootCmd.AddCommand(alertsCmd(cliConfig)) - rootCmd.CompletionOptions.DisableDescriptions = true if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) From ee9c06d5087f66a0688bedf4d438a656c241a7ae Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Mon, 15 Nov 2021 19:13:55 +0530 Subject: [PATCH 13/18] fix: update rule api with bool status --- cmd/upload.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/cmd/upload.go b/cmd/upload.go index 5dc36d84..c8b6830c 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -19,7 +19,7 @@ type variables struct { type rule struct { Template string `yaml:"template"` - Status string `yaml:"status"` + Enabled bool `yaml:"enabled"` Variables []variables `yaml:"variables"` } @@ -205,7 +205,6 @@ func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { var successfullyUpsertedRules []*sirenv1.Rule for groupName, v := range yamlBody.Rules { - var enabled bool var ruleVariables []*sirenv1.Variables for i := 0; i < len(v.Variables); i++ { v := &sirenv1.Variables{ @@ -215,12 +214,6 @@ func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { ruleVariables = append(ruleVariables, v) } - // Fix for as per current implementation - enabled = false - if v.Status == "enabled" { - enabled = true - } - if yamlBody.ProviderNamespace == "" { return nil, errors.New("provider namespace is required") } @@ -243,7 +236,7 @@ func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { Template: v.Template, Variables: ruleVariables, ProviderNamespace: provideres[0].Id, - Enabled: enabled, + Enabled: v.Enabled, } result, err := s.SirenClient.UpdateRule(context.Background(), payload) @@ -265,7 +258,7 @@ func printRules(rules []*sirenv1.Rule) { fmt.Println("Upserted Rule") fmt.Println("ID:", rules[i].Id) fmt.Println("Name:", rules[i].Name) - fmt.Println("Name:", rules[i].Enabled) + fmt.Println("Enabled:", rules[i].Enabled) fmt.Println("Group Name:", rules[i].GroupName) fmt.Println("Namespace:", rules[i].Namespace) fmt.Println("Template:", rules[i].Template) From 6e998a7ac883d3a974d996e5f0d0590e1ddd8321 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Tue, 16 Nov 2021 08:59:18 +0530 Subject: [PATCH 14/18] refactor: move APIs from v1 to sirenv1beta1 --- api/handlers/v1/grpc.go | 35 +- api/handlers/v1/grpc_alert.go | 16 +- api/handlers/v1/grpc_alert_test.go | 40 +- api/handlers/v1/grpc_namespace.go | 24 +- api/handlers/v1/grpc_namespace_test.go | 16 +- api/handlers/v1/grpc_provider.go | 24 +- api/handlers/v1/grpc_provider_test.go | 16 +- api/handlers/v1/grpc_receiver.go | 30 +- api/handlers/v1/grpc_receiver_test.go | 58 +- api/handlers/v1/grpc_rule.go | 22 +- api/handlers/v1/grpc_rule_test.go | 10 +- api/handlers/v1/grpc_template.go | 40 +- api/handlers/v1/grpc_template_test.go | 24 +- api/handlers/v1/grpc_test.go | 54 +- .../odpf/siren/{v1 => v1beta1}/siren.pb.go | 2633 +++++++++-------- .../odpf/siren/{v1 => v1beta1}/siren.pb.gw.go | 184 +- .../{v1 => v1beta1}/siren.pb.validate.go | 4 +- .../siren/{v1 => v1beta1}/siren_grpc.pb.go | 126 +- app/server.go | 6 +- cmd/alert.go | 4 +- cmd/grpc.go | 6 +- cmd/namespace.go | 10 +- cmd/provider.go | 12 +- cmd/receiver.go | 16 +- cmd/rule.go | 10 +- cmd/template.go | 16 +- cmd/upload.go | 42 +- 27 files changed, 1757 insertions(+), 1721 deletions(-) rename api/proto/odpf/siren/{v1 => v1beta1}/siren.pb.go (53%) rename api/proto/odpf/siren/{v1 => v1beta1}/siren.pb.gw.go (92%) rename api/proto/odpf/siren/{v1 => v1beta1}/siren.pb.validate.go (99%) rename api/proto/odpf/siren/{v1 => v1beta1}/siren_grpc.pb.go (89%) diff --git a/api/handlers/v1/grpc.go b/api/handlers/v1/grpc.go index fe4322ec..1e81e88c 100644 --- a/api/handlers/v1/grpc.go +++ b/api/handlers/v1/grpc.go @@ -3,7 +3,7 @@ package v1 import ( "context" "github.com/newrelic/go-agent/v3/newrelic" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/helper" "github.com/odpf/siren/service" @@ -16,7 +16,7 @@ type GRPCServer struct { container *service.Container newrelic *newrelic.Application logger *zap.Logger - sirenv1.UnimplementedSirenServiceServer + sirenv1beta1.UnimplementedSirenServiceServer } func NewGRPCServer(container *service.Container, nr *newrelic.Application, logger *zap.Logger) *GRPCServer { @@ -27,21 +27,21 @@ func NewGRPCServer(container *service.Container, nr *newrelic.Application, logge } } -func (s *GRPCServer) Ping(ctx context.Context, in *sirenv1.PingRequest) (*sirenv1.PingResponse, error) { - return &sirenv1.PingResponse{Message: "Pong"}, nil +func (s *GRPCServer) Ping(ctx context.Context, in *sirenv1beta1.PingRequest) (*sirenv1beta1.PingResponse, error) { + return &sirenv1beta1.PingResponse{Message: "Pong"}, nil } -func (s *GRPCServer) ListWorkspaceChannels(_ context.Context, req *sirenv1.ListWorkspaceChannelsRequest) (*sirenv1.ListWorkspaceChannelsResponse, error) { +func (s *GRPCServer) ListWorkspaceChannels(_ context.Context, req *sirenv1beta1.ListWorkspaceChannelsRequest) (*sirenv1beta1.ListWorkspaceChannelsResponse, error) { workspace := req.GetWorkspaceName() workspaces, err := s.container.SlackWorkspaceService.GetChannels(workspace) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.ListWorkspaceChannelsResponse{ - Data: make([]*sirenv1.SlackWorkspace, 0), + res := &sirenv1beta1.ListWorkspaceChannelsResponse{ + Data: make([]*sirenv1beta1.SlackWorkspace, 0), } for _, workspace := range workspaces { - item := &sirenv1.SlackWorkspace{ + item := &sirenv1beta1.SlackWorkspace{ Id: workspace.ID, Name: workspace.Name, } @@ -50,7 +50,7 @@ func (s *GRPCServer) ListWorkspaceChannels(_ context.Context, req *sirenv1.ListW return res, nil } -func (s *GRPCServer) ExchangeCode(_ context.Context, req *sirenv1.ExchangeCodeRequest) (*sirenv1.ExchangeCodeResponse, error) { +func (s *GRPCServer) ExchangeCode(_ context.Context, req *sirenv1beta1.ExchangeCodeRequest) (*sirenv1beta1.ExchangeCodeResponse, error) { code := req.GetCode() workspace := req.GetWorkspace() result, err := s.container.CodeExchangeService.Exchange(domain.OAuthPayload{ @@ -60,31 +60,31 @@ func (s *GRPCServer) ExchangeCode(_ context.Context, req *sirenv1.ExchangeCodeRe if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.ExchangeCodeResponse{ + res := &sirenv1beta1.ExchangeCodeResponse{ Ok: result.OK, } return res, nil } -func (s *GRPCServer) GetAlertCredentials(_ context.Context, req *sirenv1.GetAlertCredentialsRequest) (*sirenv1.GetAlertCredentialsResponse, error) { +func (s *GRPCServer) GetAlertCredentials(_ context.Context, req *sirenv1beta1.GetAlertCredentialsRequest) (*sirenv1beta1.GetAlertCredentialsResponse, error) { teamName := req.GetTeamName() alertCredential, err := s.container.AlertmanagerService.Get(teamName) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.GetAlertCredentialsResponse{ + res := &sirenv1beta1.GetAlertCredentialsResponse{ Entity: alertCredential.Entity, TeamName: alertCredential.TeamName, PagerdutyCredentials: alertCredential.PagerdutyCredentials, - SlackConfig: &sirenv1.SlackConfig{ - Critical: &sirenv1.Critical{Channel: alertCredential.SlackConfig.Critical.Channel}, - Warning: &sirenv1.Warning{Channel: alertCredential.SlackConfig.Warning.Channel}, + SlackConfig: &sirenv1beta1.SlackConfig{ + Critical: &sirenv1beta1.Critical{Channel: alertCredential.SlackConfig.Critical.Channel}, + Warning: &sirenv1beta1.Warning{Channel: alertCredential.SlackConfig.Warning.Channel}, }, } return res, nil } -func (s *GRPCServer) UpdateAlertCredentials(_ context.Context, req *sirenv1.UpdateAlertCredentialsRequest) (*sirenv1.UpdateAlertCredentialsResponse, error) { +func (s *GRPCServer) UpdateAlertCredentials(_ context.Context, req *sirenv1beta1.UpdateAlertCredentialsRequest) (*sirenv1beta1.UpdateAlertCredentialsResponse, error) { entity := req.GetEntity() teamName := req.GetTeamName() pagerdutyCredential := req.GetPagerdutyCredentials() @@ -116,6 +116,5 @@ func (s *GRPCServer) UpdateAlertCredentials(_ context.Context, req *sirenv1.Upda if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.UpdateAlertCredentialsResponse{}, nil + return &sirenv1beta1.UpdateAlertCredentialsResponse{}, nil } - diff --git a/api/handlers/v1/grpc_alert.go b/api/handlers/v1/grpc_alert.go index 610ff401..92e90ed4 100644 --- a/api/handlers/v1/grpc_alert.go +++ b/api/handlers/v1/grpc_alert.go @@ -3,7 +3,7 @@ package v1 import ( "context" "fmt" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/helper" "google.golang.org/grpc/codes" @@ -11,7 +11,7 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" ) -func (s *GRPCServer) ListAlerts(_ context.Context, req *sirenv1.ListAlertsRequest) (*sirenv1.Alerts, error) { +func (s *GRPCServer) ListAlerts(_ context.Context, req *sirenv1beta1.ListAlertsRequest) (*sirenv1beta1.Alerts, error) { resourceName := req.GetResourceName() providerId := req.GetProviderId() startTime := req.GetStartTime() @@ -21,11 +21,11 @@ func (s *GRPCServer) ListAlerts(_ context.Context, req *sirenv1.ListAlertsReques if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.Alerts{ - Alerts: make([]*sirenv1.Alert, 0), + res := &sirenv1beta1.Alerts{ + Alerts: make([]*sirenv1beta1.Alert, 0), } for _, alert := range alerts { - item := &sirenv1.Alert{ + item := &sirenv1beta1.Alert{ Id: alert.Id, ProviderId: alert.ProviderId, ResourceName: alert.ResourceName, @@ -40,7 +40,7 @@ func (s *GRPCServer) ListAlerts(_ context.Context, req *sirenv1.ListAlertsReques return res, nil } -func (s *GRPCServer) CreateCortexAlerts(_ context.Context, req *sirenv1.CreateCortexAlertsRequest) (*sirenv1.Alerts, error) { +func (s *GRPCServer) CreateCortexAlerts(_ context.Context, req *sirenv1beta1.CreateCortexAlertsRequest) (*sirenv1beta1.Alerts, error) { alerts := domain.Alerts{Alerts: make([]domain.Alert, 0)} badAlertCount := 0 @@ -70,9 +70,9 @@ func (s *GRPCServer) CreateCortexAlerts(_ context.Context, req *sirenv1.CreateCo return nil, status.Errorf(codes.Internal, err.Error()) } - result := &sirenv1.Alerts{Alerts: make([]*sirenv1.Alert, 0)} + result := &sirenv1beta1.Alerts{Alerts: make([]*sirenv1beta1.Alert, 0)} for _, item := range createdAlerts { - alertHistoryItem := &sirenv1.Alert{ + alertHistoryItem := &sirenv1beta1.Alert{ Id: item.Id, ProviderId: item.ProviderId, ResourceName: item.ResourceName, diff --git a/api/handlers/v1/grpc_alert_test.go b/api/handlers/v1/grpc_alert_test.go index 56bba562..afcd4c72 100644 --- a/api/handlers/v1/grpc_alert_test.go +++ b/api/handlers/v1/grpc_alert_test.go @@ -3,7 +3,7 @@ package v1 import ( "context" "errors" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -28,7 +28,7 @@ func TestGRPCServer_ListAlerts(t *testing.T) { AlertService: mockedAlertService, }} - dummyReq := &sirenv1.ListAlertsRequest{ + dummyReq := &sirenv1beta1.ListAlertsRequest{ ResourceName: "foo", ProviderId: 1, StartTime: 100, @@ -45,7 +45,7 @@ func TestGRPCServer_ListAlerts(t *testing.T) { assert.Nil(t, err) mockedAlertService.AssertCalled(t, "Get", "foo", uint64(1), uint64(100), uint64(200)) }) - + t.Run("should return error code 13 if getting alert history failed", func(t *testing.T) { mockedAlertService := &mocks.AlertService{} dummyGRPCServer := GRPCServer{ @@ -58,7 +58,7 @@ func TestGRPCServer_ListAlerts(t *testing.T) { mockedAlertService.On("Get", "foo", uint64(1), uint64(100), uint64(200)). Return(nil, errors.New("random error")).Once() - dummyReq := &sirenv1.ListAlertsRequest{ + dummyReq := &sirenv1beta1.ListAlertsRequest{ ResourceName: "foo", ProviderId: 1, StartTime: 100, @@ -86,15 +86,15 @@ func TestGRPCServer_CreateAlertHistory(t *testing.T) { }, }, } - dummyReq := &sirenv1.CreateCortexAlertsRequest{ + dummyReq := &sirenv1beta1.CreateCortexAlertsRequest{ ProviderId: 1, - Alerts: []*sirenv1.CortexAlert{ + Alerts: []*sirenv1beta1.CortexAlert{ { Status: "foo", - Labels: &sirenv1.Labels{ + Labels: &sirenv1beta1.Labels{ Severity: "CRITICAL", }, - Annotations: &sirenv1.Annotations{ + Annotations: &sirenv1beta1.Annotations{ Resource: "foo", Template: "random", MetricName: "bar", @@ -137,15 +137,15 @@ func TestGRPCServer_CreateAlertHistory(t *testing.T) { t.Run("should create alerts for resolved alerts", func(t *testing.T) { mockedAlertService := &mocks.AlertService{} - dummyReq := &sirenv1.CreateCortexAlertsRequest{ + dummyReq := &sirenv1beta1.CreateCortexAlertsRequest{ ProviderId: 1, - Alerts: []*sirenv1.CortexAlert{ + Alerts: []*sirenv1beta1.CortexAlert{ { Status: "resolved", - Labels: &sirenv1.Labels{ + Labels: &sirenv1beta1.Labels{ Severity: "CRITICAL", }, - Annotations: &sirenv1.Annotations{ + Annotations: &sirenv1beta1.Annotations{ Resource: "foo", Template: "random", MetricName: "bar", @@ -216,27 +216,27 @@ func TestGRPCServer_CreateAlertHistory(t *testing.T) { t.Run("should insert valid alerts and should not return error if parameters are missing", func(t *testing.T) { mockedAlertService := &mocks.AlertService{} - dummyReq := &sirenv1.CreateCortexAlertsRequest{ + dummyReq := &sirenv1beta1.CreateCortexAlertsRequest{ ProviderId: 1, - Alerts: []*sirenv1.CortexAlert{ - &sirenv1.CortexAlert{ + Alerts: []*sirenv1beta1.CortexAlert{ + &sirenv1beta1.CortexAlert{ Status: "foo", - Labels: &sirenv1.Labels{ + Labels: &sirenv1beta1.Labels{ Severity: "CRITICAL", }, - Annotations: &sirenv1.Annotations{ + Annotations: &sirenv1beta1.Annotations{ Resource: "foo", MetricName: "bar", MetricValue: "30", }, StartsAt: timenow, }, - &sirenv1.CortexAlert{ + &sirenv1beta1.CortexAlert{ Status: "foo", - Labels: &sirenv1.Labels{ + Labels: &sirenv1beta1.Labels{ Severity: "CRITICAL", }, - Annotations: &sirenv1.Annotations{ + Annotations: &sirenv1beta1.Annotations{ Resource: "foo", Template: "random", MetricName: "bar", diff --git a/api/handlers/v1/grpc_namespace.go b/api/handlers/v1/grpc_namespace.go index 38ee7f49..8b82e9ba 100644 --- a/api/handlers/v1/grpc_namespace.go +++ b/api/handlers/v1/grpc_namespace.go @@ -2,7 +2,7 @@ package v1 import ( "context" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "go.uber.org/zap" "google.golang.org/grpc/codes" @@ -13,15 +13,15 @@ import ( "strings" ) -func (s *GRPCServer) ListNamespaces(_ context.Context, _ *emptypb.Empty) (*sirenv1.ListNamespacesResponse, error) { +func (s *GRPCServer) ListNamespaces(_ context.Context, _ *emptypb.Empty) (*sirenv1beta1.ListNamespacesResponse, error) { namespaces, err := s.container.NamespaceService.ListNamespaces() if err != nil { s.logger.Error("handler", zap.Error(err)) return nil, status.Errorf(codes.Internal, err.Error()) } - res := &sirenv1.ListNamespacesResponse{ - Namespaces: make([]*sirenv1.Namespace, 0), + res := &sirenv1beta1.ListNamespacesResponse{ + Namespaces: make([]*sirenv1beta1.Namespace, 0), } for _, namespace := range namespaces { credentials, err := structpb.NewStruct(namespace.Credentials) @@ -30,7 +30,7 @@ func (s *GRPCServer) ListNamespaces(_ context.Context, _ *emptypb.Empty) (*siren return nil, status.Errorf(codes.Internal, err.Error()) } - item := &sirenv1.Namespace{ + item := &sirenv1beta1.Namespace{ Id: namespace.Id, Urn: namespace.Urn, Name: namespace.Name, @@ -45,7 +45,7 @@ func (s *GRPCServer) ListNamespaces(_ context.Context, _ *emptypb.Empty) (*siren return res, nil } -func (s *GRPCServer) CreateNamespace(_ context.Context, req *sirenv1.CreateNamespaceRequest) (*sirenv1.Namespace, error) { +func (s *GRPCServer) CreateNamespace(_ context.Context, req *sirenv1beta1.CreateNamespaceRequest) (*sirenv1beta1.Namespace, error) { namespace, err := s.container.NamespaceService.CreateNamespace(&domain.Namespace{ Provider: req.GetProvider(), Urn: req.GetUrn(), @@ -67,7 +67,7 @@ func (s *GRPCServer) CreateNamespace(_ context.Context, req *sirenv1.CreateNames return nil, status.Errorf(codes.Internal, err.Error()) } - return &sirenv1.Namespace{ + return &sirenv1beta1.Namespace{ Id: namespace.Id, Provider: namespace.Provider, Urn: namespace.Urn, @@ -79,7 +79,7 @@ func (s *GRPCServer) CreateNamespace(_ context.Context, req *sirenv1.CreateNames }, nil } -func (s *GRPCServer) GetNamespace(_ context.Context, req *sirenv1.GetNamespaceRequest) (*sirenv1.Namespace, error) { +func (s *GRPCServer) GetNamespace(_ context.Context, req *sirenv1beta1.GetNamespaceRequest) (*sirenv1beta1.Namespace, error) { namespace, err := s.container.NamespaceService.GetNamespace(req.GetId()) if err != nil { s.logger.Error("handler", zap.Error(err)) @@ -95,7 +95,7 @@ func (s *GRPCServer) GetNamespace(_ context.Context, req *sirenv1.GetNamespaceRe return nil, status.Errorf(codes.Internal, err.Error()) } - return &sirenv1.Namespace{ + return &sirenv1beta1.Namespace{ Id: namespace.Id, Urn: namespace.Urn, Name: namespace.Name, @@ -107,7 +107,7 @@ func (s *GRPCServer) GetNamespace(_ context.Context, req *sirenv1.GetNamespaceRe }, nil } -func (s *GRPCServer) UpdateNamespace(_ context.Context, req *sirenv1.UpdateNamespaceRequest) (*sirenv1.Namespace, error) { +func (s *GRPCServer) UpdateNamespace(_ context.Context, req *sirenv1beta1.UpdateNamespaceRequest) (*sirenv1beta1.Namespace, error) { namespace, err := s.container.NamespaceService.UpdateNamespace(&domain.Namespace{ Id: req.GetId(), Provider: req.GetProvider(), @@ -129,7 +129,7 @@ func (s *GRPCServer) UpdateNamespace(_ context.Context, req *sirenv1.UpdateNames return nil, status.Errorf(codes.Internal, err.Error()) } - return &sirenv1.Namespace{ + return &sirenv1beta1.Namespace{ Id: namespace.Id, Urn: namespace.Urn, Name: namespace.Name, @@ -141,7 +141,7 @@ func (s *GRPCServer) UpdateNamespace(_ context.Context, req *sirenv1.UpdateNames }, nil } -func (s *GRPCServer) DeleteNamespace(_ context.Context, req *sirenv1.DeleteNamespaceRequest) (*emptypb.Empty, error) { +func (s *GRPCServer) DeleteNamespace(_ context.Context, req *sirenv1beta1.DeleteNamespaceRequest) (*emptypb.Empty, error) { err := s.container.NamespaceService.DeleteNamespace(req.GetId()) if err != nil { s.logger.Error("handler", zap.Error(err)) diff --git a/api/handlers/v1/grpc_namespace_test.go b/api/handlers/v1/grpc_namespace_test.go index 09061eda..c7cc637f 100644 --- a/api/handlers/v1/grpc_namespace_test.go +++ b/api/handlers/v1/grpc_namespace_test.go @@ -2,7 +2,7 @@ package v1 import ( "context" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -109,7 +109,7 @@ func TestGRPCServer_CreateNamespaces(t *testing.T) { Credentials: credentials, Labels: labels, } - request := &sirenv1.CreateNamespaceRequest{ + request := &sirenv1beta1.CreateNamespaceRequest{ Provider: 2, Name: "foo", Credentials: credentialsData, @@ -206,7 +206,7 @@ func TestGRPCServer_GetNamespace(t *testing.T) { mockedNamespaceService.On("GetNamespace", uint64(1)).Return(dummyResult, nil).Once() res, err := dummyGRPCServer.GetNamespace(context.Background(), - &sirenv1.GetNamespaceRequest{Id: uint64(1)}) + &sirenv1beta1.GetNamespaceRequest{Id: uint64(1)}) assert.Nil(t, err) assert.Equal(t, "foo", res.GetName()) assert.Equal(t, uint64(1), res.GetId()) @@ -224,7 +224,7 @@ func TestGRPCServer_GetNamespace(t *testing.T) { } mockedNamespaceService.On("GetNamespace", uint64(1)).Return(nil, nil).Once() res, err := dummyGRPCServer.GetNamespace(context.Background(), - &sirenv1.GetNamespaceRequest{Id: uint64(1)}) + &sirenv1beta1.GetNamespaceRequest{Id: uint64(1)}) assert.Nil(t, res) assert.EqualError(t, err, "rpc error: code = NotFound desc = namespace not found") }) @@ -240,7 +240,7 @@ func TestGRPCServer_GetNamespace(t *testing.T) { mockedNamespaceService.On("GetNamespace", uint64(1)). Return(nil, errors.New("random error")).Once() res, err := dummyGRPCServer.GetNamespace(context.Background(), - &sirenv1.GetNamespaceRequest{Id: uint64(1)}) + &sirenv1beta1.GetNamespaceRequest{Id: uint64(1)}) assert.Nil(t, res) assert.EqualError(t, err, `rpc error: code = Internal desc = random error`) }) @@ -265,7 +265,7 @@ func TestGRPCServer_GetNamespace(t *testing.T) { } mockedNamespaceService.On("GetNamespace", uint64(1)).Return(dummyResult, nil).Once() res, err := dummyGRPCServer.GetNamespace(context.Background(), - &sirenv1.GetNamespaceRequest{Id: uint64(1)}) + &sirenv1beta1.GetNamespaceRequest{Id: uint64(1)}) assert.Nil(t, res) assert.Equal(t, strings.Replace(err.Error(), "\u00a0", " ", -1), "rpc error: code = Internal desc = proto: invalid UTF-8 in string: \"\\xff\"") @@ -286,7 +286,7 @@ func TestGRPCServer_UpdateNamespace(t *testing.T) { Credentials: credentials, Labels: labels, } - request := &sirenv1.UpdateNamespaceRequest{ + request := &sirenv1beta1.UpdateNamespaceRequest{ Id: 1, Provider: 2, Name: "foo", @@ -363,7 +363,7 @@ func TestGRPCServer_UpdateNamespace(t *testing.T) { func TestGRPCServer_DeleteNamespace(t *testing.T) { namespaceId := uint64(10) - dummyReq := &sirenv1.DeleteNamespaceRequest{ + dummyReq := &sirenv1beta1.DeleteNamespaceRequest{ Id: uint64(10), } diff --git a/api/handlers/v1/grpc_provider.go b/api/handlers/v1/grpc_provider.go index d981be13..2d2b1760 100644 --- a/api/handlers/v1/grpc_provider.go +++ b/api/handlers/v1/grpc_provider.go @@ -2,7 +2,7 @@ package v1 import ( "context" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/helper" "go.uber.org/zap" @@ -13,7 +13,7 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" ) -func (s *GRPCServer) ListProviders(_ context.Context, req *sirenv1.ListProvidersRequest) (*sirenv1.ListProvidersResponse, error) { +func (s *GRPCServer) ListProviders(_ context.Context, req *sirenv1beta1.ListProvidersRequest) (*sirenv1beta1.ListProvidersResponse, error) { providers, err := s.container.ProviderService.ListProviders(map[string]interface{}{ "urn": req.GetUrn(), "type": req.GetType(), @@ -22,8 +22,8 @@ func (s *GRPCServer) ListProviders(_ context.Context, req *sirenv1.ListProviders return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.ListProvidersResponse{ - Providers: make([]*sirenv1.Provider, 0), + res := &sirenv1beta1.ListProvidersResponse{ + Providers: make([]*sirenv1beta1.Provider, 0), } for _, provider := range providers { credentials, err := structpb.NewStruct(provider.Credentials) @@ -32,7 +32,7 @@ func (s *GRPCServer) ListProviders(_ context.Context, req *sirenv1.ListProviders return nil, status.Errorf(codes.Internal, err.Error()) } - item := &sirenv1.Provider{ + item := &sirenv1beta1.Provider{ Id: provider.Id, Urn: provider.Urn, Host: provider.Host, @@ -48,7 +48,7 @@ func (s *GRPCServer) ListProviders(_ context.Context, req *sirenv1.ListProviders return res, nil } -func (s *GRPCServer) CreateProvider(_ context.Context, req *sirenv1.CreateProviderRequest) (*sirenv1.Provider, error) { +func (s *GRPCServer) CreateProvider(_ context.Context, req *sirenv1beta1.CreateProviderRequest) (*sirenv1beta1.Provider, error) { provider, err := s.container.ProviderService.CreateProvider(&domain.Provider{ Host: req.GetHost(), Urn: req.GetUrn(), @@ -66,7 +66,7 @@ func (s *GRPCServer) CreateProvider(_ context.Context, req *sirenv1.CreateProvid return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.Provider{ + return &sirenv1beta1.Provider{ Id: provider.Id, Host: provider.Host, Urn: provider.Urn, @@ -79,7 +79,7 @@ func (s *GRPCServer) CreateProvider(_ context.Context, req *sirenv1.CreateProvid }, nil } -func (s *GRPCServer) GetProvider(_ context.Context, req *sirenv1.GetProviderRequest) (*sirenv1.Provider, error) { +func (s *GRPCServer) GetProvider(_ context.Context, req *sirenv1beta1.GetProviderRequest) (*sirenv1beta1.Provider, error) { provider, err := s.container.ProviderService.GetProvider(req.GetId()) if provider == nil { return nil, status.Errorf(codes.NotFound, "provider not found") @@ -93,7 +93,7 @@ func (s *GRPCServer) GetProvider(_ context.Context, req *sirenv1.GetProviderRequ return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.Provider{ + return &sirenv1beta1.Provider{ Id: provider.Id, Host: provider.Host, Urn: provider.Urn, @@ -106,7 +106,7 @@ func (s *GRPCServer) GetProvider(_ context.Context, req *sirenv1.GetProviderRequ }, nil } -func (s *GRPCServer) UpdateProvider(_ context.Context, req *sirenv1.UpdateProviderRequest) (*sirenv1.Provider, error) { +func (s *GRPCServer) UpdateProvider(_ context.Context, req *sirenv1beta1.UpdateProviderRequest) (*sirenv1beta1.Provider, error) { provider, err := s.container.ProviderService.UpdateProvider(&domain.Provider{ Id: req.GetId(), Host: req.GetHost(), @@ -124,7 +124,7 @@ func (s *GRPCServer) UpdateProvider(_ context.Context, req *sirenv1.UpdateProvid return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.Provider{ + return &sirenv1beta1.Provider{ Id: provider.Id, Host: provider.Host, Urn: provider.Urn, @@ -137,7 +137,7 @@ func (s *GRPCServer) UpdateProvider(_ context.Context, req *sirenv1.UpdateProvid }, nil } -func (s *GRPCServer) DeleteProvider(_ context.Context, req *sirenv1.DeleteProviderRequest) (*emptypb.Empty, error) { +func (s *GRPCServer) DeleteProvider(_ context.Context, req *sirenv1beta1.DeleteProviderRequest) (*emptypb.Empty, error) { err := s.container.ProviderService.DeleteProvider(uint64(req.GetId())) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) diff --git a/api/handlers/v1/grpc_provider_test.go b/api/handlers/v1/grpc_provider_test.go index aee50dda..6d1961b8 100644 --- a/api/handlers/v1/grpc_provider_test.go +++ b/api/handlers/v1/grpc_provider_test.go @@ -3,7 +3,7 @@ package v1 import ( "context" "errors" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -49,7 +49,7 @@ func TestGRPCServer_ListProvider(t *testing.T) { "urn": "", }). Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{}) + res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{}) assert.Nil(t, err) assert.Equal(t, 1, len(res.GetProviders())) assert.Equal(t, "foo", res.GetProviders()[0].GetHost()) @@ -72,7 +72,7 @@ func TestGRPCServer_ListProvider(t *testing.T) { "urn": "", }). Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{}) + res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{}) assert.Nil(t, res) assert.EqualError(t, err, "rpc error: code = Internal desc = random error") }) @@ -106,7 +106,7 @@ func TestGRPCServer_ListProvider(t *testing.T) { "urn": "", }). Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{}) + res, err := dummyGRPCServer.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{}) assert.Nil(t, res) assert.Equal(t, strings.Replace(err.Error(), "\u00a0", " ", -1), "rpc error: code = Internal desc = proto: invalid UTF-8 in string: \"\\xff\"") @@ -128,7 +128,7 @@ func TestGRPCServer_CreateProvider(t *testing.T) { Credentials: credentials, Labels: labels, } - dummyReq := &sirenv1.CreateProviderRequest{ + dummyReq := &sirenv1beta1.CreateProviderRequest{ Host: "foo", Type: "bar", Name: "foo", @@ -205,7 +205,7 @@ func TestGRPCServer_GetProvider(t *testing.T) { labels["foo"] = "bar" providerId := uint64(1) - dummyReq := &sirenv1.GetProviderRequest{ + dummyReq := &sirenv1beta1.GetProviderRequest{ Id: 1, } @@ -332,7 +332,7 @@ func TestGRPCServer_UpdateProvider(t *testing.T) { Credentials: credentials, Labels: labels, } - dummyReq := &sirenv1.UpdateProviderRequest{ + dummyReq := &sirenv1beta1.UpdateProviderRequest{ Host: "foo", Type: "bar", Name: "foo", @@ -407,7 +407,7 @@ func TestGRPCServer_UpdateProvider(t *testing.T) { func TestGRPCServer_DeleteProvider(t *testing.T) { providerId := uint64(10) - dummyReq := &sirenv1.DeleteProviderRequest{ + dummyReq := &sirenv1beta1.DeleteProviderRequest{ Id: uint64(10), } diff --git a/api/handlers/v1/grpc_receiver.go b/api/handlers/v1/grpc_receiver.go index 3aed4f65..aee6a1bc 100644 --- a/api/handlers/v1/grpc_receiver.go +++ b/api/handlers/v1/grpc_receiver.go @@ -3,7 +3,7 @@ package v1 import ( "context" "encoding/json" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/helper" "github.com/slack-go/slack" @@ -21,14 +21,14 @@ const ( Http string = "http" ) -func (s *GRPCServer) ListReceivers(_ context.Context, _ *emptypb.Empty) (*sirenv1.ListReceiversResponse, error) { +func (s *GRPCServer) ListReceivers(_ context.Context, _ *emptypb.Empty) (*sirenv1beta1.ListReceiversResponse, error) { receivers, err := s.container.ReceiverService.ListReceivers() if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.ListReceiversResponse{ - Receivers: make([]*sirenv1.Receiver, 0), + res := &sirenv1beta1.ListReceiversResponse{ + Receivers: make([]*sirenv1beta1.Receiver, 0), } for _, receiver := range receivers { configurations, err := structpb.NewStruct(receiver.Configurations) @@ -36,7 +36,7 @@ func (s *GRPCServer) ListReceivers(_ context.Context, _ *emptypb.Empty) (*sirenv return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - item := &sirenv1.Receiver{ + item := &sirenv1beta1.Receiver{ Id: receiver.Id, Name: receiver.Name, Type: receiver.Type, @@ -50,7 +50,7 @@ func (s *GRPCServer) ListReceivers(_ context.Context, _ *emptypb.Empty) (*sirenv return res, nil } -func (s *GRPCServer) CreateReceiver(_ context.Context, req *sirenv1.CreateReceiverRequest) (*sirenv1.Receiver, error) { +func (s *GRPCServer) CreateReceiver(_ context.Context, req *sirenv1beta1.CreateReceiverRequest) (*sirenv1beta1.Receiver, error) { configurations := req.GetConfigurations().AsMap() switch receiverType := req.GetType(); receiverType { @@ -88,7 +88,7 @@ func (s *GRPCServer) CreateReceiver(_ context.Context, req *sirenv1.CreateReceiv return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.Receiver{ + return &sirenv1beta1.Receiver{ Id: receiver.Id, Name: receiver.Name, Type: receiver.Type, @@ -99,7 +99,7 @@ func (s *GRPCServer) CreateReceiver(_ context.Context, req *sirenv1.CreateReceiv }, nil } -func (s *GRPCServer) GetReceiver(_ context.Context, req *sirenv1.GetReceiverRequest) (*sirenv1.Receiver, error) { +func (s *GRPCServer) GetReceiver(_ context.Context, req *sirenv1beta1.GetReceiverRequest) (*sirenv1beta1.Receiver, error) { receiver, err := s.container.ReceiverService.GetReceiver(req.GetId()) if receiver == nil { return nil, status.Errorf(codes.NotFound, "receiver not found") @@ -118,7 +118,7 @@ func (s *GRPCServer) GetReceiver(_ context.Context, req *sirenv1.GetReceiverRequ return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.Receiver{ + return &sirenv1beta1.Receiver{ Id: receiver.Id, Name: receiver.Name, Type: receiver.Type, @@ -130,7 +130,7 @@ func (s *GRPCServer) GetReceiver(_ context.Context, req *sirenv1.GetReceiverRequ }, nil } -func (s *GRPCServer) UpdateReceiver(_ context.Context, req *sirenv1.UpdateReceiverRequest) (*sirenv1.Receiver, error) { +func (s *GRPCServer) UpdateReceiver(_ context.Context, req *sirenv1beta1.UpdateReceiverRequest) (*sirenv1beta1.Receiver, error) { configurations := req.GetConfigurations().AsMap() switch receiverType := req.GetType(); receiverType { @@ -169,7 +169,7 @@ func (s *GRPCServer) UpdateReceiver(_ context.Context, req *sirenv1.UpdateReceiv return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.Receiver{ + return &sirenv1beta1.Receiver{ Id: receiver.Id, Name: receiver.Name, Type: receiver.Type, @@ -180,7 +180,7 @@ func (s *GRPCServer) UpdateReceiver(_ context.Context, req *sirenv1.UpdateReceiv }, nil } -func (s *GRPCServer) DeleteReceiver(_ context.Context, req *sirenv1.DeleteReceiverRequest) (*emptypb.Empty, error) { +func (s *GRPCServer) DeleteReceiver(_ context.Context, req *sirenv1beta1.DeleteReceiverRequest) (*emptypb.Empty, error) { err := s.container.ReceiverService.DeleteReceiver(uint64(req.GetId())) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) @@ -189,8 +189,8 @@ func (s *GRPCServer) DeleteReceiver(_ context.Context, req *sirenv1.DeleteReceiv return &emptypb.Empty{}, nil } -func (s *GRPCServer) SendReceiverNotification(_ context.Context, req *sirenv1.SendReceiverNotificationRequest) (*sirenv1.SendReceiverNotificationResponse, error) { - var res *sirenv1.SendReceiverNotificationResponse +func (s *GRPCServer) SendReceiverNotification(_ context.Context, req *sirenv1beta1.SendReceiverNotificationRequest) (*sirenv1beta1.SendReceiverNotificationResponse, error) { + var res *sirenv1beta1.SendReceiverNotificationResponse receiver, err := s.container.ReceiverService.GetReceiver(req.GetId()) if err != nil { return nil, status.Errorf(codes.InvalidArgument, err.Error()) @@ -224,7 +224,7 @@ func (s *GRPCServer) SendReceiverNotification(_ context.Context, req *sirenv1.Se if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res = &sirenv1.SendReceiverNotificationResponse{ + res = &sirenv1beta1.SendReceiverNotificationResponse{ Ok: result.OK, } default: diff --git a/api/handlers/v1/grpc_receiver_test.go b/api/handlers/v1/grpc_receiver_test.go index 2caad17b..5be737c8 100644 --- a/api/handlers/v1/grpc_receiver_test.go +++ b/api/handlers/v1/grpc_receiver_test.go @@ -3,7 +3,7 @@ package v1 import ( "context" "errors" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -114,7 +114,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { labels["foo"] = "bar" configurationsData, _ := structpb.NewStruct(configurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -165,7 +165,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { } configurationsData, _ := structpb.NewStruct(configurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "pagerduty", Labels: labels, @@ -202,7 +202,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { } configurationsData, _ := structpb.NewStruct(configurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "http", Labels: labels, @@ -234,7 +234,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { slackConfigurations["auth_code"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -260,7 +260,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { slackConfigurations["auth_code"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -286,7 +286,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { slackConfigurations["client_secret"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -309,7 +309,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { } slackConfigurations := make(map[string]interface{}) configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "pagerduty", Labels: labels, @@ -332,7 +332,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { } slackConfigurations := make(map[string]interface{}) configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "http", Labels: labels, @@ -372,7 +372,7 @@ func TestGRPCServer_CreateReceiver(t *testing.T) { } configurationsData, _ := structpb.NewStruct(configurations) - dummyReq := &sirenv1.CreateReceiverRequest{ + dummyReq := &sirenv1beta1.CreateReceiverRequest{ Name: "foo", Type: "bar", Labels: labels, @@ -418,7 +418,7 @@ func TestGRPCServer_GetReceiver(t *testing.T) { labels["foo"] = "bar" receiverId := uint64(1) - dummyReq := &sirenv1.GetReceiverRequest{ + dummyReq := &sirenv1beta1.GetReceiverRequest{ Id: 1, } payload := &domain.Receiver{ @@ -546,7 +546,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { labels["foo"] = "bar" configurationsData, _ := structpb.NewStruct(configurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -592,7 +592,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { slackConfigurations["auth_code"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -618,7 +618,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { slackConfigurations["auth_code"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -644,7 +644,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { slackConfigurations["client_secret"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "slack", Labels: labels, @@ -670,7 +670,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { slackConfigurations["client_secret"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "pagerduty", Labels: labels, @@ -696,7 +696,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { slackConfigurations["client_secret"] = "foo" configurationsData, _ := structpb.NewStruct(slackConfigurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "http", Labels: labels, @@ -719,7 +719,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { } configurationsData, _ := structpb.NewStruct(configurations) - dummyReq := &sirenv1.UpdateReceiverRequest{ + dummyReq := &sirenv1beta1.UpdateReceiverRequest{ Name: "foo", Type: "bar", Labels: labels, @@ -776,7 +776,7 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) { func TestGRPCServer_DeleteReceiver(t *testing.T) { providerId := uint64(10) - dummyReq := &sirenv1.DeleteReceiverRequest{ + dummyReq := &sirenv1beta1.DeleteReceiverRequest{ Id: uint64(10), } @@ -864,10 +864,10 @@ func TestGRPCServer_SendReceiverNotification(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.SendReceiverNotificationRequest{ + dummyReq := &sirenv1beta1.SendReceiverNotificationRequest{ Id: 1, - Data: &sirenv1.SendReceiverNotificationRequest_Slack{ - Slack: &sirenv1.SendReceiverNotificationRequest_SlackPayload{ + Data: &sirenv1beta1.SendReceiverNotificationRequest_Slack{ + Slack: &sirenv1beta1.SendReceiverNotificationRequest_SlackPayload{ ReceiverName: "foo", ReceiverType: "channel", Message: "bar", @@ -937,10 +937,10 @@ func TestGRPCServer_SendReceiverNotification(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.SendReceiverNotificationRequest{ + dummyReq := &sirenv1beta1.SendReceiverNotificationRequest{ Id: 1, - Data: &sirenv1.SendReceiverNotificationRequest_Slack{ - Slack: &sirenv1.SendReceiverNotificationRequest_SlackPayload{ + Data: &sirenv1beta1.SendReceiverNotificationRequest_Slack{ + Slack: &sirenv1beta1.SendReceiverNotificationRequest_SlackPayload{ ReceiverName: "foo", ReceiverType: "channel", Message: "bar", @@ -971,10 +971,10 @@ func TestGRPCServer_SendReceiverNotification(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.SendReceiverNotificationRequest{ + dummyReq := &sirenv1beta1.SendReceiverNotificationRequest{ Id: 1, - Data: &sirenv1.SendReceiverNotificationRequest_Slack{ - Slack: &sirenv1.SendReceiverNotificationRequest_SlackPayload{ + Data: &sirenv1beta1.SendReceiverNotificationRequest_Slack{ + Slack: &sirenv1beta1.SendReceiverNotificationRequest_SlackPayload{ ReceiverName: "foo", ReceiverType: "channel", Message: "bar", @@ -1040,7 +1040,7 @@ func TestGRPCServer_SendReceiverNotification(t *testing.T) { Configurations: configurations, } - dummyReq := &sirenv1.SendReceiverNotificationRequest{ + dummyReq := &sirenv1beta1.SendReceiverNotificationRequest{ Id: 1, Data: nil, } diff --git a/api/handlers/v1/grpc_rule.go b/api/handlers/v1/grpc_rule.go index 6c32e62d..31de8947 100644 --- a/api/handlers/v1/grpc_rule.go +++ b/api/handlers/v1/grpc_rule.go @@ -2,14 +2,14 @@ package v1 import ( "context" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/helper" "google.golang.org/grpc/codes" "google.golang.org/protobuf/types/known/timestamppb" ) -func (s *GRPCServer) ListRules(_ context.Context, req *sirenv1.ListRulesRequest) (*sirenv1.ListRulesResponse, error) { +func (s *GRPCServer) ListRules(_ context.Context, req *sirenv1beta1.ListRulesRequest) (*sirenv1beta1.ListRulesResponse, error) { name := req.GetName() namespace := req.GetNamespace() groupName := req.GetGroupName() @@ -21,18 +21,18 @@ func (s *GRPCServer) ListRules(_ context.Context, req *sirenv1.ListRulesRequest) return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.ListRulesResponse{Rules: make([]*sirenv1.Rule, 0)} + res := &sirenv1beta1.ListRulesResponse{Rules: make([]*sirenv1beta1.Rule, 0)} for _, rule := range rules { - variables := make([]*sirenv1.Variables, 0) + variables := make([]*sirenv1beta1.Variables, 0) for _, variable := range rule.Variables { - variables = append(variables, &sirenv1.Variables{ + variables = append(variables, &sirenv1beta1.Variables{ Name: variable.Name, Value: variable.Value, Type: variable.Type, Description: variable.Description, }) } - res.Rules = append(res.Rules, &sirenv1.Rule{ + res.Rules = append(res.Rules, &sirenv1beta1.Rule{ Id: rule.Id, Name: rule.Name, Enabled: rule.Enabled, @@ -49,7 +49,7 @@ func (s *GRPCServer) ListRules(_ context.Context, req *sirenv1.ListRulesRequest) return res, nil } -func (s *GRPCServer) UpdateRule(_ context.Context, req *sirenv1.UpdateRuleRequest) (*sirenv1.UpdateRuleResponse, error) { +func (s *GRPCServer) UpdateRule(_ context.Context, req *sirenv1beta1.UpdateRuleRequest) (*sirenv1beta1.UpdateRuleResponse, error) { variables := make([]domain.RuleVariable, 0) for _, variable := range req.Variables { variables = append(variables, domain.RuleVariable{ @@ -74,17 +74,17 @@ func (s *GRPCServer) UpdateRule(_ context.Context, req *sirenv1.UpdateRuleReques return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - responseVariables := make([]*sirenv1.Variables, 0) + responseVariables := make([]*sirenv1beta1.Variables, 0) for _, variable := range rule.Variables { - responseVariables = append(responseVariables, &sirenv1.Variables{ + responseVariables = append(responseVariables, &sirenv1beta1.Variables{ Name: variable.Name, Type: variable.Type, Value: variable.Value, Description: variable.Description, }) } - res := &sirenv1.UpdateRuleResponse{ - Rule: &sirenv1.Rule{ + res := &sirenv1beta1.UpdateRuleResponse{ + Rule: &sirenv1beta1.Rule{ Id: rule.Id, Name: rule.Name, Enabled: rule.Enabled, diff --git a/api/handlers/v1/grpc_rule_test.go b/api/handlers/v1/grpc_rule_test.go index 2d9a5d11..efa99ec4 100644 --- a/api/handlers/v1/grpc_rule_test.go +++ b/api/handlers/v1/grpc_rule_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -15,7 +15,7 @@ import ( ) func TestGRPCServer_ListRules(t *testing.T) { - dummyPayload := &sirenv1.ListRulesRequest{ + dummyPayload := &sirenv1beta1.ListRulesRequest{ Name: "foo", Namespace: "test", GroupName: "foo", @@ -101,12 +101,12 @@ func TestGRPCServer_UpdateRules(t *testing.T) { }, ProviderNamespace: 1, } - dummyReq := &sirenv1.UpdateRuleRequest{ + dummyReq := &sirenv1beta1.UpdateRuleRequest{ Enabled: true, GroupName: "foo", Namespace: "test", Template: "foo", - Variables: []*sirenv1.Variables{ + Variables: []*sirenv1beta1.Variables{ { Name: "foo", Type: "int", @@ -134,7 +134,7 @@ func TestGRPCServer_UpdateRules(t *testing.T) { Return(&dummyResult, nil).Once() res, err := dummyGRPCServer.UpdateRule(context.Background(), dummyReq) assert.Nil(t, err) - + assert.Equal(t, "foo", res.GetRule().GetName()) assert.Equal(t, false, res.GetRule().GetEnabled()) assert.Equal(t, "test", res.GetRule().GetNamespace()) diff --git a/api/handlers/v1/grpc_template.go b/api/handlers/v1/grpc_template.go index 8242ac43..1888ef0f 100644 --- a/api/handlers/v1/grpc_template.go +++ b/api/handlers/v1/grpc_template.go @@ -2,31 +2,31 @@ package v1 import ( "context" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/helper" "google.golang.org/grpc/codes" "google.golang.org/protobuf/types/known/timestamppb" ) -func (s *GRPCServer) ListTemplates(_ context.Context, req *sirenv1.ListTemplatesRequest) (*sirenv1.ListTemplatesResponse, error) { +func (s *GRPCServer) ListTemplates(_ context.Context, req *sirenv1beta1.ListTemplatesRequest) (*sirenv1beta1.ListTemplatesResponse, error) { templates, err := s.container.TemplatesService.Index(req.GetTag()) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - res := &sirenv1.ListTemplatesResponse{Templates: make([]*sirenv1.Template, 0)} + res := &sirenv1beta1.ListTemplatesResponse{Templates: make([]*sirenv1beta1.Template, 0)} for _, template := range templates { - variables := make([]*sirenv1.TemplateVariables, 0) + variables := make([]*sirenv1beta1.TemplateVariables, 0) for _, variable := range template.Variables { - variables = append(variables, &sirenv1.TemplateVariables{ + variables = append(variables, &sirenv1beta1.TemplateVariables{ Name: variable.Name, Type: variable.Type, Default: variable.Default, Description: variable.Description, }) } - res.Templates = append(res.Templates, &sirenv1.Template{ + res.Templates = append(res.Templates, &sirenv1beta1.Template{ Id: uint64(template.ID), Name: template.Name, Body: template.Body, @@ -40,23 +40,23 @@ func (s *GRPCServer) ListTemplates(_ context.Context, req *sirenv1.ListTemplates return res, nil } -func (s *GRPCServer) GetTemplateByName(_ context.Context, req *sirenv1.GetTemplateByNameRequest) (*sirenv1.TemplateResponse, error) { +func (s *GRPCServer) GetTemplateByName(_ context.Context, req *sirenv1beta1.GetTemplateByNameRequest) (*sirenv1beta1.TemplateResponse, error) { template, err := s.container.TemplatesService.GetByName(req.GetName()) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - variables := make([]*sirenv1.TemplateVariables, 0) + variables := make([]*sirenv1beta1.TemplateVariables, 0) for _, variable := range template.Variables { - variables = append(variables, &sirenv1.TemplateVariables{ + variables = append(variables, &sirenv1beta1.TemplateVariables{ Name: variable.Name, Type: variable.Type, Default: variable.Default, Description: variable.Description, }) } - res := &sirenv1.TemplateResponse{ - Template: &sirenv1.Template{ + res := &sirenv1beta1.TemplateResponse{ + Template: &sirenv1beta1.Template{ Id: uint64(template.ID), Name: template.Name, Body: template.Body, @@ -69,7 +69,7 @@ func (s *GRPCServer) GetTemplateByName(_ context.Context, req *sirenv1.GetTempla return res, nil } -func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1.UpsertTemplateRequest) (*sirenv1.TemplateResponse, error) { +func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1beta1.UpsertTemplateRequest) (*sirenv1beta1.TemplateResponse, error) { variables := make([]domain.Variable, 0) for _, variable := range req.GetVariables() { variables = append(variables, domain.Variable{ @@ -91,17 +91,17 @@ func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1.UpsertTempla return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - templateVariables := make([]*sirenv1.TemplateVariables, 0) + templateVariables := make([]*sirenv1beta1.TemplateVariables, 0) for _, variable := range template.Variables { - templateVariables = append(templateVariables, &sirenv1.TemplateVariables{ + templateVariables = append(templateVariables, &sirenv1beta1.TemplateVariables{ Name: variable.Name, Type: variable.Type, Default: variable.Default, Description: variable.Description, }) } - res := &sirenv1.TemplateResponse{ - Template: &sirenv1.Template{ + res := &sirenv1beta1.TemplateResponse{ + Template: &sirenv1beta1.Template{ Id: uint64(template.ID), Name: template.Name, Body: template.Body, @@ -114,20 +114,20 @@ func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1.UpsertTempla return res, nil } -func (s *GRPCServer) DeleteTemplate(_ context.Context, req *sirenv1.DeleteTemplateRequest) (*sirenv1.DeleteTemplateResponse, error) { +func (s *GRPCServer) DeleteTemplate(_ context.Context, req *sirenv1beta1.DeleteTemplateRequest) (*sirenv1beta1.DeleteTemplateResponse, error) { err := s.container.TemplatesService.Delete(req.GetName()) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.DeleteTemplateResponse{}, nil + return &sirenv1beta1.DeleteTemplateResponse{}, nil } -func (s *GRPCServer) RenderTemplate(_ context.Context, req *sirenv1.RenderTemplateRequest) (*sirenv1.RenderTemplateResponse, error) { +func (s *GRPCServer) RenderTemplate(_ context.Context, req *sirenv1beta1.RenderTemplateRequest) (*sirenv1beta1.RenderTemplateResponse, error) { body, err := s.container.TemplatesService.Render(req.GetName(), req.GetVariables()) if err != nil { return nil, helper.GRPCLogError(s.logger, codes.Internal, err) } - return &sirenv1.RenderTemplateResponse{ + return &sirenv1beta1.RenderTemplateResponse{ Body: body, }, nil } diff --git a/api/handlers/v1/grpc_template_test.go b/api/handlers/v1/grpc_template_test.go index f983ba0e..3dbb363c 100644 --- a/api/handlers/v1/grpc_template_test.go +++ b/api/handlers/v1/grpc_template_test.go @@ -3,7 +3,7 @@ package v1 import ( "context" "errors" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -21,7 +21,7 @@ func TestGRPCServer_ListTemplates(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.ListTemplatesRequest{} + dummyReq := &sirenv1beta1.ListTemplatesRequest{} dummyResult := []domain.Template{ { ID: 1, @@ -59,7 +59,7 @@ func TestGRPCServer_ListTemplates(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.ListTemplatesRequest{ + dummyReq := &sirenv1beta1.ListTemplatesRequest{ Tag: "foo", } @@ -100,7 +100,7 @@ func TestGRPCServer_ListTemplates(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.ListTemplatesRequest{ + dummyReq := &sirenv1beta1.ListTemplatesRequest{ Tag: "foo", } mockedTemplatesService. @@ -121,7 +121,7 @@ func TestGRPCServer_GetTemplateByName(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.GetTemplateByNameRequest{ + dummyReq := &sirenv1beta1.GetTemplateByNameRequest{ Name: "foo", } dummyResult := &domain.Template{ @@ -159,7 +159,7 @@ func TestGRPCServer_GetTemplateByName(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.GetTemplateByNameRequest{ + dummyReq := &sirenv1beta1.GetTemplateByNameRequest{ Name: "foo", } mockedTemplatesService. @@ -172,12 +172,12 @@ func TestGRPCServer_GetTemplateByName(t *testing.T) { } func TestGRPCServer_UpsertTemplate(t *testing.T) { - dummyReq := &sirenv1.UpsertTemplateRequest{ + dummyReq := &sirenv1beta1.UpsertTemplateRequest{ Id: 1, Name: "foo", Body: "bar", Tags: []string{"foo", "bar"}, - Variables: []*sirenv1.TemplateVariables{ + Variables: []*sirenv1beta1.TemplateVariables{ { Name: "foo", Type: "bar", @@ -248,7 +248,7 @@ func TestGRPCServer_DeleteTemplate(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.DeleteTemplateRequest{ + dummyReq := &sirenv1beta1.DeleteTemplateRequest{ Name: "foo", } @@ -257,7 +257,7 @@ func TestGRPCServer_DeleteTemplate(t *testing.T) { Return(nil).Once() res, err := dummyGRPCServer.DeleteTemplate(context.Background(), dummyReq) assert.Nil(t, err) - assert.Equal(t, &sirenv1.DeleteTemplateResponse{}, res) + assert.Equal(t, &sirenv1beta1.DeleteTemplateResponse{}, res) mockedTemplatesService.AssertCalled(t, "Delete", "foo") }) @@ -269,7 +269,7 @@ func TestGRPCServer_DeleteTemplate(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.DeleteTemplateRequest{ + dummyReq := &sirenv1beta1.DeleteTemplateRequest{ Name: "foo", } mockedTemplatesService. @@ -282,7 +282,7 @@ func TestGRPCServer_DeleteTemplate(t *testing.T) { } func TestGRPCServer_RenderTemplate(t *testing.T) { - dummyReq := &sirenv1.RenderTemplateRequest{ + dummyReq := &sirenv1beta1.RenderTemplateRequest{ Name: "foo", Variables: map[string]string{ "foo": "bar", diff --git a/api/handlers/v1/grpc_test.go b/api/handlers/v1/grpc_test.go index 27813414..fb255531 100644 --- a/api/handlers/v1/grpc_test.go +++ b/api/handlers/v1/grpc_test.go @@ -3,7 +3,7 @@ package v1 import ( "context" "errors" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/odpf/siren/service" @@ -12,7 +12,6 @@ import ( "testing" ) - func TestGRPCServer_ListWorkspaceChannels(t *testing.T) { t.Run("should return workspace data object", func(t *testing.T) { mockedWorkspaceService := &mocks.WorkspaceService{} @@ -24,7 +23,7 @@ func TestGRPCServer_ListWorkspaceChannels(t *testing.T) { SlackWorkspaceService: mockedWorkspaceService, }} - dummyReq := &sirenv1.ListWorkspaceChannelsRequest{ + dummyReq := &sirenv1beta1.ListWorkspaceChannelsRequest{ WorkspaceName: "random", } mockedWorkspaceService.On("GetChannels", "random").Return(dummyResult, nil).Once() @@ -46,7 +45,7 @@ func TestGRPCServer_ListWorkspaceChannels(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.ListWorkspaceChannelsRequest{ + dummyReq := &sirenv1beta1.ListWorkspaceChannelsRequest{ WorkspaceName: "random", } mockedWorkspaceService.On("GetChannels", "random"). @@ -71,7 +70,7 @@ func TestGRPCServer_ExchangeCode(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.ExchangeCodeRequest{ + dummyReq := &sirenv1beta1.ExchangeCodeRequest{ Code: "foo", Workspace: "bar", } @@ -92,7 +91,7 @@ func TestGRPCServer_ExchangeCode(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.ExchangeCodeRequest{ + dummyReq := &sirenv1beta1.ExchangeCodeRequest{ Code: "foo", Workspace: "bar", } @@ -129,7 +128,7 @@ func TestGRPCServer_GetAlertCredentials(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.GetAlertCredentialsRequest{ + dummyReq := &sirenv1beta1.GetAlertCredentialsRequest{ TeamName: "foo", } mockedAlertmanagerService.On("Get", "foo").Return(dummyResult, nil).Once() @@ -152,7 +151,7 @@ func TestGRPCServer_GetAlertCredentials(t *testing.T) { logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.GetAlertCredentialsRequest{ + dummyReq := &sirenv1beta1.GetAlertCredentialsRequest{ TeamName: "foo", } mockedAlertmanagerService.On("Get", "foo"). @@ -186,22 +185,22 @@ func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { }, }, } - dummyReq := &sirenv1.UpdateAlertCredentialsRequest{ + dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ Entity: "foo", TeamName: "bar", PagerdutyCredentials: "pager", - SlackConfig: &sirenv1.SlackConfig{ - Critical: &sirenv1.Critical{ + SlackConfig: &sirenv1beta1.SlackConfig{ + Critical: &sirenv1beta1.Critical{ Channel: "foo", }, - Warning: &sirenv1.Warning{ + Warning: &sirenv1beta1.Warning{ Channel: "bar", }, }, } mockedAlertmanagerService.On("Upsert", dummyPayload).Return(nil).Once() result, err := dummyGRPCServer.UpdateAlertCredentials(context.Background(), dummyReq) - assert.Equal(t, result, &sirenv1.UpdateAlertCredentialsResponse{}) + assert.Equal(t, result, &sirenv1beta1.UpdateAlertCredentialsResponse{}) assert.Nil(t, err) mockedAlertmanagerService.AssertCalled(t, "Upsert", dummyPayload) }) @@ -227,15 +226,15 @@ func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { }, }, } - dummyReq := &sirenv1.UpdateAlertCredentialsRequest{ + dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ Entity: "foo", TeamName: "bar", PagerdutyCredentials: "pager", - SlackConfig: &sirenv1.SlackConfig{ - Critical: &sirenv1.Critical{ + SlackConfig: &sirenv1beta1.SlackConfig{ + Critical: &sirenv1beta1.Critical{ Channel: "foo", }, - Warning: &sirenv1.Warning{ + Warning: &sirenv1beta1.Warning{ Channel: "bar", }, }, @@ -255,14 +254,14 @@ func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.UpdateAlertCredentialsRequest{ + dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ TeamName: "bar", PagerdutyCredentials: "pager", - SlackConfig: &sirenv1.SlackConfig{ - Critical: &sirenv1.Critical{ + SlackConfig: &sirenv1beta1.SlackConfig{ + Critical: &sirenv1beta1.Critical{ Channel: "foo", }, - Warning: &sirenv1.Warning{ + Warning: &sirenv1beta1.Warning{ Channel: "bar", }, }, @@ -280,14 +279,14 @@ func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { }, logger: zaptest.NewLogger(t), } - dummyReq := &sirenv1.UpdateAlertCredentialsRequest{ + dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ Entity: "foo", TeamName: "bar", - SlackConfig: &sirenv1.SlackConfig{ - Critical: &sirenv1.Critical{ + SlackConfig: &sirenv1beta1.SlackConfig{ + Critical: &sirenv1beta1.Critical{ Channel: "foo", }, - Warning: &sirenv1.Warning{ + Warning: &sirenv1beta1.Warning{ Channel: "bar", }, }, @@ -297,8 +296,3 @@ func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { assert.Nil(t, res) }) } - - - - - diff --git a/api/proto/odpf/siren/v1/siren.pb.go b/api/proto/odpf/siren/v1beta1/siren.pb.go similarity index 53% rename from api/proto/odpf/siren/v1/siren.pb.go rename to api/proto/odpf/siren/v1beta1/siren.pb.go index c386817a..485f260d 100644 --- a/api/proto/odpf/siren/v1/siren.pb.go +++ b/api/proto/odpf/siren/v1beta1/siren.pb.go @@ -2,9 +2,9 @@ // versions: // protoc-gen-go v1.27.1 // protoc v3.18.0 -// source: odpf/siren/v1/siren.proto +// source: odpf/siren/v1beta1/siren.proto -package sirenv1 +package sirenv1beta1 import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" @@ -54,11 +54,11 @@ func (x Types) String() string { } func (Types) Descriptor() protoreflect.EnumDescriptor { - return file_odpf_siren_v1_siren_proto_enumTypes[0].Descriptor() + return file_odpf_siren_v1beta1_siren_proto_enumTypes[0].Descriptor() } func (Types) Type() protoreflect.EnumType { - return &file_odpf_siren_v1_siren_proto_enumTypes[0] + return &file_odpf_siren_v1beta1_siren_proto_enumTypes[0] } func (x Types) Number() protoreflect.EnumNumber { @@ -67,7 +67,7 @@ func (x Types) Number() protoreflect.EnumNumber { // Deprecated: Use Types.Descriptor instead. func (Types) EnumDescriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{0} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{0} } type PingRequest struct { @@ -79,7 +79,7 @@ type PingRequest struct { func (x *PingRequest) Reset() { *x = PingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[0] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -92,7 +92,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[0] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -105,7 +105,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{0} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{0} } type PingResponse struct { @@ -119,7 +119,7 @@ type PingResponse struct { func (x *PingResponse) Reset() { *x = PingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[1] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -132,7 +132,7 @@ func (x *PingResponse) String() string { func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[1] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -145,7 +145,7 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. func (*PingResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{1} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{1} } func (x *PingResponse) GetMessage() string { @@ -174,7 +174,7 @@ type Provider struct { func (x *Provider) Reset() { *x = Provider{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[2] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -187,7 +187,7 @@ func (x *Provider) String() string { func (*Provider) ProtoMessage() {} func (x *Provider) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[2] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -200,7 +200,7 @@ func (x *Provider) ProtoReflect() protoreflect.Message { // Deprecated: Use Provider.ProtoReflect.Descriptor instead. func (*Provider) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{2} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{2} } func (x *Provider) GetId() uint64 { @@ -278,7 +278,7 @@ type ListProvidersRequest struct { func (x *ListProvidersRequest) Reset() { *x = ListProvidersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[3] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -291,7 +291,7 @@ func (x *ListProvidersRequest) String() string { func (*ListProvidersRequest) ProtoMessage() {} func (x *ListProvidersRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[3] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -304,7 +304,7 @@ func (x *ListProvidersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProvidersRequest.ProtoReflect.Descriptor instead. func (*ListProvidersRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{3} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{3} } func (x *ListProvidersRequest) GetUrn() string { @@ -332,7 +332,7 @@ type ListProvidersResponse struct { func (x *ListProvidersResponse) Reset() { *x = ListProvidersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[4] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -345,7 +345,7 @@ func (x *ListProvidersResponse) String() string { func (*ListProvidersResponse) ProtoMessage() {} func (x *ListProvidersResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[4] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -358,7 +358,7 @@ func (x *ListProvidersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProvidersResponse.ProtoReflect.Descriptor instead. func (*ListProvidersResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{4} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{4} } func (x *ListProvidersResponse) GetProviders() []*Provider { @@ -384,7 +384,7 @@ type CreateProviderRequest struct { func (x *CreateProviderRequest) Reset() { *x = CreateProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[5] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -397,7 +397,7 @@ func (x *CreateProviderRequest) String() string { func (*CreateProviderRequest) ProtoMessage() {} func (x *CreateProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[5] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -410,7 +410,7 @@ func (x *CreateProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateProviderRequest.ProtoReflect.Descriptor instead. func (*CreateProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{5} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{5} } func (x *CreateProviderRequest) GetHost() string { @@ -466,7 +466,7 @@ type GetProviderRequest struct { func (x *GetProviderRequest) Reset() { *x = GetProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[6] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -479,7 +479,7 @@ func (x *GetProviderRequest) String() string { func (*GetProviderRequest) ProtoMessage() {} func (x *GetProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[6] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -492,7 +492,7 @@ func (x *GetProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProviderRequest.ProtoReflect.Descriptor instead. func (*GetProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{6} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{6} } func (x *GetProviderRequest) GetId() uint64 { @@ -518,7 +518,7 @@ type UpdateProviderRequest struct { func (x *UpdateProviderRequest) Reset() { *x = UpdateProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[7] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -531,7 +531,7 @@ func (x *UpdateProviderRequest) String() string { func (*UpdateProviderRequest) ProtoMessage() {} func (x *UpdateProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[7] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -544,7 +544,7 @@ func (x *UpdateProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateProviderRequest.ProtoReflect.Descriptor instead. func (*UpdateProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{7} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{7} } func (x *UpdateProviderRequest) GetId() uint64 { @@ -600,7 +600,7 @@ type DeleteProviderRequest struct { func (x *DeleteProviderRequest) Reset() { *x = DeleteProviderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[8] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -613,7 +613,7 @@ func (x *DeleteProviderRequest) String() string { func (*DeleteProviderRequest) ProtoMessage() {} func (x *DeleteProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[8] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -626,7 +626,7 @@ func (x *DeleteProviderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteProviderRequest.ProtoReflect.Descriptor instead. func (*DeleteProviderRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{8} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{8} } func (x *DeleteProviderRequest) GetId() uint64 { @@ -654,7 +654,7 @@ type Namespace struct { func (x *Namespace) Reset() { *x = Namespace{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[9] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -667,7 +667,7 @@ func (x *Namespace) String() string { func (*Namespace) ProtoMessage() {} func (x *Namespace) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[9] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -680,7 +680,7 @@ func (x *Namespace) ProtoReflect() protoreflect.Message { // Deprecated: Use Namespace.ProtoReflect.Descriptor instead. func (*Namespace) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{9} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{9} } func (x *Namespace) GetId() uint64 { @@ -750,7 +750,7 @@ type ListNamespacesResponse struct { func (x *ListNamespacesResponse) Reset() { *x = ListNamespacesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[10] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -763,7 +763,7 @@ func (x *ListNamespacesResponse) String() string { func (*ListNamespacesResponse) ProtoMessage() {} func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[10] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -776,7 +776,7 @@ func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNamespacesResponse.ProtoReflect.Descriptor instead. func (*ListNamespacesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{10} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{10} } func (x *ListNamespacesResponse) GetNamespaces() []*Namespace { @@ -803,7 +803,7 @@ type CreateNamespaceRequest struct { func (x *CreateNamespaceRequest) Reset() { *x = CreateNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[11] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -816,7 +816,7 @@ func (x *CreateNamespaceRequest) String() string { func (*CreateNamespaceRequest) ProtoMessage() {} func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[11] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -829,7 +829,7 @@ func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateNamespaceRequest.ProtoReflect.Descriptor instead. func (*CreateNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{11} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{11} } func (x *CreateNamespaceRequest) GetName() string { @@ -892,7 +892,7 @@ type GetNamespaceRequest struct { func (x *GetNamespaceRequest) Reset() { *x = GetNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[12] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -905,7 +905,7 @@ func (x *GetNamespaceRequest) String() string { func (*GetNamespaceRequest) ProtoMessage() {} func (x *GetNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[12] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -918,7 +918,7 @@ func (x *GetNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNamespaceRequest.ProtoReflect.Descriptor instead. func (*GetNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{12} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{12} } func (x *GetNamespaceRequest) GetId() uint64 { @@ -943,7 +943,7 @@ type UpdateNamespaceRequest struct { func (x *UpdateNamespaceRequest) Reset() { *x = UpdateNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[13] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -956,7 +956,7 @@ func (x *UpdateNamespaceRequest) String() string { func (*UpdateNamespaceRequest) ProtoMessage() {} func (x *UpdateNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[13] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -969,7 +969,7 @@ func (x *UpdateNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateNamespaceRequest.ProtoReflect.Descriptor instead. func (*UpdateNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{13} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{13} } func (x *UpdateNamespaceRequest) GetId() uint64 { @@ -1018,7 +1018,7 @@ type DeleteNamespaceRequest struct { func (x *DeleteNamespaceRequest) Reset() { *x = DeleteNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[14] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1031,7 +1031,7 @@ func (x *DeleteNamespaceRequest) String() string { func (*DeleteNamespaceRequest) ProtoMessage() {} func (x *DeleteNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[14] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1044,7 +1044,7 @@ func (x *DeleteNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNamespaceRequest.ProtoReflect.Descriptor instead. func (*DeleteNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{14} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{14} } func (x *DeleteNamespaceRequest) GetId() uint64 { @@ -1072,7 +1072,7 @@ type Receiver struct { func (x *Receiver) Reset() { *x = Receiver{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[15] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1085,7 +1085,7 @@ func (x *Receiver) String() string { func (*Receiver) ProtoMessage() {} func (x *Receiver) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[15] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1098,7 +1098,7 @@ func (x *Receiver) ProtoReflect() protoreflect.Message { // Deprecated: Use Receiver.ProtoReflect.Descriptor instead. func (*Receiver) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{15} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{15} } func (x *Receiver) GetId() uint64 { @@ -1168,7 +1168,7 @@ type ListReceiversResponse struct { func (x *ListReceiversResponse) Reset() { *x = ListReceiversResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[16] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1181,7 +1181,7 @@ func (x *ListReceiversResponse) String() string { func (*ListReceiversResponse) ProtoMessage() {} func (x *ListReceiversResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[16] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1194,7 +1194,7 @@ func (x *ListReceiversResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListReceiversResponse.ProtoReflect.Descriptor instead. func (*ListReceiversResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{16} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{16} } func (x *ListReceiversResponse) GetReceivers() []*Receiver { @@ -1218,7 +1218,7 @@ type CreateReceiverRequest struct { func (x *CreateReceiverRequest) Reset() { *x = CreateReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[17] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1231,7 +1231,7 @@ func (x *CreateReceiverRequest) String() string { func (*CreateReceiverRequest) ProtoMessage() {} func (x *CreateReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[17] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1244,7 +1244,7 @@ func (x *CreateReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateReceiverRequest.ProtoReflect.Descriptor instead. func (*CreateReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{17} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{17} } func (x *CreateReceiverRequest) GetName() string { @@ -1286,7 +1286,7 @@ type GetReceiverRequest struct { func (x *GetReceiverRequest) Reset() { *x = GetReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[18] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1299,7 @@ func (x *GetReceiverRequest) String() string { func (*GetReceiverRequest) ProtoMessage() {} func (x *GetReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[18] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,7 +1312,7 @@ func (x *GetReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReceiverRequest.ProtoReflect.Descriptor instead. func (*GetReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{18} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{18} } func (x *GetReceiverRequest) GetId() uint64 { @@ -1337,7 +1337,7 @@ type UpdateReceiverRequest struct { func (x *UpdateReceiverRequest) Reset() { *x = UpdateReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[19] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1350,7 +1350,7 @@ func (x *UpdateReceiverRequest) String() string { func (*UpdateReceiverRequest) ProtoMessage() {} func (x *UpdateReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[19] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1363,7 +1363,7 @@ func (x *UpdateReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateReceiverRequest.ProtoReflect.Descriptor instead. func (*UpdateReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{19} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{19} } func (x *UpdateReceiverRequest) GetId() uint64 { @@ -1412,7 +1412,7 @@ type DeleteReceiverRequest struct { func (x *DeleteReceiverRequest) Reset() { *x = DeleteReceiverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[20] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1425,7 +1425,7 @@ func (x *DeleteReceiverRequest) String() string { func (*DeleteReceiverRequest) ProtoMessage() {} func (x *DeleteReceiverRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[20] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1438,7 +1438,7 @@ func (x *DeleteReceiverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteReceiverRequest.ProtoReflect.Descriptor instead. func (*DeleteReceiverRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{20} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{20} } func (x *DeleteReceiverRequest) GetId() uint64 { @@ -1463,7 +1463,7 @@ type ListAlertsRequest struct { func (x *ListAlertsRequest) Reset() { *x = ListAlertsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[21] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1476,7 +1476,7 @@ func (x *ListAlertsRequest) String() string { func (*ListAlertsRequest) ProtoMessage() {} func (x *ListAlertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[21] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1489,7 +1489,7 @@ func (x *ListAlertsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAlertsRequest.ProtoReflect.Descriptor instead. func (*ListAlertsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{21} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{21} } func (x *ListAlertsRequest) GetProviderName() string { @@ -1538,7 +1538,7 @@ type Alerts struct { func (x *Alerts) Reset() { *x = Alerts{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[22] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1551,7 +1551,7 @@ func (x *Alerts) String() string { func (*Alerts) ProtoMessage() {} func (x *Alerts) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[22] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1564,7 +1564,7 @@ func (x *Alerts) ProtoReflect() protoreflect.Message { // Deprecated: Use Alerts.ProtoReflect.Descriptor instead. func (*Alerts) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{22} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{22} } func (x *Alerts) GetAlerts() []*Alert { @@ -1592,7 +1592,7 @@ type Alert struct { func (x *Alert) Reset() { *x = Alert{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[23] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1605,7 +1605,7 @@ func (x *Alert) String() string { func (*Alert) ProtoMessage() {} func (x *Alert) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[23] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1618,7 +1618,7 @@ func (x *Alert) ProtoReflect() protoreflect.Message { // Deprecated: Use Alert.ProtoReflect.Descriptor instead. func (*Alert) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{23} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{23} } func (x *Alert) GetId() uint64 { @@ -1689,7 +1689,7 @@ type CreateCortexAlertsRequest struct { func (x *CreateCortexAlertsRequest) Reset() { *x = CreateCortexAlertsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[24] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1702,7 +1702,7 @@ func (x *CreateCortexAlertsRequest) String() string { func (*CreateCortexAlertsRequest) ProtoMessage() {} func (x *CreateCortexAlertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[24] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1715,7 +1715,7 @@ func (x *CreateCortexAlertsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateCortexAlertsRequest.ProtoReflect.Descriptor instead. func (*CreateCortexAlertsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{24} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{24} } func (x *CreateCortexAlertsRequest) GetProviderId() uint64 { @@ -1746,7 +1746,7 @@ type CortexAlert struct { func (x *CortexAlert) Reset() { *x = CortexAlert{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[25] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1759,7 +1759,7 @@ func (x *CortexAlert) String() string { func (*CortexAlert) ProtoMessage() {} func (x *CortexAlert) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[25] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1772,7 +1772,7 @@ func (x *CortexAlert) ProtoReflect() protoreflect.Message { // Deprecated: Use CortexAlert.ProtoReflect.Descriptor instead. func (*CortexAlert) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{25} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{25} } func (x *CortexAlert) GetAnnotations() *Annotations { @@ -1817,7 +1817,7 @@ type Annotations struct { func (x *Annotations) Reset() { *x = Annotations{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[26] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1830,7 +1830,7 @@ func (x *Annotations) String() string { func (*Annotations) ProtoMessage() {} func (x *Annotations) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[26] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1843,7 +1843,7 @@ func (x *Annotations) ProtoReflect() protoreflect.Message { // Deprecated: Use Annotations.ProtoReflect.Descriptor instead. func (*Annotations) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{26} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{26} } func (x *Annotations) GetMetricName() string { @@ -1885,7 +1885,7 @@ type Labels struct { func (x *Labels) Reset() { *x = Labels{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[27] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1898,7 +1898,7 @@ func (x *Labels) String() string { func (*Labels) ProtoMessage() {} func (x *Labels) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[27] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1911,7 +1911,7 @@ func (x *Labels) ProtoReflect() protoreflect.Message { // Deprecated: Use Labels.ProtoReflect.Descriptor instead. func (*Labels) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{27} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{27} } func (x *Labels) GetSeverity() string { @@ -1933,7 +1933,7 @@ type SlackWorkspace struct { func (x *SlackWorkspace) Reset() { *x = SlackWorkspace{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[28] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1946,7 +1946,7 @@ func (x *SlackWorkspace) String() string { func (*SlackWorkspace) ProtoMessage() {} func (x *SlackWorkspace) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[28] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1959,7 +1959,7 @@ func (x *SlackWorkspace) ProtoReflect() protoreflect.Message { // Deprecated: Use SlackWorkspace.ProtoReflect.Descriptor instead. func (*SlackWorkspace) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{28} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{28} } func (x *SlackWorkspace) GetId() string { @@ -1987,7 +1987,7 @@ type ListWorkspaceChannelsRequest struct { func (x *ListWorkspaceChannelsRequest) Reset() { *x = ListWorkspaceChannelsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[29] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2000,7 +2000,7 @@ func (x *ListWorkspaceChannelsRequest) String() string { func (*ListWorkspaceChannelsRequest) ProtoMessage() {} func (x *ListWorkspaceChannelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[29] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2013,7 +2013,7 @@ func (x *ListWorkspaceChannelsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkspaceChannelsRequest.ProtoReflect.Descriptor instead. func (*ListWorkspaceChannelsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{29} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{29} } func (x *ListWorkspaceChannelsRequest) GetWorkspaceName() string { @@ -2034,7 +2034,7 @@ type ListWorkspaceChannelsResponse struct { func (x *ListWorkspaceChannelsResponse) Reset() { *x = ListWorkspaceChannelsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[30] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2047,7 +2047,7 @@ func (x *ListWorkspaceChannelsResponse) String() string { func (*ListWorkspaceChannelsResponse) ProtoMessage() {} func (x *ListWorkspaceChannelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[30] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2060,7 +2060,7 @@ func (x *ListWorkspaceChannelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkspaceChannelsResponse.ProtoReflect.Descriptor instead. func (*ListWorkspaceChannelsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{30} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{30} } func (x *ListWorkspaceChannelsResponse) GetData() []*SlackWorkspace { @@ -2082,7 +2082,7 @@ type ExchangeCodeRequest struct { func (x *ExchangeCodeRequest) Reset() { *x = ExchangeCodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[31] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2095,7 +2095,7 @@ func (x *ExchangeCodeRequest) String() string { func (*ExchangeCodeRequest) ProtoMessage() {} func (x *ExchangeCodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[31] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2108,7 +2108,7 @@ func (x *ExchangeCodeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeCodeRequest.ProtoReflect.Descriptor instead. func (*ExchangeCodeRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{31} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{31} } func (x *ExchangeCodeRequest) GetCode() string { @@ -2136,7 +2136,7 @@ type ExchangeCodeResponse struct { func (x *ExchangeCodeResponse) Reset() { *x = ExchangeCodeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[32] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2149,7 +2149,7 @@ func (x *ExchangeCodeResponse) String() string { func (*ExchangeCodeResponse) ProtoMessage() {} func (x *ExchangeCodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[32] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2162,7 +2162,7 @@ func (x *ExchangeCodeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeCodeResponse.ProtoReflect.Descriptor instead. func (*ExchangeCodeResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{32} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{32} } func (x *ExchangeCodeResponse) GetOk() bool { @@ -2183,7 +2183,7 @@ type GetAlertCredentialsRequest struct { func (x *GetAlertCredentialsRequest) Reset() { *x = GetAlertCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[33] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2196,7 +2196,7 @@ func (x *GetAlertCredentialsRequest) String() string { func (*GetAlertCredentialsRequest) ProtoMessage() {} func (x *GetAlertCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[33] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2209,7 +2209,7 @@ func (x *GetAlertCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAlertCredentialsRequest.ProtoReflect.Descriptor instead. func (*GetAlertCredentialsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{33} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{33} } func (x *GetAlertCredentialsRequest) GetTeamName() string { @@ -2230,7 +2230,7 @@ type Critical struct { func (x *Critical) Reset() { *x = Critical{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[34] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2243,7 +2243,7 @@ func (x *Critical) String() string { func (*Critical) ProtoMessage() {} func (x *Critical) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[34] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2256,7 +2256,7 @@ func (x *Critical) ProtoReflect() protoreflect.Message { // Deprecated: Use Critical.ProtoReflect.Descriptor instead. func (*Critical) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{34} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{34} } func (x *Critical) GetChannel() string { @@ -2277,7 +2277,7 @@ type Warning struct { func (x *Warning) Reset() { *x = Warning{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[35] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2290,7 +2290,7 @@ func (x *Warning) String() string { func (*Warning) ProtoMessage() {} func (x *Warning) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[35] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2303,7 +2303,7 @@ func (x *Warning) ProtoReflect() protoreflect.Message { // Deprecated: Use Warning.ProtoReflect.Descriptor instead. func (*Warning) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{35} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{35} } func (x *Warning) GetChannel() string { @@ -2325,7 +2325,7 @@ type SlackConfig struct { func (x *SlackConfig) Reset() { *x = SlackConfig{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[36] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2338,7 +2338,7 @@ func (x *SlackConfig) String() string { func (*SlackConfig) ProtoMessage() {} func (x *SlackConfig) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[36] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2351,7 +2351,7 @@ func (x *SlackConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SlackConfig.ProtoReflect.Descriptor instead. func (*SlackConfig) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{36} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{36} } func (x *SlackConfig) GetCritical() *Critical { @@ -2382,7 +2382,7 @@ type GetAlertCredentialsResponse struct { func (x *GetAlertCredentialsResponse) Reset() { *x = GetAlertCredentialsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[37] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2395,7 +2395,7 @@ func (x *GetAlertCredentialsResponse) String() string { func (*GetAlertCredentialsResponse) ProtoMessage() {} func (x *GetAlertCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[37] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2408,7 +2408,7 @@ func (x *GetAlertCredentialsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAlertCredentialsResponse.ProtoReflect.Descriptor instead. func (*GetAlertCredentialsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{37} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{37} } func (x *GetAlertCredentialsResponse) GetEntity() string { @@ -2453,7 +2453,7 @@ type UpdateAlertCredentialsRequest struct { func (x *UpdateAlertCredentialsRequest) Reset() { *x = UpdateAlertCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[38] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2466,7 +2466,7 @@ func (x *UpdateAlertCredentialsRequest) String() string { func (*UpdateAlertCredentialsRequest) ProtoMessage() {} func (x *UpdateAlertCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[38] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2479,7 +2479,7 @@ func (x *UpdateAlertCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAlertCredentialsRequest.ProtoReflect.Descriptor instead. func (*UpdateAlertCredentialsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{38} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{38} } func (x *UpdateAlertCredentialsRequest) GetEntity() string { @@ -2519,7 +2519,7 @@ type UpdateAlertCredentialsResponse struct { func (x *UpdateAlertCredentialsResponse) Reset() { *x = UpdateAlertCredentialsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[39] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2532,7 +2532,7 @@ func (x *UpdateAlertCredentialsResponse) String() string { func (*UpdateAlertCredentialsResponse) ProtoMessage() {} func (x *UpdateAlertCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[39] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2545,7 +2545,7 @@ func (x *UpdateAlertCredentialsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAlertCredentialsResponse.ProtoReflect.Descriptor instead. func (*UpdateAlertCredentialsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{39} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{39} } type SendReceiverNotificationRequest struct { @@ -2562,7 +2562,7 @@ type SendReceiverNotificationRequest struct { func (x *SendReceiverNotificationRequest) Reset() { *x = SendReceiverNotificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[40] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2575,7 +2575,7 @@ func (x *SendReceiverNotificationRequest) String() string { func (*SendReceiverNotificationRequest) ProtoMessage() {} func (x *SendReceiverNotificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[40] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2588,7 +2588,7 @@ func (x *SendReceiverNotificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SendReceiverNotificationRequest.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{40} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{40} } func (x *SendReceiverNotificationRequest) GetId() uint64 { @@ -2633,7 +2633,7 @@ type SendReceiverNotificationResponse struct { func (x *SendReceiverNotificationResponse) Reset() { *x = SendReceiverNotificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[41] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2646,7 +2646,7 @@ func (x *SendReceiverNotificationResponse) String() string { func (*SendReceiverNotificationResponse) ProtoMessage() {} func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[41] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2659,7 +2659,7 @@ func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SendReceiverNotificationResponse.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{41} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{41} } func (x *SendReceiverNotificationResponse) GetOk() bool { @@ -2684,7 +2684,7 @@ type ListRulesRequest struct { func (x *ListRulesRequest) Reset() { *x = ListRulesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[42] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2697,7 +2697,7 @@ func (x *ListRulesRequest) String() string { func (*ListRulesRequest) ProtoMessage() {} func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[42] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2710,7 +2710,7 @@ func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRulesRequest.ProtoReflect.Descriptor instead. func (*ListRulesRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{42} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{42} } func (x *ListRulesRequest) GetName() string { @@ -2762,7 +2762,7 @@ type Variables struct { func (x *Variables) Reset() { *x = Variables{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[43] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2775,7 +2775,7 @@ func (x *Variables) String() string { func (*Variables) ProtoMessage() {} func (x *Variables) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[43] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2788,7 +2788,7 @@ func (x *Variables) ProtoReflect() protoreflect.Message { // Deprecated: Use Variables.ProtoReflect.Descriptor instead. func (*Variables) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{43} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{43} } func (x *Variables) GetName() string { @@ -2839,7 +2839,7 @@ type Rule struct { func (x *Rule) Reset() { *x = Rule{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[44] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2852,7 +2852,7 @@ func (x *Rule) String() string { func (*Rule) ProtoMessage() {} func (x *Rule) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[44] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2865,7 +2865,7 @@ func (x *Rule) ProtoReflect() protoreflect.Message { // Deprecated: Use Rule.ProtoReflect.Descriptor instead. func (*Rule) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{44} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{44} } func (x *Rule) GetId() uint64 { @@ -2949,7 +2949,7 @@ type ListRulesResponse struct { func (x *ListRulesResponse) Reset() { *x = ListRulesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[45] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2962,7 +2962,7 @@ func (x *ListRulesResponse) String() string { func (*ListRulesResponse) ProtoMessage() {} func (x *ListRulesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[45] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2975,7 +2975,7 @@ func (x *ListRulesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRulesResponse.ProtoReflect.Descriptor instead. func (*ListRulesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{45} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{45} } func (x *ListRulesResponse) GetRules() []*Rule { @@ -2996,7 +2996,7 @@ type UpdateRuleResponse struct { func (x *UpdateRuleResponse) Reset() { *x = UpdateRuleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[46] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3009,7 +3009,7 @@ func (x *UpdateRuleResponse) String() string { func (*UpdateRuleResponse) ProtoMessage() {} func (x *UpdateRuleResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[46] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3022,7 +3022,7 @@ func (x *UpdateRuleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRuleResponse.ProtoReflect.Descriptor instead. func (*UpdateRuleResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{46} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{46} } func (x *UpdateRuleResponse) GetRule() *Rule { @@ -3048,7 +3048,7 @@ type UpdateRuleRequest struct { func (x *UpdateRuleRequest) Reset() { *x = UpdateRuleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[47] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3061,7 +3061,7 @@ func (x *UpdateRuleRequest) String() string { func (*UpdateRuleRequest) ProtoMessage() {} func (x *UpdateRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[47] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3074,7 +3074,7 @@ func (x *UpdateRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRuleRequest.ProtoReflect.Descriptor instead. func (*UpdateRuleRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{47} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{47} } func (x *UpdateRuleRequest) GetEnabled() bool { @@ -3130,7 +3130,7 @@ type ListTemplatesRequest struct { func (x *ListTemplatesRequest) Reset() { *x = ListTemplatesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[48] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3143,7 +3143,7 @@ func (x *ListTemplatesRequest) String() string { func (*ListTemplatesRequest) ProtoMessage() {} func (x *ListTemplatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[48] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3156,7 +3156,7 @@ func (x *ListTemplatesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplatesRequest.ProtoReflect.Descriptor instead. func (*ListTemplatesRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{48} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{48} } func (x *ListTemplatesRequest) GetTag() string { @@ -3180,7 +3180,7 @@ type TemplateVariables struct { func (x *TemplateVariables) Reset() { *x = TemplateVariables{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[49] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3193,7 +3193,7 @@ func (x *TemplateVariables) String() string { func (*TemplateVariables) ProtoMessage() {} func (x *TemplateVariables) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[49] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3206,7 +3206,7 @@ func (x *TemplateVariables) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateVariables.ProtoReflect.Descriptor instead. func (*TemplateVariables) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{49} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{49} } func (x *TemplateVariables) GetName() string { @@ -3254,7 +3254,7 @@ type Template struct { func (x *Template) Reset() { *x = Template{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[50] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3267,7 +3267,7 @@ func (x *Template) String() string { func (*Template) ProtoMessage() {} func (x *Template) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[50] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3280,7 +3280,7 @@ func (x *Template) ProtoReflect() protoreflect.Message { // Deprecated: Use Template.ProtoReflect.Descriptor instead. func (*Template) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{50} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{50} } func (x *Template) GetId() uint64 { @@ -3343,7 +3343,7 @@ type TemplateResponse struct { func (x *TemplateResponse) Reset() { *x = TemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[51] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3356,7 +3356,7 @@ func (x *TemplateResponse) String() string { func (*TemplateResponse) ProtoMessage() {} func (x *TemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[51] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3369,7 +3369,7 @@ func (x *TemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateResponse.ProtoReflect.Descriptor instead. func (*TemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{51} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{51} } func (x *TemplateResponse) GetTemplate() *Template { @@ -3394,7 +3394,7 @@ type UpsertTemplateRequest struct { func (x *UpsertTemplateRequest) Reset() { *x = UpsertTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[52] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3407,7 +3407,7 @@ func (x *UpsertTemplateRequest) String() string { func (*UpsertTemplateRequest) ProtoMessage() {} func (x *UpsertTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[52] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3420,7 +3420,7 @@ func (x *UpsertTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertTemplateRequest.ProtoReflect.Descriptor instead. func (*UpsertTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{52} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{52} } func (x *UpsertTemplateRequest) GetId() uint64 { @@ -3469,7 +3469,7 @@ type ListTemplatesResponse struct { func (x *ListTemplatesResponse) Reset() { *x = ListTemplatesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[53] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3482,7 +3482,7 @@ func (x *ListTemplatesResponse) String() string { func (*ListTemplatesResponse) ProtoMessage() {} func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[53] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3495,7 +3495,7 @@ func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplatesResponse.ProtoReflect.Descriptor instead. func (*ListTemplatesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{53} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{53} } func (x *ListTemplatesResponse) GetTemplates() []*Template { @@ -3516,7 +3516,7 @@ type GetTemplateByNameRequest struct { func (x *GetTemplateByNameRequest) Reset() { *x = GetTemplateByNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[54] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3529,7 +3529,7 @@ func (x *GetTemplateByNameRequest) String() string { func (*GetTemplateByNameRequest) ProtoMessage() {} func (x *GetTemplateByNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[54] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3542,7 +3542,7 @@ func (x *GetTemplateByNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTemplateByNameRequest.ProtoReflect.Descriptor instead. func (*GetTemplateByNameRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{54} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{54} } func (x *GetTemplateByNameRequest) GetName() string { @@ -3563,7 +3563,7 @@ type DeleteTemplateRequest struct { func (x *DeleteTemplateRequest) Reset() { *x = DeleteTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[55] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3576,7 +3576,7 @@ func (x *DeleteTemplateRequest) String() string { func (*DeleteTemplateRequest) ProtoMessage() {} func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[55] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3589,7 +3589,7 @@ func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTemplateRequest.ProtoReflect.Descriptor instead. func (*DeleteTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{55} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{55} } func (x *DeleteTemplateRequest) GetName() string { @@ -3608,7 +3608,7 @@ type DeleteTemplateResponse struct { func (x *DeleteTemplateResponse) Reset() { *x = DeleteTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[56] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3621,7 +3621,7 @@ func (x *DeleteTemplateResponse) String() string { func (*DeleteTemplateResponse) ProtoMessage() {} func (x *DeleteTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[56] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3634,7 +3634,7 @@ func (x *DeleteTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTemplateResponse.ProtoReflect.Descriptor instead. func (*DeleteTemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{56} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{56} } type RenderTemplateRequest struct { @@ -3649,7 +3649,7 @@ type RenderTemplateRequest struct { func (x *RenderTemplateRequest) Reset() { *x = RenderTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[57] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3662,7 +3662,7 @@ func (x *RenderTemplateRequest) String() string { func (*RenderTemplateRequest) ProtoMessage() {} func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[57] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3675,7 +3675,7 @@ func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTemplateRequest.ProtoReflect.Descriptor instead. func (*RenderTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{57} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{57} } func (x *RenderTemplateRequest) GetName() string { @@ -3703,7 +3703,7 @@ type RenderTemplateResponse struct { func (x *RenderTemplateResponse) Reset() { *x = RenderTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[58] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3716,7 +3716,7 @@ func (x *RenderTemplateResponse) String() string { func (*RenderTemplateResponse) ProtoMessage() {} func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[58] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3729,7 +3729,7 @@ func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTemplateResponse.ProtoReflect.Descriptor instead. func (*RenderTemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{58} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{58} } func (x *RenderTemplateResponse) GetBody() string { @@ -3753,7 +3753,7 @@ type SendReceiverNotificationRequest_SlackPayload struct { func (x *SendReceiverNotificationRequest_SlackPayload) Reset() { *x = SendReceiverNotificationRequest_SlackPayload{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[68] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3766,7 +3766,7 @@ func (x *SendReceiverNotificationRequest_SlackPayload) String() string { func (*SendReceiverNotificationRequest_SlackPayload) ProtoMessage() {} func (x *SendReceiverNotificationRequest_SlackPayload) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1_siren_proto_msgTypes[68] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3779,7 +3779,7 @@ func (x *SendReceiverNotificationRequest_SlackPayload) ProtoReflect() protorefle // Deprecated: Use SendReceiverNotificationRequest_SlackPayload.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationRequest_SlackPayload) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1_siren_proto_rawDescGZIP(), []int{40, 0} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{40, 0} } func (x *SendReceiverNotificationRequest_SlackPayload) GetMessage() string { @@ -3810,577 +3810,587 @@ func (x *SendReceiverNotificationRequest_SlackPayload) GetBlocks() []*structpb.S return nil } -var File_odpf_siren_v1_siren_proto protoreflect.FileDescriptor - -var file_odpf_siren_v1_siren_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, - 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, - 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x28, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa0, 0x03, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, - 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3b, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4e, 0x0a, 0x15, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0xf0, 0x02, 0x0a, 0x15, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, 0x68, 0x6f, - 0x73, 0x74, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x2b, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, - 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, - 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, +var File_odpf_siren_v1beta1_siren_proto protoreflect.FileDescriptor + +var file_odpf_siren_v1beta1_siren_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x12, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x28, 0x0a, 0x0c, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0xa5, 0x03, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x68, 0x6f, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, - 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x24, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xd5, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, - 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, - 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, - 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, - 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x87, 0x03, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x14, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0xf5, + 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, + 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, + 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x03, 0x75, 0x72, + 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, + 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xda, 0x02, 0x0a, + 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x04, + 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, - 0x3c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x22, 0xc3, 0x03, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, - 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, - 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, - 0xb2, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, - 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, - 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x49, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbd, - 0x03, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, - 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, - 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x8c, 0x03, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x41, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x57, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xc8, 0x03, 0x0a, 0x16, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, + 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4e, - 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x22, 0xbe, - 0x02, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, - 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, - 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, - 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xce, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, - 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, 0x1a, - 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb7, 0x02, 0x0a, + 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, + 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4e, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, - 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, - 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x52, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, - 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x05, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, - 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x3d, - 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x70, 0x0a, - 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x61, - 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x74, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xc2, 0x03, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x53, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, + 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, + 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x22, 0xc3, 0x02, 0x0a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1d, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5f, 0x2e, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xfa, 0x42, + 0x1a, 0x72, 0x18, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x72, 0x64, 0x75, 0x74, 0x79, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, + 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0d, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, + 0x78, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, + 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, + 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x3b, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, + 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x75, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, - 0xcb, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, - 0x3c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x61, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x41, 0x74, 0x22, 0x89, 0x01, - 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x34, 0x0a, 0x0e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, + 0xd5, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, + 0x41, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, + 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x73, 0x41, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x34, 0x0a, 0x0e, 0x53, 0x6c, 0x61, + 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x5e, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3e, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, + 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, + 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x57, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x2c, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, + 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x2e, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, + 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x52, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x74, 0x65, + 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x13, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, - 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x2e, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x35, - 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x52, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x74, - 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, - 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x3d, 0x0a, 0x08, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x31, 0x0a, - 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, + 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x3d, 0x0a, 0x08, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x31, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, + 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, + 0x3c, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, + 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, + 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x92, 0x01, + 0x0a, 0x0b, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, + 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, + 0x6c, 0x12, 0x3f, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, + 0x6e, 0x67, 0x22, 0xcb, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, + 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, + 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, + 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x0c, + 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0x89, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x4c, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x14, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, + 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4c, + 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x0a, 0x1e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe8, + 0x02, 0x0a, 0x1f, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x58, 0x0a, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x1a, 0xd2, 0x01, 0x0a, + 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x22, 0x3c, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x07, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, - 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, - 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x88, - 0x01, 0x0a, 0x0b, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, - 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x3a, 0x0a, - 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0xc6, 0x01, 0x0a, 0x1b, 0x47, 0x65, - 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, - 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, - 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x84, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x06, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x14, 0x70, 0x61, 0x67, 0x65, - 0x72, 0x64, 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x73, 0x6c, - 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x1f, - 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x53, 0x0a, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, - 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, - 0x6c, 0x61, 0x63, 0x6b, 0x1a, 0xd2, 0x01, 0x0a, 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, + 0x11, 0x72, 0x0f, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x32, 0x0a, 0x20, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xae, 0x01, + 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x9d, + 0x01, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, + 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, + 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, + 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, + 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x88, + 0x03, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, + 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x36, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x32, 0x02, 0x28, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, + 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x42, + 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, + 0x6c, 0x65, 0x22, 0xbd, 0x02, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, - 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, - 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x52, 0x07, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x32, 0x0a, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, - 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, + 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, + 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x28, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0xa9, 0x01, 0x0a, + 0x11, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x03, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x3d, 0x0a, 0x12, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0xb8, 0x02, 0x0a, 0x11, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, - 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, - 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, - 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x36, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x28, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, - 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd2, 0x02, 0x0a, - 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x22, 0x47, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x15, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, - 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x4e, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, + 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x02, 0x0a, 0x08, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, + 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, + 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x22, 0xd5, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, + 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, + 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x09, 0x76, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, @@ -4390,514 +4400,547 @@ var file_odpf_siren_v1_siren_proto_rawDesc = []byte{ 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd5, 0x01, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x2a, 0x13, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0a, 0x0a, 0x06, - 0x43, 0x4f, 0x52, 0x54, 0x45, 0x58, 0x10, 0x00, 0x32, 0xc7, 0x21, 0x0a, 0x0c, 0x53, 0x69, 0x72, - 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x04, 0x50, 0x69, 0x6e, - 0x67, 0x12, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x92, 0x41, 0x0c, 0x0a, - 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x07, 0x12, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x8b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x23, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x35, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, - 0x22, 0x0a, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x34, 0x92, 0x41, 0x1a, 0x0a, - 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, - 0x0f, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x2a, 0x13, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x52, 0x54, 0x45, 0x58, 0x10, 0x00, 0x32, 0xc7, 0x25, + 0x0a, 0x0c, 0x53, 0x69, 0x72, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x67, + 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x92, 0x41, 0x0c, 0x0a, 0x04, + 0x50, 0x69, 0x6e, 0x67, 0x12, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x07, + 0x12, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, + 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x6c, + 0x69, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x22, 0x3d, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x3c, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x87, - 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x37, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x2a, 0x0f, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x1c, 0x0a, - 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0d, 0x12, 0x0b, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x8c, - 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x38, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, - 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x22, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x37, 0x92, 0x41, - 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x67, 0x65, - 0x74, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x92, 0x41, + 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, + 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1f, 0x0a, + 0x1a, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x40, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x1c, 0x0a, + 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x67, 0x65, 0x74, 0x20, + 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x0f, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x45, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x15, 0x1a, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3a, 0x92, 0x41, - 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x7e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x35, 0x92, 0x41, 0x1d, 0x0a, - 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x12, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x34, 0x92, 0x41, + 0xe4, 0x93, 0x02, 0x1d, 0x1a, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x42, 0x92, 0x41, 0x1f, 0x0a, 0x09, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, + 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x3d, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, + 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, + 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x3c, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x11, 0x12, 0x0f, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, - 0x12, 0x87, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x37, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x2a, 0x0f, 0x2f, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0a, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, - 0x74, 0x73, 0x22, 0x44, 0x92, 0x41, 0x14, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0b, - 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x27, 0x12, 0x25, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x6e, - 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x29, 0x0a, 0x08, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x6e, 0x64, - 0x3a, 0x01, 0x2a, 0x12, 0x9e, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x3f, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, + 0x72, 0x74, 0x73, 0x22, 0x4c, 0x92, 0x41, 0x14, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, + 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x6c, 0x65, + 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x29, 0x0a, 0x08, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0xb0, + 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x47, 0x92, 0x41, 0x1d, - 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x72, - 0x74, 0x65, 0x78, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xa6, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2b, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2c, 0x12, 0x2a, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x76, 0x0a, - 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, - 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x29, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x74, - 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0xa0, 0x01, 0x0a, - 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x74, - 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0x73, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x23, 0x92, 0x41, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0a, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x12, 0x06, 0x2f, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x75, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x19, 0x0a, 0x04, 0x52, - 0x75, 0x6c, 0x65, 0x12, 0x11, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, - 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x1a, 0x06, 0x2f, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x92, 0x01, - 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x15, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0f, 0x1a, 0x0a, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, - 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa2, 0x01, - 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, - 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x72, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x3a, - 0x01, 0x2a, 0x42, 0xa8, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x42, 0x0e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x27, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x76, 0x31, 0x92, 0x41, 0x54, 0x12, 0x4f, 0x0a, 0x0a, 0x53, 0x69, 0x72, - 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x73, 0x12, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x69, - 0x72, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, - 0x43, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x32, 0x05, 0x30, 0x2e, 0x33, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x22, 0x4f, 0x92, 0x41, 0x1d, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x14, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x20, 0x61, 0x6c, 0x65, 0x72, + 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0xb8, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x30, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x88, 0x01, 0x0a, + 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, + 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x12, 0xb2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x31, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, + 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2b, 0x92, 0x41, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0a, 0x6c, 0x69, 0x73, + 0x74, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x92, 0x01, + 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x19, + 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x11, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x1a, + 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, 0x08, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, + 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x67, 0x65, 0x74, + 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa4, 0x01, 0x0a, + 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x41, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x15, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x1a, 0x12, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, + 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x1d, 0x0a, + 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x72, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x42, 0xb2, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x42, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0x54, 0x12, 0x4f, 0x0a, 0x0a, 0x53, 0x69, 0x72, 0x65, + 0x6e, 0x20, 0x41, 0x50, 0x49, 0x73, 0x12, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x69, 0x72, + 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, 0x43, + 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x32, 0x05, 0x30, 0x2e, 0x33, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( - file_odpf_siren_v1_siren_proto_rawDescOnce sync.Once - file_odpf_siren_v1_siren_proto_rawDescData = file_odpf_siren_v1_siren_proto_rawDesc + file_odpf_siren_v1beta1_siren_proto_rawDescOnce sync.Once + file_odpf_siren_v1beta1_siren_proto_rawDescData = file_odpf_siren_v1beta1_siren_proto_rawDesc ) -func file_odpf_siren_v1_siren_proto_rawDescGZIP() []byte { - file_odpf_siren_v1_siren_proto_rawDescOnce.Do(func() { - file_odpf_siren_v1_siren_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_siren_v1_siren_proto_rawDescData) +func file_odpf_siren_v1beta1_siren_proto_rawDescGZIP() []byte { + file_odpf_siren_v1beta1_siren_proto_rawDescOnce.Do(func() { + file_odpf_siren_v1beta1_siren_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_siren_v1beta1_siren_proto_rawDescData) }) - return file_odpf_siren_v1_siren_proto_rawDescData -} - -var file_odpf_siren_v1_siren_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_odpf_siren_v1_siren_proto_msgTypes = make([]protoimpl.MessageInfo, 70) -var file_odpf_siren_v1_siren_proto_goTypes = []interface{}{ - (Types)(0), // 0: odpf.siren.v1.Types - (*PingRequest)(nil), // 1: odpf.siren.v1.PingRequest - (*PingResponse)(nil), // 2: odpf.siren.v1.PingResponse - (*Provider)(nil), // 3: odpf.siren.v1.Provider - (*ListProvidersRequest)(nil), // 4: odpf.siren.v1.ListProvidersRequest - (*ListProvidersResponse)(nil), // 5: odpf.siren.v1.ListProvidersResponse - (*CreateProviderRequest)(nil), // 6: odpf.siren.v1.CreateProviderRequest - (*GetProviderRequest)(nil), // 7: odpf.siren.v1.GetProviderRequest - (*UpdateProviderRequest)(nil), // 8: odpf.siren.v1.UpdateProviderRequest - (*DeleteProviderRequest)(nil), // 9: odpf.siren.v1.DeleteProviderRequest - (*Namespace)(nil), // 10: odpf.siren.v1.Namespace - (*ListNamespacesResponse)(nil), // 11: odpf.siren.v1.ListNamespacesResponse - (*CreateNamespaceRequest)(nil), // 12: odpf.siren.v1.CreateNamespaceRequest - (*GetNamespaceRequest)(nil), // 13: odpf.siren.v1.GetNamespaceRequest - (*UpdateNamespaceRequest)(nil), // 14: odpf.siren.v1.UpdateNamespaceRequest - (*DeleteNamespaceRequest)(nil), // 15: odpf.siren.v1.DeleteNamespaceRequest - (*Receiver)(nil), // 16: odpf.siren.v1.Receiver - (*ListReceiversResponse)(nil), // 17: odpf.siren.v1.ListReceiversResponse - (*CreateReceiverRequest)(nil), // 18: odpf.siren.v1.CreateReceiverRequest - (*GetReceiverRequest)(nil), // 19: odpf.siren.v1.GetReceiverRequest - (*UpdateReceiverRequest)(nil), // 20: odpf.siren.v1.UpdateReceiverRequest - (*DeleteReceiverRequest)(nil), // 21: odpf.siren.v1.DeleteReceiverRequest - (*ListAlertsRequest)(nil), // 22: odpf.siren.v1.ListAlertsRequest - (*Alerts)(nil), // 23: odpf.siren.v1.Alerts - (*Alert)(nil), // 24: odpf.siren.v1.Alert - (*CreateCortexAlertsRequest)(nil), // 25: odpf.siren.v1.CreateCortexAlertsRequest - (*CortexAlert)(nil), // 26: odpf.siren.v1.CortexAlert - (*Annotations)(nil), // 27: odpf.siren.v1.Annotations - (*Labels)(nil), // 28: odpf.siren.v1.Labels - (*SlackWorkspace)(nil), // 29: odpf.siren.v1.SlackWorkspace - (*ListWorkspaceChannelsRequest)(nil), // 30: odpf.siren.v1.ListWorkspaceChannelsRequest - (*ListWorkspaceChannelsResponse)(nil), // 31: odpf.siren.v1.ListWorkspaceChannelsResponse - (*ExchangeCodeRequest)(nil), // 32: odpf.siren.v1.ExchangeCodeRequest - (*ExchangeCodeResponse)(nil), // 33: odpf.siren.v1.ExchangeCodeResponse - (*GetAlertCredentialsRequest)(nil), // 34: odpf.siren.v1.GetAlertCredentialsRequest - (*Critical)(nil), // 35: odpf.siren.v1.Critical - (*Warning)(nil), // 36: odpf.siren.v1.Warning - (*SlackConfig)(nil), // 37: odpf.siren.v1.SlackConfig - (*GetAlertCredentialsResponse)(nil), // 38: odpf.siren.v1.GetAlertCredentialsResponse - (*UpdateAlertCredentialsRequest)(nil), // 39: odpf.siren.v1.UpdateAlertCredentialsRequest - (*UpdateAlertCredentialsResponse)(nil), // 40: odpf.siren.v1.UpdateAlertCredentialsResponse - (*SendReceiverNotificationRequest)(nil), // 41: odpf.siren.v1.SendReceiverNotificationRequest - (*SendReceiverNotificationResponse)(nil), // 42: odpf.siren.v1.SendReceiverNotificationResponse - (*ListRulesRequest)(nil), // 43: odpf.siren.v1.ListRulesRequest - (*Variables)(nil), // 44: odpf.siren.v1.Variables - (*Rule)(nil), // 45: odpf.siren.v1.Rule - (*ListRulesResponse)(nil), // 46: odpf.siren.v1.ListRulesResponse - (*UpdateRuleResponse)(nil), // 47: odpf.siren.v1.UpdateRuleResponse - (*UpdateRuleRequest)(nil), // 48: odpf.siren.v1.UpdateRuleRequest - (*ListTemplatesRequest)(nil), // 49: odpf.siren.v1.ListTemplatesRequest - (*TemplateVariables)(nil), // 50: odpf.siren.v1.TemplateVariables - (*Template)(nil), // 51: odpf.siren.v1.Template - (*TemplateResponse)(nil), // 52: odpf.siren.v1.TemplateResponse - (*UpsertTemplateRequest)(nil), // 53: odpf.siren.v1.UpsertTemplateRequest - (*ListTemplatesResponse)(nil), // 54: odpf.siren.v1.ListTemplatesResponse - (*GetTemplateByNameRequest)(nil), // 55: odpf.siren.v1.GetTemplateByNameRequest - (*DeleteTemplateRequest)(nil), // 56: odpf.siren.v1.DeleteTemplateRequest - (*DeleteTemplateResponse)(nil), // 57: odpf.siren.v1.DeleteTemplateResponse - (*RenderTemplateRequest)(nil), // 58: odpf.siren.v1.RenderTemplateRequest - (*RenderTemplateResponse)(nil), // 59: odpf.siren.v1.RenderTemplateResponse - nil, // 60: odpf.siren.v1.Provider.LabelsEntry - nil, // 61: odpf.siren.v1.CreateProviderRequest.LabelsEntry - nil, // 62: odpf.siren.v1.UpdateProviderRequest.LabelsEntry - nil, // 63: odpf.siren.v1.Namespace.LabelsEntry - nil, // 64: odpf.siren.v1.CreateNamespaceRequest.LabelsEntry - nil, // 65: odpf.siren.v1.UpdateNamespaceRequest.LabelsEntry - nil, // 66: odpf.siren.v1.Receiver.LabelsEntry - nil, // 67: odpf.siren.v1.CreateReceiverRequest.LabelsEntry - nil, // 68: odpf.siren.v1.UpdateReceiverRequest.LabelsEntry - (*SendReceiverNotificationRequest_SlackPayload)(nil), // 69: odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload - nil, // 70: odpf.siren.v1.RenderTemplateRequest.VariablesEntry + return file_odpf_siren_v1beta1_siren_proto_rawDescData +} + +var file_odpf_siren_v1beta1_siren_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_odpf_siren_v1beta1_siren_proto_msgTypes = make([]protoimpl.MessageInfo, 70) +var file_odpf_siren_v1beta1_siren_proto_goTypes = []interface{}{ + (Types)(0), // 0: odpf.siren.v1beta1.Types + (*PingRequest)(nil), // 1: odpf.siren.v1beta1.PingRequest + (*PingResponse)(nil), // 2: odpf.siren.v1beta1.PingResponse + (*Provider)(nil), // 3: odpf.siren.v1beta1.Provider + (*ListProvidersRequest)(nil), // 4: odpf.siren.v1beta1.ListProvidersRequest + (*ListProvidersResponse)(nil), // 5: odpf.siren.v1beta1.ListProvidersResponse + (*CreateProviderRequest)(nil), // 6: odpf.siren.v1beta1.CreateProviderRequest + (*GetProviderRequest)(nil), // 7: odpf.siren.v1beta1.GetProviderRequest + (*UpdateProviderRequest)(nil), // 8: odpf.siren.v1beta1.UpdateProviderRequest + (*DeleteProviderRequest)(nil), // 9: odpf.siren.v1beta1.DeleteProviderRequest + (*Namespace)(nil), // 10: odpf.siren.v1beta1.Namespace + (*ListNamespacesResponse)(nil), // 11: odpf.siren.v1beta1.ListNamespacesResponse + (*CreateNamespaceRequest)(nil), // 12: odpf.siren.v1beta1.CreateNamespaceRequest + (*GetNamespaceRequest)(nil), // 13: odpf.siren.v1beta1.GetNamespaceRequest + (*UpdateNamespaceRequest)(nil), // 14: odpf.siren.v1beta1.UpdateNamespaceRequest + (*DeleteNamespaceRequest)(nil), // 15: odpf.siren.v1beta1.DeleteNamespaceRequest + (*Receiver)(nil), // 16: odpf.siren.v1beta1.Receiver + (*ListReceiversResponse)(nil), // 17: odpf.siren.v1beta1.ListReceiversResponse + (*CreateReceiverRequest)(nil), // 18: odpf.siren.v1beta1.CreateReceiverRequest + (*GetReceiverRequest)(nil), // 19: odpf.siren.v1beta1.GetReceiverRequest + (*UpdateReceiverRequest)(nil), // 20: odpf.siren.v1beta1.UpdateReceiverRequest + (*DeleteReceiverRequest)(nil), // 21: odpf.siren.v1beta1.DeleteReceiverRequest + (*ListAlertsRequest)(nil), // 22: odpf.siren.v1beta1.ListAlertsRequest + (*Alerts)(nil), // 23: odpf.siren.v1beta1.Alerts + (*Alert)(nil), // 24: odpf.siren.v1beta1.Alert + (*CreateCortexAlertsRequest)(nil), // 25: odpf.siren.v1beta1.CreateCortexAlertsRequest + (*CortexAlert)(nil), // 26: odpf.siren.v1beta1.CortexAlert + (*Annotations)(nil), // 27: odpf.siren.v1beta1.Annotations + (*Labels)(nil), // 28: odpf.siren.v1beta1.Labels + (*SlackWorkspace)(nil), // 29: odpf.siren.v1beta1.SlackWorkspace + (*ListWorkspaceChannelsRequest)(nil), // 30: odpf.siren.v1beta1.ListWorkspaceChannelsRequest + (*ListWorkspaceChannelsResponse)(nil), // 31: odpf.siren.v1beta1.ListWorkspaceChannelsResponse + (*ExchangeCodeRequest)(nil), // 32: odpf.siren.v1beta1.ExchangeCodeRequest + (*ExchangeCodeResponse)(nil), // 33: odpf.siren.v1beta1.ExchangeCodeResponse + (*GetAlertCredentialsRequest)(nil), // 34: odpf.siren.v1beta1.GetAlertCredentialsRequest + (*Critical)(nil), // 35: odpf.siren.v1beta1.Critical + (*Warning)(nil), // 36: odpf.siren.v1beta1.Warning + (*SlackConfig)(nil), // 37: odpf.siren.v1beta1.SlackConfig + (*GetAlertCredentialsResponse)(nil), // 38: odpf.siren.v1beta1.GetAlertCredentialsResponse + (*UpdateAlertCredentialsRequest)(nil), // 39: odpf.siren.v1beta1.UpdateAlertCredentialsRequest + (*UpdateAlertCredentialsResponse)(nil), // 40: odpf.siren.v1beta1.UpdateAlertCredentialsResponse + (*SendReceiverNotificationRequest)(nil), // 41: odpf.siren.v1beta1.SendReceiverNotificationRequest + (*SendReceiverNotificationResponse)(nil), // 42: odpf.siren.v1beta1.SendReceiverNotificationResponse + (*ListRulesRequest)(nil), // 43: odpf.siren.v1beta1.ListRulesRequest + (*Variables)(nil), // 44: odpf.siren.v1beta1.Variables + (*Rule)(nil), // 45: odpf.siren.v1beta1.Rule + (*ListRulesResponse)(nil), // 46: odpf.siren.v1beta1.ListRulesResponse + (*UpdateRuleResponse)(nil), // 47: odpf.siren.v1beta1.UpdateRuleResponse + (*UpdateRuleRequest)(nil), // 48: odpf.siren.v1beta1.UpdateRuleRequest + (*ListTemplatesRequest)(nil), // 49: odpf.siren.v1beta1.ListTemplatesRequest + (*TemplateVariables)(nil), // 50: odpf.siren.v1beta1.TemplateVariables + (*Template)(nil), // 51: odpf.siren.v1beta1.Template + (*TemplateResponse)(nil), // 52: odpf.siren.v1beta1.TemplateResponse + (*UpsertTemplateRequest)(nil), // 53: odpf.siren.v1beta1.UpsertTemplateRequest + (*ListTemplatesResponse)(nil), // 54: odpf.siren.v1beta1.ListTemplatesResponse + (*GetTemplateByNameRequest)(nil), // 55: odpf.siren.v1beta1.GetTemplateByNameRequest + (*DeleteTemplateRequest)(nil), // 56: odpf.siren.v1beta1.DeleteTemplateRequest + (*DeleteTemplateResponse)(nil), // 57: odpf.siren.v1beta1.DeleteTemplateResponse + (*RenderTemplateRequest)(nil), // 58: odpf.siren.v1beta1.RenderTemplateRequest + (*RenderTemplateResponse)(nil), // 59: odpf.siren.v1beta1.RenderTemplateResponse + nil, // 60: odpf.siren.v1beta1.Provider.LabelsEntry + nil, // 61: odpf.siren.v1beta1.CreateProviderRequest.LabelsEntry + nil, // 62: odpf.siren.v1beta1.UpdateProviderRequest.LabelsEntry + nil, // 63: odpf.siren.v1beta1.Namespace.LabelsEntry + nil, // 64: odpf.siren.v1beta1.CreateNamespaceRequest.LabelsEntry + nil, // 65: odpf.siren.v1beta1.UpdateNamespaceRequest.LabelsEntry + nil, // 66: odpf.siren.v1beta1.Receiver.LabelsEntry + nil, // 67: odpf.siren.v1beta1.CreateReceiverRequest.LabelsEntry + nil, // 68: odpf.siren.v1beta1.UpdateReceiverRequest.LabelsEntry + (*SendReceiverNotificationRequest_SlackPayload)(nil), // 69: odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload + nil, // 70: odpf.siren.v1beta1.RenderTemplateRequest.VariablesEntry (*structpb.Struct)(nil), // 71: google.protobuf.Struct (*timestamppb.Timestamp)(nil), // 72: google.protobuf.Timestamp (*emptypb.Empty)(nil), // 73: google.protobuf.Empty } -var file_odpf_siren_v1_siren_proto_depIdxs = []int32{ - 71, // 0: odpf.siren.v1.Provider.credentials:type_name -> google.protobuf.Struct - 60, // 1: odpf.siren.v1.Provider.labels:type_name -> odpf.siren.v1.Provider.LabelsEntry - 72, // 2: odpf.siren.v1.Provider.created_at:type_name -> google.protobuf.Timestamp - 72, // 3: odpf.siren.v1.Provider.updated_at:type_name -> google.protobuf.Timestamp - 3, // 4: odpf.siren.v1.ListProvidersResponse.providers:type_name -> odpf.siren.v1.Provider - 71, // 5: odpf.siren.v1.CreateProviderRequest.credentials:type_name -> google.protobuf.Struct - 61, // 6: odpf.siren.v1.CreateProviderRequest.labels:type_name -> odpf.siren.v1.CreateProviderRequest.LabelsEntry - 71, // 7: odpf.siren.v1.UpdateProviderRequest.credentials:type_name -> google.protobuf.Struct - 62, // 8: odpf.siren.v1.UpdateProviderRequest.labels:type_name -> odpf.siren.v1.UpdateProviderRequest.LabelsEntry - 71, // 9: odpf.siren.v1.Namespace.credentials:type_name -> google.protobuf.Struct - 63, // 10: odpf.siren.v1.Namespace.labels:type_name -> odpf.siren.v1.Namespace.LabelsEntry - 72, // 11: odpf.siren.v1.Namespace.created_at:type_name -> google.protobuf.Timestamp - 72, // 12: odpf.siren.v1.Namespace.updated_at:type_name -> google.protobuf.Timestamp - 10, // 13: odpf.siren.v1.ListNamespacesResponse.namespaces:type_name -> odpf.siren.v1.Namespace - 71, // 14: odpf.siren.v1.CreateNamespaceRequest.credentials:type_name -> google.protobuf.Struct - 64, // 15: odpf.siren.v1.CreateNamespaceRequest.labels:type_name -> odpf.siren.v1.CreateNamespaceRequest.LabelsEntry - 72, // 16: odpf.siren.v1.CreateNamespaceRequest.created_at:type_name -> google.protobuf.Timestamp - 72, // 17: odpf.siren.v1.CreateNamespaceRequest.updated_at:type_name -> google.protobuf.Timestamp - 71, // 18: odpf.siren.v1.UpdateNamespaceRequest.credentials:type_name -> google.protobuf.Struct - 65, // 19: odpf.siren.v1.UpdateNamespaceRequest.labels:type_name -> odpf.siren.v1.UpdateNamespaceRequest.LabelsEntry - 66, // 20: odpf.siren.v1.Receiver.labels:type_name -> odpf.siren.v1.Receiver.LabelsEntry - 71, // 21: odpf.siren.v1.Receiver.configurations:type_name -> google.protobuf.Struct - 71, // 22: odpf.siren.v1.Receiver.data:type_name -> google.protobuf.Struct - 72, // 23: odpf.siren.v1.Receiver.created_at:type_name -> google.protobuf.Timestamp - 72, // 24: odpf.siren.v1.Receiver.updated_at:type_name -> google.protobuf.Timestamp - 16, // 25: odpf.siren.v1.ListReceiversResponse.receivers:type_name -> odpf.siren.v1.Receiver - 67, // 26: odpf.siren.v1.CreateReceiverRequest.labels:type_name -> odpf.siren.v1.CreateReceiverRequest.LabelsEntry - 71, // 27: odpf.siren.v1.CreateReceiverRequest.configurations:type_name -> google.protobuf.Struct - 68, // 28: odpf.siren.v1.UpdateReceiverRequest.labels:type_name -> odpf.siren.v1.UpdateReceiverRequest.LabelsEntry - 71, // 29: odpf.siren.v1.UpdateReceiverRequest.configurations:type_name -> google.protobuf.Struct - 24, // 30: odpf.siren.v1.Alerts.alerts:type_name -> odpf.siren.v1.Alert - 72, // 31: odpf.siren.v1.Alert.triggered_at:type_name -> google.protobuf.Timestamp - 26, // 32: odpf.siren.v1.CreateCortexAlertsRequest.alerts:type_name -> odpf.siren.v1.CortexAlert - 27, // 33: odpf.siren.v1.CortexAlert.annotations:type_name -> odpf.siren.v1.Annotations - 28, // 34: odpf.siren.v1.CortexAlert.labels:type_name -> odpf.siren.v1.Labels - 72, // 35: odpf.siren.v1.CortexAlert.starts_at:type_name -> google.protobuf.Timestamp - 29, // 36: odpf.siren.v1.ListWorkspaceChannelsResponse.data:type_name -> odpf.siren.v1.SlackWorkspace - 35, // 37: odpf.siren.v1.SlackConfig.critical:type_name -> odpf.siren.v1.Critical - 36, // 38: odpf.siren.v1.SlackConfig.warning:type_name -> odpf.siren.v1.Warning - 37, // 39: odpf.siren.v1.GetAlertCredentialsResponse.slack_config:type_name -> odpf.siren.v1.SlackConfig - 37, // 40: odpf.siren.v1.UpdateAlertCredentialsRequest.slack_config:type_name -> odpf.siren.v1.SlackConfig - 69, // 41: odpf.siren.v1.SendReceiverNotificationRequest.slack:type_name -> odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload - 44, // 42: odpf.siren.v1.Rule.variables:type_name -> odpf.siren.v1.Variables - 72, // 43: odpf.siren.v1.Rule.created_at:type_name -> google.protobuf.Timestamp - 72, // 44: odpf.siren.v1.Rule.updated_at:type_name -> google.protobuf.Timestamp - 45, // 45: odpf.siren.v1.ListRulesResponse.rules:type_name -> odpf.siren.v1.Rule - 45, // 46: odpf.siren.v1.UpdateRuleResponse.rule:type_name -> odpf.siren.v1.Rule - 44, // 47: odpf.siren.v1.UpdateRuleRequest.variables:type_name -> odpf.siren.v1.Variables - 72, // 48: odpf.siren.v1.Template.created_at:type_name -> google.protobuf.Timestamp - 72, // 49: odpf.siren.v1.Template.updated_at:type_name -> google.protobuf.Timestamp - 50, // 50: odpf.siren.v1.Template.variables:type_name -> odpf.siren.v1.TemplateVariables - 51, // 51: odpf.siren.v1.TemplateResponse.template:type_name -> odpf.siren.v1.Template - 50, // 52: odpf.siren.v1.UpsertTemplateRequest.variables:type_name -> odpf.siren.v1.TemplateVariables - 51, // 53: odpf.siren.v1.ListTemplatesResponse.templates:type_name -> odpf.siren.v1.Template - 70, // 54: odpf.siren.v1.RenderTemplateRequest.variables:type_name -> odpf.siren.v1.RenderTemplateRequest.VariablesEntry - 71, // 55: odpf.siren.v1.SendReceiverNotificationRequest.SlackPayload.blocks:type_name -> google.protobuf.Struct - 1, // 56: odpf.siren.v1.SirenService.Ping:input_type -> odpf.siren.v1.PingRequest - 4, // 57: odpf.siren.v1.SirenService.ListProviders:input_type -> odpf.siren.v1.ListProvidersRequest - 6, // 58: odpf.siren.v1.SirenService.CreateProvider:input_type -> odpf.siren.v1.CreateProviderRequest - 7, // 59: odpf.siren.v1.SirenService.GetProvider:input_type -> odpf.siren.v1.GetProviderRequest - 8, // 60: odpf.siren.v1.SirenService.UpdateProvider:input_type -> odpf.siren.v1.UpdateProviderRequest - 9, // 61: odpf.siren.v1.SirenService.DeleteProvider:input_type -> odpf.siren.v1.DeleteProviderRequest - 73, // 62: odpf.siren.v1.SirenService.ListNamespaces:input_type -> google.protobuf.Empty - 12, // 63: odpf.siren.v1.SirenService.CreateNamespace:input_type -> odpf.siren.v1.CreateNamespaceRequest - 13, // 64: odpf.siren.v1.SirenService.GetNamespace:input_type -> odpf.siren.v1.GetNamespaceRequest - 14, // 65: odpf.siren.v1.SirenService.UpdateNamespace:input_type -> odpf.siren.v1.UpdateNamespaceRequest - 15, // 66: odpf.siren.v1.SirenService.DeleteNamespace:input_type -> odpf.siren.v1.DeleteNamespaceRequest - 73, // 67: odpf.siren.v1.SirenService.ListReceivers:input_type -> google.protobuf.Empty - 18, // 68: odpf.siren.v1.SirenService.CreateReceiver:input_type -> odpf.siren.v1.CreateReceiverRequest - 19, // 69: odpf.siren.v1.SirenService.GetReceiver:input_type -> odpf.siren.v1.GetReceiverRequest - 20, // 70: odpf.siren.v1.SirenService.UpdateReceiver:input_type -> odpf.siren.v1.UpdateReceiverRequest - 21, // 71: odpf.siren.v1.SirenService.DeleteReceiver:input_type -> odpf.siren.v1.DeleteReceiverRequest - 22, // 72: odpf.siren.v1.SirenService.ListAlerts:input_type -> odpf.siren.v1.ListAlertsRequest - 41, // 73: odpf.siren.v1.SirenService.SendReceiverNotification:input_type -> odpf.siren.v1.SendReceiverNotificationRequest - 25, // 74: odpf.siren.v1.SirenService.CreateCortexAlerts:input_type -> odpf.siren.v1.CreateCortexAlertsRequest - 30, // 75: odpf.siren.v1.SirenService.ListWorkspaceChannels:input_type -> odpf.siren.v1.ListWorkspaceChannelsRequest - 32, // 76: odpf.siren.v1.SirenService.ExchangeCode:input_type -> odpf.siren.v1.ExchangeCodeRequest - 34, // 77: odpf.siren.v1.SirenService.GetAlertCredentials:input_type -> odpf.siren.v1.GetAlertCredentialsRequest - 39, // 78: odpf.siren.v1.SirenService.UpdateAlertCredentials:input_type -> odpf.siren.v1.UpdateAlertCredentialsRequest - 43, // 79: odpf.siren.v1.SirenService.ListRules:input_type -> odpf.siren.v1.ListRulesRequest - 48, // 80: odpf.siren.v1.SirenService.UpdateRule:input_type -> odpf.siren.v1.UpdateRuleRequest - 49, // 81: odpf.siren.v1.SirenService.ListTemplates:input_type -> odpf.siren.v1.ListTemplatesRequest - 55, // 82: odpf.siren.v1.SirenService.GetTemplateByName:input_type -> odpf.siren.v1.GetTemplateByNameRequest - 53, // 83: odpf.siren.v1.SirenService.UpsertTemplate:input_type -> odpf.siren.v1.UpsertTemplateRequest - 56, // 84: odpf.siren.v1.SirenService.DeleteTemplate:input_type -> odpf.siren.v1.DeleteTemplateRequest - 58, // 85: odpf.siren.v1.SirenService.RenderTemplate:input_type -> odpf.siren.v1.RenderTemplateRequest - 2, // 86: odpf.siren.v1.SirenService.Ping:output_type -> odpf.siren.v1.PingResponse - 5, // 87: odpf.siren.v1.SirenService.ListProviders:output_type -> odpf.siren.v1.ListProvidersResponse - 3, // 88: odpf.siren.v1.SirenService.CreateProvider:output_type -> odpf.siren.v1.Provider - 3, // 89: odpf.siren.v1.SirenService.GetProvider:output_type -> odpf.siren.v1.Provider - 3, // 90: odpf.siren.v1.SirenService.UpdateProvider:output_type -> odpf.siren.v1.Provider - 73, // 91: odpf.siren.v1.SirenService.DeleteProvider:output_type -> google.protobuf.Empty - 11, // 92: odpf.siren.v1.SirenService.ListNamespaces:output_type -> odpf.siren.v1.ListNamespacesResponse - 10, // 93: odpf.siren.v1.SirenService.CreateNamespace:output_type -> odpf.siren.v1.Namespace - 10, // 94: odpf.siren.v1.SirenService.GetNamespace:output_type -> odpf.siren.v1.Namespace - 10, // 95: odpf.siren.v1.SirenService.UpdateNamespace:output_type -> odpf.siren.v1.Namespace - 73, // 96: odpf.siren.v1.SirenService.DeleteNamespace:output_type -> google.protobuf.Empty - 17, // 97: odpf.siren.v1.SirenService.ListReceivers:output_type -> odpf.siren.v1.ListReceiversResponse - 16, // 98: odpf.siren.v1.SirenService.CreateReceiver:output_type -> odpf.siren.v1.Receiver - 16, // 99: odpf.siren.v1.SirenService.GetReceiver:output_type -> odpf.siren.v1.Receiver - 16, // 100: odpf.siren.v1.SirenService.UpdateReceiver:output_type -> odpf.siren.v1.Receiver - 73, // 101: odpf.siren.v1.SirenService.DeleteReceiver:output_type -> google.protobuf.Empty - 23, // 102: odpf.siren.v1.SirenService.ListAlerts:output_type -> odpf.siren.v1.Alerts - 42, // 103: odpf.siren.v1.SirenService.SendReceiverNotification:output_type -> odpf.siren.v1.SendReceiverNotificationResponse - 23, // 104: odpf.siren.v1.SirenService.CreateCortexAlerts:output_type -> odpf.siren.v1.Alerts - 31, // 105: odpf.siren.v1.SirenService.ListWorkspaceChannels:output_type -> odpf.siren.v1.ListWorkspaceChannelsResponse - 33, // 106: odpf.siren.v1.SirenService.ExchangeCode:output_type -> odpf.siren.v1.ExchangeCodeResponse - 38, // 107: odpf.siren.v1.SirenService.GetAlertCredentials:output_type -> odpf.siren.v1.GetAlertCredentialsResponse - 40, // 108: odpf.siren.v1.SirenService.UpdateAlertCredentials:output_type -> odpf.siren.v1.UpdateAlertCredentialsResponse - 46, // 109: odpf.siren.v1.SirenService.ListRules:output_type -> odpf.siren.v1.ListRulesResponse - 47, // 110: odpf.siren.v1.SirenService.UpdateRule:output_type -> odpf.siren.v1.UpdateRuleResponse - 54, // 111: odpf.siren.v1.SirenService.ListTemplates:output_type -> odpf.siren.v1.ListTemplatesResponse - 52, // 112: odpf.siren.v1.SirenService.GetTemplateByName:output_type -> odpf.siren.v1.TemplateResponse - 52, // 113: odpf.siren.v1.SirenService.UpsertTemplate:output_type -> odpf.siren.v1.TemplateResponse - 57, // 114: odpf.siren.v1.SirenService.DeleteTemplate:output_type -> odpf.siren.v1.DeleteTemplateResponse - 59, // 115: odpf.siren.v1.SirenService.RenderTemplate:output_type -> odpf.siren.v1.RenderTemplateResponse +var file_odpf_siren_v1beta1_siren_proto_depIdxs = []int32{ + 71, // 0: odpf.siren.v1beta1.Provider.credentials:type_name -> google.protobuf.Struct + 60, // 1: odpf.siren.v1beta1.Provider.labels:type_name -> odpf.siren.v1beta1.Provider.LabelsEntry + 72, // 2: odpf.siren.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp + 72, // 3: odpf.siren.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp + 3, // 4: odpf.siren.v1beta1.ListProvidersResponse.providers:type_name -> odpf.siren.v1beta1.Provider + 71, // 5: odpf.siren.v1beta1.CreateProviderRequest.credentials:type_name -> google.protobuf.Struct + 61, // 6: odpf.siren.v1beta1.CreateProviderRequest.labels:type_name -> odpf.siren.v1beta1.CreateProviderRequest.LabelsEntry + 71, // 7: odpf.siren.v1beta1.UpdateProviderRequest.credentials:type_name -> google.protobuf.Struct + 62, // 8: odpf.siren.v1beta1.UpdateProviderRequest.labels:type_name -> odpf.siren.v1beta1.UpdateProviderRequest.LabelsEntry + 71, // 9: odpf.siren.v1beta1.Namespace.credentials:type_name -> google.protobuf.Struct + 63, // 10: odpf.siren.v1beta1.Namespace.labels:type_name -> odpf.siren.v1beta1.Namespace.LabelsEntry + 72, // 11: odpf.siren.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp + 72, // 12: odpf.siren.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp + 10, // 13: odpf.siren.v1beta1.ListNamespacesResponse.namespaces:type_name -> odpf.siren.v1beta1.Namespace + 71, // 14: odpf.siren.v1beta1.CreateNamespaceRequest.credentials:type_name -> google.protobuf.Struct + 64, // 15: odpf.siren.v1beta1.CreateNamespaceRequest.labels:type_name -> odpf.siren.v1beta1.CreateNamespaceRequest.LabelsEntry + 72, // 16: odpf.siren.v1beta1.CreateNamespaceRequest.created_at:type_name -> google.protobuf.Timestamp + 72, // 17: odpf.siren.v1beta1.CreateNamespaceRequest.updated_at:type_name -> google.protobuf.Timestamp + 71, // 18: odpf.siren.v1beta1.UpdateNamespaceRequest.credentials:type_name -> google.protobuf.Struct + 65, // 19: odpf.siren.v1beta1.UpdateNamespaceRequest.labels:type_name -> odpf.siren.v1beta1.UpdateNamespaceRequest.LabelsEntry + 66, // 20: odpf.siren.v1beta1.Receiver.labels:type_name -> odpf.siren.v1beta1.Receiver.LabelsEntry + 71, // 21: odpf.siren.v1beta1.Receiver.configurations:type_name -> google.protobuf.Struct + 71, // 22: odpf.siren.v1beta1.Receiver.data:type_name -> google.protobuf.Struct + 72, // 23: odpf.siren.v1beta1.Receiver.created_at:type_name -> google.protobuf.Timestamp + 72, // 24: odpf.siren.v1beta1.Receiver.updated_at:type_name -> google.protobuf.Timestamp + 16, // 25: odpf.siren.v1beta1.ListReceiversResponse.receivers:type_name -> odpf.siren.v1beta1.Receiver + 67, // 26: odpf.siren.v1beta1.CreateReceiverRequest.labels:type_name -> odpf.siren.v1beta1.CreateReceiverRequest.LabelsEntry + 71, // 27: odpf.siren.v1beta1.CreateReceiverRequest.configurations:type_name -> google.protobuf.Struct + 68, // 28: odpf.siren.v1beta1.UpdateReceiverRequest.labels:type_name -> odpf.siren.v1beta1.UpdateReceiverRequest.LabelsEntry + 71, // 29: odpf.siren.v1beta1.UpdateReceiverRequest.configurations:type_name -> google.protobuf.Struct + 24, // 30: odpf.siren.v1beta1.Alerts.alerts:type_name -> odpf.siren.v1beta1.Alert + 72, // 31: odpf.siren.v1beta1.Alert.triggered_at:type_name -> google.protobuf.Timestamp + 26, // 32: odpf.siren.v1beta1.CreateCortexAlertsRequest.alerts:type_name -> odpf.siren.v1beta1.CortexAlert + 27, // 33: odpf.siren.v1beta1.CortexAlert.annotations:type_name -> odpf.siren.v1beta1.Annotations + 28, // 34: odpf.siren.v1beta1.CortexAlert.labels:type_name -> odpf.siren.v1beta1.Labels + 72, // 35: odpf.siren.v1beta1.CortexAlert.starts_at:type_name -> google.protobuf.Timestamp + 29, // 36: odpf.siren.v1beta1.ListWorkspaceChannelsResponse.data:type_name -> odpf.siren.v1beta1.SlackWorkspace + 35, // 37: odpf.siren.v1beta1.SlackConfig.critical:type_name -> odpf.siren.v1beta1.Critical + 36, // 38: odpf.siren.v1beta1.SlackConfig.warning:type_name -> odpf.siren.v1beta1.Warning + 37, // 39: odpf.siren.v1beta1.GetAlertCredentialsResponse.slack_config:type_name -> odpf.siren.v1beta1.SlackConfig + 37, // 40: odpf.siren.v1beta1.UpdateAlertCredentialsRequest.slack_config:type_name -> odpf.siren.v1beta1.SlackConfig + 69, // 41: odpf.siren.v1beta1.SendReceiverNotificationRequest.slack:type_name -> odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload + 44, // 42: odpf.siren.v1beta1.Rule.variables:type_name -> odpf.siren.v1beta1.Variables + 72, // 43: odpf.siren.v1beta1.Rule.created_at:type_name -> google.protobuf.Timestamp + 72, // 44: odpf.siren.v1beta1.Rule.updated_at:type_name -> google.protobuf.Timestamp + 45, // 45: odpf.siren.v1beta1.ListRulesResponse.rules:type_name -> odpf.siren.v1beta1.Rule + 45, // 46: odpf.siren.v1beta1.UpdateRuleResponse.rule:type_name -> odpf.siren.v1beta1.Rule + 44, // 47: odpf.siren.v1beta1.UpdateRuleRequest.variables:type_name -> odpf.siren.v1beta1.Variables + 72, // 48: odpf.siren.v1beta1.Template.created_at:type_name -> google.protobuf.Timestamp + 72, // 49: odpf.siren.v1beta1.Template.updated_at:type_name -> google.protobuf.Timestamp + 50, // 50: odpf.siren.v1beta1.Template.variables:type_name -> odpf.siren.v1beta1.TemplateVariables + 51, // 51: odpf.siren.v1beta1.TemplateResponse.template:type_name -> odpf.siren.v1beta1.Template + 50, // 52: odpf.siren.v1beta1.UpsertTemplateRequest.variables:type_name -> odpf.siren.v1beta1.TemplateVariables + 51, // 53: odpf.siren.v1beta1.ListTemplatesResponse.templates:type_name -> odpf.siren.v1beta1.Template + 70, // 54: odpf.siren.v1beta1.RenderTemplateRequest.variables:type_name -> odpf.siren.v1beta1.RenderTemplateRequest.VariablesEntry + 71, // 55: odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload.blocks:type_name -> google.protobuf.Struct + 1, // 56: odpf.siren.v1beta1.SirenService.Ping:input_type -> odpf.siren.v1beta1.PingRequest + 4, // 57: odpf.siren.v1beta1.SirenService.ListProviders:input_type -> odpf.siren.v1beta1.ListProvidersRequest + 6, // 58: odpf.siren.v1beta1.SirenService.CreateProvider:input_type -> odpf.siren.v1beta1.CreateProviderRequest + 7, // 59: odpf.siren.v1beta1.SirenService.GetProvider:input_type -> odpf.siren.v1beta1.GetProviderRequest + 8, // 60: odpf.siren.v1beta1.SirenService.UpdateProvider:input_type -> odpf.siren.v1beta1.UpdateProviderRequest + 9, // 61: odpf.siren.v1beta1.SirenService.DeleteProvider:input_type -> odpf.siren.v1beta1.DeleteProviderRequest + 73, // 62: odpf.siren.v1beta1.SirenService.ListNamespaces:input_type -> google.protobuf.Empty + 12, // 63: odpf.siren.v1beta1.SirenService.CreateNamespace:input_type -> odpf.siren.v1beta1.CreateNamespaceRequest + 13, // 64: odpf.siren.v1beta1.SirenService.GetNamespace:input_type -> odpf.siren.v1beta1.GetNamespaceRequest + 14, // 65: odpf.siren.v1beta1.SirenService.UpdateNamespace:input_type -> odpf.siren.v1beta1.UpdateNamespaceRequest + 15, // 66: odpf.siren.v1beta1.SirenService.DeleteNamespace:input_type -> odpf.siren.v1beta1.DeleteNamespaceRequest + 73, // 67: odpf.siren.v1beta1.SirenService.ListReceivers:input_type -> google.protobuf.Empty + 18, // 68: odpf.siren.v1beta1.SirenService.CreateReceiver:input_type -> odpf.siren.v1beta1.CreateReceiverRequest + 19, // 69: odpf.siren.v1beta1.SirenService.GetReceiver:input_type -> odpf.siren.v1beta1.GetReceiverRequest + 20, // 70: odpf.siren.v1beta1.SirenService.UpdateReceiver:input_type -> odpf.siren.v1beta1.UpdateReceiverRequest + 21, // 71: odpf.siren.v1beta1.SirenService.DeleteReceiver:input_type -> odpf.siren.v1beta1.DeleteReceiverRequest + 22, // 72: odpf.siren.v1beta1.SirenService.ListAlerts:input_type -> odpf.siren.v1beta1.ListAlertsRequest + 41, // 73: odpf.siren.v1beta1.SirenService.SendReceiverNotification:input_type -> odpf.siren.v1beta1.SendReceiverNotificationRequest + 25, // 74: odpf.siren.v1beta1.SirenService.CreateCortexAlerts:input_type -> odpf.siren.v1beta1.CreateCortexAlertsRequest + 30, // 75: odpf.siren.v1beta1.SirenService.ListWorkspaceChannels:input_type -> odpf.siren.v1beta1.ListWorkspaceChannelsRequest + 32, // 76: odpf.siren.v1beta1.SirenService.ExchangeCode:input_type -> odpf.siren.v1beta1.ExchangeCodeRequest + 34, // 77: odpf.siren.v1beta1.SirenService.GetAlertCredentials:input_type -> odpf.siren.v1beta1.GetAlertCredentialsRequest + 39, // 78: odpf.siren.v1beta1.SirenService.UpdateAlertCredentials:input_type -> odpf.siren.v1beta1.UpdateAlertCredentialsRequest + 43, // 79: odpf.siren.v1beta1.SirenService.ListRules:input_type -> odpf.siren.v1beta1.ListRulesRequest + 48, // 80: odpf.siren.v1beta1.SirenService.UpdateRule:input_type -> odpf.siren.v1beta1.UpdateRuleRequest + 49, // 81: odpf.siren.v1beta1.SirenService.ListTemplates:input_type -> odpf.siren.v1beta1.ListTemplatesRequest + 55, // 82: odpf.siren.v1beta1.SirenService.GetTemplateByName:input_type -> odpf.siren.v1beta1.GetTemplateByNameRequest + 53, // 83: odpf.siren.v1beta1.SirenService.UpsertTemplate:input_type -> odpf.siren.v1beta1.UpsertTemplateRequest + 56, // 84: odpf.siren.v1beta1.SirenService.DeleteTemplate:input_type -> odpf.siren.v1beta1.DeleteTemplateRequest + 58, // 85: odpf.siren.v1beta1.SirenService.RenderTemplate:input_type -> odpf.siren.v1beta1.RenderTemplateRequest + 2, // 86: odpf.siren.v1beta1.SirenService.Ping:output_type -> odpf.siren.v1beta1.PingResponse + 5, // 87: odpf.siren.v1beta1.SirenService.ListProviders:output_type -> odpf.siren.v1beta1.ListProvidersResponse + 3, // 88: odpf.siren.v1beta1.SirenService.CreateProvider:output_type -> odpf.siren.v1beta1.Provider + 3, // 89: odpf.siren.v1beta1.SirenService.GetProvider:output_type -> odpf.siren.v1beta1.Provider + 3, // 90: odpf.siren.v1beta1.SirenService.UpdateProvider:output_type -> odpf.siren.v1beta1.Provider + 73, // 91: odpf.siren.v1beta1.SirenService.DeleteProvider:output_type -> google.protobuf.Empty + 11, // 92: odpf.siren.v1beta1.SirenService.ListNamespaces:output_type -> odpf.siren.v1beta1.ListNamespacesResponse + 10, // 93: odpf.siren.v1beta1.SirenService.CreateNamespace:output_type -> odpf.siren.v1beta1.Namespace + 10, // 94: odpf.siren.v1beta1.SirenService.GetNamespace:output_type -> odpf.siren.v1beta1.Namespace + 10, // 95: odpf.siren.v1beta1.SirenService.UpdateNamespace:output_type -> odpf.siren.v1beta1.Namespace + 73, // 96: odpf.siren.v1beta1.SirenService.DeleteNamespace:output_type -> google.protobuf.Empty + 17, // 97: odpf.siren.v1beta1.SirenService.ListReceivers:output_type -> odpf.siren.v1beta1.ListReceiversResponse + 16, // 98: odpf.siren.v1beta1.SirenService.CreateReceiver:output_type -> odpf.siren.v1beta1.Receiver + 16, // 99: odpf.siren.v1beta1.SirenService.GetReceiver:output_type -> odpf.siren.v1beta1.Receiver + 16, // 100: odpf.siren.v1beta1.SirenService.UpdateReceiver:output_type -> odpf.siren.v1beta1.Receiver + 73, // 101: odpf.siren.v1beta1.SirenService.DeleteReceiver:output_type -> google.protobuf.Empty + 23, // 102: odpf.siren.v1beta1.SirenService.ListAlerts:output_type -> odpf.siren.v1beta1.Alerts + 42, // 103: odpf.siren.v1beta1.SirenService.SendReceiverNotification:output_type -> odpf.siren.v1beta1.SendReceiverNotificationResponse + 23, // 104: odpf.siren.v1beta1.SirenService.CreateCortexAlerts:output_type -> odpf.siren.v1beta1.Alerts + 31, // 105: odpf.siren.v1beta1.SirenService.ListWorkspaceChannels:output_type -> odpf.siren.v1beta1.ListWorkspaceChannelsResponse + 33, // 106: odpf.siren.v1beta1.SirenService.ExchangeCode:output_type -> odpf.siren.v1beta1.ExchangeCodeResponse + 38, // 107: odpf.siren.v1beta1.SirenService.GetAlertCredentials:output_type -> odpf.siren.v1beta1.GetAlertCredentialsResponse + 40, // 108: odpf.siren.v1beta1.SirenService.UpdateAlertCredentials:output_type -> odpf.siren.v1beta1.UpdateAlertCredentialsResponse + 46, // 109: odpf.siren.v1beta1.SirenService.ListRules:output_type -> odpf.siren.v1beta1.ListRulesResponse + 47, // 110: odpf.siren.v1beta1.SirenService.UpdateRule:output_type -> odpf.siren.v1beta1.UpdateRuleResponse + 54, // 111: odpf.siren.v1beta1.SirenService.ListTemplates:output_type -> odpf.siren.v1beta1.ListTemplatesResponse + 52, // 112: odpf.siren.v1beta1.SirenService.GetTemplateByName:output_type -> odpf.siren.v1beta1.TemplateResponse + 52, // 113: odpf.siren.v1beta1.SirenService.UpsertTemplate:output_type -> odpf.siren.v1beta1.TemplateResponse + 57, // 114: odpf.siren.v1beta1.SirenService.DeleteTemplate:output_type -> odpf.siren.v1beta1.DeleteTemplateResponse + 59, // 115: odpf.siren.v1beta1.SirenService.RenderTemplate:output_type -> odpf.siren.v1beta1.RenderTemplateResponse 86, // [86:116] is the sub-list for method output_type 56, // [56:86] is the sub-list for method input_type 56, // [56:56] is the sub-list for extension type_name @@ -4905,13 +4948,13 @@ var file_odpf_siren_v1_siren_proto_depIdxs = []int32{ 0, // [0:56] is the sub-list for field type_name } -func init() { file_odpf_siren_v1_siren_proto_init() } -func file_odpf_siren_v1_siren_proto_init() { - if File_odpf_siren_v1_siren_proto != nil { +func init() { file_odpf_siren_v1beta1_siren_proto_init() } +func file_odpf_siren_v1beta1_siren_proto_init() { + if File_odpf_siren_v1beta1_siren_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_odpf_siren_v1_siren_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PingRequest); i { case 0: return &v.state @@ -4923,7 +4966,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PingResponse); i { case 0: return &v.state @@ -4935,7 +4978,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Provider); i { case 0: return &v.state @@ -4947,7 +4990,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListProvidersRequest); i { case 0: return &v.state @@ -4959,7 +5002,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListProvidersResponse); i { case 0: return &v.state @@ -4971,7 +5014,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateProviderRequest); i { case 0: return &v.state @@ -4983,7 +5026,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetProviderRequest); i { case 0: return &v.state @@ -4995,7 +5038,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateProviderRequest); i { case 0: return &v.state @@ -5007,7 +5050,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteProviderRequest); i { case 0: return &v.state @@ -5019,7 +5062,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Namespace); i { case 0: return &v.state @@ -5031,7 +5074,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNamespacesResponse); i { case 0: return &v.state @@ -5043,7 +5086,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateNamespaceRequest); i { case 0: return &v.state @@ -5055,7 +5098,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNamespaceRequest); i { case 0: return &v.state @@ -5067,7 +5110,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateNamespaceRequest); i { case 0: return &v.state @@ -5079,7 +5122,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteNamespaceRequest); i { case 0: return &v.state @@ -5091,7 +5134,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Receiver); i { case 0: return &v.state @@ -5103,7 +5146,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListReceiversResponse); i { case 0: return &v.state @@ -5115,7 +5158,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateReceiverRequest); i { case 0: return &v.state @@ -5127,7 +5170,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetReceiverRequest); i { case 0: return &v.state @@ -5139,7 +5182,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateReceiverRequest); i { case 0: return &v.state @@ -5151,7 +5194,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteReceiverRequest); i { case 0: return &v.state @@ -5163,7 +5206,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListAlertsRequest); i { case 0: return &v.state @@ -5175,7 +5218,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Alerts); i { case 0: return &v.state @@ -5187,7 +5230,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Alert); i { case 0: return &v.state @@ -5199,7 +5242,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateCortexAlertsRequest); i { case 0: return &v.state @@ -5211,7 +5254,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CortexAlert); i { case 0: return &v.state @@ -5223,7 +5266,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Annotations); i { case 0: return &v.state @@ -5235,7 +5278,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Labels); i { case 0: return &v.state @@ -5247,7 +5290,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SlackWorkspace); i { case 0: return &v.state @@ -5259,7 +5302,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListWorkspaceChannelsRequest); i { case 0: return &v.state @@ -5271,7 +5314,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListWorkspaceChannelsResponse); i { case 0: return &v.state @@ -5283,7 +5326,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExchangeCodeRequest); i { case 0: return &v.state @@ -5295,7 +5338,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExchangeCodeResponse); i { case 0: return &v.state @@ -5307,7 +5350,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAlertCredentialsRequest); i { case 0: return &v.state @@ -5319,7 +5362,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Critical); i { case 0: return &v.state @@ -5331,7 +5374,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Warning); i { case 0: return &v.state @@ -5343,7 +5386,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SlackConfig); i { case 0: return &v.state @@ -5355,7 +5398,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAlertCredentialsResponse); i { case 0: return &v.state @@ -5367,7 +5410,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateAlertCredentialsRequest); i { case 0: return &v.state @@ -5379,7 +5422,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateAlertCredentialsResponse); i { case 0: return &v.state @@ -5391,7 +5434,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendReceiverNotificationRequest); i { case 0: return &v.state @@ -5403,7 +5446,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendReceiverNotificationResponse); i { case 0: return &v.state @@ -5415,7 +5458,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListRulesRequest); i { case 0: return &v.state @@ -5427,7 +5470,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Variables); i { case 0: return &v.state @@ -5439,7 +5482,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Rule); i { case 0: return &v.state @@ -5451,7 +5494,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListRulesResponse); i { case 0: return &v.state @@ -5463,7 +5506,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateRuleResponse); i { case 0: return &v.state @@ -5475,7 +5518,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateRuleRequest); i { case 0: return &v.state @@ -5487,7 +5530,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListTemplatesRequest); i { case 0: return &v.state @@ -5499,7 +5542,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TemplateVariables); i { case 0: return &v.state @@ -5511,7 +5554,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Template); i { case 0: return &v.state @@ -5523,7 +5566,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TemplateResponse); i { case 0: return &v.state @@ -5535,7 +5578,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpsertTemplateRequest); i { case 0: return &v.state @@ -5547,7 +5590,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListTemplatesResponse); i { case 0: return &v.state @@ -5559,7 +5602,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTemplateByNameRequest); i { case 0: return &v.state @@ -5571,7 +5614,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteTemplateRequest); i { case 0: return &v.state @@ -5583,7 +5626,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteTemplateResponse); i { case 0: return &v.state @@ -5595,7 +5638,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RenderTemplateRequest); i { case 0: return &v.state @@ -5607,7 +5650,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RenderTemplateResponse); i { case 0: return &v.state @@ -5619,7 +5662,7 @@ func file_odpf_siren_v1_siren_proto_init() { return nil } } - file_odpf_siren_v1_siren_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendReceiverNotificationRequest_SlackPayload); i { case 0: return &v.state @@ -5632,26 +5675,26 @@ func file_odpf_siren_v1_siren_proto_init() { } } } - file_odpf_siren_v1_siren_proto_msgTypes[40].OneofWrappers = []interface{}{ + file_odpf_siren_v1beta1_siren_proto_msgTypes[40].OneofWrappers = []interface{}{ (*SendReceiverNotificationRequest_Slack)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_odpf_siren_v1_siren_proto_rawDesc, + RawDescriptor: file_odpf_siren_v1beta1_siren_proto_rawDesc, NumEnums: 1, NumMessages: 70, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_odpf_siren_v1_siren_proto_goTypes, - DependencyIndexes: file_odpf_siren_v1_siren_proto_depIdxs, - EnumInfos: file_odpf_siren_v1_siren_proto_enumTypes, - MessageInfos: file_odpf_siren_v1_siren_proto_msgTypes, + GoTypes: file_odpf_siren_v1beta1_siren_proto_goTypes, + DependencyIndexes: file_odpf_siren_v1beta1_siren_proto_depIdxs, + EnumInfos: file_odpf_siren_v1beta1_siren_proto_enumTypes, + MessageInfos: file_odpf_siren_v1beta1_siren_proto_msgTypes, }.Build() - File_odpf_siren_v1_siren_proto = out.File - file_odpf_siren_v1_siren_proto_rawDesc = nil - file_odpf_siren_v1_siren_proto_goTypes = nil - file_odpf_siren_v1_siren_proto_depIdxs = nil + File_odpf_siren_v1beta1_siren_proto = out.File + file_odpf_siren_v1beta1_siren_proto_rawDesc = nil + file_odpf_siren_v1beta1_siren_proto_goTypes = nil + file_odpf_siren_v1beta1_siren_proto_depIdxs = nil } diff --git a/api/proto/odpf/siren/v1/siren.pb.gw.go b/api/proto/odpf/siren/v1beta1/siren.pb.gw.go similarity index 92% rename from api/proto/odpf/siren/v1/siren.pb.gw.go rename to api/proto/odpf/siren/v1beta1/siren.pb.gw.go index 4bcd4a1f..c43f5cf4 100644 --- a/api/proto/odpf/siren/v1/siren.pb.gw.go +++ b/api/proto/odpf/siren/v1beta1/siren.pb.gw.go @@ -1,12 +1,12 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: odpf/siren/v1/siren.proto +// source: odpf/siren/v1beta1/siren.proto /* -Package sirenv1 is a reverse proxy. +Package sirenv1beta1 is a reverse proxy. It translates gRPC into RESTful JSON APIs. */ -package sirenv1 +package sirenv1beta1 import ( "context" @@ -1496,7 +1496,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/Ping", runtime.WithHTTPPathPattern("/ping")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/Ping", runtime.WithHTTPPathPattern("/ping")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1519,7 +1519,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListProviders", runtime.WithHTTPPathPattern("/providers")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListProviders", runtime.WithHTTPPathPattern("/v1beta1/providers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1542,7 +1542,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateProvider", runtime.WithHTTPPathPattern("/providers")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateProvider", runtime.WithHTTPPathPattern("/v1beta1/providers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1565,7 +1565,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetProvider", runtime.WithHTTPPathPattern("/providers/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetProvider", runtime.WithHTTPPathPattern("/v1beta1/providers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1588,7 +1588,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateProvider", runtime.WithHTTPPathPattern("/providers/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateProvider", runtime.WithHTTPPathPattern("/v1beta1/providers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1611,7 +1611,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteProvider", runtime.WithHTTPPathPattern("/providers/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteProvider", runtime.WithHTTPPathPattern("/v1beta1/providers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1634,7 +1634,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListNamespaces", runtime.WithHTTPPathPattern("/namespaces")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListNamespaces", runtime.WithHTTPPathPattern("/v1beta1/namespaces")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1657,7 +1657,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateNamespace", runtime.WithHTTPPathPattern("/namespaces")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1680,7 +1680,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetNamespace", runtime.WithHTTPPathPattern("/namespaces/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1703,7 +1703,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateNamespace", runtime.WithHTTPPathPattern("/namespaces/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1726,7 +1726,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteNamespace", runtime.WithHTTPPathPattern("/namespaces/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1749,7 +1749,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListReceivers", runtime.WithHTTPPathPattern("/receivers")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListReceivers", runtime.WithHTTPPathPattern("/v1beta1/receivers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1772,7 +1772,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateReceiver", runtime.WithHTTPPathPattern("/receivers")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1795,7 +1795,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetReceiver", runtime.WithHTTPPathPattern("/receivers/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1818,7 +1818,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateReceiver", runtime.WithHTTPPathPattern("/receivers/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1841,7 +1841,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteReceiver", runtime.WithHTTPPathPattern("/receivers/{id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1864,7 +1864,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListAlerts", runtime.WithHTTPPathPattern("/alerts/{provider_name}/{provider_id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListAlerts", runtime.WithHTTPPathPattern("/v1beta1/alerts/{provider_name}/{provider_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1887,7 +1887,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/receivers/{id}/send")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}/send")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1910,7 +1910,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateCortexAlerts", runtime.WithHTTPPathPattern("/alerts/cortex/{provider_id}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateCortexAlerts", runtime.WithHTTPPathPattern("/v1beta1/alerts/cortex/{provider_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1933,7 +1933,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListWorkspaceChannels", runtime.WithHTTPPathPattern("/slackworkspaces/{workspace_name}/channels")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", runtime.WithHTTPPathPattern("/v1beta1/slackworkspaces/{workspace_name}/channels")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1956,7 +1956,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ExchangeCode", runtime.WithHTTPPathPattern("/oauth/slack/token")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ExchangeCode", runtime.WithHTTPPathPattern("/v1beta1/oauth/slack/token")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1979,7 +1979,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetAlertCredentials", runtime.WithHTTPPathPattern("/teams/{team_name}/credentials")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2002,7 +2002,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateAlertCredentials", runtime.WithHTTPPathPattern("/teams/{team_name}/credentials")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2025,7 +2025,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListRules", runtime.WithHTTPPathPattern("/rules")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListRules", runtime.WithHTTPPathPattern("/v1beta1/rules")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2048,7 +2048,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateRule", runtime.WithHTTPPathPattern("/rules")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateRule", runtime.WithHTTPPathPattern("/v1beta1/rules")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2071,7 +2071,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListTemplates", runtime.WithHTTPPathPattern("/templates")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListTemplates", runtime.WithHTTPPathPattern("/v1beta1/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2094,7 +2094,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetTemplateByName", runtime.WithHTTPPathPattern("/templates/{name}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetTemplateByName", runtime.WithHTTPPathPattern("/v1beta1/templates/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2117,7 +2117,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpsertTemplate", runtime.WithHTTPPathPattern("/templates")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpsertTemplate", runtime.WithHTTPPathPattern("/v1beta1/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2140,7 +2140,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteTemplate", runtime.WithHTTPPathPattern("/templates/{name}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteTemplate", runtime.WithHTTPPathPattern("/v1beta1/templates/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2163,7 +2163,7 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1.SirenService/RenderTemplate", runtime.WithHTTPPathPattern("/templates/{name}/render")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/RenderTemplate", runtime.WithHTTPPathPattern("/v1beta1/templates/{name}/render")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2225,7 +2225,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/Ping", runtime.WithHTTPPathPattern("/ping")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/Ping", runtime.WithHTTPPathPattern("/ping")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2245,7 +2245,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListProviders", runtime.WithHTTPPathPattern("/providers")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListProviders", runtime.WithHTTPPathPattern("/v1beta1/providers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2265,7 +2265,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateProvider", runtime.WithHTTPPathPattern("/providers")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateProvider", runtime.WithHTTPPathPattern("/v1beta1/providers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2285,7 +2285,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetProvider", runtime.WithHTTPPathPattern("/providers/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetProvider", runtime.WithHTTPPathPattern("/v1beta1/providers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2305,7 +2305,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateProvider", runtime.WithHTTPPathPattern("/providers/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateProvider", runtime.WithHTTPPathPattern("/v1beta1/providers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2325,7 +2325,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteProvider", runtime.WithHTTPPathPattern("/providers/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteProvider", runtime.WithHTTPPathPattern("/v1beta1/providers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2345,7 +2345,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListNamespaces", runtime.WithHTTPPathPattern("/namespaces")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListNamespaces", runtime.WithHTTPPathPattern("/v1beta1/namespaces")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2365,7 +2365,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateNamespace", runtime.WithHTTPPathPattern("/namespaces")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2385,7 +2385,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetNamespace", runtime.WithHTTPPathPattern("/namespaces/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2405,7 +2405,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateNamespace", runtime.WithHTTPPathPattern("/namespaces/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2425,7 +2425,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteNamespace", runtime.WithHTTPPathPattern("/namespaces/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteNamespace", runtime.WithHTTPPathPattern("/v1beta1/namespaces/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2445,7 +2445,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListReceivers", runtime.WithHTTPPathPattern("/receivers")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListReceivers", runtime.WithHTTPPathPattern("/v1beta1/receivers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2465,7 +2465,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateReceiver", runtime.WithHTTPPathPattern("/receivers")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2485,7 +2485,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetReceiver", runtime.WithHTTPPathPattern("/receivers/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2505,7 +2505,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateReceiver", runtime.WithHTTPPathPattern("/receivers/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2525,7 +2525,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteReceiver", runtime.WithHTTPPathPattern("/receivers/{id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteReceiver", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2545,7 +2545,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListAlerts", runtime.WithHTTPPathPattern("/alerts/{provider_name}/{provider_id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListAlerts", runtime.WithHTTPPathPattern("/v1beta1/alerts/{provider_name}/{provider_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2565,7 +2565,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/receivers/{id}/send")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}/send")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2585,7 +2585,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/CreateCortexAlerts", runtime.WithHTTPPathPattern("/alerts/cortex/{provider_id}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/CreateCortexAlerts", runtime.WithHTTPPathPattern("/v1beta1/alerts/cortex/{provider_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2605,7 +2605,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListWorkspaceChannels", runtime.WithHTTPPathPattern("/slackworkspaces/{workspace_name}/channels")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", runtime.WithHTTPPathPattern("/v1beta1/slackworkspaces/{workspace_name}/channels")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2625,7 +2625,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ExchangeCode", runtime.WithHTTPPathPattern("/oauth/slack/token")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ExchangeCode", runtime.WithHTTPPathPattern("/v1beta1/oauth/slack/token")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2645,7 +2645,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetAlertCredentials", runtime.WithHTTPPathPattern("/teams/{team_name}/credentials")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2665,7 +2665,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateAlertCredentials", runtime.WithHTTPPathPattern("/teams/{team_name}/credentials")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2685,7 +2685,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListRules", runtime.WithHTTPPathPattern("/rules")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListRules", runtime.WithHTTPPathPattern("/v1beta1/rules")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2705,7 +2705,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpdateRule", runtime.WithHTTPPathPattern("/rules")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateRule", runtime.WithHTTPPathPattern("/v1beta1/rules")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2725,7 +2725,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/ListTemplates", runtime.WithHTTPPathPattern("/templates")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListTemplates", runtime.WithHTTPPathPattern("/v1beta1/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2745,7 +2745,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/GetTemplateByName", runtime.WithHTTPPathPattern("/templates/{name}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetTemplateByName", runtime.WithHTTPPathPattern("/v1beta1/templates/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2765,7 +2765,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/UpsertTemplate", runtime.WithHTTPPathPattern("/templates")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpsertTemplate", runtime.WithHTTPPathPattern("/v1beta1/templates")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2785,7 +2785,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/DeleteTemplate", runtime.WithHTTPPathPattern("/templates/{name}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/DeleteTemplate", runtime.WithHTTPPathPattern("/v1beta1/templates/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2805,7 +2805,7 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1.SirenService/RenderTemplate", runtime.WithHTTPPathPattern("/templates/{name}/render")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/RenderTemplate", runtime.WithHTTPPathPattern("/v1beta1/templates/{name}/render")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2827,63 +2827,63 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu var ( pattern_SirenService_Ping_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"ping"}, "")) - pattern_SirenService_ListProviders_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"providers"}, "")) + pattern_SirenService_ListProviders_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "providers"}, "")) - pattern_SirenService_CreateProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"providers"}, "")) + pattern_SirenService_CreateProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "providers"}, "")) - pattern_SirenService_GetProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"providers", "id"}, "")) + pattern_SirenService_GetProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "providers", "id"}, "")) - pattern_SirenService_UpdateProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"providers", "id"}, "")) + pattern_SirenService_UpdateProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "providers", "id"}, "")) - pattern_SirenService_DeleteProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"providers", "id"}, "")) + pattern_SirenService_DeleteProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "providers", "id"}, "")) - pattern_SirenService_ListNamespaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"namespaces"}, "")) + pattern_SirenService_ListNamespaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "namespaces"}, "")) - pattern_SirenService_CreateNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"namespaces"}, "")) + pattern_SirenService_CreateNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "namespaces"}, "")) - pattern_SirenService_GetNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"namespaces", "id"}, "")) + pattern_SirenService_GetNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "namespaces", "id"}, "")) - pattern_SirenService_UpdateNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"namespaces", "id"}, "")) + pattern_SirenService_UpdateNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "namespaces", "id"}, "")) - pattern_SirenService_DeleteNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"namespaces", "id"}, "")) + pattern_SirenService_DeleteNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "namespaces", "id"}, "")) - pattern_SirenService_ListReceivers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"receivers"}, "")) + pattern_SirenService_ListReceivers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "receivers"}, "")) - pattern_SirenService_CreateReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"receivers"}, "")) + pattern_SirenService_CreateReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "receivers"}, "")) - pattern_SirenService_GetReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"receivers", "id"}, "")) + pattern_SirenService_GetReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "receivers", "id"}, "")) - pattern_SirenService_UpdateReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"receivers", "id"}, "")) + pattern_SirenService_UpdateReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "receivers", "id"}, "")) - pattern_SirenService_DeleteReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"receivers", "id"}, "")) + pattern_SirenService_DeleteReceiver_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "receivers", "id"}, "")) - pattern_SirenService_ListAlerts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 1, 0, 4, 1, 5, 2}, []string{"alerts", "provider_name", "provider_id"}, "")) + pattern_SirenService_ListAlerts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "alerts", "provider_name", "provider_id"}, "")) - pattern_SirenService_SendReceiverNotification_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"receivers", "id", "send"}, "")) + pattern_SirenService_SendReceiverNotification_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "receivers", "id", "send"}, "")) - pattern_SirenService_CreateCortexAlerts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"alerts", "cortex", "provider_id"}, "")) + pattern_SirenService_CreateCortexAlerts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "alerts", "cortex", "provider_id"}, "")) - pattern_SirenService_ListWorkspaceChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"slackworkspaces", "workspace_name", "channels"}, "")) + pattern_SirenService_ListWorkspaceChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "slackworkspaces", "workspace_name", "channels"}, "")) - pattern_SirenService_ExchangeCode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"oauth", "slack", "token"}, "")) + pattern_SirenService_ExchangeCode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1beta1", "oauth", "slack", "token"}, "")) - pattern_SirenService_GetAlertCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"teams", "team_name", "credentials"}, "")) + pattern_SirenService_GetAlertCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "teams", "team_name", "credentials"}, "")) - pattern_SirenService_UpdateAlertCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"teams", "team_name", "credentials"}, "")) + pattern_SirenService_UpdateAlertCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "teams", "team_name", "credentials"}, "")) - pattern_SirenService_ListRules_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"rules"}, "")) + pattern_SirenService_ListRules_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "rules"}, "")) - pattern_SirenService_UpdateRule_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"rules"}, "")) + pattern_SirenService_UpdateRule_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "rules"}, "")) - pattern_SirenService_ListTemplates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"templates"}, "")) + pattern_SirenService_ListTemplates_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "templates"}, "")) - pattern_SirenService_GetTemplateByName_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"templates", "name"}, "")) + pattern_SirenService_GetTemplateByName_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "templates", "name"}, "")) - pattern_SirenService_UpsertTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"templates"}, "")) + pattern_SirenService_UpsertTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "templates"}, "")) - pattern_SirenService_DeleteTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"templates", "name"}, "")) + pattern_SirenService_DeleteTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "templates", "name"}, "")) - pattern_SirenService_RenderTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"templates", "name", "render"}, "")) + pattern_SirenService_RenderTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "templates", "name", "render"}, "")) ) var ( diff --git a/api/proto/odpf/siren/v1/siren.pb.validate.go b/api/proto/odpf/siren/v1beta1/siren.pb.validate.go similarity index 99% rename from api/proto/odpf/siren/v1/siren.pb.validate.go rename to api/proto/odpf/siren/v1beta1/siren.pb.validate.go index 18e4d745..4d938787 100644 --- a/api/proto/odpf/siren/v1/siren.pb.validate.go +++ b/api/proto/odpf/siren/v1beta1/siren.pb.validate.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. -// source: odpf/siren/v1/siren.proto +// source: odpf/siren/v1beta1/siren.proto -package sirenv1 +package sirenv1beta1 import ( "bytes" diff --git a/api/proto/odpf/siren/v1/siren_grpc.pb.go b/api/proto/odpf/siren/v1beta1/siren_grpc.pb.go similarity index 89% rename from api/proto/odpf/siren/v1/siren_grpc.pb.go rename to api/proto/odpf/siren/v1beta1/siren_grpc.pb.go index ee629829..da43de05 100644 --- a/api/proto/odpf/siren/v1/siren_grpc.pb.go +++ b/api/proto/odpf/siren/v1beta1/siren_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. -package sirenv1 +package sirenv1beta1 import ( context "context" @@ -61,7 +61,7 @@ func NewSirenServiceClient(cc grpc.ClientConnInterface) SirenServiceClient { func (c *sirenServiceClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) { out := new(PingResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/Ping", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/Ping", in, out, opts...) if err != nil { return nil, err } @@ -70,7 +70,7 @@ func (c *sirenServiceClient) Ping(ctx context.Context, in *PingRequest, opts ... func (c *sirenServiceClient) ListProviders(ctx context.Context, in *ListProvidersRequest, opts ...grpc.CallOption) (*ListProvidersResponse, error) { out := new(ListProvidersResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListProviders", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListProviders", in, out, opts...) if err != nil { return nil, err } @@ -79,7 +79,7 @@ func (c *sirenServiceClient) ListProviders(ctx context.Context, in *ListProvider func (c *sirenServiceClient) CreateProvider(ctx context.Context, in *CreateProviderRequest, opts ...grpc.CallOption) (*Provider, error) { out := new(Provider) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/CreateProvider", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/CreateProvider", in, out, opts...) if err != nil { return nil, err } @@ -88,7 +88,7 @@ func (c *sirenServiceClient) CreateProvider(ctx context.Context, in *CreateProvi func (c *sirenServiceClient) GetProvider(ctx context.Context, in *GetProviderRequest, opts ...grpc.CallOption) (*Provider, error) { out := new(Provider) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/GetProvider", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/GetProvider", in, out, opts...) if err != nil { return nil, err } @@ -97,7 +97,7 @@ func (c *sirenServiceClient) GetProvider(ctx context.Context, in *GetProviderReq func (c *sirenServiceClient) UpdateProvider(ctx context.Context, in *UpdateProviderRequest, opts ...grpc.CallOption) (*Provider, error) { out := new(Provider) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/UpdateProvider", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpdateProvider", in, out, opts...) if err != nil { return nil, err } @@ -106,7 +106,7 @@ func (c *sirenServiceClient) UpdateProvider(ctx context.Context, in *UpdateProvi func (c *sirenServiceClient) DeleteProvider(ctx context.Context, in *DeleteProviderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/DeleteProvider", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/DeleteProvider", in, out, opts...) if err != nil { return nil, err } @@ -115,7 +115,7 @@ func (c *sirenServiceClient) DeleteProvider(ctx context.Context, in *DeleteProvi func (c *sirenServiceClient) ListNamespaces(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListNamespacesResponse, error) { out := new(ListNamespacesResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListNamespaces", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListNamespaces", in, out, opts...) if err != nil { return nil, err } @@ -124,7 +124,7 @@ func (c *sirenServiceClient) ListNamespaces(ctx context.Context, in *emptypb.Emp func (c *sirenServiceClient) CreateNamespace(ctx context.Context, in *CreateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) { out := new(Namespace) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/CreateNamespace", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/CreateNamespace", in, out, opts...) if err != nil { return nil, err } @@ -133,7 +133,7 @@ func (c *sirenServiceClient) CreateNamespace(ctx context.Context, in *CreateName func (c *sirenServiceClient) GetNamespace(ctx context.Context, in *GetNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) { out := new(Namespace) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/GetNamespace", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/GetNamespace", in, out, opts...) if err != nil { return nil, err } @@ -142,7 +142,7 @@ func (c *sirenServiceClient) GetNamespace(ctx context.Context, in *GetNamespaceR func (c *sirenServiceClient) UpdateNamespace(ctx context.Context, in *UpdateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) { out := new(Namespace) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/UpdateNamespace", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpdateNamespace", in, out, opts...) if err != nil { return nil, err } @@ -151,7 +151,7 @@ func (c *sirenServiceClient) UpdateNamespace(ctx context.Context, in *UpdateName func (c *sirenServiceClient) DeleteNamespace(ctx context.Context, in *DeleteNamespaceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/DeleteNamespace", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/DeleteNamespace", in, out, opts...) if err != nil { return nil, err } @@ -160,7 +160,7 @@ func (c *sirenServiceClient) DeleteNamespace(ctx context.Context, in *DeleteName func (c *sirenServiceClient) ListReceivers(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListReceiversResponse, error) { out := new(ListReceiversResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListReceivers", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListReceivers", in, out, opts...) if err != nil { return nil, err } @@ -169,7 +169,7 @@ func (c *sirenServiceClient) ListReceivers(ctx context.Context, in *emptypb.Empt func (c *sirenServiceClient) CreateReceiver(ctx context.Context, in *CreateReceiverRequest, opts ...grpc.CallOption) (*Receiver, error) { out := new(Receiver) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/CreateReceiver", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/CreateReceiver", in, out, opts...) if err != nil { return nil, err } @@ -178,7 +178,7 @@ func (c *sirenServiceClient) CreateReceiver(ctx context.Context, in *CreateRecei func (c *sirenServiceClient) GetReceiver(ctx context.Context, in *GetReceiverRequest, opts ...grpc.CallOption) (*Receiver, error) { out := new(Receiver) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/GetReceiver", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/GetReceiver", in, out, opts...) if err != nil { return nil, err } @@ -187,7 +187,7 @@ func (c *sirenServiceClient) GetReceiver(ctx context.Context, in *GetReceiverReq func (c *sirenServiceClient) UpdateReceiver(ctx context.Context, in *UpdateReceiverRequest, opts ...grpc.CallOption) (*Receiver, error) { out := new(Receiver) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/UpdateReceiver", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpdateReceiver", in, out, opts...) if err != nil { return nil, err } @@ -196,7 +196,7 @@ func (c *sirenServiceClient) UpdateReceiver(ctx context.Context, in *UpdateRecei func (c *sirenServiceClient) DeleteReceiver(ctx context.Context, in *DeleteReceiverRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/DeleteReceiver", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/DeleteReceiver", in, out, opts...) if err != nil { return nil, err } @@ -205,7 +205,7 @@ func (c *sirenServiceClient) DeleteReceiver(ctx context.Context, in *DeleteRecei func (c *sirenServiceClient) ListAlerts(ctx context.Context, in *ListAlertsRequest, opts ...grpc.CallOption) (*Alerts, error) { out := new(Alerts) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListAlerts", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListAlerts", in, out, opts...) if err != nil { return nil, err } @@ -214,7 +214,7 @@ func (c *sirenServiceClient) ListAlerts(ctx context.Context, in *ListAlertsReque func (c *sirenServiceClient) SendReceiverNotification(ctx context.Context, in *SendReceiverNotificationRequest, opts ...grpc.CallOption) (*SendReceiverNotificationResponse, error) { out := new(SendReceiverNotificationResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/SendReceiverNotification", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", in, out, opts...) if err != nil { return nil, err } @@ -223,7 +223,7 @@ func (c *sirenServiceClient) SendReceiverNotification(ctx context.Context, in *S func (c *sirenServiceClient) CreateCortexAlerts(ctx context.Context, in *CreateCortexAlertsRequest, opts ...grpc.CallOption) (*Alerts, error) { out := new(Alerts) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/CreateCortexAlerts", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/CreateCortexAlerts", in, out, opts...) if err != nil { return nil, err } @@ -232,7 +232,7 @@ func (c *sirenServiceClient) CreateCortexAlerts(ctx context.Context, in *CreateC func (c *sirenServiceClient) ListWorkspaceChannels(ctx context.Context, in *ListWorkspaceChannelsRequest, opts ...grpc.CallOption) (*ListWorkspaceChannelsResponse, error) { out := new(ListWorkspaceChannelsResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListWorkspaceChannels", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", in, out, opts...) if err != nil { return nil, err } @@ -241,7 +241,7 @@ func (c *sirenServiceClient) ListWorkspaceChannels(ctx context.Context, in *List func (c *sirenServiceClient) ExchangeCode(ctx context.Context, in *ExchangeCodeRequest, opts ...grpc.CallOption) (*ExchangeCodeResponse, error) { out := new(ExchangeCodeResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ExchangeCode", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ExchangeCode", in, out, opts...) if err != nil { return nil, err } @@ -250,7 +250,7 @@ func (c *sirenServiceClient) ExchangeCode(ctx context.Context, in *ExchangeCodeR func (c *sirenServiceClient) GetAlertCredentials(ctx context.Context, in *GetAlertCredentialsRequest, opts ...grpc.CallOption) (*GetAlertCredentialsResponse, error) { out := new(GetAlertCredentialsResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/GetAlertCredentials", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", in, out, opts...) if err != nil { return nil, err } @@ -259,7 +259,7 @@ func (c *sirenServiceClient) GetAlertCredentials(ctx context.Context, in *GetAle func (c *sirenServiceClient) UpdateAlertCredentials(ctx context.Context, in *UpdateAlertCredentialsRequest, opts ...grpc.CallOption) (*UpdateAlertCredentialsResponse, error) { out := new(UpdateAlertCredentialsResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/UpdateAlertCredentials", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", in, out, opts...) if err != nil { return nil, err } @@ -268,7 +268,7 @@ func (c *sirenServiceClient) UpdateAlertCredentials(ctx context.Context, in *Upd func (c *sirenServiceClient) ListRules(ctx context.Context, in *ListRulesRequest, opts ...grpc.CallOption) (*ListRulesResponse, error) { out := new(ListRulesResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListRules", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListRules", in, out, opts...) if err != nil { return nil, err } @@ -277,7 +277,7 @@ func (c *sirenServiceClient) ListRules(ctx context.Context, in *ListRulesRequest func (c *sirenServiceClient) UpdateRule(ctx context.Context, in *UpdateRuleRequest, opts ...grpc.CallOption) (*UpdateRuleResponse, error) { out := new(UpdateRuleResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/UpdateRule", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpdateRule", in, out, opts...) if err != nil { return nil, err } @@ -286,7 +286,7 @@ func (c *sirenServiceClient) UpdateRule(ctx context.Context, in *UpdateRuleReque func (c *sirenServiceClient) ListTemplates(ctx context.Context, in *ListTemplatesRequest, opts ...grpc.CallOption) (*ListTemplatesResponse, error) { out := new(ListTemplatesResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/ListTemplates", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListTemplates", in, out, opts...) if err != nil { return nil, err } @@ -295,7 +295,7 @@ func (c *sirenServiceClient) ListTemplates(ctx context.Context, in *ListTemplate func (c *sirenServiceClient) GetTemplateByName(ctx context.Context, in *GetTemplateByNameRequest, opts ...grpc.CallOption) (*TemplateResponse, error) { out := new(TemplateResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/GetTemplateByName", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/GetTemplateByName", in, out, opts...) if err != nil { return nil, err } @@ -304,7 +304,7 @@ func (c *sirenServiceClient) GetTemplateByName(ctx context.Context, in *GetTempl func (c *sirenServiceClient) UpsertTemplate(ctx context.Context, in *UpsertTemplateRequest, opts ...grpc.CallOption) (*TemplateResponse, error) { out := new(TemplateResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/UpsertTemplate", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpsertTemplate", in, out, opts...) if err != nil { return nil, err } @@ -313,7 +313,7 @@ func (c *sirenServiceClient) UpsertTemplate(ctx context.Context, in *UpsertTempl func (c *sirenServiceClient) DeleteTemplate(ctx context.Context, in *DeleteTemplateRequest, opts ...grpc.CallOption) (*DeleteTemplateResponse, error) { out := new(DeleteTemplateResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/DeleteTemplate", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/DeleteTemplate", in, out, opts...) if err != nil { return nil, err } @@ -322,7 +322,7 @@ func (c *sirenServiceClient) DeleteTemplate(ctx context.Context, in *DeleteTempl func (c *sirenServiceClient) RenderTemplate(ctx context.Context, in *RenderTemplateRequest, opts ...grpc.CallOption) (*RenderTemplateResponse, error) { out := new(RenderTemplateResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1.SirenService/RenderTemplate", in, out, opts...) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/RenderTemplate", in, out, opts...) if err != nil { return nil, err } @@ -483,7 +483,7 @@ func _SirenService_Ping_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/Ping", + FullMethod: "/odpf.siren.v1beta1.SirenService/Ping", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).Ping(ctx, req.(*PingRequest)) @@ -501,7 +501,7 @@ func _SirenService_ListProviders_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListProviders", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListProviders", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListProviders(ctx, req.(*ListProvidersRequest)) @@ -519,7 +519,7 @@ func _SirenService_CreateProvider_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/CreateProvider", + FullMethod: "/odpf.siren.v1beta1.SirenService/CreateProvider", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).CreateProvider(ctx, req.(*CreateProviderRequest)) @@ -537,7 +537,7 @@ func _SirenService_GetProvider_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/GetProvider", + FullMethod: "/odpf.siren.v1beta1.SirenService/GetProvider", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).GetProvider(ctx, req.(*GetProviderRequest)) @@ -555,7 +555,7 @@ func _SirenService_UpdateProvider_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/UpdateProvider", + FullMethod: "/odpf.siren.v1beta1.SirenService/UpdateProvider", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).UpdateProvider(ctx, req.(*UpdateProviderRequest)) @@ -573,7 +573,7 @@ func _SirenService_DeleteProvider_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/DeleteProvider", + FullMethod: "/odpf.siren.v1beta1.SirenService/DeleteProvider", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).DeleteProvider(ctx, req.(*DeleteProviderRequest)) @@ -591,7 +591,7 @@ func _SirenService_ListNamespaces_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListNamespaces", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListNamespaces", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListNamespaces(ctx, req.(*emptypb.Empty)) @@ -609,7 +609,7 @@ func _SirenService_CreateNamespace_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/CreateNamespace", + FullMethod: "/odpf.siren.v1beta1.SirenService/CreateNamespace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).CreateNamespace(ctx, req.(*CreateNamespaceRequest)) @@ -627,7 +627,7 @@ func _SirenService_GetNamespace_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/GetNamespace", + FullMethod: "/odpf.siren.v1beta1.SirenService/GetNamespace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).GetNamespace(ctx, req.(*GetNamespaceRequest)) @@ -645,7 +645,7 @@ func _SirenService_UpdateNamespace_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/UpdateNamespace", + FullMethod: "/odpf.siren.v1beta1.SirenService/UpdateNamespace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).UpdateNamespace(ctx, req.(*UpdateNamespaceRequest)) @@ -663,7 +663,7 @@ func _SirenService_DeleteNamespace_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/DeleteNamespace", + FullMethod: "/odpf.siren.v1beta1.SirenService/DeleteNamespace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).DeleteNamespace(ctx, req.(*DeleteNamespaceRequest)) @@ -681,7 +681,7 @@ func _SirenService_ListReceivers_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListReceivers", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListReceivers", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListReceivers(ctx, req.(*emptypb.Empty)) @@ -699,7 +699,7 @@ func _SirenService_CreateReceiver_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/CreateReceiver", + FullMethod: "/odpf.siren.v1beta1.SirenService/CreateReceiver", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).CreateReceiver(ctx, req.(*CreateReceiverRequest)) @@ -717,7 +717,7 @@ func _SirenService_GetReceiver_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/GetReceiver", + FullMethod: "/odpf.siren.v1beta1.SirenService/GetReceiver", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).GetReceiver(ctx, req.(*GetReceiverRequest)) @@ -735,7 +735,7 @@ func _SirenService_UpdateReceiver_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/UpdateReceiver", + FullMethod: "/odpf.siren.v1beta1.SirenService/UpdateReceiver", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).UpdateReceiver(ctx, req.(*UpdateReceiverRequest)) @@ -753,7 +753,7 @@ func _SirenService_DeleteReceiver_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/DeleteReceiver", + FullMethod: "/odpf.siren.v1beta1.SirenService/DeleteReceiver", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).DeleteReceiver(ctx, req.(*DeleteReceiverRequest)) @@ -771,7 +771,7 @@ func _SirenService_ListAlerts_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListAlerts", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListAlerts", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListAlerts(ctx, req.(*ListAlertsRequest)) @@ -789,7 +789,7 @@ func _SirenService_SendReceiverNotification_Handler(srv interface{}, ctx context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/SendReceiverNotification", + FullMethod: "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).SendReceiverNotification(ctx, req.(*SendReceiverNotificationRequest)) @@ -807,7 +807,7 @@ func _SirenService_CreateCortexAlerts_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/CreateCortexAlerts", + FullMethod: "/odpf.siren.v1beta1.SirenService/CreateCortexAlerts", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).CreateCortexAlerts(ctx, req.(*CreateCortexAlertsRequest)) @@ -825,7 +825,7 @@ func _SirenService_ListWorkspaceChannels_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListWorkspaceChannels", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListWorkspaceChannels(ctx, req.(*ListWorkspaceChannelsRequest)) @@ -843,7 +843,7 @@ func _SirenService_ExchangeCode_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ExchangeCode", + FullMethod: "/odpf.siren.v1beta1.SirenService/ExchangeCode", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ExchangeCode(ctx, req.(*ExchangeCodeRequest)) @@ -861,7 +861,7 @@ func _SirenService_GetAlertCredentials_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/GetAlertCredentials", + FullMethod: "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).GetAlertCredentials(ctx, req.(*GetAlertCredentialsRequest)) @@ -879,7 +879,7 @@ func _SirenService_UpdateAlertCredentials_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/UpdateAlertCredentials", + FullMethod: "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).UpdateAlertCredentials(ctx, req.(*UpdateAlertCredentialsRequest)) @@ -897,7 +897,7 @@ func _SirenService_ListRules_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListRules", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListRules", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListRules(ctx, req.(*ListRulesRequest)) @@ -915,7 +915,7 @@ func _SirenService_UpdateRule_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/UpdateRule", + FullMethod: "/odpf.siren.v1beta1.SirenService/UpdateRule", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).UpdateRule(ctx, req.(*UpdateRuleRequest)) @@ -933,7 +933,7 @@ func _SirenService_ListTemplates_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/ListTemplates", + FullMethod: "/odpf.siren.v1beta1.SirenService/ListTemplates", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).ListTemplates(ctx, req.(*ListTemplatesRequest)) @@ -951,7 +951,7 @@ func _SirenService_GetTemplateByName_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/GetTemplateByName", + FullMethod: "/odpf.siren.v1beta1.SirenService/GetTemplateByName", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).GetTemplateByName(ctx, req.(*GetTemplateByNameRequest)) @@ -969,7 +969,7 @@ func _SirenService_UpsertTemplate_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/UpsertTemplate", + FullMethod: "/odpf.siren.v1beta1.SirenService/UpsertTemplate", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).UpsertTemplate(ctx, req.(*UpsertTemplateRequest)) @@ -987,7 +987,7 @@ func _SirenService_DeleteTemplate_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/DeleteTemplate", + FullMethod: "/odpf.siren.v1beta1.SirenService/DeleteTemplate", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).DeleteTemplate(ctx, req.(*DeleteTemplateRequest)) @@ -1005,7 +1005,7 @@ func _SirenService_RenderTemplate_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.siren.v1.SirenService/RenderTemplate", + FullMethod: "/odpf.siren.v1beta1.SirenService/RenderTemplate", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SirenServiceServer).RenderTemplate(ctx, req.(*RenderTemplateRequest)) @@ -1017,7 +1017,7 @@ func _SirenService_RenderTemplate_Handler(srv interface{}, ctx context.Context, // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) var SirenService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "odpf.siren.v1.SirenService", + ServiceName: "odpf.siren.v1beta1.SirenService", HandlerType: (*SirenServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -1142,5 +1142,5 @@ var SirenService_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "odpf/siren/v1/siren.proto", + Metadata: "odpf/siren/v1beta1/siren.proto", } diff --git a/app/server.go b/app/server.go index a36fcaea..e5f21093 100644 --- a/app/server.go +++ b/app/server.go @@ -19,7 +19,7 @@ import ( grpc_validator "github.com/grpc-ecosystem/go-grpc-middleware/validator" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" v1 "github.com/odpf/siren/api/handlers/v1" - pb "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/logger" "github.com/odpf/siren/metric" "golang.org/x/net/http2" @@ -86,7 +86,7 @@ func RunServer(c *domain.Config) error { )), } grpcServer := grpc.NewServer(opts...) - pb.RegisterSirenServiceServer(grpcServer, v1.NewGRPCServer(services, nr, logger)) + sirenv1beta1.RegisterSirenServiceServer(grpcServer, v1.NewGRPCServer(services, nr, logger)) // init http proxy timeoutGrpcDialCtx, grpcDialCancel := context.WithTimeout(context.Background(), time.Second*5) @@ -114,7 +114,7 @@ func RunServer(c *domain.Config) error { runtimeCtx, runtimeCancel := context.WithCancel(context.Background()) defer runtimeCancel() - if err := pb.RegisterSirenServiceHandler(runtimeCtx, gwmux, grpcConn); err != nil { + if err := sirenv1beta1.RegisterSirenServiceHandler(runtimeCtx, gwmux, grpcConn); err != nil { return err } diff --git a/cmd/alert.go b/cmd/alert.go index 58ad9ce5..ddc36ff0 100644 --- a/cmd/alert.go +++ b/cmd/alert.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/spf13/cobra" ) @@ -59,7 +59,7 @@ func listAlertsCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.ListAlerts(ctx, &sirenv1.ListAlertsRequest{ + res, err := client.ListAlerts(ctx, &sirenv1beta1.ListAlertsRequest{ ProviderName: providerName, ProviderId: providerId, ResourceName: resouceName, diff --git a/cmd/grpc.go b/cmd/grpc.go index d27869af..c8016be7 100644 --- a/cmd/grpc.go +++ b/cmd/grpc.go @@ -4,7 +4,7 @@ import ( "context" "time" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "google.golang.org/grpc" ) @@ -17,7 +17,7 @@ func createConnection(ctx context.Context, host string) (*grpc.ClientConn, error return grpc.DialContext(ctx, host, opts...) } -func createClient(ctx context.Context, host string) (sirenv1.SirenServiceClient, func(), error) { +func createClient(ctx context.Context, host string) (sirenv1beta1.SirenServiceClient, func(), error) { dialTimeoutCtx, dialCancel := context.WithTimeout(ctx, time.Second*2) conn, err := createConnection(dialTimeoutCtx, host) if err != nil { @@ -30,6 +30,6 @@ func createClient(ctx context.Context, host string) (sirenv1.SirenServiceClient, conn.Close() } - client := sirenv1.NewSirenServiceClient(conn) + client := sirenv1beta1.NewSirenServiceClient(conn) return client, cancel, nil } diff --git a/cmd/namespace.go b/cmd/namespace.go index d95f299c..33c7d03b 100644 --- a/cmd/namespace.go +++ b/cmd/namespace.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" "google.golang.org/protobuf/types/known/emptypb" @@ -111,7 +111,7 @@ func createNamespaceCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.CreateNamespace(ctx, &sirenv1.CreateNamespaceRequest{ + res, err := client.CreateNamespace(ctx, &sirenv1beta1.CreateNamespaceRequest{ Provider: namespaceConfig.Provider, Urn: namespaceConfig.Urn, Name: namespaceConfig.Name, @@ -165,7 +165,7 @@ func getNamespaceCmd(c *configuration) *cobra.Command { return fmt.Errorf("invalid namespace id: %v", err) } - res, err := client.GetNamespace(ctx, &sirenv1.GetNamespaceRequest{ + res, err := client.GetNamespace(ctx, &sirenv1beta1.GetNamespaceRequest{ Id: uint64(id), }) if err != nil { @@ -224,7 +224,7 @@ func updateNamespaceCmd(c *configuration) *cobra.Command { } defer cancel() - _, err = client.UpdateNamespace(ctx, &sirenv1.UpdateNamespaceRequest{ + _, err = client.UpdateNamespace(ctx, &sirenv1beta1.UpdateNamespaceRequest{ Id: id, Provider: namespaceConfig.Provider, Name: namespaceConfig.Name, @@ -273,7 +273,7 @@ func deleteNamespaceCmd(c *configuration) *cobra.Command { return fmt.Errorf("invalid namespace id: %v", err) } - _, err = client.DeleteNamespace(ctx, &sirenv1.DeleteNamespaceRequest{ + _, err = client.DeleteNamespace(ctx, &sirenv1beta1.DeleteNamespaceRequest{ Id: uint64(id), }) if err != nil { diff --git a/cmd/provider.go b/cmd/provider.go index 8e64395b..fdd2840e 100644 --- a/cmd/provider.go +++ b/cmd/provider.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" "google.golang.org/protobuf/types/known/structpb" @@ -55,7 +55,7 @@ func listProvidersCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.ListProviders(ctx, &sirenv1.ListProvidersRequest{}) + res, err := client.ListProviders(ctx, &sirenv1beta1.ListProvidersRequest{}) if err != nil { return err } @@ -111,7 +111,7 @@ func createProviderCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.CreateProvider(ctx, &sirenv1.CreateProviderRequest{ + res, err := client.CreateProvider(ctx, &sirenv1beta1.CreateProviderRequest{ Host: providerConfig.Host, Urn: providerConfig.Urn, Name: providerConfig.Name, @@ -166,7 +166,7 @@ func getProviderCmd(c *configuration) *cobra.Command { return fmt.Errorf("invalid provider id: %v", err) } - res, err := client.GetProvider(ctx, &sirenv1.GetProviderRequest{ + res, err := client.GetProvider(ctx, &sirenv1beta1.GetProviderRequest{ Id: uint64(id), }) if err != nil { @@ -227,7 +227,7 @@ func updateProviderCmd(c *configuration) *cobra.Command { } defer cancel() - _, err = client.UpdateProvider(ctx, &sirenv1.UpdateProviderRequest{ + _, err = client.UpdateProvider(ctx, &sirenv1beta1.UpdateProviderRequest{ Id: id, Host: providerConfig.Host, Name: providerConfig.Name, @@ -277,7 +277,7 @@ func deleteProviderCmd(c *configuration) *cobra.Command { return fmt.Errorf("invalid provider id: %v", err) } - _, err = client.DeleteProvider(ctx, &sirenv1.DeleteProviderRequest{ + _, err = client.DeleteProvider(ctx, &sirenv1beta1.DeleteProviderRequest{ Id: uint64(id), }) if err != nil { diff --git a/cmd/receiver.go b/cmd/receiver.go index d90936d7..f3edc95d 100644 --- a/cmd/receiver.go +++ b/cmd/receiver.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" "google.golang.org/protobuf/types/known/emptypb" @@ -112,7 +112,7 @@ func createReceiverCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.CreateReceiver(ctx, &sirenv1.CreateReceiverRequest{ + res, err := client.CreateReceiver(ctx, &sirenv1beta1.CreateReceiverRequest{ Name: receiverConfig.Name, Type: receiverConfig.Type, Configurations: grpcConfigurations, @@ -165,7 +165,7 @@ func getReceiverCmd(c *configuration) *cobra.Command { return fmt.Errorf("invalid receiver id: %v", err) } - res, err := client.GetReceiver(ctx, &sirenv1.GetReceiverRequest{ + res, err := client.GetReceiver(ctx, &sirenv1beta1.GetReceiverRequest{ Id: uint64(id), }) if err != nil { @@ -225,7 +225,7 @@ func updateReceiverCmd(c *configuration) *cobra.Command { } defer cancel() - _, err = client.UpdateReceiver(ctx, &sirenv1.UpdateReceiverRequest{ + _, err = client.UpdateReceiver(ctx, &sirenv1beta1.UpdateReceiverRequest{ Id: id, Name: receiverConfig.Name, Type: receiverConfig.Type, @@ -274,7 +274,7 @@ func deleteReceiverCmd(c *configuration) *cobra.Command { return fmt.Errorf("invalid receiver id: %v", err) } - _, err = client.DeleteReceiver(ctx, &sirenv1.DeleteReceiverRequest{ + _, err = client.DeleteReceiver(ctx, &sirenv1beta1.DeleteReceiverRequest{ Id: uint64(id), }) if err != nil { @@ -302,7 +302,7 @@ func sendReceiverNotificationCmd(c *configuration) *cobra.Command { "group:core": "true", }, RunE: func(cmd *cobra.Command, args []string) error { - var notificationConfig sirenv1.SendReceiverNotificationRequest + var notificationConfig sirenv1beta1.SendReceiverNotificationRequest ctx := context.Background() client, cancel, err := createClient(ctx, c.Host) @@ -311,7 +311,7 @@ func sendReceiverNotificationCmd(c *configuration) *cobra.Command { } defer cancel() - receiver, err := client.GetReceiver(ctx, &sirenv1.GetReceiverRequest{ + receiver, err := client.GetReceiver(ctx, &sirenv1beta1.GetReceiverRequest{ Id: id, }) if err != nil { @@ -321,7 +321,7 @@ func sendReceiverNotificationCmd(c *configuration) *cobra.Command { notificationConfig.Id = id switch receiver.Type { case "slack": - var slackConfig *sirenv1.SendReceiverNotificationRequest_Slack + var slackConfig *sirenv1beta1.SendReceiverNotificationRequest_Slack if err := parseFile(filePath, &slackConfig); err != nil { return err } diff --git a/cmd/rule.go b/cmd/rule.go index 2e13e3e7..7e681517 100644 --- a/cmd/rule.go +++ b/cmd/rule.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" ) @@ -57,7 +57,7 @@ func listRulesCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.ListRules(ctx, &sirenv1.ListRulesRequest{ + res, err := client.ListRules(ctx, &sirenv1beta1.ListRulesRequest{ Name: name, GroupName: groupName, Namespace: namespace, @@ -123,9 +123,9 @@ func updateRuleCmd(c *configuration) *cobra.Command { } defer cancel() - variables := make([]*sirenv1.Variables, 0) + variables := make([]*sirenv1beta1.Variables, 0) for _, variable := range ruleConfig.Variables { - variables = append(variables, &sirenv1.Variables{ + variables = append(variables, &sirenv1beta1.Variables{ Name: variable.Name, Type: variable.Type, Value: variable.Value, @@ -133,7 +133,7 @@ func updateRuleCmd(c *configuration) *cobra.Command { }) } - _, err = client.UpdateRule(ctx, &sirenv1.UpdateRuleRequest{ + _, err = client.UpdateRule(ctx, &sirenv1beta1.UpdateRuleRequest{ Enabled: ruleConfig.Enabled, GroupName: ruleConfig.GroupName, Namespace: ruleConfig.Namespace, diff --git a/cmd/template.go b/cmd/template.go index d113602e..fce30fe2 100644 --- a/cmd/template.go +++ b/cmd/template.go @@ -8,7 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" ) @@ -56,7 +56,7 @@ func listTemplatesCmd(c *configuration) *cobra.Command { } defer cancel() - res, err := client.ListTemplates(ctx, &sirenv1.ListTemplatesRequest{ + res, err := client.ListTemplates(ctx, &sirenv1beta1.ListTemplatesRequest{ Tag: tag, }) if err != nil { @@ -112,9 +112,9 @@ func upsertTemplateCmd(c *configuration) *cobra.Command { } defer cancel() - variables := make([]*sirenv1.TemplateVariables, 0) + variables := make([]*sirenv1beta1.TemplateVariables, 0) for _, variable := range templateConfig.Variables { - variables = append(variables, &sirenv1.TemplateVariables{ + variables = append(variables, &sirenv1beta1.TemplateVariables{ Name: variable.Name, Type: variable.Type, Default: variable.Default, @@ -122,7 +122,7 @@ func upsertTemplateCmd(c *configuration) *cobra.Command { }) } - res, err := client.UpsertTemplate(ctx, &sirenv1.UpsertTemplateRequest{ + res, err := client.UpsertTemplate(ctx, &sirenv1beta1.UpsertTemplateRequest{ Name: templateConfig.Name, Body: templateConfig.Body, Tags: templateConfig.Tags, @@ -171,7 +171,7 @@ func getTemplateCmd(c *configuration) *cobra.Command { defer cancel() name := args[0] - res, err := client.GetTemplateByName(ctx, &sirenv1.GetTemplateByNameRequest{ + res, err := client.GetTemplateByName(ctx, &sirenv1beta1.GetTemplateByNameRequest{ Name: name, }) if err != nil { @@ -232,7 +232,7 @@ func deleteTemplateCmd(c *configuration) *cobra.Command { defer cancel() name := args[0] - _, err = client.DeleteTemplate(ctx, &sirenv1.DeleteTemplateRequest{ + _, err = client.DeleteTemplate(ctx, &sirenv1beta1.DeleteTemplateRequest{ Name: name, }) if err != nil { @@ -273,7 +273,7 @@ func renderTemplateCmd(c *configuration) *cobra.Command { } defer cancel() - template, err := client.RenderTemplate(ctx, &sirenv1.RenderTemplateRequest{ + template, err := client.RenderTemplate(ctx, &sirenv1beta1.RenderTemplateRequest{ Name: name, Variables: variableConfig.Variables, }) diff --git a/cmd/upload.go b/cmd/upload.go index c8b6830c..28d4f856 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -4,7 +4,7 @@ import ( "context" "errors" "fmt" - sirenv1 "github.com/odpf/siren/api/proto/odpf/siren/v1" + sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" "github.com/odpf/siren/domain" "github.com/spf13/cobra" "gopkg.in/yaml.v3" @@ -79,9 +79,9 @@ func uploadCmd(c *configuration) *cobra.Command { return err } switch obj := result.(type) { - case *sirenv1.Template: + case *sirenv1beta1.Template: printTemplate(obj) - case []*sirenv1.Rule: + case []*sirenv1beta1.Rule: printRules(obj) default: return errors.New("unknown response") @@ -93,10 +93,10 @@ func uploadCmd(c *configuration) *cobra.Command { //Service talks to siren's HTTP Client type Service struct { - SirenClient sirenv1.SirenServiceClient + SirenClient sirenv1beta1.SirenServiceClient } -func UploaderService(siren sirenv1.SirenServiceClient) *Service { +func UploaderService(siren sirenv1beta1.SirenServiceClient) *Service { return &Service{ SirenClient: siren, } @@ -124,7 +124,7 @@ func (s Service) Upload(fileName string) (interface{}, error) { } } -func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { +func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1beta1.Template, error) { var t template err := yaml.Unmarshal(yamlFile, &t) if err != nil { @@ -135,9 +135,9 @@ func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { return nil, err } - variables := make([]*sirenv1.TemplateVariables, 0) + variables := make([]*sirenv1beta1.TemplateVariables, 0) for _, variable := range t.Variables { - variables = append(variables, &sirenv1.TemplateVariables{ + variables = append(variables, &sirenv1beta1.TemplateVariables{ Name: variable.Name, Type: variable.Type, Default: variable.Default, @@ -145,7 +145,7 @@ func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { }) } - template, err := s.SirenClient.UpsertTemplate(context.Background(), &sirenv1.UpsertTemplateRequest{ + template, err := s.SirenClient.UpsertTemplate(context.Background(), &sirenv1beta1.UpsertTemplateRequest{ Name: t.Name, Body: string(body), Variables: variables, @@ -156,7 +156,7 @@ func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { } //update associated rules for this template - data, err := s.SirenClient.ListRules(context.Background(), &sirenv1.ListRulesRequest{ + data, err := s.SirenClient.ListRules(context.Background(), &sirenv1beta1.ListRulesRequest{ Template: t.Name, }) if err != nil { @@ -167,9 +167,9 @@ func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { for i := 0; i < len(associatedRules); i++ { associatedRule := associatedRules[i] - var updatedVariables []*sirenv1.Variables + var updatedVariables []*sirenv1beta1.Variables for j := 0; j < len(associatedRules[i].Variables); j++ { - ruleVar := &sirenv1.Variables{ + ruleVar := &sirenv1beta1.Variables{ Name: associatedRules[i].Variables[j].Name, Value: associatedRules[i].Variables[j].Value, Type: associatedRules[i].Variables[j].Type, @@ -178,7 +178,7 @@ func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { updatedVariables = append(updatedVariables, ruleVar) } - _, err := s.SirenClient.UpdateRule(context.Background(), &sirenv1.UpdateRuleRequest{ + _, err := s.SirenClient.UpdateRule(context.Background(), &sirenv1beta1.UpdateRuleRequest{ GroupName: associatedRule.GroupName, Namespace: associatedRule.Namespace, Template: associatedRule.Template, @@ -196,18 +196,18 @@ func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1.Template, error) { return template.Template, nil } -func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { +func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1beta1.Rule, error) { var yamlBody ruleYaml err := yaml.Unmarshal(yamlFile, &yamlBody) if err != nil { return nil, err } - var successfullyUpsertedRules []*sirenv1.Rule + var successfullyUpsertedRules []*sirenv1beta1.Rule for groupName, v := range yamlBody.Rules { - var ruleVariables []*sirenv1.Variables + var ruleVariables []*sirenv1beta1.Variables for i := 0; i < len(v.Variables); i++ { - v := &sirenv1.Variables{ + v := &sirenv1beta1.Variables{ Name: v.Variables[i].Name, Value: v.Variables[i].Value, } @@ -218,7 +218,7 @@ func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { return nil, errors.New("provider namespace is required") } - data, err := s.SirenClient.ListProviders(context.Background(), &sirenv1.ListProvidersRequest{ + data, err := s.SirenClient.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{ Urn: yamlBody.ProviderNamespace, }) if err != nil { @@ -230,7 +230,7 @@ func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { return nil, errors.New(fmt.Sprintf("no provider found with urn: %s", yamlBody.ProviderNamespace)) } - payload := &sirenv1.UpdateRuleRequest{ + payload := &sirenv1beta1.UpdateRuleRequest{ GroupName: groupName, Namespace: yamlBody.Namespace, Template: v.Template, @@ -253,7 +253,7 @@ func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1.Rule, error) { return successfullyUpsertedRules, nil } -func printRules(rules []*sirenv1.Rule) { +func printRules(rules []*sirenv1beta1.Rule) { for i := 0; i < len(rules); i++ { fmt.Println("Upserted Rule") fmt.Println("ID:", rules[i].Id) @@ -268,7 +268,7 @@ func printRules(rules []*sirenv1.Rule) { } } -func printTemplate(template *sirenv1.Template) { +func printTemplate(template *sirenv1beta1.Template) { if template == nil { return } From 6df0fdb79a7056014edb472c0e2768089ef4e233 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Tue, 16 Nov 2021 09:23:08 +0530 Subject: [PATCH 15/18] refactor: remove unwanted code --- api/handlers/v1/grpc.go | 92 - api/handlers/v1/grpc_test.go | 298 -- api/proto/odpf/siren/v1beta1/siren.pb.go | 2840 ++++++----------- api/proto/odpf/siren/v1beta1/siren.pb.gw.go | 652 +--- .../odpf/siren/v1beta1/siren.pb.validate.go | 2252 +++---------- api/proto/odpf/siren/v1beta1/siren_grpc.pb.go | 216 +- pkg/slackworkspace/model.go | 19 - pkg/slackworkspace/repository.go | 36 - pkg/slackworkspace/repository_test.go | 54 - pkg/slackworkspace/service.go | 36 - pkg/slackworkspace/service_test.go | 65 - pkg/slackworkspace/slackrepository_mock.go | 35 - service/container.go | 41 +- 13 files changed, 1511 insertions(+), 5125 deletions(-) delete mode 100644 api/handlers/v1/grpc_test.go delete mode 100644 pkg/slackworkspace/model.go delete mode 100644 pkg/slackworkspace/repository.go delete mode 100644 pkg/slackworkspace/repository_test.go delete mode 100644 pkg/slackworkspace/service.go delete mode 100644 pkg/slackworkspace/service_test.go delete mode 100644 pkg/slackworkspace/slackrepository_mock.go diff --git a/api/handlers/v1/grpc.go b/api/handlers/v1/grpc.go index 1e81e88c..002abbb7 100644 --- a/api/handlers/v1/grpc.go +++ b/api/handlers/v1/grpc.go @@ -4,12 +4,8 @@ import ( "context" "github.com/newrelic/go-agent/v3/newrelic" sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" - "github.com/odpf/siren/domain" - "github.com/odpf/siren/helper" "github.com/odpf/siren/service" "go.uber.org/zap" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) type GRPCServer struct { @@ -30,91 +26,3 @@ func NewGRPCServer(container *service.Container, nr *newrelic.Application, logge func (s *GRPCServer) Ping(ctx context.Context, in *sirenv1beta1.PingRequest) (*sirenv1beta1.PingResponse, error) { return &sirenv1beta1.PingResponse{Message: "Pong"}, nil } - -func (s *GRPCServer) ListWorkspaceChannels(_ context.Context, req *sirenv1beta1.ListWorkspaceChannelsRequest) (*sirenv1beta1.ListWorkspaceChannelsResponse, error) { - workspace := req.GetWorkspaceName() - workspaces, err := s.container.SlackWorkspaceService.GetChannels(workspace) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - res := &sirenv1beta1.ListWorkspaceChannelsResponse{ - Data: make([]*sirenv1beta1.SlackWorkspace, 0), - } - for _, workspace := range workspaces { - item := &sirenv1beta1.SlackWorkspace{ - Id: workspace.ID, - Name: workspace.Name, - } - res.Data = append(res.Data, item) - } - return res, nil -} - -func (s *GRPCServer) ExchangeCode(_ context.Context, req *sirenv1beta1.ExchangeCodeRequest) (*sirenv1beta1.ExchangeCodeResponse, error) { - code := req.GetCode() - workspace := req.GetWorkspace() - result, err := s.container.CodeExchangeService.Exchange(domain.OAuthPayload{ - Code: code, - Workspace: workspace, - }) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - res := &sirenv1beta1.ExchangeCodeResponse{ - Ok: result.OK, - } - return res, nil -} - -func (s *GRPCServer) GetAlertCredentials(_ context.Context, req *sirenv1beta1.GetAlertCredentialsRequest) (*sirenv1beta1.GetAlertCredentialsResponse, error) { - teamName := req.GetTeamName() - alertCredential, err := s.container.AlertmanagerService.Get(teamName) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - res := &sirenv1beta1.GetAlertCredentialsResponse{ - Entity: alertCredential.Entity, - TeamName: alertCredential.TeamName, - PagerdutyCredentials: alertCredential.PagerdutyCredentials, - SlackConfig: &sirenv1beta1.SlackConfig{ - Critical: &sirenv1beta1.Critical{Channel: alertCredential.SlackConfig.Critical.Channel}, - Warning: &sirenv1beta1.Warning{Channel: alertCredential.SlackConfig.Warning.Channel}, - }, - } - return res, nil -} - -func (s *GRPCServer) UpdateAlertCredentials(_ context.Context, req *sirenv1beta1.UpdateAlertCredentialsRequest) (*sirenv1beta1.UpdateAlertCredentialsResponse, error) { - entity := req.GetEntity() - teamName := req.GetTeamName() - pagerdutyCredential := req.GetPagerdutyCredentials() - criticalChannel := req.GetSlackConfig().GetCritical().GetChannel() - warningChannel := req.GetSlackConfig().GetWarning().GetChannel() - - if entity == "" { - return nil, status.Errorf(codes.InvalidArgument, "entity cannot be empty") - } - if pagerdutyCredential == "" { - return nil, status.Errorf(codes.InvalidArgument, "pagerduty credential cannot be empty") - } - - payload := domain.AlertCredential{ - Entity: entity, - TeamName: teamName, - PagerdutyCredentials: pagerdutyCredential, - SlackConfig: domain.SlackConfig{ - Critical: domain.SlackCredential{ - Channel: criticalChannel, - }, - Warning: domain.SlackCredential{ - Channel: warningChannel, - }, - }, - } - - err := s.container.AlertmanagerService.Upsert(payload) - if err != nil { - return nil, helper.GRPCLogError(s.logger, codes.Internal, err) - } - return &sirenv1beta1.UpdateAlertCredentialsResponse{}, nil -} diff --git a/api/handlers/v1/grpc_test.go b/api/handlers/v1/grpc_test.go deleted file mode 100644 index fb255531..00000000 --- a/api/handlers/v1/grpc_test.go +++ /dev/null @@ -1,298 +0,0 @@ -package v1 - -import ( - "context" - "errors" - sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" - "github.com/odpf/siren/domain" - "github.com/odpf/siren/mocks" - "github.com/odpf/siren/service" - "github.com/stretchr/testify/assert" - "go.uber.org/zap/zaptest" - "testing" -) - -func TestGRPCServer_ListWorkspaceChannels(t *testing.T) { - t.Run("should return workspace data object", func(t *testing.T) { - mockedWorkspaceService := &mocks.WorkspaceService{} - dummyResult := []domain.Channel{ - {Name: "foo", ID: "1"}, - {Name: "bar", ID: "2"}, - } - dummyGRPCServer := GRPCServer{container: &service.Container{ - SlackWorkspaceService: mockedWorkspaceService, - }} - - dummyReq := &sirenv1beta1.ListWorkspaceChannelsRequest{ - WorkspaceName: "random", - } - mockedWorkspaceService.On("GetChannels", "random").Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.ListWorkspaceChannels(context.Background(), dummyReq) - assert.Equal(t, 2, len(res.GetData())) - assert.Equal(t, "1", res.GetData()[0].GetId()) - assert.Equal(t, "foo", res.GetData()[0].GetName()) - assert.Equal(t, "2", res.GetData()[1].GetId()) - assert.Equal(t, "bar", res.GetData()[1].GetName()) - assert.Nil(t, err) - mockedWorkspaceService.AssertCalled(t, "GetChannels", "random") - }) - - t.Run("should return error code 13 if getting workspaces failed", func(t *testing.T) { - mockedWorkspaceService := &mocks.WorkspaceService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - SlackWorkspaceService: mockedWorkspaceService, - }, logger: zaptest.NewLogger(t), - } - - dummyReq := &sirenv1beta1.ListWorkspaceChannelsRequest{ - WorkspaceName: "random", - } - mockedWorkspaceService.On("GetChannels", "random"). - Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.ListWorkspaceChannels(context.Background(), dummyReq) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - assert.Nil(t, res) - mockedWorkspaceService.AssertCalled(t, "GetChannels", "random") - }) -} - -func TestGRPCServer_ExchangeCode(t *testing.T) { - t.Run("should return OK response object", func(t *testing.T) { - mockedCodeExchangeService := &mocks.CodeExchangeService{} - dummyPayload := domain.OAuthPayload{Code: "foo", Workspace: "bar"} - dummyResult := domain.OAuthExchangeResponse{OK: true} - - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - CodeExchangeService: mockedCodeExchangeService, - }, - logger: zaptest.NewLogger(t), - } - - dummyReq := &sirenv1beta1.ExchangeCodeRequest{ - Code: "foo", - Workspace: "bar", - } - mockedCodeExchangeService.On("Exchange", dummyPayload).Return(&dummyResult, nil).Once() - res, err := dummyGRPCServer.ExchangeCode(context.Background(), dummyReq) - assert.Equal(t, true, res.GetOk()) - assert.Nil(t, err) - mockedCodeExchangeService.AssertCalled(t, "Exchange", dummyPayload) - }) - - t.Run("should return error code 13 if exchange code failed", func(t *testing.T) { - mockedCodeExchangeService := &mocks.CodeExchangeService{} - dummyPayload := domain.OAuthPayload{Code: "foo", Workspace: "bar"} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - CodeExchangeService: mockedCodeExchangeService, - }, - logger: zaptest.NewLogger(t), - } - - dummyReq := &sirenv1beta1.ExchangeCodeRequest{ - Code: "foo", - Workspace: "bar", - } - mockedCodeExchangeService.On("Exchange", dummyPayload). - Return(nil, errors.New("random error")).Once() - res, err := dummyGRPCServer.ExchangeCode(context.Background(), dummyReq) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - assert.Nil(t, res) - mockedCodeExchangeService.AssertCalled(t, "Exchange", dummyPayload) - }) -} - -func TestGRPCServer_GetAlertCredentials(t *testing.T) { - t.Run("should return alert credentials of the team", func(t *testing.T) { - mockedAlertmanagerService := &mocks.AlertmanagerService{} - dummyResult := domain.AlertCredential{ - Entity: "foo", - TeamName: "bar", - PagerdutyCredentials: "pager", - SlackConfig: domain.SlackConfig{ - Critical: domain.SlackCredential{ - Channel: "foo", - }, - Warning: domain.SlackCredential{ - Channel: "bar", - }, - }, - } - - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - AlertmanagerService: mockedAlertmanagerService, - }, - logger: zaptest.NewLogger(t), - } - - dummyReq := &sirenv1beta1.GetAlertCredentialsRequest{ - TeamName: "foo", - } - mockedAlertmanagerService.On("Get", "foo").Return(dummyResult, nil).Once() - res, err := dummyGRPCServer.GetAlertCredentials(context.Background(), dummyReq) - assert.Equal(t, "foo", res.GetEntity()) - assert.Equal(t, "bar", res.GetTeamName()) - assert.Equal(t, "pager", res.GetPagerdutyCredentials()) - assert.Equal(t, "foo", res.GetSlackConfig().GetCritical().GetChannel()) - assert.Equal(t, "bar", res.GetSlackConfig().GetWarning().GetChannel()) - assert.Nil(t, err) - mockedAlertmanagerService.AssertCalled(t, "Get", "foo") - }) - - t.Run("should return error code 13 if getting alert credentials failed", func(t *testing.T) { - mockedAlertmanagerService := &mocks.AlertmanagerService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - AlertmanagerService: mockedAlertmanagerService, - }, - logger: zaptest.NewLogger(t), - } - - dummyReq := &sirenv1beta1.GetAlertCredentialsRequest{ - TeamName: "foo", - } - mockedAlertmanagerService.On("Get", "foo"). - Return(domain.AlertCredential{}, errors.New("random error")).Once() - res, err := dummyGRPCServer.GetAlertCredentials(context.Background(), dummyReq) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - assert.Nil(t, res) - mockedAlertmanagerService.AssertCalled(t, "Get", "foo") - }) -} - -func TestGRPCServer_UpdateAlertCredentials(t *testing.T) { - t.Run("should update alert credentials of the team", func(t *testing.T) { - mockedAlertmanagerService := &mocks.AlertmanagerService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - AlertmanagerService: mockedAlertmanagerService, - }, - logger: zaptest.NewLogger(t), - } - dummyPayload := domain.AlertCredential{ - Entity: "foo", - TeamName: "bar", - PagerdutyCredentials: "pager", - SlackConfig: domain.SlackConfig{ - Critical: domain.SlackCredential{ - Channel: "foo", - }, - Warning: domain.SlackCredential{ - Channel: "bar", - }, - }, - } - dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ - Entity: "foo", - TeamName: "bar", - PagerdutyCredentials: "pager", - SlackConfig: &sirenv1beta1.SlackConfig{ - Critical: &sirenv1beta1.Critical{ - Channel: "foo", - }, - Warning: &sirenv1beta1.Warning{ - Channel: "bar", - }, - }, - } - mockedAlertmanagerService.On("Upsert", dummyPayload).Return(nil).Once() - result, err := dummyGRPCServer.UpdateAlertCredentials(context.Background(), dummyReq) - assert.Equal(t, result, &sirenv1beta1.UpdateAlertCredentialsResponse{}) - assert.Nil(t, err) - mockedAlertmanagerService.AssertCalled(t, "Upsert", dummyPayload) - }) - - t.Run("should return error code 13 if getting alert credentials failed", func(t *testing.T) { - mockedAlertmanagerService := &mocks.AlertmanagerService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - AlertmanagerService: mockedAlertmanagerService, - }, - logger: zaptest.NewLogger(t), - } - dummyPayload := domain.AlertCredential{ - Entity: "foo", - TeamName: "bar", - PagerdutyCredentials: "pager", - SlackConfig: domain.SlackConfig{ - Critical: domain.SlackCredential{ - Channel: "foo", - }, - Warning: domain.SlackCredential{ - Channel: "bar", - }, - }, - } - dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ - Entity: "foo", - TeamName: "bar", - PagerdutyCredentials: "pager", - SlackConfig: &sirenv1beta1.SlackConfig{ - Critical: &sirenv1beta1.Critical{ - Channel: "foo", - }, - Warning: &sirenv1beta1.Warning{ - Channel: "bar", - }, - }, - } - mockedAlertmanagerService.On("Upsert", dummyPayload). - Return(errors.New("random error")).Once() - res, err := dummyGRPCServer.UpdateAlertCredentials(context.Background(), dummyReq) - assert.EqualError(t, err, "rpc error: code = Internal desc = random error") - assert.Nil(t, res) - }) - - t.Run("should return error code 3 if entity is missing", func(t *testing.T) { - mockedAlertmanagerService := &mocks.AlertmanagerService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - AlertmanagerService: mockedAlertmanagerService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ - TeamName: "bar", - PagerdutyCredentials: "pager", - SlackConfig: &sirenv1beta1.SlackConfig{ - Critical: &sirenv1beta1.Critical{ - Channel: "foo", - }, - Warning: &sirenv1beta1.Warning{ - Channel: "bar", - }, - }, - } - res, err := dummyGRPCServer.UpdateAlertCredentials(context.Background(), dummyReq) - assert.EqualError(t, err, "rpc error: code = InvalidArgument desc = entity cannot be empty") - assert.Nil(t, res) - }) - - t.Run("should return error code 3 if pagerduty credentials is missing", func(t *testing.T) { - mockedAlertmanagerService := &mocks.AlertmanagerService{} - dummyGRPCServer := GRPCServer{ - container: &service.Container{ - AlertmanagerService: mockedAlertmanagerService, - }, - logger: zaptest.NewLogger(t), - } - dummyReq := &sirenv1beta1.UpdateAlertCredentialsRequest{ - Entity: "foo", - TeamName: "bar", - SlackConfig: &sirenv1beta1.SlackConfig{ - Critical: &sirenv1beta1.Critical{ - Channel: "foo", - }, - Warning: &sirenv1beta1.Warning{ - Channel: "bar", - }, - }, - } - res, err := dummyGRPCServer.UpdateAlertCredentials(context.Background(), dummyReq) - assert.EqualError(t, err, "rpc error: code = InvalidArgument desc = pagerduty credential cannot be empty") - assert.Nil(t, res) - }) -} diff --git a/api/proto/odpf/siren/v1beta1/siren.pb.go b/api/proto/odpf/siren/v1beta1/siren.pb.go index 485f260d..9256e39f 100644 --- a/api/proto/odpf/siren/v1beta1/siren.pb.go +++ b/api/proto/odpf/siren/v1beta1/siren.pb.go @@ -1448,6 +1448,127 @@ func (x *DeleteReceiverRequest) GetId() uint64 { return 0 } +type SendReceiverNotificationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + // Types that are assignable to Data: + // *SendReceiverNotificationRequest_Slack + Data isSendReceiverNotificationRequest_Data `protobuf_oneof:"data"` +} + +func (x *SendReceiverNotificationRequest) Reset() { + *x = SendReceiverNotificationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendReceiverNotificationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendReceiverNotificationRequest) ProtoMessage() {} + +func (x *SendReceiverNotificationRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendReceiverNotificationRequest.ProtoReflect.Descriptor instead. +func (*SendReceiverNotificationRequest) Descriptor() ([]byte, []int) { + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{21} +} + +func (x *SendReceiverNotificationRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (m *SendReceiverNotificationRequest) GetData() isSendReceiverNotificationRequest_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *SendReceiverNotificationRequest) GetSlack() *SendReceiverNotificationRequest_SlackPayload { + if x, ok := x.GetData().(*SendReceiverNotificationRequest_Slack); ok { + return x.Slack + } + return nil +} + +type isSendReceiverNotificationRequest_Data interface { + isSendReceiverNotificationRequest_Data() +} + +type SendReceiverNotificationRequest_Slack struct { + Slack *SendReceiverNotificationRequest_SlackPayload `protobuf:"bytes,2,opt,name=slack,proto3,oneof"` +} + +func (*SendReceiverNotificationRequest_Slack) isSendReceiverNotificationRequest_Data() {} + +type SendReceiverNotificationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` +} + +func (x *SendReceiverNotificationResponse) Reset() { + *x = SendReceiverNotificationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendReceiverNotificationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendReceiverNotificationResponse) ProtoMessage() {} + +func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendReceiverNotificationResponse.ProtoReflect.Descriptor instead. +func (*SendReceiverNotificationResponse) Descriptor() ([]byte, []int) { + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{22} +} + +func (x *SendReceiverNotificationResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + type ListAlertsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1463,7 +1584,7 @@ type ListAlertsRequest struct { func (x *ListAlertsRequest) Reset() { *x = ListAlertsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[21] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1476,7 +1597,7 @@ func (x *ListAlertsRequest) String() string { func (*ListAlertsRequest) ProtoMessage() {} func (x *ListAlertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[21] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1489,7 +1610,7 @@ func (x *ListAlertsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAlertsRequest.ProtoReflect.Descriptor instead. func (*ListAlertsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{21} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{23} } func (x *ListAlertsRequest) GetProviderName() string { @@ -1538,7 +1659,7 @@ type Alerts struct { func (x *Alerts) Reset() { *x = Alerts{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[22] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1551,7 +1672,7 @@ func (x *Alerts) String() string { func (*Alerts) ProtoMessage() {} func (x *Alerts) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[22] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1564,7 +1685,7 @@ func (x *Alerts) ProtoReflect() protoreflect.Message { // Deprecated: Use Alerts.ProtoReflect.Descriptor instead. func (*Alerts) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{22} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{24} } func (x *Alerts) GetAlerts() []*Alert { @@ -1592,7 +1713,7 @@ type Alert struct { func (x *Alert) Reset() { *x = Alert{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[23] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1605,7 +1726,7 @@ func (x *Alert) String() string { func (*Alert) ProtoMessage() {} func (x *Alert) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[23] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1618,7 +1739,7 @@ func (x *Alert) ProtoReflect() protoreflect.Message { // Deprecated: Use Alert.ProtoReflect.Descriptor instead. func (*Alert) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{23} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{25} } func (x *Alert) GetId() uint64 { @@ -1689,7 +1810,7 @@ type CreateCortexAlertsRequest struct { func (x *CreateCortexAlertsRequest) Reset() { *x = CreateCortexAlertsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[24] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1702,7 +1823,7 @@ func (x *CreateCortexAlertsRequest) String() string { func (*CreateCortexAlertsRequest) ProtoMessage() {} func (x *CreateCortexAlertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[24] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1715,7 +1836,7 @@ func (x *CreateCortexAlertsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateCortexAlertsRequest.ProtoReflect.Descriptor instead. func (*CreateCortexAlertsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{24} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{26} } func (x *CreateCortexAlertsRequest) GetProviderId() uint64 { @@ -1746,7 +1867,7 @@ type CortexAlert struct { func (x *CortexAlert) Reset() { *x = CortexAlert{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[25] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1759,7 +1880,7 @@ func (x *CortexAlert) String() string { func (*CortexAlert) ProtoMessage() {} func (x *CortexAlert) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[25] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1772,7 +1893,7 @@ func (x *CortexAlert) ProtoReflect() protoreflect.Message { // Deprecated: Use CortexAlert.ProtoReflect.Descriptor instead. func (*CortexAlert) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{25} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{27} } func (x *CortexAlert) GetAnnotations() *Annotations { @@ -1817,7 +1938,7 @@ type Annotations struct { func (x *Annotations) Reset() { *x = Annotations{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[26] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1830,7 +1951,7 @@ func (x *Annotations) String() string { func (*Annotations) ProtoMessage() {} func (x *Annotations) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[26] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1843,7 +1964,7 @@ func (x *Annotations) ProtoReflect() protoreflect.Message { // Deprecated: Use Annotations.ProtoReflect.Descriptor instead. func (*Annotations) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{26} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{28} } func (x *Annotations) GetMetricName() string { @@ -1885,7 +2006,7 @@ type Labels struct { func (x *Labels) Reset() { *x = Labels{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[27] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1898,755 +2019,7 @@ func (x *Labels) String() string { func (*Labels) ProtoMessage() {} func (x *Labels) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Labels.ProtoReflect.Descriptor instead. -func (*Labels) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{27} -} - -func (x *Labels) GetSeverity() string { - if x != nil { - return x.Severity - } - return "" -} - -type SlackWorkspace struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *SlackWorkspace) Reset() { - *x = SlackWorkspace{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SlackWorkspace) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SlackWorkspace) ProtoMessage() {} - -func (x *SlackWorkspace) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SlackWorkspace.ProtoReflect.Descriptor instead. -func (*SlackWorkspace) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{28} -} - -func (x *SlackWorkspace) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *SlackWorkspace) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type ListWorkspaceChannelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - WorkspaceName string `protobuf:"bytes,1,opt,name=workspace_name,json=workspaceName,proto3" json:"workspace_name,omitempty"` -} - -func (x *ListWorkspaceChannelsRequest) Reset() { - *x = ListWorkspaceChannelsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListWorkspaceChannelsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListWorkspaceChannelsRequest) ProtoMessage() {} - -func (x *ListWorkspaceChannelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListWorkspaceChannelsRequest.ProtoReflect.Descriptor instead. -func (*ListWorkspaceChannelsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{29} -} - -func (x *ListWorkspaceChannelsRequest) GetWorkspaceName() string { - if x != nil { - return x.WorkspaceName - } - return "" -} - -type ListWorkspaceChannelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Data []*SlackWorkspace `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` -} - -func (x *ListWorkspaceChannelsResponse) Reset() { - *x = ListWorkspaceChannelsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListWorkspaceChannelsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListWorkspaceChannelsResponse) ProtoMessage() {} - -func (x *ListWorkspaceChannelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListWorkspaceChannelsResponse.ProtoReflect.Descriptor instead. -func (*ListWorkspaceChannelsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{30} -} - -func (x *ListWorkspaceChannelsResponse) GetData() []*SlackWorkspace { - if x != nil { - return x.Data - } - return nil -} - -type ExchangeCodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - Workspace string `protobuf:"bytes,2,opt,name=workspace,proto3" json:"workspace,omitempty"` -} - -func (x *ExchangeCodeRequest) Reset() { - *x = ExchangeCodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExchangeCodeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExchangeCodeRequest) ProtoMessage() {} - -func (x *ExchangeCodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExchangeCodeRequest.ProtoReflect.Descriptor instead. -func (*ExchangeCodeRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{31} -} - -func (x *ExchangeCodeRequest) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -func (x *ExchangeCodeRequest) GetWorkspace() string { - if x != nil { - return x.Workspace - } - return "" -} - -type ExchangeCodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` -} - -func (x *ExchangeCodeResponse) Reset() { - *x = ExchangeCodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExchangeCodeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExchangeCodeResponse) ProtoMessage() {} - -func (x *ExchangeCodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExchangeCodeResponse.ProtoReflect.Descriptor instead. -func (*ExchangeCodeResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{32} -} - -func (x *ExchangeCodeResponse) GetOk() bool { - if x != nil { - return x.Ok - } - return false -} - -type GetAlertCredentialsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TeamName string `protobuf:"bytes,1,opt,name=team_name,json=teamName,proto3" json:"team_name,omitempty"` -} - -func (x *GetAlertCredentialsRequest) Reset() { - *x = GetAlertCredentialsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAlertCredentialsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAlertCredentialsRequest) ProtoMessage() {} - -func (x *GetAlertCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAlertCredentialsRequest.ProtoReflect.Descriptor instead. -func (*GetAlertCredentialsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{33} -} - -func (x *GetAlertCredentialsRequest) GetTeamName() string { - if x != nil { - return x.TeamName - } - return "" -} - -type Critical struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Channel string `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` -} - -func (x *Critical) Reset() { - *x = Critical{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Critical) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Critical) ProtoMessage() {} - -func (x *Critical) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Critical.ProtoReflect.Descriptor instead. -func (*Critical) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{34} -} - -func (x *Critical) GetChannel() string { - if x != nil { - return x.Channel - } - return "" -} - -type Warning struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Channel string `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` -} - -func (x *Warning) Reset() { - *x = Warning{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Warning) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Warning) ProtoMessage() {} - -func (x *Warning) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Warning.ProtoReflect.Descriptor instead. -func (*Warning) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{35} -} - -func (x *Warning) GetChannel() string { - if x != nil { - return x.Channel - } - return "" -} - -type SlackConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Critical *Critical `protobuf:"bytes,1,opt,name=critical,proto3" json:"critical,omitempty"` - Warning *Warning `protobuf:"bytes,2,opt,name=warning,proto3" json:"warning,omitempty"` -} - -func (x *SlackConfig) Reset() { - *x = SlackConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SlackConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SlackConfig) ProtoMessage() {} - -func (x *SlackConfig) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SlackConfig.ProtoReflect.Descriptor instead. -func (*SlackConfig) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{36} -} - -func (x *SlackConfig) GetCritical() *Critical { - if x != nil { - return x.Critical - } - return nil -} - -func (x *SlackConfig) GetWarning() *Warning { - if x != nil { - return x.Warning - } - return nil -} - -type GetAlertCredentialsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Entity string `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` - TeamName string `protobuf:"bytes,2,opt,name=team_name,json=teamName,proto3" json:"team_name,omitempty"` - PagerdutyCredentials string `protobuf:"bytes,3,opt,name=pagerduty_credentials,json=pagerdutyCredentials,proto3" json:"pagerduty_credentials,omitempty"` - SlackConfig *SlackConfig `protobuf:"bytes,4,opt,name=slack_config,json=slackConfig,proto3" json:"slack_config,omitempty"` -} - -func (x *GetAlertCredentialsResponse) Reset() { - *x = GetAlertCredentialsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAlertCredentialsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAlertCredentialsResponse) ProtoMessage() {} - -func (x *GetAlertCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAlertCredentialsResponse.ProtoReflect.Descriptor instead. -func (*GetAlertCredentialsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{37} -} - -func (x *GetAlertCredentialsResponse) GetEntity() string { - if x != nil { - return x.Entity - } - return "" -} - -func (x *GetAlertCredentialsResponse) GetTeamName() string { - if x != nil { - return x.TeamName - } - return "" -} - -func (x *GetAlertCredentialsResponse) GetPagerdutyCredentials() string { - if x != nil { - return x.PagerdutyCredentials - } - return "" -} - -func (x *GetAlertCredentialsResponse) GetSlackConfig() *SlackConfig { - if x != nil { - return x.SlackConfig - } - return nil -} - -type UpdateAlertCredentialsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Entity string `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` - TeamName string `protobuf:"bytes,2,opt,name=team_name,json=teamName,proto3" json:"team_name,omitempty"` - PagerdutyCredentials string `protobuf:"bytes,3,opt,name=pagerduty_credentials,json=pagerdutyCredentials,proto3" json:"pagerduty_credentials,omitempty"` - SlackConfig *SlackConfig `protobuf:"bytes,4,opt,name=slack_config,json=slackConfig,proto3" json:"slack_config,omitempty"` -} - -func (x *UpdateAlertCredentialsRequest) Reset() { - *x = UpdateAlertCredentialsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateAlertCredentialsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateAlertCredentialsRequest) ProtoMessage() {} - -func (x *UpdateAlertCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateAlertCredentialsRequest.ProtoReflect.Descriptor instead. -func (*UpdateAlertCredentialsRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{38} -} - -func (x *UpdateAlertCredentialsRequest) GetEntity() string { - if x != nil { - return x.Entity - } - return "" -} - -func (x *UpdateAlertCredentialsRequest) GetTeamName() string { - if x != nil { - return x.TeamName - } - return "" -} - -func (x *UpdateAlertCredentialsRequest) GetPagerdutyCredentials() string { - if x != nil { - return x.PagerdutyCredentials - } - return "" -} - -func (x *UpdateAlertCredentialsRequest) GetSlackConfig() *SlackConfig { - if x != nil { - return x.SlackConfig - } - return nil -} - -type UpdateAlertCredentialsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *UpdateAlertCredentialsResponse) Reset() { - *x = UpdateAlertCredentialsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateAlertCredentialsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateAlertCredentialsResponse) ProtoMessage() {} - -func (x *UpdateAlertCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateAlertCredentialsResponse.ProtoReflect.Descriptor instead. -func (*UpdateAlertCredentialsResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{39} -} - -type SendReceiverNotificationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - // Types that are assignable to Data: - // *SendReceiverNotificationRequest_Slack - Data isSendReceiverNotificationRequest_Data `protobuf_oneof:"data"` -} - -func (x *SendReceiverNotificationRequest) Reset() { - *x = SendReceiverNotificationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SendReceiverNotificationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SendReceiverNotificationRequest) ProtoMessage() {} - -func (x *SendReceiverNotificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SendReceiverNotificationRequest.ProtoReflect.Descriptor instead. -func (*SendReceiverNotificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{40} -} - -func (x *SendReceiverNotificationRequest) GetId() uint64 { - if x != nil { - return x.Id - } - return 0 -} - -func (m *SendReceiverNotificationRequest) GetData() isSendReceiverNotificationRequest_Data { - if m != nil { - return m.Data - } - return nil -} - -func (x *SendReceiverNotificationRequest) GetSlack() *SendReceiverNotificationRequest_SlackPayload { - if x, ok := x.GetData().(*SendReceiverNotificationRequest_Slack); ok { - return x.Slack - } - return nil -} - -type isSendReceiverNotificationRequest_Data interface { - isSendReceiverNotificationRequest_Data() -} - -type SendReceiverNotificationRequest_Slack struct { - Slack *SendReceiverNotificationRequest_SlackPayload `protobuf:"bytes,2,opt,name=slack,proto3,oneof"` -} - -func (*SendReceiverNotificationRequest_Slack) isSendReceiverNotificationRequest_Data() {} - -type SendReceiverNotificationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` -} - -func (x *SendReceiverNotificationResponse) Reset() { - *x = SendReceiverNotificationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SendReceiverNotificationResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SendReceiverNotificationResponse) ProtoMessage() {} - -func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[41] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2657,47 +2030,52 @@ func (x *SendReceiverNotificationResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SendReceiverNotificationResponse.ProtoReflect.Descriptor instead. -func (*SendReceiverNotificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{41} +// Deprecated: Use Labels.ProtoReflect.Descriptor instead. +func (*Labels) Descriptor() ([]byte, []int) { + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{29} } -func (x *SendReceiverNotificationResponse) GetOk() bool { +func (x *Labels) GetSeverity() string { if x != nil { - return x.Ok + return x.Severity } - return false + return "" } -type ListRulesRequest struct { +type Rule struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - GroupName string `protobuf:"bytes,3,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` - Template string `protobuf:"bytes,4,opt,name=template,proto3" json:"template,omitempty"` - ProviderNamespace uint64 `protobuf:"varint,5,opt,name=provider_namespace,json=providerNamespace,proto3" json:"provider_namespace,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + GroupName string `protobuf:"bytes,4,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` + Namespace string `protobuf:"bytes,5,opt,name=namespace,proto3" json:"namespace,omitempty"` + Template string `protobuf:"bytes,6,opt,name=template,proto3" json:"template,omitempty"` + Variables []*Variables `protobuf:"bytes,7,rep,name=variables,proto3" json:"variables,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + ProviderNamespace uint64 `protobuf:"varint,10,opt,name=provider_namespace,json=providerNamespace,proto3" json:"provider_namespace,omitempty"` } -func (x *ListRulesRequest) Reset() { - *x = ListRulesRequest{} +func (x *Rule) Reset() { + *x = Rule{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[42] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListRulesRequest) String() string { +func (x *Rule) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListRulesRequest) ProtoMessage() {} +func (*Rule) ProtoMessage() {} -func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[42] +func (x *Rule) ProtoReflect() protoreflect.Message { + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2708,40 +2086,75 @@ func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListRulesRequest.ProtoReflect.Descriptor instead. -func (*ListRulesRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{42} +// Deprecated: Use Rule.ProtoReflect.Descriptor instead. +func (*Rule) Descriptor() ([]byte, []int) { + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{30} } -func (x *ListRulesRequest) GetName() string { +func (x *Rule) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Rule) GetName() string { if x != nil { return x.Name } return "" } -func (x *ListRulesRequest) GetNamespace() string { +func (x *Rule) GetEnabled() bool { if x != nil { - return x.Namespace + return x.Enabled } - return "" + return false } -func (x *ListRulesRequest) GetGroupName() string { +func (x *Rule) GetGroupName() string { if x != nil { return x.GroupName } return "" } -func (x *ListRulesRequest) GetTemplate() string { +func (x *Rule) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Rule) GetTemplate() string { if x != nil { return x.Template } return "" } -func (x *ListRulesRequest) GetProviderNamespace() uint64 { +func (x *Rule) GetVariables() []*Variables { + if x != nil { + return x.Variables + } + return nil +} + +func (x *Rule) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Rule) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (x *Rule) GetProviderNamespace() uint64 { if x != nil { return x.ProviderNamespace } @@ -2762,7 +2175,7 @@ type Variables struct { func (x *Variables) Reset() { *x = Variables{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[43] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2775,7 +2188,7 @@ func (x *Variables) String() string { func (*Variables) ProtoMessage() {} func (x *Variables) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[43] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2788,7 +2201,7 @@ func (x *Variables) ProtoReflect() protoreflect.Message { // Deprecated: Use Variables.ProtoReflect.Descriptor instead. func (*Variables) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{43} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{31} } func (x *Variables) GetName() string { @@ -2819,40 +2232,35 @@ func (x *Variables) GetDescription() string { return "" } -type Rule struct { +type ListRulesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` - GroupName string `protobuf:"bytes,4,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` - Namespace string `protobuf:"bytes,5,opt,name=namespace,proto3" json:"namespace,omitempty"` - Template string `protobuf:"bytes,6,opt,name=template,proto3" json:"template,omitempty"` - Variables []*Variables `protobuf:"bytes,7,rep,name=variables,proto3" json:"variables,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - ProviderNamespace uint64 `protobuf:"varint,10,opt,name=provider_namespace,json=providerNamespace,proto3" json:"provider_namespace,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + GroupName string `protobuf:"bytes,3,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` + Template string `protobuf:"bytes,4,opt,name=template,proto3" json:"template,omitempty"` + ProviderNamespace uint64 `protobuf:"varint,5,opt,name=provider_namespace,json=providerNamespace,proto3" json:"provider_namespace,omitempty"` } -func (x *Rule) Reset() { - *x = Rule{} +func (x *ListRulesRequest) Reset() { + *x = ListRulesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[44] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Rule) String() string { +func (x *ListRulesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Rule) ProtoMessage() {} +func (*ListRulesRequest) ProtoMessage() {} -func (x *Rule) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[44] +func (x *ListRulesRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2863,75 +2271,40 @@ func (x *Rule) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Rule.ProtoReflect.Descriptor instead. -func (*Rule) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{44} -} - -func (x *Rule) GetId() uint64 { - if x != nil { - return x.Id - } - return 0 +// Deprecated: Use ListRulesRequest.ProtoReflect.Descriptor instead. +func (*ListRulesRequest) Descriptor() ([]byte, []int) { + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{32} } -func (x *Rule) GetName() string { +func (x *ListRulesRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *Rule) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *Rule) GetGroupName() string { +func (x *ListRulesRequest) GetNamespace() string { if x != nil { - return x.GroupName + return x.Namespace } return "" } -func (x *Rule) GetNamespace() string { +func (x *ListRulesRequest) GetGroupName() string { if x != nil { - return x.Namespace + return x.GroupName } return "" } -func (x *Rule) GetTemplate() string { +func (x *ListRulesRequest) GetTemplate() string { if x != nil { return x.Template } return "" } -func (x *Rule) GetVariables() []*Variables { - if x != nil { - return x.Variables - } - return nil -} - -func (x *Rule) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Rule) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt - } - return nil -} - -func (x *Rule) GetProviderNamespace() uint64 { +func (x *ListRulesRequest) GetProviderNamespace() uint64 { if x != nil { return x.ProviderNamespace } @@ -2949,7 +2322,7 @@ type ListRulesResponse struct { func (x *ListRulesResponse) Reset() { *x = ListRulesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[45] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2962,7 +2335,7 @@ func (x *ListRulesResponse) String() string { func (*ListRulesResponse) ProtoMessage() {} func (x *ListRulesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[45] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2975,7 +2348,7 @@ func (x *ListRulesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRulesResponse.ProtoReflect.Descriptor instead. func (*ListRulesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{45} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{33} } func (x *ListRulesResponse) GetRules() []*Rule { @@ -2996,7 +2369,7 @@ type UpdateRuleResponse struct { func (x *UpdateRuleResponse) Reset() { *x = UpdateRuleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[46] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3009,7 +2382,7 @@ func (x *UpdateRuleResponse) String() string { func (*UpdateRuleResponse) ProtoMessage() {} func (x *UpdateRuleResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[46] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3022,7 +2395,7 @@ func (x *UpdateRuleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRuleResponse.ProtoReflect.Descriptor instead. func (*UpdateRuleResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{46} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{34} } func (x *UpdateRuleResponse) GetRule() *Rule { @@ -3048,7 +2421,7 @@ type UpdateRuleRequest struct { func (x *UpdateRuleRequest) Reset() { *x = UpdateRuleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[47] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3061,7 +2434,7 @@ func (x *UpdateRuleRequest) String() string { func (*UpdateRuleRequest) ProtoMessage() {} func (x *UpdateRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[47] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3074,7 +2447,7 @@ func (x *UpdateRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRuleRequest.ProtoReflect.Descriptor instead. func (*UpdateRuleRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{47} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{35} } func (x *UpdateRuleRequest) GetEnabled() bool { @@ -3130,7 +2503,7 @@ type ListTemplatesRequest struct { func (x *ListTemplatesRequest) Reset() { *x = ListTemplatesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[48] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3143,7 +2516,7 @@ func (x *ListTemplatesRequest) String() string { func (*ListTemplatesRequest) ProtoMessage() {} func (x *ListTemplatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[48] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3156,7 +2529,7 @@ func (x *ListTemplatesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplatesRequest.ProtoReflect.Descriptor instead. func (*ListTemplatesRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{48} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{36} } func (x *ListTemplatesRequest) GetTag() string { @@ -3180,7 +2553,7 @@ type TemplateVariables struct { func (x *TemplateVariables) Reset() { *x = TemplateVariables{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[49] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3193,7 +2566,7 @@ func (x *TemplateVariables) String() string { func (*TemplateVariables) ProtoMessage() {} func (x *TemplateVariables) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[49] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3206,7 +2579,7 @@ func (x *TemplateVariables) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateVariables.ProtoReflect.Descriptor instead. func (*TemplateVariables) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{49} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{37} } func (x *TemplateVariables) GetName() string { @@ -3254,7 +2627,7 @@ type Template struct { func (x *Template) Reset() { *x = Template{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[50] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3267,7 +2640,7 @@ func (x *Template) String() string { func (*Template) ProtoMessage() {} func (x *Template) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[50] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3280,7 +2653,7 @@ func (x *Template) ProtoReflect() protoreflect.Message { // Deprecated: Use Template.ProtoReflect.Descriptor instead. func (*Template) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{50} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{38} } func (x *Template) GetId() uint64 { @@ -3343,7 +2716,7 @@ type TemplateResponse struct { func (x *TemplateResponse) Reset() { *x = TemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[51] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3356,7 +2729,7 @@ func (x *TemplateResponse) String() string { func (*TemplateResponse) ProtoMessage() {} func (x *TemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[51] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3369,7 +2742,7 @@ func (x *TemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateResponse.ProtoReflect.Descriptor instead. func (*TemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{51} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{39} } func (x *TemplateResponse) GetTemplate() *Template { @@ -3394,7 +2767,7 @@ type UpsertTemplateRequest struct { func (x *UpsertTemplateRequest) Reset() { *x = UpsertTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[52] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3407,7 +2780,7 @@ func (x *UpsertTemplateRequest) String() string { func (*UpsertTemplateRequest) ProtoMessage() {} func (x *UpsertTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[52] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3420,7 +2793,7 @@ func (x *UpsertTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertTemplateRequest.ProtoReflect.Descriptor instead. func (*UpsertTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{52} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{40} } func (x *UpsertTemplateRequest) GetId() uint64 { @@ -3469,7 +2842,7 @@ type ListTemplatesResponse struct { func (x *ListTemplatesResponse) Reset() { *x = ListTemplatesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[53] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3482,7 +2855,7 @@ func (x *ListTemplatesResponse) String() string { func (*ListTemplatesResponse) ProtoMessage() {} func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[53] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3495,7 +2868,7 @@ func (x *ListTemplatesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTemplatesResponse.ProtoReflect.Descriptor instead. func (*ListTemplatesResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{53} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{41} } func (x *ListTemplatesResponse) GetTemplates() []*Template { @@ -3516,7 +2889,7 @@ type GetTemplateByNameRequest struct { func (x *GetTemplateByNameRequest) Reset() { *x = GetTemplateByNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[54] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3529,7 +2902,7 @@ func (x *GetTemplateByNameRequest) String() string { func (*GetTemplateByNameRequest) ProtoMessage() {} func (x *GetTemplateByNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[54] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3542,7 +2915,7 @@ func (x *GetTemplateByNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTemplateByNameRequest.ProtoReflect.Descriptor instead. func (*GetTemplateByNameRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{54} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{42} } func (x *GetTemplateByNameRequest) GetName() string { @@ -3563,7 +2936,7 @@ type DeleteTemplateRequest struct { func (x *DeleteTemplateRequest) Reset() { *x = DeleteTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[55] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3576,7 +2949,7 @@ func (x *DeleteTemplateRequest) String() string { func (*DeleteTemplateRequest) ProtoMessage() {} func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[55] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3589,7 +2962,7 @@ func (x *DeleteTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTemplateRequest.ProtoReflect.Descriptor instead. func (*DeleteTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{55} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{43} } func (x *DeleteTemplateRequest) GetName() string { @@ -3608,7 +2981,7 @@ type DeleteTemplateResponse struct { func (x *DeleteTemplateResponse) Reset() { *x = DeleteTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[56] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3621,7 +2994,7 @@ func (x *DeleteTemplateResponse) String() string { func (*DeleteTemplateResponse) ProtoMessage() {} func (x *DeleteTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[56] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3634,7 +3007,7 @@ func (x *DeleteTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTemplateResponse.ProtoReflect.Descriptor instead. func (*DeleteTemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{56} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{44} } type RenderTemplateRequest struct { @@ -3649,7 +3022,7 @@ type RenderTemplateRequest struct { func (x *RenderTemplateRequest) Reset() { *x = RenderTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[57] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3662,7 +3035,7 @@ func (x *RenderTemplateRequest) String() string { func (*RenderTemplateRequest) ProtoMessage() {} func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[57] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3675,7 +3048,7 @@ func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTemplateRequest.ProtoReflect.Descriptor instead. func (*RenderTemplateRequest) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{57} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{45} } func (x *RenderTemplateRequest) GetName() string { @@ -3703,7 +3076,7 @@ type RenderTemplateResponse struct { func (x *RenderTemplateResponse) Reset() { *x = RenderTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[58] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3716,7 +3089,7 @@ func (x *RenderTemplateResponse) String() string { func (*RenderTemplateResponse) ProtoMessage() {} func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[58] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3729,7 +3102,7 @@ func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTemplateResponse.ProtoReflect.Descriptor instead. func (*RenderTemplateResponse) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{58} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{46} } func (x *RenderTemplateResponse) GetBody() string { @@ -3753,7 +3126,7 @@ type SendReceiverNotificationRequest_SlackPayload struct { func (x *SendReceiverNotificationRequest_SlackPayload) Reset() { *x = SendReceiverNotificationRequest_SlackPayload{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[68] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3766,7 +3139,7 @@ func (x *SendReceiverNotificationRequest_SlackPayload) String() string { func (*SendReceiverNotificationRequest_SlackPayload) ProtoMessage() {} func (x *SendReceiverNotificationRequest_SlackPayload) ProtoReflect() protoreflect.Message { - mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[68] + mi := &file_odpf_siren_v1beta1_siren_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3779,7 +3152,7 @@ func (x *SendReceiverNotificationRequest_SlackPayload) ProtoReflect() protorefle // Deprecated: Use SendReceiverNotificationRequest_SlackPayload.ProtoReflect.Descriptor instead. func (*SendReceiverNotificationRequest_SlackPayload) Descriptor() ([]byte, []int) { - return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{40, 0} + return file_odpf_siren_v1beta1_siren_proto_rawDescGZIP(), []int{21, 0} } func (x *SendReceiverNotificationRequest_SlackPayload) GetMessage() string { @@ -4086,652 +3459,530 @@ var file_odpf_siren_v1beta1_siren_proto_rawDesc = []byte{ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0d, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, - 0x78, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x3b, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, - 0x74, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, - 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x75, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x74, - 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, - 0xd5, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, - 0x41, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, - 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x73, 0x41, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x34, 0x0a, 0x0e, 0x53, 0x6c, 0x61, - 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x5e, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x3e, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x57, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2c, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, - 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x2e, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, - 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x52, 0x0a, 0x1a, - 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x74, 0x65, - 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, - 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x3d, 0x0a, 0x08, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x31, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, - 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, - 0x3c, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, - 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, - 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x92, 0x01, - 0x0a, 0x0b, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, - 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x12, 0x3f, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x22, 0xcb, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, - 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, - 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, - 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x0c, - 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x89, 0x02, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, - 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x4c, 0x0a, 0x15, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe8, 0x02, 0x0a, 0x1f, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x58, 0x0a, 0x05, 0x73, 0x6c, 0x61, + 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, + 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6c, + 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x6c, + 0x61, 0x63, 0x6b, 0x1a, 0xd2, 0x01, 0x0a, 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, + 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, + 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0c, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0d, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x32, 0x0a, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xe0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, + 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0d, 0xfa, 0x42, 0x0a, 0x72, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, + 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, + 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, + 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x3b, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x72, 0x74, + 0x73, 0x12, 0x31, 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, + 0x65, 0x72, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, + 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x22, 0x75, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x74, 0x65, + 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x52, 0x06, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0xd5, + 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x41, + 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x32, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, + 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x73, 0x41, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x22, 0x24, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x88, 0x03, 0x0a, 0x04, 0x52, 0x75, 0x6c, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x12, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x00, + 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x14, 0x70, 0x61, 0x67, 0x65, 0x72, 0x64, - 0x75, 0x74, 0x79, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4c, - 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x0a, 0x1e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe8, - 0x02, 0x0a, 0x1f, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x58, 0x0a, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x1a, 0xd2, 0x01, 0x0a, - 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, + 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, + 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x72, 0x75, 0x6c, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x75, + 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x42, 0x0a, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2c, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0xbd, 0x02, + 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, + 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, + 0x24, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x08, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, - 0x11, 0x72, 0x0f, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x32, 0x0a, 0x20, 0x53, 0x65, 0x6e, - 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xae, 0x01, - 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x9d, - 0x01, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, - 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, - 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, + 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2d, + 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x28, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, + 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, + 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, - 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x88, - 0x03, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, + 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x02, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, + 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, + 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, + 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, + 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x36, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x32, 0x02, 0x28, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, - 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x42, - 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, - 0x6c, 0x65, 0x22, 0xbd, 0x02, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, - 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, - 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, - 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, - 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x08, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x22, 0x28, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0xa9, 0x01, 0x0a, - 0x11, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, - 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x02, 0x0a, 0x08, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x4c, 0x0a, + 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x15, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, - 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x10, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x22, 0xd5, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, - 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, - 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x09, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x47, 0x0a, - 0x18, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x01, - 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, - 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, + 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x09, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x09, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, + 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x2a, 0x13, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x52, 0x54, 0x45, 0x58, 0x10, 0x00, 0x32, 0xc7, 0x25, - 0x0a, 0x0c, 0x53, 0x69, 0x72, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x67, - 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x92, 0x41, 0x0c, 0x0a, 0x04, - 0x50, 0x69, 0x6e, 0x67, 0x12, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x07, - 0x12, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, - 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x17, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x56, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x16, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x2a, 0x13, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0a, 0x0a, 0x06, + 0x43, 0x4f, 0x52, 0x54, 0x45, 0x58, 0x10, 0x00, 0x32, 0xa3, 0x20, 0x0a, 0x0c, 0x53, 0x69, 0x72, + 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x67, 0x0a, 0x04, 0x50, 0x69, 0x6e, + 0x67, 0x12, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x92, 0x41, 0x0c, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, + 0x04, 0x70, 0x69, 0x6e, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x07, 0x12, 0x05, 0x2f, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, 0x08, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x3d, + 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x26, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x22, 0x3d, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, - 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, + 0x64, 0x65, 0x72, 0x22, 0x3c, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x42, 0x92, + 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, + 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, + 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x3c, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x92, 0x41, - 0x1d, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, - 0x40, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x1c, 0x0a, - 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x67, 0x65, 0x74, 0x20, + 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x53, 0x92, 0x41, 0x29, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, + 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, + 0x6e, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, + 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0f, 0x6c, 0x69, + 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x0f, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x45, 0x92, 0x41, 0x1f, 0x0a, - 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1d, 0x1a, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, - 0x2a, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x42, 0x92, 0x41, 0x1f, 0x0a, 0x09, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, - 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x3d, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, - 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, - 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x3c, 0x92, 0x41, - 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, + 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x1c, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x0f, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, + 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x45, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x1a, 0x18, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x3f, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, - 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, - 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, - 0x72, 0x74, 0x73, 0x22, 0x4c, 0x92, 0x41, 0x14, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, - 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x6c, 0x65, - 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x42, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, + 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, + 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, + 0x3d, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x91, + 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x29, 0x0a, 0x08, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1d, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0xb0, - 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, - 0x22, 0x4f, 0x92, 0x41, 0x1d, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x14, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x20, 0x61, 0x6c, 0x65, 0x72, - 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, - 0x2a, 0x12, 0xb8, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x30, 0x2e, 0x6f, 0x64, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x22, 0x3c, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0x42, + 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, + 0x61, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9d, 0x01, 0x0a, 0x0a, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x4c, 0x92, 0x41, 0x14, + 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, + 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x12, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, + 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x74, + 0x65, 0x78, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x22, 0x4f, 0x92, 0x41, 0x1d, + 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x20, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x6c, + 0x65, 0x72, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, + 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x12, 0x0a, 0x04, 0x52, 0x75, + 0x6c, 0x65, 0x12, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x19, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x11, 0x61, + 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x1a, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x88, 0x01, 0x0a, - 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, + 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x12, 0x0e, 0x67, 0x65, 0x74, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, + 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x15, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x17, 0x1a, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, 0x0e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x2f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, - 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x12, 0xb2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x31, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, - 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2b, 0x92, 0x41, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x0a, 0x6c, 0x69, 0x73, - 0x74, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x92, 0x01, - 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x19, - 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x11, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x1a, - 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x3a, - 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x1a, 0x0a, 0x08, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, - 0x1a, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x67, 0x65, 0x74, - 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa4, 0x01, 0x0a, - 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x41, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x15, 0x61, 0x64, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x1a, 0x12, 0x2f, 0x76, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x12, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, - 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, - 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x1d, 0x0a, - 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x72, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x42, 0xb2, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x42, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0x54, 0x12, 0x4f, 0x0a, 0x0a, 0x53, 0x69, 0x72, 0x65, - 0x6e, 0x20, 0x41, 0x50, 0x49, 0x73, 0x12, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x69, 0x72, - 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, 0x43, - 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x32, 0x05, 0x30, 0x2e, 0x33, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x73, 0x69, 0x72, + 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x4b, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x11, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x42, 0xb2, + 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6e, 0x2e, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x42, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6e, 0x2f, 0x73, 0x69, 0x72, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, + 0x73, 0x69, 0x72, 0x65, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0x54, 0x12, + 0x4f, 0x0a, 0x0a, 0x53, 0x69, 0x72, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x73, 0x12, 0x3a, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, + 0x6f, 0x75, 0x72, 0x20, 0x53, 0x69, 0x72, 0x65, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, 0x43, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x67, 0x52, 0x50, 0x43, + 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x32, 0x05, 0x30, 0x2e, 0x33, 0x2e, 0x30, + 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4747,7 +3998,7 @@ func file_odpf_siren_v1beta1_siren_proto_rawDescGZIP() []byte { } var file_odpf_siren_v1beta1_siren_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_odpf_siren_v1beta1_siren_proto_msgTypes = make([]protoimpl.MessageInfo, 70) +var file_odpf_siren_v1beta1_siren_proto_msgTypes = make([]protoimpl.MessageInfo, 58) var file_odpf_siren_v1beta1_siren_proto_goTypes = []interface{}{ (Types)(0), // 0: odpf.siren.v1beta1.Types (*PingRequest)(nil), // 1: odpf.siren.v1beta1.PingRequest @@ -4771,181 +4022,156 @@ var file_odpf_siren_v1beta1_siren_proto_goTypes = []interface{}{ (*GetReceiverRequest)(nil), // 19: odpf.siren.v1beta1.GetReceiverRequest (*UpdateReceiverRequest)(nil), // 20: odpf.siren.v1beta1.UpdateReceiverRequest (*DeleteReceiverRequest)(nil), // 21: odpf.siren.v1beta1.DeleteReceiverRequest - (*ListAlertsRequest)(nil), // 22: odpf.siren.v1beta1.ListAlertsRequest - (*Alerts)(nil), // 23: odpf.siren.v1beta1.Alerts - (*Alert)(nil), // 24: odpf.siren.v1beta1.Alert - (*CreateCortexAlertsRequest)(nil), // 25: odpf.siren.v1beta1.CreateCortexAlertsRequest - (*CortexAlert)(nil), // 26: odpf.siren.v1beta1.CortexAlert - (*Annotations)(nil), // 27: odpf.siren.v1beta1.Annotations - (*Labels)(nil), // 28: odpf.siren.v1beta1.Labels - (*SlackWorkspace)(nil), // 29: odpf.siren.v1beta1.SlackWorkspace - (*ListWorkspaceChannelsRequest)(nil), // 30: odpf.siren.v1beta1.ListWorkspaceChannelsRequest - (*ListWorkspaceChannelsResponse)(nil), // 31: odpf.siren.v1beta1.ListWorkspaceChannelsResponse - (*ExchangeCodeRequest)(nil), // 32: odpf.siren.v1beta1.ExchangeCodeRequest - (*ExchangeCodeResponse)(nil), // 33: odpf.siren.v1beta1.ExchangeCodeResponse - (*GetAlertCredentialsRequest)(nil), // 34: odpf.siren.v1beta1.GetAlertCredentialsRequest - (*Critical)(nil), // 35: odpf.siren.v1beta1.Critical - (*Warning)(nil), // 36: odpf.siren.v1beta1.Warning - (*SlackConfig)(nil), // 37: odpf.siren.v1beta1.SlackConfig - (*GetAlertCredentialsResponse)(nil), // 38: odpf.siren.v1beta1.GetAlertCredentialsResponse - (*UpdateAlertCredentialsRequest)(nil), // 39: odpf.siren.v1beta1.UpdateAlertCredentialsRequest - (*UpdateAlertCredentialsResponse)(nil), // 40: odpf.siren.v1beta1.UpdateAlertCredentialsResponse - (*SendReceiverNotificationRequest)(nil), // 41: odpf.siren.v1beta1.SendReceiverNotificationRequest - (*SendReceiverNotificationResponse)(nil), // 42: odpf.siren.v1beta1.SendReceiverNotificationResponse - (*ListRulesRequest)(nil), // 43: odpf.siren.v1beta1.ListRulesRequest - (*Variables)(nil), // 44: odpf.siren.v1beta1.Variables - (*Rule)(nil), // 45: odpf.siren.v1beta1.Rule - (*ListRulesResponse)(nil), // 46: odpf.siren.v1beta1.ListRulesResponse - (*UpdateRuleResponse)(nil), // 47: odpf.siren.v1beta1.UpdateRuleResponse - (*UpdateRuleRequest)(nil), // 48: odpf.siren.v1beta1.UpdateRuleRequest - (*ListTemplatesRequest)(nil), // 49: odpf.siren.v1beta1.ListTemplatesRequest - (*TemplateVariables)(nil), // 50: odpf.siren.v1beta1.TemplateVariables - (*Template)(nil), // 51: odpf.siren.v1beta1.Template - (*TemplateResponse)(nil), // 52: odpf.siren.v1beta1.TemplateResponse - (*UpsertTemplateRequest)(nil), // 53: odpf.siren.v1beta1.UpsertTemplateRequest - (*ListTemplatesResponse)(nil), // 54: odpf.siren.v1beta1.ListTemplatesResponse - (*GetTemplateByNameRequest)(nil), // 55: odpf.siren.v1beta1.GetTemplateByNameRequest - (*DeleteTemplateRequest)(nil), // 56: odpf.siren.v1beta1.DeleteTemplateRequest - (*DeleteTemplateResponse)(nil), // 57: odpf.siren.v1beta1.DeleteTemplateResponse - (*RenderTemplateRequest)(nil), // 58: odpf.siren.v1beta1.RenderTemplateRequest - (*RenderTemplateResponse)(nil), // 59: odpf.siren.v1beta1.RenderTemplateResponse - nil, // 60: odpf.siren.v1beta1.Provider.LabelsEntry - nil, // 61: odpf.siren.v1beta1.CreateProviderRequest.LabelsEntry - nil, // 62: odpf.siren.v1beta1.UpdateProviderRequest.LabelsEntry - nil, // 63: odpf.siren.v1beta1.Namespace.LabelsEntry - nil, // 64: odpf.siren.v1beta1.CreateNamespaceRequest.LabelsEntry - nil, // 65: odpf.siren.v1beta1.UpdateNamespaceRequest.LabelsEntry - nil, // 66: odpf.siren.v1beta1.Receiver.LabelsEntry - nil, // 67: odpf.siren.v1beta1.CreateReceiverRequest.LabelsEntry - nil, // 68: odpf.siren.v1beta1.UpdateReceiverRequest.LabelsEntry - (*SendReceiverNotificationRequest_SlackPayload)(nil), // 69: odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload - nil, // 70: odpf.siren.v1beta1.RenderTemplateRequest.VariablesEntry - (*structpb.Struct)(nil), // 71: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 72: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 73: google.protobuf.Empty + (*SendReceiverNotificationRequest)(nil), // 22: odpf.siren.v1beta1.SendReceiverNotificationRequest + (*SendReceiverNotificationResponse)(nil), // 23: odpf.siren.v1beta1.SendReceiverNotificationResponse + (*ListAlertsRequest)(nil), // 24: odpf.siren.v1beta1.ListAlertsRequest + (*Alerts)(nil), // 25: odpf.siren.v1beta1.Alerts + (*Alert)(nil), // 26: odpf.siren.v1beta1.Alert + (*CreateCortexAlertsRequest)(nil), // 27: odpf.siren.v1beta1.CreateCortexAlertsRequest + (*CortexAlert)(nil), // 28: odpf.siren.v1beta1.CortexAlert + (*Annotations)(nil), // 29: odpf.siren.v1beta1.Annotations + (*Labels)(nil), // 30: odpf.siren.v1beta1.Labels + (*Rule)(nil), // 31: odpf.siren.v1beta1.Rule + (*Variables)(nil), // 32: odpf.siren.v1beta1.Variables + (*ListRulesRequest)(nil), // 33: odpf.siren.v1beta1.ListRulesRequest + (*ListRulesResponse)(nil), // 34: odpf.siren.v1beta1.ListRulesResponse + (*UpdateRuleResponse)(nil), // 35: odpf.siren.v1beta1.UpdateRuleResponse + (*UpdateRuleRequest)(nil), // 36: odpf.siren.v1beta1.UpdateRuleRequest + (*ListTemplatesRequest)(nil), // 37: odpf.siren.v1beta1.ListTemplatesRequest + (*TemplateVariables)(nil), // 38: odpf.siren.v1beta1.TemplateVariables + (*Template)(nil), // 39: odpf.siren.v1beta1.Template + (*TemplateResponse)(nil), // 40: odpf.siren.v1beta1.TemplateResponse + (*UpsertTemplateRequest)(nil), // 41: odpf.siren.v1beta1.UpsertTemplateRequest + (*ListTemplatesResponse)(nil), // 42: odpf.siren.v1beta1.ListTemplatesResponse + (*GetTemplateByNameRequest)(nil), // 43: odpf.siren.v1beta1.GetTemplateByNameRequest + (*DeleteTemplateRequest)(nil), // 44: odpf.siren.v1beta1.DeleteTemplateRequest + (*DeleteTemplateResponse)(nil), // 45: odpf.siren.v1beta1.DeleteTemplateResponse + (*RenderTemplateRequest)(nil), // 46: odpf.siren.v1beta1.RenderTemplateRequest + (*RenderTemplateResponse)(nil), // 47: odpf.siren.v1beta1.RenderTemplateResponse + nil, // 48: odpf.siren.v1beta1.Provider.LabelsEntry + nil, // 49: odpf.siren.v1beta1.CreateProviderRequest.LabelsEntry + nil, // 50: odpf.siren.v1beta1.UpdateProviderRequest.LabelsEntry + nil, // 51: odpf.siren.v1beta1.Namespace.LabelsEntry + nil, // 52: odpf.siren.v1beta1.CreateNamespaceRequest.LabelsEntry + nil, // 53: odpf.siren.v1beta1.UpdateNamespaceRequest.LabelsEntry + nil, // 54: odpf.siren.v1beta1.Receiver.LabelsEntry + nil, // 55: odpf.siren.v1beta1.CreateReceiverRequest.LabelsEntry + nil, // 56: odpf.siren.v1beta1.UpdateReceiverRequest.LabelsEntry + (*SendReceiverNotificationRequest_SlackPayload)(nil), // 57: odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload + nil, // 58: odpf.siren.v1beta1.RenderTemplateRequest.VariablesEntry + (*structpb.Struct)(nil), // 59: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 61: google.protobuf.Empty } var file_odpf_siren_v1beta1_siren_proto_depIdxs = []int32{ - 71, // 0: odpf.siren.v1beta1.Provider.credentials:type_name -> google.protobuf.Struct - 60, // 1: odpf.siren.v1beta1.Provider.labels:type_name -> odpf.siren.v1beta1.Provider.LabelsEntry - 72, // 2: odpf.siren.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp - 72, // 3: odpf.siren.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp + 59, // 0: odpf.siren.v1beta1.Provider.credentials:type_name -> google.protobuf.Struct + 48, // 1: odpf.siren.v1beta1.Provider.labels:type_name -> odpf.siren.v1beta1.Provider.LabelsEntry + 60, // 2: odpf.siren.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp + 60, // 3: odpf.siren.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp 3, // 4: odpf.siren.v1beta1.ListProvidersResponse.providers:type_name -> odpf.siren.v1beta1.Provider - 71, // 5: odpf.siren.v1beta1.CreateProviderRequest.credentials:type_name -> google.protobuf.Struct - 61, // 6: odpf.siren.v1beta1.CreateProviderRequest.labels:type_name -> odpf.siren.v1beta1.CreateProviderRequest.LabelsEntry - 71, // 7: odpf.siren.v1beta1.UpdateProviderRequest.credentials:type_name -> google.protobuf.Struct - 62, // 8: odpf.siren.v1beta1.UpdateProviderRequest.labels:type_name -> odpf.siren.v1beta1.UpdateProviderRequest.LabelsEntry - 71, // 9: odpf.siren.v1beta1.Namespace.credentials:type_name -> google.protobuf.Struct - 63, // 10: odpf.siren.v1beta1.Namespace.labels:type_name -> odpf.siren.v1beta1.Namespace.LabelsEntry - 72, // 11: odpf.siren.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp - 72, // 12: odpf.siren.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp + 59, // 5: odpf.siren.v1beta1.CreateProviderRequest.credentials:type_name -> google.protobuf.Struct + 49, // 6: odpf.siren.v1beta1.CreateProviderRequest.labels:type_name -> odpf.siren.v1beta1.CreateProviderRequest.LabelsEntry + 59, // 7: odpf.siren.v1beta1.UpdateProviderRequest.credentials:type_name -> google.protobuf.Struct + 50, // 8: odpf.siren.v1beta1.UpdateProviderRequest.labels:type_name -> odpf.siren.v1beta1.UpdateProviderRequest.LabelsEntry + 59, // 9: odpf.siren.v1beta1.Namespace.credentials:type_name -> google.protobuf.Struct + 51, // 10: odpf.siren.v1beta1.Namespace.labels:type_name -> odpf.siren.v1beta1.Namespace.LabelsEntry + 60, // 11: odpf.siren.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp + 60, // 12: odpf.siren.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp 10, // 13: odpf.siren.v1beta1.ListNamespacesResponse.namespaces:type_name -> odpf.siren.v1beta1.Namespace - 71, // 14: odpf.siren.v1beta1.CreateNamespaceRequest.credentials:type_name -> google.protobuf.Struct - 64, // 15: odpf.siren.v1beta1.CreateNamespaceRequest.labels:type_name -> odpf.siren.v1beta1.CreateNamespaceRequest.LabelsEntry - 72, // 16: odpf.siren.v1beta1.CreateNamespaceRequest.created_at:type_name -> google.protobuf.Timestamp - 72, // 17: odpf.siren.v1beta1.CreateNamespaceRequest.updated_at:type_name -> google.protobuf.Timestamp - 71, // 18: odpf.siren.v1beta1.UpdateNamespaceRequest.credentials:type_name -> google.protobuf.Struct - 65, // 19: odpf.siren.v1beta1.UpdateNamespaceRequest.labels:type_name -> odpf.siren.v1beta1.UpdateNamespaceRequest.LabelsEntry - 66, // 20: odpf.siren.v1beta1.Receiver.labels:type_name -> odpf.siren.v1beta1.Receiver.LabelsEntry - 71, // 21: odpf.siren.v1beta1.Receiver.configurations:type_name -> google.protobuf.Struct - 71, // 22: odpf.siren.v1beta1.Receiver.data:type_name -> google.protobuf.Struct - 72, // 23: odpf.siren.v1beta1.Receiver.created_at:type_name -> google.protobuf.Timestamp - 72, // 24: odpf.siren.v1beta1.Receiver.updated_at:type_name -> google.protobuf.Timestamp + 59, // 14: odpf.siren.v1beta1.CreateNamespaceRequest.credentials:type_name -> google.protobuf.Struct + 52, // 15: odpf.siren.v1beta1.CreateNamespaceRequest.labels:type_name -> odpf.siren.v1beta1.CreateNamespaceRequest.LabelsEntry + 60, // 16: odpf.siren.v1beta1.CreateNamespaceRequest.created_at:type_name -> google.protobuf.Timestamp + 60, // 17: odpf.siren.v1beta1.CreateNamespaceRequest.updated_at:type_name -> google.protobuf.Timestamp + 59, // 18: odpf.siren.v1beta1.UpdateNamespaceRequest.credentials:type_name -> google.protobuf.Struct + 53, // 19: odpf.siren.v1beta1.UpdateNamespaceRequest.labels:type_name -> odpf.siren.v1beta1.UpdateNamespaceRequest.LabelsEntry + 54, // 20: odpf.siren.v1beta1.Receiver.labels:type_name -> odpf.siren.v1beta1.Receiver.LabelsEntry + 59, // 21: odpf.siren.v1beta1.Receiver.configurations:type_name -> google.protobuf.Struct + 59, // 22: odpf.siren.v1beta1.Receiver.data:type_name -> google.protobuf.Struct + 60, // 23: odpf.siren.v1beta1.Receiver.created_at:type_name -> google.protobuf.Timestamp + 60, // 24: odpf.siren.v1beta1.Receiver.updated_at:type_name -> google.protobuf.Timestamp 16, // 25: odpf.siren.v1beta1.ListReceiversResponse.receivers:type_name -> odpf.siren.v1beta1.Receiver - 67, // 26: odpf.siren.v1beta1.CreateReceiverRequest.labels:type_name -> odpf.siren.v1beta1.CreateReceiverRequest.LabelsEntry - 71, // 27: odpf.siren.v1beta1.CreateReceiverRequest.configurations:type_name -> google.protobuf.Struct - 68, // 28: odpf.siren.v1beta1.UpdateReceiverRequest.labels:type_name -> odpf.siren.v1beta1.UpdateReceiverRequest.LabelsEntry - 71, // 29: odpf.siren.v1beta1.UpdateReceiverRequest.configurations:type_name -> google.protobuf.Struct - 24, // 30: odpf.siren.v1beta1.Alerts.alerts:type_name -> odpf.siren.v1beta1.Alert - 72, // 31: odpf.siren.v1beta1.Alert.triggered_at:type_name -> google.protobuf.Timestamp - 26, // 32: odpf.siren.v1beta1.CreateCortexAlertsRequest.alerts:type_name -> odpf.siren.v1beta1.CortexAlert - 27, // 33: odpf.siren.v1beta1.CortexAlert.annotations:type_name -> odpf.siren.v1beta1.Annotations - 28, // 34: odpf.siren.v1beta1.CortexAlert.labels:type_name -> odpf.siren.v1beta1.Labels - 72, // 35: odpf.siren.v1beta1.CortexAlert.starts_at:type_name -> google.protobuf.Timestamp - 29, // 36: odpf.siren.v1beta1.ListWorkspaceChannelsResponse.data:type_name -> odpf.siren.v1beta1.SlackWorkspace - 35, // 37: odpf.siren.v1beta1.SlackConfig.critical:type_name -> odpf.siren.v1beta1.Critical - 36, // 38: odpf.siren.v1beta1.SlackConfig.warning:type_name -> odpf.siren.v1beta1.Warning - 37, // 39: odpf.siren.v1beta1.GetAlertCredentialsResponse.slack_config:type_name -> odpf.siren.v1beta1.SlackConfig - 37, // 40: odpf.siren.v1beta1.UpdateAlertCredentialsRequest.slack_config:type_name -> odpf.siren.v1beta1.SlackConfig - 69, // 41: odpf.siren.v1beta1.SendReceiverNotificationRequest.slack:type_name -> odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload - 44, // 42: odpf.siren.v1beta1.Rule.variables:type_name -> odpf.siren.v1beta1.Variables - 72, // 43: odpf.siren.v1beta1.Rule.created_at:type_name -> google.protobuf.Timestamp - 72, // 44: odpf.siren.v1beta1.Rule.updated_at:type_name -> google.protobuf.Timestamp - 45, // 45: odpf.siren.v1beta1.ListRulesResponse.rules:type_name -> odpf.siren.v1beta1.Rule - 45, // 46: odpf.siren.v1beta1.UpdateRuleResponse.rule:type_name -> odpf.siren.v1beta1.Rule - 44, // 47: odpf.siren.v1beta1.UpdateRuleRequest.variables:type_name -> odpf.siren.v1beta1.Variables - 72, // 48: odpf.siren.v1beta1.Template.created_at:type_name -> google.protobuf.Timestamp - 72, // 49: odpf.siren.v1beta1.Template.updated_at:type_name -> google.protobuf.Timestamp - 50, // 50: odpf.siren.v1beta1.Template.variables:type_name -> odpf.siren.v1beta1.TemplateVariables - 51, // 51: odpf.siren.v1beta1.TemplateResponse.template:type_name -> odpf.siren.v1beta1.Template - 50, // 52: odpf.siren.v1beta1.UpsertTemplateRequest.variables:type_name -> odpf.siren.v1beta1.TemplateVariables - 51, // 53: odpf.siren.v1beta1.ListTemplatesResponse.templates:type_name -> odpf.siren.v1beta1.Template - 70, // 54: odpf.siren.v1beta1.RenderTemplateRequest.variables:type_name -> odpf.siren.v1beta1.RenderTemplateRequest.VariablesEntry - 71, // 55: odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload.blocks:type_name -> google.protobuf.Struct - 1, // 56: odpf.siren.v1beta1.SirenService.Ping:input_type -> odpf.siren.v1beta1.PingRequest - 4, // 57: odpf.siren.v1beta1.SirenService.ListProviders:input_type -> odpf.siren.v1beta1.ListProvidersRequest - 6, // 58: odpf.siren.v1beta1.SirenService.CreateProvider:input_type -> odpf.siren.v1beta1.CreateProviderRequest - 7, // 59: odpf.siren.v1beta1.SirenService.GetProvider:input_type -> odpf.siren.v1beta1.GetProviderRequest - 8, // 60: odpf.siren.v1beta1.SirenService.UpdateProvider:input_type -> odpf.siren.v1beta1.UpdateProviderRequest - 9, // 61: odpf.siren.v1beta1.SirenService.DeleteProvider:input_type -> odpf.siren.v1beta1.DeleteProviderRequest - 73, // 62: odpf.siren.v1beta1.SirenService.ListNamespaces:input_type -> google.protobuf.Empty - 12, // 63: odpf.siren.v1beta1.SirenService.CreateNamespace:input_type -> odpf.siren.v1beta1.CreateNamespaceRequest - 13, // 64: odpf.siren.v1beta1.SirenService.GetNamespace:input_type -> odpf.siren.v1beta1.GetNamespaceRequest - 14, // 65: odpf.siren.v1beta1.SirenService.UpdateNamespace:input_type -> odpf.siren.v1beta1.UpdateNamespaceRequest - 15, // 66: odpf.siren.v1beta1.SirenService.DeleteNamespace:input_type -> odpf.siren.v1beta1.DeleteNamespaceRequest - 73, // 67: odpf.siren.v1beta1.SirenService.ListReceivers:input_type -> google.protobuf.Empty - 18, // 68: odpf.siren.v1beta1.SirenService.CreateReceiver:input_type -> odpf.siren.v1beta1.CreateReceiverRequest - 19, // 69: odpf.siren.v1beta1.SirenService.GetReceiver:input_type -> odpf.siren.v1beta1.GetReceiverRequest - 20, // 70: odpf.siren.v1beta1.SirenService.UpdateReceiver:input_type -> odpf.siren.v1beta1.UpdateReceiverRequest - 21, // 71: odpf.siren.v1beta1.SirenService.DeleteReceiver:input_type -> odpf.siren.v1beta1.DeleteReceiverRequest - 22, // 72: odpf.siren.v1beta1.SirenService.ListAlerts:input_type -> odpf.siren.v1beta1.ListAlertsRequest - 41, // 73: odpf.siren.v1beta1.SirenService.SendReceiverNotification:input_type -> odpf.siren.v1beta1.SendReceiverNotificationRequest - 25, // 74: odpf.siren.v1beta1.SirenService.CreateCortexAlerts:input_type -> odpf.siren.v1beta1.CreateCortexAlertsRequest - 30, // 75: odpf.siren.v1beta1.SirenService.ListWorkspaceChannels:input_type -> odpf.siren.v1beta1.ListWorkspaceChannelsRequest - 32, // 76: odpf.siren.v1beta1.SirenService.ExchangeCode:input_type -> odpf.siren.v1beta1.ExchangeCodeRequest - 34, // 77: odpf.siren.v1beta1.SirenService.GetAlertCredentials:input_type -> odpf.siren.v1beta1.GetAlertCredentialsRequest - 39, // 78: odpf.siren.v1beta1.SirenService.UpdateAlertCredentials:input_type -> odpf.siren.v1beta1.UpdateAlertCredentialsRequest - 43, // 79: odpf.siren.v1beta1.SirenService.ListRules:input_type -> odpf.siren.v1beta1.ListRulesRequest - 48, // 80: odpf.siren.v1beta1.SirenService.UpdateRule:input_type -> odpf.siren.v1beta1.UpdateRuleRequest - 49, // 81: odpf.siren.v1beta1.SirenService.ListTemplates:input_type -> odpf.siren.v1beta1.ListTemplatesRequest - 55, // 82: odpf.siren.v1beta1.SirenService.GetTemplateByName:input_type -> odpf.siren.v1beta1.GetTemplateByNameRequest - 53, // 83: odpf.siren.v1beta1.SirenService.UpsertTemplate:input_type -> odpf.siren.v1beta1.UpsertTemplateRequest - 56, // 84: odpf.siren.v1beta1.SirenService.DeleteTemplate:input_type -> odpf.siren.v1beta1.DeleteTemplateRequest - 58, // 85: odpf.siren.v1beta1.SirenService.RenderTemplate:input_type -> odpf.siren.v1beta1.RenderTemplateRequest - 2, // 86: odpf.siren.v1beta1.SirenService.Ping:output_type -> odpf.siren.v1beta1.PingResponse - 5, // 87: odpf.siren.v1beta1.SirenService.ListProviders:output_type -> odpf.siren.v1beta1.ListProvidersResponse - 3, // 88: odpf.siren.v1beta1.SirenService.CreateProvider:output_type -> odpf.siren.v1beta1.Provider - 3, // 89: odpf.siren.v1beta1.SirenService.GetProvider:output_type -> odpf.siren.v1beta1.Provider - 3, // 90: odpf.siren.v1beta1.SirenService.UpdateProvider:output_type -> odpf.siren.v1beta1.Provider - 73, // 91: odpf.siren.v1beta1.SirenService.DeleteProvider:output_type -> google.protobuf.Empty - 11, // 92: odpf.siren.v1beta1.SirenService.ListNamespaces:output_type -> odpf.siren.v1beta1.ListNamespacesResponse - 10, // 93: odpf.siren.v1beta1.SirenService.CreateNamespace:output_type -> odpf.siren.v1beta1.Namespace - 10, // 94: odpf.siren.v1beta1.SirenService.GetNamespace:output_type -> odpf.siren.v1beta1.Namespace - 10, // 95: odpf.siren.v1beta1.SirenService.UpdateNamespace:output_type -> odpf.siren.v1beta1.Namespace - 73, // 96: odpf.siren.v1beta1.SirenService.DeleteNamespace:output_type -> google.protobuf.Empty - 17, // 97: odpf.siren.v1beta1.SirenService.ListReceivers:output_type -> odpf.siren.v1beta1.ListReceiversResponse - 16, // 98: odpf.siren.v1beta1.SirenService.CreateReceiver:output_type -> odpf.siren.v1beta1.Receiver - 16, // 99: odpf.siren.v1beta1.SirenService.GetReceiver:output_type -> odpf.siren.v1beta1.Receiver - 16, // 100: odpf.siren.v1beta1.SirenService.UpdateReceiver:output_type -> odpf.siren.v1beta1.Receiver - 73, // 101: odpf.siren.v1beta1.SirenService.DeleteReceiver:output_type -> google.protobuf.Empty - 23, // 102: odpf.siren.v1beta1.SirenService.ListAlerts:output_type -> odpf.siren.v1beta1.Alerts - 42, // 103: odpf.siren.v1beta1.SirenService.SendReceiverNotification:output_type -> odpf.siren.v1beta1.SendReceiverNotificationResponse - 23, // 104: odpf.siren.v1beta1.SirenService.CreateCortexAlerts:output_type -> odpf.siren.v1beta1.Alerts - 31, // 105: odpf.siren.v1beta1.SirenService.ListWorkspaceChannels:output_type -> odpf.siren.v1beta1.ListWorkspaceChannelsResponse - 33, // 106: odpf.siren.v1beta1.SirenService.ExchangeCode:output_type -> odpf.siren.v1beta1.ExchangeCodeResponse - 38, // 107: odpf.siren.v1beta1.SirenService.GetAlertCredentials:output_type -> odpf.siren.v1beta1.GetAlertCredentialsResponse - 40, // 108: odpf.siren.v1beta1.SirenService.UpdateAlertCredentials:output_type -> odpf.siren.v1beta1.UpdateAlertCredentialsResponse - 46, // 109: odpf.siren.v1beta1.SirenService.ListRules:output_type -> odpf.siren.v1beta1.ListRulesResponse - 47, // 110: odpf.siren.v1beta1.SirenService.UpdateRule:output_type -> odpf.siren.v1beta1.UpdateRuleResponse - 54, // 111: odpf.siren.v1beta1.SirenService.ListTemplates:output_type -> odpf.siren.v1beta1.ListTemplatesResponse - 52, // 112: odpf.siren.v1beta1.SirenService.GetTemplateByName:output_type -> odpf.siren.v1beta1.TemplateResponse - 52, // 113: odpf.siren.v1beta1.SirenService.UpsertTemplate:output_type -> odpf.siren.v1beta1.TemplateResponse - 57, // 114: odpf.siren.v1beta1.SirenService.DeleteTemplate:output_type -> odpf.siren.v1beta1.DeleteTemplateResponse - 59, // 115: odpf.siren.v1beta1.SirenService.RenderTemplate:output_type -> odpf.siren.v1beta1.RenderTemplateResponse - 86, // [86:116] is the sub-list for method output_type - 56, // [56:86] is the sub-list for method input_type - 56, // [56:56] is the sub-list for extension type_name - 56, // [56:56] is the sub-list for extension extendee - 0, // [0:56] is the sub-list for field type_name + 55, // 26: odpf.siren.v1beta1.CreateReceiverRequest.labels:type_name -> odpf.siren.v1beta1.CreateReceiverRequest.LabelsEntry + 59, // 27: odpf.siren.v1beta1.CreateReceiverRequest.configurations:type_name -> google.protobuf.Struct + 56, // 28: odpf.siren.v1beta1.UpdateReceiverRequest.labels:type_name -> odpf.siren.v1beta1.UpdateReceiverRequest.LabelsEntry + 59, // 29: odpf.siren.v1beta1.UpdateReceiverRequest.configurations:type_name -> google.protobuf.Struct + 57, // 30: odpf.siren.v1beta1.SendReceiverNotificationRequest.slack:type_name -> odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload + 26, // 31: odpf.siren.v1beta1.Alerts.alerts:type_name -> odpf.siren.v1beta1.Alert + 60, // 32: odpf.siren.v1beta1.Alert.triggered_at:type_name -> google.protobuf.Timestamp + 28, // 33: odpf.siren.v1beta1.CreateCortexAlertsRequest.alerts:type_name -> odpf.siren.v1beta1.CortexAlert + 29, // 34: odpf.siren.v1beta1.CortexAlert.annotations:type_name -> odpf.siren.v1beta1.Annotations + 30, // 35: odpf.siren.v1beta1.CortexAlert.labels:type_name -> odpf.siren.v1beta1.Labels + 60, // 36: odpf.siren.v1beta1.CortexAlert.starts_at:type_name -> google.protobuf.Timestamp + 32, // 37: odpf.siren.v1beta1.Rule.variables:type_name -> odpf.siren.v1beta1.Variables + 60, // 38: odpf.siren.v1beta1.Rule.created_at:type_name -> google.protobuf.Timestamp + 60, // 39: odpf.siren.v1beta1.Rule.updated_at:type_name -> google.protobuf.Timestamp + 31, // 40: odpf.siren.v1beta1.ListRulesResponse.rules:type_name -> odpf.siren.v1beta1.Rule + 31, // 41: odpf.siren.v1beta1.UpdateRuleResponse.rule:type_name -> odpf.siren.v1beta1.Rule + 32, // 42: odpf.siren.v1beta1.UpdateRuleRequest.variables:type_name -> odpf.siren.v1beta1.Variables + 60, // 43: odpf.siren.v1beta1.Template.created_at:type_name -> google.protobuf.Timestamp + 60, // 44: odpf.siren.v1beta1.Template.updated_at:type_name -> google.protobuf.Timestamp + 38, // 45: odpf.siren.v1beta1.Template.variables:type_name -> odpf.siren.v1beta1.TemplateVariables + 39, // 46: odpf.siren.v1beta1.TemplateResponse.template:type_name -> odpf.siren.v1beta1.Template + 38, // 47: odpf.siren.v1beta1.UpsertTemplateRequest.variables:type_name -> odpf.siren.v1beta1.TemplateVariables + 39, // 48: odpf.siren.v1beta1.ListTemplatesResponse.templates:type_name -> odpf.siren.v1beta1.Template + 58, // 49: odpf.siren.v1beta1.RenderTemplateRequest.variables:type_name -> odpf.siren.v1beta1.RenderTemplateRequest.VariablesEntry + 59, // 50: odpf.siren.v1beta1.SendReceiverNotificationRequest.SlackPayload.blocks:type_name -> google.protobuf.Struct + 1, // 51: odpf.siren.v1beta1.SirenService.Ping:input_type -> odpf.siren.v1beta1.PingRequest + 4, // 52: odpf.siren.v1beta1.SirenService.ListProviders:input_type -> odpf.siren.v1beta1.ListProvidersRequest + 6, // 53: odpf.siren.v1beta1.SirenService.CreateProvider:input_type -> odpf.siren.v1beta1.CreateProviderRequest + 7, // 54: odpf.siren.v1beta1.SirenService.GetProvider:input_type -> odpf.siren.v1beta1.GetProviderRequest + 8, // 55: odpf.siren.v1beta1.SirenService.UpdateProvider:input_type -> odpf.siren.v1beta1.UpdateProviderRequest + 9, // 56: odpf.siren.v1beta1.SirenService.DeleteProvider:input_type -> odpf.siren.v1beta1.DeleteProviderRequest + 22, // 57: odpf.siren.v1beta1.SirenService.SendReceiverNotification:input_type -> odpf.siren.v1beta1.SendReceiverNotificationRequest + 61, // 58: odpf.siren.v1beta1.SirenService.ListNamespaces:input_type -> google.protobuf.Empty + 12, // 59: odpf.siren.v1beta1.SirenService.CreateNamespace:input_type -> odpf.siren.v1beta1.CreateNamespaceRequest + 13, // 60: odpf.siren.v1beta1.SirenService.GetNamespace:input_type -> odpf.siren.v1beta1.GetNamespaceRequest + 14, // 61: odpf.siren.v1beta1.SirenService.UpdateNamespace:input_type -> odpf.siren.v1beta1.UpdateNamespaceRequest + 15, // 62: odpf.siren.v1beta1.SirenService.DeleteNamespace:input_type -> odpf.siren.v1beta1.DeleteNamespaceRequest + 61, // 63: odpf.siren.v1beta1.SirenService.ListReceivers:input_type -> google.protobuf.Empty + 18, // 64: odpf.siren.v1beta1.SirenService.CreateReceiver:input_type -> odpf.siren.v1beta1.CreateReceiverRequest + 19, // 65: odpf.siren.v1beta1.SirenService.GetReceiver:input_type -> odpf.siren.v1beta1.GetReceiverRequest + 20, // 66: odpf.siren.v1beta1.SirenService.UpdateReceiver:input_type -> odpf.siren.v1beta1.UpdateReceiverRequest + 21, // 67: odpf.siren.v1beta1.SirenService.DeleteReceiver:input_type -> odpf.siren.v1beta1.DeleteReceiverRequest + 24, // 68: odpf.siren.v1beta1.SirenService.ListAlerts:input_type -> odpf.siren.v1beta1.ListAlertsRequest + 27, // 69: odpf.siren.v1beta1.SirenService.CreateCortexAlerts:input_type -> odpf.siren.v1beta1.CreateCortexAlertsRequest + 33, // 70: odpf.siren.v1beta1.SirenService.ListRules:input_type -> odpf.siren.v1beta1.ListRulesRequest + 36, // 71: odpf.siren.v1beta1.SirenService.UpdateRule:input_type -> odpf.siren.v1beta1.UpdateRuleRequest + 37, // 72: odpf.siren.v1beta1.SirenService.ListTemplates:input_type -> odpf.siren.v1beta1.ListTemplatesRequest + 43, // 73: odpf.siren.v1beta1.SirenService.GetTemplateByName:input_type -> odpf.siren.v1beta1.GetTemplateByNameRequest + 41, // 74: odpf.siren.v1beta1.SirenService.UpsertTemplate:input_type -> odpf.siren.v1beta1.UpsertTemplateRequest + 44, // 75: odpf.siren.v1beta1.SirenService.DeleteTemplate:input_type -> odpf.siren.v1beta1.DeleteTemplateRequest + 46, // 76: odpf.siren.v1beta1.SirenService.RenderTemplate:input_type -> odpf.siren.v1beta1.RenderTemplateRequest + 2, // 77: odpf.siren.v1beta1.SirenService.Ping:output_type -> odpf.siren.v1beta1.PingResponse + 5, // 78: odpf.siren.v1beta1.SirenService.ListProviders:output_type -> odpf.siren.v1beta1.ListProvidersResponse + 3, // 79: odpf.siren.v1beta1.SirenService.CreateProvider:output_type -> odpf.siren.v1beta1.Provider + 3, // 80: odpf.siren.v1beta1.SirenService.GetProvider:output_type -> odpf.siren.v1beta1.Provider + 3, // 81: odpf.siren.v1beta1.SirenService.UpdateProvider:output_type -> odpf.siren.v1beta1.Provider + 61, // 82: odpf.siren.v1beta1.SirenService.DeleteProvider:output_type -> google.protobuf.Empty + 23, // 83: odpf.siren.v1beta1.SirenService.SendReceiverNotification:output_type -> odpf.siren.v1beta1.SendReceiverNotificationResponse + 11, // 84: odpf.siren.v1beta1.SirenService.ListNamespaces:output_type -> odpf.siren.v1beta1.ListNamespacesResponse + 10, // 85: odpf.siren.v1beta1.SirenService.CreateNamespace:output_type -> odpf.siren.v1beta1.Namespace + 10, // 86: odpf.siren.v1beta1.SirenService.GetNamespace:output_type -> odpf.siren.v1beta1.Namespace + 10, // 87: odpf.siren.v1beta1.SirenService.UpdateNamespace:output_type -> odpf.siren.v1beta1.Namespace + 61, // 88: odpf.siren.v1beta1.SirenService.DeleteNamespace:output_type -> google.protobuf.Empty + 17, // 89: odpf.siren.v1beta1.SirenService.ListReceivers:output_type -> odpf.siren.v1beta1.ListReceiversResponse + 16, // 90: odpf.siren.v1beta1.SirenService.CreateReceiver:output_type -> odpf.siren.v1beta1.Receiver + 16, // 91: odpf.siren.v1beta1.SirenService.GetReceiver:output_type -> odpf.siren.v1beta1.Receiver + 16, // 92: odpf.siren.v1beta1.SirenService.UpdateReceiver:output_type -> odpf.siren.v1beta1.Receiver + 61, // 93: odpf.siren.v1beta1.SirenService.DeleteReceiver:output_type -> google.protobuf.Empty + 25, // 94: odpf.siren.v1beta1.SirenService.ListAlerts:output_type -> odpf.siren.v1beta1.Alerts + 25, // 95: odpf.siren.v1beta1.SirenService.CreateCortexAlerts:output_type -> odpf.siren.v1beta1.Alerts + 34, // 96: odpf.siren.v1beta1.SirenService.ListRules:output_type -> odpf.siren.v1beta1.ListRulesResponse + 35, // 97: odpf.siren.v1beta1.SirenService.UpdateRule:output_type -> odpf.siren.v1beta1.UpdateRuleResponse + 42, // 98: odpf.siren.v1beta1.SirenService.ListTemplates:output_type -> odpf.siren.v1beta1.ListTemplatesResponse + 40, // 99: odpf.siren.v1beta1.SirenService.GetTemplateByName:output_type -> odpf.siren.v1beta1.TemplateResponse + 40, // 100: odpf.siren.v1beta1.SirenService.UpsertTemplate:output_type -> odpf.siren.v1beta1.TemplateResponse + 45, // 101: odpf.siren.v1beta1.SirenService.DeleteTemplate:output_type -> odpf.siren.v1beta1.DeleteTemplateResponse + 47, // 102: odpf.siren.v1beta1.SirenService.RenderTemplate:output_type -> odpf.siren.v1beta1.RenderTemplateResponse + 77, // [77:103] is the sub-list for method output_type + 51, // [51:77] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_odpf_siren_v1beta1_siren_proto_init() } @@ -5207,7 +4433,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAlertsRequest); i { + switch v := v.(*SendReceiverNotificationRequest); i { case 0: return &v.state case 1: @@ -5219,7 +4445,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Alerts); i { + switch v := v.(*SendReceiverNotificationResponse); i { case 0: return &v.state case 1: @@ -5231,7 +4457,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Alert); i { + switch v := v.(*ListAlertsRequest); i { case 0: return &v.state case 1: @@ -5243,7 +4469,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCortexAlertsRequest); i { + switch v := v.(*Alerts); i { case 0: return &v.state case 1: @@ -5255,7 +4481,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CortexAlert); i { + switch v := v.(*Alert); i { case 0: return &v.state case 1: @@ -5267,7 +4493,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Annotations); i { + switch v := v.(*CreateCortexAlertsRequest); i { case 0: return &v.state case 1: @@ -5279,7 +4505,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Labels); i { + switch v := v.(*CortexAlert); i { case 0: return &v.state case 1: @@ -5291,7 +4517,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SlackWorkspace); i { + switch v := v.(*Annotations); i { case 0: return &v.state case 1: @@ -5303,7 +4529,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkspaceChannelsRequest); i { + switch v := v.(*Labels); i { case 0: return &v.state case 1: @@ -5315,7 +4541,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkspaceChannelsResponse); i { + switch v := v.(*Rule); i { case 0: return &v.state case 1: @@ -5327,7 +4553,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeCodeRequest); i { + switch v := v.(*Variables); i { case 0: return &v.state case 1: @@ -5339,126 +4565,6 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } file_odpf_siren_v1beta1_siren_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeCodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAlertCredentialsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Critical); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Warning); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SlackConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAlertCredentialsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateAlertCredentialsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateAlertCredentialsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendReceiverNotificationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendReceiverNotificationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListRulesRequest); i { case 0: return &v.state @@ -5470,31 +4576,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Variables); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Rule); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_odpf_siren_v1beta1_siren_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListRulesResponse); i { case 0: return &v.state @@ -5506,7 +4588,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateRuleResponse); i { case 0: return &v.state @@ -5518,7 +4600,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateRuleRequest); i { case 0: return &v.state @@ -5530,7 +4612,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListTemplatesRequest); i { case 0: return &v.state @@ -5542,7 +4624,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TemplateVariables); i { case 0: return &v.state @@ -5554,7 +4636,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Template); i { case 0: return &v.state @@ -5566,7 +4648,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TemplateResponse); i { case 0: return &v.state @@ -5578,7 +4660,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpsertTemplateRequest); i { case 0: return &v.state @@ -5590,7 +4672,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListTemplatesResponse); i { case 0: return &v.state @@ -5602,7 +4684,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTemplateByNameRequest); i { case 0: return &v.state @@ -5614,7 +4696,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteTemplateRequest); i { case 0: return &v.state @@ -5626,7 +4708,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteTemplateResponse); i { case 0: return &v.state @@ -5638,7 +4720,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RenderTemplateRequest); i { case 0: return &v.state @@ -5650,7 +4732,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RenderTemplateResponse); i { case 0: return &v.state @@ -5662,7 +4744,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { return nil } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_odpf_siren_v1beta1_siren_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendReceiverNotificationRequest_SlackPayload); i { case 0: return &v.state @@ -5675,7 +4757,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { } } } - file_odpf_siren_v1beta1_siren_proto_msgTypes[40].OneofWrappers = []interface{}{ + file_odpf_siren_v1beta1_siren_proto_msgTypes[21].OneofWrappers = []interface{}{ (*SendReceiverNotificationRequest_Slack)(nil), } type x struct{} @@ -5684,7 +4766,7 @@ func file_odpf_siren_v1beta1_siren_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_odpf_siren_v1beta1_siren_proto_rawDesc, NumEnums: 1, - NumMessages: 70, + NumMessages: 58, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/odpf/siren/v1beta1/siren.pb.gw.go b/api/proto/odpf/siren/v1beta1/siren.pb.gw.go index c43f5cf4..c2d9e3a6 100644 --- a/api/proto/odpf/siren/v1beta1/siren.pb.gw.go +++ b/api/proto/odpf/siren/v1beta1/siren.pb.gw.go @@ -292,6 +292,74 @@ func local_request_SirenService_DeleteProvider_0(ctx context.Context, marshaler } +func request_SirenService_SendReceiverNotification_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SendReceiverNotificationRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.SendReceiverNotification(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SirenService_SendReceiverNotification_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SendReceiverNotificationRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.SendReceiverNotification(ctx, &protoReq) + return msg, metadata, err + +} + func request_SirenService_ListNamespaces_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -830,282 +898,8 @@ func local_request_SirenService_ListAlerts_0(ctx context.Context, marshaler runt } -func request_SirenService_SendReceiverNotification_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SendReceiverNotificationRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.Uint64(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.SendReceiverNotification(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SirenService_SendReceiverNotification_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SendReceiverNotificationRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.Uint64(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.SendReceiverNotification(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SirenService_CreateCortexAlerts_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateCortexAlertsRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["provider_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_id") - } - - protoReq.ProviderId, err = runtime.Uint64(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_id", err) - } - - msg, err := client.CreateCortexAlerts(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SirenService_CreateCortexAlerts_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateCortexAlertsRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["provider_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_id") - } - - protoReq.ProviderId, err = runtime.Uint64(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_id", err) - } - - msg, err := server.CreateCortexAlerts(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SirenService_ListWorkspaceChannels_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListWorkspaceChannelsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["workspace_name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workspace_name") - } - - protoReq.WorkspaceName, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workspace_name", err) - } - - msg, err := client.ListWorkspaceChannels(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SirenService_ListWorkspaceChannels_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListWorkspaceChannelsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["workspace_name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workspace_name") - } - - protoReq.WorkspaceName, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workspace_name", err) - } - - msg, err := server.ListWorkspaceChannels(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SirenService_ExchangeCode_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeCodeRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ExchangeCode(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SirenService_ExchangeCode_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeCodeRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ExchangeCode(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SirenService_GetAlertCredentials_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetAlertCredentialsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["team_name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_name") - } - - protoReq.TeamName, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_name", err) - } - - msg, err := client.GetAlertCredentials(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SirenService_GetAlertCredentials_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetAlertCredentialsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["team_name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_name") - } - - protoReq.TeamName, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_name", err) - } - - msg, err := server.GetAlertCredentials(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SirenService_UpdateAlertCredentials_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateAlertCredentialsRequest +func request_SirenService_CreateCortexAlerts_0(ctx context.Context, marshaler runtime.Marshaler, client SirenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateCortexAlertsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1123,23 +917,23 @@ func request_SirenService_UpdateAlertCredentials_0(ctx context.Context, marshale _ = err ) - val, ok = pathParams["team_name"] + val, ok = pathParams["provider_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_id") } - protoReq.TeamName, err = runtime.String(val) + protoReq.ProviderId, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_id", err) } - msg, err := client.UpdateAlertCredentials(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.CreateCortexAlerts(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_SirenService_UpdateAlertCredentials_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateAlertCredentialsRequest +func local_request_SirenService_CreateCortexAlerts_0(ctx context.Context, marshaler runtime.Marshaler, server SirenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateCortexAlertsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1157,17 +951,17 @@ func local_request_SirenService_UpdateAlertCredentials_0(ctx context.Context, ma _ = err ) - val, ok = pathParams["team_name"] + val, ok = pathParams["provider_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_id") } - protoReq.TeamName, err = runtime.String(val) + protoReq.ProviderId, err = runtime.Uint64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_id", err) } - msg, err := server.UpdateAlertCredentials(ctx, &protoReq) + msg, err := server.CreateCortexAlerts(ctx, &protoReq) return msg, metadata, err } @@ -1628,6 +1422,29 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_SirenService_SendReceiverNotification_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}/send")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SirenService_SendReceiverNotification_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SirenService_SendReceiverNotification_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_SirenService_ListNamespaces_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1881,29 +1698,6 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("POST", pattern_SirenService_SendReceiverNotification_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}/send")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SirenService_SendReceiverNotification_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_SendReceiverNotification_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_SirenService_CreateCortexAlerts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1927,98 +1721,6 @@ func RegisterSirenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("GET", pattern_SirenService_ListWorkspaceChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", runtime.WithHTTPPathPattern("/v1beta1/slackworkspaces/{workspace_name}/channels")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SirenService_ListWorkspaceChannels_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_ListWorkspaceChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_SirenService_ExchangeCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ExchangeCode", runtime.WithHTTPPathPattern("/v1beta1/oauth/slack/token")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SirenService_ExchangeCode_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_ExchangeCode_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SirenService_GetAlertCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SirenService_GetAlertCredentials_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_GetAlertCredentials_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_SirenService_UpdateAlertCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SirenService_UpdateAlertCredentials_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_UpdateAlertCredentials_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_SirenService_ListRules_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2341,6 +2043,26 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_SirenService_SendReceiverNotification_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}/send")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SirenService_SendReceiverNotification_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SirenService_SendReceiverNotification_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_SirenService_ListNamespaces_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2561,26 +2283,6 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("POST", pattern_SirenService_SendReceiverNotification_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", runtime.WithHTTPPathPattern("/v1beta1/receivers/{id}/send")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SirenService_SendReceiverNotification_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_SendReceiverNotification_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_SirenService_CreateCortexAlerts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2601,86 +2303,6 @@ func RegisterSirenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("GET", pattern_SirenService_ListWorkspaceChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", runtime.WithHTTPPathPattern("/v1beta1/slackworkspaces/{workspace_name}/channels")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SirenService_ListWorkspaceChannels_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_ListWorkspaceChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_SirenService_ExchangeCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/ExchangeCode", runtime.WithHTTPPathPattern("/v1beta1/oauth/slack/token")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SirenService_ExchangeCode_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_ExchangeCode_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SirenService_GetAlertCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SirenService_GetAlertCredentials_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_GetAlertCredentials_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_SirenService_UpdateAlertCredentials_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", runtime.WithHTTPPathPattern("/v1beta1/teams/{team_name}/credentials")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SirenService_UpdateAlertCredentials_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SirenService_UpdateAlertCredentials_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_SirenService_ListRules_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2837,6 +2459,8 @@ var ( pattern_SirenService_DeleteProvider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "providers", "id"}, "")) + pattern_SirenService_SendReceiverNotification_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "receivers", "id", "send"}, "")) + pattern_SirenService_ListNamespaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "namespaces"}, "")) pattern_SirenService_CreateNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "namespaces"}, "")) @@ -2859,18 +2483,8 @@ var ( pattern_SirenService_ListAlerts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "alerts", "provider_name", "provider_id"}, "")) - pattern_SirenService_SendReceiverNotification_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "receivers", "id", "send"}, "")) - pattern_SirenService_CreateCortexAlerts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1beta1", "alerts", "cortex", "provider_id"}, "")) - pattern_SirenService_ListWorkspaceChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "slackworkspaces", "workspace_name", "channels"}, "")) - - pattern_SirenService_ExchangeCode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1beta1", "oauth", "slack", "token"}, "")) - - pattern_SirenService_GetAlertCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "teams", "team_name", "credentials"}, "")) - - pattern_SirenService_UpdateAlertCredentials_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "teams", "team_name", "credentials"}, "")) - pattern_SirenService_ListRules_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "rules"}, "")) pattern_SirenService_UpdateRule_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "rules"}, "")) @@ -2899,6 +2513,8 @@ var ( forward_SirenService_DeleteProvider_0 = runtime.ForwardResponseMessage + forward_SirenService_SendReceiverNotification_0 = runtime.ForwardResponseMessage + forward_SirenService_ListNamespaces_0 = runtime.ForwardResponseMessage forward_SirenService_CreateNamespace_0 = runtime.ForwardResponseMessage @@ -2921,18 +2537,8 @@ var ( forward_SirenService_ListAlerts_0 = runtime.ForwardResponseMessage - forward_SirenService_SendReceiverNotification_0 = runtime.ForwardResponseMessage - forward_SirenService_CreateCortexAlerts_0 = runtime.ForwardResponseMessage - forward_SirenService_ListWorkspaceChannels_0 = runtime.ForwardResponseMessage - - forward_SirenService_ExchangeCode_0 = runtime.ForwardResponseMessage - - forward_SirenService_GetAlertCredentials_0 = runtime.ForwardResponseMessage - - forward_SirenService_UpdateAlertCredentials_0 = runtime.ForwardResponseMessage - forward_SirenService_ListRules_0 = runtime.ForwardResponseMessage forward_SirenService_UpdateRule_0 = runtime.ForwardResponseMessage diff --git a/api/proto/odpf/siren/v1beta1/siren.pb.validate.go b/api/proto/odpf/siren/v1beta1/siren.pb.validate.go index 4d938787..ae04384c 100644 --- a/api/proto/odpf/siren/v1beta1/siren.pb.validate.go +++ b/api/proto/odpf/siren/v1beta1/siren.pb.validate.go @@ -3071,6 +3071,251 @@ var _ interface { ErrorName() string } = DeleteReceiverRequestValidationError{} +// Validate checks the field values on SendReceiverNotificationRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *SendReceiverNotificationRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SendReceiverNotificationRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// SendReceiverNotificationRequestMultiError, or nil if none found. +func (m *SendReceiverNotificationRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SendReceiverNotificationRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Id + + switch m.Data.(type) { + + case *SendReceiverNotificationRequest_Slack: + + if all { + switch v := interface{}(m.GetSlack()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SendReceiverNotificationRequestValidationError{ + field: "Slack", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SendReceiverNotificationRequestValidationError{ + field: "Slack", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSlack()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendReceiverNotificationRequestValidationError{ + field: "Slack", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return SendReceiverNotificationRequestMultiError(errors) + } + return nil +} + +// SendReceiverNotificationRequestMultiError is an error wrapping multiple +// validation errors returned by SendReceiverNotificationRequest.ValidateAll() +// if the designated constraints aren't met. +type SendReceiverNotificationRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SendReceiverNotificationRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SendReceiverNotificationRequestMultiError) AllErrors() []error { return m } + +// SendReceiverNotificationRequestValidationError is the validation error +// returned by SendReceiverNotificationRequest.Validate if the designated +// constraints aren't met. +type SendReceiverNotificationRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendReceiverNotificationRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendReceiverNotificationRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendReceiverNotificationRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendReceiverNotificationRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendReceiverNotificationRequestValidationError) ErrorName() string { + return "SendReceiverNotificationRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SendReceiverNotificationRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendReceiverNotificationRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendReceiverNotificationRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendReceiverNotificationRequestValidationError{} + +// Validate checks the field values on SendReceiverNotificationResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *SendReceiverNotificationResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SendReceiverNotificationResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// SendReceiverNotificationResponseMultiError, or nil if none found. +func (m *SendReceiverNotificationResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SendReceiverNotificationResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Ok + + if len(errors) > 0 { + return SendReceiverNotificationResponseMultiError(errors) + } + return nil +} + +// SendReceiverNotificationResponseMultiError is an error wrapping multiple +// validation errors returned by +// SendReceiverNotificationResponse.ValidateAll() if the designated +// constraints aren't met. +type SendReceiverNotificationResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SendReceiverNotificationResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SendReceiverNotificationResponseMultiError) AllErrors() []error { return m } + +// SendReceiverNotificationResponseValidationError is the validation error +// returned by SendReceiverNotificationResponse.Validate if the designated +// constraints aren't met. +type SendReceiverNotificationResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendReceiverNotificationResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendReceiverNotificationResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendReceiverNotificationResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendReceiverNotificationResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendReceiverNotificationResponseValidationError) ErrorName() string { + return "SendReceiverNotificationResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SendReceiverNotificationResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendReceiverNotificationResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendReceiverNotificationResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendReceiverNotificationResponseValidationError{} + // Validate checks the field values on ListAlertsRequest with the rules defined // in the proto definition for this message. If any rules are violated, the // first error encountered is returned, or nil if there are no violations. @@ -4006,22 +4251,21 @@ var _ interface { ErrorName() string } = LabelsValidationError{} -// Validate checks the field values on SlackWorkspace with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *SlackWorkspace) Validate() error { +// Validate checks the field values on Rule with the rules defined in the proto +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. +func (m *Rule) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on SlackWorkspace with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in SlackWorkspaceMultiError, -// or nil if none found. -func (m *SlackWorkspace) ValidateAll() error { +// ValidateAll checks the field values on Rule with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in RuleMultiError, or nil if none found. +func (m *Rule) ValidateAll() error { return m.validate(true) } -func (m *SlackWorkspace) validate(all bool) error { +func (m *Rule) validate(all bool) error { if m == nil { return nil } @@ -4032,237 +4276,31 @@ func (m *SlackWorkspace) validate(all bool) error { // no validation rules for Name - if len(errors) > 0 { - return SlackWorkspaceMultiError(errors) - } - return nil -} - -// SlackWorkspaceMultiError is an error wrapping multiple validation errors -// returned by SlackWorkspace.ValidateAll() if the designated constraints -// aren't met. -type SlackWorkspaceMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SlackWorkspaceMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SlackWorkspaceMultiError) AllErrors() []error { return m } - -// SlackWorkspaceValidationError is the validation error returned by -// SlackWorkspace.Validate if the designated constraints aren't met. -type SlackWorkspaceValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SlackWorkspaceValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SlackWorkspaceValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SlackWorkspaceValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SlackWorkspaceValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SlackWorkspaceValidationError) ErrorName() string { return "SlackWorkspaceValidationError" } - -// Error satisfies the builtin error interface -func (e SlackWorkspaceValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSlackWorkspace.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SlackWorkspaceValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SlackWorkspaceValidationError{} - -// Validate checks the field values on ListWorkspaceChannelsRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *ListWorkspaceChannelsRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ListWorkspaceChannelsRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// ListWorkspaceChannelsRequestMultiError, or nil if none found. -func (m *ListWorkspaceChannelsRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *ListWorkspaceChannelsRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if !_ListWorkspaceChannelsRequest_WorkspaceName_Pattern.MatchString(m.GetWorkspaceName()) { - err := ListWorkspaceChannelsRequestValidationError{ - field: "WorkspaceName", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if len(errors) > 0 { - return ListWorkspaceChannelsRequestMultiError(errors) - } - return nil -} - -// ListWorkspaceChannelsRequestMultiError is an error wrapping multiple -// validation errors returned by ListWorkspaceChannelsRequest.ValidateAll() if -// the designated constraints aren't met. -type ListWorkspaceChannelsRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ListWorkspaceChannelsRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ListWorkspaceChannelsRequestMultiError) AllErrors() []error { return m } - -// ListWorkspaceChannelsRequestValidationError is the validation error returned -// by ListWorkspaceChannelsRequest.Validate if the designated constraints -// aren't met. -type ListWorkspaceChannelsRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ListWorkspaceChannelsRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ListWorkspaceChannelsRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ListWorkspaceChannelsRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ListWorkspaceChannelsRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ListWorkspaceChannelsRequestValidationError) ErrorName() string { - return "ListWorkspaceChannelsRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e ListWorkspaceChannelsRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sListWorkspaceChannelsRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ListWorkspaceChannelsRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ListWorkspaceChannelsRequestValidationError{} - -var _ListWorkspaceChannelsRequest_WorkspaceName_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -// Validate checks the field values on ListWorkspaceChannelsResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *ListWorkspaceChannelsResponse) Validate() error { - return m.validate(false) -} + // no validation rules for Enabled -// ValidateAll checks the field values on ListWorkspaceChannelsResponse with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// ListWorkspaceChannelsResponseMultiError, or nil if none found. -func (m *ListWorkspaceChannelsResponse) ValidateAll() error { - return m.validate(true) -} + // no validation rules for GroupName -func (m *ListWorkspaceChannelsResponse) validate(all bool) error { - if m == nil { - return nil - } + // no validation rules for Namespace - var errors []error + // no validation rules for Template - for idx, item := range m.GetData() { + for idx, item := range m.GetVariables() { _, _ = idx, item if all { switch v := interface{}(item).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, ListWorkspaceChannelsResponseValidationError{ - field: fmt.Sprintf("Data[%v]", idx), + errors = append(errors, RuleValidationError{ + field: fmt.Sprintf("Variables[%v]", idx), reason: "embedded message failed validation", cause: err, }) } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, ListWorkspaceChannelsResponseValidationError{ - field: fmt.Sprintf("Data[%v]", idx), + errors = append(errors, RuleValidationError{ + field: fmt.Sprintf("Variables[%v]", idx), reason: "embedded message failed validation", cause: err, }) @@ -4270,8 +4308,8 @@ func (m *ListWorkspaceChannelsResponse) validate(all bool) error { } } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return ListWorkspaceChannelsResponseValidationError{ - field: fmt.Sprintf("Data[%v]", idx), + return RuleValidationError{ + field: fmt.Sprintf("Variables[%v]", idx), reason: "embedded message failed validation", cause: err, } @@ -4280,1528 +4318,87 @@ func (m *ListWorkspaceChannelsResponse) validate(all bool) error { } - if len(errors) > 0 { - return ListWorkspaceChannelsResponseMultiError(errors) - } - return nil -} - -// ListWorkspaceChannelsResponseMultiError is an error wrapping multiple -// validation errors returned by ListWorkspaceChannelsResponse.ValidateAll() -// if the designated constraints aren't met. -type ListWorkspaceChannelsResponseMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ListWorkspaceChannelsResponseMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ListWorkspaceChannelsResponseMultiError) AllErrors() []error { return m } - -// ListWorkspaceChannelsResponseValidationError is the validation error -// returned by ListWorkspaceChannelsResponse.Validate if the designated -// constraints aren't met. -type ListWorkspaceChannelsResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ListWorkspaceChannelsResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ListWorkspaceChannelsResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ListWorkspaceChannelsResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ListWorkspaceChannelsResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ListWorkspaceChannelsResponseValidationError) ErrorName() string { - return "ListWorkspaceChannelsResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e ListWorkspaceChannelsResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sListWorkspaceChannelsResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ListWorkspaceChannelsResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ListWorkspaceChannelsResponseValidationError{} - -// Validate checks the field values on ExchangeCodeRequest with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *ExchangeCodeRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ExchangeCodeRequest with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// ExchangeCodeRequestMultiError, or nil if none found. -func (m *ExchangeCodeRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *ExchangeCodeRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if !_ExchangeCodeRequest_Code_Pattern.MatchString(m.GetCode()) { - err := ExchangeCodeRequestValidationError{ - field: "Code", - reason: "value does not match regex pattern \"^[A-Za-z0-9._-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if !_ExchangeCodeRequest_Workspace_Pattern.MatchString(m.GetWorkspace()) { - err := ExchangeCodeRequestValidationError{ - field: "Workspace", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if len(errors) > 0 { - return ExchangeCodeRequestMultiError(errors) - } - return nil -} - -// ExchangeCodeRequestMultiError is an error wrapping multiple validation -// errors returned by ExchangeCodeRequest.ValidateAll() if the designated -// constraints aren't met. -type ExchangeCodeRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ExchangeCodeRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ExchangeCodeRequestMultiError) AllErrors() []error { return m } - -// ExchangeCodeRequestValidationError is the validation error returned by -// ExchangeCodeRequest.Validate if the designated constraints aren't met. -type ExchangeCodeRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ExchangeCodeRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ExchangeCodeRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ExchangeCodeRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ExchangeCodeRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ExchangeCodeRequestValidationError) ErrorName() string { - return "ExchangeCodeRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e ExchangeCodeRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sExchangeCodeRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ExchangeCodeRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ExchangeCodeRequestValidationError{} - -var _ExchangeCodeRequest_Code_Pattern = regexp.MustCompile("^[A-Za-z0-9._-]+$") - -var _ExchangeCodeRequest_Workspace_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -// Validate checks the field values on ExchangeCodeResponse with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *ExchangeCodeResponse) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ExchangeCodeResponse with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// ExchangeCodeResponseMultiError, or nil if none found. -func (m *ExchangeCodeResponse) ValidateAll() error { - return m.validate(true) -} - -func (m *ExchangeCodeResponse) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Ok - - if len(errors) > 0 { - return ExchangeCodeResponseMultiError(errors) - } - return nil -} - -// ExchangeCodeResponseMultiError is an error wrapping multiple validation -// errors returned by ExchangeCodeResponse.ValidateAll() if the designated -// constraints aren't met. -type ExchangeCodeResponseMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ExchangeCodeResponseMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ExchangeCodeResponseMultiError) AllErrors() []error { return m } - -// ExchangeCodeResponseValidationError is the validation error returned by -// ExchangeCodeResponse.Validate if the designated constraints aren't met. -type ExchangeCodeResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ExchangeCodeResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ExchangeCodeResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ExchangeCodeResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ExchangeCodeResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ExchangeCodeResponseValidationError) ErrorName() string { - return "ExchangeCodeResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e ExchangeCodeResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sExchangeCodeResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ExchangeCodeResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ExchangeCodeResponseValidationError{} - -// Validate checks the field values on GetAlertCredentialsRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *GetAlertCredentialsRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on GetAlertCredentialsRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// GetAlertCredentialsRequestMultiError, or nil if none found. -func (m *GetAlertCredentialsRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *GetAlertCredentialsRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if !_GetAlertCredentialsRequest_TeamName_Pattern.MatchString(m.GetTeamName()) { - err := GetAlertCredentialsRequestValidationError{ - field: "TeamName", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if len(errors) > 0 { - return GetAlertCredentialsRequestMultiError(errors) - } - return nil -} - -// GetAlertCredentialsRequestMultiError is an error wrapping multiple -// validation errors returned by GetAlertCredentialsRequest.ValidateAll() if -// the designated constraints aren't met. -type GetAlertCredentialsRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m GetAlertCredentialsRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m GetAlertCredentialsRequestMultiError) AllErrors() []error { return m } - -// GetAlertCredentialsRequestValidationError is the validation error returned -// by GetAlertCredentialsRequest.Validate if the designated constraints aren't met. -type GetAlertCredentialsRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e GetAlertCredentialsRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e GetAlertCredentialsRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e GetAlertCredentialsRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e GetAlertCredentialsRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e GetAlertCredentialsRequestValidationError) ErrorName() string { - return "GetAlertCredentialsRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e GetAlertCredentialsRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sGetAlertCredentialsRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = GetAlertCredentialsRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = GetAlertCredentialsRequestValidationError{} - -var _GetAlertCredentialsRequest_TeamName_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -// Validate checks the field values on Critical with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Critical) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Critical with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in CriticalMultiError, or nil -// if none found. -func (m *Critical) ValidateAll() error { - return m.validate(true) -} - -func (m *Critical) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if !_Critical_Channel_Pattern.MatchString(m.GetChannel()) { - err := CriticalValidationError{ - field: "Channel", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if len(errors) > 0 { - return CriticalMultiError(errors) - } - return nil -} - -// CriticalMultiError is an error wrapping multiple validation errors returned -// by Critical.ValidateAll() if the designated constraints aren't met. -type CriticalMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m CriticalMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m CriticalMultiError) AllErrors() []error { return m } - -// CriticalValidationError is the validation error returned by -// Critical.Validate if the designated constraints aren't met. -type CriticalValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e CriticalValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e CriticalValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e CriticalValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e CriticalValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e CriticalValidationError) ErrorName() string { return "CriticalValidationError" } - -// Error satisfies the builtin error interface -func (e CriticalValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCritical.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = CriticalValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = CriticalValidationError{} - -var _Critical_Channel_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -// Validate checks the field values on Warning with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Warning) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Warning with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in WarningMultiError, or nil if none found. -func (m *Warning) ValidateAll() error { - return m.validate(true) -} - -func (m *Warning) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if !_Warning_Channel_Pattern.MatchString(m.GetChannel()) { - err := WarningValidationError{ - field: "Channel", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if len(errors) > 0 { - return WarningMultiError(errors) - } - return nil -} - -// WarningMultiError is an error wrapping multiple validation errors returned -// by Warning.ValidateAll() if the designated constraints aren't met. -type WarningMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m WarningMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m WarningMultiError) AllErrors() []error { return m } - -// WarningValidationError is the validation error returned by Warning.Validate -// if the designated constraints aren't met. -type WarningValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e WarningValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e WarningValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e WarningValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e WarningValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e WarningValidationError) ErrorName() string { return "WarningValidationError" } - -// Error satisfies the builtin error interface -func (e WarningValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sWarning.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = WarningValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = WarningValidationError{} - -var _Warning_Channel_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -// Validate checks the field values on SlackConfig with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *SlackConfig) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SlackConfig with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in SlackConfigMultiError, or -// nil if none found. -func (m *SlackConfig) ValidateAll() error { - return m.validate(true) -} - -func (m *SlackConfig) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if m.GetCritical() == nil { - err := SlackConfigValidationError{ - field: "Critical", - reason: "value is required", - } - if !all { - return err - } - errors = append(errors, err) - } - - if all { - switch v := interface{}(m.GetCritical()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, SlackConfigValidationError{ - field: "Critical", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, SlackConfigValidationError{ - field: "Critical", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetCritical()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SlackConfigValidationError{ - field: "Critical", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetWarning() == nil { - err := SlackConfigValidationError{ - field: "Warning", - reason: "value is required", - } - if !all { - return err - } - errors = append(errors, err) - } - - if all { - switch v := interface{}(m.GetWarning()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, SlackConfigValidationError{ - field: "Warning", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, SlackConfigValidationError{ - field: "Warning", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetWarning()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return SlackConfigValidationError{ - field: "Warning", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return SlackConfigMultiError(errors) - } - return nil -} - -// SlackConfigMultiError is an error wrapping multiple validation errors -// returned by SlackConfig.ValidateAll() if the designated constraints aren't met. -type SlackConfigMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SlackConfigMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SlackConfigMultiError) AllErrors() []error { return m } - -// SlackConfigValidationError is the validation error returned by -// SlackConfig.Validate if the designated constraints aren't met. -type SlackConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SlackConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SlackConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SlackConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SlackConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SlackConfigValidationError) ErrorName() string { return "SlackConfigValidationError" } - -// Error satisfies the builtin error interface -func (e SlackConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSlackConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SlackConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SlackConfigValidationError{} - -// Validate checks the field values on GetAlertCredentialsResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *GetAlertCredentialsResponse) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on GetAlertCredentialsResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// GetAlertCredentialsResponseMultiError, or nil if none found. -func (m *GetAlertCredentialsResponse) ValidateAll() error { - return m.validate(true) -} - -func (m *GetAlertCredentialsResponse) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Entity - - // no validation rules for TeamName - - // no validation rules for PagerdutyCredentials - - if all { - switch v := interface{}(m.GetSlackConfig()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, GetAlertCredentialsResponseValidationError{ - field: "SlackConfig", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, GetAlertCredentialsResponseValidationError{ - field: "SlackConfig", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetSlackConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return GetAlertCredentialsResponseValidationError{ - field: "SlackConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return GetAlertCredentialsResponseMultiError(errors) - } - return nil -} - -// GetAlertCredentialsResponseMultiError is an error wrapping multiple -// validation errors returned by GetAlertCredentialsResponse.ValidateAll() if -// the designated constraints aren't met. -type GetAlertCredentialsResponseMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m GetAlertCredentialsResponseMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m GetAlertCredentialsResponseMultiError) AllErrors() []error { return m } - -// GetAlertCredentialsResponseValidationError is the validation error returned -// by GetAlertCredentialsResponse.Validate if the designated constraints -// aren't met. -type GetAlertCredentialsResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e GetAlertCredentialsResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e GetAlertCredentialsResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e GetAlertCredentialsResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e GetAlertCredentialsResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e GetAlertCredentialsResponseValidationError) ErrorName() string { - return "GetAlertCredentialsResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e GetAlertCredentialsResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sGetAlertCredentialsResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = GetAlertCredentialsResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = GetAlertCredentialsResponseValidationError{} - -// Validate checks the field values on UpdateAlertCredentialsRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *UpdateAlertCredentialsRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on UpdateAlertCredentialsRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// UpdateAlertCredentialsRequestMultiError, or nil if none found. -func (m *UpdateAlertCredentialsRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *UpdateAlertCredentialsRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if !_UpdateAlertCredentialsRequest_Entity_Pattern.MatchString(m.GetEntity()) { - err := UpdateAlertCredentialsRequestValidationError{ - field: "Entity", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - // no validation rules for TeamName - - if !_UpdateAlertCredentialsRequest_PagerdutyCredentials_Pattern.MatchString(m.GetPagerdutyCredentials()) { - err := UpdateAlertCredentialsRequestValidationError{ - field: "PagerdutyCredentials", - reason: "value does not match regex pattern \"^[A-Za-z0-9_-]+$\"", - } - if !all { - return err - } - errors = append(errors, err) - } - - if m.GetSlackConfig() == nil { - err := UpdateAlertCredentialsRequestValidationError{ - field: "SlackConfig", - reason: "value is required", - } - if !all { - return err - } - errors = append(errors, err) - } - - if all { - switch v := interface{}(m.GetSlackConfig()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, UpdateAlertCredentialsRequestValidationError{ - field: "SlackConfig", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, UpdateAlertCredentialsRequestValidationError{ - field: "SlackConfig", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetSlackConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateAlertCredentialsRequestValidationError{ - field: "SlackConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return UpdateAlertCredentialsRequestMultiError(errors) - } - return nil -} - -// UpdateAlertCredentialsRequestMultiError is an error wrapping multiple -// validation errors returned by UpdateAlertCredentialsRequest.ValidateAll() -// if the designated constraints aren't met. -type UpdateAlertCredentialsRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m UpdateAlertCredentialsRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m UpdateAlertCredentialsRequestMultiError) AllErrors() []error { return m } - -// UpdateAlertCredentialsRequestValidationError is the validation error -// returned by UpdateAlertCredentialsRequest.Validate if the designated -// constraints aren't met. -type UpdateAlertCredentialsRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e UpdateAlertCredentialsRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e UpdateAlertCredentialsRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e UpdateAlertCredentialsRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e UpdateAlertCredentialsRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e UpdateAlertCredentialsRequestValidationError) ErrorName() string { - return "UpdateAlertCredentialsRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e UpdateAlertCredentialsRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sUpdateAlertCredentialsRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = UpdateAlertCredentialsRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = UpdateAlertCredentialsRequestValidationError{} - -var _UpdateAlertCredentialsRequest_Entity_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -var _UpdateAlertCredentialsRequest_PagerdutyCredentials_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") - -// Validate checks the field values on UpdateAlertCredentialsResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *UpdateAlertCredentialsResponse) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on UpdateAlertCredentialsResponse with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// UpdateAlertCredentialsResponseMultiError, or nil if none found. -func (m *UpdateAlertCredentialsResponse) ValidateAll() error { - return m.validate(true) -} - -func (m *UpdateAlertCredentialsResponse) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return UpdateAlertCredentialsResponseMultiError(errors) - } - return nil -} - -// UpdateAlertCredentialsResponseMultiError is an error wrapping multiple -// validation errors returned by UpdateAlertCredentialsResponse.ValidateAll() -// if the designated constraints aren't met. -type UpdateAlertCredentialsResponseMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m UpdateAlertCredentialsResponseMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m UpdateAlertCredentialsResponseMultiError) AllErrors() []error { return m } - -// UpdateAlertCredentialsResponseValidationError is the validation error -// returned by UpdateAlertCredentialsResponse.Validate if the designated -// constraints aren't met. -type UpdateAlertCredentialsResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e UpdateAlertCredentialsResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e UpdateAlertCredentialsResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e UpdateAlertCredentialsResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e UpdateAlertCredentialsResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e UpdateAlertCredentialsResponseValidationError) ErrorName() string { - return "UpdateAlertCredentialsResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e UpdateAlertCredentialsResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sUpdateAlertCredentialsResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = UpdateAlertCredentialsResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = UpdateAlertCredentialsResponseValidationError{} - -// Validate checks the field values on SendReceiverNotificationRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SendReceiverNotificationRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SendReceiverNotificationRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// SendReceiverNotificationRequestMultiError, or nil if none found. -func (m *SendReceiverNotificationRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SendReceiverNotificationRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Id - - switch m.Data.(type) { - - case *SendReceiverNotificationRequest_Slack: - - if all { - switch v := interface{}(m.GetSlack()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, SendReceiverNotificationRequestValidationError{ - field: "Slack", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, SendReceiverNotificationRequestValidationError{ - field: "Slack", - reason: "embedded message failed validation", - cause: err, - }) - } + if all { + switch v := interface{}(m.GetCreatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RuleValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, + }) } - } else if v, ok := interface{}(m.GetSlack()).(interface{ Validate() error }); ok { + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return SendReceiverNotificationRequestValidationError{ - field: "Slack", + errors = append(errors, RuleValidationError{ + field: "CreatedAt", reason: "embedded message failed validation", cause: err, - } + }) + } + } + } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuleValidationError{ + field: "CreatedAt", + reason: "embedded message failed validation", + cause: err, } } - - } - - if len(errors) > 0 { - return SendReceiverNotificationRequestMultiError(errors) - } - return nil -} - -// SendReceiverNotificationRequestMultiError is an error wrapping multiple -// validation errors returned by SendReceiverNotificationRequest.ValidateAll() -// if the designated constraints aren't met. -type SendReceiverNotificationRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SendReceiverNotificationRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SendReceiverNotificationRequestMultiError) AllErrors() []error { return m } - -// SendReceiverNotificationRequestValidationError is the validation error -// returned by SendReceiverNotificationRequest.Validate if the designated -// constraints aren't met. -type SendReceiverNotificationRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SendReceiverNotificationRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SendReceiverNotificationRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SendReceiverNotificationRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SendReceiverNotificationRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SendReceiverNotificationRequestValidationError) ErrorName() string { - return "SendReceiverNotificationRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SendReceiverNotificationRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSendReceiverNotificationRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SendReceiverNotificationRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SendReceiverNotificationRequestValidationError{} - -// Validate checks the field values on SendReceiverNotificationResponse with -// the rules defined in the proto definition for this message. If any rules -// are violated, the first error encountered is returned, or nil if there are -// no violations. -func (m *SendReceiverNotificationResponse) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SendReceiverNotificationResponse with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// SendReceiverNotificationResponseMultiError, or nil if none found. -func (m *SendReceiverNotificationResponse) ValidateAll() error { - return m.validate(true) -} - -func (m *SendReceiverNotificationResponse) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Ok - - if len(errors) > 0 { - return SendReceiverNotificationResponseMultiError(errors) - } - return nil -} - -// SendReceiverNotificationResponseMultiError is an error wrapping multiple -// validation errors returned by -// SendReceiverNotificationResponse.ValidateAll() if the designated -// constraints aren't met. -type SendReceiverNotificationResponseMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SendReceiverNotificationResponseMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SendReceiverNotificationResponseMultiError) AllErrors() []error { return m } - -// SendReceiverNotificationResponseValidationError is the validation error -// returned by SendReceiverNotificationResponse.Validate if the designated -// constraints aren't met. -type SendReceiverNotificationResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SendReceiverNotificationResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SendReceiverNotificationResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SendReceiverNotificationResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SendReceiverNotificationResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SendReceiverNotificationResponseValidationError) ErrorName() string { - return "SendReceiverNotificationResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e SendReceiverNotificationResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSendReceiverNotificationResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SendReceiverNotificationResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SendReceiverNotificationResponseValidationError{} - -// Validate checks the field values on ListRulesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, the -// first error encountered is returned, or nil if there are no violations. -func (m *ListRulesRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ListRulesRequest with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// ListRulesRequestMultiError, or nil if none found. -func (m *ListRulesRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *ListRulesRequest) validate(all bool) error { - if m == nil { - return nil } - var errors []error - - // no validation rules for Name - - // no validation rules for Namespace - - // no validation rules for GroupName - - // no validation rules for Template + if all { + switch v := interface{}(m.GetUpdatedAt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RuleValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RuleValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuleValidationError{ + field: "UpdatedAt", + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ProviderNamespace + if m.GetProviderNamespace() < 0 { + err := RuleValidationError{ + field: "ProviderNamespace", + reason: "value must be greater than or equal to 0", + } + if !all { + return err + } + errors = append(errors, err) + } if len(errors) > 0 { - return ListRulesRequestMultiError(errors) + return RuleMultiError(errors) } return nil } -// ListRulesRequestMultiError is an error wrapping multiple validation errors -// returned by ListRulesRequest.ValidateAll() if the designated constraints -// aren't met. -type ListRulesRequestMultiError []error +// RuleMultiError is an error wrapping multiple validation errors returned by +// Rule.ValidateAll() if the designated constraints aren't met. +type RuleMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m ListRulesRequestMultiError) Error() string { +func (m RuleMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -5810,11 +4407,11 @@ func (m ListRulesRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m ListRulesRequestMultiError) AllErrors() []error { return m } +func (m RuleMultiError) AllErrors() []error { return m } -// ListRulesRequestValidationError is the validation error returned by -// ListRulesRequest.Validate if the designated constraints aren't met. -type ListRulesRequestValidationError struct { +// RuleValidationError is the validation error returned by Rule.Validate if the +// designated constraints aren't met. +type RuleValidationError struct { field string reason string cause error @@ -5822,22 +4419,22 @@ type ListRulesRequestValidationError struct { } // Field function returns field value. -func (e ListRulesRequestValidationError) Field() string { return e.field } +func (e RuleValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ListRulesRequestValidationError) Reason() string { return e.reason } +func (e RuleValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ListRulesRequestValidationError) Cause() error { return e.cause } +func (e RuleValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ListRulesRequestValidationError) Key() bool { return e.key } +func (e RuleValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ListRulesRequestValidationError) ErrorName() string { return "ListRulesRequestValidationError" } +func (e RuleValidationError) ErrorName() string { return "RuleValidationError" } // Error satisfies the builtin error interface -func (e ListRulesRequestValidationError) Error() string { +func (e RuleValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5849,14 +4446,14 @@ func (e ListRulesRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sListRulesRequest.%s: %s%s", + "invalid %sRule.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ListRulesRequestValidationError{} +var _ error = RuleValidationError{} var _ interface { Field() string @@ -5864,7 +4461,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = ListRulesRequestValidationError{} +} = RuleValidationError{} // Validate checks the field values on Variables with the rules defined in the // proto definition for this message. If any rules are violated, the first @@ -5994,154 +4591,51 @@ var _Variables_Name_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") var _Variables_Value_Pattern = regexp.MustCompile("^[A-Za-z0-9_-]+$") -// Validate checks the field values on Rule with the rules defined in the proto -// definition for this message. If any rules are violated, the first error -// encountered is returned, or nil if there are no violations. -func (m *Rule) Validate() error { +// Validate checks the field values on ListRulesRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *ListRulesRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Rule with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in RuleMultiError, or nil if none found. -func (m *Rule) ValidateAll() error { +// ValidateAll checks the field values on ListRulesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListRulesRequestMultiError, or nil if none found. +func (m *ListRulesRequest) ValidateAll() error { return m.validate(true) } -func (m *Rule) validate(all bool) error { +func (m *ListRulesRequest) validate(all bool) error { if m == nil { return nil } var errors []error - // no validation rules for Id - // no validation rules for Name - // no validation rules for Enabled + // no validation rules for Namespace // no validation rules for GroupName - // no validation rules for Namespace - // no validation rules for Template - for idx, item := range m.GetVariables() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, RuleValidationError{ - field: fmt.Sprintf("Variables[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, RuleValidationError{ - field: fmt.Sprintf("Variables[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RuleValidationError{ - field: fmt.Sprintf("Variables[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if all { - switch v := interface{}(m.GetCreatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, RuleValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, RuleValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RuleValidationError{ - field: "CreatedAt", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetUpdatedAt()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, RuleValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, RuleValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUpdatedAt()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RuleValidationError{ - field: "UpdatedAt", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.GetProviderNamespace() < 0 { - err := RuleValidationError{ - field: "ProviderNamespace", - reason: "value must be greater than or equal to 0", - } - if !all { - return err - } - errors = append(errors, err) - } + // no validation rules for ProviderNamespace if len(errors) > 0 { - return RuleMultiError(errors) + return ListRulesRequestMultiError(errors) } return nil } -// RuleMultiError is an error wrapping multiple validation errors returned by -// Rule.ValidateAll() if the designated constraints aren't met. -type RuleMultiError []error +// ListRulesRequestMultiError is an error wrapping multiple validation errors +// returned by ListRulesRequest.ValidateAll() if the designated constraints +// aren't met. +type ListRulesRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m RuleMultiError) Error() string { +func (m ListRulesRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -6150,11 +4644,11 @@ func (m RuleMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m RuleMultiError) AllErrors() []error { return m } +func (m ListRulesRequestMultiError) AllErrors() []error { return m } -// RuleValidationError is the validation error returned by Rule.Validate if the -// designated constraints aren't met. -type RuleValidationError struct { +// ListRulesRequestValidationError is the validation error returned by +// ListRulesRequest.Validate if the designated constraints aren't met. +type ListRulesRequestValidationError struct { field string reason string cause error @@ -6162,22 +4656,22 @@ type RuleValidationError struct { } // Field function returns field value. -func (e RuleValidationError) Field() string { return e.field } +func (e ListRulesRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e RuleValidationError) Reason() string { return e.reason } +func (e ListRulesRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e RuleValidationError) Cause() error { return e.cause } +func (e ListRulesRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e RuleValidationError) Key() bool { return e.key } +func (e ListRulesRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e RuleValidationError) ErrorName() string { return "RuleValidationError" } +func (e ListRulesRequestValidationError) ErrorName() string { return "ListRulesRequestValidationError" } // Error satisfies the builtin error interface -func (e RuleValidationError) Error() string { +func (e ListRulesRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -6189,14 +4683,14 @@ func (e RuleValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRule.%s: %s%s", + "invalid %sListRulesRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = RuleValidationError{} +var _ error = ListRulesRequestValidationError{} var _ interface { Field() string @@ -6204,7 +4698,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = RuleValidationError{} +} = ListRulesRequestValidationError{} // Validate checks the field values on ListRulesResponse with the rules defined // in the proto definition for this message. If any rules are violated, the diff --git a/api/proto/odpf/siren/v1beta1/siren_grpc.pb.go b/api/proto/odpf/siren/v1beta1/siren_grpc.pb.go index da43de05..c9c4fb2e 100644 --- a/api/proto/odpf/siren/v1beta1/siren_grpc.pb.go +++ b/api/proto/odpf/siren/v1beta1/siren_grpc.pb.go @@ -25,6 +25,7 @@ type SirenServiceClient interface { GetProvider(ctx context.Context, in *GetProviderRequest, opts ...grpc.CallOption) (*Provider, error) UpdateProvider(ctx context.Context, in *UpdateProviderRequest, opts ...grpc.CallOption) (*Provider, error) DeleteProvider(ctx context.Context, in *DeleteProviderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + SendReceiverNotification(ctx context.Context, in *SendReceiverNotificationRequest, opts ...grpc.CallOption) (*SendReceiverNotificationResponse, error) ListNamespaces(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListNamespacesResponse, error) CreateNamespace(ctx context.Context, in *CreateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) GetNamespace(ctx context.Context, in *GetNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) @@ -36,12 +37,7 @@ type SirenServiceClient interface { UpdateReceiver(ctx context.Context, in *UpdateReceiverRequest, opts ...grpc.CallOption) (*Receiver, error) DeleteReceiver(ctx context.Context, in *DeleteReceiverRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) ListAlerts(ctx context.Context, in *ListAlertsRequest, opts ...grpc.CallOption) (*Alerts, error) - SendReceiverNotification(ctx context.Context, in *SendReceiverNotificationRequest, opts ...grpc.CallOption) (*SendReceiverNotificationResponse, error) CreateCortexAlerts(ctx context.Context, in *CreateCortexAlertsRequest, opts ...grpc.CallOption) (*Alerts, error) - ListWorkspaceChannels(ctx context.Context, in *ListWorkspaceChannelsRequest, opts ...grpc.CallOption) (*ListWorkspaceChannelsResponse, error) - ExchangeCode(ctx context.Context, in *ExchangeCodeRequest, opts ...grpc.CallOption) (*ExchangeCodeResponse, error) - GetAlertCredentials(ctx context.Context, in *GetAlertCredentialsRequest, opts ...grpc.CallOption) (*GetAlertCredentialsResponse, error) - UpdateAlertCredentials(ctx context.Context, in *UpdateAlertCredentialsRequest, opts ...grpc.CallOption) (*UpdateAlertCredentialsResponse, error) ListRules(ctx context.Context, in *ListRulesRequest, opts ...grpc.CallOption) (*ListRulesResponse, error) UpdateRule(ctx context.Context, in *UpdateRuleRequest, opts ...grpc.CallOption) (*UpdateRuleResponse, error) ListTemplates(ctx context.Context, in *ListTemplatesRequest, opts ...grpc.CallOption) (*ListTemplatesResponse, error) @@ -113,6 +109,15 @@ func (c *sirenServiceClient) DeleteProvider(ctx context.Context, in *DeleteProvi return out, nil } +func (c *sirenServiceClient) SendReceiverNotification(ctx context.Context, in *SendReceiverNotificationRequest, opts ...grpc.CallOption) (*SendReceiverNotificationResponse, error) { + out := new(SendReceiverNotificationResponse) + err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *sirenServiceClient) ListNamespaces(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListNamespacesResponse, error) { out := new(ListNamespacesResponse) err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListNamespaces", in, out, opts...) @@ -212,15 +217,6 @@ func (c *sirenServiceClient) ListAlerts(ctx context.Context, in *ListAlertsReque return out, nil } -func (c *sirenServiceClient) SendReceiverNotification(ctx context.Context, in *SendReceiverNotificationRequest, opts ...grpc.CallOption) (*SendReceiverNotificationResponse, error) { - out := new(SendReceiverNotificationResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *sirenServiceClient) CreateCortexAlerts(ctx context.Context, in *CreateCortexAlertsRequest, opts ...grpc.CallOption) (*Alerts, error) { out := new(Alerts) err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/CreateCortexAlerts", in, out, opts...) @@ -230,42 +226,6 @@ func (c *sirenServiceClient) CreateCortexAlerts(ctx context.Context, in *CreateC return out, nil } -func (c *sirenServiceClient) ListWorkspaceChannels(ctx context.Context, in *ListWorkspaceChannelsRequest, opts ...grpc.CallOption) (*ListWorkspaceChannelsResponse, error) { - out := new(ListWorkspaceChannelsResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *sirenServiceClient) ExchangeCode(ctx context.Context, in *ExchangeCodeRequest, opts ...grpc.CallOption) (*ExchangeCodeResponse, error) { - out := new(ExchangeCodeResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ExchangeCode", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *sirenServiceClient) GetAlertCredentials(ctx context.Context, in *GetAlertCredentialsRequest, opts ...grpc.CallOption) (*GetAlertCredentialsResponse, error) { - out := new(GetAlertCredentialsResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *sirenServiceClient) UpdateAlertCredentials(ctx context.Context, in *UpdateAlertCredentialsRequest, opts ...grpc.CallOption) (*UpdateAlertCredentialsResponse, error) { - out := new(UpdateAlertCredentialsResponse) - err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *sirenServiceClient) ListRules(ctx context.Context, in *ListRulesRequest, opts ...grpc.CallOption) (*ListRulesResponse, error) { out := new(ListRulesResponse) err := c.cc.Invoke(ctx, "/odpf.siren.v1beta1.SirenService/ListRules", in, out, opts...) @@ -339,6 +299,7 @@ type SirenServiceServer interface { GetProvider(context.Context, *GetProviderRequest) (*Provider, error) UpdateProvider(context.Context, *UpdateProviderRequest) (*Provider, error) DeleteProvider(context.Context, *DeleteProviderRequest) (*emptypb.Empty, error) + SendReceiverNotification(context.Context, *SendReceiverNotificationRequest) (*SendReceiverNotificationResponse, error) ListNamespaces(context.Context, *emptypb.Empty) (*ListNamespacesResponse, error) CreateNamespace(context.Context, *CreateNamespaceRequest) (*Namespace, error) GetNamespace(context.Context, *GetNamespaceRequest) (*Namespace, error) @@ -350,12 +311,7 @@ type SirenServiceServer interface { UpdateReceiver(context.Context, *UpdateReceiverRequest) (*Receiver, error) DeleteReceiver(context.Context, *DeleteReceiverRequest) (*emptypb.Empty, error) ListAlerts(context.Context, *ListAlertsRequest) (*Alerts, error) - SendReceiverNotification(context.Context, *SendReceiverNotificationRequest) (*SendReceiverNotificationResponse, error) CreateCortexAlerts(context.Context, *CreateCortexAlertsRequest) (*Alerts, error) - ListWorkspaceChannels(context.Context, *ListWorkspaceChannelsRequest) (*ListWorkspaceChannelsResponse, error) - ExchangeCode(context.Context, *ExchangeCodeRequest) (*ExchangeCodeResponse, error) - GetAlertCredentials(context.Context, *GetAlertCredentialsRequest) (*GetAlertCredentialsResponse, error) - UpdateAlertCredentials(context.Context, *UpdateAlertCredentialsRequest) (*UpdateAlertCredentialsResponse, error) ListRules(context.Context, *ListRulesRequest) (*ListRulesResponse, error) UpdateRule(context.Context, *UpdateRuleRequest) (*UpdateRuleResponse, error) ListTemplates(context.Context, *ListTemplatesRequest) (*ListTemplatesResponse, error) @@ -388,6 +344,9 @@ func (UnimplementedSirenServiceServer) UpdateProvider(context.Context, *UpdatePr func (UnimplementedSirenServiceServer) DeleteProvider(context.Context, *DeleteProviderRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteProvider not implemented") } +func (UnimplementedSirenServiceServer) SendReceiverNotification(context.Context, *SendReceiverNotificationRequest) (*SendReceiverNotificationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendReceiverNotification not implemented") +} func (UnimplementedSirenServiceServer) ListNamespaces(context.Context, *emptypb.Empty) (*ListNamespacesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListNamespaces not implemented") } @@ -421,24 +380,9 @@ func (UnimplementedSirenServiceServer) DeleteReceiver(context.Context, *DeleteRe func (UnimplementedSirenServiceServer) ListAlerts(context.Context, *ListAlertsRequest) (*Alerts, error) { return nil, status.Errorf(codes.Unimplemented, "method ListAlerts not implemented") } -func (UnimplementedSirenServiceServer) SendReceiverNotification(context.Context, *SendReceiverNotificationRequest) (*SendReceiverNotificationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendReceiverNotification not implemented") -} func (UnimplementedSirenServiceServer) CreateCortexAlerts(context.Context, *CreateCortexAlertsRequest) (*Alerts, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateCortexAlerts not implemented") } -func (UnimplementedSirenServiceServer) ListWorkspaceChannels(context.Context, *ListWorkspaceChannelsRequest) (*ListWorkspaceChannelsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListWorkspaceChannels not implemented") -} -func (UnimplementedSirenServiceServer) ExchangeCode(context.Context, *ExchangeCodeRequest) (*ExchangeCodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExchangeCode not implemented") -} -func (UnimplementedSirenServiceServer) GetAlertCredentials(context.Context, *GetAlertCredentialsRequest) (*GetAlertCredentialsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAlertCredentials not implemented") -} -func (UnimplementedSirenServiceServer) UpdateAlertCredentials(context.Context, *UpdateAlertCredentialsRequest) (*UpdateAlertCredentialsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateAlertCredentials not implemented") -} func (UnimplementedSirenServiceServer) ListRules(context.Context, *ListRulesRequest) (*ListRulesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListRules not implemented") } @@ -581,6 +525,24 @@ func _SirenService_DeleteProvider_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _SirenService_SendReceiverNotification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendReceiverNotificationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SirenServiceServer).SendReceiverNotification(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SirenServiceServer).SendReceiverNotification(ctx, req.(*SendReceiverNotificationRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _SirenService_ListNamespaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(emptypb.Empty) if err := dec(in); err != nil { @@ -779,24 +741,6 @@ func _SirenService_ListAlerts_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _SirenService_SendReceiverNotification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SendReceiverNotificationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SirenServiceServer).SendReceiverNotification(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/odpf.siren.v1beta1.SirenService/SendReceiverNotification", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SirenServiceServer).SendReceiverNotification(ctx, req.(*SendReceiverNotificationRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _SirenService_CreateCortexAlerts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateCortexAlertsRequest) if err := dec(in); err != nil { @@ -815,78 +759,6 @@ func _SirenService_CreateCortexAlerts_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } -func _SirenService_ListWorkspaceChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListWorkspaceChannelsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SirenServiceServer).ListWorkspaceChannels(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/odpf.siren.v1beta1.SirenService/ListWorkspaceChannels", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SirenServiceServer).ListWorkspaceChannels(ctx, req.(*ListWorkspaceChannelsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SirenService_ExchangeCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ExchangeCodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SirenServiceServer).ExchangeCode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/odpf.siren.v1beta1.SirenService/ExchangeCode", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SirenServiceServer).ExchangeCode(ctx, req.(*ExchangeCodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SirenService_GetAlertCredentials_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetAlertCredentialsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SirenServiceServer).GetAlertCredentials(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/odpf.siren.v1beta1.SirenService/GetAlertCredentials", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SirenServiceServer).GetAlertCredentials(ctx, req.(*GetAlertCredentialsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SirenService_UpdateAlertCredentials_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateAlertCredentialsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SirenServiceServer).UpdateAlertCredentials(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/odpf.siren.v1beta1.SirenService/UpdateAlertCredentials", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SirenServiceServer).UpdateAlertCredentials(ctx, req.(*UpdateAlertCredentialsRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _SirenService_ListRules_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListRulesRequest) if err := dec(in); err != nil { @@ -1044,6 +916,10 @@ var SirenService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteProvider", Handler: _SirenService_DeleteProvider_Handler, }, + { + MethodName: "SendReceiverNotification", + Handler: _SirenService_SendReceiverNotification_Handler, + }, { MethodName: "ListNamespaces", Handler: _SirenService_ListNamespaces_Handler, @@ -1088,30 +964,10 @@ var SirenService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListAlerts", Handler: _SirenService_ListAlerts_Handler, }, - { - MethodName: "SendReceiverNotification", - Handler: _SirenService_SendReceiverNotification_Handler, - }, { MethodName: "CreateCortexAlerts", Handler: _SirenService_CreateCortexAlerts_Handler, }, - { - MethodName: "ListWorkspaceChannels", - Handler: _SirenService_ListWorkspaceChannels_Handler, - }, - { - MethodName: "ExchangeCode", - Handler: _SirenService_ExchangeCode_Handler, - }, - { - MethodName: "GetAlertCredentials", - Handler: _SirenService_GetAlertCredentials_Handler, - }, - { - MethodName: "UpdateAlertCredentials", - Handler: _SirenService_UpdateAlertCredentials_Handler, - }, { MethodName: "ListRules", Handler: _SirenService_ListRules_Handler, diff --git a/pkg/slackworkspace/model.go b/pkg/slackworkspace/model.go deleted file mode 100644 index ed9ce488..00000000 --- a/pkg/slackworkspace/model.go +++ /dev/null @@ -1,19 +0,0 @@ -package slackworkspace - -import "github.com/odpf/siren/domain" - -type Channel struct { - ID string - Name string -} - -type SlackRepository interface { - GetWorkspaceChannels(string) ([]Channel, error) -} - -func (c *Channel) toDomain() domain.Channel { - return domain.Channel{ - ID: c.ID, - Name: c.Name, - } -} diff --git a/pkg/slackworkspace/repository.go b/pkg/slackworkspace/repository.go deleted file mode 100644 index 56bfad25..00000000 --- a/pkg/slackworkspace/repository.go +++ /dev/null @@ -1,36 +0,0 @@ -package slackworkspace - -import ( - "github.com/odpf/siren/domain" - "github.com/odpf/siren/pkg/slack" - "github.com/pkg/errors" -) - -type Repository struct { - Slacker domain.SlackService -} - -func NewRepository() SlackRepository { - return &Repository{ - Slacker: nil, - } -} - -var newService = slack.NewService - -func (r Repository) GetWorkspaceChannels(token string) ([]Channel, error) { - r.Slacker = newService(token) - joinedChannelList, err := r.Slacker.GetJoinedChannelsList() - if err != nil { - return nil, errors.Wrap(err, "failed to fetch joined channel list") - } - - result := make([]Channel, 0) - for _, c := range joinedChannelList { - result = append(result, Channel{ - ID: c.ID, - Name: c.Name, - }) - } - return result, nil -} diff --git a/pkg/slackworkspace/repository_test.go b/pkg/slackworkspace/repository_test.go deleted file mode 100644 index a37026d2..00000000 --- a/pkg/slackworkspace/repository_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package slackworkspace - -import ( - "errors" - "github.com/odpf/siren/domain" - "github.com/odpf/siren/mocks" - "github.com/slack-go/slack" - "github.com/stretchr/testify/suite" - "testing" -) - -type RepositoryTestSuite struct { - suite.Suite - repository SlackRepository - slacker *mocks.SlackService -} - -func TestHTTP(t *testing.T) { - suite.Run(t, new(RepositoryTestSuite)) -} - -func (s *RepositoryTestSuite) TestGetWorkspaceChannel() { - oldServiceCreator := newService - mockedSlackService := &mocks.SlackService{} - newService = func(string) domain.SlackService { - return mockedSlackService - } - defer func() { newService = oldServiceCreator }() - s.slacker = mockedSlackService - s.repository = &Repository{ - Slacker: s.slacker, - } - - s.Run("should return joined channel list in a workspace", func() { - s.slacker.On("GetJoinedChannelsList").Return([]slack.Channel{ - {GroupConversation: slack.GroupConversation{Name: "foo"}}, - {GroupConversation: slack.GroupConversation{Name: "bar"}}}, nil).Once() - channels, err := s.repository.GetWorkspaceChannels("test_token") - s.Equal(2, len(channels)) - s.Equal("foo", channels[0].Name) - s.Equal("bar", channels[1].Name) - s.Nil(err) - s.slacker.AssertExpectations(s.T()) - }) - - s.Run("should return error if get joined channel list fail", func() { - s.slacker.On("GetJoinedChannelsList"). - Return(nil, errors.New("random error")).Once() - - channels, err := s.repository.GetWorkspaceChannels("test_token") - s.Nil(channels) - s.EqualError(err, "failed to fetch joined channel list: random error") - }) -} diff --git a/pkg/slackworkspace/service.go b/pkg/slackworkspace/service.go deleted file mode 100644 index 9c5690be..00000000 --- a/pkg/slackworkspace/service.go +++ /dev/null @@ -1,36 +0,0 @@ -package slackworkspace - -import ( - "fmt" - "github.com/odpf/siren/domain" - "github.com/pkg/errors" -) - -type Service struct { - client SlackRepository - codeExchangeService domain.CodeExchangeService -} - -func NewService(codeExchangeService domain.CodeExchangeService) domain.SlackWorkspaceService { - return &Service{ - client: NewRepository(), - codeExchangeService: codeExchangeService} -} - -func (s Service) GetChannels(workspace string) ([]domain.Channel, error) { - token, err := s.codeExchangeService.GetToken(workspace) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("could not get token for workspace: %s", workspace)) - } - channels, err := s.client.GetWorkspaceChannels(token) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("could not get channels for workspace: %s", workspace)) - } - - result := make([]domain.Channel, 0) - for _, c := range channels { - result = append(result, c.toDomain()) - } - - return result, nil -} diff --git a/pkg/slackworkspace/service_test.go b/pkg/slackworkspace/service_test.go deleted file mode 100644 index 14b451f7..00000000 --- a/pkg/slackworkspace/service_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package slackworkspace - -import ( - "errors" - "github.com/odpf/siren/mocks" - "github.com/stretchr/testify/suite" - "testing" -) - -type ServiceTestSuite struct { - suite.Suite - - repository *MockSlackRepository - exchangerMock mocks.CodeExchangeService - service Service -} - -func (s *ServiceTestSuite) SetupTest() { - s.repository = &MockSlackRepository{} - s.exchangerMock = mocks.CodeExchangeService{} - s.service = Service{ - client: s.repository, - codeExchangeService: &s.exchangerMock, - } -} - -func TestService(t *testing.T) { - suite.Run(t, new(ServiceTestSuite)) -} - -func (s *ServiceTestSuite) TestService_GetChannels() { - s.Run("should return channels on success response", func() { - s.exchangerMock.On("GetToken", "test_workspace"). - Return("test_token", nil).Once() - s.repository.On("GetWorkspaceChannels", "test_token"). - Return([]Channel{ - {Name: "foo"}, - }, nil).Once() - - channels, err := s.service.GetChannels("test_workspace") - s.Equal(1, len(channels)) - s.Equal("foo", channels[0].Name) - s.Nil(err) - }) - - s.Run("should return error response if get token fail", func() { - s.exchangerMock.On("GetToken", "test_workspace"). - Return("", errors.New("random error")).Once() - - channels, err := s.service.GetChannels("test_workspace") - s.Nil(channels) - s.EqualError(err, "could not get token for workspace: test_workspace: random error") - }) - - s.Run("should return error response if get channels fail", func() { - s.exchangerMock.On("GetToken", "test_workspace"). - Return("test_token", nil).Once() - s.repository.On("GetWorkspaceChannels", "test_token"). - Return(nil, errors.New("random error")).Once() - - channels, err := s.service.GetChannels("test_workspace") - s.Nil(channels) - s.EqualError(err, "could not get channels for workspace: test_workspace: random error") - }) -} diff --git a/pkg/slackworkspace/slackrepository_mock.go b/pkg/slackworkspace/slackrepository_mock.go deleted file mode 100644 index cba7df53..00000000 --- a/pkg/slackworkspace/slackrepository_mock.go +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by mockery 2.9.0. DO NOT EDIT. - -package slackworkspace - -import ( - mock "github.com/stretchr/testify/mock" -) - -// MockSlackRepository is an autogenerated mock type for the MockSlackRepository type -type MockSlackRepository struct { - mock.Mock -} - -// GetWorkspaceChannel provides a mock function with given fields: _a0 -func (_m *MockSlackRepository) GetWorkspaceChannels(_a0 string) ([]Channel, error) { - ret := _m.Called(_a0) - - var r0 []Channel - if rf, ok := ret.Get(0).(func(string) []Channel); ok { - r0 = rf(_a0) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]Channel) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(_a0) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} diff --git a/service/container.go b/service/container.go index 01827acb..7030ff72 100644 --- a/service/container.go +++ b/service/container.go @@ -4,13 +4,10 @@ import ( "github.com/odpf/siren/pkg/namespace" "github.com/odpf/siren/pkg/provider" "github.com/odpf/siren/pkg/receiver" - "github.com/odpf/siren/pkg/slackworkspace" "net/http" "github.com/grafana/cortex-tools/pkg/client" "github.com/odpf/siren/domain" - "github.com/odpf/siren/pkg/alert" - "github.com/odpf/siren/pkg/alert/alertmanager" "github.com/odpf/siren/pkg/alerts" "github.com/odpf/siren/pkg/codeexchange" "github.com/odpf/siren/pkg/rules" @@ -21,34 +18,27 @@ import ( ) type Container struct { - TemplatesService domain.TemplatesService - RulesService domain.RuleService - AlertmanagerService domain.AlertmanagerService - AlertService domain.AlertService - CodeExchangeService domain.CodeExchangeService - NotifierServices domain.NotifierServices - SlackWorkspaceService domain.SlackWorkspaceService - ProviderService domain.ProviderService - NamespaceService domain.NamespaceService - ReceiverService domain.ReceiverService + TemplatesService domain.TemplatesService + RulesService domain.RuleService + AlertService domain.AlertService + CodeExchangeService domain.CodeExchangeService + NotifierServices domain.NotifierServices + ProviderService domain.ProviderService + NamespaceService domain.NamespaceService + ReceiverService domain.ReceiverService } func Init(db *gorm.DB, c *domain.Config, client *client.CortexClient, httpClient *http.Client) (*Container, error) { templatesService := templates.NewService(db) rulesService := rules.NewService(db, client) - newClient, err := alertmanager.NewClient(c.Cortex) - if err != nil { - return nil, err - } alertHistoryService := alerts.NewService(db) codeExchangeService, err := codeexchange.NewService(db, httpClient, c.SlackApp, c.EncryptionKey) if err != nil { return nil, errors.Wrap(err, "failed to create codeexchange service") } - alertmanagerService := alert.NewService(db, newClient, c.SirenService, codeExchangeService) + slackNotifierService := slacknotifier.NewService() - slackworkspaceService := slackworkspace.NewService(codeExchangeService) providerService := provider.NewService(db) namespaceService, err := namespace.NewService(db, c.EncryptionKey) if err != nil { @@ -62,26 +52,19 @@ func Init(db *gorm.DB, c *domain.Config, return &Container{ TemplatesService: templatesService, RulesService: rulesService, - AlertmanagerService: alertmanagerService, AlertService: alertHistoryService, CodeExchangeService: codeExchangeService, NotifierServices: domain.NotifierServices{ Slack: slackNotifierService, }, - SlackWorkspaceService: slackworkspaceService, - ProviderService: providerService, - NamespaceService: namespaceService, - ReceiverService: receiverService, + ProviderService: providerService, + NamespaceService: namespaceService, + ReceiverService: receiverService, }, nil } func (container *Container) MigrateAll(db *gorm.DB) error { err := container.TemplatesService.Migrate() - if err != nil { - return err - } - err = container.AlertmanagerService.Migrate() - if err != nil { return err } From 8b3c38ac5ded0a28db8acdb79c7d920da345e991 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Tue, 16 Nov 2021 09:38:14 +0530 Subject: [PATCH 16/18] docs: update swagger file --- app/siren.swagger.json | 451 +++++++++++------------------------------ cmd/namespace.go | 2 +- 2 files changed, 120 insertions(+), 333 deletions(-) diff --git a/app/siren.swagger.json b/app/siren.swagger.json index 100e7d1c..33c1ec2c 100644 --- a/app/siren.swagger.json +++ b/app/siren.swagger.json @@ -20,7 +20,30 @@ "application/json" ], "paths": { - "/alerts/cortex/{providerId}": { + "/ping": { + "get": { + "summary": "ping", + "operationId": "SirenService_Ping", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1PingResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Ping" + ] + } + }, + "/v1beta1/alerts/cortex/{providerId}": { "post": { "summary": "create cortex alerts", "operationId": "SirenService_CreateCortexAlerts", @@ -28,7 +51,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Alerts" + "$ref": "#/definitions/v1beta1Alerts" } }, "default": { @@ -56,7 +79,7 @@ "alerts": { "type": "array", "items": { - "$ref": "#/definitions/v1CortexAlert" + "$ref": "#/definitions/v1beta1CortexAlert" } } } @@ -68,7 +91,7 @@ ] } }, - "/alerts/{providerName}/{providerId}": { + "/v1beta1/alerts/{providerName}/{providerId}": { "get": { "summary": "list alerts", "operationId": "SirenService_ListAlerts", @@ -76,7 +99,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Alerts" + "$ref": "#/definitions/v1beta1Alerts" } }, "default": { @@ -126,7 +149,7 @@ ] } }, - "/namespaces": { + "/v1beta1/namespaces": { "get": { "summary": "list namespaces", "operationId": "SirenService_ListNamespaces", @@ -134,7 +157,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListNamespacesResponse" + "$ref": "#/definitions/v1beta1ListNamespacesResponse" } }, "default": { @@ -155,7 +178,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Namespace" + "$ref": "#/definitions/v1beta1Namespace" } }, "default": { @@ -171,7 +194,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1CreateNamespaceRequest" + "$ref": "#/definitions/v1beta1CreateNamespaceRequest" } } ], @@ -180,7 +203,7 @@ ] } }, - "/namespaces/{id}": { + "/v1beta1/namespaces/{id}": { "get": { "summary": "get a namespace", "operationId": "SirenService_GetNamespace", @@ -188,7 +211,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Namespace" + "$ref": "#/definitions/v1beta1Namespace" } }, "default": { @@ -248,7 +271,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Namespace" + "$ref": "#/definitions/v1beta1Namespace" } }, "default": { @@ -298,14 +321,15 @@ ] } }, - "/oauth/slack/token": { - "post": { - "operationId": "SirenService_ExchangeCode", + "/v1beta1/providers": { + "get": { + "summary": "list providers", + "operationId": "SirenService_ListProviders", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ExchangeCodeResponse" + "$ref": "#/definitions/v1beta1ListProvidersResponse" } }, "default": { @@ -317,60 +341,18 @@ }, "parameters": [ { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1ExchangeCodeRequest" - } - } - ], - "tags": [ - "SirenService" - ] - } - }, - "/ping": { - "get": { - "summary": "ping", - "operationId": "SirenService_Ping", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1PingResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "tags": [ - "Ping" - ] - } - }, - "/providers": { - "get": { - "summary": "list providers", - "operationId": "SirenService_ListProviders", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1ListProvidersResponse" - } + "name": "urn", + "in": "query", + "required": false, + "type": "string" }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } + { + "name": "type", + "in": "query", + "required": false, + "type": "string" } - }, + ], "tags": [ "Provider" ] @@ -382,7 +364,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Provider" + "$ref": "#/definitions/v1beta1Provider" } }, "default": { @@ -398,7 +380,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1CreateProviderRequest" + "$ref": "#/definitions/v1beta1CreateProviderRequest" } } ], @@ -407,7 +389,7 @@ ] } }, - "/providers/{id}": { + "/v1beta1/providers/{id}": { "get": { "summary": "get a provider", "operationId": "SirenService_GetProvider", @@ -415,7 +397,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Provider" + "$ref": "#/definitions/v1beta1Provider" } }, "default": { @@ -475,7 +457,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Provider" + "$ref": "#/definitions/v1beta1Provider" } }, "default": { @@ -527,7 +509,7 @@ ] } }, - "/receivers": { + "/v1beta1/receivers": { "get": { "summary": "list receivers", "operationId": "SirenService_ListReceivers", @@ -535,7 +517,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListReceiversResponse" + "$ref": "#/definitions/v1beta1ListReceiversResponse" } }, "default": { @@ -556,7 +538,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Receiver" + "$ref": "#/definitions/v1beta1Receiver" } }, "default": { @@ -572,7 +554,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1CreateReceiverRequest" + "$ref": "#/definitions/v1beta1CreateReceiverRequest" } } ], @@ -581,7 +563,7 @@ ] } }, - "/receivers/{id}": { + "/v1beta1/receivers/{id}": { "get": { "summary": "get a receiver", "operationId": "SirenService_GetReceiver", @@ -589,7 +571,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Receiver" + "$ref": "#/definitions/v1beta1Receiver" } }, "default": { @@ -649,7 +631,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1Receiver" + "$ref": "#/definitions/v1beta1Receiver" } }, "default": { @@ -698,7 +680,7 @@ ] } }, - "/receivers/{id}/send": { + "/v1beta1/receivers/{id}/send": { "post": { "summary": "send notification to receiver", "operationId": "SirenService_SendReceiverNotification", @@ -706,7 +688,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1SendReceiverNotificationResponse" + "$ref": "#/definitions/v1beta1SendReceiverNotificationResponse" } }, "default": { @@ -743,7 +725,7 @@ ] } }, - "/rules": { + "/v1beta1/rules": { "get": { "summary": "list rules", "operationId": "SirenService_ListRules", @@ -751,7 +733,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListRulesResponse" + "$ref": "#/definitions/v1beta1ListRulesResponse" } }, "default": { @@ -805,7 +787,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1UpdateRuleResponse" + "$ref": "#/definitions/v1beta1UpdateRuleResponse" } }, "default": { @@ -821,7 +803,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1UpdateRuleRequest" + "$ref": "#/definitions/v1beta1UpdateRuleRequest" } } ], @@ -830,114 +812,7 @@ ] } }, - "/slackworkspaces/{workspaceName}/channels": { - "get": { - "operationId": "SirenService_ListWorkspaceChannels", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1ListWorkspaceChannelsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "SirenService" - ] - } - }, - "/teams/{teamName}/credentials": { - "get": { - "operationId": "SirenService_GetAlertCredentials", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1GetAlertCredentialsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "teamName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "SirenService" - ] - }, - "put": { - "operationId": "SirenService_UpdateAlertCredentials", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1UpdateAlertCredentialsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "teamName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "entity": { - "type": "string" - }, - "pagerdutyCredentials": { - "type": "string" - }, - "slackConfig": { - "$ref": "#/definitions/v1SlackConfig" - } - } - } - } - ], - "tags": [ - "SirenService" - ] - } - }, - "/templates": { + "/v1beta1/templates": { "get": { "summary": "list templates", "operationId": "SirenService_ListTemplates", @@ -945,7 +820,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListTemplatesResponse" + "$ref": "#/definitions/v1beta1ListTemplatesResponse" } }, "default": { @@ -974,7 +849,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1TemplateResponse" + "$ref": "#/definitions/v1beta1TemplateResponse" } }, "default": { @@ -990,7 +865,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1UpsertTemplateRequest" + "$ref": "#/definitions/v1beta1UpsertTemplateRequest" } } ], @@ -999,7 +874,7 @@ ] } }, - "/templates/{name}": { + "/v1beta1/templates/{name}": { "get": { "summary": "get a template", "operationId": "SirenService_GetTemplateByName", @@ -1007,7 +882,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1TemplateResponse" + "$ref": "#/definitions/v1beta1TemplateResponse" } }, "default": { @@ -1036,7 +911,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1DeleteTemplateResponse" + "$ref": "#/definitions/v1beta1DeleteTemplateResponse" } }, "default": { @@ -1059,7 +934,7 @@ ] } }, - "/templates/{name}/render": { + "/v1beta1/templates/{name}/render": { "post": { "summary": "render a template", "operationId": "SirenService_RenderTemplate", @@ -1067,7 +942,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1RenderTemplateResponse" + "$ref": "#/definitions/v1beta1RenderTemplateResponse" } }, "default": { @@ -1163,7 +1038,7 @@ } } }, - "v1Alert": { + "v1beta1Alert": { "type": "object", "properties": { "id": { @@ -1195,18 +1070,18 @@ } } }, - "v1Alerts": { + "v1beta1Alerts": { "type": "object", "properties": { "alerts": { "type": "array", "items": { - "$ref": "#/definitions/v1Alert" + "$ref": "#/definitions/v1beta1Alert" } } } }, - "v1Annotations": { + "v1beta1Annotations": { "type": "object", "properties": { "metricName": { @@ -1223,14 +1098,14 @@ } } }, - "v1CortexAlert": { + "v1beta1CortexAlert": { "type": "object", "properties": { "annotations": { - "$ref": "#/definitions/v1Annotations" + "$ref": "#/definitions/v1beta1Annotations" }, "labels": { - "$ref": "#/definitions/v1Labels" + "$ref": "#/definitions/v1beta1Labels" }, "status": { "type": "string" @@ -1241,7 +1116,7 @@ } } }, - "v1CreateNamespaceRequest": { + "v1beta1CreateNamespaceRequest": { "type": "object", "properties": { "name": { @@ -1273,7 +1148,7 @@ } } }, - "v1CreateProviderRequest": { + "v1beta1CreateProviderRequest": { "type": "object", "properties": { "host": { @@ -1299,7 +1174,7 @@ } } }, - "v1CreateReceiverRequest": { + "v1beta1CreateReceiverRequest": { "type": "object", "properties": { "name": { @@ -1319,54 +1194,10 @@ } } }, - "v1Critical": { - "type": "object", - "properties": { - "channel": { - "type": "string" - } - } - }, - "v1DeleteTemplateResponse": { + "v1beta1DeleteTemplateResponse": { "type": "object" }, - "v1ExchangeCodeRequest": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "workspace": { - "type": "string" - } - } - }, - "v1ExchangeCodeResponse": { - "type": "object", - "properties": { - "ok": { - "type": "boolean" - } - } - }, - "v1GetAlertCredentialsResponse": { - "type": "object", - "properties": { - "entity": { - "type": "string" - }, - "teamName": { - "type": "string" - }, - "pagerdutyCredentials": { - "type": "string" - }, - "slackConfig": { - "$ref": "#/definitions/v1SlackConfig" - } - } - }, - "v1Labels": { + "v1beta1Labels": { "type": "object", "properties": { "severity": { @@ -1374,73 +1205,62 @@ } } }, - "v1ListNamespacesResponse": { + "v1beta1ListNamespacesResponse": { "type": "object", "properties": { "namespaces": { "type": "array", "items": { - "$ref": "#/definitions/v1Namespace" + "$ref": "#/definitions/v1beta1Namespace" } } } }, - "v1ListProvidersResponse": { + "v1beta1ListProvidersResponse": { "type": "object", "properties": { "providers": { "type": "array", "items": { - "$ref": "#/definitions/v1Provider" + "$ref": "#/definitions/v1beta1Provider" } } } }, - "v1ListReceiversResponse": { + "v1beta1ListReceiversResponse": { "type": "object", "properties": { "receivers": { "type": "array", "items": { - "$ref": "#/definitions/v1Receiver" + "$ref": "#/definitions/v1beta1Receiver" } } } }, - "v1ListRulesResponse": { + "v1beta1ListRulesResponse": { "type": "object", "properties": { "rules": { "type": "array", "items": { - "$ref": "#/definitions/v1Rule" + "$ref": "#/definitions/v1beta1Rule" } } } }, - "v1ListTemplatesResponse": { + "v1beta1ListTemplatesResponse": { "type": "object", "properties": { "templates": { "type": "array", "items": { - "$ref": "#/definitions/v1Template" + "$ref": "#/definitions/v1beta1Template" } } } }, - "v1ListWorkspaceChannelsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1SlackWorkspace" - } - } - } - }, - "v1Namespace": { + "v1beta1Namespace": { "type": "object", "properties": { "id": { @@ -1476,7 +1296,7 @@ } } }, - "v1PingResponse": { + "v1beta1PingResponse": { "type": "object", "properties": { "message": { @@ -1484,7 +1304,7 @@ } } }, - "v1Provider": { + "v1beta1Provider": { "type": "object", "properties": { "id": { @@ -1522,7 +1342,7 @@ } } }, - "v1Receiver": { + "v1beta1Receiver": { "type": "object", "properties": { "id": { @@ -1557,7 +1377,7 @@ } } }, - "v1RenderTemplateResponse": { + "v1beta1RenderTemplateResponse": { "type": "object", "properties": { "body": { @@ -1565,7 +1385,7 @@ } } }, - "v1Rule": { + "v1beta1Rule": { "type": "object", "properties": { "id": { @@ -1590,7 +1410,7 @@ "variables": { "type": "array", "items": { - "$ref": "#/definitions/v1Variables" + "$ref": "#/definitions/v1beta1Variables" } }, "createdAt": { @@ -1607,7 +1427,7 @@ } } }, - "v1SendReceiverNotificationResponse": { + "v1beta1SendReceiverNotificationResponse": { "type": "object", "properties": { "ok": { @@ -1615,29 +1435,7 @@ } } }, - "v1SlackConfig": { - "type": "object", - "properties": { - "critical": { - "$ref": "#/definitions/v1Critical" - }, - "warning": { - "$ref": "#/definitions/v1Warning" - } - } - }, - "v1SlackWorkspace": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "v1Template": { + "v1beta1Template": { "type": "object", "properties": { "id": { @@ -1667,20 +1465,20 @@ "variables": { "type": "array", "items": { - "$ref": "#/definitions/v1TemplateVariables" + "$ref": "#/definitions/v1beta1TemplateVariables" } } } }, - "v1TemplateResponse": { + "v1beta1TemplateResponse": { "type": "object", "properties": { "template": { - "$ref": "#/definitions/v1Template" + "$ref": "#/definitions/v1beta1Template" } } }, - "v1TemplateVariables": { + "v1beta1TemplateVariables": { "type": "object", "properties": { "name": { @@ -1697,10 +1495,7 @@ } } }, - "v1UpdateAlertCredentialsResponse": { - "type": "object" - }, - "v1UpdateRuleRequest": { + "v1beta1UpdateRuleRequest": { "type": "object", "properties": { "enabled": { @@ -1718,7 +1513,7 @@ "variables": { "type": "array", "items": { - "$ref": "#/definitions/v1Variables" + "$ref": "#/definitions/v1beta1Variables" } }, "providerNamespace": { @@ -1727,15 +1522,15 @@ } } }, - "v1UpdateRuleResponse": { + "v1beta1UpdateRuleResponse": { "type": "object", "properties": { "rule": { - "$ref": "#/definitions/v1Rule" + "$ref": "#/definitions/v1beta1Rule" } } }, - "v1UpsertTemplateRequest": { + "v1beta1UpsertTemplateRequest": { "type": "object", "properties": { "id": { @@ -1757,12 +1552,12 @@ "variables": { "type": "array", "items": { - "$ref": "#/definitions/v1TemplateVariables" + "$ref": "#/definitions/v1beta1TemplateVariables" } } } }, - "v1Variables": { + "v1beta1Variables": { "type": "object", "properties": { "name": { @@ -1778,14 +1573,6 @@ "type": "string" } } - }, - "v1Warning": { - "type": "object", - "properties": { - "channel": { - "type": "string" - } - } } } } diff --git a/cmd/namespace.go b/cmd/namespace.go index 33c7d03b..eb6b8bc6 100644 --- a/cmd/namespace.go +++ b/cmd/namespace.go @@ -23,7 +23,7 @@ func namespacesCmd(c *configuration) *cobra.Command { Long: heredoc.Doc(` Work with namespaces. - namespaces are used for multi-tenancy for a givin provider. + namespaces are used for multi-tenancy for a given provider. `), Annotations: map[string]string{ "group:core": "true", From ed91efc93474c1df61d0b1499c41d0a0f0512cb3 Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Tue, 23 Nov 2021 12:38:11 +0530 Subject: [PATCH 17/18] refactor: rule & templete upload cli commands --- cmd/root.go | 1 - cmd/rule.go | 122 +++++++++++++++++++++ cmd/template.go | 173 +++++++++++++++++++++++++++++ cmd/upload.go | 283 ------------------------------------------------ 4 files changed, 295 insertions(+), 284 deletions(-) delete mode 100644 cmd/upload.go diff --git a/cmd/root.go b/cmd/root.go index 8a6465b2..2f4e8ab0 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -41,7 +41,6 @@ func Execute() { rootCmd.AddCommand(configCmd()) rootCmd.AddCommand(serveCmd()) rootCmd.AddCommand(migrateCmd()) - rootCmd.AddCommand(uploadCmd(cliConfig)) rootCmd.AddCommand(providersCmd(cliConfig)) rootCmd.AddCommand(namespacesCmd(cliConfig)) rootCmd.AddCommand(receiversCmd(cliConfig)) diff --git a/cmd/rule.go b/cmd/rule.go index 7e681517..7e055d1a 100644 --- a/cmd/rule.go +++ b/cmd/rule.go @@ -2,9 +2,13 @@ package cmd import ( "context" + "errors" "fmt" + "gopkg.in/yaml.v3" + "io/ioutil" "os" "strconv" + "strings" "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" @@ -30,6 +34,7 @@ func rulesCmd(c *configuration) *cobra.Command { cmd.AddCommand(listRulesCmd(c)) cmd.AddCommand(updateRuleCmd(c)) + cmd.AddCommand(uploadRuleCmd(c)) return cmd } @@ -158,3 +163,120 @@ func updateRuleCmd(c *configuration) *cobra.Command { return cmd } + +func uploadRuleCmd(c *configuration) *cobra.Command { + var fileReader = ioutil.ReadFile + return &cobra.Command{ + Use: "upload", + Short: "Upload Rules YAML file", + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + yamlFile, err := fileReader(args[0]) + if err != nil { + fmt.Printf("Error reading YAML file: %s\n", err) + return err + } + + var yamlObject struct { + Type string `yaml:"type"` + } + err = yaml.Unmarshal(yamlFile, &yamlObject) + if err != nil { + return err + } + + if strings.ToLower(yamlObject.Type) == "rule" { + result, err := uploadRule(client, yamlFile) + if err != nil { + return err + } + printRules(result) + } else { + return errors.New("yaml is not rule type") + } + return nil + }, + } +} + +func uploadRule(client sirenv1beta1.SirenServiceClient, yamlFile []byte) ([]*sirenv1beta1.Rule, error) { + var yamlBody ruleYaml + err := yaml.Unmarshal(yamlFile, &yamlBody) + if err != nil { + return nil, err + } + var successfullyUpsertedRules []*sirenv1beta1.Rule + + for groupName, v := range yamlBody.Rules { + var ruleVariables []*sirenv1beta1.Variables + for i := 0; i < len(v.Variables); i++ { + v := &sirenv1beta1.Variables{ + Name: v.Variables[i].Name, + Value: v.Variables[i].Value, + } + ruleVariables = append(ruleVariables, v) + } + + if yamlBody.ProviderNamespace == "" { + return nil, errors.New("provider namespace is required") + } + + data, err := client.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{ + Urn: yamlBody.ProviderNamespace, + }) + if err != nil { + return nil, err + } + + provideres := data.Providers + if len(provideres) == 0 { + return nil, errors.New(fmt.Sprintf("no provider found with urn: %s", yamlBody.ProviderNamespace)) + } + + payload := &sirenv1beta1.UpdateRuleRequest{ + GroupName: groupName, + Namespace: yamlBody.Namespace, + Template: v.Template, + Variables: ruleVariables, + ProviderNamespace: provideres[0].Id, + Enabled: v.Enabled, + } + + result, err := client.UpdateRule(context.Background(), payload) + if err != nil { + fmt.Println(fmt.Sprintf("rule %s/%s/%s upload error", + payload.Namespace, payload.GroupName, payload.Template), err) + return successfullyUpsertedRules, err + } else { + successfullyUpsertedRules = append(successfullyUpsertedRules, result.Rule) + fmt.Println(fmt.Sprintf("successfully uploaded %s/%s/%s", + payload.Namespace, payload.GroupName, payload.Template)) + } + } + return successfullyUpsertedRules, nil +} + +func printRules(rules []*sirenv1beta1.Rule) { + for i := 0; i < len(rules); i++ { + fmt.Println("Upserted Rule") + fmt.Println("ID:", rules[i].Id) + fmt.Println("Name:", rules[i].Name) + fmt.Println("Enabled:", rules[i].Enabled) + fmt.Println("Group Name:", rules[i].GroupName) + fmt.Println("Namespace:", rules[i].Namespace) + fmt.Println("Template:", rules[i].Template) + fmt.Println("CreatedAt At:", rules[i].CreatedAt) + fmt.Println("UpdatedAt At:", rules[i].UpdatedAt) + fmt.Println() + } +} diff --git a/cmd/template.go b/cmd/template.go index fce30fe2..d44b1115 100644 --- a/cmd/template.go +++ b/cmd/template.go @@ -2,7 +2,10 @@ package cmd import ( "context" + "errors" "fmt" + "gopkg.in/yaml.v3" + "io/ioutil" "os" "strings" @@ -13,6 +16,44 @@ import ( "github.com/spf13/cobra" ) +type variables struct { + Name string `yaml:"name"` + Value string `yaml:"value"` +} + +type rule struct { + Template string `yaml:"template"` + Enabled bool `yaml:"enabled"` + Variables []variables `yaml:"variables"` +} + +type ruleYaml struct { + ApiVersion string `yaml:"apiVersion"` + Entity string `yaml:"entity"` + Type string `yaml:"type"` + Namespace string `yaml:"namespace"` + ProviderNamespace string `yaml:"providerNamespace"` + Rules map[string]rule `yaml:"rules"` +} + +type templatedRule struct { + Record string `yaml:"record,omitempty"` + Alert string `yaml:"alert,omitempty"` + Expr string `yaml:"expr"` + For string `yaml:"for,omitempty"` + Labels map[string]string `yaml:"labels,omitempty"` + Annotations map[string]string `yaml:"annotations,omitempty"` +} + +type template struct { + Name string `yaml:"name"` + ApiVersion string `yaml:"apiVersion"` + Type string `yaml:"type"` + Body []templatedRule `yaml:"body"` + Tags []string `yaml:"tags"` + Variables []domain.Variable `yaml:"variables"` +} + func templatesCmd(c *configuration) *cobra.Command { cmd := &cobra.Command{ Use: "template", @@ -33,6 +74,7 @@ func templatesCmd(c *configuration) *cobra.Command { cmd.AddCommand(getTemplateCmd(c)) cmd.AddCommand(deleteTemplateCmd(c)) cmd.AddCommand(renderTemplateCmd(c)) + cmd.AddCommand(uploadTemplateCmd(c)) return cmd } @@ -297,3 +339,134 @@ func renderTemplateCmd(c *configuration) *cobra.Command { return cmd } + +func uploadTemplateCmd(c *configuration) *cobra.Command { + var fileReader = ioutil.ReadFile + return &cobra.Command{ + Use: "upload", + Short: "Upload Templates YAML file", + Annotations: map[string]string{ + "group:core": "true", + }, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := context.Background() + client, cancel, err := createClient(ctx, c.Host) + if err != nil { + return err + } + defer cancel() + + yamlFile, err := fileReader(args[0]) + if err != nil { + fmt.Printf("Error reading YAML file: %s\n", err) + return err + } + + var yamlObject struct { + Type string `yaml:"type"` + } + err = yaml.Unmarshal(yamlFile, &yamlObject) + if err != nil { + return err + } + + if strings.ToLower(yamlObject.Type) == "template" { + result, err := uploadTemplate(client, yamlFile) + if err != nil { + return err + } + printTemplate(result) + } else { + return errors.New("yaml is not rule type") + } + return nil + }, + } +} + +func uploadTemplate(client sirenv1beta1.SirenServiceClient, yamlFile []byte) (*sirenv1beta1.Template, error) { + var t template + err := yaml.Unmarshal(yamlFile, &t) + if err != nil { + return nil, err + } + body, err := yaml.Marshal(t.Body) + if err != nil { + return nil, err + } + + variables := make([]*sirenv1beta1.TemplateVariables, 0) + for _, variable := range t.Variables { + variables = append(variables, &sirenv1beta1.TemplateVariables{ + Name: variable.Name, + Type: variable.Type, + Default: variable.Default, + Description: variable.Description, + }) + } + + template, err := client.UpsertTemplate(context.Background(), &sirenv1beta1.UpsertTemplateRequest{ + Name: t.Name, + Body: string(body), + Variables: variables, + Tags: t.Tags, + }) + if err != nil { + return nil, err + } + + //update associated rules for this template + data, err := client.ListRules(context.Background(), &sirenv1beta1.ListRulesRequest{ + Template: t.Name, + }) + if err != nil { + return nil, err + } + + associatedRules := data.Rules + for i := 0; i < len(associatedRules); i++ { + associatedRule := associatedRules[i] + + var updatedVariables []*sirenv1beta1.Variables + for j := 0; j < len(associatedRules[i].Variables); j++ { + ruleVar := &sirenv1beta1.Variables{ + Name: associatedRules[i].Variables[j].Name, + Value: associatedRules[i].Variables[j].Value, + Type: associatedRules[i].Variables[j].Type, + Description: associatedRules[i].Variables[j].Description, + } + updatedVariables = append(updatedVariables, ruleVar) + } + + _, err := client.UpdateRule(context.Background(), &sirenv1beta1.UpdateRuleRequest{ + GroupName: associatedRule.GroupName, + Namespace: associatedRule.Namespace, + Template: associatedRule.Template, + Variables: updatedVariables, + ProviderNamespace: associatedRule.ProviderNamespace, + Enabled: associatedRule.Enabled, + }) + + if err != nil { + fmt.Println("failed to update rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) + return nil, err + } + fmt.Println("successfully updated rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) + } + return template.Template, nil +} + +func printTemplate(template *sirenv1beta1.Template) { + if template == nil { + return + } + fmt.Println("Upserted Template") + fmt.Println("ID:", template.Id) + fmt.Println("Name:", template.Name) + fmt.Println("Tags:", template.Tags) + fmt.Println("Variables:", template.Variables) + fmt.Println("CreatedAt At:", template.CreatedAt) + fmt.Println("UpdatedAt At:", template.UpdatedAt) + +} diff --git a/cmd/upload.go b/cmd/upload.go deleted file mode 100644 index 28d4f856..00000000 --- a/cmd/upload.go +++ /dev/null @@ -1,283 +0,0 @@ -package cmd - -import ( - "context" - "errors" - "fmt" - sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" - "github.com/odpf/siren/domain" - "github.com/spf13/cobra" - "gopkg.in/yaml.v3" - "io/ioutil" - "strings" -) - -type variables struct { - Name string `yaml:"name"` - Value string `yaml:"value"` -} - -type rule struct { - Template string `yaml:"template"` - Enabled bool `yaml:"enabled"` - Variables []variables `yaml:"variables"` -} - -type ruleYaml struct { - ApiVersion string `yaml:"apiVersion"` - Entity string `yaml:"entity"` - Type string `yaml:"type"` - Namespace string `yaml:"namespace"` - ProviderNamespace string `yaml:"providerNamespace"` - Rules map[string]rule `yaml:"rules"` -} - -type templatedRule struct { - Record string `yaml:"record,omitempty"` - Alert string `yaml:"alert,omitempty"` - Expr string `yaml:"expr"` - For string `yaml:"for,omitempty"` - Labels map[string]string `yaml:"labels,omitempty"` - Annotations map[string]string `yaml:"annotations,omitempty"` -} - -type template struct { - Name string `yaml:"name"` - ApiVersion string `yaml:"apiVersion"` - Type string `yaml:"type"` - Body []templatedRule `yaml:"body"` - Tags []string `yaml:"tags"` - Variables []domain.Variable `yaml:"variables"` -} - -type yamlObject struct { - Type string `yaml:"type"` -} - -func uploadCmd(c *configuration) *cobra.Command { - return &cobra.Command{ - Use: "upload", - Short: "Upload Rules or Templates YAML file", - Annotations: map[string]string{ - "group:core": "true", - }, - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - ctx := context.Background() - client, cancel, err := createClient(ctx, c.Host) - if err != nil { - return err - } - defer cancel() - - s := UploaderService(client) - result, err := s.Upload(args[0]) - - //print all resources(succeed or failed in upsert) - if err != nil { - fmt.Println(err) - return err - } - switch obj := result.(type) { - case *sirenv1beta1.Template: - printTemplate(obj) - case []*sirenv1beta1.Rule: - printRules(obj) - default: - return errors.New("unknown response") - } - return nil - }, - } -} - -//Service talks to siren's HTTP Client -type Service struct { - SirenClient sirenv1beta1.SirenServiceClient -} - -func UploaderService(siren sirenv1beta1.SirenServiceClient) *Service { - return &Service{ - SirenClient: siren, - } -} - -var fileReader = ioutil.ReadFile - -func (s Service) Upload(fileName string) (interface{}, error) { - yamlFile, err := fileReader(fileName) - if err != nil { - fmt.Printf("Error reading YAML file: %s\n", err) - return nil, err - } - var y yamlObject - err = yaml.Unmarshal(yamlFile, &y) - if err != nil { - return nil, err - } - if strings.ToLower(y.Type) == "template" { - return s.UploadTemplate(yamlFile) - } else if strings.ToLower(y.Type) == "rule" { - return s.UploadRule(yamlFile) - } else { - return nil, errors.New("unknown type given") - } -} - -func (s Service) UploadTemplate(yamlFile []byte) (*sirenv1beta1.Template, error) { - var t template - err := yaml.Unmarshal(yamlFile, &t) - if err != nil { - return nil, err - } - body, err := yaml.Marshal(t.Body) - if err != nil { - return nil, err - } - - variables := make([]*sirenv1beta1.TemplateVariables, 0) - for _, variable := range t.Variables { - variables = append(variables, &sirenv1beta1.TemplateVariables{ - Name: variable.Name, - Type: variable.Type, - Default: variable.Default, - Description: variable.Description, - }) - } - - template, err := s.SirenClient.UpsertTemplate(context.Background(), &sirenv1beta1.UpsertTemplateRequest{ - Name: t.Name, - Body: string(body), - Variables: variables, - Tags: t.Tags, - }) - if err != nil { - return nil, err - } - - //update associated rules for this template - data, err := s.SirenClient.ListRules(context.Background(), &sirenv1beta1.ListRulesRequest{ - Template: t.Name, - }) - if err != nil { - return nil, err - } - - associatedRules := data.Rules - for i := 0; i < len(associatedRules); i++ { - associatedRule := associatedRules[i] - - var updatedVariables []*sirenv1beta1.Variables - for j := 0; j < len(associatedRules[i].Variables); j++ { - ruleVar := &sirenv1beta1.Variables{ - Name: associatedRules[i].Variables[j].Name, - Value: associatedRules[i].Variables[j].Value, - Type: associatedRules[i].Variables[j].Type, - Description: associatedRules[i].Variables[j].Description, - } - updatedVariables = append(updatedVariables, ruleVar) - } - - _, err := s.SirenClient.UpdateRule(context.Background(), &sirenv1beta1.UpdateRuleRequest{ - GroupName: associatedRule.GroupName, - Namespace: associatedRule.Namespace, - Template: associatedRule.Template, - Variables: updatedVariables, - ProviderNamespace: associatedRule.ProviderNamespace, - Enabled: associatedRule.Enabled, - }) - - if err != nil { - fmt.Println("failed to update rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) - return nil, err - } - fmt.Println("successfully updated rule of ID: ", associatedRule.Id, "\tname: ", associatedRule.Name) - } - return template.Template, nil -} - -func (s Service) UploadRule(yamlFile []byte) ([]*sirenv1beta1.Rule, error) { - var yamlBody ruleYaml - err := yaml.Unmarshal(yamlFile, &yamlBody) - if err != nil { - return nil, err - } - var successfullyUpsertedRules []*sirenv1beta1.Rule - - for groupName, v := range yamlBody.Rules { - var ruleVariables []*sirenv1beta1.Variables - for i := 0; i < len(v.Variables); i++ { - v := &sirenv1beta1.Variables{ - Name: v.Variables[i].Name, - Value: v.Variables[i].Value, - } - ruleVariables = append(ruleVariables, v) - } - - if yamlBody.ProviderNamespace == "" { - return nil, errors.New("provider namespace is required") - } - - data, err := s.SirenClient.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{ - Urn: yamlBody.ProviderNamespace, - }) - if err != nil { - return nil, err - } - - provideres := data.Providers - if len(provideres) == 0 { - return nil, errors.New(fmt.Sprintf("no provider found with urn: %s", yamlBody.ProviderNamespace)) - } - - payload := &sirenv1beta1.UpdateRuleRequest{ - GroupName: groupName, - Namespace: yamlBody.Namespace, - Template: v.Template, - Variables: ruleVariables, - ProviderNamespace: provideres[0].Id, - Enabled: v.Enabled, - } - - result, err := s.SirenClient.UpdateRule(context.Background(), payload) - if err != nil { - fmt.Println(fmt.Sprintf("rule %s/%s/%s upload error", - payload.Namespace, payload.GroupName, payload.Template), err) - return successfullyUpsertedRules, err - } else { - successfullyUpsertedRules = append(successfullyUpsertedRules, result.Rule) - fmt.Println(fmt.Sprintf("successfully uploaded %s/%s/%s", - payload.Namespace, payload.GroupName, payload.Template)) - } - } - return successfullyUpsertedRules, nil -} - -func printRules(rules []*sirenv1beta1.Rule) { - for i := 0; i < len(rules); i++ { - fmt.Println("Upserted Rule") - fmt.Println("ID:", rules[i].Id) - fmt.Println("Name:", rules[i].Name) - fmt.Println("Enabled:", rules[i].Enabled) - fmt.Println("Group Name:", rules[i].GroupName) - fmt.Println("Namespace:", rules[i].Namespace) - fmt.Println("Template:", rules[i].Template) - fmt.Println("CreatedAt At:", rules[i].CreatedAt) - fmt.Println("UpdatedAt At:", rules[i].UpdatedAt) - fmt.Println() - } -} - -func printTemplate(template *sirenv1beta1.Template) { - if template == nil { - return - } - fmt.Println("Upserted Template") - fmt.Println("ID:", template.Id) - fmt.Println("Name:", template.Name) - fmt.Println("Tags:", template.Tags) - fmt.Println("Variables:", template.Variables) - fmt.Println("CreatedAt At:", template.CreatedAt) - fmt.Println("UpdatedAt At:", template.UpdatedAt) - -} From 7b75cf733ba9d39c47bd52c0f0290514e4aebc1f Mon Sep 17 00:00:00 2001 From: Praveen Yadav Date: Tue, 23 Nov 2021 19:45:54 +0530 Subject: [PATCH 18/18] fix: use dynamic cortex client for rules update API --- app/server.go | 19 +--- cmd/rule.go | 28 +++-- pkg/rules/model.go | 2 +- pkg/rules/repository.go | 48 +++++++-- pkg/rules/repository_mock.go | 14 +-- pkg/rules/repository_test.go | 203 ++++++++++++++++++++++++++++------- pkg/rules/service.go | 15 +-- pkg/rules/service_test.go | 21 ++-- service/container.go | 6 +- 9 files changed, 245 insertions(+), 111 deletions(-) diff --git a/app/server.go b/app/server.go index e5f21093..cbe8cb22 100644 --- a/app/server.go +++ b/app/server.go @@ -11,7 +11,6 @@ import ( "strings" "time" - cortexClient "github.com/grafana/cortex-tools/pkg/client" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" grpc_zap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap" grpc_recovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery" @@ -52,16 +51,9 @@ func RunServer(c *domain.Config) error { if err != nil { return err } - cortexConfig := cortexClient.Config{ - Address: c.Cortex.Address, - UseLegacyRoutes: false, - } - client, err := cortexClient.New(cortexConfig) - if err != nil { - return nil - } + httpClient := &http.Client{} - services, err := service.Init(store, c, client, httpClient) + services, err := service.Init(store, c, httpClient) if err != nil { return err } @@ -153,16 +145,11 @@ func RunMigrations(c *domain.Config) error { return err } - cortexConfig := cortexClient.Config{ - Address: c.Cortex.Address, - UseLegacyRoutes: false, - } - client, err := cortexClient.New(cortexConfig) if err != nil { return nil } httpClient := &http.Client{} - services, err := service.Init(store, c, client, httpClient) + services, err := service.Init(store, c, httpClient) if err != nil { return err } diff --git a/cmd/rule.go b/cmd/rule.go index 7e055d1a..40f8473e 100644 --- a/cmd/rule.go +++ b/cmd/rule.go @@ -4,12 +4,14 @@ import ( "context" "errors" "fmt" - "gopkg.in/yaml.v3" + "google.golang.org/protobuf/types/known/emptypb" "io/ioutil" "os" "strconv" "strings" + "gopkg.in/yaml.v3" + "github.com/MakeNowJust/heredoc" "github.com/odpf/salt/printer" sirenv1beta1 "github.com/odpf/siren/api/proto/odpf/siren/v1beta1" @@ -231,16 +233,22 @@ func uploadRule(client sirenv1beta1.SirenServiceClient, yamlFile []byte) ([]*sir return nil, errors.New("provider namespace is required") } - data, err := client.ListProviders(context.Background(), &sirenv1beta1.ListProvidersRequest{ - Urn: yamlBody.ProviderNamespace, - }) + data, err := client.ListNamespaces(context.Background(), &emptypb.Empty{}) if err != nil { return nil, err } - provideres := data.Providers - if len(provideres) == 0 { - return nil, errors.New(fmt.Sprintf("no provider found with urn: %s", yamlBody.ProviderNamespace)) + var providerNamespace *sirenv1beta1.Namespace + for _, namespace := range data.Namespaces { + if namespace.Urn == yamlBody.ProviderNamespace { + fmt.Println(namespace) + providerNamespace = namespace + break + } + } + + if providerNamespace == nil { + return nil, fmt.Errorf("no provider found with urn: %s", yamlBody.ProviderNamespace) } payload := &sirenv1beta1.UpdateRuleRequest{ @@ -248,7 +256,7 @@ func uploadRule(client sirenv1beta1.SirenServiceClient, yamlFile []byte) ([]*sir Namespace: yamlBody.Namespace, Template: v.Template, Variables: ruleVariables, - ProviderNamespace: provideres[0].Id, + ProviderNamespace: providerNamespace.Id, Enabled: v.Enabled, } @@ -259,8 +267,8 @@ func uploadRule(client sirenv1beta1.SirenServiceClient, yamlFile []byte) ([]*sir return successfullyUpsertedRules, err } else { successfullyUpsertedRules = append(successfullyUpsertedRules, result.Rule) - fmt.Println(fmt.Sprintf("successfully uploaded %s/%s/%s", - payload.Namespace, payload.GroupName, payload.Template)) + fmt.Printf("successfully uploaded %s/%s/%s", + payload.Namespace, payload.GroupName, payload.Template) } } return successfullyUpsertedRules, nil diff --git a/pkg/rules/model.go b/pkg/rules/model.go index fd2f73dd..c4d4a0c3 100644 --- a/pkg/rules/model.go +++ b/pkg/rules/model.go @@ -64,7 +64,7 @@ func (rule *Rule) toDomain() (*domain.Rule, error) { //Repository interface type RuleRepository interface { - Upsert(*Rule, cortexCaller, domain.TemplatesService) (*Rule, error) + Upsert(*Rule, domain.TemplatesService) (*Rule, error) Get(string, string, string, string, uint64) ([]Rule, error) Migrate() error } diff --git a/pkg/rules/repository.go b/pkg/rules/repository.go index 231f32f8..6496026d 100644 --- a/pkg/rules/repository.go +++ b/pkg/rules/repository.go @@ -27,6 +27,33 @@ type variable struct { type Variables struct { Variables []variable `json:"variables"` } +type RuleResponse struct { + NamespaceUrn string + ProviderUrn string + ProviderType string + ProviderHost string +} + +type cortexCaller interface { + CreateRuleGroup(ctx context.Context, namespace string, rg rwrulefmt.RuleGroup) error + DeleteRuleGroup(ctx context.Context, namespace, groupName string) error + GetRuleGroup(ctx context.Context, namespace, groupName string) (*rwrulefmt.RuleGroup, error) + ListRules(ctx context.Context, namespace string) (map[string][]rwrulefmt.RuleGroup, error) +} + +func newCortexClient(host string) (cortexCaller, error) { + cortexConfig := cortexClient.Config{ + Address: host, + UseLegacyRoutes: false, + } + + client, err := cortexClient.New(cortexConfig) + if err != nil { + return nil, err + } + + return client, nil +} // Repository talks to the store to read or insert data type Repository struct { @@ -117,7 +144,10 @@ func mergeRuleVariablesWithDefaults(templateVariables []domain.Variable, ruleVar return finalRuleVariables } -func (r Repository) Upsert(rule *Rule, client cortexCaller, templatesService domain.TemplatesService) (*Rule, error) { +var cortexClientInstance = newCortexClient + +func (r Repository) Upsert(rule *Rule, templatesService domain.TemplatesService) (*Rule, error) { + rule.Name = fmt.Sprintf("%s_%s_%s_%s", namePrefix, rule.Namespace, rule.GroupName, rule.Template) var existingRule Rule @@ -142,16 +172,12 @@ func (r Repository) Upsert(rule *Rule, client cortexCaller, templatesService dom if err != nil { return nil, err } - + rule.Variables = string(jsonBytes) err = r.db.Transaction(func(tx *gorm.DB) error { - var data struct { - NamespaceUrn string - ProviderUrn string - ProviderType string - } + var data RuleResponse result := r.db.Table("namespaces"). - Select("namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type"). + Select("namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host"). Joins("RIGHT JOIN providers on providers.id = namespaces.provider_id"). Where("namespaces.id = ?", rule.ProviderNamespace). Find(&data) @@ -164,7 +190,6 @@ func (r Repository) Upsert(rule *Rule, client cortexCaller, templatesService dom rule.Name = fmt.Sprintf("%s_%s_%s_%s_%s_%s", namePrefix, data.ProviderUrn, data.NamespaceUrn, rule.Namespace, rule.GroupName, rule.Template) - result = tx.Where(fmt.Sprintf("name = '%s'", rule.Name)).Find(&existingRule) if result.Error != nil { return result.Error @@ -184,6 +209,11 @@ func (r Repository) Upsert(rule *Rule, client cortexCaller, templatesService dom } if data.ProviderType == "cortex" { + client, err := cortexClientInstance(data.ProviderHost) + if err != nil { + return err + } + result = tx.Where(fmt.Sprintf("namespace = '%s' AND group_name = '%s' AND provider_namespace = '%d'", rule.Namespace, rule.GroupName, rule.ProviderNamespace)).Find(&rulesWithinGroup) if result.Error != nil { diff --git a/pkg/rules/repository_mock.go b/pkg/rules/repository_mock.go index 5668a3ef..afefd21a 100644 --- a/pkg/rules/repository_mock.go +++ b/pkg/rules/repository_mock.go @@ -49,13 +49,13 @@ func (_m *RuleRepositoryMock) Migrate() error { return r0 } -// Upsert provides a mock function with given fields: _a0, _a1, _a2 -func (_m *RuleRepositoryMock) Upsert(_a0 *Rule, _a1 cortexCaller, _a2 domain.TemplatesService) (*Rule, error) { - ret := _m.Called(_a0, _a1, _a2) +// Upsert provides a mock function with given fields: _a0, _a1 +func (_m *RuleRepositoryMock) Upsert(_a0 *Rule, _a1 domain.TemplatesService) (*Rule, error) { + ret := _m.Called(_a0, _a1) var r0 *Rule - if rf, ok := ret.Get(0).(func(*Rule, cortexCaller, domain.TemplatesService) *Rule); ok { - r0 = rf(_a0, _a1, _a2) + if rf, ok := ret.Get(0).(func(*Rule, domain.TemplatesService) *Rule); ok { + r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*Rule) @@ -63,8 +63,8 @@ func (_m *RuleRepositoryMock) Upsert(_a0 *Rule, _a1 cortexCaller, _a2 domain.Tem } var r1 error - if rf, ok := ret.Get(1).(func(*Rule, cortexCaller, domain.TemplatesService) error); ok { - r1 = rf(_a0, _a1, _a2) + if rf, ok := ret.Get(1).(func(*Rule, domain.TemplatesService) error); ok { + r1 = rf(_a0, _a1) } else { r1 = ret.Error(1) } diff --git a/pkg/rules/repository_test.go b/pkg/rules/repository_test.go index 94d11c36..fcd0f9a6 100644 --- a/pkg/rules/repository_test.go +++ b/pkg/rules/repository_test.go @@ -5,6 +5,7 @@ import ( "database/sql/driver" "errors" "github.com/DATA-DOG/go-sqlmock" + cortexClient "github.com/grafana/cortex-tools/pkg/client" "github.com/odpf/siren/domain" "github.com/odpf/siren/mocks" "github.com/stretchr/testify/mock" @@ -14,6 +15,11 @@ import ( "time" ) +var cortextConfig = cortexClient.Config{ + Address: "localhost:port", + UseLegacyRoutes: false, +} + // AnyTime is used to expect arbitrary time value type AnyTime struct{} @@ -71,10 +77,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should insert rule merged with defaults and call cortex APIs", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -135,7 +146,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectCommit() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.Equal(expectedRule, actualRule) s.Nil(err) }) @@ -143,10 +154,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should update rule merged with defaults and call cortex APIs", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -213,7 +229,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectCommit() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.Equal(expectedRule, actualRule) s.Nil(err) }) @@ -221,10 +237,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should rollback update if cortex API call fails", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -286,7 +307,81 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) + s.EqualError(err, "random error") + s.Nil(actualRule) + if err := s.dbmock.ExpectationsWereMet(); err != nil { + s.T().Errorf("there were unfulfilled expectations: %s", err) + } + }) + + s.Run("should rollback update if cortex client creation fails", func() { + mockClient := &cortexCallerMock{} + mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return nil, errors.New("random error") + } + defer func() { cortexClientInstance = oldCortexClientCreator }() + mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) + mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) + mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) + secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) + updateRuleQuery := regexp.QuoteMeta(`UPDATE "rules" SET "updated_at"=$1,"name"=$2,"namespace"=$3,"group_name"=$4,"template"=$5,"enabled"=$6,"variables"=$7,"provider_namespace"=$8 WHERE id = $9 AND "id" = $10`) + input := &Rule{ + Namespace: "foo", + GroupName: "bar", + Template: "tmpl", + Enabled: &truebool, + ProviderNamespace: 1, + Variables: `[{"name":"for", "type":"string", "value":"20m", "description":"test"}]`, + } + expectedRule := &Rule{ + Id: 10, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + Name: "siren_api_bar_foo_foo_bar_tmpl", + Namespace: "foo", + GroupName: "bar", + Enabled: &truebool, + Template: "tmpl", + ProviderNamespace: 1, + Variables: `[{"name":"for","type":"string","value":"20m","description":"test"},{"name":"team","type":"string","value":"gojek","description":"test"}]`, + } + expectedNamespace := struct { + Urn string + Purn string + Type string + }{ + Urn: "foo", + Purn: "bar", + Type: "cortex", + } + + expectedNamespaceRow := sqlmock.NewRows([]string{"namespace_urn", "provider_urn", "provider_type"}). + AddRow(expectedNamespace.Urn, expectedNamespace.Purn, expectedNamespace.Type) + expectedRuleRowsInFirstQuery := sqlmock.NewRows([]string{"id", "created_at", "updated_at", "name", "namespace", "group_name", "template", "enabled", "variables", "provider_namespace"}). + AddRow(expectedRule.Id, expectedRule.CreatedAt, + expectedRule.UpdatedAt, expectedRule.Name, expectedRule.Namespace, + expectedRule.GroupName, expectedRule.Template, expectedRule.Enabled, + expectedRule.Variables, expectedRule.ProviderNamespace) + expectedRuleRows := sqlmock.NewRows([]string{"id", "created_at", "updated_at", "name", "namespace", "group_name", "template", "enabled", "variables", "provider_namespace"}). + AddRow(expectedRule.Id, expectedRule.CreatedAt, + expectedRule.UpdatedAt, expectedRule.Name, expectedRule.Namespace, + expectedRule.GroupName, expectedRule.Template, expectedRule.Enabled, + expectedRule.Variables, expectedRule.ProviderNamespace) + + s.dbmock.ExpectBegin() + s.dbmock.ExpectQuery(namespaceQuery).WillReturnRows(expectedNamespaceRow) + s.dbmock.ExpectQuery(firstSelectRuleQuery).WillReturnRows(expectedRuleRowsInFirstQuery) + s.dbmock.ExpectExec(updateRuleQuery).WithArgs(AnyTime{}, expectedRule.Name, expectedRule.Namespace, + expectedRule.GroupName, expectedRule.Template, expectedRule.Enabled, expectedRule.Variables, + expectedRule.ProviderNamespace, expectedRule.Id, expectedRule.Id).WillReturnResult(sqlmock.NewResult(10, 1)) + s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) + s.dbmock.ExpectRollback() + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -297,10 +392,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should rollback insert if cortex API call fails", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -361,7 +461,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -375,7 +475,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) input := &Rule{ Namespace: "foo", @@ -389,7 +489,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectBegin() s.dbmock.ExpectQuery(namespaceQuery).WillReturnError(errors.New("random error")) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -404,7 +504,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) input := &Rule{ Namespace: "foo", @@ -418,7 +518,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectBegin() s.dbmock.ExpectQuery(namespaceQuery).WillReturnRows(sqlmock.NewRows(nil)) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "provider not found") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -432,7 +532,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService := &mocks.TemplatesService{} mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) insertRuleQuery := regexp.QuoteMeta(`INSERT INTO "rules" ("created_at","updated_at","name","namespace","group_name","template","enabled","variables","provider_namespace") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) RETURNING "id"`) @@ -485,7 +585,7 @@ func (s *RepositoryTestSuite) TestUpsert() { WillReturnRows(sqlmock.NewRows(nil)) s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "provider not supported") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -500,7 +600,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) insertRuleQuery := regexp.QuoteMeta(`INSERT INTO "rules" ("created_at","updated_at","name","namespace","group_name","template","enabled","variables","provider_namespace") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) RETURNING "id"`) @@ -546,7 +646,7 @@ func (s *RepositoryTestSuite) TestUpsert() { expectedRule.ProviderNamespace). WillReturnError(errors.New("random error")) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -561,7 +661,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) input := &Rule{ @@ -589,7 +689,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(namespaceQuery).WillReturnRows(expectedNamespaceRow) s.dbmock.ExpectQuery(firstSelectRuleQuery).WillReturnError(errors.New("random error")) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -603,7 +703,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService := &mocks.TemplatesService{} mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) insertRuleQuery := regexp.QuoteMeta(`INSERT INTO "rules" ("created_at","updated_at","name","namespace","group_name","template","enabled","variables","provider_namespace") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) RETURNING "id"`) @@ -650,7 +750,7 @@ func (s *RepositoryTestSuite) TestUpsert() { WillReturnRows(sqlmock.NewRows(nil)) s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnError(errors.New("random error")) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -664,7 +764,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService := &mocks.TemplatesService{} mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -719,7 +819,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnError(errors.New("random error")) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) mockClient.AssertNotCalled(s.T(), "CreateRuleGroup") @@ -730,11 +830,16 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should disable alerts if no error from cortex", func() { mockClient := &cortexCallerMock{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockClient.On("DeleteRuleGroup", mock.Anything, "foo", "bar").Return(nil) mockTemplateService := &mocks.TemplatesService{} mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -789,7 +894,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(sqlmock.NewRows(nil)) s.dbmock.ExpectCommit() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.Equal(expectedRule, actualRule) s.Nil(err) mockClient.AssertCalled(s.T(), "DeleteRuleGroup", mock.Anything, "foo", "bar") @@ -801,10 +906,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should rollback if delete rule group call fails", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("DeleteRuleGroup", mock.Anything, "foo", "bar").Return(errors.New("random error")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -859,7 +969,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(sqlmock.NewRows(nil)) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -870,10 +980,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should handle deletion of non-existent rule group", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("DeleteRuleGroup", mock.Anything, "foo", "bar").Return(errors.New("requested resource not found")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -928,7 +1043,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(sqlmock.NewRows(nil)) s.dbmock.ExpectCommit() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.Equal(expectedRule, actualRule) s.Nil(err) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -950,7 +1065,7 @@ func (s *RepositoryTestSuite) TestUpsert() { Variables: `[{"name":"for", "type":"string", "value":"20m", "description":"test"}]`, } - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -964,7 +1079,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService.On("Render", mock.Anything, mock.Anything).Return("", errors.New("random error")) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -1024,7 +1139,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "random error") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -1046,7 +1161,7 @@ func (s *RepositoryTestSuite) TestUpsert() { Variables: `{}`, } - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "json: cannot unmarshal object into Go value of type []domain.RuleVariable") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -1069,7 +1184,7 @@ func (s *RepositoryTestSuite) TestUpsert() { mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(badTemplate.Body, nil) mockTemplateService.On("GetByName", "tmpl").Return(badTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -1129,7 +1244,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectRollback() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `abcd` into []rulefmt.RuleNode") s.Nil(actualRule) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -1140,10 +1255,15 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should store disabled alerts", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("DeleteRuleGroup", mock.Anything, "foo", "bar").Return(nil) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -1202,7 +1322,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectCommit() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.Equal(expectedRule, actualRule) s.Nil(err) if err := s.dbmock.ExpectationsWereMet(); err != nil { @@ -1224,7 +1344,7 @@ func (s *RepositoryTestSuite) TestUpsert() { ProviderNamespace: 1, Variables: `[{"name":"for", "type":"string", "value":"20m", "description":"test"}]`, } - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.EqualError(err, "template not found") s.Nil(actualRule) }) @@ -1232,11 +1352,16 @@ func (s *RepositoryTestSuite) TestUpsert() { s.Run("should insert disabled rule and not call cortex APIs", func() { mockClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} + oldCortexClientCreator := cortexClientInstance + cortexClientInstance = func(string) (cortexCaller, error) { + return mockClient, nil + } + defer func() { cortexClientInstance = oldCortexClientCreator }() mockTemplateService.On("Render", mock.Anything, mock.Anything).Return(dummyTemplateBody, nil) mockTemplateService.On("GetByName", "tmpl").Return(expectedTemplate, nil) mockClient.On("CreateRuleGroup", mock.Anything, "foo", mock.Anything).Return(nil) mockClient.On("DeleteRuleGroup", mock.Anything, "foo", "bar").Return(errors.New("requested resource not found")) - namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) + namespaceQuery := regexp.QuoteMeta(`SELECT namespaces.urn as namespace_urn, providers.urn as provider_urn, providers.type as provider_type, providers.host as provider_host FROM "namespaces" RIGHT JOIN providers on providers.id = namespaces.provider_id WHERE namespaces.id = $1`) firstSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) secondSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE name = 'siren_api_bar_foo_foo_bar_tmpl'`) thirdSelectRuleQuery := regexp.QuoteMeta(`SELECT * FROM "rules" WHERE namespace = 'foo' AND group_name = 'bar' AND provider_namespace = '1'`) @@ -1297,7 +1422,7 @@ func (s *RepositoryTestSuite) TestUpsert() { s.dbmock.ExpectQuery(secondSelectRuleQuery).WillReturnRows(expectedRuleRows) s.dbmock.ExpectQuery(thirdSelectRuleQuery).WillReturnRows(expectedRuleRowsInGroup) s.dbmock.ExpectCommit() - actualRule, err := s.repository.Upsert(input, mockClient, mockTemplateService) + actualRule, err := s.repository.Upsert(input, mockTemplateService) s.Equal(expectedRule, actualRule) s.Nil(err) }) diff --git a/pkg/rules/service.go b/pkg/rules/service.go index 5391c51f..922f2cc7 100644 --- a/pkg/rules/service.go +++ b/pkg/rules/service.go @@ -1,33 +1,22 @@ package rules import ( - "context" - "github.com/grafana/cortex-tools/pkg/rules/rwrulefmt" "github.com/odpf/siren/domain" "github.com/odpf/siren/pkg/templates" "gorm.io/gorm" ) -type cortexCaller interface { - CreateRuleGroup(ctx context.Context, namespace string, rg rwrulefmt.RuleGroup) error - DeleteRuleGroup(ctx context.Context, namespace, groupName string) error - GetRuleGroup(ctx context.Context, namespace, groupName string) (*rwrulefmt.RuleGroup, error) - ListRules(ctx context.Context, namespace string) (map[string][]rwrulefmt.RuleGroup, error) -} - // Service handles business logic type Service struct { repository RuleRepository templateService domain.TemplatesService - client cortexCaller } // NewService returns repository struct -func NewService(db *gorm.DB, client cortexCaller) domain.RuleService { +func NewService(db *gorm.DB) domain.RuleService { return &Service{ repository: NewRepository(db), templateService: templates.NewService(db), - client: client, } } @@ -41,7 +30,7 @@ func (service Service) Upsert(rule *domain.Rule) (*domain.Rule, error) { if err != nil { return nil, err } - upsertedRule, err := service.repository.Upsert(r, service.client, service.templateService) + upsertedRule, err := service.repository.Upsert(r, service.templateService) if err != nil { return nil, err } diff --git a/pkg/rules/service_test.go b/pkg/rules/service_test.go index 7a6e9bd8..c55bbd30 100644 --- a/pkg/rules/service_test.go +++ b/pkg/rules/service_test.go @@ -13,9 +13,8 @@ var truebool = true func TestService_Upsert(t *testing.T) { t.Run("should call repository Upsert method and return result in domain's type", func(t *testing.T) { repositoryMock := &RuleRepositoryMock{} - mockCortexClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} - dummyService := Service{repository: repositoryMock, client: mockCortexClient, templateService: mockTemplateService} + dummyService := Service{repository: repositoryMock, templateService: mockTemplateService} dummyRule := &domain.Rule{ Id: 1, Name: "bar", Enabled: true, GroupName: "test-group", Namespace: "baz", Template: "test-tmpl", Variables: []domain.RuleVariable{{ @@ -31,18 +30,17 @@ func TestService_Upsert(t *testing.T) { Variables: `[{"name":"test-name","type":"test-type","value":"test-value","description":"test-description"}]`, ProviderNamespace: 1, } - repositoryMock.On("Upsert", modelRule, mockCortexClient, mockTemplateService).Return(modelRule, nil).Once() + repositoryMock.On("Upsert", modelRule, mockTemplateService).Return(modelRule, nil).Once() result, err := dummyService.Upsert(dummyRule) assert.Nil(t, err) assert.Equal(t, dummyRule, result) - repositoryMock.AssertCalled(t, "Upsert", modelRule, mockCortexClient, mockTemplateService) + repositoryMock.AssertCalled(t, "Upsert", modelRule, mockTemplateService) }) t.Run("should call repository Upsert method and return error if any", func(t *testing.T) { repositoryMock := &RuleRepositoryMock{} - mockCortexClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} - dummyService := Service{repository: repositoryMock, client: mockCortexClient, templateService: mockTemplateService} + dummyService := Service{repository: repositoryMock, templateService: mockTemplateService} dummyRule := &domain.Rule{ Id: 1, Name: "bar", Enabled: true, GroupName: "test-group", Namespace: "baz", Template: "test-tmpl", Variables: []domain.RuleVariable{{ @@ -58,19 +56,18 @@ func TestService_Upsert(t *testing.T) { Variables: `[{"name":"test-name","type":"test-type","value":"test-value","description":"test-description"}]`, ProviderNamespace: 1, } - repositoryMock.On("Upsert", modelRule, mockCortexClient, mockTemplateService). + repositoryMock.On("Upsert", modelRule, mockTemplateService). Return(nil, errors.New("random error")).Once() result, err := dummyService.Upsert(dummyRule) assert.Nil(t, result) assert.EqualError(t, err, "random error") - repositoryMock.AssertCalled(t, "Upsert", modelRule, mockCortexClient, mockTemplateService) + repositoryMock.AssertCalled(t, "Upsert", modelRule, mockTemplateService) }) t.Run("should call repository Upsert method and return error if any", func(t *testing.T) { repositoryMock := &RuleRepositoryMock{} - mockCortexClient := &cortexCallerMock{} mockTemplateService := &mocks.TemplatesService{} - dummyService := Service{repository: repositoryMock, client: mockCortexClient, templateService: mockTemplateService} + dummyService := Service{repository: repositoryMock, templateService: mockTemplateService} dummyRule := &domain.Rule{ Id: 1, Name: "bar", Enabled: true, GroupName: "test-group", Namespace: "baz", Template: "test-tmpl", Variables: []domain.RuleVariable{{ @@ -86,12 +83,12 @@ func TestService_Upsert(t *testing.T) { Variables: `[{"name":"test-name","type":"test-type","value":"test-value","description":"test-description"}]`, ProviderNamespace: 1, } - repositoryMock.On("Upsert", modelRule, mockCortexClient, mockTemplateService). + repositoryMock.On("Upsert", modelRule, mockTemplateService). Return(nil, errors.New("random error")).Once() result, err := dummyService.Upsert(dummyRule) assert.Nil(t, result) assert.EqualError(t, err, "random error") - repositoryMock.AssertCalled(t, "Upsert", modelRule, mockCortexClient, mockTemplateService) + repositoryMock.AssertCalled(t, "Upsert", modelRule, mockTemplateService) }) } diff --git a/service/container.go b/service/container.go index 7030ff72..aa11b12d 100644 --- a/service/container.go +++ b/service/container.go @@ -6,7 +6,6 @@ import ( "github.com/odpf/siren/pkg/receiver" "net/http" - "github.com/grafana/cortex-tools/pkg/client" "github.com/odpf/siren/domain" "github.com/odpf/siren/pkg/alerts" "github.com/odpf/siren/pkg/codeexchange" @@ -28,10 +27,9 @@ type Container struct { ReceiverService domain.ReceiverService } -func Init(db *gorm.DB, c *domain.Config, - client *client.CortexClient, httpClient *http.Client) (*Container, error) { +func Init(db *gorm.DB, c *domain.Config, httpClient *http.Client) (*Container, error) { templatesService := templates.NewService(db) - rulesService := rules.NewService(db, client) + rulesService := rules.NewService(db) alertHistoryService := alerts.NewService(db) codeExchangeService, err := codeexchange.NewService(db, httpClient, c.SlackApp, c.EncryptionKey) if err != nil {