From 119b321dfed266f91e755e27465e6740959acca3 Mon Sep 17 00:00:00 2001 From: anil-intelops Date: Fri, 28 Jul 2023 21:03:41 +0530 Subject: [PATCH 01/31] store implementations are --- server/pkg/api/store_apps.go | 203 ++++++++++++++++- server/pkg/pb/serverpb/server.pb.go | 2 +- server/pkg/pb/serverpb/server_grpc.pb.go | 2 +- server/pkg/store/astra/db.go | 276 +++++++++++++++++++++++ server/pkg/store/cassandra/db.go | 62 +++++ server/pkg/store/store.go | 5 + server/pkg/types/type.go | 43 ++++ 7 files changed, 586 insertions(+), 7 deletions(-) diff --git a/server/pkg/api/store_apps.go b/server/pkg/api/store_apps.go index 388228aa..53b9a9ee 100644 --- a/server/pkg/api/store_apps.go +++ b/server/pkg/api/store_apps.go @@ -4,29 +4,222 @@ import ( "context" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "github.com/kube-tarian/kad/server/pkg/types" ) func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppRequest) ( *serverpb.AddStoreAppResponse, error) { - return &serverpb.AddStoreAppResponse{}, nil + + if request.AppConfig.AppName == "" { + s.log.Errorf("failed to add app cnfig to store, %v", "App name is missing") + return &serverpb.AddStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed add app config to store, app name is missing", + }, nil + } else if request.AppConfig.Version == "" { + s.log.Errorf("failed to add app cnfig to store, %v", "App version is") + return &serverpb.AddStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed add app config to store, app version is missing", + }, nil + } + + config := &types.StoreAppConfig{ + ReleaseName: request.AppConfig.ReleaseName, + AppName: request.AppConfig.AppName, + Version: request.AppConfig.Version, + Category: request.AppConfig.Category, + Description: request.AppConfig.Description, + ChartName: request.AppConfig.ChartName, + RepoName: request.AppConfig.RepoName, + RepoURL: request.AppConfig.RepoURL, + Namespace: request.AppConfig.Namespace, + CreateNamespace: request.AppConfig.CreateNamespace, + PrivilegedNamespace: request.AppConfig.PrivilegedNamespace, + Icon: request.AppConfig.Icon, + LaunchURL: request.AppConfig.LaunchURL, + LaunchRedirectURL: request.AppConfig.LaunchRedirectURL, + OverrideValues: request.AppValues.OverrideValues, + LaunchUIValues: request.AppValues.LaunchUIValues, + } + + if err := s.serverStore.AddAppToStore(config); err != nil { + s.log.Errorf("failed to add app cnfig to store, %v", err) + return &serverpb.AddStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed add app config to store", + }, nil + } + + return &serverpb.AddStoreAppResponse{ + Status: serverpb.StatusCode_OK, + StatusMessage: "app config is sucessfuly added to store", + }, nil } func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateStoreAppRequest) ( *serverpb.UpdateStoreAppRsponse, error) { - return &serverpb.UpdateStoreAppRsponse{}, nil + if request.AppConfig.AppName == "" { + s.log.Errorf("failed to update app cnfig to store, %v", "App name is missing") + return &serverpb.UpdateStoreAppRsponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed add app config to store, app name is missing", + }, nil + } else if request.AppConfig.Version == "" { + s.log.Errorf("failed to update app cnfig to store, %v", "App version is") + return &serverpb.UpdateStoreAppRsponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed add app config to store, app version is missing", + }, nil + } + + config := &types.StoreAppConfig{ + ReleaseName: request.AppConfig.ReleaseName, + AppName: request.AppConfig.AppName, + Version: request.AppConfig.Version, + Category: request.AppConfig.Category, + Description: request.AppConfig.Description, + ChartName: request.AppConfig.ChartName, + RepoName: request.AppConfig.RepoName, + RepoURL: request.AppConfig.RepoURL, + Namespace: request.AppConfig.Namespace, + CreateNamespace: request.AppConfig.CreateNamespace, + PrivilegedNamespace: request.AppConfig.PrivilegedNamespace, + Icon: request.AppConfig.Icon, + LaunchURL: request.AppConfig.LaunchURL, + LaunchRedirectURL: request.AppConfig.LaunchRedirectURL, + OverrideValues: request.AppValues.OverrideValues, + LaunchUIValues: request.AppValues.LaunchUIValues, + } + + if err := s.serverStore.UpdateAppInStore(config); err != nil { + s.log.Errorf("failed to update app cnfig in store, %v", err) + return &serverpb.UpdateStoreAppRsponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed update app config to store", + }, nil + } + + return &serverpb.UpdateStoreAppRsponse{ + Status: serverpb.StatusCode_OK, + StatusMessage: "app config is sucessfuly updated", + }, nil } func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteStoreAppRequest) ( *serverpb.DeleteStoreAppResponse, error) { - return &serverpb.DeleteStoreAppResponse{}, nil + if request.AppName == "" { + s.log.Errorf("failed to delete app cnfig from store, %v", "App name is missing") + return &serverpb.DeleteStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to delete app config from store, app name is missing", + }, nil + } else if request.Version == "" { + s.log.Errorf("failed to delete app cnfig from store, %v", "App version is") + return &serverpb.DeleteStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to delete app config from store, app version is missing", + }, nil + } + + if err := s.serverStore.DeleteAppFromStore(request.AppName, request.Version); err != nil { + s.log.Errorf("failed to delete app cnfig from store, %v", err) + return &serverpb.DeleteStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed delete app config from store", + }, nil + } + + return &serverpb.DeleteStoreAppResponse{ + Status: serverpb.StatusCode_OK, + StatusMessage: "app config is sucessfuly deleted", + }, nil + } func (s *Server) GetStoreApp(ctx context.Context, request *serverpb.GetStoreAppRequest) ( *serverpb.GetStoreAppResponse, error) { - return &serverpb.GetStoreAppResponse{}, nil + if request.AppName == "" { + s.log.Errorf("failed to get app config from store, %v", "App name is missing") + return &serverpb.GetStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to get app config from store, app name is missing", + }, nil + } else if request.Version == "" { + s.log.Errorf("failed to get app config from store, %v", "App version is") + return &serverpb.GetStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to get app config from store, app version is missing", + }, nil + } + + config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) + if err != nil { + s.log.Errorf("failed to get app cnfig from store, %v", err) + return &serverpb.GetStoreAppResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed get app config from store", + }, nil + } + + appConfig := &serverpb.StoreAppConfig{ + AppName: config.Name, + Version: config.Version, + Category: config.Category, + Description: config.Description, + ChartName: config.ChartName, + RepoName: config.RepoName, + RepoURL: config.RepoURL, + Namespace: config.Namespace, + CreateNamespace: config.CreateNamespace, + PrivilegedNamespace: config.PrivilegedNamespace, + Icon: config.Icon, + LaunchURL: config.LaunchUIURL, + LaunchRedirectURL: config.LaunchUIRedirectURL, + } + + return &serverpb.GetStoreAppResponse{ + Status: serverpb.StatusCode_OK, + StatusMessage: "app config is sucessfuly fetched from store", + AppConfig: appConfig, + }, nil + } func (s *Server) GetStoreApps(ctx context.Context, request *serverpb.GetStoreAppsRequest) ( *serverpb.GetStoreAppsResponse, error) { - return &serverpb.GetStoreAppsResponse{}, nil + + configs, err := s.serverStore.GetAppsFromStore() + if err != nil { + s.log.Errorf("failed to get app cnfigs from store, %v", err) + return &serverpb.GetStoreAppsResponse{ + Status: serverpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed get app configs from store", + }, nil + } + + appConfigs := []*serverpb.StoreAppConfig{} + for _, config := range *configs { + appConfigs = append(appConfigs, &serverpb.StoreAppConfig{ + AppName: config.Name, + Version: config.Version, + Category: config.Category, + Description: config.Description, + ChartName: config.ChartName, + RepoName: config.RepoName, + RepoURL: config.RepoURL, + Namespace: config.Namespace, + CreateNamespace: config.CreateNamespace, + PrivilegedNamespace: config.PrivilegedNamespace, + Icon: config.Icon, + LaunchURL: config.LaunchUIURL, + LaunchRedirectURL: config.LaunchUIRedirectURL, + }) + } + + return &serverpb.GetStoreAppsResponse{ + Status: serverpb.StatusCode_OK, + StatusMessage: "app configs are sucessfuly fetched from store", + AppConfigs: appConfigs, + }, nil } diff --git a/server/pkg/pb/serverpb/server.pb.go b/server/pkg/pb/serverpb/server.pb.go index 02b2a6f5..263e33bb 100644 --- a/server/pkg/pb/serverpb/server.pb.go +++ b/server/pkg/pb/serverpb/server.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.30.0 -// protoc v3.12.4 +// protoc v4.23.0 // source: server.proto package serverpb diff --git a/server/pkg/pb/serverpb/server_grpc.pb.go b/server/pkg/pb/serverpb/server_grpc.pb.go index a7afccab..5f82012b 100644 --- a/server/pkg/pb/serverpb/server_grpc.pb.go +++ b/server/pkg/pb/serverpb/server_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.12.4 +// - protoc v4.23.0 // source: server.proto package serverpb diff --git a/server/pkg/store/astra/db.go b/server/pkg/store/astra/db.go index 79a08012..4d4d06c2 100644 --- a/server/pkg/store/astra/db.go +++ b/server/pkg/store/astra/db.go @@ -308,3 +308,279 @@ func (a *AstraServerStore) getClusterID(orgID, clusterName string) (string, erro return "", fmt.Errorf("cluster not found") } + +func (a *AstraServerStore) isAppExistsInStore(name, version string) (bool, error) { + selectClusterQuery := &pb.Query{ + Cql: fmt.Sprintf("Select cluster_ids FROM %s.app_config WHERE app_name=%s AND version =%s ;", + a.keyspace, name, version), + } + + response, err := a.c.Session().ExecuteQuery(selectClusterQuery) + if err != nil { + return false, fmt.Errorf("failed to initialise db: %w", err) + } + + result := response.GetResultSet() + if len(result.Rows) > 0 { + return true, nil + } + + return false, nil +} + +func (a *AstraServerStore) AddAppToStore(config *types.StoreAppConfig) error { + appExists, err := a.isAppExistsInStore(config.AppName, config.Version) + if err != nil { + return fmt.Errorf("failed to store app config : %w", err) + } + + if appExists { + return fmt.Errorf("app is already available") + } + + insertQuery := &pb.Query{ + Cql: fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name, repo_url, namespace, version, create_namespace,privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values) VALUES (%s, %s, %s, %s, %s, %s, %t, %t, %s, %s, %s, %s, %s, %s, %s );", + a.keyspace, config.AppName, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues), + } + + _, err = a.c.Session().ExecuteQuery(insertQuery) + if err != nil { + return fmt.Errorf("failed to initialise db: %w", err) + } + + return nil +} + +func (a *AstraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { + + updateQuery := &pb.Query{ + Cql: fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', version = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = %s, description = '%s', launch_ui_values = %s, override_values = %s WHERE name = '%s' AND version = '%s';", + a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, config.AppName, config.Version), + } + + _, err := a.c.Session().ExecuteQuery(updateQuery) + if err != nil { + return fmt.Errorf("failed to update app config: %w", err) + } + + return nil +} + +func (a *AstraServerStore) DeleteAppFromStore(name, version string) error { + + deleteQuery := &pb.Query{ + Cql: fmt.Sprintf( + "DELETE FROM %s.app_config WHERE name=%s AND version=%s ;", + a.keyspace, name, version), + } + + _, err := a.c.Session().ExecuteQuery(deleteQuery) + if err != nil { + return fmt.Errorf("failed to delete app config: %w", err) + } + + return nil +} + +func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { + + selectQuery := &pb.Query{ + Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values FROM %s.app_config WHERE name=%s AND version=%s;", + a.keyspace, name, version), + } + + response, err := a.c.Session().ExecuteQuery(selectQuery) + if err != nil { + return nil, fmt.Errorf("failed to get app config from store: %w", err) + } + + result := response.GetResultSet() + + if len(result.Rows) == 0 { + return nil, fmt.Errorf("app: %s not found", name) + } + + cqlAppName, err := client.ToString(result.Rows[0].Values[0]) + if err != nil { + return nil, fmt.Errorf("failed to get app name: %w", err) + } + cqlChartName, err := client.ToString(result.Rows[0].Values[1]) + if err != nil { + return nil, fmt.Errorf("failed to get chart name: %w", err) + } + cqlRepoName, err := client.ToString(result.Rows[0].Values[2]) + if err != nil { + return nil, fmt.Errorf("failed to get repo name: %w", err) + } + cqlRepoURL, err := client.ToString(result.Rows[0].Values[3]) + if err != nil { + return nil, fmt.Errorf("failed to get repo url: %w", err) + } + cqlNamespace, err := client.ToString(result.Rows[0].Values[4]) + if err != nil { + return nil, fmt.Errorf("failed to get Namespace: %w", err) + } + cqlVersion, err := client.ToString(result.Rows[0].Values[5]) + if err != nil { + return nil, fmt.Errorf("failed to get version: %w", err) + } + cqlCreateNamespace, err := client.ToBoolean(result.Rows[0].Values[6]) + if err != nil { + return nil, fmt.Errorf("failed to get Create Namespace: %w", err) + } + cqlPrivilegedNamespace, err := client.ToBoolean(result.Rows[0].Values[7]) + if err != nil { + return nil, fmt.Errorf("failed to get Privileged Namespace: %w", err) + } + cqlLaunchUiUrl, err := client.ToString(result.Rows[0].Values[8]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui url: %w", err) + } + cqlLaunchUiRedirectUrl, err := client.ToString(result.Rows[0].Values[9]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) + } + cqlCategory, err := client.ToString(result.Rows[0].Values[10]) + if err != nil { + return nil, fmt.Errorf("failed to get category: %w", err) + } + cqlIcon, err := client.ToString(result.Rows[0].Values[11]) + if err != nil { + return nil, fmt.Errorf("failed to get icon: %w", err) + } + cqlDescription, err := client.ToString(result.Rows[0].Values[12]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) + } + cqlLaunchUiValues, err := client.ToString(result.Rows[0].Values[13]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui values: %w", err) + } + cqlOverrideValues, err := client.ToString(result.Rows[0].Values[14]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } + + config := &types.AppConfig{ + Name: cqlAppName, + ChartName: cqlChartName, + RepoName: cqlRepoName, + RepoURL: cqlRepoURL, + Namespace: cqlNamespace, + Version: cqlVersion, + CreateNamespace: cqlCreateNamespace, + PrivilegedNamespace: cqlPrivilegedNamespace, + LaunchUIURL: cqlLaunchUiUrl, + LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, + Category: cqlCategory, + Icon: []byte(cqlIcon), + Description: cqlDescription, + LaunchUIValues: []byte(cqlLaunchUiValues), + OverrideValues: []byte(cqlOverrideValues), + } + + return config, nil +} + +func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { + + selectQuery := &pb.Query{ + Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values FROM %s.app_config;", + a.keyspace), + } + + response, err := a.c.Session().ExecuteQuery(selectQuery) + if err != nil { + return nil, fmt.Errorf("failed to get app config from store: %w", err) + } + + result := response.GetResultSet() + + if len(result.Rows) == 0 { + return nil, fmt.Errorf("app configs not found") + } + + var appConfigs []types.AppConfig + for _, row := range result.Rows { + cqlAppName, err := client.ToString(row.Values[0]) + if err != nil { + return nil, fmt.Errorf("failed to get app name: %w", err) + } + cqlChartName, err := client.ToString(row.Values[1]) + if err != nil { + return nil, fmt.Errorf("failed to get chart name: %w", err) + } + cqlRepoName, err := client.ToString(row.Values[2]) + if err != nil { + return nil, fmt.Errorf("failed to get repo name: %w", err) + } + cqlRepoURL, err := client.ToString(row.Values[3]) + if err != nil { + return nil, fmt.Errorf("failed to get repo url: %w", err) + } + cqlNamespace, err := client.ToString(row.Values[4]) + if err != nil { + return nil, fmt.Errorf("failed to get Namespace: %w", err) + } + cqlVersion, err := client.ToString(row.Values[5]) + if err != nil { + return nil, fmt.Errorf("failed to get version: %w", err) + } + cqlCreateNamespace, err := client.ToBoolean(row.Values[6]) + if err != nil { + return nil, fmt.Errorf("failed to get Create Namespace: %w", err) + } + cqlPrivilegedNamespace, err := client.ToBoolean(row.Values[7]) + if err != nil { + return nil, fmt.Errorf("failed to get Privileged Namespace: %w", err) + } + cqlLaunchUiUrl, err := client.ToString(row.Values[8]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui url: %w", err) + } + cqlLaunchUiRedirectUrl, err := client.ToString(row.Values[9]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) + } + cqlCategory, err := client.ToString(row.Values[10]) + if err != nil { + return nil, fmt.Errorf("failed to get category: %w", err) + } + cqlIcon, err := client.ToString(row.Values[11]) + if err != nil { + return nil, fmt.Errorf("failed to get icon: %w", err) + } + cqlDescription, err := client.ToString(row.Values[12]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) + } + cqlLaunchUiValues, err := client.ToString(row.Values[13]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui values: %w", err) + } + cqlOverrideValues, err := client.ToString(row.Values[14]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } + + appConfigs = append(appConfigs, types.AppConfig{ + Name: cqlAppName, + ChartName: cqlChartName, + RepoName: cqlRepoName, + RepoURL: cqlRepoURL, + Namespace: cqlNamespace, + Version: cqlVersion, + CreateNamespace: cqlCreateNamespace, + PrivilegedNamespace: cqlPrivilegedNamespace, + LaunchUIURL: cqlLaunchUiUrl, + LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, + Category: cqlCategory, + Icon: []byte(cqlIcon), + Description: cqlDescription, + LaunchUIValues: []byte(cqlLaunchUiValues), + OverrideValues: []byte(cqlOverrideValues), + }) + } + + return &appConfigs, nil +} diff --git a/server/pkg/store/cassandra/db.go b/server/pkg/store/cassandra/db.go index 9903cabc..00d2e1da 100644 --- a/server/pkg/store/cassandra/db.go +++ b/server/pkg/store/cassandra/db.go @@ -188,3 +188,65 @@ func (c *CassandraServerStore) DeleteCluster(orgID, clusterName string) error { c.keyspace, clusterId, orgID)) return c.c.Session().ExecuteBatch(batch) } + +func (c *CassandraServerStore) isAppExistsInStore(name, version string) bool { + + iter := c.c.Session().Query(fmt.Sprintf("Select cluster_ids FROM %s.app_config WHERE name=%s AND version =%s ;", + c.keyspace, name, version)).Iter() + + var config types.AppConfig + iter.Scan(&config) + if config.Name != "" { + return false + } + return true +} + +func (c *CassandraServerStore) AddAppToStore(config *types.StoreAppConfig) error { + + if ok := c.isAppExistsInStore(config.AppName, config.Version); ok { + return fmt.Errorf("app is already available") + } + + err := c.c.Session().Query(fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name, repo_url, namespace, version, create_namespace,privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values) VALUES (%s, %s, %s, %s, %s, %s, %t, %t, %s, %s, %s, %s, %s, %s, %s );", + c.keyspace, config.AppName, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues)).Exec() + + return err +} + +func (c *CassandraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { + + err := c.c.Session().Query(fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', version = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = %s, description = '%s', launch_ui_values = %s, override_values = %s WHERE name = '%s' AND version = '%s';", + c.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, config.AppName, config.Version)).Exec() + + return err +} +func (c *CassandraServerStore) DeleteAppFromStore(name, version string) error { + + err := c.c.Session().Query(fmt.Sprintf("DELETE FROM %s.app_config WHERE name=%s AND version=%s ;", + c.keyspace, name, version)).Exec() + + if err != nil { + return fmt.Errorf("failed to delete app config: %w", err) + } + + return nil +} + +func (c *CassandraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { + + iter := c.c.Session().Query(fmt.Sprintf("Select * FROM %s.app_config WHERE name=%s AND version=%s;", + c.keyspace, name, version)).Iter() + var config types.AppConfig + iter.Scan(&config) + return &config, nil +} + +func (c *CassandraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { + + iter := c.c.Session().Query(fmt.Sprintf("Select * FROM %s.app_config;", + c.keyspace)).Iter() + var config []types.AppConfig + iter.Scan(&config) + return &config, nil +} diff --git a/server/pkg/store/store.go b/server/pkg/store/store.go index fe477a19..7187629b 100644 --- a/server/pkg/store/store.go +++ b/server/pkg/store/store.go @@ -15,6 +15,11 @@ type ServerStore interface { AddCluster(organizationID, clusterName, endpoint string) error UpdateCluster(organizationID, clusterName, endpoint string) error DeleteCluster(organizationID, clusterName string) error + AddAppToStore(config *types.StoreAppConfig) error + UpdateAppInStore(config *types.StoreAppConfig) error + DeleteAppFromStore(name, version string) error + GetAppFromStore(name, version string) (*types.AppConfig, error) + GetAppsFromStore() (*[]types.AppConfig, error) } func NewStore(db string) (ServerStore, error) { diff --git a/server/pkg/types/type.go b/server/pkg/types/type.go index f459a70a..4b4c2536 100644 --- a/server/pkg/types/type.go +++ b/server/pkg/types/type.go @@ -1,5 +1,7 @@ package types +import "time" + const ( ClientCertChainFileName = "cert-chain.pem" ClientCertFileName = "client.crt" @@ -20,3 +22,44 @@ type ClusterDetails struct { ClusterName string Endpoint string } + +type StoreAppConfig struct { + ReleaseName string `json:"releaseName,omitempty"` + AppName string `json:"appName,omitempty"` + Version string `json:"version,omitempty"` + Category string `json:"category,omitempty"` + Description string `json:"description,omitempty"` + ChartName string `json:"chartName,omitempty"` + RepoName string `json:"repoName,omitempty"` + RepoURL string `json:"repoURL,omitempty"` + Namespace string `json:"namespace,omitempty"` + CreateNamespace bool `json:"createNamespace"` + PrivilegedNamespace bool `json:"privilegedNamespace"` + Icon []byte `json:"icon,omitempty"` + LaunchURL string `json:"launchURL,omitempty"` + LaunchRedirectURL string `json:"launchRedirectURL,omitempty"` + OverrideValues []byte `json:"overrideValues,omitempty"` + LaunchUIValues []byte `json:"launchUIValues,omitempty"` +} + +type AppConfig struct { + ID int64 `cql:"id" json:"id,omitempty"` + CreatedTime time.Time `cql:"created_time" json:"created_time,omitempty"` + LastUpdatedTime time.Time `cql:"last_updated_time" json:"last_updated_time,omitempty"` + LastUpdatedUser string `cql:"last_updated_user" json:"last_updated_user,omitempty"` + Name string `cql:"name" json:"name"` + ChartName string `cql:"chart_name" json:"chart_name"` + RepoName string `cql:"repo_name" json:"repo_name"` + RepoURL string `cql:"repo_url" json:"repo_url"` + Namespace string `cql:"namespace" json:"namespace"` + Version string `cql:"version" json:"version"` + CreateNamespace bool `cql:"create_namespace" json:"create_namespace"` + PrivilegedNamespace bool `cql:"privileged_namespace" json:"privileged_namespace"` + LaunchUIURL string `cql:"launch_ui_url" json:"launch_ui_url"` + LaunchUIRedirectURL string `cql:"launch_ui_redirect_url" json:"launch_ui_redirect_url"` + Category string `cql:"category" json:"category"` + Icon []byte `cql:"icon" json:"icon"` + Description string `cql:"description" json:"description"` + LaunchUIValues []byte `cql:"launch_ui_values" json:"launch_ui_values"` + OverrideValues []byte `cql:"override_values" json:"override_values"` +} From 990e8a957ed588db7385c4d86b54eb48922cd690 Mon Sep 17 00:00:00 2001 From: anil-intelops Date: Sat, 29 Jul 2023 19:36:54 +0530 Subject: [PATCH 02/31] minor changes --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bb4130fc..f57b810b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@

Extensible open-source framework that Integrates & Scales your DevSecOps and MLOps stacks as you need

-# Kad -Universal **Integrator** - Framework to easily integrate with other tools/platforms to use their APIs, gRPC, DB, Workflows, etc. and also to develop workflows around them. This framework development is based on Temporal and NATS. -> name -Kad is Haitian Creole word, translates to framework. +# Kad + +Universal **Integrator** - Framework to easily integrate with other tools/platforms to use their APIs, gRPC, DB, Workflows, etc. and also to develop workflows around them. This framework development is based on Temporal and NATS. + +> name -Kad is Haitian Creole word, translates to framework. From 2ebd5c53e5cdb9b88088867b61be176a76aa7ea5 Mon Sep 17 00:00:00 2001 From: anil-intelops Date: Sun, 30 Jul 2023 04:33:59 +0530 Subject: [PATCH 03/31] minor changes --- proto/server.proto | 6 +- server/pkg/api/store_apps.go | 34 ++-- server/pkg/pb/serverpb/server.pb.go | 260 +++++++++++++++------------- server/pkg/store/astra/db.go | 93 ++++++---- server/pkg/types/type.go | 70 ++++---- 5 files changed, 252 insertions(+), 211 deletions(-) diff --git a/proto/server.proto b/proto/server.proto index 4ea34746..d9e60233 100644 --- a/proto/server.proto +++ b/proto/server.proto @@ -206,12 +206,12 @@ message StoreAppConfig { string namespace = 9; bool createNamespace = 10; bool privilegedNamespace = 11; - bytes icon = 12; + string icon = 12; string launchURL = 13; string launchRedirectURL = 14; } message StoreAppValues { - bytes overrideValues = 1; - bytes launchUIValues = 2; + map overrideValues = 1; + map launchUIValues = 2; } diff --git a/server/pkg/api/store_apps.go b/server/pkg/api/store_apps.go index 53b9a9ee..59a621cf 100644 --- a/server/pkg/api/store_apps.go +++ b/server/pkg/api/store_apps.go @@ -11,13 +11,13 @@ func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppR *serverpb.AddStoreAppResponse, error) { if request.AppConfig.AppName == "" { - s.log.Errorf("failed to add app cnfig to store, %v", "App name is missing") + s.log.Errorf("failed to add app config to store, %v", "App name is missing") return &serverpb.AddStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed add app config to store, app name is missing", }, nil } else if request.AppConfig.Version == "" { - s.log.Errorf("failed to add app cnfig to store, %v", "App version is") + s.log.Errorf("failed to add app config to store, %v", "App version is missing") return &serverpb.AddStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed add app config to store, app version is missing", @@ -44,7 +44,7 @@ func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppR } if err := s.serverStore.AddAppToStore(config); err != nil { - s.log.Errorf("failed to add app cnfig to store, %v", err) + s.log.Errorf("failed to add app config to store, %v", err) return &serverpb.AddStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed add app config to store", @@ -60,16 +60,16 @@ func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppR func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateStoreAppRequest) ( *serverpb.UpdateStoreAppRsponse, error) { if request.AppConfig.AppName == "" { - s.log.Errorf("failed to update app cnfig to store, %v", "App name is missing") + s.log.Errorf("failed to update app config in store, %v", "App name is missing") return &serverpb.UpdateStoreAppRsponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed add app config to store, app name is missing", + StatusMessage: "failed to update app config in store, app name is missing", }, nil } else if request.AppConfig.Version == "" { - s.log.Errorf("failed to update app cnfig to store, %v", "App version is") + s.log.Errorf("failed to update app config in store, %v", "App version is") return &serverpb.UpdateStoreAppRsponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed add app config to store, app version is missing", + StatusMessage: "failed to update app config in store, app version is missing", }, nil } @@ -93,10 +93,10 @@ func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateSto } if err := s.serverStore.UpdateAppInStore(config); err != nil { - s.log.Errorf("failed to update app cnfig in store, %v", err) + s.log.Errorf("failed to update app config in store, %v", err) return &serverpb.UpdateStoreAppRsponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed update app config to store", + StatusMessage: "failed to update app config in store", }, nil } @@ -109,7 +109,7 @@ func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateSto func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteStoreAppRequest) ( *serverpb.DeleteStoreAppResponse, error) { if request.AppName == "" { - s.log.Errorf("failed to delete app cnfig from store, %v", "App name is missing") + s.log.Errorf("failed to delete app config from store, %v", "App name is missing") return &serverpb.DeleteStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed to delete app config from store, app name is missing", @@ -123,10 +123,10 @@ func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteSto } if err := s.serverStore.DeleteAppFromStore(request.AppName, request.Version); err != nil { - s.log.Errorf("failed to delete app cnfig from store, %v", err) + s.log.Errorf("failed to delete app config from store, %v", err) return &serverpb.DeleteStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed delete app config from store", + StatusMessage: "failed to delete app config from store", }, nil } @@ -155,10 +155,10 @@ func (s *Server) GetStoreApp(ctx context.Context, request *serverpb.GetStoreAppR config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) if err != nil { - s.log.Errorf("failed to get app cnfig from store, %v", err) + s.log.Errorf("failed to get app config from store, %v", err) return &serverpb.GetStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed get app config from store", + StatusMessage: "failed to get app config from store", }, nil } @@ -191,10 +191,10 @@ func (s *Server) GetStoreApps(ctx context.Context, request *serverpb.GetStoreApp configs, err := s.serverStore.GetAppsFromStore() if err != nil { - s.log.Errorf("failed to get app cnfigs from store, %v", err) + s.log.Errorf("failed to get app config's from store, %v", err) return &serverpb.GetStoreAppsResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed get app configs from store", + StatusMessage: "failed to get app config's from store", }, nil } @@ -219,7 +219,7 @@ func (s *Server) GetStoreApps(ctx context.Context, request *serverpb.GetStoreApp return &serverpb.GetStoreAppsResponse{ Status: serverpb.StatusCode_OK, - StatusMessage: "app configs are sucessfuly fetched from store", + StatusMessage: "app config's are sucessfuly fetched from store", AppConfigs: appConfigs, }, nil } diff --git a/server/pkg/pb/serverpb/server.pb.go b/server/pkg/pb/serverpb/server.pb.go index 263e33bb..5920a9c3 100644 --- a/server/pkg/pb/serverpb/server.pb.go +++ b/server/pkg/pb/serverpb/server.pb.go @@ -1826,7 +1826,7 @@ type StoreAppConfig struct { Namespace string `protobuf:"bytes,9,opt,name=namespace,proto3" json:"namespace,omitempty"` CreateNamespace bool `protobuf:"varint,10,opt,name=createNamespace,proto3" json:"createNamespace,omitempty"` PrivilegedNamespace bool `protobuf:"varint,11,opt,name=privilegedNamespace,proto3" json:"privilegedNamespace,omitempty"` - Icon []byte `protobuf:"bytes,12,opt,name=icon,proto3" json:"icon,omitempty"` + Icon string `protobuf:"bytes,12,opt,name=icon,proto3" json:"icon,omitempty"` LaunchURL string `protobuf:"bytes,13,opt,name=launchURL,proto3" json:"launchURL,omitempty"` LaunchRedirectURL string `protobuf:"bytes,14,opt,name=launchRedirectURL,proto3" json:"launchRedirectURL,omitempty"` } @@ -1940,11 +1940,11 @@ func (x *StoreAppConfig) GetPrivilegedNamespace() bool { return false } -func (x *StoreAppConfig) GetIcon() []byte { +func (x *StoreAppConfig) GetIcon() string { if x != nil { return x.Icon } - return nil + return "" } func (x *StoreAppConfig) GetLaunchURL() string { @@ -1966,8 +1966,8 @@ type StoreAppValues struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OverrideValues []byte `protobuf:"bytes,1,opt,name=overrideValues,proto3" json:"overrideValues,omitempty"` - LaunchUIValues []byte `protobuf:"bytes,2,opt,name=launchUIValues,proto3" json:"launchUIValues,omitempty"` + OverrideValues map[string]string `protobuf:"bytes,1,rep,name=overrideValues,proto3" json:"overrideValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + LaunchUIValues map[string]string `protobuf:"bytes,2,rep,name=launchUIValues,proto3" json:"launchUIValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *StoreAppValues) Reset() { @@ -2002,14 +2002,14 @@ func (*StoreAppValues) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{29} } -func (x *StoreAppValues) GetOverrideValues() []byte { +func (x *StoreAppValues) GetOverrideValues() map[string]string { if x != nil { return x.OverrideValues } return nil } -func (x *StoreAppValues) GetLaunchUIValues() []byte { +func (x *StoreAppValues) GetLaunchUIValues() map[string]string { if x != nil { return x.LaunchUIValues } @@ -2292,96 +2292,110 @@ var file_server_proto_rawDesc = []byte{ 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, + 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x60, 0x0a, 0x0e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, - 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x4e, - 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, - 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, - 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xf5, - 0x08, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x16, 0x4e, 0x65, 0x77, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, - 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, + 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0xc2, 0x02, 0x0a, + 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, + 0x54, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, + 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x4f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 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, 0x1a, 0x41, + 0x0a, 0x13, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 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, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, + 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, + 0x03, 0x32, 0xf5, 0x08, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x16, + 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x76, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2b, 0x2e, 0x73, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x79, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2b, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, - 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x55, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0b, 0x5a, 0x09, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x12, 0x1e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x4c, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, + 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, + 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0b, 0x5a, 0x09, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2397,7 +2411,7 @@ func file_server_proto_rawDescGZIP() []byte { } var file_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_server_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: serverpb.StatusCode (*NewClusterRegistrationRequest)(nil), // 1: serverpb.NewClusterRegistrationRequest @@ -2430,6 +2444,8 @@ var file_server_proto_goTypes = []interface{}{ (*GetStoreAppsResponse)(nil), // 28: serverpb.GetStoreAppsResponse (*StoreAppConfig)(nil), // 29: serverpb.StoreAppConfig (*StoreAppValues)(nil), // 30: serverpb.StoreAppValues + nil, // 31: serverpb.StoreAppValues.OverrideValuesEntry + nil, // 32: serverpb.StoreAppValues.LaunchUIValuesEntry } var file_server_proto_depIdxs = []int32{ 0, // 0: serverpb.NewClusterRegistrationResponse.status:type_name -> serverpb.StatusCode @@ -2456,35 +2472,37 @@ var file_server_proto_depIdxs = []int32{ 29, // 21: serverpb.GetStoreAppResponse.appConfig:type_name -> serverpb.StoreAppConfig 0, // 22: serverpb.GetStoreAppsResponse.status:type_name -> serverpb.StatusCode 29, // 23: serverpb.GetStoreAppsResponse.appConfigs:type_name -> serverpb.StoreAppConfig - 1, // 24: serverpb.Server.NewClusterRegistration:input_type -> serverpb.NewClusterRegistrationRequest - 3, // 25: serverpb.Server.UpdateClusterRegistration:input_type -> serverpb.UpdateClusterRegistrationRequest - 5, // 26: serverpb.Server.DeleteClusterRegistration:input_type -> serverpb.DeleteClusterRegistrationRequest - 7, // 27: serverpb.Server.GetClusters:input_type -> serverpb.GetClustersRequest - 9, // 28: serverpb.Server.GetClusterApps:input_type -> serverpb.GetClusterAppsRequest - 13, // 29: serverpb.Server.GetClusterAppLaunchConfigs:input_type -> serverpb.GetClusterAppLaunchConfigsRequest - 11, // 30: serverpb.Server.GetClusterApp:input_type -> serverpb.GetClusterAppRequest - 19, // 31: serverpb.Server.AddStoreApp:input_type -> serverpb.AddStoreAppRequest - 21, // 32: serverpb.Server.UpdateStoreApp:input_type -> serverpb.UpdateStoreAppRequest - 23, // 33: serverpb.Server.DeleteStoreApp:input_type -> serverpb.DeleteStoreAppRequest - 25, // 34: serverpb.Server.GetStoreApp:input_type -> serverpb.GetStoreAppRequest - 27, // 35: serverpb.Server.GetStoreApps:input_type -> serverpb.GetStoreAppsRequest - 2, // 36: serverpb.Server.NewClusterRegistration:output_type -> serverpb.NewClusterRegistrationResponse - 4, // 37: serverpb.Server.UpdateClusterRegistration:output_type -> serverpb.UpdateClusterRegistrationResponse - 6, // 38: serverpb.Server.DeleteClusterRegistration:output_type -> serverpb.DeleteClusterRegistrationResponse - 8, // 39: serverpb.Server.GetClusters:output_type -> serverpb.GetClustersResponse - 10, // 40: serverpb.Server.GetClusterApps:output_type -> serverpb.GetClusterAppsResponse - 14, // 41: serverpb.Server.GetClusterAppLaunchConfigs:output_type -> serverpb.GetClusterAppLaunchConfigsResponse - 12, // 42: serverpb.Server.GetClusterApp:output_type -> serverpb.GetClusterAppResponse - 20, // 43: serverpb.Server.AddStoreApp:output_type -> serverpb.AddStoreAppResponse - 22, // 44: serverpb.Server.UpdateStoreApp:output_type -> serverpb.UpdateStoreAppRsponse - 24, // 45: serverpb.Server.DeleteStoreApp:output_type -> serverpb.DeleteStoreAppResponse - 26, // 46: serverpb.Server.GetStoreApp:output_type -> serverpb.GetStoreAppResponse - 28, // 47: serverpb.Server.GetStoreApps:output_type -> serverpb.GetStoreAppsResponse - 36, // [36:48] is the sub-list for method output_type - 24, // [24:36] is the sub-list for method input_type - 24, // [24:24] is the sub-list for extension type_name - 24, // [24:24] is the sub-list for extension extendee - 0, // [0:24] is the sub-list for field type_name + 31, // 24: serverpb.StoreAppValues.overrideValues:type_name -> serverpb.StoreAppValues.OverrideValuesEntry + 32, // 25: serverpb.StoreAppValues.launchUIValues:type_name -> serverpb.StoreAppValues.LaunchUIValuesEntry + 1, // 26: serverpb.Server.NewClusterRegistration:input_type -> serverpb.NewClusterRegistrationRequest + 3, // 27: serverpb.Server.UpdateClusterRegistration:input_type -> serverpb.UpdateClusterRegistrationRequest + 5, // 28: serverpb.Server.DeleteClusterRegistration:input_type -> serverpb.DeleteClusterRegistrationRequest + 7, // 29: serverpb.Server.GetClusters:input_type -> serverpb.GetClustersRequest + 9, // 30: serverpb.Server.GetClusterApps:input_type -> serverpb.GetClusterAppsRequest + 13, // 31: serverpb.Server.GetClusterAppLaunchConfigs:input_type -> serverpb.GetClusterAppLaunchConfigsRequest + 11, // 32: serverpb.Server.GetClusterApp:input_type -> serverpb.GetClusterAppRequest + 19, // 33: serverpb.Server.AddStoreApp:input_type -> serverpb.AddStoreAppRequest + 21, // 34: serverpb.Server.UpdateStoreApp:input_type -> serverpb.UpdateStoreAppRequest + 23, // 35: serverpb.Server.DeleteStoreApp:input_type -> serverpb.DeleteStoreAppRequest + 25, // 36: serverpb.Server.GetStoreApp:input_type -> serverpb.GetStoreAppRequest + 27, // 37: serverpb.Server.GetStoreApps:input_type -> serverpb.GetStoreAppsRequest + 2, // 38: serverpb.Server.NewClusterRegistration:output_type -> serverpb.NewClusterRegistrationResponse + 4, // 39: serverpb.Server.UpdateClusterRegistration:output_type -> serverpb.UpdateClusterRegistrationResponse + 6, // 40: serverpb.Server.DeleteClusterRegistration:output_type -> serverpb.DeleteClusterRegistrationResponse + 8, // 41: serverpb.Server.GetClusters:output_type -> serverpb.GetClustersResponse + 10, // 42: serverpb.Server.GetClusterApps:output_type -> serverpb.GetClusterAppsResponse + 14, // 43: serverpb.Server.GetClusterAppLaunchConfigs:output_type -> serverpb.GetClusterAppLaunchConfigsResponse + 12, // 44: serverpb.Server.GetClusterApp:output_type -> serverpb.GetClusterAppResponse + 20, // 45: serverpb.Server.AddStoreApp:output_type -> serverpb.AddStoreAppResponse + 22, // 46: serverpb.Server.UpdateStoreApp:output_type -> serverpb.UpdateStoreAppRsponse + 24, // 47: serverpb.Server.DeleteStoreApp:output_type -> serverpb.DeleteStoreAppResponse + 26, // 48: serverpb.Server.GetStoreApp:output_type -> serverpb.GetStoreAppResponse + 28, // 49: serverpb.Server.GetStoreApps:output_type -> serverpb.GetStoreAppsResponse + 38, // [38:50] is the sub-list for method output_type + 26, // [26:38] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_server_proto_init() } @@ -2860,7 +2878,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 1, - NumMessages: 30, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/server/pkg/store/astra/db.go b/server/pkg/store/astra/db.go index 4d4d06c2..9b182b5e 100644 --- a/server/pkg/store/astra/db.go +++ b/server/pkg/store/astra/db.go @@ -1,6 +1,7 @@ package astra import ( + "encoding/json" "fmt" "strings" @@ -311,7 +312,7 @@ func (a *AstraServerStore) getClusterID(orgID, clusterName string) (string, erro func (a *AstraServerStore) isAppExistsInStore(name, version string) (bool, error) { selectClusterQuery := &pb.Query{ - Cql: fmt.Sprintf("Select cluster_ids FROM %s.app_config WHERE app_name=%s AND version =%s ;", + Cql: fmt.Sprintf("Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';", a.keyspace, name, version), } @@ -338,9 +339,20 @@ func (a *AstraServerStore) AddAppToStore(config *types.StoreAppConfig) error { return fmt.Errorf("app is already available") } + jsonLaunchUIValues, err := json.Marshal(config.LaunchUIValues) + if err != nil { + return err + } + launchUIValues := strings.ReplaceAll(string(jsonLaunchUIValues), `"`, `'`) + jsonOverrideValues, err := json.Marshal(config.OverrideValues) + if err != nil { + return err + } + overrideValues := strings.ReplaceAll(string(jsonOverrideValues), `"`, `'`) + insertQuery := &pb.Query{ - Cql: fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name, repo_url, namespace, version, create_namespace,privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values) VALUES (%s, %s, %s, %s, %s, %s, %t, %t, %s, %s, %s, %s, %s, %s, %s );", - a.keyspace, config.AppName, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues), + Cql: fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name, repo_url, namespace, version, create_namespace,privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', %v, %v );", + a.keyspace, config.AppName, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, launchUIValues, overrideValues), } _, err = a.c.Session().ExecuteQuery(insertQuery) @@ -353,14 +365,25 @@ func (a *AstraServerStore) AddAppToStore(config *types.StoreAppConfig) error { func (a *AstraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { + jsonLaunchUIValues, err := json.Marshal(config.LaunchUIValues) + if err != nil { + return err + } + launchUIValues := strings.ReplaceAll(string(jsonLaunchUIValues), `"`, `'`) + jsonOverrideValues, err := json.Marshal(config.OverrideValues) + if err != nil { + return err + } + overrideValues := strings.ReplaceAll(string(jsonOverrideValues), `"`, `'`) + updateQuery := &pb.Query{ - Cql: fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', version = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = %s, description = '%s', launch_ui_values = %s, override_values = %s WHERE name = '%s' AND version = '%s';", - a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, config.AppName, config.Version), + Cql: fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = %v, override_values = %v WHERE name = '%s' AND version = '%s';", + a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, launchUIValues, overrideValues, config.AppName, config.Version), } - _, err := a.c.Session().ExecuteQuery(updateQuery) + _, err = a.c.Session().ExecuteQuery(updateQuery) if err != nil { - return fmt.Errorf("failed to update app config: %w", err) + return fmt.Errorf("failed to initialise db: %w", err) } return nil @@ -370,13 +393,13 @@ func (a *AstraServerStore) DeleteAppFromStore(name, version string) error { deleteQuery := &pb.Query{ Cql: fmt.Sprintf( - "DELETE FROM %s.app_config WHERE name=%s AND version=%s ;", + "DELETE FROM %s.app_config WHERE name='%s' AND version='%s';", a.keyspace, name, version), } _, err := a.c.Session().ExecuteQuery(deleteQuery) if err != nil { - return fmt.Errorf("failed to delete app config: %w", err) + return fmt.Errorf("failed to initialise db: %w", err) } return nil @@ -385,13 +408,13 @@ func (a *AstraServerStore) DeleteAppFromStore(name, version string) error { func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { selectQuery := &pb.Query{ - Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values FROM %s.app_config WHERE name=%s AND version=%s;", + Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values FROM %s.app_config WHERE name='%s' AND version='%s';", a.keyspace, name, version), } response, err := a.c.Session().ExecuteQuery(selectQuery) if err != nil { - return nil, fmt.Errorf("failed to get app config from store: %w", err) + return nil, fmt.Errorf("failed to initialise db: %w", err) } result := response.GetResultSet() @@ -452,14 +475,14 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf if err != nil { return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) } - cqlLaunchUiValues, err := client.ToString(result.Rows[0].Values[13]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui values: %w", err) - } - cqlOverrideValues, err := client.ToString(result.Rows[0].Values[14]) - if err != nil { - return nil, fmt.Errorf("failed to get override values: %w", err) - } + // cqlLaunchUiValues, err := client.ToMap(result.Rows[0].Values[13],&pb.TypeSpec{}) + // if err != nil { + // return nil, fmt.Errorf("failed to get launch ui values: %w", err) + // } + // cqlOverrideValues, err := client.ToMap(result.Rows[0].Values[14], &pb.TypeSpec{}) + // if err != nil { + // return nil, fmt.Errorf("failed to get override values: %w", err) + // } config := &types.AppConfig{ Name: cqlAppName, @@ -473,10 +496,10 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf LaunchUIURL: cqlLaunchUiUrl, LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, Category: cqlCategory, - Icon: []byte(cqlIcon), + Icon: cqlIcon, Description: cqlDescription, - LaunchUIValues: []byte(cqlLaunchUiValues), - OverrideValues: []byte(cqlOverrideValues), + // LaunchUIValues: cqlLaunchUiValues.(map[string]string), + // OverrideValues: cqlOverrideValues.(map[string]string), } return config, nil @@ -491,13 +514,13 @@ func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { response, err := a.c.Session().ExecuteQuery(selectQuery) if err != nil { - return nil, fmt.Errorf("failed to get app config from store: %w", err) + return nil, fmt.Errorf("failed to initialise db: %w", err) } result := response.GetResultSet() if len(result.Rows) == 0 { - return nil, fmt.Errorf("app configs not found") + return nil, fmt.Errorf("app config's not found") } var appConfigs []types.AppConfig @@ -554,14 +577,14 @@ func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { if err != nil { return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) } - cqlLaunchUiValues, err := client.ToString(row.Values[13]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui values: %w", err) - } - cqlOverrideValues, err := client.ToString(row.Values[14]) - if err != nil { - return nil, fmt.Errorf("failed to get override values: %w", err) - } + // cqlLaunchUiValues, err := client.ToMap(row.Values[13],&pb.TypeSpec{}) + // if err != nil { + // return nil, fmt.Errorf("failed to get launch ui values: %w", err) + // } + // cqlOverrideValues, err := client.ToMap(row.Values[14],&pb.TypeSpec{}) + // if err != nil { + // return nil, fmt.Errorf("failed to get override values: %w", err) + // } appConfigs = append(appConfigs, types.AppConfig{ Name: cqlAppName, @@ -575,10 +598,10 @@ func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { LaunchUIURL: cqlLaunchUiUrl, LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, Category: cqlCategory, - Icon: []byte(cqlIcon), + Icon: cqlIcon, Description: cqlDescription, - LaunchUIValues: []byte(cqlLaunchUiValues), - OverrideValues: []byte(cqlOverrideValues), + // LaunchUIValues: cqlLaunchUiValues.(map[string]string), + // OverrideValues: cqlOverrideValues.(map[string]string), }) } diff --git a/server/pkg/types/type.go b/server/pkg/types/type.go index 4b4c2536..b2f9cd4d 100644 --- a/server/pkg/types/type.go +++ b/server/pkg/types/type.go @@ -24,42 +24,42 @@ type ClusterDetails struct { } type StoreAppConfig struct { - ReleaseName string `json:"releaseName,omitempty"` - AppName string `json:"appName,omitempty"` - Version string `json:"version,omitempty"` - Category string `json:"category,omitempty"` - Description string `json:"description,omitempty"` - ChartName string `json:"chartName,omitempty"` - RepoName string `json:"repoName,omitempty"` - RepoURL string `json:"repoURL,omitempty"` - Namespace string `json:"namespace,omitempty"` - CreateNamespace bool `json:"createNamespace"` - PrivilegedNamespace bool `json:"privilegedNamespace"` - Icon []byte `json:"icon,omitempty"` - LaunchURL string `json:"launchURL,omitempty"` - LaunchRedirectURL string `json:"launchRedirectURL,omitempty"` - OverrideValues []byte `json:"overrideValues,omitempty"` - LaunchUIValues []byte `json:"launchUIValues,omitempty"` + ReleaseName string `json:"releaseName,omitempty"` + AppName string `json:"appName,omitempty"` + Version string `json:"version,omitempty"` + Category string `json:"category,omitempty"` + Description string `json:"description,omitempty"` + ChartName string `json:"chartName,omitempty"` + RepoName string `json:"repoName,omitempty"` + RepoURL string `json:"repoURL,omitempty"` + Namespace string `json:"namespace,omitempty"` + CreateNamespace bool `json:"createNamespace"` + PrivilegedNamespace bool `json:"privilegedNamespace"` + Icon string `json:"icon,omitempty"` + LaunchURL string `json:"launchURL,omitempty"` + LaunchRedirectURL string `json:"launchRedirectURL,omitempty"` + OverrideValues map[string]string `json:"overrideValues,omitempty"` + LaunchUIValues map[string]string `json:"launchUIValues,omitempty"` } type AppConfig struct { - ID int64 `cql:"id" json:"id,omitempty"` - CreatedTime time.Time `cql:"created_time" json:"created_time,omitempty"` - LastUpdatedTime time.Time `cql:"last_updated_time" json:"last_updated_time,omitempty"` - LastUpdatedUser string `cql:"last_updated_user" json:"last_updated_user,omitempty"` - Name string `cql:"name" json:"name"` - ChartName string `cql:"chart_name" json:"chart_name"` - RepoName string `cql:"repo_name" json:"repo_name"` - RepoURL string `cql:"repo_url" json:"repo_url"` - Namespace string `cql:"namespace" json:"namespace"` - Version string `cql:"version" json:"version"` - CreateNamespace bool `cql:"create_namespace" json:"create_namespace"` - PrivilegedNamespace bool `cql:"privileged_namespace" json:"privileged_namespace"` - LaunchUIURL string `cql:"launch_ui_url" json:"launch_ui_url"` - LaunchUIRedirectURL string `cql:"launch_ui_redirect_url" json:"launch_ui_redirect_url"` - Category string `cql:"category" json:"category"` - Icon []byte `cql:"icon" json:"icon"` - Description string `cql:"description" json:"description"` - LaunchUIValues []byte `cql:"launch_ui_values" json:"launch_ui_values"` - OverrideValues []byte `cql:"override_values" json:"override_values"` + ID int64 `cql:"id" json:"id,omitempty"` + CreatedTime time.Time `cql:"created_time" json:"created_time,omitempty"` + LastUpdatedTime time.Time `cql:"last_updated_time" json:"last_updated_time,omitempty"` + LastUpdatedUser string `cql:"last_updated_user" json:"last_updated_user,omitempty"` + Name string `cql:"name" json:"name"` + ChartName string `cql:"chart_name" json:"chart_name"` + RepoName string `cql:"repo_name" json:"repo_name"` + RepoURL string `cql:"repo_url" json:"repo_url"` + Namespace string `cql:"namespace" json:"namespace"` + Version string `cql:"version" json:"version"` + CreateNamespace bool `cql:"create_namespace" json:"create_namespace"` + PrivilegedNamespace bool `cql:"privileged_namespace" json:"privileged_namespace"` + LaunchUIURL string `cql:"launch_ui_url" json:"launch_ui_url"` + LaunchUIRedirectURL string `cql:"launch_ui_redirect_url" json:"launch_ui_redirect_url"` + Category string `cql:"category" json:"category"` + Icon string `cql:"icon" json:"icon"` + Description string `cql:"description" json:"description"` + LaunchUIValues map[string]string `cql:"launch_ui_values" json:"launch_ui_values"` + OverrideValues map[string]string `cql:"override_values" json:"override_values"` } From 53f2e9fd7b7357b8e74df64ed6dbff80fcbb71d0 Mon Sep 17 00:00:00 2001 From: Chandu Paladugu <59978378+devopstoday11@users.noreply.github.com> Date: Sun, 30 Jul 2023 04:28:48 -0500 Subject: [PATCH 04/31] Create SECURITY.md --- SECURITY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..d5157c5c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,12 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| 1.x.x | :white_check_mark: | + + +## Reporting a Vulnerability + +Please report security issues using our [Security Form](https://intelops.ai/opensource-security-reporting-form/) From 161c0565807d969cdc8a1396730342156f7e138e Mon Sep 17 00:00:00 2001 From: anil-intelops Date: Mon, 31 Jul 2023 02:15:58 +0530 Subject: [PATCH 05/31] enhancement --- proto/server.proto | 4 +- server/pkg/api/store_apps.go | 2 + server/pkg/pb/serverpb/server.pb.go | 256 +++++++++++++--------------- server/pkg/store/astra/db.go | 91 +++++----- server/pkg/store/astra/type.go | 1 + server/pkg/store/cassandra/db.go | 23 ++- server/pkg/store/cassandra/type.go | 1 + server/pkg/types/type.go | 71 ++++---- 8 files changed, 217 insertions(+), 232 deletions(-) diff --git a/proto/server.proto b/proto/server.proto index d9e60233..ae346ee8 100644 --- a/proto/server.proto +++ b/proto/server.proto @@ -212,6 +212,6 @@ message StoreAppConfig { } message StoreAppValues { - map overrideValues = 1; - map launchUIValues = 2; + string overrideValues = 1; + string launchUIValues = 2; } diff --git a/server/pkg/api/store_apps.go b/server/pkg/api/store_apps.go index 59a621cf..a6a2c0e7 100644 --- a/server/pkg/api/store_apps.go +++ b/server/pkg/api/store_apps.go @@ -176,6 +176,7 @@ func (s *Server) GetStoreApp(ctx context.Context, request *serverpb.GetStoreAppR Icon: config.Icon, LaunchURL: config.LaunchUIURL, LaunchRedirectURL: config.LaunchUIRedirectURL, + ReleaseName: config.ReleaseName, } return &serverpb.GetStoreAppResponse{ @@ -214,6 +215,7 @@ func (s *Server) GetStoreApps(ctx context.Context, request *serverpb.GetStoreApp Icon: config.Icon, LaunchURL: config.LaunchUIURL, LaunchRedirectURL: config.LaunchUIRedirectURL, + ReleaseName: config.ReleaseName, }) } diff --git a/server/pkg/pb/serverpb/server.pb.go b/server/pkg/pb/serverpb/server.pb.go index 5920a9c3..9986e2fe 100644 --- a/server/pkg/pb/serverpb/server.pb.go +++ b/server/pkg/pb/serverpb/server.pb.go @@ -1966,8 +1966,8 @@ type StoreAppValues struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OverrideValues map[string]string `protobuf:"bytes,1,rep,name=overrideValues,proto3" json:"overrideValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - LaunchUIValues map[string]string `protobuf:"bytes,2,rep,name=launchUIValues,proto3" json:"launchUIValues,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + OverrideValues string `protobuf:"bytes,1,opt,name=overrideValues,proto3" json:"overrideValues,omitempty"` + LaunchUIValues string `protobuf:"bytes,2,opt,name=launchUIValues,proto3" json:"launchUIValues,omitempty"` } func (x *StoreAppValues) Reset() { @@ -2002,18 +2002,18 @@ func (*StoreAppValues) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{29} } -func (x *StoreAppValues) GetOverrideValues() map[string]string { +func (x *StoreAppValues) GetOverrideValues() string { if x != nil { return x.OverrideValues } - return nil + return "" } -func (x *StoreAppValues) GetLaunchUIValues() map[string]string { +func (x *StoreAppValues) GetLaunchUIValues() string { if x != nil { return x.LaunchUIValues } - return nil + return "" } var File_server_proto protoreflect.FileDescriptor @@ -2297,105 +2297,91 @@ var file_server_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0xc2, 0x02, 0x0a, - 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, - 0x54, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, - 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x4f, - 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 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, 0x1a, 0x41, - 0x0a, 0x13, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 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, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, - 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, - 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, - 0x03, 0x32, 0xf5, 0x08, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x16, - 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x60, 0x0a, 0x0e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x4e, + 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, + 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, + 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xf5, + 0x08, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x16, 0x4e, 0x65, 0x77, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, + 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x79, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2b, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x76, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x12, 0x1e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x4c, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, - 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, - 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0b, 0x5a, 0x09, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, + 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x55, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, + 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0b, 0x5a, 0x09, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2411,7 +2397,7 @@ func file_server_proto_rawDescGZIP() []byte { } var file_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_server_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: serverpb.StatusCode (*NewClusterRegistrationRequest)(nil), // 1: serverpb.NewClusterRegistrationRequest @@ -2444,8 +2430,6 @@ var file_server_proto_goTypes = []interface{}{ (*GetStoreAppsResponse)(nil), // 28: serverpb.GetStoreAppsResponse (*StoreAppConfig)(nil), // 29: serverpb.StoreAppConfig (*StoreAppValues)(nil), // 30: serverpb.StoreAppValues - nil, // 31: serverpb.StoreAppValues.OverrideValuesEntry - nil, // 32: serverpb.StoreAppValues.LaunchUIValuesEntry } var file_server_proto_depIdxs = []int32{ 0, // 0: serverpb.NewClusterRegistrationResponse.status:type_name -> serverpb.StatusCode @@ -2472,37 +2456,35 @@ var file_server_proto_depIdxs = []int32{ 29, // 21: serverpb.GetStoreAppResponse.appConfig:type_name -> serverpb.StoreAppConfig 0, // 22: serverpb.GetStoreAppsResponse.status:type_name -> serverpb.StatusCode 29, // 23: serverpb.GetStoreAppsResponse.appConfigs:type_name -> serverpb.StoreAppConfig - 31, // 24: serverpb.StoreAppValues.overrideValues:type_name -> serverpb.StoreAppValues.OverrideValuesEntry - 32, // 25: serverpb.StoreAppValues.launchUIValues:type_name -> serverpb.StoreAppValues.LaunchUIValuesEntry - 1, // 26: serverpb.Server.NewClusterRegistration:input_type -> serverpb.NewClusterRegistrationRequest - 3, // 27: serverpb.Server.UpdateClusterRegistration:input_type -> serverpb.UpdateClusterRegistrationRequest - 5, // 28: serverpb.Server.DeleteClusterRegistration:input_type -> serverpb.DeleteClusterRegistrationRequest - 7, // 29: serverpb.Server.GetClusters:input_type -> serverpb.GetClustersRequest - 9, // 30: serverpb.Server.GetClusterApps:input_type -> serverpb.GetClusterAppsRequest - 13, // 31: serverpb.Server.GetClusterAppLaunchConfigs:input_type -> serverpb.GetClusterAppLaunchConfigsRequest - 11, // 32: serverpb.Server.GetClusterApp:input_type -> serverpb.GetClusterAppRequest - 19, // 33: serverpb.Server.AddStoreApp:input_type -> serverpb.AddStoreAppRequest - 21, // 34: serverpb.Server.UpdateStoreApp:input_type -> serverpb.UpdateStoreAppRequest - 23, // 35: serverpb.Server.DeleteStoreApp:input_type -> serverpb.DeleteStoreAppRequest - 25, // 36: serverpb.Server.GetStoreApp:input_type -> serverpb.GetStoreAppRequest - 27, // 37: serverpb.Server.GetStoreApps:input_type -> serverpb.GetStoreAppsRequest - 2, // 38: serverpb.Server.NewClusterRegistration:output_type -> serverpb.NewClusterRegistrationResponse - 4, // 39: serverpb.Server.UpdateClusterRegistration:output_type -> serverpb.UpdateClusterRegistrationResponse - 6, // 40: serverpb.Server.DeleteClusterRegistration:output_type -> serverpb.DeleteClusterRegistrationResponse - 8, // 41: serverpb.Server.GetClusters:output_type -> serverpb.GetClustersResponse - 10, // 42: serverpb.Server.GetClusterApps:output_type -> serverpb.GetClusterAppsResponse - 14, // 43: serverpb.Server.GetClusterAppLaunchConfigs:output_type -> serverpb.GetClusterAppLaunchConfigsResponse - 12, // 44: serverpb.Server.GetClusterApp:output_type -> serverpb.GetClusterAppResponse - 20, // 45: serverpb.Server.AddStoreApp:output_type -> serverpb.AddStoreAppResponse - 22, // 46: serverpb.Server.UpdateStoreApp:output_type -> serverpb.UpdateStoreAppRsponse - 24, // 47: serverpb.Server.DeleteStoreApp:output_type -> serverpb.DeleteStoreAppResponse - 26, // 48: serverpb.Server.GetStoreApp:output_type -> serverpb.GetStoreAppResponse - 28, // 49: serverpb.Server.GetStoreApps:output_type -> serverpb.GetStoreAppsResponse - 38, // [38:50] is the sub-list for method output_type - 26, // [26:38] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 1, // 24: serverpb.Server.NewClusterRegistration:input_type -> serverpb.NewClusterRegistrationRequest + 3, // 25: serverpb.Server.UpdateClusterRegistration:input_type -> serverpb.UpdateClusterRegistrationRequest + 5, // 26: serverpb.Server.DeleteClusterRegistration:input_type -> serverpb.DeleteClusterRegistrationRequest + 7, // 27: serverpb.Server.GetClusters:input_type -> serverpb.GetClustersRequest + 9, // 28: serverpb.Server.GetClusterApps:input_type -> serverpb.GetClusterAppsRequest + 13, // 29: serverpb.Server.GetClusterAppLaunchConfigs:input_type -> serverpb.GetClusterAppLaunchConfigsRequest + 11, // 30: serverpb.Server.GetClusterApp:input_type -> serverpb.GetClusterAppRequest + 19, // 31: serverpb.Server.AddStoreApp:input_type -> serverpb.AddStoreAppRequest + 21, // 32: serverpb.Server.UpdateStoreApp:input_type -> serverpb.UpdateStoreAppRequest + 23, // 33: serverpb.Server.DeleteStoreApp:input_type -> serverpb.DeleteStoreAppRequest + 25, // 34: serverpb.Server.GetStoreApp:input_type -> serverpb.GetStoreAppRequest + 27, // 35: serverpb.Server.GetStoreApps:input_type -> serverpb.GetStoreAppsRequest + 2, // 36: serverpb.Server.NewClusterRegistration:output_type -> serverpb.NewClusterRegistrationResponse + 4, // 37: serverpb.Server.UpdateClusterRegistration:output_type -> serverpb.UpdateClusterRegistrationResponse + 6, // 38: serverpb.Server.DeleteClusterRegistration:output_type -> serverpb.DeleteClusterRegistrationResponse + 8, // 39: serverpb.Server.GetClusters:output_type -> serverpb.GetClustersResponse + 10, // 40: serverpb.Server.GetClusterApps:output_type -> serverpb.GetClusterAppsResponse + 14, // 41: serverpb.Server.GetClusterAppLaunchConfigs:output_type -> serverpb.GetClusterAppLaunchConfigsResponse + 12, // 42: serverpb.Server.GetClusterApp:output_type -> serverpb.GetClusterAppResponse + 20, // 43: serverpb.Server.AddStoreApp:output_type -> serverpb.AddStoreAppResponse + 22, // 44: serverpb.Server.UpdateStoreApp:output_type -> serverpb.UpdateStoreAppRsponse + 24, // 45: serverpb.Server.DeleteStoreApp:output_type -> serverpb.DeleteStoreAppResponse + 26, // 46: serverpb.Server.GetStoreApp:output_type -> serverpb.GetStoreAppResponse + 28, // 47: serverpb.Server.GetStoreApps:output_type -> serverpb.GetStoreAppsResponse + 36, // [36:48] is the sub-list for method output_type + 24, // [24:36] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_server_proto_init() } @@ -2878,7 +2860,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 1, - NumMessages: 32, + NumMessages: 30, NumExtensions: 0, NumServices: 1, }, diff --git a/server/pkg/store/astra/db.go b/server/pkg/store/astra/db.go index 9b182b5e..4e7c079a 100644 --- a/server/pkg/store/astra/db.go +++ b/server/pkg/store/astra/db.go @@ -1,9 +1,9 @@ package astra import ( - "encoding/json" "fmt" "strings" + "time" astraclient "github.com/kube-tarian/kad/server/pkg/astra-client" "github.com/kube-tarian/kad/server/pkg/types" @@ -26,6 +26,7 @@ func NewStore() (*AstraServerStore, error) { return nil, fmt.Errorf("failed to connect to astra db, %w", err) } a.keyspace = a.c.Keyspace() + a.keyspace = "capten_server" return a, nil } @@ -339,20 +340,9 @@ func (a *AstraServerStore) AddAppToStore(config *types.StoreAppConfig) error { return fmt.Errorf("app is already available") } - jsonLaunchUIValues, err := json.Marshal(config.LaunchUIValues) - if err != nil { - return err - } - launchUIValues := strings.ReplaceAll(string(jsonLaunchUIValues), `"`, `'`) - jsonOverrideValues, err := json.Marshal(config.OverrideValues) - if err != nil { - return err - } - overrideValues := strings.ReplaceAll(string(jsonOverrideValues), `"`, `'`) - insertQuery := &pb.Query{ - Cql: fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name, repo_url, namespace, version, create_namespace,privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', %v, %v );", - a.keyspace, config.AppName, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, launchUIValues, overrideValues), + Cql: fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );", + a.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String()), } _, err = a.c.Session().ExecuteQuery(insertQuery) @@ -365,23 +355,13 @@ func (a *AstraServerStore) AddAppToStore(config *types.StoreAppConfig) error { func (a *AstraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { - jsonLaunchUIValues, err := json.Marshal(config.LaunchUIValues) - if err != nil { - return err - } - launchUIValues := strings.ReplaceAll(string(jsonLaunchUIValues), `"`, `'`) - jsonOverrideValues, err := json.Marshal(config.OverrideValues) - if err != nil { - return err - } - overrideValues := strings.ReplaceAll(string(jsonOverrideValues), `"`, `'`) - updateQuery := &pb.Query{ - Cql: fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = %v, override_values = %v WHERE name = '%s' AND version = '%s';", - a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, launchUIValues, overrideValues, config.AppName, config.Version), + Cql: fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';", + a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version), } - _, err = a.c.Session().ExecuteQuery(updateQuery) + fmt.Println(updateQuery) + _, err := a.c.Session().ExecuteQuery(updateQuery) if err != nil { return fmt.Errorf("failed to initialise db: %w", err) } @@ -408,7 +388,7 @@ func (a *AstraServerStore) DeleteAppFromStore(name, version string) error { func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { selectQuery := &pb.Query{ - Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values FROM %s.app_config WHERE name='%s' AND version='%s';", + Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config WHERE name='%s' AND version='%s';", a.keyspace, name, version), } @@ -475,14 +455,18 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf if err != nil { return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) } - // cqlLaunchUiValues, err := client.ToMap(result.Rows[0].Values[13],&pb.TypeSpec{}) - // if err != nil { - // return nil, fmt.Errorf("failed to get launch ui values: %w", err) - // } - // cqlOverrideValues, err := client.ToMap(result.Rows[0].Values[14], &pb.TypeSpec{}) - // if err != nil { - // return nil, fmt.Errorf("failed to get override values: %w", err) - // } + cqlLaunchUiValues, err := client.ToString(result.Rows[0].Values[13]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui values: %w", err) + } + cqlOverrideValues, err := client.ToString(result.Rows[0].Values[14]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } + cqlReleaseNameValues, err := client.ToString(result.Rows[0].Values[15]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } config := &types.AppConfig{ Name: cqlAppName, @@ -498,8 +482,9 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf Category: cqlCategory, Icon: cqlIcon, Description: cqlDescription, - // LaunchUIValues: cqlLaunchUiValues.(map[string]string), - // OverrideValues: cqlOverrideValues.(map[string]string), + LaunchUIValues: cqlLaunchUiValues, + OverrideValues: cqlOverrideValues, + ReleaseName: cqlReleaseNameValues, } return config, nil @@ -508,7 +493,7 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { selectQuery := &pb.Query{ - Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values FROM %s.app_config;", + Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config;", a.keyspace), } @@ -577,14 +562,19 @@ func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { if err != nil { return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) } - // cqlLaunchUiValues, err := client.ToMap(row.Values[13],&pb.TypeSpec{}) - // if err != nil { - // return nil, fmt.Errorf("failed to get launch ui values: %w", err) - // } - // cqlOverrideValues, err := client.ToMap(row.Values[14],&pb.TypeSpec{}) - // if err != nil { - // return nil, fmt.Errorf("failed to get override values: %w", err) - // } + cqlLaunchUiValues, err := client.ToString(row.Values[13]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui values: %w", err) + } + cqlOverrideValues, err := client.ToString(row.Values[14]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } + + cqlReleaseNameValues, err := client.ToString(result.Rows[0].Values[15]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } appConfigs = append(appConfigs, types.AppConfig{ Name: cqlAppName, @@ -600,8 +590,9 @@ func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { Category: cqlCategory, Icon: cqlIcon, Description: cqlDescription, - // LaunchUIValues: cqlLaunchUiValues.(map[string]string), - // OverrideValues: cqlOverrideValues.(map[string]string), + LaunchUIValues: cqlLaunchUiValues, + OverrideValues: cqlOverrideValues, + ReleaseName: cqlReleaseNameValues, }) } diff --git a/server/pkg/store/astra/type.go b/server/pkg/store/astra/type.go index 5a4c493a..3bd13457 100644 --- a/server/pkg/store/astra/type.go +++ b/server/pkg/store/astra/type.go @@ -6,6 +6,7 @@ const ( createKeyspaceQuery = "CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1};" createClusterEndpointTableQuery = "CREATE TABLE IF NOT EXISTS %s.cluster_endpoint (cluster_id uuid, org_id uuid, cluster_name text, endpoint text, PRIMARY KEY (cluster_id, org_id));" createOrgClusterTableQuery = "CREATE TABLE IF NOT EXISTS %s.org_cluster (org_id uuid, cluster_ids set, PRIMARY KEY (org_id));" + createAppConfigTableQuery = "CREATE TABLE IF NOT EXISTS %s.app_config(id TEXT, created_time timestamp, last_updated_time timestamp, last_updated_user TEXT, name TEXT, chart_name TEXT, repo_name TEXT, release_name TEXT, repo_url TEXT, namespace TEXT, version TEXT, create_namespace BOOLEAN, privileged_namespace BOOLEAN, launch_ui_url TEXT, launch_ui_redirect_url TEXT, category TEXT, icon TEXT, description TEXT, launch_ui_values TEXT, override_values TEXT, PRIMARY KEY (name, version));" ) var ( diff --git a/server/pkg/store/cassandra/db.go b/server/pkg/store/cassandra/db.go index 00d2e1da..f48a9c97 100644 --- a/server/pkg/store/cassandra/db.go +++ b/server/pkg/store/cassandra/db.go @@ -3,8 +3,10 @@ package cassandra import ( "fmt" "strings" + "time" "github.com/gocql/gocql" + "github.com/google/uuid" cassandraclient "github.com/kube-tarian/kad/server/pkg/cassandra-client" "github.com/kube-tarian/kad/server/pkg/types" ) @@ -46,6 +48,10 @@ func (c *CassandraServerStore) InitializeDb() error { return fmt.Errorf("failed to create cluster_endpoint table, %w", err) } + if err := c.c.Session().Query(fmt.Sprintf(createAppConfigTableQuery, c.keyspace)).Exec(); err != nil { + return fmt.Errorf("failed to create app_config table, %w", err) + } + return nil } @@ -191,7 +197,7 @@ func (c *CassandraServerStore) DeleteCluster(orgID, clusterName string) error { func (c *CassandraServerStore) isAppExistsInStore(name, version string) bool { - iter := c.c.Session().Query(fmt.Sprintf("Select cluster_ids FROM %s.app_config WHERE name=%s AND version =%s ;", + iter := c.c.Session().Query(fmt.Sprintf("Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';", c.keyspace, name, version)).Iter() var config types.AppConfig @@ -208,22 +214,23 @@ func (c *CassandraServerStore) AddAppToStore(config *types.StoreAppConfig) error return fmt.Errorf("app is already available") } - err := c.c.Session().Query(fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name, repo_url, namespace, version, create_namespace,privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values) VALUES (%s, %s, %s, %s, %s, %s, %t, %t, %s, %s, %s, %s, %s, %s, %s );", - c.keyspace, config.AppName, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues)).Exec() + err := c.c.Session().Query(fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );", + c.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String())).Exec() return err } func (c *CassandraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { - err := c.c.Session().Query(fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', version = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = %s, description = '%s', launch_ui_values = %s, override_values = %s WHERE name = '%s' AND version = '%s';", - c.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, config.AppName, config.Version)).Exec() + err := c.c.Session().Query(fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';", + c.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version)).Exec() return err } + func (c *CassandraServerStore) DeleteAppFromStore(name, version string) error { - err := c.c.Session().Query(fmt.Sprintf("DELETE FROM %s.app_config WHERE name=%s AND version=%s ;", + err := c.c.Session().Query(fmt.Sprintf("DELETE FROM %s.app_config WHERE name='%s' AND version='%s' ;", c.keyspace, name, version)).Exec() if err != nil { @@ -235,7 +242,7 @@ func (c *CassandraServerStore) DeleteAppFromStore(name, version string) error { func (c *CassandraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { - iter := c.c.Session().Query(fmt.Sprintf("Select * FROM %s.app_config WHERE name=%s AND version=%s;", + iter := c.c.Session().Query(fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config WHERE name='%s' AND version='%s';", c.keyspace, name, version)).Iter() var config types.AppConfig iter.Scan(&config) @@ -244,7 +251,7 @@ func (c *CassandraServerStore) GetAppFromStore(name, version string) (*types.App func (c *CassandraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { - iter := c.c.Session().Query(fmt.Sprintf("Select * FROM %s.app_config;", + iter := c.c.Session().Query(fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config;", c.keyspace)).Iter() var config []types.AppConfig iter.Scan(&config) diff --git a/server/pkg/store/cassandra/type.go b/server/pkg/store/cassandra/type.go index f460bbf0..c6a18fe7 100644 --- a/server/pkg/store/cassandra/type.go +++ b/server/pkg/store/cassandra/type.go @@ -4,4 +4,5 @@ const ( createKeyspaceQuery = "CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1};" createClusterEndpointTableQuery = "CREATE TABLE IF NOT EXISTS %s.cluster_endpoint (cluster_id uuid, org_id uuid, cluster_name text, endpoint text, PRIMARY KEY (cluster_id, org_id));" createOrgClusterTableQuery = "CREATE TABLE IF NOT EXISTS %s.org_cluster (org_id uuid, cluster_ids set, PRIMARY KEY (org_id));" + createAppConfigTableQuery = "CREATE TABLE IF NOT EXISTS %s.app_config(id TEXT, created_time timestamp, last_updated_time timestamp, last_updated_user TEXT, name TEXT, chart_name TEXT, repo_name TEXT, release_name TEXT, repo_url TEXT, namespace TEXT, version TEXT, create_namespace BOOLEAN, privileged_namespace BOOLEAN, launch_ui_url TEXT, launch_ui_redirect_url TEXT, category TEXT, icon TEXT, description TEXT, launch_ui_values TEXT, override_values TEXT, PRIMARY KEY (name, version));" ) diff --git a/server/pkg/types/type.go b/server/pkg/types/type.go index b2f9cd4d..4447f7f4 100644 --- a/server/pkg/types/type.go +++ b/server/pkg/types/type.go @@ -24,42 +24,43 @@ type ClusterDetails struct { } type StoreAppConfig struct { - ReleaseName string `json:"releaseName,omitempty"` - AppName string `json:"appName,omitempty"` - Version string `json:"version,omitempty"` - Category string `json:"category,omitempty"` - Description string `json:"description,omitempty"` - ChartName string `json:"chartName,omitempty"` - RepoName string `json:"repoName,omitempty"` - RepoURL string `json:"repoURL,omitempty"` - Namespace string `json:"namespace,omitempty"` - CreateNamespace bool `json:"createNamespace"` - PrivilegedNamespace bool `json:"privilegedNamespace"` - Icon string `json:"icon,omitempty"` - LaunchURL string `json:"launchURL,omitempty"` - LaunchRedirectURL string `json:"launchRedirectURL,omitempty"` - OverrideValues map[string]string `json:"overrideValues,omitempty"` - LaunchUIValues map[string]string `json:"launchUIValues,omitempty"` + AppName string `json:"appName,omitempty"` + Version string `json:"version,omitempty"` + Category string `json:"category,omitempty"` + Description string `json:"description,omitempty"` + ChartName string `json:"chartName,omitempty"` + RepoName string `json:"repoName,omitempty"` + ReleaseName string `json:"releaseName,omitempty"` + RepoURL string `json:"repoURL,omitempty"` + Namespace string `json:"namespace,omitempty"` + CreateNamespace bool `json:"createNamespace"` + PrivilegedNamespace bool `json:"privilegedNamespace"` + Icon string `json:"icon,omitempty"` + LaunchURL string `json:"launchURL,omitempty"` + LaunchRedirectURL string `json:"launchRedirectURL,omitempty"` + OverrideValues string `json:"overrideValues,omitempty"` + LaunchUIValues string `json:"launchUIValues,omitempty"` } type AppConfig struct { - ID int64 `cql:"id" json:"id,omitempty"` - CreatedTime time.Time `cql:"created_time" json:"created_time,omitempty"` - LastUpdatedTime time.Time `cql:"last_updated_time" json:"last_updated_time,omitempty"` - LastUpdatedUser string `cql:"last_updated_user" json:"last_updated_user,omitempty"` - Name string `cql:"name" json:"name"` - ChartName string `cql:"chart_name" json:"chart_name"` - RepoName string `cql:"repo_name" json:"repo_name"` - RepoURL string `cql:"repo_url" json:"repo_url"` - Namespace string `cql:"namespace" json:"namespace"` - Version string `cql:"version" json:"version"` - CreateNamespace bool `cql:"create_namespace" json:"create_namespace"` - PrivilegedNamespace bool `cql:"privileged_namespace" json:"privileged_namespace"` - LaunchUIURL string `cql:"launch_ui_url" json:"launch_ui_url"` - LaunchUIRedirectURL string `cql:"launch_ui_redirect_url" json:"launch_ui_redirect_url"` - Category string `cql:"category" json:"category"` - Icon string `cql:"icon" json:"icon"` - Description string `cql:"description" json:"description"` - LaunchUIValues map[string]string `cql:"launch_ui_values" json:"launch_ui_values"` - OverrideValues map[string]string `cql:"override_values" json:"override_values"` + ID int64 `cql:"id" json:"id,omitempty"` + CreatedTime time.Time `cql:"created_time" json:"created_time,omitempty"` + LastUpdatedTime time.Time `cql:"last_updated_time" json:"last_updated_time,omitempty"` + LastUpdatedUser string `cql:"last_updated_user" json:"last_updated_user,omitempty"` + Name string `cql:"name" json:"name"` + ChartName string `cql:"chart_name" json:"chart_name"` + RepoName string `cql:"repo_name" json:"repo_name"` + ReleaseName string `cql:"release_name" json:"release_name"` + RepoURL string `cql:"repo_url" json:"repo_url"` + Namespace string `cql:"namespace" json:"namespace"` + Version string `cql:"version" json:"version"` + CreateNamespace bool `cql:"create_namespace" json:"create_namespace"` + PrivilegedNamespace bool `cql:"privileged_namespace" json:"privileged_namespace"` + LaunchUIURL string `cql:"launch_ui_url" json:"launch_ui_url"` + LaunchUIRedirectURL string `cql:"launch_ui_redirect_url" json:"launch_ui_redirect_url"` + Category string `cql:"category" json:"category"` + Icon string `cql:"icon" json:"icon"` + Description string `cql:"description" json:"description"` + LaunchUIValues string `cql:"launch_ui_values" json:"launch_ui_values"` + OverrideValues string `cql:"override_values" json:"override_values"` } From 511853bc3fad297d1a3bb8e1dc8735fd4cb55fba Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Mon, 31 Jul 2023 20:37:01 +0530 Subject: [PATCH 06/31] fix reading context attributes in server API implementations --- server/pkg/api/cluster_registeration.go | 20 ++++++++++++-------- server/pkg/api/server.go | 22 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index cefa672f..14d38516 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -10,8 +10,9 @@ import ( func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.NewClusterRegistrationRequest) ( *serverpb.NewClusterRegistrationResponse, error) { - orgId, ok := ctx.Value("organizationID").(string) - if !ok || orgId == "" { + metadataMap := metadataContextToMap(ctx) + orgId := metadataMap[organizationIDAttribute] + if len(orgId) == 0 { s.log.Error("organizationID is missing in the request") return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INVALID_ARGUMENT, @@ -60,8 +61,9 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverpb.UpdateClusterRegistrationRequest) ( *serverpb.UpdateClusterRegistrationResponse, error) { - orgId, ok := ctx.Value("organizationID").(string) - if !ok || orgId == "" { + metadataMap := metadataContextToMap(ctx) + orgId := metadataMap[organizationIDAttribute] + if len(orgId) == 0 { s.log.Error("organizationID is missing in the request") return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INVALID_ARGUMENT, @@ -111,8 +113,9 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverpb.DeleteClusterRegistrationRequest) ( *serverpb.DeleteClusterRegistrationResponse, error) { - orgId, ok := ctx.Value("organizationID").(string) - if !ok || orgId == "" { + metadataMap := metadataContextToMap(ctx) + orgId := metadataMap[organizationIDAttribute] + if len(orgId) == 0 { s.log.Error("organizationID is missing in the request") return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INVALID_ARGUMENT, @@ -147,8 +150,9 @@ func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverp func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersRequest) ( *serverpb.GetClustersResponse, error) { - orgId, ok := ctx.Value("organizationID").(string) - if !ok || orgId == "" { + metadataMap := metadataContextToMap(ctx) + orgId := metadataMap[organizationIDAttribute] + if len(orgId) == 0 { s.log.Error("organizationID is missing in the request") return &serverpb.GetClustersResponse{ Status: serverpb.StatusCode_INVALID_ARGUMENT, diff --git a/server/pkg/api/server.go b/server/pkg/api/server.go index 0ae9ec01..c84b2d6b 100644 --- a/server/pkg/api/server.go +++ b/server/pkg/api/server.go @@ -1,10 +1,17 @@ package api import ( + "context" + "github.com/kube-tarian/kad/agent/pkg/logging" "github.com/kube-tarian/kad/server/pkg/agent" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" "github.com/kube-tarian/kad/server/pkg/store" + "google.golang.org/grpc/metadata" +) + +const ( + organizationIDAttribute = "organizationid" ) type Server struct { @@ -21,3 +28,18 @@ func NewServer(log logging.Logger, serverStore store.ServerStore) (*Server, erro log: log, }, nil } + +func metadataContextToMap(ctx context.Context) map[string]string { + metadataMap := make(map[string]string) + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return metadataMap + } + + for key, values := range md { + if len(values) > 0 { + metadataMap[key] = values[0] + } + } + return metadataMap +} From 1f9c7bade60b1b01d3a26841971c1da089b2d916 Mon Sep 17 00:00:00 2001 From: anil-intelops Date: Wed, 2 Aug 2023 22:47:16 +0530 Subject: [PATCH 07/31] minor changes --- server/pkg/api/store_apps.go | 55 ++----- server/pkg/store/astra/db.go | 236 +++++++++++-------------------- server/pkg/store/cassandra/db.go | 43 +++--- server/pkg/store/store.go | 5 +- 4 files changed, 121 insertions(+), 218 deletions(-) diff --git a/server/pkg/api/store_apps.go b/server/pkg/api/store_apps.go index a6a2c0e7..89d3b145 100644 --- a/server/pkg/api/store_apps.go +++ b/server/pkg/api/store_apps.go @@ -10,17 +10,11 @@ import ( func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppRequest) ( *serverpb.AddStoreAppResponse, error) { - if request.AppConfig.AppName == "" { - s.log.Errorf("failed to add app config to store, %v", "App name is missing") + if request.AppConfig.AppName == "" || request.AppConfig.Version == "" { + s.log.Errorf("failed to add app config to store, %v", "App name/version is missing") return &serverpb.AddStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed add app config to store, app name is missing", - }, nil - } else if request.AppConfig.Version == "" { - s.log.Errorf("failed to add app config to store, %v", "App version is missing") - return &serverpb.AddStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed add app config to store, app version is missing", + StatusMessage: "failed add app config to store, app name/version is missing", }, nil } @@ -43,7 +37,7 @@ func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppR LaunchUIValues: request.AppValues.LaunchUIValues, } - if err := s.serverStore.AddAppToStore(config); err != nil { + if err := s.serverStore.AddOrUpdateApp(config); err != nil { s.log.Errorf("failed to add app config to store, %v", err) return &serverpb.AddStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, @@ -59,17 +53,11 @@ func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppR func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateStoreAppRequest) ( *serverpb.UpdateStoreAppRsponse, error) { - if request.AppConfig.AppName == "" { - s.log.Errorf("failed to update app config in store, %v", "App name is missing") + if request.AppConfig.AppName == "" || request.AppConfig.Version == "" { + s.log.Errorf("failed to update app config in store, %v", "App name/version is missing") return &serverpb.UpdateStoreAppRsponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to update app config in store, app name is missing", - }, nil - } else if request.AppConfig.Version == "" { - s.log.Errorf("failed to update app config in store, %v", "App version is") - return &serverpb.UpdateStoreAppRsponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to update app config in store, app version is missing", + StatusMessage: "failed to update app config in store, app name/version is missing", }, nil } @@ -92,7 +80,7 @@ func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateSto LaunchUIValues: request.AppValues.LaunchUIValues, } - if err := s.serverStore.UpdateAppInStore(config); err != nil { + if err := s.serverStore.AddOrUpdateApp(config); err != nil { s.log.Errorf("failed to update app config in store, %v", err) return &serverpb.UpdateStoreAppRsponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, @@ -108,21 +96,15 @@ func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateSto func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteStoreAppRequest) ( *serverpb.DeleteStoreAppResponse, error) { - if request.AppName == "" { - s.log.Errorf("failed to delete app config from store, %v", "App name is missing") + if request.AppName == "" || request.Version == "" { + s.log.Errorf("failed to delete app config from store, %v", "App name/version is missing") return &serverpb.DeleteStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to delete app config from store, app name is missing", - }, nil - } else if request.Version == "" { - s.log.Errorf("failed to delete app cnfig from store, %v", "App version is") - return &serverpb.DeleteStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to delete app config from store, app version is missing", + StatusMessage: "failed to delete app config from store, app name/version is missing", }, nil } - if err := s.serverStore.DeleteAppFromStore(request.AppName, request.Version); err != nil { + if err := s.serverStore.DeleteAppInStore(request.AppName, request.Version); err != nil { s.log.Errorf("failed to delete app config from store, %v", err) return &serverpb.DeleteStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, @@ -139,20 +121,13 @@ func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteSto func (s *Server) GetStoreApp(ctx context.Context, request *serverpb.GetStoreAppRequest) ( *serverpb.GetStoreAppResponse, error) { - if request.AppName == "" { - s.log.Errorf("failed to get app config from store, %v", "App name is missing") - return &serverpb.GetStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to get app config from store, app name is missing", - }, nil - } else if request.Version == "" { - s.log.Errorf("failed to get app config from store, %v", "App version is") + if request.AppName == "" || request.Version == "" { + s.log.Errorf("failed to get app config from store, %v", "App name/version is missing") return &serverpb.GetStoreAppResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to get app config from store, app version is missing", + StatusMessage: "failed to get app config from store, app name/version is missing", }, nil } - config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) if err != nil { s.log.Errorf("failed to get app config from store, %v", err) diff --git a/server/pkg/store/astra/db.go b/server/pkg/store/astra/db.go index 4e7c079a..ac0316e6 100644 --- a/server/pkg/store/astra/db.go +++ b/server/pkg/store/astra/db.go @@ -14,6 +14,15 @@ import ( pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" ) +const ( + createAppConfigQuery string = "INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );" + updateAppConfigQuery string = "UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';" + deleteAppConfigQuery string = "DELETE FROM %s.app_config WHERE name='%s' AND version='%s';" + getAppConfigQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config WHERE name='%s' AND version='%s';" + getAllAppConfigsQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config;" + appConfigExistanceCheckQuery string = "Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';" +) + type AstraServerStore struct { c *astraclient.Client keyspace string @@ -26,7 +35,6 @@ func NewStore() (*AstraServerStore, error) { return nil, fmt.Errorf("failed to connect to astra db, %w", err) } a.keyspace = a.c.Keyspace() - a.keyspace = "capten_server" return a, nil } @@ -313,7 +321,7 @@ func (a *AstraServerStore) getClusterID(orgID, clusterName string) (string, erro func (a *AstraServerStore) isAppExistsInStore(name, version string) (bool, error) { selectClusterQuery := &pb.Query{ - Cql: fmt.Sprintf("Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';", + Cql: fmt.Sprintf(appConfigExistanceCheckQuery, a.keyspace, name, version), } @@ -330,38 +338,42 @@ func (a *AstraServerStore) isAppExistsInStore(name, version string) (bool, error return false, nil } -func (a *AstraServerStore) AddAppToStore(config *types.StoreAppConfig) error { +func (a *AstraServerStore) AddOrUpdateApp(config *types.StoreAppConfig) error { appExists, err := a.isAppExistsInStore(config.AppName, config.Version) if err != nil { - return fmt.Errorf("failed to store app config : %w", err) + return fmt.Errorf("failed to check app config existance : %w", err) } + var query *pb.Query if appExists { - return fmt.Errorf("app is already available") - } - - insertQuery := &pb.Query{ - Cql: fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );", - a.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String()), + query = &pb.Query{ + Cql: fmt.Sprintf(updateAppConfigQuery, + a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version), + } + } else { + query = &pb.Query{ + Cql: fmt.Sprintf(createAppConfigQuery, + a.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String()), + } } - _, err = a.c.Session().ExecuteQuery(insertQuery) + _, err = a.c.Session().ExecuteQuery(query) if err != nil { - return fmt.Errorf("failed to initialise db: %w", err) + return fmt.Errorf("failed to insert/update the app config into the app_config table : %w", err) } return nil } -func (a *AstraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { +func (a *AstraServerStore) DeleteAppInStore(name, version string) error { - updateQuery := &pb.Query{ - Cql: fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';", - a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version), + deleteQuery := &pb.Query{ + Cql: fmt.Sprintf( + deleteAppConfigQuery, + a.keyspace, name, version), } - fmt.Println(updateQuery) - _, err := a.c.Session().ExecuteQuery(updateQuery) + _, err := a.c.Session().ExecuteQuery(deleteQuery) if err != nil { return fmt.Errorf("failed to initialise db: %w", err) } @@ -369,27 +381,37 @@ func (a *AstraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error return nil } -func (a *AstraServerStore) DeleteAppFromStore(name, version string) error { +func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { - deleteQuery := &pb.Query{ - Cql: fmt.Sprintf( - "DELETE FROM %s.app_config WHERE name='%s' AND version='%s';", + selectQuery := &pb.Query{ + Cql: fmt.Sprintf(getAppConfigQuery, a.keyspace, name, version), } - _, err := a.c.Session().ExecuteQuery(deleteQuery) + response, err := a.c.Session().ExecuteQuery(selectQuery) if err != nil { - return fmt.Errorf("failed to initialise db: %w", err) + return nil, fmt.Errorf("failed to initialise db: %w", err) } - return nil + result := response.GetResultSet() + + if len(result.Rows) == 0 { + return nil, fmt.Errorf("app: %s not found", name) + } + + config, err := toAppConfig(result.Rows[0]) + if err != nil { + return nil, err + } + + return config, nil } -func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { +func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { selectQuery := &pb.Query{ - Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config WHERE name='%s' AND version='%s';", - a.keyspace, name, version), + Cql: fmt.Sprintf(getAllAppConfigsQuery, + a.keyspace), } response, err := a.c.Session().ExecuteQuery(selectQuery) @@ -400,70 +422,84 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf result := response.GetResultSet() if len(result.Rows) == 0 { - return nil, fmt.Errorf("app: %s not found", name) + return nil, fmt.Errorf("app config's not found") } - cqlAppName, err := client.ToString(result.Rows[0].Values[0]) + var appConfigs []types.AppConfig + for _, row := range result.Rows { + config, err := toAppConfig(row) + if err != nil { + return nil, err + } + appConfigs = append(appConfigs, *config) + } + + return &appConfigs, nil +} + +func toAppConfig(row *pb.Row) (*types.AppConfig, error) { + + cqlAppName, err := client.ToString(row.Values[0]) if err != nil { return nil, fmt.Errorf("failed to get app name: %w", err) } - cqlChartName, err := client.ToString(result.Rows[0].Values[1]) + cqlChartName, err := client.ToString(row.Values[1]) if err != nil { return nil, fmt.Errorf("failed to get chart name: %w", err) } - cqlRepoName, err := client.ToString(result.Rows[0].Values[2]) + cqlRepoName, err := client.ToString(row.Values[2]) if err != nil { return nil, fmt.Errorf("failed to get repo name: %w", err) } - cqlRepoURL, err := client.ToString(result.Rows[0].Values[3]) + cqlRepoURL, err := client.ToString(row.Values[3]) if err != nil { return nil, fmt.Errorf("failed to get repo url: %w", err) } - cqlNamespace, err := client.ToString(result.Rows[0].Values[4]) + cqlNamespace, err := client.ToString(row.Values[4]) if err != nil { return nil, fmt.Errorf("failed to get Namespace: %w", err) } - cqlVersion, err := client.ToString(result.Rows[0].Values[5]) + cqlVersion, err := client.ToString(row.Values[5]) if err != nil { return nil, fmt.Errorf("failed to get version: %w", err) } - cqlCreateNamespace, err := client.ToBoolean(result.Rows[0].Values[6]) + cqlCreateNamespace, err := client.ToBoolean(row.Values[6]) if err != nil { return nil, fmt.Errorf("failed to get Create Namespace: %w", err) } - cqlPrivilegedNamespace, err := client.ToBoolean(result.Rows[0].Values[7]) + cqlPrivilegedNamespace, err := client.ToBoolean(row.Values[7]) if err != nil { return nil, fmt.Errorf("failed to get Privileged Namespace: %w", err) } - cqlLaunchUiUrl, err := client.ToString(result.Rows[0].Values[8]) + cqlLaunchUiUrl, err := client.ToString(row.Values[8]) if err != nil { return nil, fmt.Errorf("failed to get launch ui url: %w", err) } - cqlLaunchUiRedirectUrl, err := client.ToString(result.Rows[0].Values[9]) + cqlLaunchUiRedirectUrl, err := client.ToString(row.Values[9]) if err != nil { return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) } - cqlCategory, err := client.ToString(result.Rows[0].Values[10]) + cqlCategory, err := client.ToString(row.Values[10]) if err != nil { return nil, fmt.Errorf("failed to get category: %w", err) } - cqlIcon, err := client.ToString(result.Rows[0].Values[11]) + cqlIcon, err := client.ToString(row.Values[11]) if err != nil { return nil, fmt.Errorf("failed to get icon: %w", err) } - cqlDescription, err := client.ToString(result.Rows[0].Values[12]) + cqlDescription, err := client.ToString(row.Values[12]) if err != nil { return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) } - cqlLaunchUiValues, err := client.ToString(result.Rows[0].Values[13]) + cqlLaunchUiValues, err := client.ToString(row.Values[13]) if err != nil { return nil, fmt.Errorf("failed to get launch ui values: %w", err) } - cqlOverrideValues, err := client.ToString(result.Rows[0].Values[14]) + cqlOverrideValues, err := client.ToString(row.Values[14]) if err != nil { return nil, fmt.Errorf("failed to get override values: %w", err) } - cqlReleaseNameValues, err := client.ToString(result.Rows[0].Values[15]) + cqlReleaseNameValues, err := client.ToString(row.Values[15]) if err != nil { return nil, fmt.Errorf("failed to get override values: %w", err) } @@ -486,115 +522,5 @@ func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConf OverrideValues: cqlOverrideValues, ReleaseName: cqlReleaseNameValues, } - return config, nil } - -func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { - - selectQuery := &pb.Query{ - Cql: fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config;", - a.keyspace), - } - - response, err := a.c.Session().ExecuteQuery(selectQuery) - if err != nil { - return nil, fmt.Errorf("failed to initialise db: %w", err) - } - - result := response.GetResultSet() - - if len(result.Rows) == 0 { - return nil, fmt.Errorf("app config's not found") - } - - var appConfigs []types.AppConfig - for _, row := range result.Rows { - cqlAppName, err := client.ToString(row.Values[0]) - if err != nil { - return nil, fmt.Errorf("failed to get app name: %w", err) - } - cqlChartName, err := client.ToString(row.Values[1]) - if err != nil { - return nil, fmt.Errorf("failed to get chart name: %w", err) - } - cqlRepoName, err := client.ToString(row.Values[2]) - if err != nil { - return nil, fmt.Errorf("failed to get repo name: %w", err) - } - cqlRepoURL, err := client.ToString(row.Values[3]) - if err != nil { - return nil, fmt.Errorf("failed to get repo url: %w", err) - } - cqlNamespace, err := client.ToString(row.Values[4]) - if err != nil { - return nil, fmt.Errorf("failed to get Namespace: %w", err) - } - cqlVersion, err := client.ToString(row.Values[5]) - if err != nil { - return nil, fmt.Errorf("failed to get version: %w", err) - } - cqlCreateNamespace, err := client.ToBoolean(row.Values[6]) - if err != nil { - return nil, fmt.Errorf("failed to get Create Namespace: %w", err) - } - cqlPrivilegedNamespace, err := client.ToBoolean(row.Values[7]) - if err != nil { - return nil, fmt.Errorf("failed to get Privileged Namespace: %w", err) - } - cqlLaunchUiUrl, err := client.ToString(row.Values[8]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui url: %w", err) - } - cqlLaunchUiRedirectUrl, err := client.ToString(row.Values[9]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) - } - cqlCategory, err := client.ToString(row.Values[10]) - if err != nil { - return nil, fmt.Errorf("failed to get category: %w", err) - } - cqlIcon, err := client.ToString(row.Values[11]) - if err != nil { - return nil, fmt.Errorf("failed to get icon: %w", err) - } - cqlDescription, err := client.ToString(row.Values[12]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) - } - cqlLaunchUiValues, err := client.ToString(row.Values[13]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui values: %w", err) - } - cqlOverrideValues, err := client.ToString(row.Values[14]) - if err != nil { - return nil, fmt.Errorf("failed to get override values: %w", err) - } - - cqlReleaseNameValues, err := client.ToString(result.Rows[0].Values[15]) - if err != nil { - return nil, fmt.Errorf("failed to get override values: %w", err) - } - - appConfigs = append(appConfigs, types.AppConfig{ - Name: cqlAppName, - ChartName: cqlChartName, - RepoName: cqlRepoName, - RepoURL: cqlRepoURL, - Namespace: cqlNamespace, - Version: cqlVersion, - CreateNamespace: cqlCreateNamespace, - PrivilegedNamespace: cqlPrivilegedNamespace, - LaunchUIURL: cqlLaunchUiUrl, - LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, - Category: cqlCategory, - Icon: cqlIcon, - Description: cqlDescription, - LaunchUIValues: cqlLaunchUiValues, - OverrideValues: cqlOverrideValues, - ReleaseName: cqlReleaseNameValues, - }) - } - - return &appConfigs, nil -} diff --git a/server/pkg/store/cassandra/db.go b/server/pkg/store/cassandra/db.go index f48a9c97..029d539c 100644 --- a/server/pkg/store/cassandra/db.go +++ b/server/pkg/store/cassandra/db.go @@ -11,6 +11,15 @@ import ( "github.com/kube-tarian/kad/server/pkg/types" ) +const ( + createAppConfigQuery string = "INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );" + updateAppConfigQuery string = "UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';" + deleteAppConfigQuery string = "DELETE FROM %s.app_config WHERE name='%s' AND version='%s' ;" + getAppConfigQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config WHERE name='%s' AND version='%s';" + getAllAppConfigsQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config;" + appConfigExistanceCheckQuery string = "Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';" +) + type CassandraServerStore struct { c *cassandraclient.Client keyspace string @@ -197,7 +206,7 @@ func (c *CassandraServerStore) DeleteCluster(orgID, clusterName string) error { func (c *CassandraServerStore) isAppExistsInStore(name, version string) bool { - iter := c.c.Session().Query(fmt.Sprintf("Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';", + iter := c.c.Session().Query(fmt.Sprintf(appConfigExistanceCheckQuery, c.keyspace, name, version)).Iter() var config types.AppConfig @@ -208,29 +217,23 @@ func (c *CassandraServerStore) isAppExistsInStore(name, version string) bool { return true } -func (c *CassandraServerStore) AddAppToStore(config *types.StoreAppConfig) error { +func (c *CassandraServerStore) AddOrUpdateApp(config *types.StoreAppConfig) error { if ok := c.isAppExistsInStore(config.AppName, config.Version); ok { - return fmt.Errorf("app is already available") - } - - err := c.c.Session().Query(fmt.Sprintf("INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );", - c.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String())).Exec() - - return err -} - -func (c *CassandraServerStore) UpdateAppInStore(config *types.StoreAppConfig) error { - - err := c.c.Session().Query(fmt.Sprintf("UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';", - c.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version)).Exec() + err := c.c.Session().Query(fmt.Sprintf(updateAppConfigQuery, + c.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version)).Exec() + return err + } else { + err := c.c.Session().Query(fmt.Sprintf(createAppConfigQuery, + c.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String())).Exec() - return err + return err + } } -func (c *CassandraServerStore) DeleteAppFromStore(name, version string) error { +func (c *CassandraServerStore) DeleteAppInStore(name, version string) error { - err := c.c.Session().Query(fmt.Sprintf("DELETE FROM %s.app_config WHERE name='%s' AND version='%s' ;", + err := c.c.Session().Query(fmt.Sprintf(deleteAppConfigQuery, c.keyspace, name, version)).Exec() if err != nil { @@ -242,7 +245,7 @@ func (c *CassandraServerStore) DeleteAppFromStore(name, version string) error { func (c *CassandraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { - iter := c.c.Session().Query(fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config WHERE name='%s' AND version='%s';", + iter := c.c.Session().Query(fmt.Sprintf(getAppConfigQuery, c.keyspace, name, version)).Iter() var config types.AppConfig iter.Scan(&config) @@ -251,7 +254,7 @@ func (c *CassandraServerStore) GetAppFromStore(name, version string) (*types.App func (c *CassandraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { - iter := c.c.Session().Query(fmt.Sprintf("Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config;", + iter := c.c.Session().Query(fmt.Sprintf(getAllAppConfigsQuery, c.keyspace)).Iter() var config []types.AppConfig iter.Scan(&config) diff --git a/server/pkg/store/store.go b/server/pkg/store/store.go index 7187629b..a2345b7e 100644 --- a/server/pkg/store/store.go +++ b/server/pkg/store/store.go @@ -15,9 +15,8 @@ type ServerStore interface { AddCluster(organizationID, clusterName, endpoint string) error UpdateCluster(organizationID, clusterName, endpoint string) error DeleteCluster(organizationID, clusterName string) error - AddAppToStore(config *types.StoreAppConfig) error - UpdateAppInStore(config *types.StoreAppConfig) error - DeleteAppFromStore(name, version string) error + AddOrUpdateApp(config *types.StoreAppConfig) error + DeleteAppInStore(name, version string) error GetAppFromStore(name, version string) (*types.AppConfig, error) GetAppsFromStore() (*[]types.AppConfig, error) } From cd5b490b9e3aedf8c2901da53b49ce15b26c6757 Mon Sep 17 00:00:00 2001 From: indresh-28 Date: Thu, 3 Aug 2023 20:54:39 +0530 Subject: [PATCH 08/31] Initialize DB --- server/cmd/server/main.go | 7 ++++++- server/pkg/store/store.go | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/server/cmd/server/main.go b/server/cmd/server/main.go index 82d4c07d..68f37053 100644 --- a/server/cmd/server/main.go +++ b/server/cmd/server/main.go @@ -38,7 +38,12 @@ func main() { serverStore, err := store.NewStore(cfg.Database) if err != nil { - log.Fatal("Failed to connect to cassandra database", err) + log.Fatal("Failed to connect to %s database", cfg.Database, err) + } + + err = serverStore.InitializeDb() + if err != nil { + log.Fatal("failed to initialize %s db, %w", cfg.Database, err) } server, err := handler.NewAPIHandler(log, serverStore) diff --git a/server/pkg/store/store.go b/server/pkg/store/store.go index a2345b7e..8b30fd7d 100644 --- a/server/pkg/store/store.go +++ b/server/pkg/store/store.go @@ -10,6 +10,7 @@ import ( ) type ServerStore interface { + InitializeDb() error GetClusterEndpoint(organizationID, clusterName string) (string, error) GetClusters(organizationID string) ([]types.ClusterDetails, error) AddCluster(organizationID, clusterName, endpoint string) error From 1082a9645a730bbd8205bccd5ce6d14545c0cb8e Mon Sep 17 00:00:00 2001 From: jebjohns <111633983+jebjohns@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:34:06 +0530 Subject: [PATCH 09/31] Update Chart.yaml --- charts/server/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/server/Chart.yaml b/charts/server/Chart.yaml index d91cdd4f..d96abe14 100644 --- a/charts/server/Chart.yaml +++ b/charts/server/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.9 +version: 0.1.10 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to From d487c6a1e80e81534fd3b429ce9522089b5ad21d Mon Sep 17 00:00:00 2001 From: jebjohns <111633983+jebjohns@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:35:20 +0530 Subject: [PATCH 10/31] Update helm_release.yml --- .github/workflows/helm_release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/helm_release.yml b/.github/workflows/helm_release.yml index d612cd6c..c0cf1362 100644 --- a/.github/workflows/helm_release.yml +++ b/.github/workflows/helm_release.yml @@ -24,3 +24,4 @@ jobs: uses: helm/chart-releaser-action@v1.1.0 env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + CR_SKIP_EXISTING: true From 54d3fc27fe77e25045251fb9336f6df115807344 Mon Sep 17 00:00:00 2001 From: jebjohns <111633983+jebjohns@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:35:59 +0530 Subject: [PATCH 11/31] Update Chart.yaml --- charts/server/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/server/Chart.yaml b/charts/server/Chart.yaml index d96abe14..abc183d9 100644 --- a/charts/server/Chart.yaml +++ b/charts/server/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.10 +version: 0.1.11 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to From a0f001fb0c9128a9b06da4eaa699351bcbb68b2c Mon Sep 17 00:00:00 2001 From: jebjohns <111633983+jebjohns@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:37:53 +0530 Subject: [PATCH 12/31] Update helm_release.yml --- .github/workflows/helm_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/helm_release.yml b/.github/workflows/helm_release.yml index c0cf1362..f3bdaead 100644 --- a/.github/workflows/helm_release.yml +++ b/.github/workflows/helm_release.yml @@ -21,7 +21,7 @@ jobs: git config user.email "$GITHUB_ACTOR@@gmail.com" - name: Run chart-releaser - uses: helm/chart-releaser-action@v1.1.0 + uses: helm/chart-releaser-action@v1.5.0 env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" CR_SKIP_EXISTING: true From 9b044ab56bda5f3a08e5ce23005b5b175dad1c61 Mon Sep 17 00:00:00 2001 From: jebjohns <111633983+jebjohns@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:38:20 +0530 Subject: [PATCH 13/31] Update Chart.yaml --- charts/server/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/server/Chart.yaml b/charts/server/Chart.yaml index abc183d9..33a3971e 100644 --- a/charts/server/Chart.yaml +++ b/charts/server/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.11 +version: 0.1.12 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to From ad911c5be4fa1301becab3383dd2d38b096bc68c Mon Sep 17 00:00:00 2001 From: indresh-28 Date: Fri, 4 Aug 2023 21:21:45 +0530 Subject: [PATCH 14/31] Create instance for agent map --- server/pkg/agent/agent_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/pkg/agent/agent_handler.go b/server/pkg/agent/agent_handler.go index bd9804f9..4e505eee 100644 --- a/server/pkg/agent/agent_handler.go +++ b/server/pkg/agent/agent_handler.go @@ -17,7 +17,7 @@ type AgentHandler struct { } func NewAgentHandler(serverStore store.ServerStore) *AgentHandler { - return &AgentHandler{serverStore: serverStore} + return &AgentHandler{serverStore: serverStore, agents: map[string]*Agent{}} } func (s *AgentHandler) AddAgent(orgId, clusterName string, agentCfg *Config) error { From 634130750567107c72c9e37b00ebba4b45eab9d7 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sat, 5 Aug 2023 20:53:00 +0530 Subject: [PATCH 15/31] improve server registration logging --- server/pkg/api/cluster_registeration.go | 26 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index 14d38516..3917e8fc 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -20,6 +20,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N }, nil } + s.log.Infof("[%s] New cluster registration request for cluster %s recieved", orgId, request.ClusterName) agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, @@ -27,7 +28,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N Key: request.ClientCertData, } if err := s.agentHandeler.AddAgent(orgId, request.ClusterName, agentConfig); err != nil { - s.log.Errorf("failed to connect to agent, %s", err) + s.log.Errorf("[%s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed to connect to agent", @@ -37,7 +38,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N err := credential.PutClusterCerts(ctx, orgId, request.ClusterName, request.ClientCAChainData, request.ClientKeyData, request.ClientCertData) if err != nil { - s.log.Errorf("failed to store cert in vault, %v", err) + s.log.Errorf("[%s] failed to store cert in vault for cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed register cluster", @@ -46,13 +47,14 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N err = s.serverStore.AddCluster(orgId, request.ClusterName, request.AgentEndpoint) if err != nil { - s.log.Errorf("failed to get db session, %v", err) + s.log.Errorf("[%s] failed to store cluster %s to db, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed register cluster", }, nil } + s.log.Infof("[%s] New cluster registration successful for %s cluster", orgId, request.ClusterName) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "register cluster success", @@ -71,6 +73,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp }, nil } + s.log.Infof("[%s] Update cluster registration request for cluster %s recieved", orgId, request.ClusterName) agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, @@ -79,7 +82,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp } if err := s.agentHandeler.UpdateAgent(orgId, request.ClusterName, agentConfig); err != nil { - s.log.Errorf("failed to connect to agent, %s", err) + s.log.Errorf("[%s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed to connect to agent", @@ -89,7 +92,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp err := credential.PutClusterCerts(ctx, orgId, request.ClusterName, request.ClientCAChainData, request.ClientKeyData, request.ClientCertData) if err != nil { - s.log.Errorf("failed to store cert in vault, %v", err) + s.log.Errorf("[%s] failed to update cert in vault for cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed update register cluster", @@ -98,13 +101,14 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp err = s.serverStore.UpdateCluster(orgId, request.ClusterName, request.AgentEndpoint) if err != nil { - s.log.Errorf("failed to get db session, %v", err) + s.log.Errorf("[%s] failed to update cluster %s in db, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed update register cluster", }, nil } + s.log.Infof("[%s] Update cluster registration successful for %s cluster", orgId, request.ClusterName) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "cluster register update success", @@ -123,10 +127,11 @@ func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverp }, nil } + s.log.Infof("[%s] Delete cluster registration request for cluster %s recieved", orgId, request.ClusterName) s.agentHandeler.RemoveAgent(orgId, request.ClusterName) err := credential.DeleteClusterCerts(ctx, orgId, request.ClusterName) if err != nil { - s.log.Errorf("failed to delete cert in vault, %v", err) + s.log.Errorf("[%s] failed to delete cert in vault for cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed delete register cluster", @@ -135,13 +140,14 @@ func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverp err = s.serverStore.DeleteCluster(orgId, request.ClusterName) if err != nil { - s.log.Errorf("failed to get db session, %v", err) + s.log.Errorf("[%s] failed to delete cluster %s from db, %v", orgId, request.ClusterName, err) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed delete register cluster", }, nil } + s.log.Infof("[%s] Delete cluster registration request for cluster %s successful", orgId, request.ClusterName) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "cluster deletion success", @@ -160,9 +166,10 @@ func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersR }, nil } + s.log.Infof("[%s] GetClusters request recieved", orgId) clusterDetails, err := s.serverStore.GetClusters(orgId) if err != nil { - s.log.Errorf("failed to get cluster details, %v", err) + s.log.Errorf("[%s] failed to get clusters, %v", orgId, err) return &serverpb.GetClustersResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed get cluster details", @@ -177,6 +184,7 @@ func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersR }) } + s.log.Infof("[%s] Found %d clusters", len(data), orgId) return &serverpb.GetClustersResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "get cluster details success", From 7cb6f9e35a5012290d5b37aa1ea910eb85678762 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sat, 5 Aug 2023 21:01:17 +0530 Subject: [PATCH 16/31] fix get clusters log --- server/pkg/api/cluster_registeration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index 3917e8fc..b37381b6 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -184,7 +184,7 @@ func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersR }) } - s.log.Infof("[%s] Found %d clusters", len(data), orgId) + s.log.Infof("[%s] Found %d clusters", orgId, len(data)) return &serverpb.GetClustersResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "get cluster details success", From ecb428f1d5c13de8f2a876de173b492fcc536184 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 14:03:26 +0530 Subject: [PATCH 17/31] update cluster DB table --- proto/server.proto | 29 +- server/pkg/agent/agent_handler.go | 42 +- server/pkg/api/cluster_registeration.go | 21 +- server/pkg/handler/handle_agent.go | 2 +- server/pkg/pb/serverpb/server.pb.go | 715 ++++++++++++----------- server/pkg/pb/serverpb/server_grpc.pb.go | 2 +- server/pkg/store/astra/app_store.go | 226 +++++++ server/pkg/store/astra/cluster_store.go | 121 ++++ server/pkg/store/astra/db.go | 526 ----------------- server/pkg/store/astra/db_test.go | 25 - server/pkg/store/astra/store.go | 48 ++ server/pkg/store/astra/type.go | 3 +- server/pkg/store/cassandra/db.go | 262 --------- server/pkg/store/cassandra/db_test.go | 25 - server/pkg/store/cassandra/type.go | 8 - server/pkg/store/store.go | 13 +- server/pkg/types/type.go | 2 + 17 files changed, 825 insertions(+), 1245 deletions(-) create mode 100644 server/pkg/store/astra/app_store.go create mode 100644 server/pkg/store/astra/cluster_store.go delete mode 100644 server/pkg/store/astra/db.go delete mode 100644 server/pkg/store/astra/db_test.go create mode 100644 server/pkg/store/astra/store.go delete mode 100644 server/pkg/store/cassandra/db.go delete mode 100644 server/pkg/store/cassandra/db_test.go delete mode 100644 server/pkg/store/cassandra/type.go diff --git a/proto/server.proto b/proto/server.proto index ae346ee8..5f724e37 100644 --- a/proto/server.proto +++ b/proto/server.proto @@ -40,14 +40,16 @@ message NewClusterRegistrationRequest { message NewClusterRegistrationResponse { StatusCode status = 1; string statusMessage = 2; + string clusterID = 3; } message UpdateClusterRegistrationRequest { - string clusterName = 1; - string agentEndpoint = 2; - string clientKeyData = 3; - string clientCertData = 4; - string clientCAChainData = 5; + string clusterID = 1; + string clusterName = 2; + string agentEndpoint = 3; + string clientKeyData = 4; + string clientCertData = 5; + string clientCAChainData = 6; } message UpdateClusterRegistrationResponse { @@ -56,7 +58,7 @@ message UpdateClusterRegistrationResponse { } message DeleteClusterRegistrationRequest { - string clusterName = 1; + string clusterID = 1; } message DeleteClusterRegistrationResponse { @@ -74,7 +76,7 @@ message GetClustersResponse { } message GetClusterAppsRequest { - string clusterName = 1; + string clusterID = 1; } message GetClusterAppsResponse { @@ -84,7 +86,7 @@ message GetClusterAppsResponse { } message GetClusterAppRequest { - string clusterName = 1; + string clusterID = 1; string appReleaseName = 2; } @@ -95,7 +97,7 @@ message GetClusterAppResponse { } message GetClusterAppLaunchConfigsRequest { - string clusterName = 1; + string clusterID = 1; } message GetClusterAppLaunchConfigsResponse { @@ -105,10 +107,11 @@ message GetClusterAppLaunchConfigsResponse { } message ClusterInfo { - string clusterName = 1; - string agentEndpoint = 2; - repeated ClusterAttribute attributes = 3; - repeated AppLaunchConfig appLaunchConfigs = 4; + string clusterID = 1; + string clusterName = 2; + string agentEndpoint = 3; + repeated ClusterAttribute attributes = 4; + repeated AppLaunchConfig appLaunchConfigs = 5; } message AppLaunchConfig { diff --git a/server/pkg/agent/agent_handler.go b/server/pkg/agent/agent_handler.go index 4e505eee..73b30693 100644 --- a/server/pkg/agent/agent_handler.go +++ b/server/pkg/agent/agent_handler.go @@ -20,8 +20,8 @@ func NewAgentHandler(serverStore store.ServerStore) *AgentHandler { return &AgentHandler{serverStore: serverStore, agents: map[string]*Agent{}} } -func (s *AgentHandler) AddAgent(orgId, clusterName string, agentCfg *Config) error { - clusterKey := getClusterAgentKey(orgId, clusterName) +func (s *AgentHandler) AddAgent(orgId, clusterID string, agentCfg *Config) error { + clusterKey := getClusterAgentKey(orgId, clusterID) if _, ok := s.agents[clusterKey]; ok { return nil } @@ -37,50 +37,50 @@ func (s *AgentHandler) AddAgent(orgId, clusterName string, agentCfg *Config) err return err } -func (s *AgentHandler) UpdateAgent(orgId, clusterName string, agentCfg *Config) error { - clusterKey := getClusterAgentKey(orgId, clusterName) +func (s *AgentHandler) UpdateAgent(orgId, clusterID string, agentCfg *Config) error { + clusterKey := getClusterAgentKey(orgId, clusterID) if _, ok := s.agents[clusterKey]; ok { - return s.AddAgent(orgId, clusterName, agentCfg) + return s.AddAgent(orgId, clusterID, agentCfg) } - s.RemoveAgent(orgId, clusterName) - return s.AddAgent(orgId, clusterName, agentCfg) + s.RemoveAgent(orgId, clusterID) + return s.AddAgent(orgId, clusterID, agentCfg) } -func (s *AgentHandler) GetAgent(orgId, clusterName string) (*Agent, error) { - agent := s.getAgent(orgId, clusterName) +func (s *AgentHandler) GetAgent(orgId, clusterID string) (*Agent, error) { + agent := s.getAgent(orgId, clusterID) if agent != nil { return agent, nil } - cfg, err := s.getAgentConfig(orgId, clusterName) + cfg, err := s.getAgentConfig(orgId, clusterID) if err != nil { return nil, err } - if err := s.AddAgent(orgId, clusterName, cfg); err != nil { + if err := s.AddAgent(orgId, clusterID, cfg); err != nil { return nil, err } - agent = s.getAgent(orgId, clusterName) + agent = s.getAgent(orgId, clusterID) if agent != nil { return agent, nil } return nil, fmt.Errorf("failed to get agent") } -func (s *AgentHandler) getAgent(orgId, clusterName string) *Agent { +func (s *AgentHandler) getAgent(orgId, clusterID string) *Agent { s.agentMutex.RLock() defer s.agentMutex.RUnlock() - clusterKey := getClusterAgentKey(orgId, clusterName) + clusterKey := getClusterAgentKey(orgId, clusterID) if agent, ok := s.agents[clusterKey]; ok && agent != nil { return agent } return nil } -func (s *AgentHandler) RemoveAgent(orgId, clusterName string) { - clusterKey := getClusterAgentKey(orgId, clusterName) +func (s *AgentHandler) RemoveAgent(orgId, clusterID string) { + clusterKey := getClusterAgentKey(orgId, clusterID) s.removeAgentEntry(clusterKey) } @@ -102,15 +102,15 @@ func (s *AgentHandler) Close() { } } -func (s *AgentHandler) getAgentConfig(orgId, clusterName string) (*Config, error) { +func (s *AgentHandler) getAgentConfig(orgId, clusterID string) (*Config, error) { agentCfg := &Config{} - endpoint, err := s.serverStore.GetClusterEndpoint(orgId, clusterName) + endpoint, err := s.serverStore.GetClusterEndpoint(clusterID) if err != nil { return nil, errors.WithMessage(err, "failed to get cluster") } agentCfg.Address = endpoint - certData, err := credential.GetClusterCerts(context.TODO(), orgId, clusterName) + certData, err := credential.GetClusterCerts(context.TODO(), orgId, clusterID) if err != nil { return nil, errors.WithMessage(err, "failed get cert from vault") } @@ -121,6 +121,6 @@ func (s *AgentHandler) getAgentConfig(orgId, clusterName string) (*Config, error return agentCfg, err } -func getClusterAgentKey(orgId, clusterName string) string { - return fmt.Sprintf("%s-%s", orgId, clusterName) +func getClusterAgentKey(orgId, clusterID string) string { + return fmt.Sprintf("%s-%s", orgId, clusterID) } diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index b37381b6..ce521e51 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -45,7 +45,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N }, nil } - err = s.serverStore.AddCluster(orgId, request.ClusterName, request.AgentEndpoint) + clusterID, err := s.serverStore.AddCluster(orgId, request.ClusterName, request.AgentEndpoint) if err != nil { s.log.Errorf("[%s] failed to store cluster %s to db, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ @@ -58,6 +58,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "register cluster success", + ClusterID: clusterID, }, nil } @@ -81,7 +82,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp Key: request.ClientCertData, } - if err := s.agentHandeler.UpdateAgent(orgId, request.ClusterName, agentConfig); err != nil { + if err := s.agentHandeler.UpdateAgent(orgId, request.ClusterID, agentConfig); err != nil { s.log.Errorf("[%s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, @@ -99,7 +100,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp }, nil } - err = s.serverStore.UpdateCluster(orgId, request.ClusterName, request.AgentEndpoint) + err = s.serverStore.UpdateCluster(orgId, request.ClusterID, request.ClusterName, request.AgentEndpoint) if err != nil { s.log.Errorf("[%s] failed to update cluster %s in db, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ @@ -127,27 +128,27 @@ func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverp }, nil } - s.log.Infof("[%s] Delete cluster registration request for cluster %s recieved", orgId, request.ClusterName) - s.agentHandeler.RemoveAgent(orgId, request.ClusterName) - err := credential.DeleteClusterCerts(ctx, orgId, request.ClusterName) + s.log.Infof("[%s] Delete cluster registration request for cluster %s recieved", orgId, request.ClusterID) + s.agentHandeler.RemoveAgent(orgId, request.ClusterID) + err := credential.DeleteClusterCerts(ctx, orgId, request.ClusterID) if err != nil { - s.log.Errorf("[%s] failed to delete cert in vault for cluster %s, %v", orgId, request.ClusterName, err) + s.log.Errorf("[%s] failed to delete cert in vault for cluster %s, %v", orgId, request.ClusterID, err) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed delete register cluster", }, nil } - err = s.serverStore.DeleteCluster(orgId, request.ClusterName) + err = s.serverStore.DeleteCluster(orgId, request.ClusterID) if err != nil { - s.log.Errorf("[%s] failed to delete cluster %s from db, %v", orgId, request.ClusterName, err) + s.log.Errorf("[%s] failed to delete cluster %s from db, %v", orgId, request.ClusterID, err) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed delete register cluster", }, nil } - s.log.Infof("[%s] Delete cluster registration request for cluster %s successful", orgId, request.ClusterName) + s.log.Infof("[%s] Delete cluster registration request for cluster %s successful", orgId, request.ClusterID) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "cluster deletion success", diff --git a/server/pkg/handler/handle_agent.go b/server/pkg/handler/handle_agent.go index 86315259..9e120697 100644 --- a/server/pkg/handler/handle_agent.go +++ b/server/pkg/handler/handle_agent.go @@ -42,7 +42,7 @@ func (a *APIHandler) PostAgentEndpoint(c *gin.Context) { return } - err = a.serverStore.AddCluster(customerId, customerId, endpoint) + _, err = a.serverStore.AddCluster(customerId, customerId, endpoint) if err != nil { a.setFailedResponse(c, "failed to store data", nil) a.log.Error("failed to get db session", err) diff --git a/server/pkg/pb/serverpb/server.pb.go b/server/pkg/pb/serverpb/server.pb.go index 9986e2fe..0085ede5 100644 --- a/server/pkg/pb/serverpb/server.pb.go +++ b/server/pkg/pb/serverpb/server.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.30.0 -// protoc v4.23.0 +// protoc v3.12.4 // source: server.proto package serverpb @@ -158,6 +158,7 @@ type NewClusterRegistrationResponse struct { Status StatusCode `protobuf:"varint,1,opt,name=status,proto3,enum=serverpb.StatusCode" json:"status,omitempty"` StatusMessage string `protobuf:"bytes,2,opt,name=statusMessage,proto3" json:"statusMessage,omitempty"` + ClusterID string `protobuf:"bytes,3,opt,name=clusterID,proto3" json:"clusterID,omitempty"` } func (x *NewClusterRegistrationResponse) Reset() { @@ -206,16 +207,24 @@ func (x *NewClusterRegistrationResponse) GetStatusMessage() string { return "" } +func (x *NewClusterRegistrationResponse) GetClusterID() string { + if x != nil { + return x.ClusterID + } + return "" +} + type UpdateClusterRegistrationRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - AgentEndpoint string `protobuf:"bytes,2,opt,name=agentEndpoint,proto3" json:"agentEndpoint,omitempty"` - ClientKeyData string `protobuf:"bytes,3,opt,name=clientKeyData,proto3" json:"clientKeyData,omitempty"` - ClientCertData string `protobuf:"bytes,4,opt,name=clientCertData,proto3" json:"clientCertData,omitempty"` - ClientCAChainData string `protobuf:"bytes,5,opt,name=clientCAChainData,proto3" json:"clientCAChainData,omitempty"` + ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` + ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + AgentEndpoint string `protobuf:"bytes,3,opt,name=agentEndpoint,proto3" json:"agentEndpoint,omitempty"` + ClientKeyData string `protobuf:"bytes,4,opt,name=clientKeyData,proto3" json:"clientKeyData,omitempty"` + ClientCertData string `protobuf:"bytes,5,opt,name=clientCertData,proto3" json:"clientCertData,omitempty"` + ClientCAChainData string `protobuf:"bytes,6,opt,name=clientCAChainData,proto3" json:"clientCAChainData,omitempty"` } func (x *UpdateClusterRegistrationRequest) Reset() { @@ -250,6 +259,13 @@ func (*UpdateClusterRegistrationRequest) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{2} } +func (x *UpdateClusterRegistrationRequest) GetClusterID() string { + if x != nil { + return x.ClusterID + } + return "" +} + func (x *UpdateClusterRegistrationRequest) GetClusterName() string { if x != nil { return x.ClusterName @@ -345,7 +361,7 @@ type DeleteClusterRegistrationRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` } func (x *DeleteClusterRegistrationRequest) Reset() { @@ -380,9 +396,9 @@ func (*DeleteClusterRegistrationRequest) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{4} } -func (x *DeleteClusterRegistrationRequest) GetClusterName() string { +func (x *DeleteClusterRegistrationRequest) GetClusterID() string { if x != nil { - return x.ClusterName + return x.ClusterID } return "" } @@ -548,7 +564,7 @@ type GetClusterAppsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` } func (x *GetClusterAppsRequest) Reset() { @@ -583,9 +599,9 @@ func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{8} } -func (x *GetClusterAppsRequest) GetClusterName() string { +func (x *GetClusterAppsRequest) GetClusterID() string { if x != nil { - return x.ClusterName + return x.ClusterID } return "" } @@ -658,7 +674,7 @@ type GetClusterAppRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` AppReleaseName string `protobuf:"bytes,2,opt,name=appReleaseName,proto3" json:"appReleaseName,omitempty"` } @@ -694,9 +710,9 @@ func (*GetClusterAppRequest) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{10} } -func (x *GetClusterAppRequest) GetClusterName() string { +func (x *GetClusterAppRequest) GetClusterID() string { if x != nil { - return x.ClusterName + return x.ClusterID } return "" } @@ -776,7 +792,7 @@ type GetClusterAppLaunchConfigsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` } func (x *GetClusterAppLaunchConfigsRequest) Reset() { @@ -811,9 +827,9 @@ func (*GetClusterAppLaunchConfigsRequest) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{12} } -func (x *GetClusterAppLaunchConfigsRequest) GetClusterName() string { +func (x *GetClusterAppLaunchConfigsRequest) GetClusterID() string { if x != nil { - return x.ClusterName + return x.ClusterID } return "" } @@ -886,10 +902,11 @@ type ClusterInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - AgentEndpoint string `protobuf:"bytes,2,opt,name=agentEndpoint,proto3" json:"agentEndpoint,omitempty"` - Attributes []*ClusterAttribute `protobuf:"bytes,3,rep,name=attributes,proto3" json:"attributes,omitempty"` - AppLaunchConfigs []*AppLaunchConfig `protobuf:"bytes,4,rep,name=appLaunchConfigs,proto3" json:"appLaunchConfigs,omitempty"` + ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` + ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + AgentEndpoint string `protobuf:"bytes,3,opt,name=agentEndpoint,proto3" json:"agentEndpoint,omitempty"` + Attributes []*ClusterAttribute `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"` + AppLaunchConfigs []*AppLaunchConfig `protobuf:"bytes,5,rep,name=appLaunchConfigs,proto3" json:"appLaunchConfigs,omitempty"` } func (x *ClusterInfo) Reset() { @@ -924,6 +941,13 @@ func (*ClusterInfo) Descriptor() ([]byte, []int) { return file_server_proto_rawDescGZIP(), []int{14} } +func (x *ClusterInfo) GetClusterID() string { + if x != nil { + return x.ClusterID + } + return "" +} + func (x *ClusterInfo) GetClusterName() string { if x != nil { return x.ClusterName @@ -2034,172 +2058,192 @@ var file_server_proto_rawDesc = []byte{ 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x43, 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x74, - 0x0a, 0x1e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, - 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x65, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x2c, 0x0a, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x77, 0x0a, - 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x44, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, 0x0a, 0x21, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x65, 0x6e, 0x74, 0x43, 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x92, + 0x01, 0x0a, 0x1e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x13, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x39, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa8, 0x01, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x0a, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x22, 0x84, 0x02, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x24, + 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, + 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x11, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x41, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x77, 0x0a, 0x21, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x40, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x22, 0x77, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x14, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x35, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x22, 0xa8, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x5c, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x61, 0x70, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x22, 0xbd, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xf6, 0x01, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x45, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x0a, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x61, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x60, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x45, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x22, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x74, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x61, + 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, + 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x22, 0x3a, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 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, 0x22, + 0xa0, 0x04, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x70, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x13, 0x41, 0x64, 0x64, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, - 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xd8, 0x01, 0x0a, 0x0b, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x45, 0x0a, - 0x10, 0x61, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x10, 0x61, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, - 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x3a, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 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, 0x22, 0xa0, 0x04, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, - 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, - 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, - 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, - 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, - 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, - 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x53, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, @@ -2207,181 +2251,166 @@ var file_server_proto_rawDesc = []byte{ 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x52, 0x09, 0x61, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x69, - 0x0a, 0x13, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x15, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, 0x0a, 0x09, 0x61, - 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x09, 0x61, 0x70, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x4b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6c, 0x0a, - 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x75, 0x65, 0x73, 0x52, 0x09, 0x61, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x6b, + 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa1, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, - 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xa4, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, - 0x0a, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x61, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0xd2, 0x03, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4b, 0x0a, 0x15, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6c, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, - 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, - 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, - 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x60, 0x0a, 0x0e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, - 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, - 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x4e, - 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, - 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, - 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xf5, - 0x08, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x16, 0x4e, 0x65, 0x77, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, - 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xa1, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x09, + 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x14, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x22, 0xd2, 0x03, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, + 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x60, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, + 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, + 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xf5, 0x08, 0x0a, 0x06, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x76, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2b, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, - 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x55, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, - 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x19, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0b, 0x5a, 0x09, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x41, 0x64, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, + 0x70, 0x70, 0x52, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x12, 0x1f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, + 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x4f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, + 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0x0b, 0x5a, 0x09, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/server/pkg/pb/serverpb/server_grpc.pb.go b/server/pkg/pb/serverpb/server_grpc.pb.go index 5f82012b..a7afccab 100644 --- a/server/pkg/pb/serverpb/server_grpc.pb.go +++ b/server/pkg/pb/serverpb/server_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.23.0 +// - protoc v3.12.4 // source: server.proto package serverpb diff --git a/server/pkg/store/astra/app_store.go b/server/pkg/store/astra/app_store.go new file mode 100644 index 00000000..a4dba753 --- /dev/null +++ b/server/pkg/store/astra/app_store.go @@ -0,0 +1,226 @@ +package astra + +import ( + "fmt" + "time" + + "github.com/google/uuid" + "github.com/kube-tarian/kad/server/pkg/types" + "github.com/stargate/stargate-grpc-go-client/stargate/pkg/client" + pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" +) + +const ( + createAppConfigQuery string = "INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );" + updateAppConfigQuery string = "UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';" + deleteAppConfigQuery string = "DELETE FROM %s.app_config WHERE name='%s' AND version='%s';" + getAppConfigQuery string = "SELECT name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config WHERE name='%s' AND version='%s';" + getAllAppConfigsQuery string = "SELECT name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config;" + appConfigExistanceCheckQuery string = "SELECT name, version FROM %s.app_config WHERE name='%s' AND version ='%s';" +) + +func (a *AstraServerStore) AddOrUpdateApp(config *types.StoreAppConfig) error { + appExists, err := a.isAppExistsInStore(config.AppName, config.Version) + if err != nil { + return fmt.Errorf("failed to check app config existance : %w", err) + } + + var query *pb.Query + if appExists { + query = &pb.Query{ + Cql: fmt.Sprintf(updateAppConfigQuery, + a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version), + } + } else { + query = &pb.Query{ + Cql: fmt.Sprintf(createAppConfigQuery, + a.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String()), + } + } + + _, err = a.c.Session().ExecuteQuery(query) + if err != nil { + return fmt.Errorf("failed to insert/update the app config into the app_config table : %w", err) + } + + return nil +} + +func (a *AstraServerStore) DeleteAppInStore(name, version string) error { + + deleteQuery := &pb.Query{ + Cql: fmt.Sprintf( + deleteAppConfigQuery, + a.keyspace, name, version), + } + + _, err := a.c.Session().ExecuteQuery(deleteQuery) + if err != nil { + return fmt.Errorf("failed to initialise db: %w", err) + } + + return nil +} + +func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { + + selectQuery := &pb.Query{ + Cql: fmt.Sprintf(getAppConfigQuery, + a.keyspace, name, version), + } + + response, err := a.c.Session().ExecuteQuery(selectQuery) + if err != nil { + return nil, fmt.Errorf("failed to initialise db: %w", err) + } + + result := response.GetResultSet() + + if len(result.Rows) == 0 { + return nil, fmt.Errorf("app: %s not found", name) + } + + config, err := toAppConfig(result.Rows[0]) + if err != nil { + return nil, err + } + + return config, nil +} + +func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { + + selectQuery := &pb.Query{ + Cql: fmt.Sprintf(getAllAppConfigsQuery, + a.keyspace), + } + + response, err := a.c.Session().ExecuteQuery(selectQuery) + if err != nil { + return nil, fmt.Errorf("failed to initialise db: %w", err) + } + + result := response.GetResultSet() + + if len(result.Rows) == 0 { + return nil, fmt.Errorf("app config's not found") + } + + var appConfigs []types.AppConfig + for _, row := range result.Rows { + config, err := toAppConfig(row) + if err != nil { + return nil, err + } + appConfigs = append(appConfigs, *config) + } + + return &appConfigs, nil +} + +func toAppConfig(row *pb.Row) (*types.AppConfig, error) { + + cqlAppName, err := client.ToString(row.Values[0]) + if err != nil { + return nil, fmt.Errorf("failed to get app name: %w", err) + } + cqlChartName, err := client.ToString(row.Values[1]) + if err != nil { + return nil, fmt.Errorf("failed to get chart name: %w", err) + } + cqlRepoName, err := client.ToString(row.Values[2]) + if err != nil { + return nil, fmt.Errorf("failed to get repo name: %w", err) + } + cqlRepoURL, err := client.ToString(row.Values[3]) + if err != nil { + return nil, fmt.Errorf("failed to get repo url: %w", err) + } + cqlNamespace, err := client.ToString(row.Values[4]) + if err != nil { + return nil, fmt.Errorf("failed to get Namespace: %w", err) + } + cqlVersion, err := client.ToString(row.Values[5]) + if err != nil { + return nil, fmt.Errorf("failed to get version: %w", err) + } + cqlCreateNamespace, err := client.ToBoolean(row.Values[6]) + if err != nil { + return nil, fmt.Errorf("failed to get Create Namespace: %w", err) + } + cqlPrivilegedNamespace, err := client.ToBoolean(row.Values[7]) + if err != nil { + return nil, fmt.Errorf("failed to get Privileged Namespace: %w", err) + } + cqlLaunchUiUrl, err := client.ToString(row.Values[8]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui url: %w", err) + } + cqlLaunchUiRedirectUrl, err := client.ToString(row.Values[9]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) + } + cqlCategory, err := client.ToString(row.Values[10]) + if err != nil { + return nil, fmt.Errorf("failed to get category: %w", err) + } + cqlIcon, err := client.ToString(row.Values[11]) + if err != nil { + return nil, fmt.Errorf("failed to get icon: %w", err) + } + cqlDescription, err := client.ToString(row.Values[12]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) + } + cqlLaunchUiValues, err := client.ToString(row.Values[13]) + if err != nil { + return nil, fmt.Errorf("failed to get launch ui values: %w", err) + } + cqlOverrideValues, err := client.ToString(row.Values[14]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } + cqlReleaseNameValues, err := client.ToString(row.Values[15]) + if err != nil { + return nil, fmt.Errorf("failed to get override values: %w", err) + } + + config := &types.AppConfig{ + Name: cqlAppName, + ChartName: cqlChartName, + RepoName: cqlRepoName, + RepoURL: cqlRepoURL, + Namespace: cqlNamespace, + Version: cqlVersion, + CreateNamespace: cqlCreateNamespace, + PrivilegedNamespace: cqlPrivilegedNamespace, + LaunchUIURL: cqlLaunchUiUrl, + LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, + Category: cqlCategory, + Icon: cqlIcon, + Description: cqlDescription, + LaunchUIValues: cqlLaunchUiValues, + OverrideValues: cqlOverrideValues, + ReleaseName: cqlReleaseNameValues, + } + return config, nil +} + +func (a *AstraServerStore) isAppExistsInStore(name, version string) (bool, error) { + selectClusterQuery := &pb.Query{ + Cql: fmt.Sprintf(appConfigExistanceCheckQuery, + a.keyspace, name, version), + } + + response, err := a.c.Session().ExecuteQuery(selectClusterQuery) + if err != nil { + return false, fmt.Errorf("failed to initialise db: %w", err) + } + + result := response.GetResultSet() + if len(result.Rows) > 0 { + return true, nil + } + + return false, nil +} diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go new file mode 100644 index 00000000..2cdac430 --- /dev/null +++ b/server/pkg/store/astra/cluster_store.go @@ -0,0 +1,121 @@ +package astra + +import ( + "fmt" + + "github.com/gocql/gocql" + "github.com/kube-tarian/kad/server/pkg/types" + "github.com/stargate/stargate-grpc-go-client/stargate/pkg/client" + pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" +) + +const ( + insertClusterQuery = "INSERT INTO %s.capten_clusters (cluster_id, org_id, cluster_name, endpoint) VALUES (%s, %s, '%s', '%s');" + updateClusterQuery = "UPDATE %s.capten_clusters set clusterName ='%s' endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" + deleteClusterQuery = "DELETE FROM %s.capten_clusters WHERE cluster_id=%s AND org_id=%s;" + getClusterEndpointQuery = "SELECT endpoint FROM %s.capten_clusters WHERE cluster_id=%s;" + getClustersForOrgQuery = "SELECT * FROM %s.capten_clusters WHERE org_id=%s ;" +) + +func (a *AstraServerStore) AddCluster(orgID, clusterName, endpoint string) (string, error) { + clusterID := gocql.TimeUUID() + q := &pb.Query{ + Cql: fmt.Sprintf(insertClusterQuery, a.keyspace, clusterID, orgID, clusterName, endpoint), + } + + _, err := a.c.Session().ExecuteQuery(q) + if err != nil { + return "", fmt.Errorf("failed store cluster details %w", err) + } + return clusterID.String(), nil +} + +func (a *AstraServerStore) UpdateCluster(orgID, clusterID, clusterName, endpoint string) error { + q := &pb.Query{ + Cql: fmt.Sprintf(updateClusterQuery, a.keyspace, clusterName, endpoint, clusterID, orgID), + } + + _, err := a.c.Session().ExecuteQuery(q) + if err != nil { + return fmt.Errorf("failed to update cluster info: %w", err) + } + return nil +} + +func (a *AstraServerStore) DeleteCluster(orgID, clusterID string) error { + q := &pb.Query{ + Cql: fmt.Sprintf(deleteClusterQuery, a.keyspace, clusterID, orgID), + } + + _, err := a.c.Session().ExecuteQuery(q) + if err != nil { + return fmt.Errorf("failed to update cluster info: %w", err) + } + return nil +} + +func (a *AstraServerStore) GetClusterEndpoint(clusterID string) (string, error) { + q := &pb.Query{ + Cql: fmt.Sprintf(getClusterEndpointQuery, a.keyspace, clusterID), + } + + response, err := a.c.Session().ExecuteQuery(q) + if err != nil { + return "", err + } + result := response.GetResultSet() + + if len(result.Rows) == 0 { + return "", fmt.Errorf("cluster: %s not found", clusterID) + } + + endpoint, err := client.ToString(result.Rows[0].Values[0]) + if err != nil { + return "", fmt.Errorf("cluster: %s unable to convert endpoint to string", clusterID) + } + return endpoint, nil +} + +func (a *AstraServerStore) GetClusters(orgID string) ([]types.ClusterDetails, error) { + q := &pb.Query{ + Cql: fmt.Sprintf(getClustersForOrgQuery, a.keyspace, orgID), + } + + response, err := a.c.Session().ExecuteQuery(q) + if err != nil { + return nil, fmt.Errorf("failed to get cluster info from db: %w", err) + } + + result := response.GetResultSet() + var clusterDetails []types.ClusterDetails + for _, row := range result.Rows { + cqlOrgID, err := client.ToString(row.Values[0]) + if err != nil { + return nil, fmt.Errorf("failed to get cluster name: %w", err) + } + + cqlClusterID, err := client.ToString(row.Values[0]) + if err != nil { + return nil, fmt.Errorf("failed to get cluster name: %w", err) + } + + cqlClusterName, err := client.ToString(row.Values[0]) + if err != nil { + return nil, fmt.Errorf("failed to get cluster name: %w", err) + } + + cqlEndpoint, err := client.ToString(row.Values[1]) + if err != nil { + return nil, fmt.Errorf("failed to get cluster endpoint: %w", err) + } + + clusterDetails = append(clusterDetails, + types.ClusterDetails{ + OrgID: cqlOrgID, + ClusterID: cqlClusterID, + ClusterName: cqlClusterName, + Endpoint: cqlEndpoint, + }) + } + return clusterDetails, nil +} diff --git a/server/pkg/store/astra/db.go b/server/pkg/store/astra/db.go deleted file mode 100644 index ac0316e6..00000000 --- a/server/pkg/store/astra/db.go +++ /dev/null @@ -1,526 +0,0 @@ -package astra - -import ( - "fmt" - "strings" - "time" - - astraclient "github.com/kube-tarian/kad/server/pkg/astra-client" - "github.com/kube-tarian/kad/server/pkg/types" - - "github.com/gocql/gocql" - "github.com/google/uuid" - "github.com/stargate/stargate-grpc-go-client/stargate/pkg/client" - pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" -) - -const ( - createAppConfigQuery string = "INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );" - updateAppConfigQuery string = "UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';" - deleteAppConfigQuery string = "DELETE FROM %s.app_config WHERE name='%s' AND version='%s';" - getAppConfigQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config WHERE name='%s' AND version='%s';" - getAllAppConfigsQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values, release_name FROM %s.app_config;" - appConfigExistanceCheckQuery string = "Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';" -) - -type AstraServerStore struct { - c *astraclient.Client - keyspace string -} - -func NewStore() (*AstraServerStore, error) { - a := &AstraServerStore{} - err := a.initClient() - if err != nil { - return nil, fmt.Errorf("failed to connect to astra db, %w", err) - } - a.keyspace = a.c.Keyspace() - return a, nil -} - -func (a *AstraServerStore) initClient() error { - var err error - a.c, err = astraclient.NewClient() - return err -} - -func (a *AstraServerStore) InitializeDb() error { - initDbQueries := []string{ - fmt.Sprintf(createClusterEndpointTableQuery, a.keyspace), - fmt.Sprintf(createOrgClusterTableQuery, a.keyspace), - } - - for _, query := range initDbQueries { - createQuery := &pb.Query{ - Cql: query, - } - - _, err := a.c.Session().ExecuteQuery(createQuery) - if err != nil { - return fmt.Errorf("failed to initialise db: %w", err) - } - } - - return nil -} - -func (a *AstraServerStore) GetClusterEndpoint(orgID, clusterName string) (string, error) { - clusterId, err := a.getClusterID(orgID, clusterName) - if err != nil { - return "", fmt.Errorf("failed to get cluster endpoint: %w", err) - } - - endpointQuery := &pb.Query{ - Cql: fmt.Sprintf("Select endpoint FROM %s.cluster_endpoint WHERE cluster_id=%s;", - a.keyspace, clusterId), - } - - response, err := a.c.Session().ExecuteQuery(endpointQuery) - if err != nil { - return "", err - } - result := response.GetResultSet() - - if len(result.Rows) == 0 { - return "", fmt.Errorf("cluster: %s not found", clusterName) - } - - endpoint, err := client.ToString(result.Rows[0].Values[0]) - if err != nil { - return "", fmt.Errorf("cluster: %s unable to convert endpoint to string", clusterName) - } - - return endpoint, nil -} - -func (a *AstraServerStore) AddCluster(orgId, clusterName, endpoint string) error { - clusterExists, err := a.clusterEntryExists(orgId) - if err != nil { - return fmt.Errorf("failed to store cluster details: %w", err) - } - - clusterId := gocql.TimeUUID() - var batchQueries []*pb.BatchQuery - if clusterExists { - batchQueries = append(batchQueries, - &pb.BatchQuery{ - Cql: fmt.Sprintf( - "UPDATE %s.org_cluster SET cluster_ids= cluster_ids + {%s} WHERE org_id=%s;", - a.keyspace, clusterId.String(), orgId), - }) - } else { - batchQueries = append(batchQueries, - &pb.BatchQuery{ - Cql: fmt.Sprintf("INSERT INTO %s.org_cluster(org_id, cluster_ids) VALUES (%s, {%s});", - a.keyspace, orgId, clusterId), - }) - } - - batchQueries = append(batchQueries, - &pb.BatchQuery{ - Cql: fmt.Sprintf("INSERT INTO %s.cluster_endpoint (cluster_id, org_id, cluster_name, endpoint) VALUES (%s, %s, '%s', '%s');", - a.keyspace, clusterId, orgId, clusterName, endpoint), - }) - - batch := &pb.Batch{ - Type: pb.Batch_LOGGED, - Queries: batchQueries, - } - - _, err = a.c.Session().ExecuteBatch(batch) - if err != nil { - return fmt.Errorf("failed store cluster details %w", err) - } - - return nil -} - -func (a *AstraServerStore) clusterEntryExists(orgID string) (bool, error) { - selectClusterQuery := &pb.Query{ - Cql: fmt.Sprintf("Select cluster_ids FROM %s.org_cluster WHERE org_id=%s ;", - a.keyspace, orgID), - } - - response, err := a.c.Session().ExecuteQuery(selectClusterQuery) - if err != nil { - return false, fmt.Errorf("failed to initialise db: %w", err) - } - - result := response.GetResultSet() - if len(result.Rows) > 0 { - return true, nil - } - - return false, nil -} - -func (a *AstraServerStore) UpdateCluster(orgID, clusterName, endpoint string) error { - clusterId, err := a.getClusterID(orgID, clusterName) - if err != nil { - return fmt.Errorf("failed to update the cluster info: %w", err) - } - - updateQuery := &pb.Query{ - Cql: fmt.Sprintf( - "UPDATE %s.cluster_endpoint set endpoint='%s' WHERE cluster_id=%s AND org_id=%s", - a.keyspace, endpoint, clusterId, orgID), - } - - _, err = a.c.Session().ExecuteQuery(updateQuery) - if err != nil { - return fmt.Errorf("failed to update cluster info: %w", err) - } - - return nil -} - -func (a *AstraServerStore) DeleteCluster(orgID, clusterName string) error { - clusterId, err := a.getClusterID(orgID, clusterName) - if err != nil { - return fmt.Errorf("failed to delete cluster info: %w", err) - } - - batch := &pb.Batch{ - Type: pb.Batch_LOGGED, - Queries: []*pb.BatchQuery{ - { - Cql: fmt.Sprintf( - "DELETE FROM %s.cluster_endpoint WHERE cluster_id=%s ;", - a.keyspace, clusterId), - }, - { - Cql: fmt.Sprintf( - "UPDATE %s.org_cluster set cluster_ids = cluster_ids - {%s} WHERE org_id=%s ;", - a.keyspace, clusterId, orgID), - }, - }, - } - - _, err = a.c.Session().ExecuteBatch(batch) - if err != nil { - return fmt.Errorf("failed delete cluster details %w", err) - } - - return nil -} - -func (a *AstraServerStore) GetClusters(orgID string) ([]types.ClusterDetails, error) { - selectClusterIdsQuery := &pb.Query{ - Cql: fmt.Sprintf("Select cluster_ids FROM %s.org_cluster WHERE org_id=%s ;", - a.keyspace, orgID), - } - - response, err := a.c.Session().ExecuteQuery(selectClusterIdsQuery) - if err != nil { - return nil, fmt.Errorf("failed to get cluster info from db: %w", err) - } - - result := response.GetResultSet() - if len(result.Rows) == 0 { - return []types.ClusterDetails{}, nil - } - - clusterIds, err := client.ToSet(result.Rows[0].Values[0], UuidSetSpec) - if err != nil { - return nil, err - } - - var clusterIdStrs []string - for _, clusterId := range clusterIds.([]interface{}) { - clusterIdStrs = append(clusterIdStrs, clusterId.(*uuid.UUID).String()) - } - - selectClustersQuery := &pb.Query{ - Cql: fmt.Sprintf("Select cluster_name, endpoint FROM %s.cluster_endpoint WHERE cluster_id in (%s);", - a.keyspace, strings.Join(clusterIdStrs, ",")), - } - - response, err = a.c.Session().ExecuteQuery(selectClustersQuery) - if err != nil { - return nil, fmt.Errorf("failed to get cluster endpoint info from db: %w", err) - } - - result = response.GetResultSet() - var clusterDetails []types.ClusterDetails - for _, row := range result.Rows { - cqlClusterName, err := client.ToString(row.Values[0]) - if err != nil { - return nil, fmt.Errorf("failed to get cluster name: %w", err) - } - - cqlEndpoint, err := client.ToString(row.Values[1]) - if err != nil { - return nil, fmt.Errorf("failed to get cluster endpoint: %w", err) - } - - clusterDetails = append(clusterDetails, - types.ClusterDetails{ - ClusterName: cqlClusterName, - Endpoint: cqlEndpoint, - }) - } - - return clusterDetails, nil -} - -func (a *AstraServerStore) getClusterID(orgID, clusterName string) (string, error) { - selectClusterIdsQuery := &pb.Query{ - Cql: fmt.Sprintf("Select cluster_ids FROM %s.org_cluster WHERE org_id=%s ;", - a.keyspace, orgID), - } - - response, err := a.c.Session().ExecuteQuery(selectClusterIdsQuery) - if err != nil { - return "", fmt.Errorf("failed to get cluster info from db: %w", err) - } - - result := response.GetResultSet() - if len(result.Rows) == 0 { - return "", fmt.Errorf("no cluster found for orgId %s", orgID) - } - - clusterIds, err := client.ToSet(result.Rows[0].Values[0], UuidSetSpec) - if err != nil { - return "", err - } - - var clusterIdStrs []string - for _, clusterId := range clusterIds.([]interface{}) { - clusterIdStrs = append(clusterIdStrs, clusterId.(*uuid.UUID).String()) - } - - selectClustersQuery := &pb.Query{ - Cql: fmt.Sprintf("Select cluster_id, cluster_name FROM %s.cluster_endpoint WHERE cluster_id in (%s);", - a.keyspace, strings.Join(clusterIdStrs, ",")), - } - - response, err = a.c.Session().ExecuteQuery(selectClustersQuery) - if err != nil { - return "", fmt.Errorf("failed to get cluster endpoint info from db: %w", err) - } - - result = response.GetResultSet() - for _, row := range result.Rows { - cqlClusterId, err := client.ToUUID(row.Values[0]) - if err != nil { - return "", fmt.Errorf("failed to get cluster uuid: %w", err) - } - - cqlClusterName, err := client.ToString(row.Values[1]) - if err != nil { - return "", fmt.Errorf("failed to get cluster name: %w", err) - } - - if cqlClusterName == clusterName { - return cqlClusterId.String(), nil - } - } - - return "", fmt.Errorf("cluster not found") -} - -func (a *AstraServerStore) isAppExistsInStore(name, version string) (bool, error) { - selectClusterQuery := &pb.Query{ - Cql: fmt.Sprintf(appConfigExistanceCheckQuery, - a.keyspace, name, version), - } - - response, err := a.c.Session().ExecuteQuery(selectClusterQuery) - if err != nil { - return false, fmt.Errorf("failed to initialise db: %w", err) - } - - result := response.GetResultSet() - if len(result.Rows) > 0 { - return true, nil - } - - return false, nil -} - -func (a *AstraServerStore) AddOrUpdateApp(config *types.StoreAppConfig) error { - appExists, err := a.isAppExistsInStore(config.AppName, config.Version) - if err != nil { - return fmt.Errorf("failed to check app config existance : %w", err) - } - - var query *pb.Query - if appExists { - query = &pb.Query{ - Cql: fmt.Sprintf(updateAppConfigQuery, - a.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version), - } - } else { - query = &pb.Query{ - Cql: fmt.Sprintf(createAppConfigQuery, - a.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String()), - } - } - - _, err = a.c.Session().ExecuteQuery(query) - if err != nil { - return fmt.Errorf("failed to insert/update the app config into the app_config table : %w", err) - } - - return nil -} - -func (a *AstraServerStore) DeleteAppInStore(name, version string) error { - - deleteQuery := &pb.Query{ - Cql: fmt.Sprintf( - deleteAppConfigQuery, - a.keyspace, name, version), - } - - _, err := a.c.Session().ExecuteQuery(deleteQuery) - if err != nil { - return fmt.Errorf("failed to initialise db: %w", err) - } - - return nil -} - -func (a *AstraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { - - selectQuery := &pb.Query{ - Cql: fmt.Sprintf(getAppConfigQuery, - a.keyspace, name, version), - } - - response, err := a.c.Session().ExecuteQuery(selectQuery) - if err != nil { - return nil, fmt.Errorf("failed to initialise db: %w", err) - } - - result := response.GetResultSet() - - if len(result.Rows) == 0 { - return nil, fmt.Errorf("app: %s not found", name) - } - - config, err := toAppConfig(result.Rows[0]) - if err != nil { - return nil, err - } - - return config, nil -} - -func (a *AstraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { - - selectQuery := &pb.Query{ - Cql: fmt.Sprintf(getAllAppConfigsQuery, - a.keyspace), - } - - response, err := a.c.Session().ExecuteQuery(selectQuery) - if err != nil { - return nil, fmt.Errorf("failed to initialise db: %w", err) - } - - result := response.GetResultSet() - - if len(result.Rows) == 0 { - return nil, fmt.Errorf("app config's not found") - } - - var appConfigs []types.AppConfig - for _, row := range result.Rows { - config, err := toAppConfig(row) - if err != nil { - return nil, err - } - appConfigs = append(appConfigs, *config) - } - - return &appConfigs, nil -} - -func toAppConfig(row *pb.Row) (*types.AppConfig, error) { - - cqlAppName, err := client.ToString(row.Values[0]) - if err != nil { - return nil, fmt.Errorf("failed to get app name: %w", err) - } - cqlChartName, err := client.ToString(row.Values[1]) - if err != nil { - return nil, fmt.Errorf("failed to get chart name: %w", err) - } - cqlRepoName, err := client.ToString(row.Values[2]) - if err != nil { - return nil, fmt.Errorf("failed to get repo name: %w", err) - } - cqlRepoURL, err := client.ToString(row.Values[3]) - if err != nil { - return nil, fmt.Errorf("failed to get repo url: %w", err) - } - cqlNamespace, err := client.ToString(row.Values[4]) - if err != nil { - return nil, fmt.Errorf("failed to get Namespace: %w", err) - } - cqlVersion, err := client.ToString(row.Values[5]) - if err != nil { - return nil, fmt.Errorf("failed to get version: %w", err) - } - cqlCreateNamespace, err := client.ToBoolean(row.Values[6]) - if err != nil { - return nil, fmt.Errorf("failed to get Create Namespace: %w", err) - } - cqlPrivilegedNamespace, err := client.ToBoolean(row.Values[7]) - if err != nil { - return nil, fmt.Errorf("failed to get Privileged Namespace: %w", err) - } - cqlLaunchUiUrl, err := client.ToString(row.Values[8]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui url: %w", err) - } - cqlLaunchUiRedirectUrl, err := client.ToString(row.Values[9]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) - } - cqlCategory, err := client.ToString(row.Values[10]) - if err != nil { - return nil, fmt.Errorf("failed to get category: %w", err) - } - cqlIcon, err := client.ToString(row.Values[11]) - if err != nil { - return nil, fmt.Errorf("failed to get icon: %w", err) - } - cqlDescription, err := client.ToString(row.Values[12]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui redirect url: %w", err) - } - cqlLaunchUiValues, err := client.ToString(row.Values[13]) - if err != nil { - return nil, fmt.Errorf("failed to get launch ui values: %w", err) - } - cqlOverrideValues, err := client.ToString(row.Values[14]) - if err != nil { - return nil, fmt.Errorf("failed to get override values: %w", err) - } - cqlReleaseNameValues, err := client.ToString(row.Values[15]) - if err != nil { - return nil, fmt.Errorf("failed to get override values: %w", err) - } - - config := &types.AppConfig{ - Name: cqlAppName, - ChartName: cqlChartName, - RepoName: cqlRepoName, - RepoURL: cqlRepoURL, - Namespace: cqlNamespace, - Version: cqlVersion, - CreateNamespace: cqlCreateNamespace, - PrivilegedNamespace: cqlPrivilegedNamespace, - LaunchUIURL: cqlLaunchUiUrl, - LaunchUIRedirectURL: cqlLaunchUiRedirectUrl, - Category: cqlCategory, - Icon: cqlIcon, - Description: cqlDescription, - LaunchUIValues: cqlLaunchUiValues, - OverrideValues: cqlOverrideValues, - ReleaseName: cqlReleaseNameValues, - } - return config, nil -} diff --git a/server/pkg/store/astra/db_test.go b/server/pkg/store/astra/db_test.go deleted file mode 100644 index e071b71d..00000000 --- a/server/pkg/store/astra/db_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package astra - -/* -//This is integration test -func TestAstra_RegisterEndpoint(t *testing.T) { - os.Setenv("CONFIG_PATH", "../../../") - _, err := config.New() - dbObj, err := New() - assert.NoError(t, err, "failed to create ") - //orgId := uuid.Must(uuid.NewRandom()) - orgId := "fdbb62be-baf8-4637-bb56-b7de46ec6520" - //err = dbObj.RegisterCluster(orgId, "test23", "127.0.0.1") - //assert.NoError(t, err) - clusters, err := dbObj.GetClusters(orgId) - assert.NoError(t, err) - fmt.Println(clusters) - err = dbObj.UpdateCluster(orgId, "test23", "127.0.0.5") - assert.NoError(t, err) - endpoint, err := dbObj.GetClusterEndpoint(orgId, "test23") - assert.NoError(t, err) - assert.Equal(t, endpoint, "127.0.0.5") - err = dbObj.DeleteCluster(orgId, "test23") - assert.NoError(t, err) -} -*/ diff --git a/server/pkg/store/astra/store.go b/server/pkg/store/astra/store.go new file mode 100644 index 00000000..eb3466b5 --- /dev/null +++ b/server/pkg/store/astra/store.go @@ -0,0 +1,48 @@ +package astra + +import ( + "fmt" + + astraclient "github.com/kube-tarian/kad/server/pkg/astra-client" + pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" +) + +type AstraServerStore struct { + c *astraclient.Client + keyspace string +} + +func NewStore() (*AstraServerStore, error) { + a := &AstraServerStore{} + err := a.initClient() + if err != nil { + return nil, fmt.Errorf("failed to connect to astra db, %w", err) + } + a.keyspace = a.c.Keyspace() + return a, nil +} + +func (a *AstraServerStore) initClient() error { + var err error + a.c, err = astraclient.NewClient() + return err +} + +func (a *AstraServerStore) InitializeDb() error { + initDbQueries := []string{ + fmt.Sprintf(createClusterEndpointTableQuery, a.keyspace), + } + + for _, query := range initDbQueries { + createQuery := &pb.Query{ + Cql: query, + } + + _, err := a.c.Session().ExecuteQuery(createQuery) + if err != nil { + return fmt.Errorf("failed to initialise db: %w", err) + } + } + + return nil +} diff --git a/server/pkg/store/astra/type.go b/server/pkg/store/astra/type.go index 3bd13457..df60c7a4 100644 --- a/server/pkg/store/astra/type.go +++ b/server/pkg/store/astra/type.go @@ -4,8 +4,7 @@ import pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" const ( createKeyspaceQuery = "CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1};" - createClusterEndpointTableQuery = "CREATE TABLE IF NOT EXISTS %s.cluster_endpoint (cluster_id uuid, org_id uuid, cluster_name text, endpoint text, PRIMARY KEY (cluster_id, org_id));" - createOrgClusterTableQuery = "CREATE TABLE IF NOT EXISTS %s.org_cluster (org_id uuid, cluster_ids set, PRIMARY KEY (org_id));" + createClusterEndpointTableQuery = "CREATE TABLE IF NOT EXISTS %s.capten_clusters (cluster_id uuid, org_id uuid, cluster_name text, endpoint text, PRIMARY KEY (cluster_id, org_id));" createAppConfigTableQuery = "CREATE TABLE IF NOT EXISTS %s.app_config(id TEXT, created_time timestamp, last_updated_time timestamp, last_updated_user TEXT, name TEXT, chart_name TEXT, repo_name TEXT, release_name TEXT, repo_url TEXT, namespace TEXT, version TEXT, create_namespace BOOLEAN, privileged_namespace BOOLEAN, launch_ui_url TEXT, launch_ui_redirect_url TEXT, category TEXT, icon TEXT, description TEXT, launch_ui_values TEXT, override_values TEXT, PRIMARY KEY (name, version));" ) diff --git a/server/pkg/store/cassandra/db.go b/server/pkg/store/cassandra/db.go deleted file mode 100644 index 029d539c..00000000 --- a/server/pkg/store/cassandra/db.go +++ /dev/null @@ -1,262 +0,0 @@ -package cassandra - -import ( - "fmt" - "strings" - "time" - - "github.com/gocql/gocql" - "github.com/google/uuid" - cassandraclient "github.com/kube-tarian/kad/server/pkg/cassandra-client" - "github.com/kube-tarian/kad/server/pkg/types" -) - -const ( - createAppConfigQuery string = "INSERT INTO %s.app_config (name, chart_name, repo_name,release_name, repo_url, namespace, version, create_namespace, privileged_namespace, launch_ui_url, launch_ui_redirect_url, category, icon, description, launch_ui_values, override_values, created_time, id) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', %t, %t, '%s', '%s', '%s', '%s', '%s', '%s', '%s','%v', '%s' );" - updateAppConfigQuery string = "UPDATE %s.app_config SET chart_name = '%s', repo_name = '%s', repo_url = '%s', namespace = '%s', create_namespace = %t, privileged_namespace = %t, launch_ui_url = '%s', launch_ui_redirect_url = '%s', category = '%s', icon = '%s', description = '%s', launch_ui_values = '%s', override_values = '%s',last_updated_time='%v' WHERE name = '%s' AND version = '%s';" - deleteAppConfigQuery string = "DELETE FROM %s.app_config WHERE name='%s' AND version='%s' ;" - getAppConfigQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config WHERE name='%s' AND version='%s';" - getAllAppConfigsQuery string = "Select name,chart_name,repo_name,repo_url,namespace,version,create_namespace,privileged_namespace,launch_ui_url,launch_ui_redirect_url,category,icon,description,launch_ui_values,override_values,release_name FROM %s.app_config;" - appConfigExistanceCheckQuery string = "Select name, version FROM %s.app_config WHERE name='%s' AND version ='%s';" -) - -type CassandraServerStore struct { - c *cassandraclient.Client - keyspace string -} - -func NewStore() (*CassandraServerStore, error) { - cs := &CassandraServerStore{} - err := cs.initSession() - if err != nil { - return nil, fmt.Errorf("failed to connect to cassandra db, %w", err) - } - cs.keyspace = cs.c.Keyspace() - return cs, err -} - -func (c *CassandraServerStore) initSession() error { - var err error - c.c, err = cassandraclient.NewClient() - if err != nil { - return fmt.Errorf("failed to create cassandra session") - } - return nil -} - -func (c *CassandraServerStore) InitializeDb() error { - if err := c.c.Session().Query(fmt.Sprintf(createKeyspaceQuery, c.keyspace)).Exec(); err != nil { - return fmt.Errorf("failed to create c.keyspace, %w", err) - } - - if err := c.c.Session().Query(fmt.Sprintf(createClusterEndpointTableQuery, c.keyspace)).Exec(); err != nil { - return fmt.Errorf("failed to create cluster_endpoint table, %w", err) - } - - if err := c.c.Session().Query(fmt.Sprintf(createOrgClusterTableQuery, c.keyspace)).Exec(); err != nil { - return fmt.Errorf("failed to create cluster_endpoint table, %w", err) - } - - if err := c.c.Session().Query(fmt.Sprintf(createAppConfigTableQuery, c.keyspace)).Exec(); err != nil { - return fmt.Errorf("failed to create app_config table, %w", err) - } - - return nil -} - -func (c *CassandraServerStore) GetClusterEndpoint(orgID, clusterName string) (string, error) { - clusterId, err := c.getClusterID(orgID, clusterName) - if err != nil { - return "", err - } - - iter := c.c.Session().Query(fmt.Sprintf("Select endpoint FROM %s.cluster_endpoint WHERE cluster_id=%s;", - c.keyspace, clusterId)).Iter() - var endpoint string - iter.Scan(&endpoint) - return endpoint, nil -} - -func (c *CassandraServerStore) GetClusters(orgId string) ([]types.ClusterDetails, error) { - iter := c.c.Session().Query(fmt.Sprintf("Select cluster_ids FROM %s.org_cluster WHERE org_id=%s ;", - c.keyspace, orgId)).Iter() - var clusterUUIds []gocql.UUID - iter.Scan(&clusterUUIds) - var clusterIds []string - for _, id := range clusterUUIds { - clusterIds = append(clusterIds, id.String()) - } - - iter = c.c.Session().Query(fmt.Sprintf("Select cluster_name, endpoint FROM %s.cluster_endpoint WHERE cluster_id in (%s);", - c.keyspace, strings.Join(clusterIds, ","))).Iter() - - var cqlClusterName string - var cqlClusterEndpoint string - cqlScanner := iter.Scanner() - var clusterDetails []types.ClusterDetails - for cqlScanner.Next() { - if err := cqlScanner.Scan(&cqlClusterName, &cqlClusterEndpoint); err != nil { - return nil, err - } - - clusterDetails = append(clusterDetails, types.ClusterDetails{ - ClusterName: cqlClusterName, - Endpoint: cqlClusterEndpoint, - }) - } - - return clusterDetails, nil -} - -func (c *CassandraServerStore) AddCluster(orgId, clusterName, endpoint string) error { - clusterExists := c.clusterEntryExists(orgId) - clusterId := gocql.TimeUUID() - batch := c.c.Session().NewBatch(gocql.LoggedBatch) - if clusterExists { - batch.Query( - fmt.Sprintf( - "UPDATE %s.org_cluster SET cluster_ids= cluster_ids + {%s} WHERE org_id=%s;", - c.keyspace, clusterId.String(), orgId)) - } else { - batch.Query( - fmt.Sprintf("INSERT INTO %s.org_cluster(org_id, cluster_ids) VALUES (%s, {%s});", - c.keyspace, orgId, clusterId), - ) - } - - batch.Query(fmt.Sprintf("INSERT INTO %s.cluster_endpoint (cluster_id, org_id, cluster_name, endpoint) VALUES (%s, %s, '%s', '%s');", - c.keyspace, clusterId, orgId, clusterName, endpoint)) - err := c.c.Session().ExecuteBatch(batch) - if err != nil { - return fmt.Errorf("failed insert cluster details %w", err) - } - - return nil -} - -func (c *CassandraServerStore) clusterEntryExists(orgID string) bool { - iter := c.c.Session().Query(fmt.Sprintf("Select cluster_ids FROM %s.org_cluster WHERE org_id=%s ;", - c.keyspace, orgID)).Iter() - var clusterIds []gocql.UUID - iter.Scan(&clusterIds) - if len(clusterIds) == 0 { - return false - } - - return true -} - -func (c *CassandraServerStore) UpdateCluster(orgID, clusterName, endpoint string) error { - clusterId, err := c.getClusterID(orgID, clusterName) - if err != nil { - return err - } - - err = c.c.Session().Query(fmt.Sprintf( - "UPDATE %s.cluster_endpoint set endpoint='%s' WHERE cluster_id=%s AND org_id=%s", - c.keyspace, endpoint, clusterId, orgID)).Exec() - return err -} - -func (c *CassandraServerStore) getClusterID(orgID, clusterName string) (string, error) { - iter := c.c.Session().Query(fmt.Sprintf("Select cluster_ids FROM %s.org_cluster WHERE org_id=%s;", - c.keyspace, orgID)).Iter() - - var clusterUUIds []gocql.UUID - iter.Scan(&clusterUUIds) - var clusterIds []string - for _, id := range clusterUUIds { - clusterIds = append(clusterIds, id.String()) - } - - iter = c.c.Session().Query(fmt.Sprintf("Select cluster_id, cluster_name FROM %s.cluster_endpoint WHERE cluster_id in (%s);", - c.keyspace, strings.Join(clusterIds, ","))).Iter() - - var cqlClusterId gocql.UUID - var cqlClusterName string - cqlScanner := iter.Scanner() - for cqlScanner.Next() { - if err := cqlScanner.Scan(&cqlClusterId, &cqlClusterName); err != nil { - return "", err - } - - if cqlClusterName == clusterName { - return cqlClusterId.String(), nil - } - } - - return "", fmt.Errorf("cluster not found") -} - -func (c *CassandraServerStore) DeleteCluster(orgID, clusterName string) error { - clusterId, err := c.getClusterID(orgID, clusterName) - if err != nil { - return err - } - - batch := c.c.Session().NewBatch(gocql.LoggedBatch) - batch.Query(fmt.Sprintf( - "DELETE FROM %s.cluster_endpoint WHERE cluster_id=%s ;", - c.keyspace, clusterId)) - batch.Query(fmt.Sprintf( - "UPDATE %s.org_cluster set cluster_ids = cluster_ids - {%s} WHERE org_id=%s ;", - c.keyspace, clusterId, orgID)) - return c.c.Session().ExecuteBatch(batch) -} - -func (c *CassandraServerStore) isAppExistsInStore(name, version string) bool { - - iter := c.c.Session().Query(fmt.Sprintf(appConfigExistanceCheckQuery, - c.keyspace, name, version)).Iter() - - var config types.AppConfig - iter.Scan(&config) - if config.Name != "" { - return false - } - return true -} - -func (c *CassandraServerStore) AddOrUpdateApp(config *types.StoreAppConfig) error { - - if ok := c.isAppExistsInStore(config.AppName, config.Version); ok { - err := c.c.Session().Query(fmt.Sprintf(updateAppConfigQuery, - c.keyspace, config.ChartName, config.RepoName, config.RepoURL, config.Namespace, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), config.AppName, config.Version)).Exec() - return err - } else { - err := c.c.Session().Query(fmt.Sprintf(createAppConfigQuery, - c.keyspace, config.AppName, config.ChartName, config.RepoName, config.ReleaseName, config.RepoURL, config.Namespace, config.Version, config.CreateNamespace, config.PrivilegedNamespace, config.LaunchURL, config.LaunchRedirectURL, config.Category, config.Icon, config.Description, config.LaunchUIValues, config.OverrideValues, time.Now().Format("2006-01-02 15:04:05"), uuid.New().String())).Exec() - - return err - } -} - -func (c *CassandraServerStore) DeleteAppInStore(name, version string) error { - - err := c.c.Session().Query(fmt.Sprintf(deleteAppConfigQuery, - c.keyspace, name, version)).Exec() - - if err != nil { - return fmt.Errorf("failed to delete app config: %w", err) - } - - return nil -} - -func (c *CassandraServerStore) GetAppFromStore(name, version string) (*types.AppConfig, error) { - - iter := c.c.Session().Query(fmt.Sprintf(getAppConfigQuery, - c.keyspace, name, version)).Iter() - var config types.AppConfig - iter.Scan(&config) - return &config, nil -} - -func (c *CassandraServerStore) GetAppsFromStore() (*[]types.AppConfig, error) { - - iter := c.c.Session().Query(fmt.Sprintf(getAllAppConfigsQuery, - c.keyspace)).Iter() - var config []types.AppConfig - iter.Scan(&config) - return &config, nil -} diff --git a/server/pkg/store/cassandra/db_test.go b/server/pkg/store/cassandra/db_test.go deleted file mode 100644 index 44908356..00000000 --- a/server/pkg/store/cassandra/db_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package cassandra - -import ( - "testing" -) - -func TestCassandra_RegisterEndpoint(t *testing.T) { - /* - os.Setenv("CONFIG_PATH", "../../../") - _, err := config.New() - dbObj, err := New() - assert.NoError(t, err, "failed to create ") - //orgId := uuid.Must(uuid.NewRandom()) - //err = dbObj.RegisterEndpoint(orgId.String(), "test", "127.0.0.1") - clusterId, err := dbObj.getClusterID("64f90ced-a66d-4c45-b0ed-44cfa39a36f2", "test") - assert.NoError(t, err) - assert.Equal(t, clusterId, "cc47bf9c-1f4e-11ee-852e-f6c7f36595cf") - err = dbObj.RegisterCluster("64f90ced-a66d-4c45-b0ed-44cfa39a36f2", "test64", "127.0.0.1") - assert.NoError(t, err) - err = dbObj.UpdateCluster("64f90ced-a66d-4c45-b0ed-44cfa39a36f2", "test64", "127.0.0.4") - assert.NoError(t, err) - err = dbObj.DeleteCluster("64f90ced-a66d-4c45-b0ed-44cfa39a36f2", "test64") - assert.NoError(t, err) - */ -} diff --git a/server/pkg/store/cassandra/type.go b/server/pkg/store/cassandra/type.go deleted file mode 100644 index c6a18fe7..00000000 --- a/server/pkg/store/cassandra/type.go +++ /dev/null @@ -1,8 +0,0 @@ -package cassandra - -const ( - createKeyspaceQuery = "CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1};" - createClusterEndpointTableQuery = "CREATE TABLE IF NOT EXISTS %s.cluster_endpoint (cluster_id uuid, org_id uuid, cluster_name text, endpoint text, PRIMARY KEY (cluster_id, org_id));" - createOrgClusterTableQuery = "CREATE TABLE IF NOT EXISTS %s.org_cluster (org_id uuid, cluster_ids set, PRIMARY KEY (org_id));" - createAppConfigTableQuery = "CREATE TABLE IF NOT EXISTS %s.app_config(id TEXT, created_time timestamp, last_updated_time timestamp, last_updated_user TEXT, name TEXT, chart_name TEXT, repo_name TEXT, release_name TEXT, repo_url TEXT, namespace TEXT, version TEXT, create_namespace BOOLEAN, privileged_namespace BOOLEAN, launch_ui_url TEXT, launch_ui_redirect_url TEXT, category TEXT, icon TEXT, description TEXT, launch_ui_values TEXT, override_values TEXT, PRIMARY KEY (name, version));" -) diff --git a/server/pkg/store/store.go b/server/pkg/store/store.go index 8b30fd7d..d4311336 100644 --- a/server/pkg/store/store.go +++ b/server/pkg/store/store.go @@ -3,7 +3,6 @@ package store import ( "fmt" - "github.com/kube-tarian/kad/server/pkg/store/cassandra" "github.com/kube-tarian/kad/server/pkg/types" "github.com/kube-tarian/kad/server/pkg/store/astra" @@ -11,11 +10,11 @@ import ( type ServerStore interface { InitializeDb() error - GetClusterEndpoint(organizationID, clusterName string) (string, error) - GetClusters(organizationID string) ([]types.ClusterDetails, error) - AddCluster(organizationID, clusterName, endpoint string) error - UpdateCluster(organizationID, clusterName, endpoint string) error - DeleteCluster(organizationID, clusterName string) error + GetClusterEndpoint(clusterID string) (string, error) + GetClusters(orgID string) ([]types.ClusterDetails, error) + AddCluster(orgID, clusterName, endpoint string) (string, error) + UpdateCluster(orgID, clusterID, clusterName, endpoint string) error + DeleteCluster(orgID, clusterID string) error AddOrUpdateApp(config *types.StoreAppConfig) error DeleteAppInStore(name, version string) error GetAppFromStore(name, version string) (*types.AppConfig, error) @@ -24,8 +23,6 @@ type ServerStore interface { func NewStore(db string) (ServerStore, error) { switch db { - case "cassandra": - return cassandra.NewStore() case "astra": return astra.NewStore() } diff --git a/server/pkg/types/type.go b/server/pkg/types/type.go index 4447f7f4..8006e33f 100644 --- a/server/pkg/types/type.go +++ b/server/pkg/types/type.go @@ -19,6 +19,8 @@ type AgentInfo struct { } type ClusterDetails struct { + OrgID string + ClusterID string ClusterName string Endpoint string } From 78147a3618f20e064831fc235b1b1f07305af057 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 15:23:02 +0530 Subject: [PATCH 18/31] fix get cluster DB query --- server/pkg/store/astra/cluster_store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go index 2cdac430..a6448cd8 100644 --- a/server/pkg/store/astra/cluster_store.go +++ b/server/pkg/store/astra/cluster_store.go @@ -14,7 +14,7 @@ const ( updateClusterQuery = "UPDATE %s.capten_clusters set clusterName ='%s' endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" deleteClusterQuery = "DELETE FROM %s.capten_clusters WHERE cluster_id=%s AND org_id=%s;" getClusterEndpointQuery = "SELECT endpoint FROM %s.capten_clusters WHERE cluster_id=%s;" - getClustersForOrgQuery = "SELECT * FROM %s.capten_clusters WHERE org_id=%s ;" + getClustersForOrgQuery = "SELECT * FROM %s.capten_clusters WHERE org_id=%s ALLOW FILTERING;" ) func (a *AstraServerStore) AddCluster(orgID, clusterName, endpoint string) (string, error) { From 24cc99833c2af02840689a5aaf5e2550df87a9f4 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 15:59:55 +0530 Subject: [PATCH 19/31] fix agent connect cert mapping --- server/pkg/api/cluster_registeration.go | 12 +++++++----- server/pkg/handler/handle_agent.go | 2 +- server/pkg/store/astra/cluster_store.go | 8 +++----- server/pkg/store/store.go | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index ce521e51..641f4c07 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -3,6 +3,7 @@ package api import ( "context" + "github.com/gocql/gocql" "github.com/kube-tarian/kad/server/pkg/agent" "github.com/kube-tarian/kad/server/pkg/credential" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" @@ -24,8 +25,8 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, - Cert: request.ClientKeyData, - Key: request.ClientCertData, + Key: request.ClientKeyData, + Cert: request.ClientCertData, } if err := s.agentHandeler.AddAgent(orgId, request.ClusterName, agentConfig); err != nil { s.log.Errorf("[%s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) @@ -45,7 +46,8 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N }, nil } - clusterID, err := s.serverStore.AddCluster(orgId, request.ClusterName, request.AgentEndpoint) + clusterID := gocql.TimeUUID().String() + err = s.serverStore.AddCluster(orgId, clusterID, request.ClusterName, request.AgentEndpoint) if err != nil { s.log.Errorf("[%s] failed to store cluster %s to db, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ @@ -78,8 +80,8 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, - Cert: request.ClientKeyData, - Key: request.ClientCertData, + Key: request.ClientKeyData, + Cert: request.ClientCertData, } if err := s.agentHandeler.UpdateAgent(orgId, request.ClusterID, agentConfig); err != nil { diff --git a/server/pkg/handler/handle_agent.go b/server/pkg/handler/handle_agent.go index 9e120697..28eea561 100644 --- a/server/pkg/handler/handle_agent.go +++ b/server/pkg/handler/handle_agent.go @@ -42,7 +42,7 @@ func (a *APIHandler) PostAgentEndpoint(c *gin.Context) { return } - _, err = a.serverStore.AddCluster(customerId, customerId, endpoint) + err = a.serverStore.AddCluster(customerId, customerId, customerId, endpoint) if err != nil { a.setFailedResponse(c, "failed to store data", nil) a.log.Error("failed to get db session", err) diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go index a6448cd8..6db24fff 100644 --- a/server/pkg/store/astra/cluster_store.go +++ b/server/pkg/store/astra/cluster_store.go @@ -3,7 +3,6 @@ package astra import ( "fmt" - "github.com/gocql/gocql" "github.com/kube-tarian/kad/server/pkg/types" "github.com/stargate/stargate-grpc-go-client/stargate/pkg/client" pb "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" @@ -17,17 +16,16 @@ const ( getClustersForOrgQuery = "SELECT * FROM %s.capten_clusters WHERE org_id=%s ALLOW FILTERING;" ) -func (a *AstraServerStore) AddCluster(orgID, clusterName, endpoint string) (string, error) { - clusterID := gocql.TimeUUID() +func (a *AstraServerStore) AddCluster(orgID, clusterID, clusterName, endpoint string) error { q := &pb.Query{ Cql: fmt.Sprintf(insertClusterQuery, a.keyspace, clusterID, orgID, clusterName, endpoint), } _, err := a.c.Session().ExecuteQuery(q) if err != nil { - return "", fmt.Errorf("failed store cluster details %w", err) + return fmt.Errorf("failed store cluster details %w", err) } - return clusterID.String(), nil + return nil } func (a *AstraServerStore) UpdateCluster(orgID, clusterID, clusterName, endpoint string) error { diff --git a/server/pkg/store/store.go b/server/pkg/store/store.go index d4311336..620e99e1 100644 --- a/server/pkg/store/store.go +++ b/server/pkg/store/store.go @@ -12,7 +12,7 @@ type ServerStore interface { InitializeDb() error GetClusterEndpoint(clusterID string) (string, error) GetClusters(orgID string) ([]types.ClusterDetails, error) - AddCluster(orgID, clusterName, endpoint string) (string, error) + AddCluster(orgID, clusterID, clusterName, endpoint string) error UpdateCluster(orgID, clusterID, clusterName, endpoint string) error DeleteCluster(orgID, clusterID string) error AddOrUpdateApp(config *types.StoreAppConfig) error From c04930b6ea2bbfb9fb4d4efa5a8d7202be45885d Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 16:06:04 +0530 Subject: [PATCH 20/31] fix get clusters API db read --- server/pkg/store/astra/cluster_store.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go index 6db24fff..cd83122f 100644 --- a/server/pkg/store/astra/cluster_store.go +++ b/server/pkg/store/astra/cluster_store.go @@ -92,17 +92,17 @@ func (a *AstraServerStore) GetClusters(orgID string) ([]types.ClusterDetails, er return nil, fmt.Errorf("failed to get cluster name: %w", err) } - cqlClusterID, err := client.ToString(row.Values[0]) + cqlClusterID, err := client.ToString(row.Values[1]) if err != nil { return nil, fmt.Errorf("failed to get cluster name: %w", err) } - cqlClusterName, err := client.ToString(row.Values[0]) + cqlClusterName, err := client.ToString(row.Values[2]) if err != nil { return nil, fmt.Errorf("failed to get cluster name: %w", err) } - cqlEndpoint, err := client.ToString(row.Values[1]) + cqlEndpoint, err := client.ToString(row.Values[3]) if err != nil { return nil, fmt.Errorf("failed to get cluster endpoint: %w", err) } From aadfe83a973c7dfe912aa236cc1ae7beb8c1c4f6 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 16:15:57 +0530 Subject: [PATCH 21/31] fix reading cluster uuid data value --- server/pkg/api/cluster_registeration.go | 34 ++++++++++++------------- server/pkg/store/astra/cluster_store.go | 18 ++++++------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index 641f4c07..589ae2e4 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -21,7 +21,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N }, nil } - s.log.Infof("[%s] New cluster registration request for cluster %s recieved", orgId, request.ClusterName) + s.log.Infof("[org: %s] New cluster registration request for cluster %s recieved", orgId, request.ClusterName) agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, @@ -29,7 +29,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N Cert: request.ClientCertData, } if err := s.agentHandeler.AddAgent(orgId, request.ClusterName, agentConfig); err != nil { - s.log.Errorf("[%s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) + s.log.Errorf("[org: %s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed to connect to agent", @@ -39,7 +39,7 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N err := credential.PutClusterCerts(ctx, orgId, request.ClusterName, request.ClientCAChainData, request.ClientKeyData, request.ClientCertData) if err != nil { - s.log.Errorf("[%s] failed to store cert in vault for cluster %s, %v", orgId, request.ClusterName, err) + s.log.Errorf("[org: %s] failed to store cert in vault for cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed register cluster", @@ -49,14 +49,14 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N clusterID := gocql.TimeUUID().String() err = s.serverStore.AddCluster(orgId, clusterID, request.ClusterName, request.AgentEndpoint) if err != nil { - s.log.Errorf("[%s] failed to store cluster %s to db, %v", orgId, request.ClusterName, err) + s.log.Errorf("[org: %s] failed to store cluster %s to db, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed register cluster", }, nil } - s.log.Infof("[%s] New cluster registration successful for %s cluster", orgId, request.ClusterName) + s.log.Infof("[org: %s] New cluster registration successful for %s cluster", orgId, request.ClusterName) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "register cluster success", @@ -76,7 +76,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp }, nil } - s.log.Infof("[%s] Update cluster registration request for cluster %s recieved", orgId, request.ClusterName) + s.log.Infof("[org: %s] Update cluster registration request for cluster %s recieved", orgId, request.ClusterName) agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, @@ -85,7 +85,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp } if err := s.agentHandeler.UpdateAgent(orgId, request.ClusterID, agentConfig); err != nil { - s.log.Errorf("[%s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) + s.log.Errorf("[org: %s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed to connect to agent", @@ -95,7 +95,7 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp err := credential.PutClusterCerts(ctx, orgId, request.ClusterName, request.ClientCAChainData, request.ClientKeyData, request.ClientCertData) if err != nil { - s.log.Errorf("[%s] failed to update cert in vault for cluster %s, %v", orgId, request.ClusterName, err) + s.log.Errorf("[org: %s] failed to update cert in vault for cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed update register cluster", @@ -104,14 +104,14 @@ func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverp err = s.serverStore.UpdateCluster(orgId, request.ClusterID, request.ClusterName, request.AgentEndpoint) if err != nil { - s.log.Errorf("[%s] failed to update cluster %s in db, %v", orgId, request.ClusterName, err) + s.log.Errorf("[org: %s] failed to update cluster %s in db, %v", orgId, request.ClusterName, err) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed update register cluster", }, nil } - s.log.Infof("[%s] Update cluster registration successful for %s cluster", orgId, request.ClusterName) + s.log.Infof("[org: %s] Update cluster registration successful for %s cluster", orgId, request.ClusterName) return &serverpb.UpdateClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "cluster register update success", @@ -130,11 +130,11 @@ func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverp }, nil } - s.log.Infof("[%s] Delete cluster registration request for cluster %s recieved", orgId, request.ClusterID) + s.log.Infof("[org: %s] Delete cluster registration request for cluster %s recieved", orgId, request.ClusterID) s.agentHandeler.RemoveAgent(orgId, request.ClusterID) err := credential.DeleteClusterCerts(ctx, orgId, request.ClusterID) if err != nil { - s.log.Errorf("[%s] failed to delete cert in vault for cluster %s, %v", orgId, request.ClusterID, err) + s.log.Errorf("[org: %s] failed to delete cert in vault for cluster %s, %v", orgId, request.ClusterID, err) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed delete register cluster", @@ -143,14 +143,14 @@ func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverp err = s.serverStore.DeleteCluster(orgId, request.ClusterID) if err != nil { - s.log.Errorf("[%s] failed to delete cluster %s from db, %v", orgId, request.ClusterID, err) + s.log.Errorf("[org: %s] failed to delete cluster %s from db, %v", orgId, request.ClusterID, err) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed delete register cluster", }, nil } - s.log.Infof("[%s] Delete cluster registration request for cluster %s successful", orgId, request.ClusterID) + s.log.Infof("[org: %s] Delete cluster registration request for cluster %s successful", orgId, request.ClusterID) return &serverpb.DeleteClusterRegistrationResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "cluster deletion success", @@ -169,10 +169,10 @@ func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersR }, nil } - s.log.Infof("[%s] GetClusters request recieved", orgId) + s.log.Infof("[org: %s] GetClusters request recieved", orgId) clusterDetails, err := s.serverStore.GetClusters(orgId) if err != nil { - s.log.Errorf("[%s] failed to get clusters, %v", orgId, err) + s.log.Errorf("[org: %s] failed to get clusters, %v", orgId, err) return &serverpb.GetClustersResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, StatusMessage: "failed get cluster details", @@ -187,7 +187,7 @@ func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersR }) } - s.log.Infof("[%s] Found %d clusters", orgId, len(data)) + s.log.Infof("[org: %s] Found %d clusters", orgId, len(data)) return &serverpb.GetClustersResponse{ Status: serverpb.StatusCode_OK, StatusMessage: "get cluster details success", diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go index cd83122f..3800dcfe 100644 --- a/server/pkg/store/astra/cluster_store.go +++ b/server/pkg/store/astra/cluster_store.go @@ -13,7 +13,7 @@ const ( updateClusterQuery = "UPDATE %s.capten_clusters set clusterName ='%s' endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" deleteClusterQuery = "DELETE FROM %s.capten_clusters WHERE cluster_id=%s AND org_id=%s;" getClusterEndpointQuery = "SELECT endpoint FROM %s.capten_clusters WHERE cluster_id=%s;" - getClustersForOrgQuery = "SELECT * FROM %s.capten_clusters WHERE org_id=%s ALLOW FILTERING;" + getClustersForOrgQuery = "SELECT org_id, cluster_id, cluster_name, endpoint FROM %s.capten_clusters WHERE org_id=%s ALLOW FILTERING;" ) func (a *AstraServerStore) AddCluster(orgID, clusterID, clusterName, endpoint string) error { @@ -87,30 +87,30 @@ func (a *AstraServerStore) GetClusters(orgID string) ([]types.ClusterDetails, er result := response.GetResultSet() var clusterDetails []types.ClusterDetails for _, row := range result.Rows { - cqlOrgID, err := client.ToString(row.Values[0]) + cqlOrgID, err := client.ToUUID(row.Values[0]) if err != nil { - return nil, fmt.Errorf("failed to get cluster name: %w", err) + return nil, fmt.Errorf("failed to get orgID: %w", err) } - cqlClusterID, err := client.ToString(row.Values[1]) + cqlClusterID, err := client.ToUUID(row.Values[1]) if err != nil { - return nil, fmt.Errorf("failed to get cluster name: %w", err) + return nil, fmt.Errorf("failed to get clusterID: %w", err) } cqlClusterName, err := client.ToString(row.Values[2]) if err != nil { - return nil, fmt.Errorf("failed to get cluster name: %w", err) + return nil, fmt.Errorf("failed to get clusterName: %w", err) } cqlEndpoint, err := client.ToString(row.Values[3]) if err != nil { - return nil, fmt.Errorf("failed to get cluster endpoint: %w", err) + return nil, fmt.Errorf("failed to get clusterEndpoint: %w", err) } clusterDetails = append(clusterDetails, types.ClusterDetails{ - OrgID: cqlOrgID, - ClusterID: cqlClusterID, + OrgID: cqlOrgID.String(), + ClusterID: cqlClusterID.String(), ClusterName: cqlClusterName, Endpoint: cqlEndpoint, }) From 43bb3b68a80f268783f43f3826ba0d0e68be31e6 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 16:24:19 +0530 Subject: [PATCH 22/31] setting attributes set to get clusters api --- server/pkg/api/cluster_registeration.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index 589ae2e4..1bdfec4d 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -181,9 +181,14 @@ func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersR var data []*serverpb.ClusterInfo for _, cluster := range clusterDetails { + attributes := []*serverpb.ClusterAttribute{} + appLaunchConfigs := []*serverpb.AppLaunchConfig{} data = append(data, &serverpb.ClusterInfo{ - ClusterName: cluster.ClusterName, - AgentEndpoint: cluster.Endpoint, + ClusterID: cluster.ClusterID, + ClusterName: cluster.ClusterName, + AgentEndpoint: cluster.Endpoint, + Attributes: attributes, + AppLaunchConfigs: appLaunchConfigs, }) } From 3d5e6f3c05ea25ace0411fb7b98f5d211c4d7b94 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 16:44:19 +0530 Subject: [PATCH 23/31] fix cluster update query --- server/pkg/api/cluster_registeration.go | 4 ++-- server/pkg/store/astra/cluster_store.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/pkg/api/cluster_registeration.go b/server/pkg/api/cluster_registeration.go index 1bdfec4d..05d6c82c 100644 --- a/server/pkg/api/cluster_registeration.go +++ b/server/pkg/api/cluster_registeration.go @@ -22,13 +22,14 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N } s.log.Infof("[org: %s] New cluster registration request for cluster %s recieved", orgId, request.ClusterName) + clusterID := gocql.TimeUUID().String() agentConfig := &agent.Config{ Address: request.AgentEndpoint, CaCert: request.ClientCAChainData, Key: request.ClientKeyData, Cert: request.ClientCertData, } - if err := s.agentHandeler.AddAgent(orgId, request.ClusterName, agentConfig); err != nil { + if err := s.agentHandeler.AddAgent(orgId, clusterID, agentConfig); err != nil { s.log.Errorf("[org: %s] failed to connect to agent on cluster %s, %v", orgId, request.ClusterName, err) return &serverpb.NewClusterRegistrationResponse{ Status: serverpb.StatusCode_INTERNRAL_ERROR, @@ -46,7 +47,6 @@ func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.N }, nil } - clusterID := gocql.TimeUUID().String() err = s.serverStore.AddCluster(orgId, clusterID, request.ClusterName, request.AgentEndpoint) if err != nil { s.log.Errorf("[org: %s] failed to store cluster %s to db, %v", orgId, request.ClusterName, err) diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go index 3800dcfe..f0a4fd18 100644 --- a/server/pkg/store/astra/cluster_store.go +++ b/server/pkg/store/astra/cluster_store.go @@ -10,7 +10,7 @@ import ( const ( insertClusterQuery = "INSERT INTO %s.capten_clusters (cluster_id, org_id, cluster_name, endpoint) VALUES (%s, %s, '%s', '%s');" - updateClusterQuery = "UPDATE %s.capten_clusters set clusterName ='%s' endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" + updateClusterQuery = "UPDATE %s.capten_clusters set cluster_name ='%s' endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" deleteClusterQuery = "DELETE FROM %s.capten_clusters WHERE cluster_id=%s AND org_id=%s;" getClusterEndpointQuery = "SELECT endpoint FROM %s.capten_clusters WHERE cluster_id=%s;" getClustersForOrgQuery = "SELECT org_id, cluster_id, cluster_name, endpoint FROM %s.capten_clusters WHERE org_id=%s ALLOW FILTERING;" From 6eddae0b928b0566f5817a10df724b18ca3ae0de Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 16:52:40 +0530 Subject: [PATCH 24/31] fix cluster update query --- server/pkg/store/astra/cluster_store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/pkg/store/astra/cluster_store.go b/server/pkg/store/astra/cluster_store.go index f0a4fd18..3d56d924 100644 --- a/server/pkg/store/astra/cluster_store.go +++ b/server/pkg/store/astra/cluster_store.go @@ -10,7 +10,7 @@ import ( const ( insertClusterQuery = "INSERT INTO %s.capten_clusters (cluster_id, org_id, cluster_name, endpoint) VALUES (%s, %s, '%s', '%s');" - updateClusterQuery = "UPDATE %s.capten_clusters set cluster_name ='%s' endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" + updateClusterQuery = "UPDATE %s.capten_clusters SET cluster_name='%s', endpoint='%s' WHERE cluster_id=%s AND org_id=%s;" deleteClusterQuery = "DELETE FROM %s.capten_clusters WHERE cluster_id=%s AND org_id=%s;" getClusterEndpointQuery = "SELECT endpoint FROM %s.capten_clusters WHERE cluster_id=%s;" getClustersForOrgQuery = "SELECT org_id, cluster_id, cluster_name, endpoint FROM %s.capten_clusters WHERE org_id=%s ALLOW FILTERING;" From 212d704df833876f08750683cd579e69efbb6279 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 19:36:48 +0530 Subject: [PATCH 25/31] fix agent startup with cassandra db --- capten/agent/cmd/agent/main.go | 6 +- capten/agent/pkg/agent/agent.go | 11 +- capten/agent/pkg/agent/agent_cluster_apps.go | 99 ++++++----- .../pkg/agent/agent_cluster_apps_test.go | 5 +- capten/agent/pkg/agent/agent_sync_app_test.go | 58 ------- .../pkg/capten-store/app_config_store.go | 154 +++++++----------- .../pkg/capten-store/app_config_store_test.go | 2 +- capten/agent/pkg/capten-store/migrations.go | 8 - .../agent/pkg/capten-store/migrations_test.go | 2 +- capten/agent/pkg/config/config.go | 1 + .../db-create/cassandra/cassandra_store.go | 1 - .../db-create/cassandra/db_config.go | 10 +- .../db-create/cassandra/db_creation.go | 4 +- .../cassandra/cassandra_migration.go | 6 +- .../cassandra/db_migration_test.go | 2 +- charts/kad/values.yaml | 9 +- 16 files changed, 145 insertions(+), 233 deletions(-) delete mode 100644 capten/agent/pkg/agent/agent_sync_app_test.go diff --git a/capten/agent/cmd/agent/main.go b/capten/agent/cmd/agent/main.go index 4573f27b..124dd5eb 100644 --- a/capten/agent/cmd/agent/main.go +++ b/capten/agent/cmd/agent/main.go @@ -12,7 +12,6 @@ import ( "github.com/intelops/go-common/logging" "github.com/kube-tarian/kad/capten/agent/pkg/agent" "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" - captenstore "github.com/kube-tarian/kad/capten/agent/pkg/capten-store" "github.com/kube-tarian/kad/capten/agent/pkg/config" "google.golang.org/grpc/reflection" ) @@ -31,7 +30,7 @@ func main() { log.Fatalf("Error while running migrations: %v", err) } - s, err := agent.NewAgent(log) + s, err := agent.NewAgent(log, cfg) if err != nil { log.Fatalf("Agent initialization failed, %v", err) } @@ -61,5 +60,6 @@ func main() { } func runAllMigrations(log logging.Logger) error { - return captenstore.Migrate(log) + //return captenstore.Migrate(log) + return nil } diff --git a/capten/agent/pkg/agent/agent.go b/capten/agent/pkg/agent/agent.go index 7f9a520d..8050bae5 100644 --- a/capten/agent/pkg/agent/agent.go +++ b/capten/agent/pkg/agent/agent.go @@ -3,11 +3,11 @@ package agent import ( "context" "fmt" - "os" "github.com/intelops/go-common/logging" "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" captenstore "github.com/kube-tarian/kad/capten/agent/pkg/capten-store" + "github.com/kube-tarian/kad/capten/agent/pkg/config" "github.com/kube-tarian/kad/capten/agent/pkg/temporalclient" "github.com/kube-tarian/kad/capten/agent/pkg/workers" @@ -23,21 +23,22 @@ type Agent struct { log logging.Logger } -func NewAgent(log logging.Logger) (*Agent, error) { +func NewAgent(log logging.Logger, cfg *config.SericeConfig) (*Agent, error) { var tc *temporalclient.Client var err error - if os.Getenv("ENV") != "LOCAL" { + if cfg.Mode == "local" { tc, err = temporalclient.NewClient(log) if err != nil { return nil, err } } - // Note how lack of dependecy injection leads to codesmell as, err := captenstore.NewStore(log) if err != nil { - return nil, err + // ignoring store failure until DB user creation working + // return nil, err + log.Errorf("failed to initialize store, %v", err) } agent := &Agent{ diff --git a/capten/agent/pkg/agent/agent_cluster_apps.go b/capten/agent/pkg/agent/agent_cluster_apps.go index 5def7fb1..c2300a9b 100644 --- a/capten/agent/pkg/agent/agent_cluster_apps.go +++ b/capten/agent/pkg/agent/agent_cluster_apps.go @@ -2,38 +2,41 @@ package agent import ( "context" - "fmt" "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" ) -func (a *Agent) SyncApp(ctx context.Context, request *agentpb.SyncAppRequest) (*agentpb.SyncAppResponse, error) { - if request == nil { - return nil, fmt.Errorf("nil agentpb.SyncAppRequest") +func (a *Agent) SyncApp(ctx context.Context, request *agentpb.SyncAppRequest) ( + *agentpb.SyncAppResponse, error) { + if request.Data == nil { + return &agentpb.SyncAppResponse{ + Status: agentpb.StatusCode_INVALID_ARGUMENT, + StatusMessage: "invalid data passed", + }, nil } - if err := a.as.UpsertAppConfig(request.GetData()); err != nil { - return nil, err + + if err := a.as.UpsertAppConfig(request.Data); err != nil { + a.log.Errorf("failed to update sync app config, %v", err) + return &agentpb.SyncAppResponse{ + Status: agentpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to sync app config", + }, nil } + a.log.Infof("Sync app [%s] successful", request.Data.Config.ReleaseName) return &agentpb.SyncAppResponse{ Status: agentpb.StatusCode_OK, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_OK)], + StatusMessage: "successful", }, nil } -func (a *Agent) GetClusterApps(ctx context.Context, request *agentpb.GetClusterAppsRequest) (*agentpb.GetClusterAppsResponse, error) { - if request == nil { - return nil, fmt.Errorf("nil agentpb.GetClusterAppsRequest") - } +func (a *Agent) GetClusterApps(ctx context.Context, request *agentpb.GetClusterAppsRequest) ( + *agentpb.GetClusterAppsResponse, error) { res, err := a.as.GetAllApps() if err != nil { - return nil, err - } - - if len(res) == 0 { return &agentpb.GetClusterAppsResponse{ - Status: agentpb.StatusCode_NOT_FOUND, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_NOT_FOUND)], + Status: agentpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to fetch cluster app configs", }, nil } @@ -44,63 +47,68 @@ func (a *Agent) GetClusterApps(ctx context.Context, request *agentpb.GetClusterA }) } + a.log.Infof("Found %d apps", len(appData)) return &agentpb.GetClusterAppsResponse{ Status: agentpb.StatusCode_OK, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_OK)], + StatusMessage: "successful", AppData: appData, }, nil } -func (a *Agent) GetClusterAppLaunches(ctx context.Context, request *agentpb.GetClusterAppLaunchesRequest) (*agentpb.GetClusterAppLaunchesResponse, error) { - - res, err := a.GetClusterApps(context.TODO(), &agentpb.GetClusterAppsRequest{}) +func (a *Agent) GetClusterAppLaunches(ctx context.Context, request *agentpb.GetClusterAppLaunchesRequest) ( + *agentpb.GetClusterAppLaunchesResponse, error) { + res, err := a.as.GetAllApps() if err != nil { - return nil, err - } - - if len(res.GetAppData()) == 0 { return &agentpb.GetClusterAppLaunchesResponse{ - Status: agentpb.StatusCode_NOT_FOUND, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_NOT_FOUND)], + Status: agentpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to fetch cluster app configs", }, nil } cfgs := make([]*agentpb.AppLaunchConfig, 0) - for _, r := range res.GetAppData() { - cfg := &agentpb.AppLaunchConfig{ + for _, r := range res { + appConfig := r.GetConfig() + if len(appConfig.LaunchURL) == 0 { + continue + } + + cfgs = append(cfgs, &agentpb.AppLaunchConfig{ ReleaseName: r.GetConfig().GetReleaseName(), Category: r.GetConfig().GetCategory(), Description: r.GetConfig().GetDescription(), Icon: r.GetConfig().GetIcon(), LaunchURL: r.GetConfig().GetLaunchURL(), LaunchRedirectURL: r.GetConfig().GetLaunchRedirectURL(), - } - cfgs = append(cfgs, cfg) + }) } + a.log.Infof("Found %d apps with launch configs", len(cfgs)) return &agentpb.GetClusterAppLaunchesResponse{ LaunchConfigList: cfgs, Status: agentpb.StatusCode_OK, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_OK)], + StatusMessage: "successful", }, nil } -func (a *Agent) GetClusterAppConfig(ctx context.Context, request *agentpb.GetClusterAppConfigRequest) (*agentpb.GetClusterAppConfigResponse, error) { - - res, err := a.as.GetAppConfig("release_name", request.GetReleaseName()) - +func (a *Agent) GetClusterAppConfig(ctx context.Context, request *agentpb.GetClusterAppConfigRequest) ( + *agentpb.GetClusterAppConfigResponse, error) { + res, err := a.as.GetAppConfig(request.ReleaseName) if err != nil && err.Error() == "not found" { return &agentpb.GetClusterAppConfigResponse{ Status: agentpb.StatusCode_NOT_FOUND, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_NOT_FOUND)], + StatusMessage: "app not found", }, nil } if err != nil { - return nil, err + return &agentpb.GetClusterAppConfigResponse{ + Status: agentpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to fetch app config", + }, nil } + a.log.Infof("Fetched app config for app [%s]", request.ReleaseName) return &agentpb.GetClusterAppConfigResponse{ AppConfig: res.GetConfig(), Status: agentpb.StatusCode_OK, @@ -109,21 +117,24 @@ func (a *Agent) GetClusterAppConfig(ctx context.Context, request *agentpb.GetClu } -func (a *Agent) GetClusterAppValues(ctx context.Context, request *agentpb.GetClusterAppValuesRequest) (*agentpb.GetClusterAppValuesResponse, error) { - - res, err := a.as.GetAppConfig("release_name", request.GetReleaseName()) - +func (a *Agent) GetClusterAppValues(ctx context.Context, request *agentpb.GetClusterAppValuesRequest) ( + *agentpb.GetClusterAppValuesResponse, error) { + res, err := a.as.GetAppConfig(request.ReleaseName) if err != nil && err.Error() == "not found" { return &agentpb.GetClusterAppValuesResponse{ Status: agentpb.StatusCode_NOT_FOUND, - StatusMessage: agentpb.StatusCode_name[int32(agentpb.StatusCode_NOT_FOUND)], + StatusMessage: "app not found", }, nil } if err != nil { - return nil, err + return &agentpb.GetClusterAppValuesResponse{ + Status: agentpb.StatusCode_INTERNRAL_ERROR, + StatusMessage: "failed to fetch app config", + }, nil } + a.log.Infof("Fetched app values for app [%s]", request.ReleaseName) return &agentpb.GetClusterAppValuesResponse{ Values: res.GetValues(), Status: agentpb.StatusCode_OK, diff --git a/capten/agent/pkg/agent/agent_cluster_apps_test.go b/capten/agent/pkg/agent/agent_cluster_apps_test.go index ca61e71d..79a1504b 100644 --- a/capten/agent/pkg/agent/agent_cluster_apps_test.go +++ b/capten/agent/pkg/agent/agent_cluster_apps_test.go @@ -7,6 +7,7 @@ import ( "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" captenstore "github.com/kube-tarian/kad/capten/agent/pkg/capten-store" + "github.com/kube-tarian/kad/capten/agent/pkg/config" "github.com/kube-tarian/kad/integrator/common-pkg/logging" "github.com/stretchr/testify/suite" "gopkg.in/yaml.v2" @@ -27,7 +28,7 @@ func TestAgentTestSuite(t *testing.T) { t.Fatal(err) } - agent, err := NewAgent(agentSuite.logger) + agent, err := NewAgent(agentSuite.logger, &config.SericeConfig{}) if err != nil { t.Fatal(err) } @@ -140,7 +141,7 @@ func setEnvVars() { os.Setenv("DB_ADDRESSES", "localhost:9042") os.Setenv("DB_ENTITY_NAME", "TEST_ENTITY") - os.Setenv("CASSANDRA_DB_NAME", "apps") + os.Setenv("DB_NAME", "apps") os.Setenv("DB_NAME", "apps") os.Setenv("DB_SERVICE_USERNAME", "apps_user") os.Setenv("DB_SERVICE_PASSWD", "apps_password") diff --git a/capten/agent/pkg/agent/agent_sync_app_test.go b/capten/agent/pkg/agent/agent_sync_app_test.go deleted file mode 100644 index 36ddee2e..00000000 --- a/capten/agent/pkg/agent/agent_sync_app_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package agent - -/* -func TestSyncApp(t *testing.T) { - - assert := require.New(t) - - var wantConfig types.AppConfig - err := yaml.Unmarshal([]byte(content), &wantConfig) - assert.Nil(err) - - logger := logging.NewLogger() - agent, err := NewAgent(logger) - assert.Nil(err) - - - _, err = agent.SyncApp(context.TODO(), &agentpb.SyncAppRequest{AppConfig: []byte(content)}) - assert.Nil(err) - - gotConfig, err := agent.as.GetAppConfig("signoz") - assert.Nil(err) - - reflect.DeepEqual(wantConfig, gotConfig) - -} - -var content = ` -Name: "signoz" -ChartName: "signoz/signoz" -RepoName: "signoz" -RepoURL: "https://charts.signoz.io" -Namespace: "observability" -ReleaseName: "signoz" -Version: "0.14.0" -CreateNamespace: true -OverrideValues: - clickhouse: - password": admin - frontend: - ingress: - enabled": true - hosts: - - host: "signoz.{{.DomainName}}" - paths: - - path: / - pathType: ImplementationSpecific - port: 3301 - tls: - hosts: - - "signoz.{{.DomainName}}" - secretName: cert-signoz - annotations: - cert-manager.io/cluster-issuer": letsencrypt-prod-cluster - nginx.ingress.kubernetes.io/backend-protocol": HTTPS - nginx.ingress.kubernetes.io/force-ssl-redirect": true - nginx.ingress.kubernetes.io/ssl-redirect": true -` -*/ diff --git a/capten/agent/pkg/capten-store/app_config_store.go b/capten/agent/pkg/capten-store/app_config_store.go index ce4a0c75..293cb756 100644 --- a/capten/agent/pkg/capten-store/app_config_store.go +++ b/capten/agent/pkg/capten-store/app_config_store.go @@ -9,13 +9,18 @@ import ( "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" ) +const ( + insertAppConfigByReleaseNameQuery = "INSERT INTO apps.AppConfig(release_name) VALUES (?)" + updateAppConfigByReleaseNameQuery = "UPDATE apps.AppConfig SET %s WHERE release_name = ?" +) + func CreateSelectByFieldNameQuery(field string) string { return CreateSelectAllQuery() + fmt.Sprintf(" WHERE %s = ?", field) } func CreateSelectAllQuery() string { return "SELECT " + - strings.Join(fields, ", ") + + strings.Join(appConfigfields, ", ") + " FROM apps.AppConfig" } @@ -30,7 +35,7 @@ const ( ) var ( - fields []string = []string{ + appConfigfields = []string{ appName, description, category, chartName, repoName, repoUrl, namespace, releaseName, version, @@ -39,38 +44,24 @@ var ( overrideValues, launchUiValues, icon, installStatus, } - - UpdateAppConfigByReleaseNameQuery = "UPDATE apps.AppConfig SET %s WHERE release_name = ?" ) func (a *Store) UpsertAppConfig(config *agentpb.SyncAppData) error { - - if config == nil { - return fmt.Errorf("nil config") - } - if config.Config != nil && config.Config.ReleaseName == "" { - return fmt.Errorf("no release name") + if len(config.Config.ReleaseName) == 0 { + return fmt.Errorf("app release name empty") } kvPairs, isEmptyUpdate := formUpdateKvPairs(config) - - var insertReleaseNameOnlyAppConfigQuery string = ` - INSERT INTO apps.AppConfig( - release_name - ) VALUES (?)` - batch := a.client.Session().NewBatch(gocql.LoggedBatch) - batch.Query(insertReleaseNameOnlyAppConfigQuery, config.Config.ReleaseName) + batch.Query(insertAppConfigByReleaseNameQuery, config.Config.ReleaseName) if !isEmptyUpdate { - batch.Query(fmt.Sprintf(UpdateAppConfigByReleaseNameQuery, kvPairs), config.Config.ReleaseName) + batch.Query(fmt.Sprintf(updateAppConfigByReleaseNameQuery, kvPairs), config.Config.ReleaseName) } return a.client.Session().ExecuteBatch(batch) - } -func (a *Store) GetAppConfig(column, value string) (*agentpb.SyncAppData, error) { - - selectQuery := a.client.Session().Query(CreateSelectByFieldNameQuery(column), value) +func (a *Store) GetAppConfig(appReleaseName string) (*agentpb.SyncAppData, error) { + selectQuery := a.client.Session().Query(CreateSelectByFieldNameQuery(releaseName), appReleaseName) config := agentpb.AppConfig{} var overrideValues, launchUiValues string @@ -96,7 +87,6 @@ func (a *Store) GetAppConfig(column, value string) (*agentpb.SyncAppData, error) } func (a *Store) GetAllApps() ([]*agentpb.SyncAppData, error) { - selectAllQuery := a.client.Session().Query(CreateSelectAllQuery()) iter := selectAllQuery.Iter() @@ -126,9 +116,7 @@ func (a *Store) GetAllApps() ([]*agentpb.SyncAppData, error) { a.log.Fatal("Failed to iterate through results:", err) return nil, err } - return ret, nil - } func formUpdateKvPairs(config *agentpb.SyncAppData) (string, bool) { @@ -144,88 +132,72 @@ func formUpdateKvPairs(config *agentpb.SyncAppData) (string, bool) { fmt.Sprintf("%s = '%s'", launchUiValues, string(config.Values.LaunchUIValues))) } - { - - if config.Config.CreateNamespace { - params = append(params, - fmt.Sprintf("%s = 'true'", createNamespace)) - } - if config.Config.PrivilegedNamespace { - params = append(params, - fmt.Sprintf("%s = 'true'", privilegedNamespace)) - } + if config.Config.CreateNamespace { + params = append(params, + fmt.Sprintf("%s = 'true'", createNamespace)) + } + if config.Config.PrivilegedNamespace { + params = append(params, + fmt.Sprintf("%s = 'true'", privilegedNamespace)) } - { - - if config.Config.LaunchURL != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", launchUrl, config.Config.LaunchURL)) - } - if config.Config.LaunchRedirectURL != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", launchRedirectUrl, config.Config.LaunchRedirectURL)) - } + if config.Config.LaunchURL != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", launchUrl, config.Config.LaunchURL)) + } + if config.Config.LaunchRedirectURL != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", launchRedirectUrl, config.Config.LaunchRedirectURL)) } - { - if config.Config.AppName != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", appName, config.Config.AppName)) - } - if config.Config.Description != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", description, config.Config.Description)) - } - if config.Config.Category != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", category, config.Config.Category)) - } + if config.Config.AppName != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", appName, config.Config.AppName)) + } + if config.Config.Description != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", description, config.Config.Description)) + } + if config.Config.Category != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", category, config.Config.Category)) } - { - if config.Config.ChartName != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", chartName, config.Config.ChartName)) - } - if config.Config.RepoName != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", repoName, config.Config.RepoName)) - } - if config.Config.RepoURL != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", repoUrl, config.Config.RepoURL)) - } + if config.Config.ChartName != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", chartName, config.Config.ChartName)) + } + if config.Config.RepoName != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", repoName, config.Config.RepoName)) + } + if config.Config.RepoURL != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", repoUrl, config.Config.RepoURL)) } - { - if config.Config.Namespace != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", namespace, config.Config.Namespace)) - } + if config.Config.Namespace != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", namespace, config.Config.Namespace)) + } - if config.Config.Version != "" { - params = append(params, - fmt.Sprintf("%s = '%s'", version, config.Config.Version)) - } + if config.Config.Version != "" { + params = append(params, + fmt.Sprintf("%s = '%s'", version, config.Config.Version)) } - { - if config.Config.Icon != nil && len(config.Config.Icon) > 0 { - params = append(params, - fmt.Sprintf("%s = 0x%s", icon, hex.EncodeToString(config.Config.Icon))) - } - if len(config.Config.InstallStatus) > 0 { - params = append(params, - fmt.Sprintf("%s = '%s'", installStatus, config.Config.InstallStatus)) - } + if config.Config.Icon != nil && len(config.Config.Icon) > 0 { + params = append(params, + fmt.Sprintf("%s = 0x%s", icon, hex.EncodeToString(config.Config.Icon))) + } + if len(config.Config.InstallStatus) > 0 { + params = append(params, + fmt.Sprintf("%s = '%s'", installStatus, config.Config.InstallStatus)) } if len(params) == 0 { // query is empty there is nothing to update return "", true } - return strings.Join(params, ", "), false - } diff --git a/capten/agent/pkg/capten-store/app_config_store_test.go b/capten/agent/pkg/capten-store/app_config_store_test.go index eb56172e..5e30d7eb 100644 --- a/capten/agent/pkg/capten-store/app_config_store_test.go +++ b/capten/agent/pkg/capten-store/app_config_store_test.go @@ -43,7 +43,7 @@ func (suite *StoreSuite) SetupSuite() { // setEnvVars os.Setenv("SOURCE_URI", "file://migrations") - os.Setenv("CASSANDRA_DB_NAME", "apps") // dbName/keyspace + os.Setenv("DB_NAME", "apps") // dbName/keyspace mig, err := migrator.NewCassandraMigrate(suite.logger) if err != nil { diff --git a/capten/agent/pkg/capten-store/migrations.go b/capten/agent/pkg/capten-store/migrations.go index 67d837e4..236ce304 100644 --- a/capten/agent/pkg/capten-store/migrations.go +++ b/capten/agent/pkg/capten-store/migrations.go @@ -8,31 +8,23 @@ import ( ) func Migrate(log logging.Logger) error { - - // CASSANDRA_DB_NAME - // DB_SERVICE_USERNAME - // DB_SERVICE_PASSWD if err := cassandra.Create(log); err != nil { return err } - // SOURCE_URI mig, err := cassandramigrate.NewCassandraMigrate(log) if err != nil { return err } return mig.Run("AppConfig", dbmigration.UP) - } func MigratePurge(log logging.Logger) error { - mig, err := cassandramigrate.NewCassandraMigrate(log) if err != nil { return err } return mig.Run("AppConfig", dbmigration.PURGE) - } diff --git a/capten/agent/pkg/capten-store/migrations_test.go b/capten/agent/pkg/capten-store/migrations_test.go index adebf771..2342af06 100644 --- a/capten/agent/pkg/capten-store/migrations_test.go +++ b/capten/agent/pkg/capten-store/migrations_test.go @@ -21,7 +21,7 @@ func TestMigrations(t *testing.T) { func setEnvVars() { - os.Setenv("CASSANDRA_DB_NAME", "apps") + os.Setenv("DB_NAME", "apps") os.Setenv("DB_SERVICE_USERNAME", "apps_user") os.Setenv("DB_SERVICE_PASSWD", "apps_password") os.Setenv("SOURCE_URI", "file://test_migrations") diff --git a/capten/agent/pkg/config/config.go b/capten/agent/pkg/config/config.go index b7ccb28e..5eec54b3 100644 --- a/capten/agent/pkg/config/config.go +++ b/capten/agent/pkg/config/config.go @@ -7,6 +7,7 @@ import ( type SericeConfig struct { Host string `envconfig:"HOST" default:"0.0.0.0"` Port int `envconfig:"PORT" default:"9091"` + Mode string `envconfig:"MODE" default:"production"` } func GetServiceConfig() (*SericeConfig, error) { diff --git a/capten/common-pkg/db-create/cassandra/cassandra_store.go b/capten/common-pkg/db-create/cassandra/cassandra_store.go index 5d39a0bf..ff5fddb9 100644 --- a/capten/common-pkg/db-create/cassandra/cassandra_store.go +++ b/capten/common-pkg/db-create/cassandra/cassandra_store.go @@ -40,7 +40,6 @@ func (c *CassandraStore) Connect(dbAddrs []string, dbAdminUsername string, dbAdm c.logg.Info("Creating new db cluster configuration") cluster, err := configureClusterConfig(dbAddrs, dbAdminUsername, dbAdminPassword) if err != nil { - c.logg.Error("Error creating/configuring new db store", err) return } diff --git a/capten/common-pkg/db-create/cassandra/db_config.go b/capten/common-pkg/db-create/cassandra/db_config.go index 9f2ae6fe..05f8c1ce 100644 --- a/capten/common-pkg/db-create/cassandra/db_config.go +++ b/capten/common-pkg/db-create/cassandra/db_config.go @@ -4,14 +4,14 @@ package cassandra import "github.com/gocql/gocql" type DBConfig struct { - DbAddresses []string `envconfig:"DB_ADDRESSES" required:"true" default:"localhost:9042"` - DbAdminUsername string `envconfig:"DB_ADMIN_USERNAME" required:"true" default:"cassandra"` + DbAddresses []string `envconfig:"DB_ADDRESSES" required:"true"` + DbAdminUsername string `envconfig:"DB_ADMIN_USERNAME"` DbReplicationFactor string `envconfig:"DB_REPLICATION_FACTOR" required:"true" default:"1"` - DbAdminPassword string `envconfig:"DB_ADMIN_PASSWD" required:"true" default:"cassandra"` + DbAdminPassword string `envconfig:"DB_ADMIN_PASSWD"` - DbName string `envconfig:"CASSANDRA_DB_NAME" required:"true"` + DbName string `envconfig:"DB_NAME" required:"true"` DbServiceUsername string `envconfig:"DB_SERVICE_USERNAME" required:"true"` - DbServicePassword string `envconfig:"DB_SERVICE_PASSWD" required:"true"` + DbServicePassword string `envconfig:"DB_SERVICE_PASSWD"` } type Store interface { diff --git a/capten/common-pkg/db-create/cassandra/db_creation.go b/capten/common-pkg/db-create/cassandra/db_creation.go index 72528bbf..cdb4a1df 100644 --- a/capten/common-pkg/db-create/cassandra/db_creation.go +++ b/capten/common-pkg/db-create/cassandra/db_creation.go @@ -4,13 +4,13 @@ package cassandra import ( "github.com/intelops/go-common/logging" "github.com/kelseyhightower/envconfig" + "github.com/pkg/errors" ) func Create(log logging.Logger) error { dbconf := &DBConfig{} if err := envconfig.Process("", dbconf); err != nil { - log.Errorf("Could not parse service config, Usage: %v ", err) - return err + return errors.WithMessage(err, "could not parse DB config") } dbStore := NewCassandraStore(log, nil) dbConfigurator := NewDbConfigurator(log, dbStore) diff --git a/capten/common-pkg/db-migration/cassandra/cassandra_migration.go b/capten/common-pkg/db-migration/cassandra/cassandra_migration.go index ca5a8950..c28fb5e6 100644 --- a/capten/common-pkg/db-migration/cassandra/cassandra_migration.go +++ b/capten/common-pkg/db-migration/cassandra/cassandra_migration.go @@ -15,9 +15,9 @@ var log = logging.NewLogger() type DBConfig struct { DbDsn string `envconfig:"DB_ADDRESSES" required:"true" default:"localhost:9042"` - DbName string `envconfig:"CASSANDRA_DB_NAME" required:"true"` // keyspace - Username string `envconfig:"DB_SERVICE_USERNAME" required:"true" default:"cassandra"` - Password string `envconfig:"DB_SERVICE_PASSWD" required:"true" default:"cassandra"` + DbName string `envconfig:"DB_NAME" required:"true"` // keyspace + Username string `envconfig:"DB_SERVICE_USERNAME" required:"true"` + Password string `envconfig:"DB_SERVICE_PASSWD"` Consistency string `envconfig:"CASSANDRA_CONSISTENCY" default:"ALL"` SourceURI string `envconfig:"SOURCE_URI" default:"file:///migrations"` } diff --git a/capten/common-pkg/db-migration/cassandra/db_migration_test.go b/capten/common-pkg/db-migration/cassandra/db_migration_test.go index a3faa0f5..c3bcbf07 100644 --- a/capten/common-pkg/db-migration/cassandra/db_migration_test.go +++ b/capten/common-pkg/db-migration/cassandra/db_migration_test.go @@ -31,7 +31,7 @@ func setEnvConfig() { os.Setenv("DB_ADDRESSES", "127.0.0.1:9042") os.Setenv("DB_ADMIN_USERNAME", "cassandra") os.Setenv("DB_SERVICE_USERNAME", "agent") - os.Setenv("CASSANDRA_DB_NAME", "integrator") + os.Setenv("DB_NAME", "integrator") os.Setenv("DB_REPLICATION_FACTOR", `'datacenter1': 1`) os.Setenv("DB_ADMIN_PASSWD", "cassandra") os.Setenv("DB_SERVICE_PASSWD", "agent") diff --git a/charts/kad/values.yaml b/charts/kad/values.yaml index 009bdf42..9f279999 100644 --- a/charts/kad/values.yaml +++ b/charts/kad/values.yaml @@ -46,7 +46,7 @@ vault: policyNames: "vault-policy-certs-admin,vault-policy-service-cred-admin,vault-policy-generic-cred-read" cassandra: - addresses: localhost:9042 + addresses: temporal-temporal-service:9042 userName: kadagent entityName: cassandra keyspace: capten @@ -108,10 +108,3 @@ temporal: argocd: serviceURL: argocd-server.default.svc.cluster.local - -# Attributes to be added -cassandra: - secretName: "temporal-superuser" - serviceURL: "temporal-temporal-service" - keyspaceName: "capten" - tableName: "tools" From 028cc2aabbd056ce7e94a74e5830e4c1378c4bf6 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 22:45:36 +0530 Subject: [PATCH 26/31] agent ping api to check connectivity --- capten/agent/pkg/agent/agent.go | 4 + capten/agent/pkg/agentpb/agent.pb.go | 1238 +++++++++++--------- capten/agent/pkg/agentpb/agent_grpc.pb.go | 37 + capten/capten-sdk/agentpb/agent.pb.go | 1238 +++++++++++--------- capten/capten-sdk/agentpb/agent_grpc.pb.go | 37 + proto/agent.proto | 9 + server/pkg/agent/client.go | 9 + server/pkg/pb/agentpb/agent.pb.go | 1238 +++++++++++--------- server/pkg/pb/agentpb/agent_grpc.pb.go | 37 + 9 files changed, 2173 insertions(+), 1674 deletions(-) diff --git a/capten/agent/pkg/agent/agent.go b/capten/agent/pkg/agent/agent.go index 7f9a520d..9d0b12eb 100644 --- a/capten/agent/pkg/agent/agent.go +++ b/capten/agent/pkg/agent/agent.go @@ -48,6 +48,10 @@ func NewAgent(log logging.Logger) (*Agent, error) { return agent, nil } +func (a *Agent) Ping(ctx context.Context, request *agentpb.PingRequest) (*agentpb.PingResponse, error) { + return &agentpb.PingResponse{Status: agentpb.StatusCode_OK}, nil +} + func (a *Agent) SubmitJob(ctx context.Context, request *agentpb.JobRequest) (*agentpb.JobResponse, error) { a.log.Infof("Recieved event %+v", request) worker, err := a.getWorker(request.Operation) diff --git a/capten/agent/pkg/agentpb/agent.pb.go b/capten/agent/pkg/agentpb/agent.pb.go index b439eac0..f4f46ac9 100644 --- a/capten/agent/pkg/agentpb/agent.pb.go +++ b/capten/agent/pkg/agentpb/agent.pb.go @@ -73,6 +73,91 @@ func (StatusCode) EnumDescriptor() ([]byte, []int) { return file_agent_proto_rawDescGZIP(), []int{0} } +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_proto_msgTypes[0] + 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 PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_agent_proto_rawDescGZIP(), []int{0} +} + +type PingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status StatusCode `protobuf:"varint,1,opt,name=status,proto3,enum=agentpb.StatusCode" json:"status,omitempty"` +} + +func (x *PingResponse) Reset() { + *x = PingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingResponse) ProtoMessage() {} + +func (x *PingResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_proto_msgTypes[1] + 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 PingResponse.ProtoReflect.Descriptor instead. +func (*PingResponse) Descriptor() ([]byte, []int) { + return file_agent_proto_rawDescGZIP(), []int{1} +} + +func (x *PingResponse) GetStatus() StatusCode { + if x != nil { + return x.Status + } + return StatusCode_OK +} + type StoreCredentialRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -87,7 +172,7 @@ type StoreCredentialRequest struct { func (x *StoreCredentialRequest) Reset() { *x = StoreCredentialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[0] + mi := &file_agent_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -100,7 +185,7 @@ func (x *StoreCredentialRequest) String() string { func (*StoreCredentialRequest) ProtoMessage() {} func (x *StoreCredentialRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[0] + mi := &file_agent_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -113,7 +198,7 @@ func (x *StoreCredentialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCredentialRequest.ProtoReflect.Descriptor instead. func (*StoreCredentialRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{0} + return file_agent_proto_rawDescGZIP(), []int{2} } func (x *StoreCredentialRequest) GetCredentialType() string { @@ -156,7 +241,7 @@ type StoreCredentialResponse struct { func (x *StoreCredentialResponse) Reset() { *x = StoreCredentialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[1] + mi := &file_agent_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -169,7 +254,7 @@ func (x *StoreCredentialResponse) String() string { func (*StoreCredentialResponse) ProtoMessage() {} func (x *StoreCredentialResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[1] + mi := &file_agent_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -182,7 +267,7 @@ func (x *StoreCredentialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCredentialResponse.ProtoReflect.Descriptor instead. func (*StoreCredentialResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{1} + return file_agent_proto_rawDescGZIP(), []int{3} } func (x *StoreCredentialResponse) GetStatus() StatusCode { @@ -211,7 +296,7 @@ type SyncRequest struct { func (x *SyncRequest) Reset() { *x = SyncRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[2] + mi := &file_agent_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -224,7 +309,7 @@ func (x *SyncRequest) String() string { func (*SyncRequest) ProtoMessage() {} func (x *SyncRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[2] + mi := &file_agent_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -237,7 +322,7 @@ func (x *SyncRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncRequest.ProtoReflect.Descriptor instead. func (*SyncRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{2} + return file_agent_proto_rawDescGZIP(), []int{4} } func (x *SyncRequest) GetType() string { @@ -266,7 +351,7 @@ type SyncResponse struct { func (x *SyncResponse) Reset() { *x = SyncResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[3] + mi := &file_agent_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -279,7 +364,7 @@ func (x *SyncResponse) String() string { func (*SyncResponse) ProtoMessage() {} func (x *SyncResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[3] + mi := &file_agent_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -292,7 +377,7 @@ func (x *SyncResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncResponse.ProtoReflect.Descriptor instead. func (*SyncResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{3} + return file_agent_proto_rawDescGZIP(), []int{5} } func (x *SyncResponse) GetStatus() string { @@ -328,7 +413,7 @@ type ClimonInstallRequest struct { func (x *ClimonInstallRequest) Reset() { *x = ClimonInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[4] + mi := &file_agent_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -341,7 +426,7 @@ func (x *ClimonInstallRequest) String() string { func (*ClimonInstallRequest) ProtoMessage() {} func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[4] + mi := &file_agent_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -354,7 +439,7 @@ func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonInstallRequest.ProtoReflect.Descriptor instead. func (*ClimonInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{4} + return file_agent_proto_rawDescGZIP(), []int{6} } func (x *ClimonInstallRequest) GetPluginName() string { @@ -435,7 +520,7 @@ type ClimonDeleteRequest struct { func (x *ClimonDeleteRequest) Reset() { *x = ClimonDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[5] + mi := &file_agent_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -448,7 +533,7 @@ func (x *ClimonDeleteRequest) String() string { func (*ClimonDeleteRequest) ProtoMessage() {} func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[5] + mi := &file_agent_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -461,7 +546,7 @@ func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonDeleteRequest.ProtoReflect.Descriptor instead. func (*ClimonDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{5} + return file_agent_proto_rawDescGZIP(), []int{7} } func (x *ClimonDeleteRequest) GetPluginName() string { @@ -518,7 +603,7 @@ type ApplicationInstallRequest struct { func (x *ApplicationInstallRequest) Reset() { *x = ApplicationInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -531,7 +616,7 @@ func (x *ApplicationInstallRequest) String() string { func (*ApplicationInstallRequest) ProtoMessage() {} func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -544,7 +629,7 @@ func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationInstallRequest.ProtoReflect.Descriptor instead. func (*ApplicationInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{6} + return file_agent_proto_rawDescGZIP(), []int{8} } func (x *ApplicationInstallRequest) GetPluginName() string { @@ -625,7 +710,7 @@ type ApplicationDeleteRequest struct { func (x *ApplicationDeleteRequest) Reset() { *x = ApplicationDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -638,7 +723,7 @@ func (x *ApplicationDeleteRequest) String() string { func (*ApplicationDeleteRequest) ProtoMessage() {} func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -651,7 +736,7 @@ func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationDeleteRequest.ProtoReflect.Descriptor instead. func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{7} + return file_agent_proto_rawDescGZIP(), []int{9} } func (x *ApplicationDeleteRequest) GetPluginName() string { @@ -701,7 +786,7 @@ type ClusterRequest struct { func (x *ClusterRequest) Reset() { *x = ClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -714,7 +799,7 @@ func (x *ClusterRequest) String() string { func (*ClusterRequest) ProtoMessage() {} func (x *ClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -727,7 +812,7 @@ func (x *ClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterRequest.ProtoReflect.Descriptor instead. func (*ClusterRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{8} + return file_agent_proto_rawDescGZIP(), []int{10} } func (x *ClusterRequest) GetPluginName() string { @@ -757,7 +842,7 @@ type RepositoryAddRequest struct { func (x *RepositoryAddRequest) Reset() { *x = RepositoryAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -770,7 +855,7 @@ func (x *RepositoryAddRequest) String() string { func (*RepositoryAddRequest) ProtoMessage() {} func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -783,7 +868,7 @@ func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryAddRequest.ProtoReflect.Descriptor instead. func (*RepositoryAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{9} + return file_agent_proto_rawDescGZIP(), []int{11} } func (x *RepositoryAddRequest) GetPluginName() string { @@ -819,7 +904,7 @@ type RepositoryDeleteRequest struct { func (x *RepositoryDeleteRequest) Reset() { *x = RepositoryDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -832,7 +917,7 @@ func (x *RepositoryDeleteRequest) String() string { func (*RepositoryDeleteRequest) ProtoMessage() {} func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -845,7 +930,7 @@ func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryDeleteRequest.ProtoReflect.Descriptor instead. func (*RepositoryDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{10} + return file_agent_proto_rawDescGZIP(), []int{12} } func (x *RepositoryDeleteRequest) GetPluginName() string { @@ -874,7 +959,7 @@ type ProjectAddRequest struct { func (x *ProjectAddRequest) Reset() { *x = ProjectAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -887,7 +972,7 @@ func (x *ProjectAddRequest) String() string { func (*ProjectAddRequest) ProtoMessage() {} func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -900,7 +985,7 @@ func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectAddRequest.ProtoReflect.Descriptor instead. func (*ProjectAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{11} + return file_agent_proto_rawDescGZIP(), []int{13} } func (x *ProjectAddRequest) GetPluginName() string { @@ -929,7 +1014,7 @@ type ProjectDeleteRequest struct { func (x *ProjectDeleteRequest) Reset() { *x = ProjectDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -942,7 +1027,7 @@ func (x *ProjectDeleteRequest) String() string { func (*ProjectDeleteRequest) ProtoMessage() {} func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -955,7 +1040,7 @@ func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{12} + return file_agent_proto_rawDescGZIP(), []int{14} } func (x *ProjectDeleteRequest) GetPluginName() string { @@ -984,7 +1069,7 @@ type JobRequest struct { func (x *JobRequest) Reset() { *x = JobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -997,7 +1082,7 @@ func (x *JobRequest) String() string { func (*JobRequest) ProtoMessage() {} func (x *JobRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1010,7 +1095,7 @@ func (x *JobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. func (*JobRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{13} + return file_agent_proto_rawDescGZIP(), []int{15} } func (x *JobRequest) GetOperation() string { @@ -1040,7 +1125,7 @@ type JobResponse struct { func (x *JobResponse) Reset() { *x = JobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1053,7 +1138,7 @@ func (x *JobResponse) String() string { func (*JobResponse) ProtoMessage() {} func (x *JobResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1066,7 +1151,7 @@ func (x *JobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. func (*JobResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{14} + return file_agent_proto_rawDescGZIP(), []int{16} } func (x *JobResponse) GetId() string { @@ -1101,7 +1186,7 @@ type SyncAppRequest struct { func (x *SyncAppRequest) Reset() { *x = SyncAppRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +1199,7 @@ func (x *SyncAppRequest) String() string { func (*SyncAppRequest) ProtoMessage() {} func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +1212,7 @@ func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppRequest.ProtoReflect.Descriptor instead. func (*SyncAppRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{15} + return file_agent_proto_rawDescGZIP(), []int{17} } func (x *SyncAppRequest) GetData() *SyncAppData { @@ -1149,7 +1234,7 @@ type SyncAppResponse struct { func (x *SyncAppResponse) Reset() { *x = SyncAppResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1162,7 +1247,7 @@ func (x *SyncAppResponse) String() string { func (*SyncAppResponse) ProtoMessage() {} func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1175,7 +1260,7 @@ func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppResponse.ProtoReflect.Descriptor instead. func (*SyncAppResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{16} + return file_agent_proto_rawDescGZIP(), []int{18} } func (x *SyncAppResponse) GetStatus() StatusCode { @@ -1201,7 +1286,7 @@ type GetClusterAppsRequest struct { func (x *GetClusterAppsRequest) Reset() { *x = GetClusterAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1214,7 +1299,7 @@ func (x *GetClusterAppsRequest) String() string { func (*GetClusterAppsRequest) ProtoMessage() {} func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1227,7 +1312,7 @@ func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{17} + return file_agent_proto_rawDescGZIP(), []int{19} } type GetClusterAppsResponse struct { @@ -1243,7 +1328,7 @@ type GetClusterAppsResponse struct { func (x *GetClusterAppsResponse) Reset() { *x = GetClusterAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1341,7 @@ func (x *GetClusterAppsResponse) String() string { func (*GetClusterAppsResponse) ProtoMessage() {} func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1354,7 @@ func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppsResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{18} + return file_agent_proto_rawDescGZIP(), []int{20} } func (x *GetClusterAppsResponse) GetStatus() StatusCode { @@ -1302,7 +1387,7 @@ type GetClusterAppLaunchesRequest struct { func (x *GetClusterAppLaunchesRequest) Reset() { *x = GetClusterAppLaunchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1315,7 +1400,7 @@ func (x *GetClusterAppLaunchesRequest) String() string { func (*GetClusterAppLaunchesRequest) ProtoMessage() {} func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1328,7 +1413,7 @@ func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{19} + return file_agent_proto_rawDescGZIP(), []int{21} } type GetClusterAppLaunchesResponse struct { @@ -1344,7 +1429,7 @@ type GetClusterAppLaunchesResponse struct { func (x *GetClusterAppLaunchesResponse) Reset() { *x = GetClusterAppLaunchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1357,7 +1442,7 @@ func (x *GetClusterAppLaunchesResponse) String() string { func (*GetClusterAppLaunchesResponse) ProtoMessage() {} func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1370,7 +1455,7 @@ func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{20} + return file_agent_proto_rawDescGZIP(), []int{22} } func (x *GetClusterAppLaunchesResponse) GetStatus() StatusCode { @@ -1405,7 +1490,7 @@ type GetClusterAppConfigRequest struct { func (x *GetClusterAppConfigRequest) Reset() { *x = GetClusterAppConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1418,7 +1503,7 @@ func (x *GetClusterAppConfigRequest) String() string { func (*GetClusterAppConfigRequest) ProtoMessage() {} func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1431,7 +1516,7 @@ func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{21} + return file_agent_proto_rawDescGZIP(), []int{23} } func (x *GetClusterAppConfigRequest) GetReleaseName() string { @@ -1454,7 +1539,7 @@ type GetClusterAppConfigResponse struct { func (x *GetClusterAppConfigResponse) Reset() { *x = GetClusterAppConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1467,7 +1552,7 @@ func (x *GetClusterAppConfigResponse) String() string { func (*GetClusterAppConfigResponse) ProtoMessage() {} func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1480,7 +1565,7 @@ func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{22} + return file_agent_proto_rawDescGZIP(), []int{24} } func (x *GetClusterAppConfigResponse) GetStatus() StatusCode { @@ -1515,7 +1600,7 @@ type GetClusterAppValuesRequest struct { func (x *GetClusterAppValuesRequest) Reset() { *x = GetClusterAppValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1528,7 +1613,7 @@ func (x *GetClusterAppValuesRequest) String() string { func (*GetClusterAppValuesRequest) ProtoMessage() {} func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1541,7 +1626,7 @@ func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{23} + return file_agent_proto_rawDescGZIP(), []int{25} } func (x *GetClusterAppValuesRequest) GetReleaseName() string { @@ -1564,7 +1649,7 @@ type GetClusterAppValuesResponse struct { func (x *GetClusterAppValuesResponse) Reset() { *x = GetClusterAppValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1662,7 @@ func (x *GetClusterAppValuesResponse) String() string { func (*GetClusterAppValuesResponse) ProtoMessage() {} func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1675,7 @@ func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{24} + return file_agent_proto_rawDescGZIP(), []int{26} } func (x *GetClusterAppValuesResponse) GetStatus() StatusCode { @@ -1626,7 +1711,7 @@ type SyncAppData struct { func (x *SyncAppData) Reset() { *x = SyncAppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1639,7 +1724,7 @@ func (x *SyncAppData) String() string { func (*SyncAppData) ProtoMessage() {} func (x *SyncAppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1652,7 +1737,7 @@ func (x *SyncAppData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppData.ProtoReflect.Descriptor instead. func (*SyncAppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{25} + return file_agent_proto_rawDescGZIP(), []int{27} } func (x *SyncAppData) GetConfig() *AppConfig { @@ -1681,7 +1766,7 @@ type AppData struct { func (x *AppData) Reset() { *x = AppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1694,7 +1779,7 @@ func (x *AppData) String() string { func (*AppData) ProtoMessage() {} func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1707,7 +1792,7 @@ func (x *AppData) ProtoReflect() protoreflect.Message { // Deprecated: Use AppData.ProtoReflect.Descriptor instead. func (*AppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{26} + return file_agent_proto_rawDescGZIP(), []int{28} } func (x *AppData) GetConfig() *AppConfig { @@ -1735,7 +1820,7 @@ type AppStatus struct { func (x *AppStatus) Reset() { *x = AppStatus{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1748,7 +1833,7 @@ func (x *AppStatus) String() string { func (*AppStatus) ProtoMessage() {} func (x *AppStatus) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1761,7 +1846,7 @@ func (x *AppStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AppStatus.ProtoReflect.Descriptor instead. func (*AppStatus) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{27} + return file_agent_proto_rawDescGZIP(), []int{29} } func (x *AppStatus) GetRuntimeStatus() string { @@ -1796,7 +1881,7 @@ type AppConfig struct { func (x *AppConfig) Reset() { *x = AppConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1894,7 @@ func (x *AppConfig) String() string { func (*AppConfig) ProtoMessage() {} func (x *AppConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1822,7 +1907,7 @@ func (x *AppConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppConfig.ProtoReflect.Descriptor instead. func (*AppConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{28} + return file_agent_proto_rawDescGZIP(), []int{30} } func (x *AppConfig) GetReleaseName() string { @@ -1942,7 +2027,7 @@ type AppValues struct { func (x *AppValues) Reset() { *x = AppValues{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1955,7 +2040,7 @@ func (x *AppValues) String() string { func (*AppValues) ProtoMessage() {} func (x *AppValues) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1968,7 +2053,7 @@ func (x *AppValues) ProtoReflect() protoreflect.Message { // Deprecated: Use AppValues.ProtoReflect.Descriptor instead. func (*AppValues) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{29} + return file_agent_proto_rawDescGZIP(), []int{31} } func (x *AppValues) GetOverrideValues() []byte { @@ -2001,7 +2086,7 @@ type AppLaunchConfig struct { func (x *AppLaunchConfig) Reset() { *x = AppLaunchConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2014,7 +2099,7 @@ func (x *AppLaunchConfig) String() string { func (*AppLaunchConfig) ProtoMessage() {} func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2027,7 +2112,7 @@ func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLaunchConfig.ProtoReflect.Descriptor instead. func (*AppLaunchConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{30} + return file_agent_proto_rawDescGZIP(), []int{32} } func (x *AppLaunchConfig) GetReleaseName() string { @@ -2078,363 +2163,371 @@ var file_agent_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xa0, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 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, 0x6c, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x35, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, - 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, - 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x3b, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa0, 0x02, + 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x12, 0x4f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 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, 0x6c, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, + 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, + 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, - 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x3a, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, - 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0xa2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, - 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0xf3, 0x03, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, + 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, - 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, - 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, - 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, - 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, - 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xee, 0x0a, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1f, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x6c, - 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1d, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, - 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, + 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, + 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, + 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, + 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x03, 0x32, 0xa5, 0x0b, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, + 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, + 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, - 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4e, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x3d, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x17, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x40, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, - 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x10, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x3e, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x12, 0x17, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x25, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2f, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x00, 0x12, 0x50, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x41, 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x10, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x12, + 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x23, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2f, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2450,102 +2543,107 @@ func file_agent_proto_rawDescGZIP() []byte { } var file_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_agent_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: agentpb.StatusCode - (*StoreCredentialRequest)(nil), // 1: agentpb.StoreCredentialRequest - (*StoreCredentialResponse)(nil), // 2: agentpb.StoreCredentialResponse - (*SyncRequest)(nil), // 3: agentpb.SyncRequest - (*SyncResponse)(nil), // 4: agentpb.SyncResponse - (*ClimonInstallRequest)(nil), // 5: agentpb.ClimonInstallRequest - (*ClimonDeleteRequest)(nil), // 6: agentpb.ClimonDeleteRequest - (*ApplicationInstallRequest)(nil), // 7: agentpb.ApplicationInstallRequest - (*ApplicationDeleteRequest)(nil), // 8: agentpb.ApplicationDeleteRequest - (*ClusterRequest)(nil), // 9: agentpb.ClusterRequest - (*RepositoryAddRequest)(nil), // 10: agentpb.RepositoryAddRequest - (*RepositoryDeleteRequest)(nil), // 11: agentpb.RepositoryDeleteRequest - (*ProjectAddRequest)(nil), // 12: agentpb.ProjectAddRequest - (*ProjectDeleteRequest)(nil), // 13: agentpb.ProjectDeleteRequest - (*JobRequest)(nil), // 14: agentpb.JobRequest - (*JobResponse)(nil), // 15: agentpb.JobResponse - (*SyncAppRequest)(nil), // 16: agentpb.SyncAppRequest - (*SyncAppResponse)(nil), // 17: agentpb.SyncAppResponse - (*GetClusterAppsRequest)(nil), // 18: agentpb.GetClusterAppsRequest - (*GetClusterAppsResponse)(nil), // 19: agentpb.GetClusterAppsResponse - (*GetClusterAppLaunchesRequest)(nil), // 20: agentpb.GetClusterAppLaunchesRequest - (*GetClusterAppLaunchesResponse)(nil), // 21: agentpb.GetClusterAppLaunchesResponse - (*GetClusterAppConfigRequest)(nil), // 22: agentpb.GetClusterAppConfigRequest - (*GetClusterAppConfigResponse)(nil), // 23: agentpb.GetClusterAppConfigResponse - (*GetClusterAppValuesRequest)(nil), // 24: agentpb.GetClusterAppValuesRequest - (*GetClusterAppValuesResponse)(nil), // 25: agentpb.GetClusterAppValuesResponse - (*SyncAppData)(nil), // 26: agentpb.SyncAppData - (*AppData)(nil), // 27: agentpb.AppData - (*AppStatus)(nil), // 28: agentpb.AppStatus - (*AppConfig)(nil), // 29: agentpb.AppConfig - (*AppValues)(nil), // 30: agentpb.AppValues - (*AppLaunchConfig)(nil), // 31: agentpb.AppLaunchConfig - nil, // 32: agentpb.StoreCredentialRequest.CredentialEntry - (*any1.Any)(nil), // 33: google.protobuf.Any + (*PingRequest)(nil), // 1: agentpb.PingRequest + (*PingResponse)(nil), // 2: agentpb.PingResponse + (*StoreCredentialRequest)(nil), // 3: agentpb.StoreCredentialRequest + (*StoreCredentialResponse)(nil), // 4: agentpb.StoreCredentialResponse + (*SyncRequest)(nil), // 5: agentpb.SyncRequest + (*SyncResponse)(nil), // 6: agentpb.SyncResponse + (*ClimonInstallRequest)(nil), // 7: agentpb.ClimonInstallRequest + (*ClimonDeleteRequest)(nil), // 8: agentpb.ClimonDeleteRequest + (*ApplicationInstallRequest)(nil), // 9: agentpb.ApplicationInstallRequest + (*ApplicationDeleteRequest)(nil), // 10: agentpb.ApplicationDeleteRequest + (*ClusterRequest)(nil), // 11: agentpb.ClusterRequest + (*RepositoryAddRequest)(nil), // 12: agentpb.RepositoryAddRequest + (*RepositoryDeleteRequest)(nil), // 13: agentpb.RepositoryDeleteRequest + (*ProjectAddRequest)(nil), // 14: agentpb.ProjectAddRequest + (*ProjectDeleteRequest)(nil), // 15: agentpb.ProjectDeleteRequest + (*JobRequest)(nil), // 16: agentpb.JobRequest + (*JobResponse)(nil), // 17: agentpb.JobResponse + (*SyncAppRequest)(nil), // 18: agentpb.SyncAppRequest + (*SyncAppResponse)(nil), // 19: agentpb.SyncAppResponse + (*GetClusterAppsRequest)(nil), // 20: agentpb.GetClusterAppsRequest + (*GetClusterAppsResponse)(nil), // 21: agentpb.GetClusterAppsResponse + (*GetClusterAppLaunchesRequest)(nil), // 22: agentpb.GetClusterAppLaunchesRequest + (*GetClusterAppLaunchesResponse)(nil), // 23: agentpb.GetClusterAppLaunchesResponse + (*GetClusterAppConfigRequest)(nil), // 24: agentpb.GetClusterAppConfigRequest + (*GetClusterAppConfigResponse)(nil), // 25: agentpb.GetClusterAppConfigResponse + (*GetClusterAppValuesRequest)(nil), // 26: agentpb.GetClusterAppValuesRequest + (*GetClusterAppValuesResponse)(nil), // 27: agentpb.GetClusterAppValuesResponse + (*SyncAppData)(nil), // 28: agentpb.SyncAppData + (*AppData)(nil), // 29: agentpb.AppData + (*AppStatus)(nil), // 30: agentpb.AppStatus + (*AppConfig)(nil), // 31: agentpb.AppConfig + (*AppValues)(nil), // 32: agentpb.AppValues + (*AppLaunchConfig)(nil), // 33: agentpb.AppLaunchConfig + nil, // 34: agentpb.StoreCredentialRequest.CredentialEntry + (*any1.Any)(nil), // 35: google.protobuf.Any } var file_agent_proto_depIdxs = []int32{ - 32, // 0: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry - 0, // 1: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode - 33, // 2: agentpb.JobRequest.payload:type_name -> google.protobuf.Any - 26, // 3: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData - 0, // 4: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode - 0, // 5: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode - 27, // 6: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData - 0, // 7: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode - 31, // 8: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig - 0, // 9: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode - 29, // 10: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig - 0, // 11: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode - 30, // 12: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues - 29, // 13: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig - 30, // 14: agentpb.SyncAppData.values:type_name -> agentpb.AppValues - 29, // 15: agentpb.AppData.config:type_name -> agentpb.AppConfig - 28, // 16: agentpb.AppData.status:type_name -> agentpb.AppStatus - 14, // 17: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest - 1, // 18: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest - 3, // 19: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest - 5, // 20: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest - 6, // 21: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest - 7, // 22: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest - 8, // 23: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest - 9, // 24: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest - 9, // 25: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest - 10, // 26: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest - 11, // 27: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest - 12, // 28: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest - 13, // 29: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest - 16, // 30: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest - 18, // 31: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest - 20, // 32: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest - 22, // 33: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest - 24, // 34: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest - 15, // 35: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse - 2, // 36: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse - 4, // 37: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse - 15, // 38: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse - 15, // 39: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse - 15, // 40: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse - 15, // 41: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse - 15, // 42: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse - 15, // 43: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse - 15, // 44: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse - 15, // 45: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse - 15, // 46: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse - 15, // 47: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse - 17, // 48: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse - 19, // 49: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse - 21, // 50: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse - 23, // 51: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse - 25, // 52: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse - 35, // [35:53] is the sub-list for method output_type - 17, // [17:35] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 0, // 0: agentpb.PingResponse.status:type_name -> agentpb.StatusCode + 34, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry + 0, // 2: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode + 35, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any + 28, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData + 0, // 5: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode + 0, // 6: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode + 29, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData + 0, // 8: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode + 33, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig + 0, // 10: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode + 31, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig + 0, // 12: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode + 32, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues + 31, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig + 32, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues + 31, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig + 30, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus + 1, // 18: agentpb.Agent.Ping:input_type -> agentpb.PingRequest + 16, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest + 3, // 20: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest + 5, // 21: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest + 7, // 22: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest + 8, // 23: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest + 9, // 24: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest + 10, // 25: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest + 11, // 26: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest + 11, // 27: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest + 12, // 28: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest + 13, // 29: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest + 14, // 30: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest + 15, // 31: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest + 18, // 32: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest + 20, // 33: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest + 22, // 34: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest + 24, // 35: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest + 26, // 36: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest + 2, // 37: agentpb.Agent.Ping:output_type -> agentpb.PingResponse + 17, // 38: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse + 4, // 39: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse + 6, // 40: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse + 17, // 41: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse + 17, // 42: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse + 17, // 43: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse + 17, // 44: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse + 17, // 45: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse + 17, // 46: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse + 17, // 47: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse + 17, // 48: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse + 17, // 49: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse + 17, // 50: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse + 19, // 51: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse + 21, // 52: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse + 23, // 53: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse + 25, // 54: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse + 27, // 55: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse + 37, // [37:56] is the sub-list for method output_type + 18, // [18:37] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_agent_proto_init() } @@ -2555,7 +2653,7 @@ func file_agent_proto_init() { } if !protoimpl.UnsafeEnabled { file_agent_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCredentialRequest); i { + switch v := v.(*PingRequest); i { case 0: return &v.state case 1: @@ -2567,7 +2665,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCredentialResponse); i { + switch v := v.(*PingResponse); i { case 0: return &v.state case 1: @@ -2579,7 +2677,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncRequest); i { + switch v := v.(*StoreCredentialRequest); i { case 0: return &v.state case 1: @@ -2591,7 +2689,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncResponse); i { + switch v := v.(*StoreCredentialResponse); i { case 0: return &v.state case 1: @@ -2603,7 +2701,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimonInstallRequest); i { + switch v := v.(*SyncRequest); i { case 0: return &v.state case 1: @@ -2615,7 +2713,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimonDeleteRequest); i { + switch v := v.(*SyncResponse); i { case 0: return &v.state case 1: @@ -2627,7 +2725,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationInstallRequest); i { + switch v := v.(*ClimonInstallRequest); i { case 0: return &v.state case 1: @@ -2639,7 +2737,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationDeleteRequest); i { + switch v := v.(*ClimonDeleteRequest); i { case 0: return &v.state case 1: @@ -2651,7 +2749,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterRequest); i { + switch v := v.(*ApplicationInstallRequest); i { case 0: return &v.state case 1: @@ -2663,7 +2761,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryAddRequest); i { + switch v := v.(*ApplicationDeleteRequest); i { case 0: return &v.state case 1: @@ -2675,7 +2773,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryDeleteRequest); i { + switch v := v.(*ClusterRequest); i { case 0: return &v.state case 1: @@ -2687,7 +2785,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectAddRequest); i { + switch v := v.(*RepositoryAddRequest); i { case 0: return &v.state case 1: @@ -2699,7 +2797,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectDeleteRequest); i { + switch v := v.(*RepositoryDeleteRequest); i { case 0: return &v.state case 1: @@ -2711,7 +2809,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobRequest); i { + switch v := v.(*ProjectAddRequest); i { case 0: return &v.state case 1: @@ -2723,7 +2821,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobResponse); i { + switch v := v.(*ProjectDeleteRequest); i { case 0: return &v.state case 1: @@ -2735,7 +2833,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppRequest); i { + switch v := v.(*JobRequest); i { case 0: return &v.state case 1: @@ -2747,7 +2845,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppResponse); i { + switch v := v.(*JobResponse); i { case 0: return &v.state case 1: @@ -2759,7 +2857,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppsRequest); i { + switch v := v.(*SyncAppRequest); i { case 0: return &v.state case 1: @@ -2771,7 +2869,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppsResponse); i { + switch v := v.(*SyncAppResponse); i { case 0: return &v.state case 1: @@ -2783,7 +2881,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppLaunchesRequest); i { + switch v := v.(*GetClusterAppsRequest); i { case 0: return &v.state case 1: @@ -2795,7 +2893,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppLaunchesResponse); i { + switch v := v.(*GetClusterAppsResponse); i { case 0: return &v.state case 1: @@ -2807,7 +2905,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppConfigRequest); i { + switch v := v.(*GetClusterAppLaunchesRequest); i { case 0: return &v.state case 1: @@ -2819,7 +2917,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppConfigResponse); i { + switch v := v.(*GetClusterAppLaunchesResponse); i { case 0: return &v.state case 1: @@ -2831,7 +2929,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppValuesRequest); i { + switch v := v.(*GetClusterAppConfigRequest); i { case 0: return &v.state case 1: @@ -2843,7 +2941,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppValuesResponse); i { + switch v := v.(*GetClusterAppConfigResponse); i { case 0: return &v.state case 1: @@ -2855,7 +2953,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppData); i { + switch v := v.(*GetClusterAppValuesRequest); i { case 0: return &v.state case 1: @@ -2867,7 +2965,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppData); i { + switch v := v.(*GetClusterAppValuesResponse); i { case 0: return &v.state case 1: @@ -2879,7 +2977,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppStatus); i { + switch v := v.(*SyncAppData); i { case 0: return &v.state case 1: @@ -2891,7 +2989,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppConfig); i { + switch v := v.(*AppData); i { case 0: return &v.state case 1: @@ -2903,7 +3001,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppValues); i { + switch v := v.(*AppStatus); i { case 0: return &v.state case 1: @@ -2915,6 +3013,30 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppLaunchConfig); i { case 0: return &v.state @@ -2933,7 +3055,7 @@ func file_agent_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_proto_rawDesc, NumEnums: 1, - NumMessages: 32, + NumMessages: 34, NumExtensions: 0, NumServices: 1, }, diff --git a/capten/agent/pkg/agentpb/agent_grpc.pb.go b/capten/agent/pkg/agentpb/agent_grpc.pb.go index 2368f848..3a3e5948 100644 --- a/capten/agent/pkg/agentpb/agent_grpc.pb.go +++ b/capten/agent/pkg/agentpb/agent_grpc.pb.go @@ -19,6 +19,7 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( + Agent_Ping_FullMethodName = "/agentpb.Agent/Ping" Agent_SubmitJob_FullMethodName = "/agentpb.Agent/SubmitJob" Agent_StoreCredential_FullMethodName = "/agentpb.Agent/StoreCredential" Agent_Sync_FullMethodName = "/agentpb.Agent/Sync" @@ -43,6 +44,7 @@ const ( // // 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 AgentClient interface { + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) StoreCredential(ctx context.Context, in *StoreCredentialRequest, opts ...grpc.CallOption) (*StoreCredentialResponse, error) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) @@ -71,6 +73,15 @@ func NewAgentClient(cc grpc.ClientConnInterface) AgentClient { return &agentClient{cc} } +func (c *agentClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) { + out := new(PingResponse) + err := c.cc.Invoke(ctx, Agent_Ping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *agentClient) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) { out := new(JobResponse) err := c.cc.Invoke(ctx, Agent_SubmitJob_FullMethodName, in, out, opts...) @@ -237,6 +248,7 @@ func (c *agentClient) GetClusterAppValues(ctx context.Context, in *GetClusterApp // All implementations must embed UnimplementedAgentServer // for forward compatibility type AgentServer interface { + Ping(context.Context, *PingRequest) (*PingResponse, error) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) Sync(context.Context, *SyncRequest) (*SyncResponse, error) @@ -262,6 +274,9 @@ type AgentServer interface { type UnimplementedAgentServer struct { } +func (UnimplementedAgentServer) Ping(context.Context, *PingRequest) (*PingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} func (UnimplementedAgentServer) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitJob not implemented") } @@ -329,6 +344,24 @@ func RegisterAgentServer(s grpc.ServiceRegistrar, srv AgentServer) { s.RegisterService(&Agent_ServiceDesc, srv) } +func _Agent_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_Ping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).Ping(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Agent_SubmitJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(JobRequest) if err := dec(in); err != nil { @@ -660,6 +693,10 @@ var Agent_ServiceDesc = grpc.ServiceDesc{ ServiceName: "agentpb.Agent", HandlerType: (*AgentServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _Agent_Ping_Handler, + }, { MethodName: "SubmitJob", Handler: _Agent_SubmitJob_Handler, diff --git a/capten/capten-sdk/agentpb/agent.pb.go b/capten/capten-sdk/agentpb/agent.pb.go index b439eac0..f4f46ac9 100644 --- a/capten/capten-sdk/agentpb/agent.pb.go +++ b/capten/capten-sdk/agentpb/agent.pb.go @@ -73,6 +73,91 @@ func (StatusCode) EnumDescriptor() ([]byte, []int) { return file_agent_proto_rawDescGZIP(), []int{0} } +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_proto_msgTypes[0] + 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 PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_agent_proto_rawDescGZIP(), []int{0} +} + +type PingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status StatusCode `protobuf:"varint,1,opt,name=status,proto3,enum=agentpb.StatusCode" json:"status,omitempty"` +} + +func (x *PingResponse) Reset() { + *x = PingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingResponse) ProtoMessage() {} + +func (x *PingResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_proto_msgTypes[1] + 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 PingResponse.ProtoReflect.Descriptor instead. +func (*PingResponse) Descriptor() ([]byte, []int) { + return file_agent_proto_rawDescGZIP(), []int{1} +} + +func (x *PingResponse) GetStatus() StatusCode { + if x != nil { + return x.Status + } + return StatusCode_OK +} + type StoreCredentialRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -87,7 +172,7 @@ type StoreCredentialRequest struct { func (x *StoreCredentialRequest) Reset() { *x = StoreCredentialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[0] + mi := &file_agent_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -100,7 +185,7 @@ func (x *StoreCredentialRequest) String() string { func (*StoreCredentialRequest) ProtoMessage() {} func (x *StoreCredentialRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[0] + mi := &file_agent_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -113,7 +198,7 @@ func (x *StoreCredentialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCredentialRequest.ProtoReflect.Descriptor instead. func (*StoreCredentialRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{0} + return file_agent_proto_rawDescGZIP(), []int{2} } func (x *StoreCredentialRequest) GetCredentialType() string { @@ -156,7 +241,7 @@ type StoreCredentialResponse struct { func (x *StoreCredentialResponse) Reset() { *x = StoreCredentialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[1] + mi := &file_agent_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -169,7 +254,7 @@ func (x *StoreCredentialResponse) String() string { func (*StoreCredentialResponse) ProtoMessage() {} func (x *StoreCredentialResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[1] + mi := &file_agent_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -182,7 +267,7 @@ func (x *StoreCredentialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCredentialResponse.ProtoReflect.Descriptor instead. func (*StoreCredentialResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{1} + return file_agent_proto_rawDescGZIP(), []int{3} } func (x *StoreCredentialResponse) GetStatus() StatusCode { @@ -211,7 +296,7 @@ type SyncRequest struct { func (x *SyncRequest) Reset() { *x = SyncRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[2] + mi := &file_agent_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -224,7 +309,7 @@ func (x *SyncRequest) String() string { func (*SyncRequest) ProtoMessage() {} func (x *SyncRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[2] + mi := &file_agent_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -237,7 +322,7 @@ func (x *SyncRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncRequest.ProtoReflect.Descriptor instead. func (*SyncRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{2} + return file_agent_proto_rawDescGZIP(), []int{4} } func (x *SyncRequest) GetType() string { @@ -266,7 +351,7 @@ type SyncResponse struct { func (x *SyncResponse) Reset() { *x = SyncResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[3] + mi := &file_agent_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -279,7 +364,7 @@ func (x *SyncResponse) String() string { func (*SyncResponse) ProtoMessage() {} func (x *SyncResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[3] + mi := &file_agent_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -292,7 +377,7 @@ func (x *SyncResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncResponse.ProtoReflect.Descriptor instead. func (*SyncResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{3} + return file_agent_proto_rawDescGZIP(), []int{5} } func (x *SyncResponse) GetStatus() string { @@ -328,7 +413,7 @@ type ClimonInstallRequest struct { func (x *ClimonInstallRequest) Reset() { *x = ClimonInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[4] + mi := &file_agent_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -341,7 +426,7 @@ func (x *ClimonInstallRequest) String() string { func (*ClimonInstallRequest) ProtoMessage() {} func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[4] + mi := &file_agent_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -354,7 +439,7 @@ func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonInstallRequest.ProtoReflect.Descriptor instead. func (*ClimonInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{4} + return file_agent_proto_rawDescGZIP(), []int{6} } func (x *ClimonInstallRequest) GetPluginName() string { @@ -435,7 +520,7 @@ type ClimonDeleteRequest struct { func (x *ClimonDeleteRequest) Reset() { *x = ClimonDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[5] + mi := &file_agent_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -448,7 +533,7 @@ func (x *ClimonDeleteRequest) String() string { func (*ClimonDeleteRequest) ProtoMessage() {} func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[5] + mi := &file_agent_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -461,7 +546,7 @@ func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonDeleteRequest.ProtoReflect.Descriptor instead. func (*ClimonDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{5} + return file_agent_proto_rawDescGZIP(), []int{7} } func (x *ClimonDeleteRequest) GetPluginName() string { @@ -518,7 +603,7 @@ type ApplicationInstallRequest struct { func (x *ApplicationInstallRequest) Reset() { *x = ApplicationInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -531,7 +616,7 @@ func (x *ApplicationInstallRequest) String() string { func (*ApplicationInstallRequest) ProtoMessage() {} func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -544,7 +629,7 @@ func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationInstallRequest.ProtoReflect.Descriptor instead. func (*ApplicationInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{6} + return file_agent_proto_rawDescGZIP(), []int{8} } func (x *ApplicationInstallRequest) GetPluginName() string { @@ -625,7 +710,7 @@ type ApplicationDeleteRequest struct { func (x *ApplicationDeleteRequest) Reset() { *x = ApplicationDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -638,7 +723,7 @@ func (x *ApplicationDeleteRequest) String() string { func (*ApplicationDeleteRequest) ProtoMessage() {} func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -651,7 +736,7 @@ func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationDeleteRequest.ProtoReflect.Descriptor instead. func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{7} + return file_agent_proto_rawDescGZIP(), []int{9} } func (x *ApplicationDeleteRequest) GetPluginName() string { @@ -701,7 +786,7 @@ type ClusterRequest struct { func (x *ClusterRequest) Reset() { *x = ClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -714,7 +799,7 @@ func (x *ClusterRequest) String() string { func (*ClusterRequest) ProtoMessage() {} func (x *ClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -727,7 +812,7 @@ func (x *ClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterRequest.ProtoReflect.Descriptor instead. func (*ClusterRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{8} + return file_agent_proto_rawDescGZIP(), []int{10} } func (x *ClusterRequest) GetPluginName() string { @@ -757,7 +842,7 @@ type RepositoryAddRequest struct { func (x *RepositoryAddRequest) Reset() { *x = RepositoryAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -770,7 +855,7 @@ func (x *RepositoryAddRequest) String() string { func (*RepositoryAddRequest) ProtoMessage() {} func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -783,7 +868,7 @@ func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryAddRequest.ProtoReflect.Descriptor instead. func (*RepositoryAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{9} + return file_agent_proto_rawDescGZIP(), []int{11} } func (x *RepositoryAddRequest) GetPluginName() string { @@ -819,7 +904,7 @@ type RepositoryDeleteRequest struct { func (x *RepositoryDeleteRequest) Reset() { *x = RepositoryDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -832,7 +917,7 @@ func (x *RepositoryDeleteRequest) String() string { func (*RepositoryDeleteRequest) ProtoMessage() {} func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -845,7 +930,7 @@ func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryDeleteRequest.ProtoReflect.Descriptor instead. func (*RepositoryDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{10} + return file_agent_proto_rawDescGZIP(), []int{12} } func (x *RepositoryDeleteRequest) GetPluginName() string { @@ -874,7 +959,7 @@ type ProjectAddRequest struct { func (x *ProjectAddRequest) Reset() { *x = ProjectAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -887,7 +972,7 @@ func (x *ProjectAddRequest) String() string { func (*ProjectAddRequest) ProtoMessage() {} func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -900,7 +985,7 @@ func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectAddRequest.ProtoReflect.Descriptor instead. func (*ProjectAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{11} + return file_agent_proto_rawDescGZIP(), []int{13} } func (x *ProjectAddRequest) GetPluginName() string { @@ -929,7 +1014,7 @@ type ProjectDeleteRequest struct { func (x *ProjectDeleteRequest) Reset() { *x = ProjectDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -942,7 +1027,7 @@ func (x *ProjectDeleteRequest) String() string { func (*ProjectDeleteRequest) ProtoMessage() {} func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -955,7 +1040,7 @@ func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{12} + return file_agent_proto_rawDescGZIP(), []int{14} } func (x *ProjectDeleteRequest) GetPluginName() string { @@ -984,7 +1069,7 @@ type JobRequest struct { func (x *JobRequest) Reset() { *x = JobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -997,7 +1082,7 @@ func (x *JobRequest) String() string { func (*JobRequest) ProtoMessage() {} func (x *JobRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1010,7 +1095,7 @@ func (x *JobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. func (*JobRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{13} + return file_agent_proto_rawDescGZIP(), []int{15} } func (x *JobRequest) GetOperation() string { @@ -1040,7 +1125,7 @@ type JobResponse struct { func (x *JobResponse) Reset() { *x = JobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1053,7 +1138,7 @@ func (x *JobResponse) String() string { func (*JobResponse) ProtoMessage() {} func (x *JobResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1066,7 +1151,7 @@ func (x *JobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. func (*JobResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{14} + return file_agent_proto_rawDescGZIP(), []int{16} } func (x *JobResponse) GetId() string { @@ -1101,7 +1186,7 @@ type SyncAppRequest struct { func (x *SyncAppRequest) Reset() { *x = SyncAppRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +1199,7 @@ func (x *SyncAppRequest) String() string { func (*SyncAppRequest) ProtoMessage() {} func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +1212,7 @@ func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppRequest.ProtoReflect.Descriptor instead. func (*SyncAppRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{15} + return file_agent_proto_rawDescGZIP(), []int{17} } func (x *SyncAppRequest) GetData() *SyncAppData { @@ -1149,7 +1234,7 @@ type SyncAppResponse struct { func (x *SyncAppResponse) Reset() { *x = SyncAppResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1162,7 +1247,7 @@ func (x *SyncAppResponse) String() string { func (*SyncAppResponse) ProtoMessage() {} func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1175,7 +1260,7 @@ func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppResponse.ProtoReflect.Descriptor instead. func (*SyncAppResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{16} + return file_agent_proto_rawDescGZIP(), []int{18} } func (x *SyncAppResponse) GetStatus() StatusCode { @@ -1201,7 +1286,7 @@ type GetClusterAppsRequest struct { func (x *GetClusterAppsRequest) Reset() { *x = GetClusterAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1214,7 +1299,7 @@ func (x *GetClusterAppsRequest) String() string { func (*GetClusterAppsRequest) ProtoMessage() {} func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1227,7 +1312,7 @@ func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{17} + return file_agent_proto_rawDescGZIP(), []int{19} } type GetClusterAppsResponse struct { @@ -1243,7 +1328,7 @@ type GetClusterAppsResponse struct { func (x *GetClusterAppsResponse) Reset() { *x = GetClusterAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1341,7 @@ func (x *GetClusterAppsResponse) String() string { func (*GetClusterAppsResponse) ProtoMessage() {} func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1354,7 @@ func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppsResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{18} + return file_agent_proto_rawDescGZIP(), []int{20} } func (x *GetClusterAppsResponse) GetStatus() StatusCode { @@ -1302,7 +1387,7 @@ type GetClusterAppLaunchesRequest struct { func (x *GetClusterAppLaunchesRequest) Reset() { *x = GetClusterAppLaunchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1315,7 +1400,7 @@ func (x *GetClusterAppLaunchesRequest) String() string { func (*GetClusterAppLaunchesRequest) ProtoMessage() {} func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1328,7 +1413,7 @@ func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{19} + return file_agent_proto_rawDescGZIP(), []int{21} } type GetClusterAppLaunchesResponse struct { @@ -1344,7 +1429,7 @@ type GetClusterAppLaunchesResponse struct { func (x *GetClusterAppLaunchesResponse) Reset() { *x = GetClusterAppLaunchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1357,7 +1442,7 @@ func (x *GetClusterAppLaunchesResponse) String() string { func (*GetClusterAppLaunchesResponse) ProtoMessage() {} func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1370,7 +1455,7 @@ func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{20} + return file_agent_proto_rawDescGZIP(), []int{22} } func (x *GetClusterAppLaunchesResponse) GetStatus() StatusCode { @@ -1405,7 +1490,7 @@ type GetClusterAppConfigRequest struct { func (x *GetClusterAppConfigRequest) Reset() { *x = GetClusterAppConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1418,7 +1503,7 @@ func (x *GetClusterAppConfigRequest) String() string { func (*GetClusterAppConfigRequest) ProtoMessage() {} func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1431,7 +1516,7 @@ func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{21} + return file_agent_proto_rawDescGZIP(), []int{23} } func (x *GetClusterAppConfigRequest) GetReleaseName() string { @@ -1454,7 +1539,7 @@ type GetClusterAppConfigResponse struct { func (x *GetClusterAppConfigResponse) Reset() { *x = GetClusterAppConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1467,7 +1552,7 @@ func (x *GetClusterAppConfigResponse) String() string { func (*GetClusterAppConfigResponse) ProtoMessage() {} func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1480,7 +1565,7 @@ func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{22} + return file_agent_proto_rawDescGZIP(), []int{24} } func (x *GetClusterAppConfigResponse) GetStatus() StatusCode { @@ -1515,7 +1600,7 @@ type GetClusterAppValuesRequest struct { func (x *GetClusterAppValuesRequest) Reset() { *x = GetClusterAppValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1528,7 +1613,7 @@ func (x *GetClusterAppValuesRequest) String() string { func (*GetClusterAppValuesRequest) ProtoMessage() {} func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1541,7 +1626,7 @@ func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{23} + return file_agent_proto_rawDescGZIP(), []int{25} } func (x *GetClusterAppValuesRequest) GetReleaseName() string { @@ -1564,7 +1649,7 @@ type GetClusterAppValuesResponse struct { func (x *GetClusterAppValuesResponse) Reset() { *x = GetClusterAppValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1662,7 @@ func (x *GetClusterAppValuesResponse) String() string { func (*GetClusterAppValuesResponse) ProtoMessage() {} func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1675,7 @@ func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{24} + return file_agent_proto_rawDescGZIP(), []int{26} } func (x *GetClusterAppValuesResponse) GetStatus() StatusCode { @@ -1626,7 +1711,7 @@ type SyncAppData struct { func (x *SyncAppData) Reset() { *x = SyncAppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1639,7 +1724,7 @@ func (x *SyncAppData) String() string { func (*SyncAppData) ProtoMessage() {} func (x *SyncAppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1652,7 +1737,7 @@ func (x *SyncAppData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppData.ProtoReflect.Descriptor instead. func (*SyncAppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{25} + return file_agent_proto_rawDescGZIP(), []int{27} } func (x *SyncAppData) GetConfig() *AppConfig { @@ -1681,7 +1766,7 @@ type AppData struct { func (x *AppData) Reset() { *x = AppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1694,7 +1779,7 @@ func (x *AppData) String() string { func (*AppData) ProtoMessage() {} func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1707,7 +1792,7 @@ func (x *AppData) ProtoReflect() protoreflect.Message { // Deprecated: Use AppData.ProtoReflect.Descriptor instead. func (*AppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{26} + return file_agent_proto_rawDescGZIP(), []int{28} } func (x *AppData) GetConfig() *AppConfig { @@ -1735,7 +1820,7 @@ type AppStatus struct { func (x *AppStatus) Reset() { *x = AppStatus{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1748,7 +1833,7 @@ func (x *AppStatus) String() string { func (*AppStatus) ProtoMessage() {} func (x *AppStatus) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1761,7 +1846,7 @@ func (x *AppStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AppStatus.ProtoReflect.Descriptor instead. func (*AppStatus) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{27} + return file_agent_proto_rawDescGZIP(), []int{29} } func (x *AppStatus) GetRuntimeStatus() string { @@ -1796,7 +1881,7 @@ type AppConfig struct { func (x *AppConfig) Reset() { *x = AppConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1894,7 @@ func (x *AppConfig) String() string { func (*AppConfig) ProtoMessage() {} func (x *AppConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1822,7 +1907,7 @@ func (x *AppConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppConfig.ProtoReflect.Descriptor instead. func (*AppConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{28} + return file_agent_proto_rawDescGZIP(), []int{30} } func (x *AppConfig) GetReleaseName() string { @@ -1942,7 +2027,7 @@ type AppValues struct { func (x *AppValues) Reset() { *x = AppValues{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1955,7 +2040,7 @@ func (x *AppValues) String() string { func (*AppValues) ProtoMessage() {} func (x *AppValues) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1968,7 +2053,7 @@ func (x *AppValues) ProtoReflect() protoreflect.Message { // Deprecated: Use AppValues.ProtoReflect.Descriptor instead. func (*AppValues) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{29} + return file_agent_proto_rawDescGZIP(), []int{31} } func (x *AppValues) GetOverrideValues() []byte { @@ -2001,7 +2086,7 @@ type AppLaunchConfig struct { func (x *AppLaunchConfig) Reset() { *x = AppLaunchConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2014,7 +2099,7 @@ func (x *AppLaunchConfig) String() string { func (*AppLaunchConfig) ProtoMessage() {} func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2027,7 +2112,7 @@ func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLaunchConfig.ProtoReflect.Descriptor instead. func (*AppLaunchConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{30} + return file_agent_proto_rawDescGZIP(), []int{32} } func (x *AppLaunchConfig) GetReleaseName() string { @@ -2078,363 +2163,371 @@ var file_agent_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xa0, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 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, 0x6c, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x35, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, - 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, - 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x3b, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa0, 0x02, + 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x12, 0x4f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 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, 0x6c, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, + 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, + 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, - 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x3a, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, - 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0xa2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, - 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0xf3, 0x03, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, + 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, - 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, - 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, - 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, - 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, - 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xee, 0x0a, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1f, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x6c, - 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1d, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, - 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, + 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, + 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, + 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, + 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x03, 0x32, 0xa5, 0x0b, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, + 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, + 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, - 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4e, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x3d, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x17, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x40, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, - 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x10, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x3e, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x12, 0x17, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x25, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2f, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x00, 0x12, 0x50, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x41, 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x10, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x12, + 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x23, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2f, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2450,102 +2543,107 @@ func file_agent_proto_rawDescGZIP() []byte { } var file_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_agent_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: agentpb.StatusCode - (*StoreCredentialRequest)(nil), // 1: agentpb.StoreCredentialRequest - (*StoreCredentialResponse)(nil), // 2: agentpb.StoreCredentialResponse - (*SyncRequest)(nil), // 3: agentpb.SyncRequest - (*SyncResponse)(nil), // 4: agentpb.SyncResponse - (*ClimonInstallRequest)(nil), // 5: agentpb.ClimonInstallRequest - (*ClimonDeleteRequest)(nil), // 6: agentpb.ClimonDeleteRequest - (*ApplicationInstallRequest)(nil), // 7: agentpb.ApplicationInstallRequest - (*ApplicationDeleteRequest)(nil), // 8: agentpb.ApplicationDeleteRequest - (*ClusterRequest)(nil), // 9: agentpb.ClusterRequest - (*RepositoryAddRequest)(nil), // 10: agentpb.RepositoryAddRequest - (*RepositoryDeleteRequest)(nil), // 11: agentpb.RepositoryDeleteRequest - (*ProjectAddRequest)(nil), // 12: agentpb.ProjectAddRequest - (*ProjectDeleteRequest)(nil), // 13: agentpb.ProjectDeleteRequest - (*JobRequest)(nil), // 14: agentpb.JobRequest - (*JobResponse)(nil), // 15: agentpb.JobResponse - (*SyncAppRequest)(nil), // 16: agentpb.SyncAppRequest - (*SyncAppResponse)(nil), // 17: agentpb.SyncAppResponse - (*GetClusterAppsRequest)(nil), // 18: agentpb.GetClusterAppsRequest - (*GetClusterAppsResponse)(nil), // 19: agentpb.GetClusterAppsResponse - (*GetClusterAppLaunchesRequest)(nil), // 20: agentpb.GetClusterAppLaunchesRequest - (*GetClusterAppLaunchesResponse)(nil), // 21: agentpb.GetClusterAppLaunchesResponse - (*GetClusterAppConfigRequest)(nil), // 22: agentpb.GetClusterAppConfigRequest - (*GetClusterAppConfigResponse)(nil), // 23: agentpb.GetClusterAppConfigResponse - (*GetClusterAppValuesRequest)(nil), // 24: agentpb.GetClusterAppValuesRequest - (*GetClusterAppValuesResponse)(nil), // 25: agentpb.GetClusterAppValuesResponse - (*SyncAppData)(nil), // 26: agentpb.SyncAppData - (*AppData)(nil), // 27: agentpb.AppData - (*AppStatus)(nil), // 28: agentpb.AppStatus - (*AppConfig)(nil), // 29: agentpb.AppConfig - (*AppValues)(nil), // 30: agentpb.AppValues - (*AppLaunchConfig)(nil), // 31: agentpb.AppLaunchConfig - nil, // 32: agentpb.StoreCredentialRequest.CredentialEntry - (*any1.Any)(nil), // 33: google.protobuf.Any + (*PingRequest)(nil), // 1: agentpb.PingRequest + (*PingResponse)(nil), // 2: agentpb.PingResponse + (*StoreCredentialRequest)(nil), // 3: agentpb.StoreCredentialRequest + (*StoreCredentialResponse)(nil), // 4: agentpb.StoreCredentialResponse + (*SyncRequest)(nil), // 5: agentpb.SyncRequest + (*SyncResponse)(nil), // 6: agentpb.SyncResponse + (*ClimonInstallRequest)(nil), // 7: agentpb.ClimonInstallRequest + (*ClimonDeleteRequest)(nil), // 8: agentpb.ClimonDeleteRequest + (*ApplicationInstallRequest)(nil), // 9: agentpb.ApplicationInstallRequest + (*ApplicationDeleteRequest)(nil), // 10: agentpb.ApplicationDeleteRequest + (*ClusterRequest)(nil), // 11: agentpb.ClusterRequest + (*RepositoryAddRequest)(nil), // 12: agentpb.RepositoryAddRequest + (*RepositoryDeleteRequest)(nil), // 13: agentpb.RepositoryDeleteRequest + (*ProjectAddRequest)(nil), // 14: agentpb.ProjectAddRequest + (*ProjectDeleteRequest)(nil), // 15: agentpb.ProjectDeleteRequest + (*JobRequest)(nil), // 16: agentpb.JobRequest + (*JobResponse)(nil), // 17: agentpb.JobResponse + (*SyncAppRequest)(nil), // 18: agentpb.SyncAppRequest + (*SyncAppResponse)(nil), // 19: agentpb.SyncAppResponse + (*GetClusterAppsRequest)(nil), // 20: agentpb.GetClusterAppsRequest + (*GetClusterAppsResponse)(nil), // 21: agentpb.GetClusterAppsResponse + (*GetClusterAppLaunchesRequest)(nil), // 22: agentpb.GetClusterAppLaunchesRequest + (*GetClusterAppLaunchesResponse)(nil), // 23: agentpb.GetClusterAppLaunchesResponse + (*GetClusterAppConfigRequest)(nil), // 24: agentpb.GetClusterAppConfigRequest + (*GetClusterAppConfigResponse)(nil), // 25: agentpb.GetClusterAppConfigResponse + (*GetClusterAppValuesRequest)(nil), // 26: agentpb.GetClusterAppValuesRequest + (*GetClusterAppValuesResponse)(nil), // 27: agentpb.GetClusterAppValuesResponse + (*SyncAppData)(nil), // 28: agentpb.SyncAppData + (*AppData)(nil), // 29: agentpb.AppData + (*AppStatus)(nil), // 30: agentpb.AppStatus + (*AppConfig)(nil), // 31: agentpb.AppConfig + (*AppValues)(nil), // 32: agentpb.AppValues + (*AppLaunchConfig)(nil), // 33: agentpb.AppLaunchConfig + nil, // 34: agentpb.StoreCredentialRequest.CredentialEntry + (*any1.Any)(nil), // 35: google.protobuf.Any } var file_agent_proto_depIdxs = []int32{ - 32, // 0: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry - 0, // 1: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode - 33, // 2: agentpb.JobRequest.payload:type_name -> google.protobuf.Any - 26, // 3: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData - 0, // 4: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode - 0, // 5: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode - 27, // 6: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData - 0, // 7: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode - 31, // 8: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig - 0, // 9: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode - 29, // 10: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig - 0, // 11: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode - 30, // 12: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues - 29, // 13: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig - 30, // 14: agentpb.SyncAppData.values:type_name -> agentpb.AppValues - 29, // 15: agentpb.AppData.config:type_name -> agentpb.AppConfig - 28, // 16: agentpb.AppData.status:type_name -> agentpb.AppStatus - 14, // 17: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest - 1, // 18: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest - 3, // 19: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest - 5, // 20: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest - 6, // 21: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest - 7, // 22: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest - 8, // 23: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest - 9, // 24: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest - 9, // 25: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest - 10, // 26: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest - 11, // 27: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest - 12, // 28: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest - 13, // 29: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest - 16, // 30: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest - 18, // 31: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest - 20, // 32: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest - 22, // 33: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest - 24, // 34: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest - 15, // 35: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse - 2, // 36: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse - 4, // 37: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse - 15, // 38: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse - 15, // 39: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse - 15, // 40: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse - 15, // 41: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse - 15, // 42: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse - 15, // 43: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse - 15, // 44: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse - 15, // 45: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse - 15, // 46: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse - 15, // 47: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse - 17, // 48: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse - 19, // 49: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse - 21, // 50: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse - 23, // 51: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse - 25, // 52: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse - 35, // [35:53] is the sub-list for method output_type - 17, // [17:35] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 0, // 0: agentpb.PingResponse.status:type_name -> agentpb.StatusCode + 34, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry + 0, // 2: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode + 35, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any + 28, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData + 0, // 5: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode + 0, // 6: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode + 29, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData + 0, // 8: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode + 33, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig + 0, // 10: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode + 31, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig + 0, // 12: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode + 32, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues + 31, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig + 32, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues + 31, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig + 30, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus + 1, // 18: agentpb.Agent.Ping:input_type -> agentpb.PingRequest + 16, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest + 3, // 20: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest + 5, // 21: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest + 7, // 22: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest + 8, // 23: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest + 9, // 24: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest + 10, // 25: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest + 11, // 26: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest + 11, // 27: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest + 12, // 28: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest + 13, // 29: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest + 14, // 30: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest + 15, // 31: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest + 18, // 32: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest + 20, // 33: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest + 22, // 34: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest + 24, // 35: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest + 26, // 36: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest + 2, // 37: agentpb.Agent.Ping:output_type -> agentpb.PingResponse + 17, // 38: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse + 4, // 39: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse + 6, // 40: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse + 17, // 41: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse + 17, // 42: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse + 17, // 43: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse + 17, // 44: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse + 17, // 45: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse + 17, // 46: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse + 17, // 47: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse + 17, // 48: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse + 17, // 49: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse + 17, // 50: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse + 19, // 51: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse + 21, // 52: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse + 23, // 53: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse + 25, // 54: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse + 27, // 55: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse + 37, // [37:56] is the sub-list for method output_type + 18, // [18:37] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_agent_proto_init() } @@ -2555,7 +2653,7 @@ func file_agent_proto_init() { } if !protoimpl.UnsafeEnabled { file_agent_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCredentialRequest); i { + switch v := v.(*PingRequest); i { case 0: return &v.state case 1: @@ -2567,7 +2665,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCredentialResponse); i { + switch v := v.(*PingResponse); i { case 0: return &v.state case 1: @@ -2579,7 +2677,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncRequest); i { + switch v := v.(*StoreCredentialRequest); i { case 0: return &v.state case 1: @@ -2591,7 +2689,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncResponse); i { + switch v := v.(*StoreCredentialResponse); i { case 0: return &v.state case 1: @@ -2603,7 +2701,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimonInstallRequest); i { + switch v := v.(*SyncRequest); i { case 0: return &v.state case 1: @@ -2615,7 +2713,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimonDeleteRequest); i { + switch v := v.(*SyncResponse); i { case 0: return &v.state case 1: @@ -2627,7 +2725,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationInstallRequest); i { + switch v := v.(*ClimonInstallRequest); i { case 0: return &v.state case 1: @@ -2639,7 +2737,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationDeleteRequest); i { + switch v := v.(*ClimonDeleteRequest); i { case 0: return &v.state case 1: @@ -2651,7 +2749,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterRequest); i { + switch v := v.(*ApplicationInstallRequest); i { case 0: return &v.state case 1: @@ -2663,7 +2761,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryAddRequest); i { + switch v := v.(*ApplicationDeleteRequest); i { case 0: return &v.state case 1: @@ -2675,7 +2773,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryDeleteRequest); i { + switch v := v.(*ClusterRequest); i { case 0: return &v.state case 1: @@ -2687,7 +2785,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectAddRequest); i { + switch v := v.(*RepositoryAddRequest); i { case 0: return &v.state case 1: @@ -2699,7 +2797,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectDeleteRequest); i { + switch v := v.(*RepositoryDeleteRequest); i { case 0: return &v.state case 1: @@ -2711,7 +2809,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobRequest); i { + switch v := v.(*ProjectAddRequest); i { case 0: return &v.state case 1: @@ -2723,7 +2821,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobResponse); i { + switch v := v.(*ProjectDeleteRequest); i { case 0: return &v.state case 1: @@ -2735,7 +2833,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppRequest); i { + switch v := v.(*JobRequest); i { case 0: return &v.state case 1: @@ -2747,7 +2845,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppResponse); i { + switch v := v.(*JobResponse); i { case 0: return &v.state case 1: @@ -2759,7 +2857,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppsRequest); i { + switch v := v.(*SyncAppRequest); i { case 0: return &v.state case 1: @@ -2771,7 +2869,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppsResponse); i { + switch v := v.(*SyncAppResponse); i { case 0: return &v.state case 1: @@ -2783,7 +2881,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppLaunchesRequest); i { + switch v := v.(*GetClusterAppsRequest); i { case 0: return &v.state case 1: @@ -2795,7 +2893,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppLaunchesResponse); i { + switch v := v.(*GetClusterAppsResponse); i { case 0: return &v.state case 1: @@ -2807,7 +2905,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppConfigRequest); i { + switch v := v.(*GetClusterAppLaunchesRequest); i { case 0: return &v.state case 1: @@ -2819,7 +2917,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppConfigResponse); i { + switch v := v.(*GetClusterAppLaunchesResponse); i { case 0: return &v.state case 1: @@ -2831,7 +2929,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppValuesRequest); i { + switch v := v.(*GetClusterAppConfigRequest); i { case 0: return &v.state case 1: @@ -2843,7 +2941,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppValuesResponse); i { + switch v := v.(*GetClusterAppConfigResponse); i { case 0: return &v.state case 1: @@ -2855,7 +2953,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppData); i { + switch v := v.(*GetClusterAppValuesRequest); i { case 0: return &v.state case 1: @@ -2867,7 +2965,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppData); i { + switch v := v.(*GetClusterAppValuesResponse); i { case 0: return &v.state case 1: @@ -2879,7 +2977,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppStatus); i { + switch v := v.(*SyncAppData); i { case 0: return &v.state case 1: @@ -2891,7 +2989,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppConfig); i { + switch v := v.(*AppData); i { case 0: return &v.state case 1: @@ -2903,7 +3001,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppValues); i { + switch v := v.(*AppStatus); i { case 0: return &v.state case 1: @@ -2915,6 +3013,30 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppLaunchConfig); i { case 0: return &v.state @@ -2933,7 +3055,7 @@ func file_agent_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_proto_rawDesc, NumEnums: 1, - NumMessages: 32, + NumMessages: 34, NumExtensions: 0, NumServices: 1, }, diff --git a/capten/capten-sdk/agentpb/agent_grpc.pb.go b/capten/capten-sdk/agentpb/agent_grpc.pb.go index 2368f848..3a3e5948 100644 --- a/capten/capten-sdk/agentpb/agent_grpc.pb.go +++ b/capten/capten-sdk/agentpb/agent_grpc.pb.go @@ -19,6 +19,7 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( + Agent_Ping_FullMethodName = "/agentpb.Agent/Ping" Agent_SubmitJob_FullMethodName = "/agentpb.Agent/SubmitJob" Agent_StoreCredential_FullMethodName = "/agentpb.Agent/StoreCredential" Agent_Sync_FullMethodName = "/agentpb.Agent/Sync" @@ -43,6 +44,7 @@ const ( // // 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 AgentClient interface { + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) StoreCredential(ctx context.Context, in *StoreCredentialRequest, opts ...grpc.CallOption) (*StoreCredentialResponse, error) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) @@ -71,6 +73,15 @@ func NewAgentClient(cc grpc.ClientConnInterface) AgentClient { return &agentClient{cc} } +func (c *agentClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) { + out := new(PingResponse) + err := c.cc.Invoke(ctx, Agent_Ping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *agentClient) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) { out := new(JobResponse) err := c.cc.Invoke(ctx, Agent_SubmitJob_FullMethodName, in, out, opts...) @@ -237,6 +248,7 @@ func (c *agentClient) GetClusterAppValues(ctx context.Context, in *GetClusterApp // All implementations must embed UnimplementedAgentServer // for forward compatibility type AgentServer interface { + Ping(context.Context, *PingRequest) (*PingResponse, error) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) Sync(context.Context, *SyncRequest) (*SyncResponse, error) @@ -262,6 +274,9 @@ type AgentServer interface { type UnimplementedAgentServer struct { } +func (UnimplementedAgentServer) Ping(context.Context, *PingRequest) (*PingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} func (UnimplementedAgentServer) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitJob not implemented") } @@ -329,6 +344,24 @@ func RegisterAgentServer(s grpc.ServiceRegistrar, srv AgentServer) { s.RegisterService(&Agent_ServiceDesc, srv) } +func _Agent_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_Ping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).Ping(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Agent_SubmitJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(JobRequest) if err := dec(in); err != nil { @@ -660,6 +693,10 @@ var Agent_ServiceDesc = grpc.ServiceDesc{ ServiceName: "agentpb.Agent", HandlerType: (*AgentServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _Agent_Ping_Handler, + }, { MethodName: "SubmitJob", Handler: _Agent_SubmitJob_Handler, diff --git a/proto/agent.proto b/proto/agent.proto index 7613d0d3..7f2d8a5f 100644 --- a/proto/agent.proto +++ b/proto/agent.proto @@ -9,6 +9,8 @@ package agentpb; // The greeting service definition. service Agent { + rpc Ping (PingRequest) returns (PingResponse) {} + rpc SubmitJob (JobRequest) returns (JobResponse) {} rpc StoreCredential (StoreCredentialRequest) returns (StoreCredentialResponse) {} rpc Sync(SyncRequest) returns (SyncResponse) {} @@ -43,6 +45,13 @@ enum StatusCode { NOT_FOUND = 3; } +message PingRequest { +} + +message PingResponse { + StatusCode status = 1; +} + message StoreCredentialRequest { string credentialType = 1; string credEntityName = 2; diff --git a/server/pkg/agent/client.go b/server/pkg/agent/client.go index 17247ee4..1349895e 100644 --- a/server/pkg/agent/client.go +++ b/server/pkg/agent/client.go @@ -1,6 +1,7 @@ package agent import ( + "context" "crypto/tls" "crypto/x509" "fmt" @@ -35,6 +36,14 @@ func NewAgent(cfg *Config) (*Agent, error) { } agentClient := agentpb.NewAgentClient(conn) + pingResp, err := agentClient.Ping(context.TODO(), &agentpb.PingRequest{}) + if err != nil { + return nil, errors.WithMessage(err, "failed to ping agent") + } + if pingResp.Status != agentpb.StatusCode_OK { + return nil, errors.WithMessage(err, "ping failed") + } + return &Agent{ cfg: cfg, connection: conn, diff --git a/server/pkg/pb/agentpb/agent.pb.go b/server/pkg/pb/agentpb/agent.pb.go index b439eac0..f4f46ac9 100644 --- a/server/pkg/pb/agentpb/agent.pb.go +++ b/server/pkg/pb/agentpb/agent.pb.go @@ -73,6 +73,91 @@ func (StatusCode) EnumDescriptor() ([]byte, []int) { return file_agent_proto_rawDescGZIP(), []int{0} } +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_proto_msgTypes[0] + 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 PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_agent_proto_rawDescGZIP(), []int{0} +} + +type PingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status StatusCode `protobuf:"varint,1,opt,name=status,proto3,enum=agentpb.StatusCode" json:"status,omitempty"` +} + +func (x *PingResponse) Reset() { + *x = PingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingResponse) ProtoMessage() {} + +func (x *PingResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_proto_msgTypes[1] + 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 PingResponse.ProtoReflect.Descriptor instead. +func (*PingResponse) Descriptor() ([]byte, []int) { + return file_agent_proto_rawDescGZIP(), []int{1} +} + +func (x *PingResponse) GetStatus() StatusCode { + if x != nil { + return x.Status + } + return StatusCode_OK +} + type StoreCredentialRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -87,7 +172,7 @@ type StoreCredentialRequest struct { func (x *StoreCredentialRequest) Reset() { *x = StoreCredentialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[0] + mi := &file_agent_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -100,7 +185,7 @@ func (x *StoreCredentialRequest) String() string { func (*StoreCredentialRequest) ProtoMessage() {} func (x *StoreCredentialRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[0] + mi := &file_agent_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -113,7 +198,7 @@ func (x *StoreCredentialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCredentialRequest.ProtoReflect.Descriptor instead. func (*StoreCredentialRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{0} + return file_agent_proto_rawDescGZIP(), []int{2} } func (x *StoreCredentialRequest) GetCredentialType() string { @@ -156,7 +241,7 @@ type StoreCredentialResponse struct { func (x *StoreCredentialResponse) Reset() { *x = StoreCredentialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[1] + mi := &file_agent_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -169,7 +254,7 @@ func (x *StoreCredentialResponse) String() string { func (*StoreCredentialResponse) ProtoMessage() {} func (x *StoreCredentialResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[1] + mi := &file_agent_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -182,7 +267,7 @@ func (x *StoreCredentialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCredentialResponse.ProtoReflect.Descriptor instead. func (*StoreCredentialResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{1} + return file_agent_proto_rawDescGZIP(), []int{3} } func (x *StoreCredentialResponse) GetStatus() StatusCode { @@ -211,7 +296,7 @@ type SyncRequest struct { func (x *SyncRequest) Reset() { *x = SyncRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[2] + mi := &file_agent_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -224,7 +309,7 @@ func (x *SyncRequest) String() string { func (*SyncRequest) ProtoMessage() {} func (x *SyncRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[2] + mi := &file_agent_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -237,7 +322,7 @@ func (x *SyncRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncRequest.ProtoReflect.Descriptor instead. func (*SyncRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{2} + return file_agent_proto_rawDescGZIP(), []int{4} } func (x *SyncRequest) GetType() string { @@ -266,7 +351,7 @@ type SyncResponse struct { func (x *SyncResponse) Reset() { *x = SyncResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[3] + mi := &file_agent_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -279,7 +364,7 @@ func (x *SyncResponse) String() string { func (*SyncResponse) ProtoMessage() {} func (x *SyncResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[3] + mi := &file_agent_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -292,7 +377,7 @@ func (x *SyncResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncResponse.ProtoReflect.Descriptor instead. func (*SyncResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{3} + return file_agent_proto_rawDescGZIP(), []int{5} } func (x *SyncResponse) GetStatus() string { @@ -328,7 +413,7 @@ type ClimonInstallRequest struct { func (x *ClimonInstallRequest) Reset() { *x = ClimonInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[4] + mi := &file_agent_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -341,7 +426,7 @@ func (x *ClimonInstallRequest) String() string { func (*ClimonInstallRequest) ProtoMessage() {} func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[4] + mi := &file_agent_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -354,7 +439,7 @@ func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonInstallRequest.ProtoReflect.Descriptor instead. func (*ClimonInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{4} + return file_agent_proto_rawDescGZIP(), []int{6} } func (x *ClimonInstallRequest) GetPluginName() string { @@ -435,7 +520,7 @@ type ClimonDeleteRequest struct { func (x *ClimonDeleteRequest) Reset() { *x = ClimonDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[5] + mi := &file_agent_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -448,7 +533,7 @@ func (x *ClimonDeleteRequest) String() string { func (*ClimonDeleteRequest) ProtoMessage() {} func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[5] + mi := &file_agent_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -461,7 +546,7 @@ func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonDeleteRequest.ProtoReflect.Descriptor instead. func (*ClimonDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{5} + return file_agent_proto_rawDescGZIP(), []int{7} } func (x *ClimonDeleteRequest) GetPluginName() string { @@ -518,7 +603,7 @@ type ApplicationInstallRequest struct { func (x *ApplicationInstallRequest) Reset() { *x = ApplicationInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -531,7 +616,7 @@ func (x *ApplicationInstallRequest) String() string { func (*ApplicationInstallRequest) ProtoMessage() {} func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -544,7 +629,7 @@ func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationInstallRequest.ProtoReflect.Descriptor instead. func (*ApplicationInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{6} + return file_agent_proto_rawDescGZIP(), []int{8} } func (x *ApplicationInstallRequest) GetPluginName() string { @@ -625,7 +710,7 @@ type ApplicationDeleteRequest struct { func (x *ApplicationDeleteRequest) Reset() { *x = ApplicationDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -638,7 +723,7 @@ func (x *ApplicationDeleteRequest) String() string { func (*ApplicationDeleteRequest) ProtoMessage() {} func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -651,7 +736,7 @@ func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationDeleteRequest.ProtoReflect.Descriptor instead. func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{7} + return file_agent_proto_rawDescGZIP(), []int{9} } func (x *ApplicationDeleteRequest) GetPluginName() string { @@ -701,7 +786,7 @@ type ClusterRequest struct { func (x *ClusterRequest) Reset() { *x = ClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -714,7 +799,7 @@ func (x *ClusterRequest) String() string { func (*ClusterRequest) ProtoMessage() {} func (x *ClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -727,7 +812,7 @@ func (x *ClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterRequest.ProtoReflect.Descriptor instead. func (*ClusterRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{8} + return file_agent_proto_rawDescGZIP(), []int{10} } func (x *ClusterRequest) GetPluginName() string { @@ -757,7 +842,7 @@ type RepositoryAddRequest struct { func (x *RepositoryAddRequest) Reset() { *x = RepositoryAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -770,7 +855,7 @@ func (x *RepositoryAddRequest) String() string { func (*RepositoryAddRequest) ProtoMessage() {} func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -783,7 +868,7 @@ func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryAddRequest.ProtoReflect.Descriptor instead. func (*RepositoryAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{9} + return file_agent_proto_rawDescGZIP(), []int{11} } func (x *RepositoryAddRequest) GetPluginName() string { @@ -819,7 +904,7 @@ type RepositoryDeleteRequest struct { func (x *RepositoryDeleteRequest) Reset() { *x = RepositoryDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -832,7 +917,7 @@ func (x *RepositoryDeleteRequest) String() string { func (*RepositoryDeleteRequest) ProtoMessage() {} func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -845,7 +930,7 @@ func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryDeleteRequest.ProtoReflect.Descriptor instead. func (*RepositoryDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{10} + return file_agent_proto_rawDescGZIP(), []int{12} } func (x *RepositoryDeleteRequest) GetPluginName() string { @@ -874,7 +959,7 @@ type ProjectAddRequest struct { func (x *ProjectAddRequest) Reset() { *x = ProjectAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -887,7 +972,7 @@ func (x *ProjectAddRequest) String() string { func (*ProjectAddRequest) ProtoMessage() {} func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -900,7 +985,7 @@ func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectAddRequest.ProtoReflect.Descriptor instead. func (*ProjectAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{11} + return file_agent_proto_rawDescGZIP(), []int{13} } func (x *ProjectAddRequest) GetPluginName() string { @@ -929,7 +1014,7 @@ type ProjectDeleteRequest struct { func (x *ProjectDeleteRequest) Reset() { *x = ProjectDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -942,7 +1027,7 @@ func (x *ProjectDeleteRequest) String() string { func (*ProjectDeleteRequest) ProtoMessage() {} func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -955,7 +1040,7 @@ func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{12} + return file_agent_proto_rawDescGZIP(), []int{14} } func (x *ProjectDeleteRequest) GetPluginName() string { @@ -984,7 +1069,7 @@ type JobRequest struct { func (x *JobRequest) Reset() { *x = JobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -997,7 +1082,7 @@ func (x *JobRequest) String() string { func (*JobRequest) ProtoMessage() {} func (x *JobRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1010,7 +1095,7 @@ func (x *JobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. func (*JobRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{13} + return file_agent_proto_rawDescGZIP(), []int{15} } func (x *JobRequest) GetOperation() string { @@ -1040,7 +1125,7 @@ type JobResponse struct { func (x *JobResponse) Reset() { *x = JobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1053,7 +1138,7 @@ func (x *JobResponse) String() string { func (*JobResponse) ProtoMessage() {} func (x *JobResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1066,7 +1151,7 @@ func (x *JobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. func (*JobResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{14} + return file_agent_proto_rawDescGZIP(), []int{16} } func (x *JobResponse) GetId() string { @@ -1101,7 +1186,7 @@ type SyncAppRequest struct { func (x *SyncAppRequest) Reset() { *x = SyncAppRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +1199,7 @@ func (x *SyncAppRequest) String() string { func (*SyncAppRequest) ProtoMessage() {} func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +1212,7 @@ func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppRequest.ProtoReflect.Descriptor instead. func (*SyncAppRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{15} + return file_agent_proto_rawDescGZIP(), []int{17} } func (x *SyncAppRequest) GetData() *SyncAppData { @@ -1149,7 +1234,7 @@ type SyncAppResponse struct { func (x *SyncAppResponse) Reset() { *x = SyncAppResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1162,7 +1247,7 @@ func (x *SyncAppResponse) String() string { func (*SyncAppResponse) ProtoMessage() {} func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1175,7 +1260,7 @@ func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppResponse.ProtoReflect.Descriptor instead. func (*SyncAppResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{16} + return file_agent_proto_rawDescGZIP(), []int{18} } func (x *SyncAppResponse) GetStatus() StatusCode { @@ -1201,7 +1286,7 @@ type GetClusterAppsRequest struct { func (x *GetClusterAppsRequest) Reset() { *x = GetClusterAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1214,7 +1299,7 @@ func (x *GetClusterAppsRequest) String() string { func (*GetClusterAppsRequest) ProtoMessage() {} func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1227,7 +1312,7 @@ func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{17} + return file_agent_proto_rawDescGZIP(), []int{19} } type GetClusterAppsResponse struct { @@ -1243,7 +1328,7 @@ type GetClusterAppsResponse struct { func (x *GetClusterAppsResponse) Reset() { *x = GetClusterAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1341,7 @@ func (x *GetClusterAppsResponse) String() string { func (*GetClusterAppsResponse) ProtoMessage() {} func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1354,7 @@ func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppsResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{18} + return file_agent_proto_rawDescGZIP(), []int{20} } func (x *GetClusterAppsResponse) GetStatus() StatusCode { @@ -1302,7 +1387,7 @@ type GetClusterAppLaunchesRequest struct { func (x *GetClusterAppLaunchesRequest) Reset() { *x = GetClusterAppLaunchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1315,7 +1400,7 @@ func (x *GetClusterAppLaunchesRequest) String() string { func (*GetClusterAppLaunchesRequest) ProtoMessage() {} func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1328,7 +1413,7 @@ func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{19} + return file_agent_proto_rawDescGZIP(), []int{21} } type GetClusterAppLaunchesResponse struct { @@ -1344,7 +1429,7 @@ type GetClusterAppLaunchesResponse struct { func (x *GetClusterAppLaunchesResponse) Reset() { *x = GetClusterAppLaunchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1357,7 +1442,7 @@ func (x *GetClusterAppLaunchesResponse) String() string { func (*GetClusterAppLaunchesResponse) ProtoMessage() {} func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1370,7 +1455,7 @@ func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{20} + return file_agent_proto_rawDescGZIP(), []int{22} } func (x *GetClusterAppLaunchesResponse) GetStatus() StatusCode { @@ -1405,7 +1490,7 @@ type GetClusterAppConfigRequest struct { func (x *GetClusterAppConfigRequest) Reset() { *x = GetClusterAppConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1418,7 +1503,7 @@ func (x *GetClusterAppConfigRequest) String() string { func (*GetClusterAppConfigRequest) ProtoMessage() {} func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1431,7 +1516,7 @@ func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{21} + return file_agent_proto_rawDescGZIP(), []int{23} } func (x *GetClusterAppConfigRequest) GetReleaseName() string { @@ -1454,7 +1539,7 @@ type GetClusterAppConfigResponse struct { func (x *GetClusterAppConfigResponse) Reset() { *x = GetClusterAppConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1467,7 +1552,7 @@ func (x *GetClusterAppConfigResponse) String() string { func (*GetClusterAppConfigResponse) ProtoMessage() {} func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1480,7 +1565,7 @@ func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{22} + return file_agent_proto_rawDescGZIP(), []int{24} } func (x *GetClusterAppConfigResponse) GetStatus() StatusCode { @@ -1515,7 +1600,7 @@ type GetClusterAppValuesRequest struct { func (x *GetClusterAppValuesRequest) Reset() { *x = GetClusterAppValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1528,7 +1613,7 @@ func (x *GetClusterAppValuesRequest) String() string { func (*GetClusterAppValuesRequest) ProtoMessage() {} func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1541,7 +1626,7 @@ func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{23} + return file_agent_proto_rawDescGZIP(), []int{25} } func (x *GetClusterAppValuesRequest) GetReleaseName() string { @@ -1564,7 +1649,7 @@ type GetClusterAppValuesResponse struct { func (x *GetClusterAppValuesResponse) Reset() { *x = GetClusterAppValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1662,7 @@ func (x *GetClusterAppValuesResponse) String() string { func (*GetClusterAppValuesResponse) ProtoMessage() {} func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1675,7 @@ func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{24} + return file_agent_proto_rawDescGZIP(), []int{26} } func (x *GetClusterAppValuesResponse) GetStatus() StatusCode { @@ -1626,7 +1711,7 @@ type SyncAppData struct { func (x *SyncAppData) Reset() { *x = SyncAppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1639,7 +1724,7 @@ func (x *SyncAppData) String() string { func (*SyncAppData) ProtoMessage() {} func (x *SyncAppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1652,7 +1737,7 @@ func (x *SyncAppData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppData.ProtoReflect.Descriptor instead. func (*SyncAppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{25} + return file_agent_proto_rawDescGZIP(), []int{27} } func (x *SyncAppData) GetConfig() *AppConfig { @@ -1681,7 +1766,7 @@ type AppData struct { func (x *AppData) Reset() { *x = AppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1694,7 +1779,7 @@ func (x *AppData) String() string { func (*AppData) ProtoMessage() {} func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1707,7 +1792,7 @@ func (x *AppData) ProtoReflect() protoreflect.Message { // Deprecated: Use AppData.ProtoReflect.Descriptor instead. func (*AppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{26} + return file_agent_proto_rawDescGZIP(), []int{28} } func (x *AppData) GetConfig() *AppConfig { @@ -1735,7 +1820,7 @@ type AppStatus struct { func (x *AppStatus) Reset() { *x = AppStatus{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1748,7 +1833,7 @@ func (x *AppStatus) String() string { func (*AppStatus) ProtoMessage() {} func (x *AppStatus) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1761,7 +1846,7 @@ func (x *AppStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AppStatus.ProtoReflect.Descriptor instead. func (*AppStatus) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{27} + return file_agent_proto_rawDescGZIP(), []int{29} } func (x *AppStatus) GetRuntimeStatus() string { @@ -1796,7 +1881,7 @@ type AppConfig struct { func (x *AppConfig) Reset() { *x = AppConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1894,7 @@ func (x *AppConfig) String() string { func (*AppConfig) ProtoMessage() {} func (x *AppConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1822,7 +1907,7 @@ func (x *AppConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppConfig.ProtoReflect.Descriptor instead. func (*AppConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{28} + return file_agent_proto_rawDescGZIP(), []int{30} } func (x *AppConfig) GetReleaseName() string { @@ -1942,7 +2027,7 @@ type AppValues struct { func (x *AppValues) Reset() { *x = AppValues{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1955,7 +2040,7 @@ func (x *AppValues) String() string { func (*AppValues) ProtoMessage() {} func (x *AppValues) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1968,7 +2053,7 @@ func (x *AppValues) ProtoReflect() protoreflect.Message { // Deprecated: Use AppValues.ProtoReflect.Descriptor instead. func (*AppValues) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{29} + return file_agent_proto_rawDescGZIP(), []int{31} } func (x *AppValues) GetOverrideValues() []byte { @@ -2001,7 +2086,7 @@ type AppLaunchConfig struct { func (x *AppLaunchConfig) Reset() { *x = AppLaunchConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2014,7 +2099,7 @@ func (x *AppLaunchConfig) String() string { func (*AppLaunchConfig) ProtoMessage() {} func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2027,7 +2112,7 @@ func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLaunchConfig.ProtoReflect.Descriptor instead. func (*AppLaunchConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{30} + return file_agent_proto_rawDescGZIP(), []int{32} } func (x *AppLaunchConfig) GetReleaseName() string { @@ -2078,363 +2163,371 @@ var file_agent_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xa0, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 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, 0x6c, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x35, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, - 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, - 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x3b, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa0, 0x02, + 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x64, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x12, 0x4f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 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, 0x6c, 0x0a, 0x17, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, + 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, + 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, - 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, + 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, - 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x3a, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, - 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x44, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0xa2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, - 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0xf3, 0x03, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, + 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, - 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, - 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, - 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, - 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, - 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xee, 0x0a, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1f, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x6c, - 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1d, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, - 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, + 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, + 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, + 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, + 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x03, 0x32, 0xa5, 0x0b, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, + 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, + 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, - 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4e, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x3d, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x17, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x40, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, - 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x10, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x3e, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x12, 0x17, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x25, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2f, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x00, 0x12, 0x50, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, 0x70, 0x70, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x41, 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x10, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x07, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x12, + 0x17, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x23, + 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2f, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2450,102 +2543,107 @@ func file_agent_proto_rawDescGZIP() []byte { } var file_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_agent_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: agentpb.StatusCode - (*StoreCredentialRequest)(nil), // 1: agentpb.StoreCredentialRequest - (*StoreCredentialResponse)(nil), // 2: agentpb.StoreCredentialResponse - (*SyncRequest)(nil), // 3: agentpb.SyncRequest - (*SyncResponse)(nil), // 4: agentpb.SyncResponse - (*ClimonInstallRequest)(nil), // 5: agentpb.ClimonInstallRequest - (*ClimonDeleteRequest)(nil), // 6: agentpb.ClimonDeleteRequest - (*ApplicationInstallRequest)(nil), // 7: agentpb.ApplicationInstallRequest - (*ApplicationDeleteRequest)(nil), // 8: agentpb.ApplicationDeleteRequest - (*ClusterRequest)(nil), // 9: agentpb.ClusterRequest - (*RepositoryAddRequest)(nil), // 10: agentpb.RepositoryAddRequest - (*RepositoryDeleteRequest)(nil), // 11: agentpb.RepositoryDeleteRequest - (*ProjectAddRequest)(nil), // 12: agentpb.ProjectAddRequest - (*ProjectDeleteRequest)(nil), // 13: agentpb.ProjectDeleteRequest - (*JobRequest)(nil), // 14: agentpb.JobRequest - (*JobResponse)(nil), // 15: agentpb.JobResponse - (*SyncAppRequest)(nil), // 16: agentpb.SyncAppRequest - (*SyncAppResponse)(nil), // 17: agentpb.SyncAppResponse - (*GetClusterAppsRequest)(nil), // 18: agentpb.GetClusterAppsRequest - (*GetClusterAppsResponse)(nil), // 19: agentpb.GetClusterAppsResponse - (*GetClusterAppLaunchesRequest)(nil), // 20: agentpb.GetClusterAppLaunchesRequest - (*GetClusterAppLaunchesResponse)(nil), // 21: agentpb.GetClusterAppLaunchesResponse - (*GetClusterAppConfigRequest)(nil), // 22: agentpb.GetClusterAppConfigRequest - (*GetClusterAppConfigResponse)(nil), // 23: agentpb.GetClusterAppConfigResponse - (*GetClusterAppValuesRequest)(nil), // 24: agentpb.GetClusterAppValuesRequest - (*GetClusterAppValuesResponse)(nil), // 25: agentpb.GetClusterAppValuesResponse - (*SyncAppData)(nil), // 26: agentpb.SyncAppData - (*AppData)(nil), // 27: agentpb.AppData - (*AppStatus)(nil), // 28: agentpb.AppStatus - (*AppConfig)(nil), // 29: agentpb.AppConfig - (*AppValues)(nil), // 30: agentpb.AppValues - (*AppLaunchConfig)(nil), // 31: agentpb.AppLaunchConfig - nil, // 32: agentpb.StoreCredentialRequest.CredentialEntry - (*any1.Any)(nil), // 33: google.protobuf.Any + (*PingRequest)(nil), // 1: agentpb.PingRequest + (*PingResponse)(nil), // 2: agentpb.PingResponse + (*StoreCredentialRequest)(nil), // 3: agentpb.StoreCredentialRequest + (*StoreCredentialResponse)(nil), // 4: agentpb.StoreCredentialResponse + (*SyncRequest)(nil), // 5: agentpb.SyncRequest + (*SyncResponse)(nil), // 6: agentpb.SyncResponse + (*ClimonInstallRequest)(nil), // 7: agentpb.ClimonInstallRequest + (*ClimonDeleteRequest)(nil), // 8: agentpb.ClimonDeleteRequest + (*ApplicationInstallRequest)(nil), // 9: agentpb.ApplicationInstallRequest + (*ApplicationDeleteRequest)(nil), // 10: agentpb.ApplicationDeleteRequest + (*ClusterRequest)(nil), // 11: agentpb.ClusterRequest + (*RepositoryAddRequest)(nil), // 12: agentpb.RepositoryAddRequest + (*RepositoryDeleteRequest)(nil), // 13: agentpb.RepositoryDeleteRequest + (*ProjectAddRequest)(nil), // 14: agentpb.ProjectAddRequest + (*ProjectDeleteRequest)(nil), // 15: agentpb.ProjectDeleteRequest + (*JobRequest)(nil), // 16: agentpb.JobRequest + (*JobResponse)(nil), // 17: agentpb.JobResponse + (*SyncAppRequest)(nil), // 18: agentpb.SyncAppRequest + (*SyncAppResponse)(nil), // 19: agentpb.SyncAppResponse + (*GetClusterAppsRequest)(nil), // 20: agentpb.GetClusterAppsRequest + (*GetClusterAppsResponse)(nil), // 21: agentpb.GetClusterAppsResponse + (*GetClusterAppLaunchesRequest)(nil), // 22: agentpb.GetClusterAppLaunchesRequest + (*GetClusterAppLaunchesResponse)(nil), // 23: agentpb.GetClusterAppLaunchesResponse + (*GetClusterAppConfigRequest)(nil), // 24: agentpb.GetClusterAppConfigRequest + (*GetClusterAppConfigResponse)(nil), // 25: agentpb.GetClusterAppConfigResponse + (*GetClusterAppValuesRequest)(nil), // 26: agentpb.GetClusterAppValuesRequest + (*GetClusterAppValuesResponse)(nil), // 27: agentpb.GetClusterAppValuesResponse + (*SyncAppData)(nil), // 28: agentpb.SyncAppData + (*AppData)(nil), // 29: agentpb.AppData + (*AppStatus)(nil), // 30: agentpb.AppStatus + (*AppConfig)(nil), // 31: agentpb.AppConfig + (*AppValues)(nil), // 32: agentpb.AppValues + (*AppLaunchConfig)(nil), // 33: agentpb.AppLaunchConfig + nil, // 34: agentpb.StoreCredentialRequest.CredentialEntry + (*any1.Any)(nil), // 35: google.protobuf.Any } var file_agent_proto_depIdxs = []int32{ - 32, // 0: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry - 0, // 1: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode - 33, // 2: agentpb.JobRequest.payload:type_name -> google.protobuf.Any - 26, // 3: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData - 0, // 4: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode - 0, // 5: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode - 27, // 6: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData - 0, // 7: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode - 31, // 8: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig - 0, // 9: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode - 29, // 10: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig - 0, // 11: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode - 30, // 12: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues - 29, // 13: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig - 30, // 14: agentpb.SyncAppData.values:type_name -> agentpb.AppValues - 29, // 15: agentpb.AppData.config:type_name -> agentpb.AppConfig - 28, // 16: agentpb.AppData.status:type_name -> agentpb.AppStatus - 14, // 17: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest - 1, // 18: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest - 3, // 19: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest - 5, // 20: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest - 6, // 21: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest - 7, // 22: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest - 8, // 23: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest - 9, // 24: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest - 9, // 25: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest - 10, // 26: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest - 11, // 27: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest - 12, // 28: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest - 13, // 29: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest - 16, // 30: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest - 18, // 31: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest - 20, // 32: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest - 22, // 33: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest - 24, // 34: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest - 15, // 35: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse - 2, // 36: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse - 4, // 37: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse - 15, // 38: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse - 15, // 39: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse - 15, // 40: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse - 15, // 41: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse - 15, // 42: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse - 15, // 43: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse - 15, // 44: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse - 15, // 45: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse - 15, // 46: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse - 15, // 47: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse - 17, // 48: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse - 19, // 49: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse - 21, // 50: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse - 23, // 51: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse - 25, // 52: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse - 35, // [35:53] is the sub-list for method output_type - 17, // [17:35] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 0, // 0: agentpb.PingResponse.status:type_name -> agentpb.StatusCode + 34, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry + 0, // 2: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode + 35, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any + 28, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData + 0, // 5: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode + 0, // 6: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode + 29, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData + 0, // 8: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode + 33, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig + 0, // 10: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode + 31, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig + 0, // 12: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode + 32, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues + 31, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig + 32, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues + 31, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig + 30, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus + 1, // 18: agentpb.Agent.Ping:input_type -> agentpb.PingRequest + 16, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest + 3, // 20: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest + 5, // 21: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest + 7, // 22: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest + 8, // 23: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest + 9, // 24: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest + 10, // 25: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest + 11, // 26: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest + 11, // 27: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest + 12, // 28: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest + 13, // 29: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest + 14, // 30: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest + 15, // 31: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest + 18, // 32: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest + 20, // 33: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest + 22, // 34: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest + 24, // 35: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest + 26, // 36: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest + 2, // 37: agentpb.Agent.Ping:output_type -> agentpb.PingResponse + 17, // 38: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse + 4, // 39: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse + 6, // 40: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse + 17, // 41: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse + 17, // 42: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse + 17, // 43: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse + 17, // 44: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse + 17, // 45: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse + 17, // 46: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse + 17, // 47: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse + 17, // 48: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse + 17, // 49: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse + 17, // 50: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse + 19, // 51: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse + 21, // 52: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse + 23, // 53: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse + 25, // 54: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse + 27, // 55: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse + 37, // [37:56] is the sub-list for method output_type + 18, // [18:37] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_agent_proto_init() } @@ -2555,7 +2653,7 @@ func file_agent_proto_init() { } if !protoimpl.UnsafeEnabled { file_agent_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCredentialRequest); i { + switch v := v.(*PingRequest); i { case 0: return &v.state case 1: @@ -2567,7 +2665,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCredentialResponse); i { + switch v := v.(*PingResponse); i { case 0: return &v.state case 1: @@ -2579,7 +2677,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncRequest); i { + switch v := v.(*StoreCredentialRequest); i { case 0: return &v.state case 1: @@ -2591,7 +2689,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncResponse); i { + switch v := v.(*StoreCredentialResponse); i { case 0: return &v.state case 1: @@ -2603,7 +2701,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimonInstallRequest); i { + switch v := v.(*SyncRequest); i { case 0: return &v.state case 1: @@ -2615,7 +2713,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClimonDeleteRequest); i { + switch v := v.(*SyncResponse); i { case 0: return &v.state case 1: @@ -2627,7 +2725,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationInstallRequest); i { + switch v := v.(*ClimonInstallRequest); i { case 0: return &v.state case 1: @@ -2639,7 +2737,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplicationDeleteRequest); i { + switch v := v.(*ClimonDeleteRequest); i { case 0: return &v.state case 1: @@ -2651,7 +2749,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterRequest); i { + switch v := v.(*ApplicationInstallRequest); i { case 0: return &v.state case 1: @@ -2663,7 +2761,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryAddRequest); i { + switch v := v.(*ApplicationDeleteRequest); i { case 0: return &v.state case 1: @@ -2675,7 +2773,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryDeleteRequest); i { + switch v := v.(*ClusterRequest); i { case 0: return &v.state case 1: @@ -2687,7 +2785,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectAddRequest); i { + switch v := v.(*RepositoryAddRequest); i { case 0: return &v.state case 1: @@ -2699,7 +2797,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectDeleteRequest); i { + switch v := v.(*RepositoryDeleteRequest); i { case 0: return &v.state case 1: @@ -2711,7 +2809,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobRequest); i { + switch v := v.(*ProjectAddRequest); i { case 0: return &v.state case 1: @@ -2723,7 +2821,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobResponse); i { + switch v := v.(*ProjectDeleteRequest); i { case 0: return &v.state case 1: @@ -2735,7 +2833,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppRequest); i { + switch v := v.(*JobRequest); i { case 0: return &v.state case 1: @@ -2747,7 +2845,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppResponse); i { + switch v := v.(*JobResponse); i { case 0: return &v.state case 1: @@ -2759,7 +2857,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppsRequest); i { + switch v := v.(*SyncAppRequest); i { case 0: return &v.state case 1: @@ -2771,7 +2869,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppsResponse); i { + switch v := v.(*SyncAppResponse); i { case 0: return &v.state case 1: @@ -2783,7 +2881,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppLaunchesRequest); i { + switch v := v.(*GetClusterAppsRequest); i { case 0: return &v.state case 1: @@ -2795,7 +2893,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppLaunchesResponse); i { + switch v := v.(*GetClusterAppsResponse); i { case 0: return &v.state case 1: @@ -2807,7 +2905,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppConfigRequest); i { + switch v := v.(*GetClusterAppLaunchesRequest); i { case 0: return &v.state case 1: @@ -2819,7 +2917,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppConfigResponse); i { + switch v := v.(*GetClusterAppLaunchesResponse); i { case 0: return &v.state case 1: @@ -2831,7 +2929,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppValuesRequest); i { + switch v := v.(*GetClusterAppConfigRequest); i { case 0: return &v.state case 1: @@ -2843,7 +2941,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClusterAppValuesResponse); i { + switch v := v.(*GetClusterAppConfigResponse); i { case 0: return &v.state case 1: @@ -2855,7 +2953,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncAppData); i { + switch v := v.(*GetClusterAppValuesRequest); i { case 0: return &v.state case 1: @@ -2867,7 +2965,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppData); i { + switch v := v.(*GetClusterAppValuesResponse); i { case 0: return &v.state case 1: @@ -2879,7 +2977,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppStatus); i { + switch v := v.(*SyncAppData); i { case 0: return &v.state case 1: @@ -2891,7 +2989,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppConfig); i { + switch v := v.(*AppData); i { case 0: return &v.state case 1: @@ -2903,7 +3001,7 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppValues); i { + switch v := v.(*AppStatus); i { case 0: return &v.state case 1: @@ -2915,6 +3013,30 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppLaunchConfig); i { case 0: return &v.state @@ -2933,7 +3055,7 @@ func file_agent_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_proto_rawDesc, NumEnums: 1, - NumMessages: 32, + NumMessages: 34, NumExtensions: 0, NumServices: 1, }, diff --git a/server/pkg/pb/agentpb/agent_grpc.pb.go b/server/pkg/pb/agentpb/agent_grpc.pb.go index 2368f848..3a3e5948 100644 --- a/server/pkg/pb/agentpb/agent_grpc.pb.go +++ b/server/pkg/pb/agentpb/agent_grpc.pb.go @@ -19,6 +19,7 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( + Agent_Ping_FullMethodName = "/agentpb.Agent/Ping" Agent_SubmitJob_FullMethodName = "/agentpb.Agent/SubmitJob" Agent_StoreCredential_FullMethodName = "/agentpb.Agent/StoreCredential" Agent_Sync_FullMethodName = "/agentpb.Agent/Sync" @@ -43,6 +44,7 @@ const ( // // 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 AgentClient interface { + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) StoreCredential(ctx context.Context, in *StoreCredentialRequest, opts ...grpc.CallOption) (*StoreCredentialResponse, error) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) @@ -71,6 +73,15 @@ func NewAgentClient(cc grpc.ClientConnInterface) AgentClient { return &agentClient{cc} } +func (c *agentClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) { + out := new(PingResponse) + err := c.cc.Invoke(ctx, Agent_Ping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *agentClient) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) { out := new(JobResponse) err := c.cc.Invoke(ctx, Agent_SubmitJob_FullMethodName, in, out, opts...) @@ -237,6 +248,7 @@ func (c *agentClient) GetClusterAppValues(ctx context.Context, in *GetClusterApp // All implementations must embed UnimplementedAgentServer // for forward compatibility type AgentServer interface { + Ping(context.Context, *PingRequest) (*PingResponse, error) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) Sync(context.Context, *SyncRequest) (*SyncResponse, error) @@ -262,6 +274,9 @@ type AgentServer interface { type UnimplementedAgentServer struct { } +func (UnimplementedAgentServer) Ping(context.Context, *PingRequest) (*PingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} func (UnimplementedAgentServer) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitJob not implemented") } @@ -329,6 +344,24 @@ func RegisterAgentServer(s grpc.ServiceRegistrar, srv AgentServer) { s.RegisterService(&Agent_ServiceDesc, srv) } +func _Agent_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_Ping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).Ping(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Agent_SubmitJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(JobRequest) if err := dec(in); err != nil { @@ -660,6 +693,10 @@ var Agent_ServiceDesc = grpc.ServiceDesc{ ServiceName: "agentpb.Agent", HandlerType: (*AgentServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _Agent_Ping_Handler, + }, { MethodName: "SubmitJob", Handler: _Agent_SubmitJob_Handler, From c19447479cd1e6c8f56bb7811bd93c9fa2721438 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sun, 6 Aug 2023 23:09:46 +0530 Subject: [PATCH 27/31] update ping api log and fix update registration ping check --- capten/agent/pkg/agent/agent.go | 1 + server/pkg/agent/agent_handler.go | 10 +++-- server/pkg/agent/client.go | 6 ++- server/pkg/api/server.go | 2 +- server/pkg/handler/handle_agent_test.go | 58 ++++++++++++------------- server/pkg/handler/handler.go | 2 +- 6 files changed, 43 insertions(+), 36 deletions(-) diff --git a/capten/agent/pkg/agent/agent.go b/capten/agent/pkg/agent/agent.go index 9d0b12eb..06596ae1 100644 --- a/capten/agent/pkg/agent/agent.go +++ b/capten/agent/pkg/agent/agent.go @@ -49,6 +49,7 @@ func NewAgent(log logging.Logger) (*Agent, error) { } func (a *Agent) Ping(ctx context.Context, request *agentpb.PingRequest) (*agentpb.PingResponse, error) { + a.log.Infof("Ping request received") return &agentpb.PingResponse{Status: agentpb.StatusCode_OK}, nil } diff --git a/server/pkg/agent/agent_handler.go b/server/pkg/agent/agent_handler.go index 73b30693..64a02c29 100644 --- a/server/pkg/agent/agent_handler.go +++ b/server/pkg/agent/agent_handler.go @@ -5,19 +5,21 @@ import ( "fmt" "sync" + "github.com/intelops/go-common/logging" "github.com/kube-tarian/kad/server/pkg/credential" "github.com/kube-tarian/kad/server/pkg/store" "github.com/pkg/errors" ) type AgentHandler struct { + log logging.Logger agentMutex sync.RWMutex agents map[string]*Agent serverStore store.ServerStore } -func NewAgentHandler(serverStore store.ServerStore) *AgentHandler { - return &AgentHandler{serverStore: serverStore, agents: map[string]*Agent{}} +func NewAgentHandler(log logging.Logger, serverStore store.ServerStore) *AgentHandler { + return &AgentHandler{log: log, serverStore: serverStore, agents: map[string]*Agent{}} } func (s *AgentHandler) AddAgent(orgId, clusterID string, agentCfg *Config) error { @@ -26,7 +28,7 @@ func (s *AgentHandler) AddAgent(orgId, clusterID string, agentCfg *Config) error return nil } - agent, err := NewAgent(agentCfg) + agent, err := NewAgent(s.log, agentCfg) if err != nil { return err } @@ -39,7 +41,7 @@ func (s *AgentHandler) AddAgent(orgId, clusterID string, agentCfg *Config) error func (s *AgentHandler) UpdateAgent(orgId, clusterID string, agentCfg *Config) error { clusterKey := getClusterAgentKey(orgId, clusterID) - if _, ok := s.agents[clusterKey]; ok { + if _, ok := s.agents[clusterKey]; !ok { return s.AddAgent(orgId, clusterID, agentCfg) } diff --git a/server/pkg/agent/client.go b/server/pkg/agent/client.go index 1349895e..2eb35cf3 100644 --- a/server/pkg/agent/client.go +++ b/server/pkg/agent/client.go @@ -8,6 +8,7 @@ import ( "net/url" "strings" + "github.com/kube-tarian/kad/agent/pkg/logging" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/pkg/errors" @@ -27,9 +28,11 @@ type Agent struct { cfg *Config connection *grpc.ClientConn client agentpb.AgentClient + log logging.Logger } -func NewAgent(cfg *Config) (*Agent, error) { +func NewAgent(log logging.Logger, cfg *Config) (*Agent, error) { + log.Infof("connecting to agent %s", cfg.Address) conn, err := getConnection(cfg) if err != nil { return nil, errors.WithMessage(err, "failed to connect to agent") @@ -45,6 +48,7 @@ func NewAgent(cfg *Config) (*Agent, error) { } return &Agent{ + log: log, cfg: cfg, connection: conn, client: agentClient, diff --git a/server/pkg/api/server.go b/server/pkg/api/server.go index c84b2d6b..cddded59 100644 --- a/server/pkg/api/server.go +++ b/server/pkg/api/server.go @@ -24,7 +24,7 @@ type Server struct { func NewServer(log logging.Logger, serverStore store.ServerStore) (*Server, error) { return &Server{ serverStore: serverStore, - agentHandeler: agent.NewAgentHandler(serverStore), + agentHandeler: agent.NewAgentHandler(log, serverStore), log: log, }, nil } diff --git a/server/pkg/handler/handle_agent_test.go b/server/pkg/handler/handle_agent_test.go index d4103a20..63fc42f9 100644 --- a/server/pkg/handler/handle_agent_test.go +++ b/server/pkg/handler/handle_agent_test.go @@ -36,7 +36,7 @@ func TestAPIHandler_Close(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.agentHandler.RemoveAgent(tt.args.customerId, "") }) @@ -56,7 +56,7 @@ func TestAPIHandler_CloseAll(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.Close() }) @@ -81,7 +81,7 @@ func TestAPIHandler_ConnectClient(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } if _, err := a.agentHandler.GetAgent(tt.args.customerId, ""); (err != nil) != tt.wantErr { t.Errorf("ConnectClient() error = %v, wantErr %v", err, tt.wantErr) @@ -107,7 +107,7 @@ func TestAPIHandler_DeleteAgentClimondeploy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.DeleteAgentClimondeploy(tt.args.c) }) @@ -131,7 +131,7 @@ func TestAPIHandler_DeleteAgentCluster(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.DeleteAgentCluster(tt.args.c) }) @@ -155,7 +155,7 @@ func TestAPIHandler_DeleteAgentDeploy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.DeleteAgentDeploy(tt.args.c) }) @@ -179,7 +179,7 @@ func TestAPIHandler_DeleteAgentProject(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.DeleteAgentProject(tt.args.c) }) @@ -203,7 +203,7 @@ func TestAPIHandler_DeleteAgentRepository(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.DeleteAgentRepository(tt.args.c) }) @@ -227,7 +227,7 @@ func TestAPIHandler_GetAgentEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.GetAgentEndpoint(tt.args.c) }) @@ -251,7 +251,7 @@ func TestAPIHandler_GetApiDocs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.GetApiDocs(tt.args.c) }) @@ -276,7 +276,7 @@ func TestAPIHandler_GetClient(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } if got, err := a.agentHandler.GetAgent(tt.args.customerId, ""); err != nil && !reflect.DeepEqual(got, tt.want) { t.Errorf("GetClient() = %v, want %v", got, tt.want) @@ -302,7 +302,7 @@ func TestAPIHandler_GetStatus(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.GetStatus(tt.args.c) }) @@ -366,7 +366,7 @@ func TestAPIHandler_PostAgentApps(t *testing.T) { c.Request.Header.Set("customer_id", "1") c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonByte)) fmt.Println(c.Request.Body) - agentConn, err := agent.NewAgent(&agent.Config{ + agentConn, err := agent.NewAgent(logging.NewLogger(), &agent.Config{ Address: "127.0.0.1", }) @@ -389,7 +389,7 @@ func TestAPIHandler_PostAgentApps(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentApps(tt.args.c) }) @@ -413,7 +413,7 @@ func TestAPIHandler_PostAgentClimondeploy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentClimondeploy(tt.args.c) }) @@ -437,7 +437,7 @@ func TestAPIHandler_PostAgentCluster(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentCluster(tt.args.c) }) @@ -461,7 +461,7 @@ func TestAPIHandler_PostAgentDeploy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentDeploy(tt.args.c) }) @@ -485,7 +485,7 @@ func TestAPIHandler_PostAgentEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentEndpoint(tt.args.c) }) @@ -509,7 +509,7 @@ func TestAPIHandler_PostAgentProject(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentProject(tt.args.c) }) @@ -533,7 +533,7 @@ func TestAPIHandler_PostAgentRepository(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentRepository(tt.args.c) }) @@ -557,7 +557,7 @@ func TestAPIHandler_PostAgentSecret(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PostAgentSecret(tt.args.c) }) @@ -581,7 +581,7 @@ func TestAPIHandler_PutAgentClimondeploy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PutAgentClimondeploy(tt.args.c) }) @@ -605,7 +605,7 @@ func TestAPIHandler_PutAgentDeploy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PutAgentDeploy(tt.args.c) }) @@ -629,7 +629,7 @@ func TestAPIHandler_PutAgentEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PutAgentEndpoint(tt.args.c) }) @@ -653,7 +653,7 @@ func TestAPIHandler_PutAgentProject(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PutAgentProject(tt.args.c) }) @@ -677,7 +677,7 @@ func TestAPIHandler_PutAgentRepository(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.PutAgentRepository(tt.args.c) }) @@ -704,7 +704,7 @@ func TestAPIHandler_getFileContent(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } got, err := a.getFileContent(tt.args.c, tt.args.fileInfo) if (err != nil) != tt.wantErr { @@ -737,7 +737,7 @@ func TestAPIHandler_sendResponse(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.sendResponse(tt.args.c, tt.args.msg, tt.args.err) }) @@ -763,7 +763,7 @@ func TestAPIHandler_setFailedResponse(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &APIHandler{ - agentHandler: agent.NewAgentHandler(nil), + agentHandler: agent.NewAgentHandler(logging.NewLogger(), nil), } a.setFailedResponse(tt.args.c, tt.args.msg, tt.args.err) }) diff --git a/server/pkg/handler/handler.go b/server/pkg/handler/handler.go index aa3d54c3..2bc85376 100644 --- a/server/pkg/handler/handler.go +++ b/server/pkg/handler/handler.go @@ -25,7 +25,7 @@ var ( func NewAPIHandler(log logging.Logger, serverStore store.ServerStore) (*APIHandler, error) { return &APIHandler{ log: log, - agentHandler: agent.NewAgentHandler(serverStore), + agentHandler: agent.NewAgentHandler(log, serverStore), }, nil } From 54517820d12fb4ec5b1b03288c985582b3d2300e Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Mon, 7 Aug 2023 09:43:57 +0530 Subject: [PATCH 28/31] agent db create refactor --- capten/agent/cmd/agent/main.go | 22 +- .../pkg/agent/agent_cluster_apps_test.go | 9 +- .../pkg/capten-store/app_config_store.go | 16 +- .../pkg/capten-store/app_config_store_test.go | 116 -- capten/agent/pkg/capten-store/migrations.go | 30 - .../agent/pkg/capten-store/migrations_test.go | 29 - capten/agent/pkg/capten-store/store.go | 28 +- .../test_migrations/001_agent.down.cql | 1 - .../agent/pkg/util/synch_cassandra_secret.go | 44 + .../tests => cassandra}/config/cassandra.yaml | 0 .../cassandra/migrations/001_agent.down.cql | 1 + .../migrations}/001_agent.up.cql | 2 +- .../db-client}/client.go | 50 +- .../db-init/admin_client.go} | 71 +- .../common-pkg/cassandra/db-init/db_init.go | 109 ++ .../db-migrate}/cassandra.go | 2 +- .../db-migrate/cassandra_migration.go | 58 + .../db-migrate}/db_migration.go | 5 +- .../db-migrate}/db_migration_test.go | 14 +- .../db-migrate}/docker-compose.yaml | 0 .../db-migrate/tests/config/cassandra.yaml | 1237 +++++++++++++++++ .../migrations/cassandra/001_add_tab.down.cql | 0 .../migrations/cassandra/001_add_tab.up.cql | 0 capten/common-pkg/credential/client.go | 111 ++ .../common-pkg/db-create/cassandra/README.md | 4 - .../db-create/cassandra/db_config.go | 25 - .../db-create/cassandra/db_configurator.go | 58 - .../db-create/cassandra/db_creation.go | 24 - .../db-migration/cassandra/README.md | 5 - .../cassandra/cassandra_migration.go | 72 - .../db-migration/cassandra/cassandra_test.go | 106 -- capten/go.mod | 2 +- charts/kad/templates/agent-deployment.yaml | 6 + charts/kad/values.yaml | 1 + dockerfiles/agent/Dockerfile | 1 + 35 files changed, 1659 insertions(+), 600 deletions(-) delete mode 100644 capten/agent/pkg/capten-store/app_config_store_test.go delete mode 100644 capten/agent/pkg/capten-store/migrations.go delete mode 100644 capten/agent/pkg/capten-store/migrations_test.go delete mode 100644 capten/agent/pkg/capten-store/test_migrations/001_agent.down.cql create mode 100644 capten/agent/pkg/util/synch_cassandra_secret.go rename capten/{common-pkg/db-migration/cassandra/tests => cassandra}/config/cassandra.yaml (100%) create mode 100644 capten/cassandra/migrations/001_agent.down.cql rename capten/{agent/pkg/capten-store/test_migrations => cassandra/migrations}/001_agent.up.cql (97%) rename capten/common-pkg/{cassandra-client => cassandra/db-client}/client.go (66%) rename capten/common-pkg/{db-create/cassandra/cassandra_store.go => cassandra/db-init/admin_client.go} (66%) create mode 100644 capten/common-pkg/cassandra/db-init/db_init.go rename capten/common-pkg/{db-migration/cassandra => cassandra/db-migrate}/cassandra.go (99%) create mode 100644 capten/common-pkg/cassandra/db-migrate/cassandra_migration.go rename capten/common-pkg/{db-migration => cassandra/db-migrate}/db_migration.go (95%) rename capten/common-pkg/{db-migration/cassandra => cassandra/db-migrate}/db_migration_test.go (63%) rename capten/common-pkg/{db-migration/cassandra => cassandra/db-migrate}/docker-compose.yaml (100%) create mode 100644 capten/common-pkg/cassandra/db-migrate/tests/config/cassandra.yaml rename capten/common-pkg/{db-migration/cassandra => cassandra/db-migrate}/tests/migrations/cassandra/001_add_tab.down.cql (100%) rename capten/common-pkg/{db-migration/cassandra => cassandra/db-migrate}/tests/migrations/cassandra/001_add_tab.up.cql (100%) create mode 100644 capten/common-pkg/credential/client.go delete mode 100644 capten/common-pkg/db-create/cassandra/README.md delete mode 100644 capten/common-pkg/db-create/cassandra/db_config.go delete mode 100644 capten/common-pkg/db-create/cassandra/db_configurator.go delete mode 100644 capten/common-pkg/db-create/cassandra/db_creation.go delete mode 100644 capten/common-pkg/db-migration/cassandra/README.md delete mode 100644 capten/common-pkg/db-migration/cassandra/cassandra_migration.go delete mode 100644 capten/common-pkg/db-migration/cassandra/cassandra_test.go diff --git a/capten/agent/cmd/agent/main.go b/capten/agent/cmd/agent/main.go index 124dd5eb..0817f1f2 100644 --- a/capten/agent/cmd/agent/main.go +++ b/capten/agent/cmd/agent/main.go @@ -13,6 +13,10 @@ import ( "github.com/kube-tarian/kad/capten/agent/pkg/agent" "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" "github.com/kube-tarian/kad/capten/agent/pkg/config" + "github.com/kube-tarian/kad/capten/agent/pkg/util" + dbinit "github.com/kube-tarian/kad/capten/common-pkg/cassandra/db-init" + dbmigrate "github.com/kube-tarian/kad/capten/common-pkg/cassandra/db-migrate" + "github.com/pkg/errors" "google.golang.org/grpc/reflection" ) @@ -26,8 +30,8 @@ func main() { log.Fatalf("service config reading failed, %v", err) } - if err := runAllMigrations(log); err != nil { - log.Fatalf("Error while running migrations: %v", err) + if err := configureDB(); err != nil { + log.Fatalf("%v", err) } s, err := agent.NewAgent(log, cfg) @@ -59,7 +63,17 @@ func main() { log.Debugf("Exiting Agent") } -func runAllMigrations(log logging.Logger) error { - //return captenstore.Migrate(log) +func configureDB() error { + if err := util.SyncCassandraAdminSecret(log); err != nil { + return errors.WithMessage(err, "error in update cassandra secret to vault") + } + + if err := dbinit.CreatedDatabase(log); err != nil { + return errors.WithMessage(err, "error creating database") + } + + if err := dbmigrate.RunMigrations(log, dbmigrate.UP); err != nil { + return errors.WithMessage(err, "error in migrating cassandra DB") + } return nil } diff --git a/capten/agent/pkg/agent/agent_cluster_apps_test.go b/capten/agent/pkg/agent/agent_cluster_apps_test.go index 79a1504b..8b61580f 100644 --- a/capten/agent/pkg/agent/agent_cluster_apps_test.go +++ b/capten/agent/pkg/agent/agent_cluster_apps_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" - captenstore "github.com/kube-tarian/kad/capten/agent/pkg/capten-store" "github.com/kube-tarian/kad/capten/agent/pkg/config" "github.com/kube-tarian/kad/integrator/common-pkg/logging" "github.com/stretchr/testify/suite" @@ -24,9 +23,9 @@ func TestAgentTestSuite(t *testing.T) { agentSuite := new(AgentTestSuite) agentSuite.logger = logging.NewLogger() - if err := captenstore.Migrate(agentSuite.logger); err != nil { + /*if err := captenstore.Migrate(agentSuite.logger); err != nil { t.Fatal(err) - } + }*/ agent, err := NewAgent(agentSuite.logger, &config.SericeConfig{}) if err != nil { @@ -41,9 +40,9 @@ func (suite *AgentTestSuite) SetupSuite() { } func (suite *AgentTestSuite) TearDownSuite() { - if err := captenstore.MigratePurge(suite.logger); err != nil { + /*if err := captenstore.MigratePurge(suite.logger); err != nil { suite.logger.Error(err.Error()) - } + }*/ } func (suite *AgentTestSuite) Test_1_SyncApp() { diff --git a/capten/agent/pkg/capten-store/app_config_store.go b/capten/agent/pkg/capten-store/app_config_store.go index 293cb756..7031a609 100644 --- a/capten/agent/pkg/capten-store/app_config_store.go +++ b/capten/agent/pkg/capten-store/app_config_store.go @@ -10,18 +10,18 @@ import ( ) const ( - insertAppConfigByReleaseNameQuery = "INSERT INTO apps.AppConfig(release_name) VALUES (?)" - updateAppConfigByReleaseNameQuery = "UPDATE apps.AppConfig SET %s WHERE release_name = ?" + insertAppConfigByReleaseNameQuery = "INSERT INTO %s.AppConfig(release_name) VALUES (?)" + updateAppConfigByReleaseNameQuery = "UPDATE %s.AppConfig SET %s WHERE release_name = ?" ) -func CreateSelectByFieldNameQuery(field string) string { - return CreateSelectAllQuery() + fmt.Sprintf(" WHERE %s = ?", field) +func CreateSelectByFieldNameQuery(keyspace, field string) string { + return fmt.Sprintf(CreateSelectAllQuery(), keyspace) + fmt.Sprintf(" WHERE %s = ?", field) } func CreateSelectAllQuery() string { return "SELECT " + strings.Join(appConfigfields, ", ") + - " FROM apps.AppConfig" + " FROM %s.AppConfig" } const ( @@ -53,15 +53,15 @@ func (a *Store) UpsertAppConfig(config *agentpb.SyncAppData) error { kvPairs, isEmptyUpdate := formUpdateKvPairs(config) batch := a.client.Session().NewBatch(gocql.LoggedBatch) - batch.Query(insertAppConfigByReleaseNameQuery, config.Config.ReleaseName) + batch.Query(fmt.Sprintf(insertAppConfigByReleaseNameQuery, a.keyspace), config.Config.ReleaseName) if !isEmptyUpdate { - batch.Query(fmt.Sprintf(updateAppConfigByReleaseNameQuery, kvPairs), config.Config.ReleaseName) + batch.Query(fmt.Sprintf(updateAppConfigByReleaseNameQuery, a.keyspace, kvPairs), config.Config.ReleaseName) } return a.client.Session().ExecuteBatch(batch) } func (a *Store) GetAppConfig(appReleaseName string) (*agentpb.SyncAppData, error) { - selectQuery := a.client.Session().Query(CreateSelectByFieldNameQuery(releaseName), appReleaseName) + selectQuery := a.client.Session().Query(CreateSelectByFieldNameQuery(a.keyspace, releaseName), appReleaseName) config := agentpb.AppConfig{} var overrideValues, launchUiValues string diff --git a/capten/agent/pkg/capten-store/app_config_store_test.go b/capten/agent/pkg/capten-store/app_config_store_test.go deleted file mode 100644 index 5e30d7eb..00000000 --- a/capten/agent/pkg/capten-store/app_config_store_test.go +++ /dev/null @@ -1,116 +0,0 @@ -package captenstore - -import ( - "github.com/intelops/go-common/logging" - migrator "github.com/kube-tarian/kad/capten/common-pkg/db-migration/cassandra" - "github.com/stretchr/testify/suite" -) - -type StoreSuite struct { - suite.Suite - - logger logging.Logger - mig *migrator.CassandraMigrate -} - -/* -func TestStoreTestSuite(t *testing.T) { - ss := new(StoreSuite) - ss.logger = logging.NewLogger() - - cdb := cassandra.NewCassandraStore(ss.logger, nil) - err := cdb.Connect([]string{"localhost:9042"}, "cassandra", "cassandra") - if err != nil { - t.Fatalf("couldn't connect to cassandra, err: %v", err) - } - err = cdb.CreateLockSchemaDb("1") - if err != nil { - t.Fatalf("createLockSchemaDb failed, err: %v", err) - } - //ss.cs = New(cdb) - - suite.Run(t, ss) - -} - -func (suite *StoreSuite) SetupSuite() { - - // create keyspace - err := suite.cs.CreateDB("apps") - if err != nil { - suite.FailNowf("error creating db/keyspace", "err: %v", err) - } - - // setEnvVars - os.Setenv("SOURCE_URI", "file://migrations") - os.Setenv("DB_NAME", "apps") // dbName/keyspace - - mig, err := migrator.NewCassandraMigrate(suite.logger) - if err != nil { - suite.FailNowf("migrator initialization error", "err: %v", err) - return - } - suite.mig = mig - - // run migrations - suite.mig.Run("cassandra", dbmigration.UP) - if err != nil { - suite.FailNowf("could not perform migrations", "err: %v", err) - } - -} - -func (suite *StoreSuite) TearDownSuite() { - - if err := suite.mig.Run("cassandra", dbmigration.PURGE); err != nil { - suite.logger.Errorf("Error migrating down, err: %v", err) - } - if err := suite.cs.DropDB("apps"); err != nil { - suite.logger.Errorf("Error dropping keyspace apps, err: %v", err) - } - suite.cs.CloseSession() -} - -func (suite *StoreSuite) TestInsertAndGetAppConfigs() { - - for _, config := range configs { - err := suite.cs.InsertAppConfig(config) - suite.Nil(err) - } - - for _, config := range upsertConfigs { - err := suite.cs.UpsertAppConfig(config) - suite.Nil(err) - } - - cfg, err := suite.cs.GetAppConfigByName("App1") - suite.Nil(err) - - suite.Equal("App1", cfg.Name) - suite.Equal("App1ChartName", cfg.ChartName) - suite.Empty(cfg.RepoName, "non empty repoName") - suite.Equal("2", cfg.Version) - -} - -var configs = []types.AppConfig{ - { - Name: "App1", - ChartName: "App1ChartName", - Version: "1", - Override: &types.Override{LaunchUIValues: map[string]any{}, Values: map[string]any{}}, - }, - - { - Name: "App2", - ChartName: "App2ChartName", - Override: &types.Override{LaunchUIValues: map[string]any{}, Values: map[string]any{}}, - }, -} - -var upsertConfigs = []types.AppConfig{ - { - Name: "App1", - Version: "2", - }, -}*/ diff --git a/capten/agent/pkg/capten-store/migrations.go b/capten/agent/pkg/capten-store/migrations.go deleted file mode 100644 index 236ce304..00000000 --- a/capten/agent/pkg/capten-store/migrations.go +++ /dev/null @@ -1,30 +0,0 @@ -package captenstore - -import ( - "github.com/intelops/go-common/logging" - "github.com/kube-tarian/kad/capten/common-pkg/db-create/cassandra" - dbmigration "github.com/kube-tarian/kad/capten/common-pkg/db-migration" - cassandramigrate "github.com/kube-tarian/kad/capten/common-pkg/db-migration/cassandra" -) - -func Migrate(log logging.Logger) error { - if err := cassandra.Create(log); err != nil { - return err - } - - mig, err := cassandramigrate.NewCassandraMigrate(log) - if err != nil { - return err - } - - return mig.Run("AppConfig", dbmigration.UP) -} - -func MigratePurge(log logging.Logger) error { - mig, err := cassandramigrate.NewCassandraMigrate(log) - if err != nil { - return err - } - - return mig.Run("AppConfig", dbmigration.PURGE) -} diff --git a/capten/agent/pkg/capten-store/migrations_test.go b/capten/agent/pkg/capten-store/migrations_test.go deleted file mode 100644 index 2342af06..00000000 --- a/capten/agent/pkg/capten-store/migrations_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package captenstore - -import ( - "os" - "testing" - - "github.com/intelops/go-common/logging" - "github.com/stretchr/testify/require" -) - -func TestMigrations(t *testing.T) { - assert := require.New(t) - - setEnvVars() - - logger := logging.NewLogger() - err := Migrate(logger) - assert.Nil(err) - -} - -func setEnvVars() { - - os.Setenv("DB_NAME", "apps") - os.Setenv("DB_SERVICE_USERNAME", "apps_user") - os.Setenv("DB_SERVICE_PASSWD", "apps_password") - os.Setenv("SOURCE_URI", "file://test_migrations") - -} diff --git a/capten/agent/pkg/capten-store/store.go b/capten/agent/pkg/capten-store/store.go index d7be00cf..29e1e5d2 100644 --- a/capten/agent/pkg/capten-store/store.go +++ b/capten/agent/pkg/capten-store/store.go @@ -2,35 +2,19 @@ package captenstore import ( "github.com/intelops/go-common/logging" - "github.com/kelseyhightower/envconfig" - cassandraclient "github.com/kube-tarian/kad/capten/common-pkg/cassandra-client" + dbclient "github.com/kube-tarian/kad/capten/common-pkg/cassandra/db-client" ) -type StoreConfig struct { - Keyspace string `envconfig:"DB_NAME" required:"true" default:"apps"` - DbServiceUserName string `envconfig:"DB_SERVICE_USERNAME" required:"true" default:"app_user"` -} - -func GetStoreConfig() (StoreConfig, error) { - conf := StoreConfig{} - err := envconfig.Process("", &conf) - return conf, err -} - type Store struct { - client *cassandraclient.Client - conf StoreConfig - log logging.Logger + client *dbclient.Client + log logging.Logger + keyspace string } func NewStore(log logging.Logger) (*Store, error) { - conf, err := GetStoreConfig() - if err != nil { - return nil, err - } - client, err := cassandraclient.NewClient() + client, err := dbclient.NewClient() if err != nil { return nil, err } - return &Store{log: log, conf: conf, client: client}, nil + return &Store{log: log, client: client, keyspace: client.Keyspace()}, nil } diff --git a/capten/agent/pkg/capten-store/test_migrations/001_agent.down.cql b/capten/agent/pkg/capten-store/test_migrations/001_agent.down.cql deleted file mode 100644 index 681bc842..00000000 --- a/capten/agent/pkg/capten-store/test_migrations/001_agent.down.cql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE apps.AppConfig; \ No newline at end of file diff --git a/capten/agent/pkg/util/synch_cassandra_secret.go b/capten/agent/pkg/util/synch_cassandra_secret.go new file mode 100644 index 00000000..63ec06f5 --- /dev/null +++ b/capten/agent/pkg/util/synch_cassandra_secret.go @@ -0,0 +1,44 @@ +package util + +import ( + "context" + "fmt" + + "github.com/intelops/go-common/logging" + "github.com/kelseyhightower/envconfig" + "github.com/kube-tarian/kad/capten/common-pkg/credential" + "github.com/kube-tarian/kad/capten/common-pkg/k8s" +) + +type SyncSecretConfig struct { + DBAdminCredIdentifier string `envconfig:"DB_ADMIN_CRED_IDENTIFIER" default:"cassandra-admin"` + EntityName string `envconfig:"DB_ENTITY_NAME" required:"true"` + SecretName string `envconfig:"CASSANDRA_SECRET_NAME" required:"true"` + Namespace string `envconfig:"POD_NAMESPACE" required:"true"` +} + +func SyncCassandraAdminSecret(log logging.Logger) error { + conf := &SyncSecretConfig{} + if err := envconfig.Process("", conf); err != nil { + return fmt.Errorf("cassandra config read faile, %v", err) + } + + k8sClient, err := k8s.NewK8SClient(log) + if err != nil { + return err + } + + res, err := k8sClient.FetchSecretDetails(&k8s.SecretDetailsRequest{Namespace: conf.Namespace, SecretName: conf.SecretName}) + if err != nil { + return err + } + + userName := res.Data["username"] + password := res.Data["password"] + if len(userName) == 0 || len(password) == 0 { + return fmt.Errorf("credentials not found in the secret") + } + + err = credential.PutServiceUserCredential(context.Background(), conf.EntityName, conf.DBAdminCredIdentifier, userName, password) + return err +} diff --git a/capten/common-pkg/db-migration/cassandra/tests/config/cassandra.yaml b/capten/cassandra/config/cassandra.yaml similarity index 100% rename from capten/common-pkg/db-migration/cassandra/tests/config/cassandra.yaml rename to capten/cassandra/config/cassandra.yaml diff --git a/capten/cassandra/migrations/001_agent.down.cql b/capten/cassandra/migrations/001_agent.down.cql new file mode 100644 index 00000000..4f58c05c --- /dev/null +++ b/capten/cassandra/migrations/001_agent.down.cql @@ -0,0 +1 @@ +DROP TABLE AppConfig; \ No newline at end of file diff --git a/capten/agent/pkg/capten-store/test_migrations/001_agent.up.cql b/capten/cassandra/migrations/001_agent.up.cql similarity index 97% rename from capten/agent/pkg/capten-store/test_migrations/001_agent.up.cql rename to capten/cassandra/migrations/001_agent.up.cql index f069f55f..ade8e1cb 100644 --- a/capten/agent/pkg/capten-store/test_migrations/001_agent.up.cql +++ b/capten/cassandra/migrations/001_agent.up.cql @@ -1,4 +1,4 @@ -CREATE TABLE apps.AppConfig( +CREATE TABLE AppConfig( app_name text, description text, category text, chart_name text, repo_name text, repo_url text, namespace text, release_name text, version text, diff --git a/capten/common-pkg/cassandra-client/client.go b/capten/common-pkg/cassandra/db-client/client.go similarity index 66% rename from capten/common-pkg/cassandra-client/client.go rename to capten/common-pkg/cassandra/db-client/client.go index 91cea61a..d452b52f 100644 --- a/capten/common-pkg/cassandra-client/client.go +++ b/capten/common-pkg/cassandra/db-client/client.go @@ -1,4 +1,4 @@ -package cassandraclient +package dbclient import ( "context" @@ -7,8 +7,8 @@ import ( "time" "github.com/gocql/gocql" - "github.com/intelops/go-common/credentials" "github.com/kelseyhightower/envconfig" + "github.com/kube-tarian/kad/capten/common-pkg/credential" "github.com/pkg/errors" ) @@ -19,7 +19,7 @@ type Config struct { Keyspace string `envconfig:"DB_NAME" required:"true"` ClusterTimeout int `envconfig:"CLUSTER_TIMEOUT_IN_SEC" default:"20"` ClusterConnectTimeout int `envconfig:"CLUSTER_CONNECT_TIMEOUT_IN_SEC" default:"20"` - ClusterConistency uint16 `envconfig:"CLUSTER_CONSISTENCY" default:"6"` + ClusterConistency uint16 `envconfig:"CLUSTER_CONSISTENCY" default:"3"` MaxRetryCount int `envconfig:"MAX_RETRY_COUNT" default:"3"` MaxConnectionCount int `envconfig:"MAX_CLUSTER_CONNECTION_COUNT" default:"5"` EnableCassandraTrace bool `envconfig:"ENABLE_CASSANDRA_TRACE" default:"false"` @@ -48,28 +48,20 @@ func NewClient() (*Client, error) { cluster.RetryPolicy = &gocql.ExponentialBackoffRetryPolicy{NumRetries: conf.MaxRetryCount} cluster.NumConns = conf.MaxConnectionCount - if os.Getenv("ENV") != "LOCAL" { - serviceCredential, err := getServiceUserCredential(context.Background(), - conf.EntityName, conf.ServiceUsername) - if err != nil { - return nil, err - } + serviceCredential, err := credential.GetServiceUserCredential(context.Background(), + conf.EntityName, conf.ServiceUsername) + if err != nil { + return nil, err + } - cluster.Authenticator = gocql.PasswordAuthenticator{ - Username: serviceCredential.UserName, - Password: serviceCredential.Password, - } - } else { - // local test env - cluster.Authenticator = gocql.PasswordAuthenticator{ - Username: os.Getenv("DB_SERVICE_USERNAME"), - Password: os.Getenv("DB_SERVICE_PASSWD"), - } + cluster.Authenticator = gocql.PasswordAuthenticator{ + Username: serviceCredential.UserName, + Password: serviceCredential.Password, } session, err := cluster.CreateSession() if err != nil { - return nil, fmt.Errorf("error connecting to the DB") + return nil, errors.WithMessage(err, "error in creating DB session") } if conf.EnableCassandraTrace { @@ -88,20 +80,10 @@ func (c *Client) Session() *gocql.Session { return c.session } -func (c *Client) Close() { - c.session.Close() +func (c *Client) Keyspace() string { + return c.conf.Keyspace } -func getServiceUserCredential(ctx context.Context, svcEntity, userName string) (cred credentials.ServiceCredential, err error) { - credReader, err := credentials.NewCredentialReader(ctx) - if err != nil { - err = errors.WithMessage(err, "error in initializing credential reader") - return - } - - cred, err = credReader.GetServiceUserCredential(context.Background(), svcEntity, userName) - if err != nil { - err = errors.WithMessagef(err, "error in reading credential for %s/%s", svcEntity, userName) - } - return +func (c *Client) Close() { + c.session.Close() } diff --git a/capten/common-pkg/db-create/cassandra/cassandra_store.go b/capten/common-pkg/cassandra/db-init/admin_client.go similarity index 66% rename from capten/common-pkg/db-create/cassandra/cassandra_store.go rename to capten/common-pkg/cassandra/db-init/admin_client.go index ff5fddb9..2b78e26f 100644 --- a/capten/common-pkg/db-create/cassandra/cassandra_store.go +++ b/capten/common-pkg/cassandra/db-init/admin_client.go @@ -1,14 +1,13 @@ -// Package cassandra contains ... -package cassandra +package dbinit import ( - "errors" "fmt" "strings" "time" "github.com/gocql/gocql" "github.com/intelops/go-common/logging" + "github.com/pkg/errors" ) const ( @@ -22,101 +21,93 @@ const ( grantSchemaChangeLockModifyPermission = "GRANT MODIFY ON TABLE schema_change.lock TO %s ;" ) -type CassandraStore struct { - logg logging.Logger +type CassandraAdmin struct { + log logging.Logger session *gocql.Session } -func NewCassandraStore(logger logging.Logger, sess *gocql.Session) (store *CassandraStore) { - store = &CassandraStore{ - logg: logger, - session: sess, +func NewCassandraAdmin(logger logging.Logger, dbAddrs []string, dbAdminUsername string, dbAdminPassword string) (*CassandraAdmin, error) { + ca := &CassandraAdmin{ + log: logger, } - - return + err := ca.initSession(dbAddrs, dbAdminUsername, dbAdminPassword) + if err != nil { + return nil, err + } + return ca, nil } -func (c *CassandraStore) Connect(dbAddrs []string, dbAdminUsername string, dbAdminPassword string) (err error) { - c.logg.Info("Creating new db cluster configuration") +func (c *CassandraAdmin) initSession(dbAddrs []string, dbAdminUsername string, dbAdminPassword string) (err error) { cluster, err := configureClusterConfig(dbAddrs, dbAdminUsername, dbAdminPassword) if err != nil { return } - c.logg.Info("Creating new db session") c.session, err = createDbSession(cluster) if err != nil { return } - return } -func (c *CassandraStore) Session() *gocql.Session { +func (c *CassandraAdmin) Session() *gocql.Session { return c.session } -func (c *CassandraStore) Close() { - c.logg.Info("closing cassandra session") +func (c *CassandraAdmin) Close() { c.session.Close() } -func (c *CassandraStore) CreateDbUser(serviceUsername string, servicePassword string) (err error) { - // Create database user for service usage +func (c *CassandraAdmin) CreateDbUser(serviceUsername string, servicePassword string) (err error) { err = c.session.Query(fmt.Sprintf(createUser, serviceUsername, servicePassword)).Exec() if err != nil { if strings.Contains(err.Error(), "already exists") { return c.updateDbUser(serviceUsername, servicePassword) } else { - c.logg.Error("Unable to create service user", err) + err = errors.WithMessage(err, "failed to create service user") return } } return } -func (c *CassandraStore) GrantPermission(serviceUsername string, dbName string) (err error) { +func (c *CassandraAdmin) GrantPermission(serviceUsername string, dbName string) (err error) { err = c.session.Query(fmt.Sprintf(grantSchemaChangeLockSelectPermission, serviceUsername)).Exec() if err != nil { - c.logg.Error("Unable to grant select permission to service user on schema_change.lock table", err) + err = errors.WithMessage(err, "failed to grant select permission to service user on schema_change.lock table") return } err = c.session.Query(fmt.Sprintf(grantSchemaChangeLockModifyPermission, serviceUsername)).Exec() if err != nil { - c.logg.Error("Unable to grant modify permission to service user on schema_change.lock table", err) + err = errors.WithMessage(err, "failed to grant modify permission to service user on schema_change.lock table") return } err = c.session.Query(fmt.Sprintf(grantPermission, dbName, serviceUsername)).Exec() if err != nil { - c.logg.Error("Unable to grant permission to service user", err) + err = errors.WithMessage(err, "failed to grant permission to service user") return } - return } -func (c *CassandraStore) CreateDb(dbName string, replicationFactor string) (err error) { - // Create keyspace only if it does not already exist +func (c *CassandraAdmin) CreateDb(dbName string, replicationFactor string) (err error) { err = c.session.Query(fmt.Sprintf(createKeyspaceCQL, dbName, replicationFactor)).Exec() if err != nil { - c.logg.Error("Unable to create the keyspace", err) + err = errors.WithMessage(err, "failed to create the keyspace") return } - return } -func (c *CassandraStore) CreateLockSchemaDb(replicationFactor string) (err error) { - // Create keyspace only if it does not already exist +func (c *CassandraAdmin) CreateLockSchemaDb(replicationFactor string) (err error) { err = c.session.Query(fmt.Sprintf(createKeyspaceSchemaChangeCQL, replicationFactor)).Exec() if err != nil { - c.logg.Error("Unable to create the schema_change keyspace", err) + err = errors.WithMessage(err, "failed to create the schema_change keyspace") return } - // Create table only if it does not already exist err = retry(3, 2*time.Second, func() (err error) { err = c.session.Query(createTableKeyspaceLockCQL).Exec() if err != nil { @@ -125,16 +116,15 @@ func (c *CassandraStore) CreateLockSchemaDb(replicationFactor string) (err error return nil }) if err != nil { - c.logg.Error("Unable to create the schema_change.lock table", err) + err = errors.WithMessage(err, "failed to create the schema_change.lock table") return } - return } func configureClusterConfig(addrs []string, adminUsername string, adminPassword string) (cluster *gocql.ClusterConfig, err error) { if len(addrs) == 0 { - err = errors.New("you must specify a Cassandra address to connect to") + err = errors.New("Cassandra addresses are empty") return } @@ -149,7 +139,6 @@ func configureClusterConfig(addrs []string, adminUsername string, adminPassword Password: adminPassword, } } - return } @@ -158,15 +147,13 @@ func createDbSession(cluster *gocql.ClusterConfig) (session *gocql.Session, err if err != nil { return nil, err } - return } -func (c *CassandraStore) updateDbUser(serviceUsername string, servicePassword string) (err error) { - // alter database user for service usage +func (c *CassandraAdmin) updateDbUser(serviceUsername string, servicePassword string) (err error) { err = c.session.Query(fmt.Sprintf(alterUser, serviceUsername, servicePassword)).Exec() if err != nil { - c.logg.Error("Unable to update service user, failed with error : ", err) + err = errors.WithMessage(err, "failed to update service user") return } return diff --git a/capten/common-pkg/cassandra/db-init/db_init.go b/capten/common-pkg/cassandra/db-init/db_init.go new file mode 100644 index 00000000..303227f7 --- /dev/null +++ b/capten/common-pkg/cassandra/db-init/db_init.go @@ -0,0 +1,109 @@ +package dbinit + +import ( + "context" + "crypto/rand" + "fmt" + "math/big" + + "github.com/intelops/go-common/logging" + "github.com/kelseyhightower/envconfig" + "github.com/kube-tarian/kad/capten/common-pkg/credential" + "github.com/pkg/errors" +) + +const ( + uppercaseChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + lowercaseChars = "abcdefghijklmnopqrstuvwxyz" + numberChars = "0123456789" + specialChars = "!@#$%^&" +) + +type Config struct { + DBAddresses []string `envconfig:"DB_ADDRESSES" required:"true"` + DBAdminCredIdentifier string `envconfig:"DB_ADMIN_CRED_IDENTIFIER" default:"cassandra-admin"` + DBReplicationFactor string `envconfig:"DB_REPLICATION_FACTOR" required:"true" default:"1"` + EntityName string `envconfig:"DB_ENTITY_NAME" required:"true"` + DBName string `envconfig:"DB_NAME" required:"true"` + DBServiceUsername string `envconfig:"DB_SERVICE_USERNAME" required:"true"` +} + +func CreatedDatabase(log logging.Logger) (err error) { + log.Debug("Creating new db for configuration") + conf := &Config{} + if err := envconfig.Process("", conf); err != nil { + return fmt.Errorf("cassandra config read faile, %v", err) + } + if len(conf.DBAddresses) == 0 { + return errors.New("cassandra DB addresses are empty") + } + + adminCredential, err := credential.GetServiceUserCredential(context.Background(), + conf.EntityName, conf.DBAdminCredIdentifier) + if err != nil { + return err + } + + adminClient, err := NewCassandraAdmin(log, conf.DBAddresses, adminCredential.UserName, adminCredential.Password) + if err != nil { + return + } + defer adminClient.Close() + + log.Info("Creating lock schema change db") + err = adminClient.CreateLockSchemaDb(conf.DBReplicationFactor) + if err != nil { + return + } + + log.Infof("Creating new db %s with %s", conf.DBName, conf.DBReplicationFactor) + err = adminClient.CreateDb(conf.DBName, conf.DBReplicationFactor) + if err != nil { + return + } + + var serviceUserPassword string + var serviceUserName string + serviceCredential, err := credential.GetServiceUserCredential(context.Background(), + conf.EntityName, conf.DBServiceUsername) + if err != nil { + log.Infof("user %s not exist in DB, %v", conf.DBServiceUsername, err) + serviceUserPassword = generateRandomPassword(12) + serviceUserName = conf.DBServiceUsername + } else { + serviceUserPassword = serviceCredential.Password + serviceUserName = serviceCredential.UserName + } + + log.Infof("Creating new service user %s", serviceUserName) + err = adminClient.CreateDbUser(serviceUserName, serviceUserPassword) + if err != nil { + return + } + + err = credential.PutServiceUserCredential(context.Background(), conf.EntityName, + conf.DBServiceUsername, conf.DBServiceUsername, serviceUserPassword) + if err != nil { + return + } + + log.Info("Grant permission to service user") + err = adminClient.GrantPermission(conf.DBServiceUsername, conf.DBName) + if err != nil { + return + } + return +} + +func generateRandomPassword(length int) string { + var passwordChars = uppercaseChars + lowercaseChars + numberChars + specialChars + password := make([]byte, length) + maxCharIndex := big.NewInt(int64(len(passwordChars))) + + for i := 0; i < length; i++ { + randomIndex, _ := rand.Int(rand.Reader, maxCharIndex) + password[i] = passwordChars[randomIndex.Int64()] + } + + return string(password) +} diff --git a/capten/common-pkg/db-migration/cassandra/cassandra.go b/capten/common-pkg/cassandra/db-migrate/cassandra.go similarity index 99% rename from capten/common-pkg/db-migration/cassandra/cassandra.go rename to capten/common-pkg/cassandra/db-migrate/cassandra.go index 043a7e3f..8e62cd45 100644 --- a/capten/common-pkg/db-migration/cassandra/cassandra.go +++ b/capten/common-pkg/cassandra/db-migrate/cassandra.go @@ -1,4 +1,4 @@ -package cassandra +package dbmigrate import ( "errors" diff --git a/capten/common-pkg/cassandra/db-migrate/cassandra_migration.go b/capten/common-pkg/cassandra/db-migrate/cassandra_migration.go new file mode 100644 index 00000000..8260778e --- /dev/null +++ b/capten/common-pkg/cassandra/db-migrate/cassandra_migration.go @@ -0,0 +1,58 @@ +package dbmigrate + +import ( + "context" + "fmt" + "net/url" + + _ "github.com/golang-migrate/migrate/v4/source/file" + "github.com/intelops/go-common/logging" + "github.com/kelseyhightower/envconfig" + "github.com/kube-tarian/kad/capten/common-pkg/credential" + "github.com/pkg/errors" +) + +type DBConfig struct { + DBAddrs []string `envconfig:"DB_ADDRESSES" required:"true"` + EntityName string `envconfig:"DB_ENTITY_NAME" required:"true"` + Keyspace string `envconfig:"DB_NAME" required:"true"` + DBName string `envconfig:"DB_NAME" required:"true"` // keyspace + Username string `envconfig:"DB_SERVICE_USERNAME" required:"true"` + Conistency string `envconfig:"CONSISTENCY" default:"ALL"` + SourceURI string `envconfig:"SOURCE_URI" default:"file:///cassandra/migrations"` +} + +func RunMigrations(log logging.Logger, mode Mode) error { + conf := &DBConfig{} + if err := envconfig.Process("", conf); err != nil { + return err + } + + dbConnectionString, err := getDbConnectionURLFromDbType(conf) + if err != nil { + return errors.WithMessage(err, "DB connection Url create failed") + } + + if err := runMigrations(conf.SourceURI, dbConnectionString, conf.DBName, mode); err != nil { + return err + } + log.Info("Migrations applied successfully") + return nil +} + +func getDbConnectionURLFromDbType(conf *DBConfig) (dbConnectionURL string, err error) { + serviceCredential, err := credential.GetServiceUserCredential(context.Background(), + conf.EntityName, conf.Username) + if err != nil { + return "", err + } + + passwd := url.QueryEscape(serviceCredential.Password) + if conf.Conistency == "" { + err = fmt.Errorf("Cassandra consistency is not provided") + return + } + dbConnectionURL = fmt.Sprintf("cassandra://%s/%s?username=%s&password=%s&consistency=%s", + conf.DBAddrs[0], conf.DBName, conf.Username, passwd, conf.Conistency) + return +} diff --git a/capten/common-pkg/db-migration/db_migration.go b/capten/common-pkg/cassandra/db-migrate/db_migration.go similarity index 95% rename from capten/common-pkg/db-migration/db_migration.go rename to capten/common-pkg/cassandra/db-migrate/db_migration.go index 2b0da80f..ebe6ca6c 100644 --- a/capten/common-pkg/db-migration/db_migration.go +++ b/capten/common-pkg/cassandra/db-migrate/db_migration.go @@ -1,5 +1,4 @@ -// Package migrate contains ... -package dbmigration +package dbmigrate import ( "os" @@ -22,7 +21,7 @@ const ( PURGE Mode = Mode(3) ) -func RunMigrations(sourceURL, databaseURL, dbName string, mode Mode) (err error) { +func runMigrations(sourceURL, databaseURL, dbName string, mode Mode) (err error) { sourceDriver, err := source.Open(sourceURL) if err != nil { return err diff --git a/capten/common-pkg/db-migration/cassandra/db_migration_test.go b/capten/common-pkg/cassandra/db-migrate/db_migration_test.go similarity index 63% rename from capten/common-pkg/db-migration/cassandra/db_migration_test.go rename to capten/common-pkg/cassandra/db-migrate/db_migration_test.go index c3bcbf07..d22a4bb3 100644 --- a/capten/common-pkg/db-migration/cassandra/db_migration_test.go +++ b/capten/common-pkg/cassandra/db-migrate/db_migration_test.go @@ -1,12 +1,11 @@ -package cassandra +package dbmigrate import ( "os" "testing" "github.com/intelops/go-common/logging" - "github.com/kube-tarian/kad/capten/common-pkg/db-create/cassandra" - dbmigration "github.com/kube-tarian/kad/capten/common-pkg/db-migration" + dbinit "github.com/kube-tarian/kad/capten/common-pkg/cassandra/db-init" "github.com/stretchr/testify/assert" ) @@ -14,16 +13,13 @@ func TestCreate(t *testing.T) { log := logging.NewLogger() setEnvConfig() - err := cassandra.Create(log) + err := dbinit.CreatedDatabase(log) assert.Nil(t, err) - migrationClient, err := NewCassandraMigrate(log) + err = RunMigrations(log, UP) assert.Nil(t, err) - err = migrationClient.Run("cassandra", dbmigration.UP) - assert.Nil(t, err) - - err = migrationClient.Run("cassandra", dbmigration.PURGE) + err = RunMigrations(log, PURGE) assert.Nil(t, err) } diff --git a/capten/common-pkg/db-migration/cassandra/docker-compose.yaml b/capten/common-pkg/cassandra/db-migrate/docker-compose.yaml similarity index 100% rename from capten/common-pkg/db-migration/cassandra/docker-compose.yaml rename to capten/common-pkg/cassandra/db-migrate/docker-compose.yaml diff --git a/capten/common-pkg/cassandra/db-migrate/tests/config/cassandra.yaml b/capten/common-pkg/cassandra/db-migrate/tests/config/cassandra.yaml new file mode 100644 index 00000000..d6801a2a --- /dev/null +++ b/capten/common-pkg/cassandra/db-migrate/tests/config/cassandra.yaml @@ -0,0 +1,1237 @@ +# Cassandra storage config YAML + +# NOTE: +# See http://wiki.apache.org/cassandra/StorageConfiguration for +# full explanations of configuration directives +# /NOTE + +# The name of the cluster. This is mainly used to prevent machines in +# one logical cluster from joining another. +cluster_name: 'Test Cluster' + +# This defines the number of tokens randomly assigned to this node on the ring +# The more tokens, relative to other nodes, the larger the proportion of data +# that this node will store. You probably want all nodes to have the same number +# of tokens assuming they have equal hardware capability. +# +# If you leave this unspecified, Cassandra will use the default of 1 token for legacy compatibility, +# and will use the initial_token as described below. +# +# Specifying initial_token will override this setting on the node's initial start, +# on subsequent starts, this setting will apply even if initial token is set. +# +# If you already have a cluster with 1 token per node, and wish to migrate to +# multiple tokens per node, see http://wiki.apache.org/cassandra/Operations +num_tokens: 256 + +# Triggers automatic allocation of num_tokens tokens for this node. The allocation +# algorithm attempts to choose tokens in a way that optimizes replicated load over +# the nodes in the datacenter for the replication strategy used by the specified +# keyspace. +# +# The load assigned to each node will be close to proportional to its number of +# vnodes. +# +# Only supported with the Murmur3Partitioner. +# allocate_tokens_for_keyspace: KEYSPACE + +# initial_token allows you to specify tokens manually. While you can use it with +# vnodes (num_tokens > 1, above) -- in which case you should provide a +# comma-separated list -- it's primarily used when adding nodes to legacy clusters +# that do not have vnodes enabled. +# initial_token: + +# See http://wiki.apache.org/cassandra/HintedHandoff +# May either be "true" or "false" to enable globally +hinted_handoff_enabled: true + +# When hinted_handoff_enabled is true, a black list of data centers that will not +# perform hinted handoff +# hinted_handoff_disabled_datacenters: +# - DC1 +# - DC2 + +# this defines the maximum amount of time a dead host will have hints +# generated. After it has been dead this long, new hints for it will not be +# created until it has been seen alive and gone down again. +max_hint_window_in_ms: 10800000 # 3 hours + +# Maximum throttle in KBs per second, per delivery thread. This will be +# reduced proportionally to the number of nodes in the cluster. (If there +# are two nodes in the cluster, each delivery thread will use the maximum +# rate; if there are three, each will throttle to half of the maximum, +# since we expect two nodes to be delivering hints simultaneously.) +hinted_handoff_throttle_in_kb: 1024 + +# Number of threads with which to deliver hints; +# Consider increasing this number when you have multi-dc deployments, since +# cross-dc handoff tends to be slower +max_hints_delivery_threads: 2 + +# Directory where Cassandra should store hints. +# If not set, the default directory is $CASSANDRA_HOME/data/hints. +# hints_directory: /var/lib/cassandra/hints + +# How often hints should be flushed from the internal buffers to disk. +# Will *not* trigger fsync. +hints_flush_period_in_ms: 10000 + +# Maximum size for a single hints file, in megabytes. +max_hints_file_size_in_mb: 128 + +# Compression to apply to the hint files. If omitted, hints files +# will be written uncompressed. LZ4, Snappy, and Deflate compressors +# are supported. +#hints_compression: +# - class_name: LZ4Compressor +# parameters: +# - + +# Maximum throttle in KBs per second, total. This will be +# reduced proportionally to the number of nodes in the cluster. +batchlog_replay_throttle_in_kb: 1024 + +# Authentication backend, implementing IAuthenticator; used to identify users +# Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthenticator, +# PasswordAuthenticator}. +# +# - AllowAllAuthenticator performs no checks - set it to disable authentication. +# - PasswordAuthenticator relies on username/password pairs to authenticate +# users. It keeps usernames and hashed passwords in system_auth.roles table. +# Please increase system_auth keyspace replication factor if you use this authenticator. +# If using PasswordAuthenticator, CassandraRoleManager must also be used (see below) +authenticator: PasswordAuthenticator + +# Authorization backend, implementing IAuthorizer; used to limit access/provide permissions +# Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthorizer, +# CassandraAuthorizer}. +# +# - AllowAllAuthorizer allows any action to any user - set it to disable authorization. +# - CassandraAuthorizer stores permissions in system_auth.role_permissions table. Please +# increase system_auth keyspace replication factor if you use this authorizer. +authorizer: CassandraAuthorizer + +# Part of the Authentication & Authorization backend, implementing IRoleManager; used +# to maintain grants and memberships between roles. +# Out of the box, Cassandra provides org.apache.cassandra.auth.CassandraRoleManager, +# which stores role information in the system_auth keyspace. Most functions of the +# IRoleManager require an authenticated login, so unless the configured IAuthenticator +# actually implements authentication, most of this functionality will be unavailable. +# +# - CassandraRoleManager stores role data in the system_auth keyspace. Please +# increase system_auth keyspace replication factor if you use this role manager. +role_manager: CassandraRoleManager + +# Validity period for roles cache (fetching granted roles can be an expensive +# operation depending on the role manager, CassandraRoleManager is one example) +# Granted roles are cached for authenticated sessions in AuthenticatedUser and +# after the period specified here, become eligible for (async) reload. +# Defaults to 2000, set to 0 to disable caching entirely. +# Will be disabled automatically for AllowAllAuthenticator. +roles_validity_in_ms: 2000 + +# Refresh interval for roles cache (if enabled). +# After this interval, cache entries become eligible for refresh. Upon next +# access, an async reload is scheduled and the old value returned until it +# completes. If roles_validity_in_ms is non-zero, then this must be +# also. +# Defaults to the same value as roles_validity_in_ms. +# roles_update_interval_in_ms: 2000 + +# Validity period for permissions cache (fetching permissions can be an +# expensive operation depending on the authorizer, CassandraAuthorizer is +# one example). Defaults to 2000, set to 0 to disable. +# Will be disabled automatically for AllowAllAuthorizer. +permissions_validity_in_ms: 2000 + +# Refresh interval for permissions cache (if enabled). +# After this interval, cache entries become eligible for refresh. Upon next +# access, an async reload is scheduled and the old value returned until it +# completes. If permissions_validity_in_ms is non-zero, then this must be +# also. +# Defaults to the same value as permissions_validity_in_ms. +# permissions_update_interval_in_ms: 2000 + +# Validity period for credentials cache. This cache is tightly coupled to +# the provided PasswordAuthenticator implementation of IAuthenticator. If +# another IAuthenticator implementation is configured, this cache will not +# be automatically used and so the following settings will have no effect. +# Please note, credentials are cached in their encrypted form, so while +# activating this cache may reduce the number of queries made to the +# underlying table, it may not bring a significant reduction in the +# latency of individual authentication attempts. +# Defaults to 2000, set to 0 to disable credentials caching. +credentials_validity_in_ms: 2000 + +# Refresh interval for credentials cache (if enabled). +# After this interval, cache entries become eligible for refresh. Upon next +# access, an async reload is scheduled and the old value returned until it +# completes. If credentials_validity_in_ms is non-zero, then this must be +# also. +# Defaults to the same value as credentials_validity_in_ms. +# credentials_update_interval_in_ms: 2000 + +# The partitioner is responsible for distributing groups of rows (by +# partition key) across nodes in the cluster. You should leave this +# alone for new clusters. The partitioner can NOT be changed without +# reloading all data, so when upgrading you should set this to the +# same partitioner you were already using. +# +# Besides Murmur3Partitioner, partitioners included for backwards +# compatibility include RandomPartitioner, ByteOrderedPartitioner, and +# OrderPreservingPartitioner. +# +partitioner: org.apache.cassandra.dht.Murmur3Partitioner + +# Directories where Cassandra should store data on disk. Cassandra +# will spread data evenly across them, subject to the granularity of +# the configured compaction strategy. +# If not set, the default directory is $CASSANDRA_HOME/data/data. +data_file_directories: + - /var/lib/cassandra/data + +# commit log. when running on magnetic HDD, this should be a +# separate spindle than the data directories. +# If not set, the default directory is $CASSANDRA_HOME/data/commitlog. +commitlog_directory: /var/lib/cassandra/commitlog + +# Enable / disable CDC functionality on a per-node basis. This modifies the logic used +# for write path allocation rejection (standard: never reject. cdc: reject Mutation +# containing a CDC-enabled table if at space limit in cdc_raw_directory). +cdc_enabled: false + +# CommitLogSegments are moved to this directory on flush if cdc_enabled: true and the +# segment contains mutations for a CDC-enabled table. This should be placed on a +# separate spindle than the data directories. If not set, the default directory is +# $CASSANDRA_HOME/data/cdc_raw. +# cdc_raw_directory: /var/lib/cassandra/cdc_raw + +# Policy for data disk failures: +# +# die +# shut down gossip and client transports and kill the JVM for any fs errors or +# single-sstable errors, so the node can be replaced. +# +# stop_paranoid +# shut down gossip and client transports even for single-sstable errors, +# kill the JVM for errors during startup. +# +# stop +# shut down gossip and client transports, leaving the node effectively dead, but +# can still be inspected via JMX, kill the JVM for errors during startup. +# +# best_effort +# stop using the failed disk and respond to requests based on +# remaining available sstables. This means you WILL see obsolete +# data at CL.ONE! +# +# ignore +# ignore fatal errors and let requests fail, as in pre-1.2 Cassandra +disk_failure_policy: stop + +# Policy for commit disk failures: +# +# die +# shut down gossip and Thrift and kill the JVM, so the node can be replaced. +# +# stop +# shut down gossip and Thrift, leaving the node effectively dead, but +# can still be inspected via JMX. +# +# stop_commit +# shutdown the commit log, letting writes collect but +# continuing to service reads, as in pre-2.0.5 Cassandra +# +# ignore +# ignore fatal errors and let the batches fail +commit_failure_policy: stop + +# Maximum size of the native protocol prepared statement cache +# +# Valid values are either "auto" (omitting the value) or a value greater 0. +# +# Note that specifying a too large value will result in long running GCs and possbily +# out-of-memory errors. Keep the value at a small fraction of the heap. +# +# If you constantly see "prepared statements discarded in the last minute because +# cache limit reached" messages, the first step is to investigate the root cause +# of these messages and check whether prepared statements are used correctly - +# i.e. use bind markers for variable parts. +# +# Do only change the default value, if you really have more prepared statements than +# fit in the cache. In most cases it is not neccessary to change this value. +# Constantly re-preparing statements is a performance penalty. +# +# Default value ("auto") is 1/256th of the heap or 10MB, whichever is greater +prepared_statements_cache_size_mb: + +# Maximum size of the Thrift prepared statement cache +# +# If you do not use Thrift at all, it is safe to leave this value at "auto". +# +# See description of 'prepared_statements_cache_size_mb' above for more information. +# +# Default value ("auto") is 1/256th of the heap or 10MB, whichever is greater +thrift_prepared_statements_cache_size_mb: + +# Maximum size of the key cache in memory. +# +# Each key cache hit saves 1 seek and each row cache hit saves 2 seeks at the +# minimum, sometimes more. The key cache is fairly tiny for the amount of +# time it saves, so it's worthwhile to use it at large numbers. +# The row cache saves even more time, but must contain the entire row, +# so it is extremely space-intensive. It's best to only use the +# row cache if you have hot rows or static rows. +# +# NOTE: if you reduce the size, you may not get you hottest keys loaded on startup. +# +# Default value is empty to make it "auto" (min(5% of Heap (in MB), 100MB)). Set to 0 to disable key cache. +key_cache_size_in_mb: + +# Duration in seconds after which Cassandra should +# save the key cache. Caches are saved to saved_caches_directory as +# specified in this configuration file. +# +# Saved caches greatly improve cold-start speeds, and is relatively cheap in +# terms of I/O for the key cache. Row cache saving is much more expensive and +# has limited use. +# +# Default is 14400 or 4 hours. +key_cache_save_period: 14400 + +# Number of keys from the key cache to save +# Disabled by default, meaning all keys are going to be saved +# key_cache_keys_to_save: 100 + +# Row cache implementation class name. Available implementations: +# +# org.apache.cassandra.cache.OHCProvider +# Fully off-heap row cache implementation (default). +# +# org.apache.cassandra.cache.SerializingCacheProvider +# This is the row cache implementation availabile +# in previous releases of Cassandra. +# row_cache_class_name: org.apache.cassandra.cache.OHCProvider + +# Maximum size of the row cache in memory. +# Please note that OHC cache implementation requires some additional off-heap memory to manage +# the map structures and some in-flight memory during operations before/after cache entries can be +# accounted against the cache capacity. This overhead is usually small compared to the whole capacity. +# Do not specify more memory that the system can afford in the worst usual situation and leave some +# headroom for OS block level cache. Do never allow your system to swap. +# +# Default value is 0, to disable row caching. +row_cache_size_in_mb: 0 + +# Duration in seconds after which Cassandra should save the row cache. +# Caches are saved to saved_caches_directory as specified in this configuration file. +# +# Saved caches greatly improve cold-start speeds, and is relatively cheap in +# terms of I/O for the key cache. Row cache saving is much more expensive and +# has limited use. +# +# Default is 0 to disable saving the row cache. +row_cache_save_period: 0 + +# Number of keys from the row cache to save. +# Specify 0 (which is the default), meaning all keys are going to be saved +# row_cache_keys_to_save: 100 + +# Maximum size of the counter cache in memory. +# +# Counter cache helps to reduce counter locks' contention for hot counter cells. +# In case of RF = 1 a counter cache hit will cause Cassandra to skip the read before +# write entirely. With RF > 1 a counter cache hit will still help to reduce the duration +# of the lock hold, helping with hot counter cell updates, but will not allow skipping +# the read entirely. Only the local (clock, count) tuple of a counter cell is kept +# in memory, not the whole counter, so it's relatively cheap. +# +# NOTE: if you reduce the size, you may not get you hottest keys loaded on startup. +# +# Default value is empty to make it "auto" (min(2.5% of Heap (in MB), 50MB)). Set to 0 to disable counter cache. +# NOTE: if you perform counter deletes and rely on low gcgs, you should disable the counter cache. +counter_cache_size_in_mb: + +# Duration in seconds after which Cassandra should +# save the counter cache (keys only). Caches are saved to saved_caches_directory as +# specified in this configuration file. +# +# Default is 7200 or 2 hours. +counter_cache_save_period: 7200 + +# Number of keys from the counter cache to save +# Disabled by default, meaning all keys are going to be saved +# counter_cache_keys_to_save: 100 + +# saved caches +# If not set, the default directory is $CASSANDRA_HOME/data/saved_caches. +saved_caches_directory: /var/lib/cassandra/saved_caches + +# commitlog_sync may be either "periodic" or "batch." +# +# When in batch mode, Cassandra won't ack writes until the commit log +# has been fsynced to disk. It will wait +# commitlog_sync_batch_window_in_ms milliseconds between fsyncs. +# This window should be kept short because the writer threads will +# be unable to do extra work while waiting. (You may need to increase +# concurrent_writes for the same reason.) +# +# commitlog_sync: batch +# commitlog_sync_batch_window_in_ms: 2 +# +# the other option is "periodic" where writes may be acked immediately +# and the CommitLog is simply synced every commitlog_sync_period_in_ms +# milliseconds. +commitlog_sync: periodic +commitlog_sync_period_in_ms: 10000 + +# The size of the individual commitlog file segments. A commitlog +# segment may be archived, deleted, or recycled once all the data +# in it (potentially from each columnfamily in the system) has been +# flushed to sstables. +# +# The default size is 32, which is almost always fine, but if you are +# archiving commitlog segments (see commitlog_archiving.properties), +# then you probably want a finer granularity of archiving; 8 or 16 MB +# is reasonable. +# Max mutation size is also configurable via max_mutation_size_in_kb setting in +# cassandra.yaml. The default is half the size commitlog_segment_size_in_mb * 1024. +# This should be positive and less than 2048. +# +# NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must +# be set to at least twice the size of max_mutation_size_in_kb / 1024 +# +commitlog_segment_size_in_mb: 32 + +# Compression to apply to the commit log. If omitted, the commit log +# will be written uncompressed. LZ4, Snappy, and Deflate compressors +# are supported. +# commitlog_compression: +# - class_name: LZ4Compressor +# parameters: +# - + +# any class that implements the SeedProvider interface and has a +# constructor that takes a Map of parameters will do. +seed_provider: + # Addresses of hosts that are deemed contact points. + # Cassandra nodes use this list of hosts to find each other and learn + # the topology of the ring. You must change this if you are running + # multiple nodes! + - class_name: org.apache.cassandra.locator.SimpleSeedProvider + parameters: + # seeds is actually a comma-delimited list of addresses. + # Ex: ",," + - seeds: "172.18.0.2" + +# For workloads with more data than can fit in memory, Cassandra's +# bottleneck will be reads that need to fetch data from +# disk. "concurrent_reads" should be set to (16 * number_of_drives) in +# order to allow the operations to enqueue low enough in the stack +# that the OS and drives can reorder them. Same applies to +# "concurrent_counter_writes", since counter writes read the current +# values before incrementing and writing them back. +# +# On the other hand, since writes are almost never IO bound, the ideal +# number of "concurrent_writes" is dependent on the number of cores in +# your system; (8 * number_of_cores) is a good rule of thumb. +concurrent_reads: 32 +concurrent_writes: 32 +concurrent_counter_writes: 32 + +# For materialized view writes, as there is a read involved, so this should +# be limited by the less of concurrent reads or concurrent writes. +concurrent_materialized_view_writes: 32 + +# Maximum memory to use for sstable chunk cache and buffer pooling. +# 32MB of this are reserved for pooling buffers, the rest is used as an +# cache that holds uncompressed sstable chunks. +# Defaults to the smaller of 1/4 of heap or 512MB. This pool is allocated off-heap, +# so is in addition to the memory allocated for heap. The cache also has on-heap +# overhead which is roughly 128 bytes per chunk (i.e. 0.2% of the reserved size +# if the default 64k chunk size is used). +# Memory is only allocated when needed. +# file_cache_size_in_mb: 512 + +# Flag indicating whether to allocate on or off heap when the sstable buffer +# pool is exhausted, that is when it has exceeded the maximum memory +# file_cache_size_in_mb, beyond which it will not cache buffers but allocate on request. + +# buffer_pool_use_heap_if_exhausted: true + +# The strategy for optimizing disk read +# Possible values are: +# ssd (for solid state disks, the default) +# spinning (for spinning disks) +# disk_optimization_strategy: ssd + +# Total permitted memory to use for memtables. Cassandra will stop +# accepting writes when the limit is exceeded until a flush completes, +# and will trigger a flush based on memtable_cleanup_threshold +# If omitted, Cassandra will set both to 1/4 the size of the heap. +# memtable_heap_space_in_mb: 2048 +# memtable_offheap_space_in_mb: 2048 + +# memtable_cleanup_threshold is deprecated. The default calculation +# is the only reasonable choice. See the comments on memtable_flush_writers +# for more information. +# +# Ratio of occupied non-flushing memtable size to total permitted size +# that will trigger a flush of the largest memtable. Larger mct will +# mean larger flushes and hence less compaction, but also less concurrent +# flush activity which can make it difficult to keep your disks fed +# under heavy write load. +# +# memtable_cleanup_threshold defaults to 1 / (memtable_flush_writers + 1) +# memtable_cleanup_threshold: 0.11 + +# Specify the way Cassandra allocates and manages memtable memory. +# Options are: +# +# heap_buffers +# on heap nio buffers +# +# offheap_buffers +# off heap (direct) nio buffers +# +# offheap_objects +# off heap objects +memtable_allocation_type: heap_buffers + +# Total space to use for commit logs on disk. +# +# If space gets above this value, Cassandra will flush every dirty CF +# in the oldest segment and remove it. So a small total commitlog space +# will tend to cause more flush activity on less-active columnfamilies. +# +# The default value is the smaller of 8192, and 1/4 of the total space +# of the commitlog volume. +# +# commitlog_total_space_in_mb: 8192 + +# This sets the number of memtable flush writer threads per disk +# as well as the total number of memtables that can be flushed concurrently. +# These are generally a combination of compute and IO bound. +# +# Memtable flushing is more CPU efficient than memtable ingest and a single thread +# can keep up with the ingest rate of a whole server on a single fast disk +# until it temporarily becomes IO bound under contention typically with compaction. +# At that point you need multiple flush threads. At some point in the future +# it may become CPU bound all the time. +# +# You can tell if flushing is falling behind using the MemtablePool.BlockedOnAllocation +# metric which should be 0, but will be non-zero if threads are blocked waiting on flushing +# to free memory. +# +# memtable_flush_writers defaults to two for a single data directory. +# This means that two memtables can be flushed concurrently to the single data directory. +# If you have multiple data directories the default is one memtable flushing at a time +# but the flush will use a thread per data directory so you will get two or more writers. +# +# Two is generally enough to flush on a fast disk [array] mounted as a single data directory. +# Adding more flush writers will result in smaller more frequent flushes that introduce more +# compaction overhead. +# +# There is a direct tradeoff between number of memtables that can be flushed concurrently +# and flush size and frequency. More is not better you just need enough flush writers +# to never stall waiting for flushing to free memory. +# +#memtable_flush_writers: 2 + +# Total space to use for change-data-capture logs on disk. +# +# If space gets above this value, Cassandra will throw WriteTimeoutException +# on Mutations including tables with CDC enabled. A CDCCompactor is responsible +# for parsing the raw CDC logs and deleting them when parsing is completed. +# +# The default value is the min of 4096 mb and 1/8th of the total space +# of the drive where cdc_raw_directory resides. +# cdc_total_space_in_mb: 4096 + +# When we hit our cdc_raw limit and the CDCCompactor is either running behind +# or experiencing backpressure, we check at the following interval to see if any +# new space for cdc-tracked tables has been made available. Default to 250ms +# cdc_free_space_check_interval_ms: 250 + +# A fixed memory pool size in MB for for SSTable index summaries. If left +# empty, this will default to 5% of the heap size. If the memory usage of +# all index summaries exceeds this limit, SSTables with low read rates will +# shrink their index summaries in order to meet this limit. However, this +# is a best-effort process. In extreme conditions Cassandra may need to use +# more than this amount of memory. +index_summary_capacity_in_mb: + +# How frequently index summaries should be resampled. This is done +# periodically to redistribute memory from the fixed-size pool to sstables +# proportional their recent read rates. Setting to -1 will disable this +# process, leaving existing index summaries at their current sampling level. +index_summary_resize_interval_in_minutes: 60 + +# Whether to, when doing sequential writing, fsync() at intervals in +# order to force the operating system to flush the dirty +# buffers. Enable this to avoid sudden dirty buffer flushing from +# impacting read latencies. Almost always a good idea on SSDs; not +# necessarily on platters. +trickle_fsync: false +trickle_fsync_interval_in_kb: 10240 + +# TCP port, for commands and data +# For security reasons, you should not expose this port to the internet. Firewall it if needed. +storage_port: 7000 + +# SSL port, for encrypted communication. Unused unless enabled in +# encryption_options +# For security reasons, you should not expose this port to the internet. Firewall it if needed. +ssl_storage_port: 7001 + +# Address or interface to bind to and tell other Cassandra nodes to connect to. +# You _must_ change this if you want multiple nodes to be able to communicate! +# +# Set listen_address OR listen_interface, not both. +# +# Leaving it blank leaves it up to InetAddress.getLocalHost(). This +# will always do the Right Thing _if_ the node is properly configured +# (hostname, name resolution, etc), and the Right Thing is to use the +# address associated with the hostname (it might not be). +# +# Setting listen_address to 0.0.0.0 is always wrong. +# +listen_address: 172.18.0.2 + +# Set listen_address OR listen_interface, not both. Interfaces must correspond +# to a single address, IP aliasing is not supported. +# listen_interface: eth0 + +# If you choose to specify the interface by name and the interface has an ipv4 and an ipv6 address +# you can specify which should be chosen using listen_interface_prefer_ipv6. If false the first ipv4 +# address will be used. If true the first ipv6 address will be used. Defaults to false preferring +# ipv4. If there is only one address it will be selected regardless of ipv4/ipv6. +# listen_interface_prefer_ipv6: false + +# Address to broadcast to other Cassandra nodes +# Leaving this blank will set it to the same value as listen_address +broadcast_address: 172.18.0.2 + +# When using multiple physical network interfaces, set this +# to true to listen on broadcast_address in addition to +# the listen_address, allowing nodes to communicate in both +# interfaces. +# Ignore this property if the network configuration automatically +# routes between the public and private networks such as EC2. +# listen_on_broadcast_address: false + +# Internode authentication backend, implementing IInternodeAuthenticator; +# used to allow/disallow connections from peer nodes. +# internode_authenticator: org.apache.cassandra.auth.AllowAllInternodeAuthenticator + +# Whether to start the native transport server. +# Please note that the address on which the native transport is bound is the +# same as the rpc_address. The port however is different and specified below. +start_native_transport: true +# port for the CQL native transport to listen for clients on +# For security reasons, you should not expose this port to the internet. Firewall it if needed. +native_transport_port: 9042 +# Enabling native transport encryption in client_encryption_options allows you to either use +# encryption for the standard port or to use a dedicated, additional port along with the unencrypted +# standard native_transport_port. +# Enabling client encryption and keeping native_transport_port_ssl disabled will use encryption +# for native_transport_port. Setting native_transport_port_ssl to a different value +# from native_transport_port will use encryption for native_transport_port_ssl while +# keeping native_transport_port unencrypted. +# native_transport_port_ssl: 9142 +# The maximum threads for handling requests when the native transport is used. +# This is similar to rpc_max_threads though the default differs slightly (and +# there is no native_transport_min_threads, idle threads will always be stopped +# after 30 seconds). +# native_transport_max_threads: 128 +# +# The maximum size of allowed frame. Frame (requests) larger than this will +# be rejected as invalid. The default is 256MB. If you're changing this parameter, +# you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. +# native_transport_max_frame_size_in_mb: 256 + +# The maximum number of concurrent client connections. +# The default is -1, which means unlimited. +# native_transport_max_concurrent_connections: -1 + +# The maximum number of concurrent client connections per source ip. +# The default is -1, which means unlimited. +# native_transport_max_concurrent_connections_per_ip: -1 + +# Whether to start the thrift rpc server. +start_rpc: false + +# The address or interface to bind the Thrift RPC service and native transport +# server to. +# +# Set rpc_address OR rpc_interface, not both. +# +# Leaving rpc_address blank has the same effect as on listen_address +# (i.e. it will be based on the configured hostname of the node). +# +# Note that unlike listen_address, you can specify 0.0.0.0, but you must also +# set broadcast_rpc_address to a value other than 0.0.0.0. +# +# For security reasons, you should not expose this port to the internet. Firewall it if needed. +rpc_address: 0.0.0.0 + +# Set rpc_address OR rpc_interface, not both. Interfaces must correspond +# to a single address, IP aliasing is not supported. +# rpc_interface: eth1 + +# If you choose to specify the interface by name and the interface has an ipv4 and an ipv6 address +# you can specify which should be chosen using rpc_interface_prefer_ipv6. If false the first ipv4 +# address will be used. If true the first ipv6 address will be used. Defaults to false preferring +# ipv4. If there is only one address it will be selected regardless of ipv4/ipv6. +# rpc_interface_prefer_ipv6: false + +# port for Thrift to listen for clients on +rpc_port: 9160 + +# RPC address to broadcast to drivers and other Cassandra nodes. This cannot +# be set to 0.0.0.0. If left blank, this will be set to the value of +# rpc_address. If rpc_address is set to 0.0.0.0, broadcast_rpc_address must +# be set. +broadcast_rpc_address: 172.18.0.2 + +# enable or disable keepalive on rpc/native connections +rpc_keepalive: true + +# Cassandra provides two out-of-the-box options for the RPC Server: +# +# sync +# One thread per thrift connection. For a very large number of clients, memory +# will be your limiting factor. On a 64 bit JVM, 180KB is the minimum stack size +# per thread, and that will correspond to your use of virtual memory (but physical memory +# may be limited depending on use of stack space). +# +# hsha +# Stands for "half synchronous, half asynchronous." All thrift clients are handled +# asynchronously using a small number of threads that does not vary with the amount +# of thrift clients (and thus scales well to many clients). The rpc requests are still +# synchronous (one thread per active request). If hsha is selected then it is essential +# that rpc_max_threads is changed from the default value of unlimited. +# +# The default is sync because on Windows hsha is about 30% slower. On Linux, +# sync/hsha performance is about the same, with hsha of course using less memory. +# +# Alternatively, can provide your own RPC server by providing the fully-qualified class name +# of an o.a.c.t.TServerFactory that can create an instance of it. +rpc_server_type: sync + +# Uncomment rpc_min|max_thread to set request pool size limits. +# +# Regardless of your choice of RPC server (see above), the number of maximum requests in the +# RPC thread pool dictates how many concurrent requests are possible (but if you are using the sync +# RPC server, it also dictates the number of clients that can be connected at all). +# +# The default is unlimited and thus provides no protection against clients overwhelming the server. You are +# encouraged to set a maximum that makes sense for you in production, but do keep in mind that +# rpc_max_threads represents the maximum number of client requests this server may execute concurrently. +# +# rpc_min_threads: 16 +# rpc_max_threads: 2048 + +# uncomment to set socket buffer sizes on rpc connections +# rpc_send_buff_size_in_bytes: +# rpc_recv_buff_size_in_bytes: + +# Uncomment to set socket buffer size for internode communication +# Note that when setting this, the buffer size is limited by net.core.wmem_max +# and when not setting it it is defined by net.ipv4.tcp_wmem +# See also: +# /proc/sys/net/core/wmem_max +# /proc/sys/net/core/rmem_max +# /proc/sys/net/ipv4/tcp_wmem +# /proc/sys/net/ipv4/tcp_wmem +# and 'man tcp' +# internode_send_buff_size_in_bytes: + +# Uncomment to set socket buffer size for internode communication +# Note that when setting this, the buffer size is limited by net.core.wmem_max +# and when not setting it it is defined by net.ipv4.tcp_wmem +# internode_recv_buff_size_in_bytes: + +# Frame size for thrift (maximum message length). +thrift_framed_transport_size_in_mb: 15 + +# Set to true to have Cassandra create a hard link to each sstable +# flushed or streamed locally in a backups/ subdirectory of the +# keyspace data. Removing these links is the operator's +# responsibility. +incremental_backups: false + +# Whether or not to take a snapshot before each compaction. Be +# careful using this option, since Cassandra won't clean up the +# snapshots for you. Mostly useful if you're paranoid when there +# is a data format change. +snapshot_before_compaction: false + +# Whether or not a snapshot is taken of the data before keyspace truncation +# or dropping of column families. The STRONGLY advised default of true +# should be used to provide data safety. If you set this flag to false, you will +# lose data on truncation or drop. +auto_snapshot: true + +# Granularity of the collation index of rows within a partition. +# Increase if your rows are large, or if you have a very large +# number of rows per partition. The competing goals are these: +# +# - a smaller granularity means more index entries are generated +# and looking up rows withing the partition by collation column +# is faster +# - but, Cassandra will keep the collation index in memory for hot +# rows (as part of the key cache), so a larger granularity means +# you can cache more hot rows +column_index_size_in_kb: 64 + +# Per sstable indexed key cache entries (the collation index in memory +# mentioned above) exceeding this size will not be held on heap. +# This means that only partition information is held on heap and the +# index entries are read from disk. +# +# Note that this size refers to the size of the +# serialized index information and not the size of the partition. +column_index_cache_size_in_kb: 2 + +# Number of simultaneous compactions to allow, NOT including +# validation "compactions" for anti-entropy repair. Simultaneous +# compactions can help preserve read performance in a mixed read/write +# workload, by mitigating the tendency of small sstables to accumulate +# during a single long running compactions. The default is usually +# fine and if you experience problems with compaction running too +# slowly or too fast, you should look at +# compaction_throughput_mb_per_sec first. +# +# concurrent_compactors defaults to the smaller of (number of disks, +# number of cores), with a minimum of 2 and a maximum of 8. +# +# If your data directories are backed by SSD, you should increase this +# to the number of cores. +#concurrent_compactors: 1 + +# Throttles compaction to the given total throughput across the entire +# system. The faster you insert data, the faster you need to compact in +# order to keep the sstable count down, but in general, setting this to +# 16 to 32 times the rate you are inserting data is more than sufficient. +# Setting this to 0 disables throttling. Note that this account for all types +# of compaction, including validation compaction. +compaction_throughput_mb_per_sec: 16 + +# When compacting, the replacement sstable(s) can be opened before they +# are completely written, and used in place of the prior sstables for +# any range that has been written. This helps to smoothly transfer reads +# between the sstables, reducing page cache churn and keeping hot rows hot +sstable_preemptive_open_interval_in_mb: 50 + +# Throttles all outbound streaming file transfers on this node to the +# given total throughput in Mbps. This is necessary because Cassandra does +# mostly sequential IO when streaming data during bootstrap or repair, which +# can lead to saturating the network connection and degrading rpc performance. +# When unset, the default is 200 Mbps or 25 MB/s. +# stream_throughput_outbound_megabits_per_sec: 200 + +# Throttles all streaming file transfer between the datacenters, +# this setting allows users to throttle inter dc stream throughput in addition +# to throttling all network stream traffic as configured with +# stream_throughput_outbound_megabits_per_sec +# When unset, the default is 200 Mbps or 25 MB/s +# inter_dc_stream_throughput_outbound_megabits_per_sec: 200 + +# How long the coordinator should wait for read operations to complete +read_request_timeout_in_ms: 5000 +# How long the coordinator should wait for seq or index scans to complete +range_request_timeout_in_ms: 10000 +# How long the coordinator should wait for writes to complete +write_request_timeout_in_ms: 2000 +# How long the coordinator should wait for counter writes to complete +counter_write_request_timeout_in_ms: 5000 +# How long a coordinator should continue to retry a CAS operation +# that contends with other proposals for the same row +cas_contention_timeout_in_ms: 1000 +# How long the coordinator should wait for truncates to complete +# (This can be much longer, because unless auto_snapshot is disabled +# we need to flush first so we can snapshot before removing the data.) +truncate_request_timeout_in_ms: 60000 +# The default timeout for other, miscellaneous operations +request_timeout_in_ms: 10000 + +# How long before a node logs slow queries. Select queries that take longer than +# this timeout to execute, will generate an aggregated log message, so that slow queries +# can be identified. Set this value to zero to disable slow query logging. +slow_query_log_timeout_in_ms: 500 + +# Enable operation timeout information exchange between nodes to accurately +# measure request timeouts. If disabled, replicas will assume that requests +# were forwarded to them instantly by the coordinator, which means that +# under overload conditions we will waste that much extra time processing +# already-timed-out requests. +# +# Warning: before enabling this property make sure to ntp is installed +# and the times are synchronized between the nodes. +cross_node_timeout: false + +# Set keep-alive period for streaming +# This node will send a keep-alive message periodically with this period. +# If the node does not receive a keep-alive message from the peer for +# 2 keep-alive cycles the stream session times out and fail +# Default value is 300s (5 minutes), which means stalled stream +# times out in 10 minutes by default +# streaming_keep_alive_period_in_secs: 300 + +# phi value that must be reached for a host to be marked down. +# most users should never need to adjust this. +# phi_convict_threshold: 8 + +# endpoint_snitch -- Set this to a class that implements +# IEndpointSnitch. The snitch has two functions: +# +# - it teaches Cassandra enough about your network topology to route +# requests efficiently +# - it allows Cassandra to spread replicas around your cluster to avoid +# correlated failures. It does this by grouping machines into +# "datacenters" and "racks." Cassandra will do its best not to have +# more than one replica on the same "rack" (which may not actually +# be a physical location) +# +# CASSANDRA WILL NOT ALLOW YOU TO SWITCH TO AN INCOMPATIBLE SNITCH +# ONCE DATA IS INSERTED INTO THE CLUSTER. This would cause data loss. +# This means that if you start with the default SimpleSnitch, which +# locates every node on "rack1" in "datacenter1", your only options +# if you need to add another datacenter are GossipingPropertyFileSnitch +# (and the older PFS). From there, if you want to migrate to an +# incompatible snitch like Ec2Snitch you can do it by adding new nodes +# under Ec2Snitch (which will locate them in a new "datacenter") and +# decommissioning the old ones. +# +# Out of the box, Cassandra provides: +# +# SimpleSnitch: +# Treats Strategy order as proximity. This can improve cache +# locality when disabling read repair. Only appropriate for +# single-datacenter deployments. +# +# GossipingPropertyFileSnitch +# This should be your go-to snitch for production use. The rack +# and datacenter for the local node are defined in +# cassandra-rackdc.properties and propagated to other nodes via +# gossip. If cassandra-topology.properties exists, it is used as a +# fallback, allowing migration from the PropertyFileSnitch. +# +# PropertyFileSnitch: +# Proximity is determined by rack and data center, which are +# explicitly configured in cassandra-topology.properties. +# +# Ec2Snitch: +# Appropriate for EC2 deployments in a single Region. Loads Region +# and Availability Zone information from the EC2 API. The Region is +# treated as the datacenter, and the Availability Zone as the rack. +# Only private IPs are used, so this will not work across multiple +# Regions. +# +# Ec2MultiRegionSnitch: +# Uses public IPs as broadcast_address to allow cross-region +# connectivity. (Thus, you should set seed addresses to the public +# IP as well.) You will need to open the storage_port or +# ssl_storage_port on the public IP firewall. (For intra-Region +# traffic, Cassandra will switch to the private IP after +# establishing a connection.) +# +# RackInferringSnitch: +# Proximity is determined by rack and data center, which are +# assumed to correspond to the 3rd and 2nd octet of each node's IP +# address, respectively. Unless this happens to match your +# deployment conventions, this is best used as an example of +# writing a custom Snitch class and is provided in that spirit. +# +# You can use a custom Snitch by setting this to the full class name +# of the snitch, which will be assumed to be on your classpath. +endpoint_snitch: SimpleSnitch + +# controls how often to perform the more expensive part of host score +# calculation +dynamic_snitch_update_interval_in_ms: 100 +# controls how often to reset all host scores, allowing a bad host to +# possibly recover +dynamic_snitch_reset_interval_in_ms: 600000 +# if set greater than zero and read_repair_chance is < 1.0, this will allow +# 'pinning' of replicas to hosts in order to increase cache capacity. +# The badness threshold will control how much worse the pinned host has to be +# before the dynamic snitch will prefer other replicas over it. This is +# expressed as a double which represents a percentage. Thus, a value of +# 0.2 means Cassandra would continue to prefer the static snitch values +# until the pinned host was 20% worse than the fastest. +dynamic_snitch_badness_threshold: 0.1 + +# request_scheduler -- Set this to a class that implements +# RequestScheduler, which will schedule incoming client requests +# according to the specific policy. This is useful for multi-tenancy +# with a single Cassandra cluster. +# NOTE: This is specifically for requests from the client and does +# not affect inter node communication. +# org.apache.cassandra.scheduler.NoScheduler - No scheduling takes place +# org.apache.cassandra.scheduler.RoundRobinScheduler - Round robin of +# client requests to a node with a separate queue for each +# request_scheduler_id. The scheduler is further customized by +# request_scheduler_options as described below. +request_scheduler: org.apache.cassandra.scheduler.NoScheduler + +# Scheduler Options vary based on the type of scheduler +# +# NoScheduler +# Has no options +# +# RoundRobin +# throttle_limit +# The throttle_limit is the number of in-flight +# requests per client. Requests beyond +# that limit are queued up until +# running requests can complete. +# The value of 80 here is twice the number of +# concurrent_reads + concurrent_writes. +# default_weight +# default_weight is optional and allows for +# overriding the default which is 1. +# weights +# Weights are optional and will default to 1 or the +# overridden default_weight. The weight translates into how +# many requests are handled during each turn of the +# RoundRobin, based on the scheduler id. +# +# request_scheduler_options: +# throttle_limit: 80 +# default_weight: 5 +# weights: +# Keyspace1: 1 +# Keyspace2: 5 + +# request_scheduler_id -- An identifier based on which to perform +# the request scheduling. Currently the only valid option is keyspace. +# request_scheduler_id: keyspace + +# Enable or disable inter-node encryption +# JVM defaults for supported SSL socket protocols and cipher suites can +# be replaced using custom encryption options. This is not recommended +# unless you have policies in place that dictate certain settings, or +# need to disable vulnerable ciphers or protocols in case the JVM cannot +# be updated. +# FIPS compliant settings can be configured at JVM level and should not +# involve changing encryption settings here: +# https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/FIPS.html +# *NOTE* No custom encryption options are enabled at the moment +# The available internode options are : all, none, dc, rack +# +# If set to dc cassandra will encrypt the traffic between the DCs +# If set to rack cassandra will encrypt the traffic between the racks +# +# The passwords used in these options must match the passwords used when generating +# the keystore and truststore. For instructions on generating these files, see: +# http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore +# +server_encryption_options: + internode_encryption: none + keystore: conf/.keystore + keystore_password: cassandra + truststore: conf/.truststore + truststore_password: cassandra + # More advanced defaults below: + # protocol: TLS + # algorithm: SunX509 + # store_type: JKS + # cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA] + # require_client_auth: false + # require_endpoint_verification: false + +# enable or disable client/server encryption. +client_encryption_options: + enabled: false + # If enabled and optional is set to true encrypted and unencrypted connections are handled. + optional: false + keystore: conf/.keystore + keystore_password: cassandra + # require_client_auth: false + # Set trustore and truststore_password if require_client_auth is true + # truststore: conf/.truststore + # truststore_password: cassandra + # More advanced defaults below: + # protocol: TLS + # algorithm: SunX509 + # store_type: JKS + # cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA] + +# internode_compression controls whether traffic between nodes is +# compressed. +# Can be: +# +# all +# all traffic is compressed +# +# dc +# traffic between different datacenters is compressed +# +# none +# nothing is compressed. +internode_compression: dc + +# Enable or disable tcp_nodelay for inter-dc communication. +# Disabling it will result in larger (but fewer) network packets being sent, +# reducing overhead from the TCP protocol itself, at the cost of increasing +# latency if you block for cross-datacenter responses. +inter_dc_tcp_nodelay: false + +# TTL for different trace types used during logging of the repair process. +tracetype_query_ttl: 86400 +tracetype_repair_ttl: 604800 + +# By default, Cassandra logs GC Pauses greater than 200 ms at INFO level +# This threshold can be adjusted to minimize logging if necessary +# gc_log_threshold_in_ms: 200 + +# If unset, all GC Pauses greater than gc_log_threshold_in_ms will log at +# INFO level +# UDFs (user defined functions) are disabled by default. +# As of Cassandra 3.0 there is a sandbox in place that should prevent execution of evil code. +enable_user_defined_functions: false + +# Enables scripted UDFs (JavaScript UDFs). +# Java UDFs are always enabled, if enable_user_defined_functions is true. +# Enable this option to be able to use UDFs with "language javascript" or any custom JSR-223 provider. +# This option has no effect, if enable_user_defined_functions is false. +enable_scripted_user_defined_functions: false + +# Enables materialized view creation on this node. +# Materialized views are considered experimental and are not recommended for production use. +enable_materialized_views: true + +# The default Windows kernel timer and scheduling resolution is 15.6ms for power conservation. +# Lowering this value on Windows can provide much tighter latency and better throughput, however +# some virtualized environments may see a negative performance impact from changing this setting +# below their system default. The sysinternals 'clockres' tool can confirm your system's default +# setting. +windows_timer_interval: 1 + + +# Enables encrypting data at-rest (on disk). Different key providers can be plugged in, but the default reads from +# a JCE-style keystore. A single keystore can hold multiple keys, but the one referenced by +# the "key_alias" is the only key that will be used for encrypt opertaions; previously used keys +# can still (and should!) be in the keystore and will be used on decrypt operations +# (to handle the case of key rotation). +# +# It is strongly recommended to download and install Java Cryptography Extension (JCE) +# Unlimited Strength Jurisdiction Policy Files for your version of the JDK. +# (current link: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) +# +# Currently, only the following file types are supported for transparent data encryption, although +# more are coming in future cassandra releases: commitlog, hints +transparent_data_encryption_options: + enabled: false + chunk_length_kb: 64 + cipher: AES/CBC/PKCS5Padding + key_alias: testing:1 + # CBC IV length for AES needs to be 16 bytes (which is also the default size) + # iv_length: 16 + key_provider: + - class_name: org.apache.cassandra.security.JKSKeyProvider + parameters: + - keystore: conf/.keystore + keystore_password: cassandra + store_type: JCEKS + key_password: cassandra + + +##################### +# SAFETY THRESHOLDS # +##################### + +# When executing a scan, within or across a partition, we need to keep the +# tombstones seen in memory so we can return them to the coordinator, which +# will use them to make sure other replicas also know about the deleted rows. +# With workloads that generate a lot of tombstones, this can cause performance +# problems and even exaust the server heap. +# (http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets) +# Adjust the thresholds here if you understand the dangers and want to +# scan more tombstones anyway. These thresholds may also be adjusted at runtime +# using the StorageService mbean. +tombstone_warn_threshold: 1000 +tombstone_failure_threshold: 100000 + +# Log WARN on any multiple-partition batch size exceeding this value. 5kb per batch by default. +# Caution should be taken on increasing the size of this threshold as it can lead to node instability. +batch_size_warn_threshold_in_kb: 5 + +# Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. +batch_size_fail_threshold_in_kb: 50 + +# Log WARN on any batches not of type LOGGED than span across more partitions than this limit +unlogged_batch_across_partitions_warn_threshold: 10 + +# Log a warning when compacting partitions larger than this value +compaction_large_partition_warning_threshold_mb: 100 + +# GC Pauses greater than gc_warn_threshold_in_ms will be logged at WARN level +# Adjust the threshold based on your application throughput requirement +# By default, Cassandra logs GC Pauses greater than 200 ms at INFO level +gc_warn_threshold_in_ms: 1000 + +# Maximum size of any value in SSTables. Safety measure to detect SSTable corruption +# early. Any value size larger than this threshold will result into marking an SSTable +# as corrupted. This should be positive and less than 2048. +# max_value_size_in_mb: 256 + +# Back-pressure settings # +# If enabled, the coordinator will apply the back-pressure strategy specified below to each mutation +# sent to replicas, with the aim of reducing pressure on overloaded replicas. +back_pressure_enabled: false +# The back-pressure strategy applied. +# The default implementation, RateBasedBackPressure, takes three arguments: +# high ratio, factor, and flow type, and uses the ratio between incoming mutation responses and outgoing mutation requests. +# If below high ratio, outgoing mutations are rate limited according to the incoming rate decreased by the given factor; +# if above high ratio, the rate limiting is increased by the given factor; +# such factor is usually best configured between 1 and 10, use larger values for a faster recovery +# at the expense of potentially more dropped mutations; +# the rate limiting is applied according to the flow type: if FAST, it's rate limited at the speed of the fastest replica, +# if SLOW at the speed of the slowest one. +# New strategies can be added. Implementors need to implement org.apache.cassandra.net.BackpressureStrategy and +# provide a public constructor accepting a Map. +back_pressure_strategy: + - class_name: org.apache.cassandra.net.RateBasedBackPressure + parameters: + - high_ratio: 0.90 + factor: 5 + flow: FAST + +# Coalescing Strategies # +# Coalescing multiples messages turns out to significantly boost message processing throughput (think doubling or more). +# On bare metal, the floor for packet processing throughput is high enough that many applications won't notice, but in +# virtualized environments, the point at which an application can be bound by network packet processing can be +# surprisingly low compared to the throughput of task processing that is possible inside a VM. It's not that bare metal +# doesn't benefit from coalescing messages, it's that the number of packets a bare metal network interface can process +# is sufficient for many applications such that no load starvation is experienced even without coalescing. +# There are other benefits to coalescing network messages that are harder to isolate with a simple metric like messages +# per second. By coalescing multiple tasks together, a network thread can process multiple messages for the cost of one +# trip to read from a socket, and all the task submission work can be done at the same time reducing context switching +# and increasing cache friendliness of network message processing. +# See CASSANDRA-8692 for details. + +# Strategy to use for coalescing messages in OutboundTcpConnection. +# Can be fixed, movingaverage, timehorizon, disabled (default). +# You can also specify a subclass of CoalescingStrategies.CoalescingStrategy by name. +# otc_coalescing_strategy: DISABLED + +# How many microseconds to wait for coalescing. For fixed strategy this is the amount of time after the first +# message is received before it will be sent with any accompanying messages. For moving average this is the +# maximum amount of time that will be waited as well as the interval at which messages must arrive on average +# for coalescing to be enabled. +# otc_coalescing_window_us: 200 + +# Do not try to coalesce messages if we already got that many messages. This should be more than 2 and less than 128. +# otc_coalescing_enough_coalesced_messages: 8 + +# How many milliseconds to wait between two expiration runs on the backlog (queue) of the OutboundTcpConnection. +# Expiration is done if messages are piling up in the backlog. Droppable messages are expired to free the memory +# taken by expired messages. The interval should be between 0 and 1000, and in most installations the default value +# will be appropriate. A smaller value could potentially expire messages slightly sooner at the expense of more CPU +# time and queue contention while iterating the backlog of messages. +# An interval of 0 disables any wait time, which is the behavior of former Cassandra versions. +# +# otc_backlog_expiration_interval_ms: 200 diff --git a/capten/common-pkg/db-migration/cassandra/tests/migrations/cassandra/001_add_tab.down.cql b/capten/common-pkg/cassandra/db-migrate/tests/migrations/cassandra/001_add_tab.down.cql similarity index 100% rename from capten/common-pkg/db-migration/cassandra/tests/migrations/cassandra/001_add_tab.down.cql rename to capten/common-pkg/cassandra/db-migrate/tests/migrations/cassandra/001_add_tab.down.cql diff --git a/capten/common-pkg/db-migration/cassandra/tests/migrations/cassandra/001_add_tab.up.cql b/capten/common-pkg/cassandra/db-migrate/tests/migrations/cassandra/001_add_tab.up.cql similarity index 100% rename from capten/common-pkg/db-migration/cassandra/tests/migrations/cassandra/001_add_tab.up.cql rename to capten/common-pkg/cassandra/db-migrate/tests/migrations/cassandra/001_add_tab.up.cql diff --git a/capten/common-pkg/credential/client.go b/capten/common-pkg/credential/client.go new file mode 100644 index 00000000..15c84373 --- /dev/null +++ b/capten/common-pkg/credential/client.go @@ -0,0 +1,111 @@ +package credential + +import ( + "context" + "fmt" + + "github.com/intelops/go-common/credentials" + "github.com/pkg/errors" +) + +const ( + clusterCertEntity = "client-cert" +) + +func GetServiceUserCredential(ctx context.Context, svcEntity, userName string) (cred credentials.ServiceCredential, err error) { + credReader, err := credentials.NewCredentialReader(ctx) + if err != nil { + err = errors.WithMessage(err, "error in initializing credential reader") + return + } + + cred, err = credReader.GetServiceUserCredential(context.Background(), svcEntity, userName) + if err != nil { + err = errors.WithMessagef(err, "error in reading credential for %s/%s", svcEntity, userName) + } + return +} + +func GetClusterCerts(ctx context.Context, orgID, clusterName string) (cred credentials.CertificateData, err error) { + credReader, err := credentials.NewCredentialReader(ctx) + if err != nil { + err = errors.WithMessage(err, "error in initializing credential reader") + return + } + + certIndetifier := getClusterCertIndentifier(orgID, clusterName) + cred, err = credReader.GetCertificateData(context.Background(), clusterCertEntity, certIndetifier) + if err != nil { + err = errors.WithMessagef(err, "error in reading cert for %s/%s", clusterCertEntity, certIndetifier) + } + return +} + +func GetGenericCredential(ctx context.Context, entityName, credIndentifer string) (cred map[string]string, err error) { + credReader, err := credentials.NewCredentialReader(ctx) + if err != nil { + err = errors.WithMessage(err, "error in initializing credential reader") + return + } + + cred, err = credReader.GetCredential(context.Background(), credentials.GenericCredentialType, entityName, credIndentifer) + if err != nil { + err = errors.WithMessagef(err, "error in reading cred for %s/%s", clusterCertEntity, credIndentifer) + } + return +} + +func PutServiceUserCredential(ctx context.Context, svcEntity, userIdentifer, userName, password string) error { + credAdmin, err := credentials.NewCredentialAdmin(ctx) + if err != nil { + return errors.WithMessage(err, "error in initializing credential admin") + } + + err = credAdmin.PutServiceUserCredential(context.Background(), svcEntity, userIdentifer, + credentials.ServiceCredential{ + UserName: userName, + Password: password, + }) + if err != nil { + return errors.WithMessagef(err, "error in put service cred for %s/%s", svcEntity, userIdentifer) + } + return nil +} + +func PutClusterCerts(ctx context.Context, orgID, clusterName, clientCAChainData, clientKeyData, clientCertData string) error { + credAdmin, err := credentials.NewCredentialAdmin(ctx) + if err != nil { + return errors.WithMessage(err, "error in initializing credential admin") + } + + certIndetifier := getClusterCertIndentifier(orgID, clusterName) + err = credAdmin.PutCertificateData(context.Background(), clusterCertEntity, certIndetifier, + credentials.CertificateData{ + CACert: clientCAChainData, + Key: clientKeyData, + Cert: clientCertData, + }) + if err != nil { + return errors.WithMessagef(err, "error in put cert for %s/%s", clusterCertEntity, certIndetifier) + } + return nil +} + +func DeleteClusterCerts(ctx context.Context, orgID, clusterName string) (err error) { + credReader, err := credentials.NewCredentialAdmin(ctx) + if err != nil { + err = errors.WithMessage(err, "error in initializing credential admin") + return + } + + certIndetifier := getClusterCertIndentifier(orgID, clusterName) + err = credReader.DeleteCertificateData(context.Background(), clusterCertEntity, certIndetifier) + if err != nil { + err = errors.WithMessagef(err, "error in delete cert for %s/%s", clusterCertEntity, certIndetifier) + } + return +} + +func getClusterCertIndentifier(orgID, clusterName string) string { + return fmt.Sprintf("%s:%s", orgID, clusterName) +} diff --git a/capten/common-pkg/db-create/cassandra/README.md b/capten/common-pkg/db-create/cassandra/README.md deleted file mode 100644 index 45f754f8..00000000 --- a/capten/common-pkg/db-create/cassandra/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -cqlsh -u cassandra -p cassandra -LIST USERS; diff --git a/capten/common-pkg/db-create/cassandra/db_config.go b/capten/common-pkg/db-create/cassandra/db_config.go deleted file mode 100644 index 05f8c1ce..00000000 --- a/capten/common-pkg/db-create/cassandra/db_config.go +++ /dev/null @@ -1,25 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import "github.com/gocql/gocql" - -type DBConfig struct { - DbAddresses []string `envconfig:"DB_ADDRESSES" required:"true"` - DbAdminUsername string `envconfig:"DB_ADMIN_USERNAME"` - DbReplicationFactor string `envconfig:"DB_REPLICATION_FACTOR" required:"true" default:"1"` - DbAdminPassword string `envconfig:"DB_ADMIN_PASSWD"` - - DbName string `envconfig:"DB_NAME" required:"true"` - DbServiceUsername string `envconfig:"DB_SERVICE_USERNAME" required:"true"` - DbServicePassword string `envconfig:"DB_SERVICE_PASSWD"` -} - -type Store interface { - Connect(dbAddrs []string, dbAdminUsername string, dbAdminPassword string) (err error) - Session() *gocql.Session - Close() - CreateDbUser(serviceUsername string, servicePassword string) (err error) - GrantPermission(serviceUsername string, dbName string) (err error) - CreateDb(dbName string, replicationFactor string) (err error) - CreateLockSchemaDb(replicationFactor string) (err error) -} diff --git a/capten/common-pkg/db-create/cassandra/db_configurator.go b/capten/common-pkg/db-create/cassandra/db_configurator.go deleted file mode 100644 index f1319bec..00000000 --- a/capten/common-pkg/db-create/cassandra/db_configurator.go +++ /dev/null @@ -1,58 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import ( - "github.com/intelops/go-common/logging" -) - -type DbConfigurator struct { - logg logging.Logger - store Store -} - -func NewDbConfigurator(logger logging.Logger, stor Store) (handler *DbConfigurator) { - handler = &DbConfigurator{ - logg: logger, - store: stor, - } - - return -} - -func (dbConf *DbConfigurator) ConfigureDb(conf DBConfig) (err error) { - dbConf.logg.Debug("Creating new db cluster configuration") - err = dbConf.store.Connect(conf.DbAddresses, conf.DbAdminUsername, conf.DbAdminPassword) - if err != nil { - return - } - - dbConf.logg.Info("Creating lock schema change db") - err = dbConf.store.CreateLockSchemaDb(conf.DbReplicationFactor) - if err != nil { - return - } - - dbConf.logg.Infof("Creating new db %s with %s", conf.DbName, conf.DbReplicationFactor) - err = dbConf.store.CreateDb(conf.DbName, conf.DbReplicationFactor) - if err != nil { - return - } - - dbConf.logg.Info("Creating new service users") - err = dbConf.store.CreateDbUser(conf.DbServiceUsername, conf.DbServicePassword) - if err != nil { - return - } - - // store the password in vault - - dbConf.logg.Info("Grant permission to service user") - err = dbConf.store.GrantPermission(conf.DbServiceUsername, conf.DbName) - if err != nil { - return - } - - dbConf.store.Close() - - return -} diff --git a/capten/common-pkg/db-create/cassandra/db_creation.go b/capten/common-pkg/db-create/cassandra/db_creation.go deleted file mode 100644 index cdb4a1df..00000000 --- a/capten/common-pkg/db-create/cassandra/db_creation.go +++ /dev/null @@ -1,24 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import ( - "github.com/intelops/go-common/logging" - "github.com/kelseyhightower/envconfig" - "github.com/pkg/errors" -) - -func Create(log logging.Logger) error { - dbconf := &DBConfig{} - if err := envconfig.Process("", dbconf); err != nil { - return errors.WithMessage(err, "could not parse DB config") - } - dbStore := NewCassandraStore(log, nil) - dbConfigurator := NewDbConfigurator(log, dbStore) - log.Info("Start DB configuration") - err := dbConfigurator.ConfigureDb(*dbconf) - if err != nil { - log.Errorf("Could not configure db properly err: %s", err) - return err - } - return nil -} diff --git a/capten/common-pkg/db-migration/cassandra/README.md b/capten/common-pkg/db-migration/cassandra/README.md deleted file mode 100644 index 529db131..00000000 --- a/capten/common-pkg/db-migration/cassandra/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Cassandra migration package - -This package helps to apply schema changes via a wrapper written on top migration package. - -The tests under this covers both db-create and db-migrate of Cassandra. diff --git a/capten/common-pkg/db-migration/cassandra/cassandra_migration.go b/capten/common-pkg/db-migration/cassandra/cassandra_migration.go deleted file mode 100644 index c28fb5e6..00000000 --- a/capten/common-pkg/db-migration/cassandra/cassandra_migration.go +++ /dev/null @@ -1,72 +0,0 @@ -// Package migrate contains ... -package cassandra - -import ( - "fmt" - "net/url" - - _ "github.com/golang-migrate/migrate/v4/source/file" - "github.com/intelops/go-common/logging" - "github.com/kelseyhightower/envconfig" - dbmigration "github.com/kube-tarian/kad/capten/common-pkg/db-migration" -) - -var log = logging.NewLogger() - -type DBConfig struct { - DbDsn string `envconfig:"DB_ADDRESSES" required:"true" default:"localhost:9042"` - DbName string `envconfig:"DB_NAME" required:"true"` // keyspace - Username string `envconfig:"DB_SERVICE_USERNAME" required:"true"` - Password string `envconfig:"DB_SERVICE_PASSWD"` - Consistency string `envconfig:"CASSANDRA_CONSISTENCY" default:"ALL"` - SourceURI string `envconfig:"SOURCE_URI" default:"file:///migrations"` -} - -type CassandraMigrate struct { - conf *DBConfig - log logging.Logger - sourceURI string - dbConnectionString string -} - -func NewCassandraMigrate(log logging.Logger) (*CassandraMigrate, error) { - config := &DBConfig{} - if err := envconfig.Process("", config); err != nil { - log.Errorf("Input adminDSN argument or Environment variables are not provided: %v", err) - return nil, err - } - - dbConnectionString, err := getDbConnectionURLFromDbType(config) - if err != nil { - log.Errorf("Not able form the DB connection Url: %v", err) - return nil, err - } - - return &CassandraMigrate{ - conf: config, - log: log, - sourceURI: config.SourceURI, - dbConnectionString: dbConnectionString, - }, nil -} - -func (c *CassandraMigrate) Run(whichDb string, mode dbmigration.Mode) error { - if err := dbmigration.RunMigrations(c.sourceURI, c.dbConnectionString, whichDb, dbmigration.UP); err != nil { - log.Errorf("Error string: %s\nError: %+v", err.Error(), err) - return err - } - log.Info("Migrations applied successfully") - return nil -} - -func getDbConnectionURLFromDbType(config *DBConfig) (dbConnectionURL string, err error) { - passwd := url.QueryEscape(config.Password) - if config.Consistency == "" { - err = fmt.Errorf("Cassandra consistency is not provided") - return - } - dbConnectionURL = fmt.Sprintf("cassandra://%s/%s?username=%s&password=%s&consistency=%s", - config.DbDsn, config.DbName, config.Username, passwd, config.Consistency) - - return -} diff --git a/capten/common-pkg/db-migration/cassandra/cassandra_test.go b/capten/common-pkg/db-migration/cassandra/cassandra_test.go deleted file mode 100644 index 7a2733ae..00000000 --- a/capten/common-pkg/db-migration/cassandra/cassandra_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package cassandra - -// import ( -// "context" -// "fmt" -// "github.com/golang-migrate/migrate/v4" -// "strconv" -// "testing" -// ) - -// import ( -// "github.com/dhui/dktest" -// "github.com/gocql/gocql" -// ) - -// import ( -// dt "github.com/golang-migrate/migrate/v4/database/testing" -// "github.com/golang-migrate/migrate/v4/dktesting" -// _ "github.com/golang-migrate/migrate/v4/source/file" -// ) - -// var ( -// opts = dktest.Options{PortRequired: true, ReadyFunc: isReady} -// // Supported versions: http://cassandra.apache.org/download/ -// // Although Cassandra 2.x is supported by the Apache Foundation, -// // the migrate db driver only supports Cassandra 3.x since it uses -// // the system_schema keyspace. -// specs = []dktesting.ContainerSpec{ -// {ImageName: "cassandra:3.0", Options: opts}, -// {ImageName: "cassandra:3.11", Options: opts}, -// } -// ) - -// func isReady(ctx context.Context, c dktest.ContainerInfo) bool { -// // Cassandra exposes 5 ports (7000, 7001, 7199, 9042 & 9160) -// // We only need the port bound to 9042 -// ip, portStr, err := c.Port(9042) -// if err != nil { -// return false -// } -// port, err := strconv.Atoi(portStr) -// if err != nil { -// return false -// } - -// cluster := gocql.NewCluster(ip) -// cluster.Port = port -// cluster.Consistency = gocql.All -// p, err := cluster.CreateSession() -// if err != nil { -// return false -// } -// defer p.Close() -// // Create keyspace for tests -// if err = p.Query("CREATE KEYSPACE testks WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor':1}").Exec(); err != nil { -// return false -// } -// return true -// } - -// func Test(t *testing.T) { -// dktesting.ParallelTest(t, specs, func(t *testing.T, c dktest.ContainerInfo) { -// ip, port, err := c.Port(9042) -// if err != nil { -// t.Fatal("Unable to get mapped port:", err) -// } -// addr := fmt.Sprintf("cassandra://%v:%v/testks", ip, port) -// p := &Cassandra{} -// d, err := p.Open(addr) -// if err != nil { -// t.Fatal(err) -// } -// defer func() { -// if err := d.Close(); err != nil { -// t.Error(err) -// } -// }() -// dt.Test(t, d, []byte("SELECT table_name from system_schema.tables")) -// }) -// } - -// func TestMigrate(t *testing.T) { -// dktesting.ParallelTest(t, specs, func(t *testing.T, c dktest.ContainerInfo) { -// ip, port, err := c.Port(9042) -// if err != nil { -// t.Fatal("Unable to get mapped port:", err) -// } -// addr := fmt.Sprintf("cassandra://%v:%v/testks", ip, port) -// p := &Cassandra{} -// d, err := p.Open(addr) -// if err != nil { -// t.Fatal(err) -// } -// defer func() { -// if err := d.Close(); err != nil { -// t.Error(err) -// } -// }() - -// m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "testks", d) -// if err != nil { -// t.Fatal(err) -// } -// dt.TestMigrate(t, m) -// }) -// } diff --git a/capten/go.mod b/capten/go.mod index 82316bce..306e76f6 100644 --- a/capten/go.mod +++ b/capten/go.mod @@ -7,7 +7,6 @@ require ( github.com/getkin/kin-openapi v0.107.0 github.com/go-chi/chi/v5 v5.0.7 github.com/gocql/gocql v1.3.1 - github.com/gogo/status v1.1.1 github.com/golang-migrate/migrate/v4 v4.15.2 github.com/golang/protobuf v1.5.3 github.com/google/uuid v1.3.0 @@ -92,6 +91,7 @@ require ( github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/gogo/status v1.1.1 // indirect github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect diff --git a/charts/kad/templates/agent-deployment.yaml b/charts/kad/templates/agent-deployment.yaml index 7d6d164d..775a97c1 100644 --- a/charts/kad/templates/agent-deployment.yaml +++ b/charts/kad/templates/agent-deployment.yaml @@ -49,6 +49,10 @@ spec: # path: /status # port: http env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace - name: LOG_LEVEL value: {{ .Values.env.logLevel }} - name: TEMPORAL_SERVICE_URL @@ -67,6 +71,8 @@ spec: value: {{ .Values.cassandra.entityName }} - name: DB_NAME value: {{ .Values.cassandra.keyspace }} + - name: CASSANDRA_SECRET_NAME + value: {{ .Values.cassandra.secretName }} resources: {{- toYaml .Values.resources | nindent 12 }} {{- with .Values.nodeSelector }} diff --git a/charts/kad/values.yaml b/charts/kad/values.yaml index 9f279999..2812a304 100644 --- a/charts/kad/values.yaml +++ b/charts/kad/values.yaml @@ -50,6 +50,7 @@ cassandra: userName: kadagent entityName: cassandra keyspace: capten + secretName: temporal-superuser ingressroute: enabled: true diff --git a/dockerfiles/agent/Dockerfile b/dockerfiles/agent/Dockerfile index 26446f53..44f659f5 100644 --- a/dockerfiles/agent/Dockerfile +++ b/dockerfiles/agent/Dockerfile @@ -8,6 +8,7 @@ RUN CGO_ENABLED=0 go build -o ./build/agent agent/cmd/agent/main.go FROM scratch COPY --from=builder ./build/agent agent +COPY ./capten/cassandra/ cassandra/ USER 65532:65532 ENTRYPOINT ["./agent"] From 8dd82480b902c8c9db2f3ebbef51f1d30161001c Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Tue, 8 Aug 2023 20:50:13 +0530 Subject: [PATCH 29/31] remove sync workflow and db usage in climon --- capten/agent/pkg/agent/agent_syncdata.go | 31 - capten/agent/pkg/agentpb/agent.pb.go | 983 ++++++++---------- capten/agent/pkg/agentpb/agent_grpc.pb.go | 37 - capten/capten-sdk/agentpb/agent.pb.go | 983 ++++++++---------- capten/capten-sdk/agentpb/agent_grpc.pb.go | 37 - capten/climon/Dockerfile | 0 capten/climon/integration_tests/setup_test.go | 8 +- capten/climon/main.go | 17 +- capten/climon/pkg/activities/activity.go | 52 - capten/climon/pkg/application/application.go | 7 +- capten/climon/pkg/db/cassandra/README.md | 0 capten/climon/pkg/db/cassandra/cassandra.yaml | 2 - .../pkg/db/cassandra/cassandra_store.go | 230 ---- capten/climon/pkg/db/cassandra/db_config.go | 28 - .../pkg/db/cassandra/db_configurator.go | 35 - capten/climon/pkg/db/cassandra/db_creation.go | 39 - capten/climon/pkg/db/db.go | 73 -- capten/climon/pkg/temporal/client.go | 59 -- capten/climon/pkg/temporal/syncworker.go | 83 -- capten/climon/pkg/temporal/worker.go | 58 -- capten/climon/pkg/types/type.go | 13 - proto/agent.proto | 11 - server/pkg/handler/handle_agent.go | 33 +- server/pkg/pb/agentpb/agent.pb.go | 983 ++++++++---------- server/pkg/pb/agentpb/agent_grpc.pb.go | 37 - 25 files changed, 1256 insertions(+), 2583 deletions(-) delete mode 100644 capten/agent/pkg/agent/agent_syncdata.go delete mode 100644 capten/climon/Dockerfile delete mode 100644 capten/climon/pkg/db/cassandra/README.md delete mode 100644 capten/climon/pkg/db/cassandra/cassandra.yaml delete mode 100644 capten/climon/pkg/db/cassandra/cassandra_store.go delete mode 100644 capten/climon/pkg/db/cassandra/db_config.go delete mode 100644 capten/climon/pkg/db/cassandra/db_configurator.go delete mode 100644 capten/climon/pkg/db/cassandra/db_creation.go delete mode 100644 capten/climon/pkg/db/db.go delete mode 100644 capten/climon/pkg/temporal/client.go delete mode 100644 capten/climon/pkg/temporal/syncworker.go delete mode 100644 capten/climon/pkg/temporal/worker.go delete mode 100644 capten/climon/pkg/types/type.go diff --git a/capten/agent/pkg/agent/agent_syncdata.go b/capten/agent/pkg/agent/agent_syncdata.go deleted file mode 100644 index 18b66499..00000000 --- a/capten/agent/pkg/agent/agent_syncdata.go +++ /dev/null @@ -1,31 +0,0 @@ -package agent - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/kube-tarian/kad/capten/agent/pkg/agentpb" - "github.com/kube-tarian/kad/capten/agent/pkg/workers" -) - -func (a *Agent) Sync(ctx context.Context, request *agentpb.SyncRequest) (*agentpb.SyncResponse, error) { - fmt.Printf("%+v", request) - var syncDataRequest workers.SyncDataRequest - if err := json.Unmarshal([]byte(request.Data), &syncDataRequest); err != nil { - return nil, err - } - - syncDataRequest.Type = request.Type - fmt.Printf("%+v", syncDataRequest) - syncWorker := workers.NewSync(a.tc) - _, err := syncWorker.SendEvent(context.Background(), syncDataRequest) - if err != nil { - return nil, err - } - - return &agentpb.SyncResponse{ - Status: "Success", - Message: "success", - }, nil -} diff --git a/capten/agent/pkg/agentpb/agent.pb.go b/capten/agent/pkg/agentpb/agent.pb.go index f4f46ac9..9e886f67 100644 --- a/capten/agent/pkg/agentpb/agent.pb.go +++ b/capten/agent/pkg/agentpb/agent.pb.go @@ -284,116 +284,6 @@ func (x *StoreCredentialResponse) GetStatusMessage() string { return "" } -type SyncRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Data string `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *SyncRequest) Reset() { - *x = SyncRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncRequest) ProtoMessage() {} - -func (x *SyncRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[4] - 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 SyncRequest.ProtoReflect.Descriptor instead. -func (*SyncRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{4} -} - -func (x *SyncRequest) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *SyncRequest) GetData() string { - if x != nil { - return x.Data - } - return "" -} - -type SyncResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *SyncResponse) Reset() { - *x = SyncResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncResponse) ProtoMessage() {} - -func (x *SyncResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[5] - 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 SyncResponse.ProtoReflect.Descriptor instead. -func (*SyncResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{5} -} - -func (x *SyncResponse) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *SyncResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - type ClimonInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -413,7 +303,7 @@ type ClimonInstallRequest struct { func (x *ClimonInstallRequest) Reset() { *x = ClimonInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +316,7 @@ func (x *ClimonInstallRequest) String() string { func (*ClimonInstallRequest) ProtoMessage() {} func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +329,7 @@ func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonInstallRequest.ProtoReflect.Descriptor instead. func (*ClimonInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{6} + return file_agent_proto_rawDescGZIP(), []int{4} } func (x *ClimonInstallRequest) GetPluginName() string { @@ -520,7 +410,7 @@ type ClimonDeleteRequest struct { func (x *ClimonDeleteRequest) Reset() { *x = ClimonDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -533,7 +423,7 @@ func (x *ClimonDeleteRequest) String() string { func (*ClimonDeleteRequest) ProtoMessage() {} func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -546,7 +436,7 @@ func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonDeleteRequest.ProtoReflect.Descriptor instead. func (*ClimonDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{7} + return file_agent_proto_rawDescGZIP(), []int{5} } func (x *ClimonDeleteRequest) GetPluginName() string { @@ -603,7 +493,7 @@ type ApplicationInstallRequest struct { func (x *ApplicationInstallRequest) Reset() { *x = ApplicationInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +506,7 @@ func (x *ApplicationInstallRequest) String() string { func (*ApplicationInstallRequest) ProtoMessage() {} func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +519,7 @@ func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationInstallRequest.ProtoReflect.Descriptor instead. func (*ApplicationInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{8} + return file_agent_proto_rawDescGZIP(), []int{6} } func (x *ApplicationInstallRequest) GetPluginName() string { @@ -710,7 +600,7 @@ type ApplicationDeleteRequest struct { func (x *ApplicationDeleteRequest) Reset() { *x = ApplicationDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -723,7 +613,7 @@ func (x *ApplicationDeleteRequest) String() string { func (*ApplicationDeleteRequest) ProtoMessage() {} func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -736,7 +626,7 @@ func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationDeleteRequest.ProtoReflect.Descriptor instead. func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{9} + return file_agent_proto_rawDescGZIP(), []int{7} } func (x *ApplicationDeleteRequest) GetPluginName() string { @@ -786,7 +676,7 @@ type ClusterRequest struct { func (x *ClusterRequest) Reset() { *x = ClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -799,7 +689,7 @@ func (x *ClusterRequest) String() string { func (*ClusterRequest) ProtoMessage() {} func (x *ClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -812,7 +702,7 @@ func (x *ClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterRequest.ProtoReflect.Descriptor instead. func (*ClusterRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{10} + return file_agent_proto_rawDescGZIP(), []int{8} } func (x *ClusterRequest) GetPluginName() string { @@ -842,7 +732,7 @@ type RepositoryAddRequest struct { func (x *RepositoryAddRequest) Reset() { *x = RepositoryAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -855,7 +745,7 @@ func (x *RepositoryAddRequest) String() string { func (*RepositoryAddRequest) ProtoMessage() {} func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -868,7 +758,7 @@ func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryAddRequest.ProtoReflect.Descriptor instead. func (*RepositoryAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{11} + return file_agent_proto_rawDescGZIP(), []int{9} } func (x *RepositoryAddRequest) GetPluginName() string { @@ -904,7 +794,7 @@ type RepositoryDeleteRequest struct { func (x *RepositoryDeleteRequest) Reset() { *x = RepositoryDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -917,7 +807,7 @@ func (x *RepositoryDeleteRequest) String() string { func (*RepositoryDeleteRequest) ProtoMessage() {} func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -930,7 +820,7 @@ func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryDeleteRequest.ProtoReflect.Descriptor instead. func (*RepositoryDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{12} + return file_agent_proto_rawDescGZIP(), []int{10} } func (x *RepositoryDeleteRequest) GetPluginName() string { @@ -959,7 +849,7 @@ type ProjectAddRequest struct { func (x *ProjectAddRequest) Reset() { *x = ProjectAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -972,7 +862,7 @@ func (x *ProjectAddRequest) String() string { func (*ProjectAddRequest) ProtoMessage() {} func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -985,7 +875,7 @@ func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectAddRequest.ProtoReflect.Descriptor instead. func (*ProjectAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{13} + return file_agent_proto_rawDescGZIP(), []int{11} } func (x *ProjectAddRequest) GetPluginName() string { @@ -1014,7 +904,7 @@ type ProjectDeleteRequest struct { func (x *ProjectDeleteRequest) Reset() { *x = ProjectDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1027,7 +917,7 @@ func (x *ProjectDeleteRequest) String() string { func (*ProjectDeleteRequest) ProtoMessage() {} func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,7 +930,7 @@ func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{14} + return file_agent_proto_rawDescGZIP(), []int{12} } func (x *ProjectDeleteRequest) GetPluginName() string { @@ -1069,7 +959,7 @@ type JobRequest struct { func (x *JobRequest) Reset() { *x = JobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +972,7 @@ func (x *JobRequest) String() string { func (*JobRequest) ProtoMessage() {} func (x *JobRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +985,7 @@ func (x *JobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. func (*JobRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{15} + return file_agent_proto_rawDescGZIP(), []int{13} } func (x *JobRequest) GetOperation() string { @@ -1125,7 +1015,7 @@ type JobResponse struct { func (x *JobResponse) Reset() { *x = JobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1138,7 +1028,7 @@ func (x *JobResponse) String() string { func (*JobResponse) ProtoMessage() {} func (x *JobResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1151,7 +1041,7 @@ func (x *JobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. func (*JobResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{16} + return file_agent_proto_rawDescGZIP(), []int{14} } func (x *JobResponse) GetId() string { @@ -1186,7 +1076,7 @@ type SyncAppRequest struct { func (x *SyncAppRequest) Reset() { *x = SyncAppRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1199,7 +1089,7 @@ func (x *SyncAppRequest) String() string { func (*SyncAppRequest) ProtoMessage() {} func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1212,7 +1102,7 @@ func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppRequest.ProtoReflect.Descriptor instead. func (*SyncAppRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{17} + return file_agent_proto_rawDescGZIP(), []int{15} } func (x *SyncAppRequest) GetData() *SyncAppData { @@ -1234,7 +1124,7 @@ type SyncAppResponse struct { func (x *SyncAppResponse) Reset() { *x = SyncAppResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1137,7 @@ func (x *SyncAppResponse) String() string { func (*SyncAppResponse) ProtoMessage() {} func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1150,7 @@ func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppResponse.ProtoReflect.Descriptor instead. func (*SyncAppResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{18} + return file_agent_proto_rawDescGZIP(), []int{16} } func (x *SyncAppResponse) GetStatus() StatusCode { @@ -1286,7 +1176,7 @@ type GetClusterAppsRequest struct { func (x *GetClusterAppsRequest) Reset() { *x = GetClusterAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1189,7 @@ func (x *GetClusterAppsRequest) String() string { func (*GetClusterAppsRequest) ProtoMessage() {} func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,7 +1202,7 @@ func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{19} + return file_agent_proto_rawDescGZIP(), []int{17} } type GetClusterAppsResponse struct { @@ -1328,7 +1218,7 @@ type GetClusterAppsResponse struct { func (x *GetClusterAppsResponse) Reset() { *x = GetClusterAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1341,7 +1231,7 @@ func (x *GetClusterAppsResponse) String() string { func (*GetClusterAppsResponse) ProtoMessage() {} func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1354,7 +1244,7 @@ func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppsResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{20} + return file_agent_proto_rawDescGZIP(), []int{18} } func (x *GetClusterAppsResponse) GetStatus() StatusCode { @@ -1387,7 +1277,7 @@ type GetClusterAppLaunchesRequest struct { func (x *GetClusterAppLaunchesRequest) Reset() { *x = GetClusterAppLaunchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1400,7 +1290,7 @@ func (x *GetClusterAppLaunchesRequest) String() string { func (*GetClusterAppLaunchesRequest) ProtoMessage() {} func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1413,7 +1303,7 @@ func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{21} + return file_agent_proto_rawDescGZIP(), []int{19} } type GetClusterAppLaunchesResponse struct { @@ -1429,7 +1319,7 @@ type GetClusterAppLaunchesResponse struct { func (x *GetClusterAppLaunchesResponse) Reset() { *x = GetClusterAppLaunchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1442,7 +1332,7 @@ func (x *GetClusterAppLaunchesResponse) String() string { func (*GetClusterAppLaunchesResponse) ProtoMessage() {} func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1455,7 +1345,7 @@ func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{22} + return file_agent_proto_rawDescGZIP(), []int{20} } func (x *GetClusterAppLaunchesResponse) GetStatus() StatusCode { @@ -1490,7 +1380,7 @@ type GetClusterAppConfigRequest struct { func (x *GetClusterAppConfigRequest) Reset() { *x = GetClusterAppConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1503,7 +1393,7 @@ func (x *GetClusterAppConfigRequest) String() string { func (*GetClusterAppConfigRequest) ProtoMessage() {} func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1516,7 +1406,7 @@ func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{23} + return file_agent_proto_rawDescGZIP(), []int{21} } func (x *GetClusterAppConfigRequest) GetReleaseName() string { @@ -1539,7 +1429,7 @@ type GetClusterAppConfigResponse struct { func (x *GetClusterAppConfigResponse) Reset() { *x = GetClusterAppConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1552,7 +1442,7 @@ func (x *GetClusterAppConfigResponse) String() string { func (*GetClusterAppConfigResponse) ProtoMessage() {} func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1565,7 +1455,7 @@ func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{24} + return file_agent_proto_rawDescGZIP(), []int{22} } func (x *GetClusterAppConfigResponse) GetStatus() StatusCode { @@ -1600,7 +1490,7 @@ type GetClusterAppValuesRequest struct { func (x *GetClusterAppValuesRequest) Reset() { *x = GetClusterAppValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1613,7 +1503,7 @@ func (x *GetClusterAppValuesRequest) String() string { func (*GetClusterAppValuesRequest) ProtoMessage() {} func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1626,7 +1516,7 @@ func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{25} + return file_agent_proto_rawDescGZIP(), []int{23} } func (x *GetClusterAppValuesRequest) GetReleaseName() string { @@ -1649,7 +1539,7 @@ type GetClusterAppValuesResponse struct { func (x *GetClusterAppValuesResponse) Reset() { *x = GetClusterAppValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1662,7 +1552,7 @@ func (x *GetClusterAppValuesResponse) String() string { func (*GetClusterAppValuesResponse) ProtoMessage() {} func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1675,7 +1565,7 @@ func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{26} + return file_agent_proto_rawDescGZIP(), []int{24} } func (x *GetClusterAppValuesResponse) GetStatus() StatusCode { @@ -1711,7 +1601,7 @@ type SyncAppData struct { func (x *SyncAppData) Reset() { *x = SyncAppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1724,7 +1614,7 @@ func (x *SyncAppData) String() string { func (*SyncAppData) ProtoMessage() {} func (x *SyncAppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1737,7 +1627,7 @@ func (x *SyncAppData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppData.ProtoReflect.Descriptor instead. func (*SyncAppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{27} + return file_agent_proto_rawDescGZIP(), []int{25} } func (x *SyncAppData) GetConfig() *AppConfig { @@ -1766,7 +1656,7 @@ type AppData struct { func (x *AppData) Reset() { *x = AppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1779,7 +1669,7 @@ func (x *AppData) String() string { func (*AppData) ProtoMessage() {} func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1792,7 +1682,7 @@ func (x *AppData) ProtoReflect() protoreflect.Message { // Deprecated: Use AppData.ProtoReflect.Descriptor instead. func (*AppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{28} + return file_agent_proto_rawDescGZIP(), []int{26} } func (x *AppData) GetConfig() *AppConfig { @@ -1820,7 +1710,7 @@ type AppStatus struct { func (x *AppStatus) Reset() { *x = AppStatus{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1833,7 +1723,7 @@ func (x *AppStatus) String() string { func (*AppStatus) ProtoMessage() {} func (x *AppStatus) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1846,7 +1736,7 @@ func (x *AppStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AppStatus.ProtoReflect.Descriptor instead. func (*AppStatus) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{29} + return file_agent_proto_rawDescGZIP(), []int{27} } func (x *AppStatus) GetRuntimeStatus() string { @@ -1881,7 +1771,7 @@ type AppConfig struct { func (x *AppConfig) Reset() { *x = AppConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1894,7 +1784,7 @@ func (x *AppConfig) String() string { func (*AppConfig) ProtoMessage() {} func (x *AppConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +1797,7 @@ func (x *AppConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppConfig.ProtoReflect.Descriptor instead. func (*AppConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{30} + return file_agent_proto_rawDescGZIP(), []int{28} } func (x *AppConfig) GetReleaseName() string { @@ -2027,7 +1917,7 @@ type AppValues struct { func (x *AppValues) Reset() { *x = AppValues{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[31] + mi := &file_agent_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2040,7 +1930,7 @@ func (x *AppValues) String() string { func (*AppValues) ProtoMessage() {} func (x *AppValues) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[31] + mi := &file_agent_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2053,7 +1943,7 @@ func (x *AppValues) ProtoReflect() protoreflect.Message { // Deprecated: Use AppValues.ProtoReflect.Descriptor instead. func (*AppValues) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{31} + return file_agent_proto_rawDescGZIP(), []int{29} } func (x *AppValues) GetOverrideValues() []byte { @@ -2086,7 +1976,7 @@ type AppLaunchConfig struct { func (x *AppLaunchConfig) Reset() { *x = AppLaunchConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[32] + mi := &file_agent_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2099,7 +1989,7 @@ func (x *AppLaunchConfig) String() string { func (*AppLaunchConfig) ProtoMessage() {} func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[32] + mi := &file_agent_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2112,7 +2002,7 @@ func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLaunchConfig.ProtoReflect.Descriptor instead. func (*AppLaunchConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{32} + return file_agent_proto_rawDescGZIP(), []int{30} } func (x *AppLaunchConfig) GetReleaseName() string { @@ -2192,267 +2082,256 @@ var file_agent_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, - 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, - 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, - 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, + 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, + 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, + 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, 0x21, + 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, + 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, + 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, + 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, + 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, - 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, + 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, + 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, + 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, + 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, + 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, - 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, - 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, - 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, - 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, + 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, + 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, + 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, - 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, - 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x03, 0x32, 0xa5, 0x0b, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, - 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, - 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, + 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, + 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, + 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xee, 0x0a, 0x0a, 0x05, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, @@ -2543,104 +2422,100 @@ func file_agent_proto_rawDescGZIP() []byte { } var file_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 34) +var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_agent_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: agentpb.StatusCode (*PingRequest)(nil), // 1: agentpb.PingRequest (*PingResponse)(nil), // 2: agentpb.PingResponse (*StoreCredentialRequest)(nil), // 3: agentpb.StoreCredentialRequest (*StoreCredentialResponse)(nil), // 4: agentpb.StoreCredentialResponse - (*SyncRequest)(nil), // 5: agentpb.SyncRequest - (*SyncResponse)(nil), // 6: agentpb.SyncResponse - (*ClimonInstallRequest)(nil), // 7: agentpb.ClimonInstallRequest - (*ClimonDeleteRequest)(nil), // 8: agentpb.ClimonDeleteRequest - (*ApplicationInstallRequest)(nil), // 9: agentpb.ApplicationInstallRequest - (*ApplicationDeleteRequest)(nil), // 10: agentpb.ApplicationDeleteRequest - (*ClusterRequest)(nil), // 11: agentpb.ClusterRequest - (*RepositoryAddRequest)(nil), // 12: agentpb.RepositoryAddRequest - (*RepositoryDeleteRequest)(nil), // 13: agentpb.RepositoryDeleteRequest - (*ProjectAddRequest)(nil), // 14: agentpb.ProjectAddRequest - (*ProjectDeleteRequest)(nil), // 15: agentpb.ProjectDeleteRequest - (*JobRequest)(nil), // 16: agentpb.JobRequest - (*JobResponse)(nil), // 17: agentpb.JobResponse - (*SyncAppRequest)(nil), // 18: agentpb.SyncAppRequest - (*SyncAppResponse)(nil), // 19: agentpb.SyncAppResponse - (*GetClusterAppsRequest)(nil), // 20: agentpb.GetClusterAppsRequest - (*GetClusterAppsResponse)(nil), // 21: agentpb.GetClusterAppsResponse - (*GetClusterAppLaunchesRequest)(nil), // 22: agentpb.GetClusterAppLaunchesRequest - (*GetClusterAppLaunchesResponse)(nil), // 23: agentpb.GetClusterAppLaunchesResponse - (*GetClusterAppConfigRequest)(nil), // 24: agentpb.GetClusterAppConfigRequest - (*GetClusterAppConfigResponse)(nil), // 25: agentpb.GetClusterAppConfigResponse - (*GetClusterAppValuesRequest)(nil), // 26: agentpb.GetClusterAppValuesRequest - (*GetClusterAppValuesResponse)(nil), // 27: agentpb.GetClusterAppValuesResponse - (*SyncAppData)(nil), // 28: agentpb.SyncAppData - (*AppData)(nil), // 29: agentpb.AppData - (*AppStatus)(nil), // 30: agentpb.AppStatus - (*AppConfig)(nil), // 31: agentpb.AppConfig - (*AppValues)(nil), // 32: agentpb.AppValues - (*AppLaunchConfig)(nil), // 33: agentpb.AppLaunchConfig - nil, // 34: agentpb.StoreCredentialRequest.CredentialEntry - (*any1.Any)(nil), // 35: google.protobuf.Any + (*ClimonInstallRequest)(nil), // 5: agentpb.ClimonInstallRequest + (*ClimonDeleteRequest)(nil), // 6: agentpb.ClimonDeleteRequest + (*ApplicationInstallRequest)(nil), // 7: agentpb.ApplicationInstallRequest + (*ApplicationDeleteRequest)(nil), // 8: agentpb.ApplicationDeleteRequest + (*ClusterRequest)(nil), // 9: agentpb.ClusterRequest + (*RepositoryAddRequest)(nil), // 10: agentpb.RepositoryAddRequest + (*RepositoryDeleteRequest)(nil), // 11: agentpb.RepositoryDeleteRequest + (*ProjectAddRequest)(nil), // 12: agentpb.ProjectAddRequest + (*ProjectDeleteRequest)(nil), // 13: agentpb.ProjectDeleteRequest + (*JobRequest)(nil), // 14: agentpb.JobRequest + (*JobResponse)(nil), // 15: agentpb.JobResponse + (*SyncAppRequest)(nil), // 16: agentpb.SyncAppRequest + (*SyncAppResponse)(nil), // 17: agentpb.SyncAppResponse + (*GetClusterAppsRequest)(nil), // 18: agentpb.GetClusterAppsRequest + (*GetClusterAppsResponse)(nil), // 19: agentpb.GetClusterAppsResponse + (*GetClusterAppLaunchesRequest)(nil), // 20: agentpb.GetClusterAppLaunchesRequest + (*GetClusterAppLaunchesResponse)(nil), // 21: agentpb.GetClusterAppLaunchesResponse + (*GetClusterAppConfigRequest)(nil), // 22: agentpb.GetClusterAppConfigRequest + (*GetClusterAppConfigResponse)(nil), // 23: agentpb.GetClusterAppConfigResponse + (*GetClusterAppValuesRequest)(nil), // 24: agentpb.GetClusterAppValuesRequest + (*GetClusterAppValuesResponse)(nil), // 25: agentpb.GetClusterAppValuesResponse + (*SyncAppData)(nil), // 26: agentpb.SyncAppData + (*AppData)(nil), // 27: agentpb.AppData + (*AppStatus)(nil), // 28: agentpb.AppStatus + (*AppConfig)(nil), // 29: agentpb.AppConfig + (*AppValues)(nil), // 30: agentpb.AppValues + (*AppLaunchConfig)(nil), // 31: agentpb.AppLaunchConfig + nil, // 32: agentpb.StoreCredentialRequest.CredentialEntry + (*any1.Any)(nil), // 33: google.protobuf.Any } var file_agent_proto_depIdxs = []int32{ 0, // 0: agentpb.PingResponse.status:type_name -> agentpb.StatusCode - 34, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry + 32, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry 0, // 2: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode - 35, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any - 28, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData + 33, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any + 26, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData 0, // 5: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode 0, // 6: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode - 29, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData + 27, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData 0, // 8: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode - 33, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig + 31, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig 0, // 10: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode - 31, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig + 29, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig 0, // 12: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode - 32, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues - 31, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig - 32, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues - 31, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig - 30, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus + 30, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues + 29, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig + 30, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues + 29, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig + 28, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus 1, // 18: agentpb.Agent.Ping:input_type -> agentpb.PingRequest - 16, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest + 14, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest 3, // 20: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest - 5, // 21: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest - 7, // 22: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest - 8, // 23: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest - 9, // 24: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest - 10, // 25: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest - 11, // 26: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest - 11, // 27: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest - 12, // 28: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest - 13, // 29: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest - 14, // 30: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest - 15, // 31: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest - 18, // 32: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest - 20, // 33: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest - 22, // 34: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest - 24, // 35: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest - 26, // 36: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest - 2, // 37: agentpb.Agent.Ping:output_type -> agentpb.PingResponse - 17, // 38: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse - 4, // 39: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse - 6, // 40: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse - 17, // 41: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse - 17, // 42: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse - 17, // 43: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse - 17, // 44: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse - 17, // 45: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse - 17, // 46: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse - 17, // 47: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse - 17, // 48: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse - 17, // 49: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse - 17, // 50: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse - 19, // 51: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse - 21, // 52: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse - 23, // 53: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse - 25, // 54: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse - 27, // 55: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse - 37, // [37:56] is the sub-list for method output_type - 18, // [18:37] is the sub-list for method input_type + 5, // 21: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest + 6, // 22: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest + 7, // 23: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest + 8, // 24: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest + 9, // 25: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest + 9, // 26: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest + 10, // 27: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest + 11, // 28: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest + 12, // 29: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest + 13, // 30: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest + 16, // 31: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest + 18, // 32: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest + 20, // 33: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest + 22, // 34: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest + 24, // 35: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest + 2, // 36: agentpb.Agent.Ping:output_type -> agentpb.PingResponse + 15, // 37: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse + 4, // 38: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse + 15, // 39: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse + 15, // 40: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse + 15, // 41: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse + 15, // 42: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse + 15, // 43: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse + 15, // 44: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse + 15, // 45: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse + 15, // 46: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse + 15, // 47: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse + 15, // 48: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse + 17, // 49: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse + 19, // 50: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse + 21, // 51: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse + 23, // 52: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse + 25, // 53: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse + 36, // [36:54] is the sub-list for method output_type + 18, // [18:36] is the sub-list for method input_type 18, // [18:18] is the sub-list for extension type_name 18, // [18:18] is the sub-list for extension extendee 0, // [0:18] is the sub-list for field type_name @@ -2701,30 +2576,6 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClimonInstallRequest); i { case 0: return &v.state @@ -2736,7 +2587,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClimonDeleteRequest); i { case 0: return &v.state @@ -2748,7 +2599,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationInstallRequest); i { case 0: return &v.state @@ -2760,7 +2611,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationDeleteRequest); i { case 0: return &v.state @@ -2772,7 +2623,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterRequest); i { case 0: return &v.state @@ -2784,7 +2635,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryAddRequest); i { case 0: return &v.state @@ -2796,7 +2647,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryDeleteRequest); i { case 0: return &v.state @@ -2808,7 +2659,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectAddRequest); i { case 0: return &v.state @@ -2820,7 +2671,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectDeleteRequest); i { case 0: return &v.state @@ -2832,7 +2683,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobRequest); i { case 0: return &v.state @@ -2844,7 +2695,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobResponse); i { case 0: return &v.state @@ -2856,7 +2707,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppRequest); i { case 0: return &v.state @@ -2868,7 +2719,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppResponse); i { case 0: return &v.state @@ -2880,7 +2731,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppsRequest); i { case 0: return &v.state @@ -2892,7 +2743,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppsResponse); i { case 0: return &v.state @@ -2904,7 +2755,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppLaunchesRequest); i { case 0: return &v.state @@ -2916,7 +2767,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppLaunchesResponse); i { case 0: return &v.state @@ -2928,7 +2779,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppConfigRequest); i { case 0: return &v.state @@ -2940,7 +2791,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppConfigResponse); i { case 0: return &v.state @@ -2952,7 +2803,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppValuesRequest); i { case 0: return &v.state @@ -2964,7 +2815,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppValuesResponse); i { case 0: return &v.state @@ -2976,7 +2827,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppData); i { case 0: return &v.state @@ -2988,7 +2839,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppData); i { case 0: return &v.state @@ -3000,7 +2851,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppStatus); i { case 0: return &v.state @@ -3012,7 +2863,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppConfig); i { case 0: return &v.state @@ -3024,7 +2875,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppValues); i { case 0: return &v.state @@ -3036,7 +2887,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppLaunchConfig); i { case 0: return &v.state @@ -3055,7 +2906,7 @@ func file_agent_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_proto_rawDesc, NumEnums: 1, - NumMessages: 34, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/capten/agent/pkg/agentpb/agent_grpc.pb.go b/capten/agent/pkg/agentpb/agent_grpc.pb.go index 3a3e5948..8a2a937e 100644 --- a/capten/agent/pkg/agentpb/agent_grpc.pb.go +++ b/capten/agent/pkg/agentpb/agent_grpc.pb.go @@ -22,7 +22,6 @@ const ( Agent_Ping_FullMethodName = "/agentpb.Agent/Ping" Agent_SubmitJob_FullMethodName = "/agentpb.Agent/SubmitJob" Agent_StoreCredential_FullMethodName = "/agentpb.Agent/StoreCredential" - Agent_Sync_FullMethodName = "/agentpb.Agent/Sync" Agent_ClimonAppInstall_FullMethodName = "/agentpb.Agent/ClimonAppInstall" Agent_ClimonAppDelete_FullMethodName = "/agentpb.Agent/ClimonAppDelete" Agent_DeployerAppInstall_FullMethodName = "/agentpb.Agent/DeployerAppInstall" @@ -47,7 +46,6 @@ type AgentClient interface { Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) StoreCredential(ctx context.Context, in *StoreCredentialRequest, opts ...grpc.CallOption) (*StoreCredentialResponse, error) - Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) ClimonAppInstall(ctx context.Context, in *ClimonInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) ClimonAppDelete(ctx context.Context, in *ClimonDeleteRequest, opts ...grpc.CallOption) (*JobResponse, error) DeployerAppInstall(ctx context.Context, in *ApplicationInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) @@ -100,15 +98,6 @@ func (c *agentClient) StoreCredential(ctx context.Context, in *StoreCredentialRe return out, nil } -func (c *agentClient) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) { - out := new(SyncResponse) - err := c.cc.Invoke(ctx, Agent_Sync_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *agentClient) ClimonAppInstall(ctx context.Context, in *ClimonInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) { out := new(JobResponse) err := c.cc.Invoke(ctx, Agent_ClimonAppInstall_FullMethodName, in, out, opts...) @@ -251,7 +240,6 @@ type AgentServer interface { Ping(context.Context, *PingRequest) (*PingResponse, error) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) - Sync(context.Context, *SyncRequest) (*SyncResponse, error) ClimonAppInstall(context.Context, *ClimonInstallRequest) (*JobResponse, error) ClimonAppDelete(context.Context, *ClimonDeleteRequest) (*JobResponse, error) DeployerAppInstall(context.Context, *ApplicationInstallRequest) (*JobResponse, error) @@ -283,9 +271,6 @@ func (UnimplementedAgentServer) SubmitJob(context.Context, *JobRequest) (*JobRes func (UnimplementedAgentServer) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoreCredential not implemented") } -func (UnimplementedAgentServer) Sync(context.Context, *SyncRequest) (*SyncResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Sync not implemented") -} func (UnimplementedAgentServer) ClimonAppInstall(context.Context, *ClimonInstallRequest) (*JobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ClimonAppInstall not implemented") } @@ -398,24 +383,6 @@ func _Agent_StoreCredential_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -func _Agent_Sync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SyncRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AgentServer).Sync(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Agent_Sync_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AgentServer).Sync(ctx, req.(*SyncRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Agent_ClimonAppInstall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ClimonInstallRequest) if err := dec(in); err != nil { @@ -705,10 +672,6 @@ var Agent_ServiceDesc = grpc.ServiceDesc{ MethodName: "StoreCredential", Handler: _Agent_StoreCredential_Handler, }, - { - MethodName: "Sync", - Handler: _Agent_Sync_Handler, - }, { MethodName: "ClimonAppInstall", Handler: _Agent_ClimonAppInstall_Handler, diff --git a/capten/capten-sdk/agentpb/agent.pb.go b/capten/capten-sdk/agentpb/agent.pb.go index f4f46ac9..9e886f67 100644 --- a/capten/capten-sdk/agentpb/agent.pb.go +++ b/capten/capten-sdk/agentpb/agent.pb.go @@ -284,116 +284,6 @@ func (x *StoreCredentialResponse) GetStatusMessage() string { return "" } -type SyncRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Data string `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *SyncRequest) Reset() { - *x = SyncRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncRequest) ProtoMessage() {} - -func (x *SyncRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[4] - 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 SyncRequest.ProtoReflect.Descriptor instead. -func (*SyncRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{4} -} - -func (x *SyncRequest) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *SyncRequest) GetData() string { - if x != nil { - return x.Data - } - return "" -} - -type SyncResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *SyncResponse) Reset() { - *x = SyncResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncResponse) ProtoMessage() {} - -func (x *SyncResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[5] - 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 SyncResponse.ProtoReflect.Descriptor instead. -func (*SyncResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{5} -} - -func (x *SyncResponse) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *SyncResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - type ClimonInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -413,7 +303,7 @@ type ClimonInstallRequest struct { func (x *ClimonInstallRequest) Reset() { *x = ClimonInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +316,7 @@ func (x *ClimonInstallRequest) String() string { func (*ClimonInstallRequest) ProtoMessage() {} func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +329,7 @@ func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonInstallRequest.ProtoReflect.Descriptor instead. func (*ClimonInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{6} + return file_agent_proto_rawDescGZIP(), []int{4} } func (x *ClimonInstallRequest) GetPluginName() string { @@ -520,7 +410,7 @@ type ClimonDeleteRequest struct { func (x *ClimonDeleteRequest) Reset() { *x = ClimonDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -533,7 +423,7 @@ func (x *ClimonDeleteRequest) String() string { func (*ClimonDeleteRequest) ProtoMessage() {} func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -546,7 +436,7 @@ func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonDeleteRequest.ProtoReflect.Descriptor instead. func (*ClimonDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{7} + return file_agent_proto_rawDescGZIP(), []int{5} } func (x *ClimonDeleteRequest) GetPluginName() string { @@ -603,7 +493,7 @@ type ApplicationInstallRequest struct { func (x *ApplicationInstallRequest) Reset() { *x = ApplicationInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +506,7 @@ func (x *ApplicationInstallRequest) String() string { func (*ApplicationInstallRequest) ProtoMessage() {} func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +519,7 @@ func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationInstallRequest.ProtoReflect.Descriptor instead. func (*ApplicationInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{8} + return file_agent_proto_rawDescGZIP(), []int{6} } func (x *ApplicationInstallRequest) GetPluginName() string { @@ -710,7 +600,7 @@ type ApplicationDeleteRequest struct { func (x *ApplicationDeleteRequest) Reset() { *x = ApplicationDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -723,7 +613,7 @@ func (x *ApplicationDeleteRequest) String() string { func (*ApplicationDeleteRequest) ProtoMessage() {} func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -736,7 +626,7 @@ func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationDeleteRequest.ProtoReflect.Descriptor instead. func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{9} + return file_agent_proto_rawDescGZIP(), []int{7} } func (x *ApplicationDeleteRequest) GetPluginName() string { @@ -786,7 +676,7 @@ type ClusterRequest struct { func (x *ClusterRequest) Reset() { *x = ClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -799,7 +689,7 @@ func (x *ClusterRequest) String() string { func (*ClusterRequest) ProtoMessage() {} func (x *ClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -812,7 +702,7 @@ func (x *ClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterRequest.ProtoReflect.Descriptor instead. func (*ClusterRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{10} + return file_agent_proto_rawDescGZIP(), []int{8} } func (x *ClusterRequest) GetPluginName() string { @@ -842,7 +732,7 @@ type RepositoryAddRequest struct { func (x *RepositoryAddRequest) Reset() { *x = RepositoryAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -855,7 +745,7 @@ func (x *RepositoryAddRequest) String() string { func (*RepositoryAddRequest) ProtoMessage() {} func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -868,7 +758,7 @@ func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryAddRequest.ProtoReflect.Descriptor instead. func (*RepositoryAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{11} + return file_agent_proto_rawDescGZIP(), []int{9} } func (x *RepositoryAddRequest) GetPluginName() string { @@ -904,7 +794,7 @@ type RepositoryDeleteRequest struct { func (x *RepositoryDeleteRequest) Reset() { *x = RepositoryDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -917,7 +807,7 @@ func (x *RepositoryDeleteRequest) String() string { func (*RepositoryDeleteRequest) ProtoMessage() {} func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -930,7 +820,7 @@ func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryDeleteRequest.ProtoReflect.Descriptor instead. func (*RepositoryDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{12} + return file_agent_proto_rawDescGZIP(), []int{10} } func (x *RepositoryDeleteRequest) GetPluginName() string { @@ -959,7 +849,7 @@ type ProjectAddRequest struct { func (x *ProjectAddRequest) Reset() { *x = ProjectAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -972,7 +862,7 @@ func (x *ProjectAddRequest) String() string { func (*ProjectAddRequest) ProtoMessage() {} func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -985,7 +875,7 @@ func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectAddRequest.ProtoReflect.Descriptor instead. func (*ProjectAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{13} + return file_agent_proto_rawDescGZIP(), []int{11} } func (x *ProjectAddRequest) GetPluginName() string { @@ -1014,7 +904,7 @@ type ProjectDeleteRequest struct { func (x *ProjectDeleteRequest) Reset() { *x = ProjectDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1027,7 +917,7 @@ func (x *ProjectDeleteRequest) String() string { func (*ProjectDeleteRequest) ProtoMessage() {} func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,7 +930,7 @@ func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{14} + return file_agent_proto_rawDescGZIP(), []int{12} } func (x *ProjectDeleteRequest) GetPluginName() string { @@ -1069,7 +959,7 @@ type JobRequest struct { func (x *JobRequest) Reset() { *x = JobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +972,7 @@ func (x *JobRequest) String() string { func (*JobRequest) ProtoMessage() {} func (x *JobRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +985,7 @@ func (x *JobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. func (*JobRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{15} + return file_agent_proto_rawDescGZIP(), []int{13} } func (x *JobRequest) GetOperation() string { @@ -1125,7 +1015,7 @@ type JobResponse struct { func (x *JobResponse) Reset() { *x = JobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1138,7 +1028,7 @@ func (x *JobResponse) String() string { func (*JobResponse) ProtoMessage() {} func (x *JobResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1151,7 +1041,7 @@ func (x *JobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. func (*JobResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{16} + return file_agent_proto_rawDescGZIP(), []int{14} } func (x *JobResponse) GetId() string { @@ -1186,7 +1076,7 @@ type SyncAppRequest struct { func (x *SyncAppRequest) Reset() { *x = SyncAppRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1199,7 +1089,7 @@ func (x *SyncAppRequest) String() string { func (*SyncAppRequest) ProtoMessage() {} func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1212,7 +1102,7 @@ func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppRequest.ProtoReflect.Descriptor instead. func (*SyncAppRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{17} + return file_agent_proto_rawDescGZIP(), []int{15} } func (x *SyncAppRequest) GetData() *SyncAppData { @@ -1234,7 +1124,7 @@ type SyncAppResponse struct { func (x *SyncAppResponse) Reset() { *x = SyncAppResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1137,7 @@ func (x *SyncAppResponse) String() string { func (*SyncAppResponse) ProtoMessage() {} func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1150,7 @@ func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppResponse.ProtoReflect.Descriptor instead. func (*SyncAppResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{18} + return file_agent_proto_rawDescGZIP(), []int{16} } func (x *SyncAppResponse) GetStatus() StatusCode { @@ -1286,7 +1176,7 @@ type GetClusterAppsRequest struct { func (x *GetClusterAppsRequest) Reset() { *x = GetClusterAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1189,7 @@ func (x *GetClusterAppsRequest) String() string { func (*GetClusterAppsRequest) ProtoMessage() {} func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,7 +1202,7 @@ func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{19} + return file_agent_proto_rawDescGZIP(), []int{17} } type GetClusterAppsResponse struct { @@ -1328,7 +1218,7 @@ type GetClusterAppsResponse struct { func (x *GetClusterAppsResponse) Reset() { *x = GetClusterAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1341,7 +1231,7 @@ func (x *GetClusterAppsResponse) String() string { func (*GetClusterAppsResponse) ProtoMessage() {} func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1354,7 +1244,7 @@ func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppsResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{20} + return file_agent_proto_rawDescGZIP(), []int{18} } func (x *GetClusterAppsResponse) GetStatus() StatusCode { @@ -1387,7 +1277,7 @@ type GetClusterAppLaunchesRequest struct { func (x *GetClusterAppLaunchesRequest) Reset() { *x = GetClusterAppLaunchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1400,7 +1290,7 @@ func (x *GetClusterAppLaunchesRequest) String() string { func (*GetClusterAppLaunchesRequest) ProtoMessage() {} func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1413,7 +1303,7 @@ func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{21} + return file_agent_proto_rawDescGZIP(), []int{19} } type GetClusterAppLaunchesResponse struct { @@ -1429,7 +1319,7 @@ type GetClusterAppLaunchesResponse struct { func (x *GetClusterAppLaunchesResponse) Reset() { *x = GetClusterAppLaunchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1442,7 +1332,7 @@ func (x *GetClusterAppLaunchesResponse) String() string { func (*GetClusterAppLaunchesResponse) ProtoMessage() {} func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1455,7 +1345,7 @@ func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{22} + return file_agent_proto_rawDescGZIP(), []int{20} } func (x *GetClusterAppLaunchesResponse) GetStatus() StatusCode { @@ -1490,7 +1380,7 @@ type GetClusterAppConfigRequest struct { func (x *GetClusterAppConfigRequest) Reset() { *x = GetClusterAppConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1503,7 +1393,7 @@ func (x *GetClusterAppConfigRequest) String() string { func (*GetClusterAppConfigRequest) ProtoMessage() {} func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1516,7 +1406,7 @@ func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{23} + return file_agent_proto_rawDescGZIP(), []int{21} } func (x *GetClusterAppConfigRequest) GetReleaseName() string { @@ -1539,7 +1429,7 @@ type GetClusterAppConfigResponse struct { func (x *GetClusterAppConfigResponse) Reset() { *x = GetClusterAppConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1552,7 +1442,7 @@ func (x *GetClusterAppConfigResponse) String() string { func (*GetClusterAppConfigResponse) ProtoMessage() {} func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1565,7 +1455,7 @@ func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{24} + return file_agent_proto_rawDescGZIP(), []int{22} } func (x *GetClusterAppConfigResponse) GetStatus() StatusCode { @@ -1600,7 +1490,7 @@ type GetClusterAppValuesRequest struct { func (x *GetClusterAppValuesRequest) Reset() { *x = GetClusterAppValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1613,7 +1503,7 @@ func (x *GetClusterAppValuesRequest) String() string { func (*GetClusterAppValuesRequest) ProtoMessage() {} func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1626,7 +1516,7 @@ func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{25} + return file_agent_proto_rawDescGZIP(), []int{23} } func (x *GetClusterAppValuesRequest) GetReleaseName() string { @@ -1649,7 +1539,7 @@ type GetClusterAppValuesResponse struct { func (x *GetClusterAppValuesResponse) Reset() { *x = GetClusterAppValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1662,7 +1552,7 @@ func (x *GetClusterAppValuesResponse) String() string { func (*GetClusterAppValuesResponse) ProtoMessage() {} func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1675,7 +1565,7 @@ func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{26} + return file_agent_proto_rawDescGZIP(), []int{24} } func (x *GetClusterAppValuesResponse) GetStatus() StatusCode { @@ -1711,7 +1601,7 @@ type SyncAppData struct { func (x *SyncAppData) Reset() { *x = SyncAppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1724,7 +1614,7 @@ func (x *SyncAppData) String() string { func (*SyncAppData) ProtoMessage() {} func (x *SyncAppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1737,7 +1627,7 @@ func (x *SyncAppData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppData.ProtoReflect.Descriptor instead. func (*SyncAppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{27} + return file_agent_proto_rawDescGZIP(), []int{25} } func (x *SyncAppData) GetConfig() *AppConfig { @@ -1766,7 +1656,7 @@ type AppData struct { func (x *AppData) Reset() { *x = AppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1779,7 +1669,7 @@ func (x *AppData) String() string { func (*AppData) ProtoMessage() {} func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1792,7 +1682,7 @@ func (x *AppData) ProtoReflect() protoreflect.Message { // Deprecated: Use AppData.ProtoReflect.Descriptor instead. func (*AppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{28} + return file_agent_proto_rawDescGZIP(), []int{26} } func (x *AppData) GetConfig() *AppConfig { @@ -1820,7 +1710,7 @@ type AppStatus struct { func (x *AppStatus) Reset() { *x = AppStatus{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1833,7 +1723,7 @@ func (x *AppStatus) String() string { func (*AppStatus) ProtoMessage() {} func (x *AppStatus) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1846,7 +1736,7 @@ func (x *AppStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AppStatus.ProtoReflect.Descriptor instead. func (*AppStatus) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{29} + return file_agent_proto_rawDescGZIP(), []int{27} } func (x *AppStatus) GetRuntimeStatus() string { @@ -1881,7 +1771,7 @@ type AppConfig struct { func (x *AppConfig) Reset() { *x = AppConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1894,7 +1784,7 @@ func (x *AppConfig) String() string { func (*AppConfig) ProtoMessage() {} func (x *AppConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +1797,7 @@ func (x *AppConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppConfig.ProtoReflect.Descriptor instead. func (*AppConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{30} + return file_agent_proto_rawDescGZIP(), []int{28} } func (x *AppConfig) GetReleaseName() string { @@ -2027,7 +1917,7 @@ type AppValues struct { func (x *AppValues) Reset() { *x = AppValues{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[31] + mi := &file_agent_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2040,7 +1930,7 @@ func (x *AppValues) String() string { func (*AppValues) ProtoMessage() {} func (x *AppValues) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[31] + mi := &file_agent_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2053,7 +1943,7 @@ func (x *AppValues) ProtoReflect() protoreflect.Message { // Deprecated: Use AppValues.ProtoReflect.Descriptor instead. func (*AppValues) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{31} + return file_agent_proto_rawDescGZIP(), []int{29} } func (x *AppValues) GetOverrideValues() []byte { @@ -2086,7 +1976,7 @@ type AppLaunchConfig struct { func (x *AppLaunchConfig) Reset() { *x = AppLaunchConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[32] + mi := &file_agent_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2099,7 +1989,7 @@ func (x *AppLaunchConfig) String() string { func (*AppLaunchConfig) ProtoMessage() {} func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[32] + mi := &file_agent_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2112,7 +2002,7 @@ func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLaunchConfig.ProtoReflect.Descriptor instead. func (*AppLaunchConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{32} + return file_agent_proto_rawDescGZIP(), []int{30} } func (x *AppLaunchConfig) GetReleaseName() string { @@ -2192,267 +2082,256 @@ var file_agent_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, - 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, - 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, - 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, + 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, + 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, + 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, 0x21, + 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, + 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, + 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, + 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, + 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, - 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, + 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, + 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, + 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, + 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, + 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, - 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, - 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, - 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, - 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, + 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, + 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, + 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, - 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, - 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x03, 0x32, 0xa5, 0x0b, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, - 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, - 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, + 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, + 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, + 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xee, 0x0a, 0x0a, 0x05, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, @@ -2543,104 +2422,100 @@ func file_agent_proto_rawDescGZIP() []byte { } var file_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 34) +var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_agent_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: agentpb.StatusCode (*PingRequest)(nil), // 1: agentpb.PingRequest (*PingResponse)(nil), // 2: agentpb.PingResponse (*StoreCredentialRequest)(nil), // 3: agentpb.StoreCredentialRequest (*StoreCredentialResponse)(nil), // 4: agentpb.StoreCredentialResponse - (*SyncRequest)(nil), // 5: agentpb.SyncRequest - (*SyncResponse)(nil), // 6: agentpb.SyncResponse - (*ClimonInstallRequest)(nil), // 7: agentpb.ClimonInstallRequest - (*ClimonDeleteRequest)(nil), // 8: agentpb.ClimonDeleteRequest - (*ApplicationInstallRequest)(nil), // 9: agentpb.ApplicationInstallRequest - (*ApplicationDeleteRequest)(nil), // 10: agentpb.ApplicationDeleteRequest - (*ClusterRequest)(nil), // 11: agentpb.ClusterRequest - (*RepositoryAddRequest)(nil), // 12: agentpb.RepositoryAddRequest - (*RepositoryDeleteRequest)(nil), // 13: agentpb.RepositoryDeleteRequest - (*ProjectAddRequest)(nil), // 14: agentpb.ProjectAddRequest - (*ProjectDeleteRequest)(nil), // 15: agentpb.ProjectDeleteRequest - (*JobRequest)(nil), // 16: agentpb.JobRequest - (*JobResponse)(nil), // 17: agentpb.JobResponse - (*SyncAppRequest)(nil), // 18: agentpb.SyncAppRequest - (*SyncAppResponse)(nil), // 19: agentpb.SyncAppResponse - (*GetClusterAppsRequest)(nil), // 20: agentpb.GetClusterAppsRequest - (*GetClusterAppsResponse)(nil), // 21: agentpb.GetClusterAppsResponse - (*GetClusterAppLaunchesRequest)(nil), // 22: agentpb.GetClusterAppLaunchesRequest - (*GetClusterAppLaunchesResponse)(nil), // 23: agentpb.GetClusterAppLaunchesResponse - (*GetClusterAppConfigRequest)(nil), // 24: agentpb.GetClusterAppConfigRequest - (*GetClusterAppConfigResponse)(nil), // 25: agentpb.GetClusterAppConfigResponse - (*GetClusterAppValuesRequest)(nil), // 26: agentpb.GetClusterAppValuesRequest - (*GetClusterAppValuesResponse)(nil), // 27: agentpb.GetClusterAppValuesResponse - (*SyncAppData)(nil), // 28: agentpb.SyncAppData - (*AppData)(nil), // 29: agentpb.AppData - (*AppStatus)(nil), // 30: agentpb.AppStatus - (*AppConfig)(nil), // 31: agentpb.AppConfig - (*AppValues)(nil), // 32: agentpb.AppValues - (*AppLaunchConfig)(nil), // 33: agentpb.AppLaunchConfig - nil, // 34: agentpb.StoreCredentialRequest.CredentialEntry - (*any1.Any)(nil), // 35: google.protobuf.Any + (*ClimonInstallRequest)(nil), // 5: agentpb.ClimonInstallRequest + (*ClimonDeleteRequest)(nil), // 6: agentpb.ClimonDeleteRequest + (*ApplicationInstallRequest)(nil), // 7: agentpb.ApplicationInstallRequest + (*ApplicationDeleteRequest)(nil), // 8: agentpb.ApplicationDeleteRequest + (*ClusterRequest)(nil), // 9: agentpb.ClusterRequest + (*RepositoryAddRequest)(nil), // 10: agentpb.RepositoryAddRequest + (*RepositoryDeleteRequest)(nil), // 11: agentpb.RepositoryDeleteRequest + (*ProjectAddRequest)(nil), // 12: agentpb.ProjectAddRequest + (*ProjectDeleteRequest)(nil), // 13: agentpb.ProjectDeleteRequest + (*JobRequest)(nil), // 14: agentpb.JobRequest + (*JobResponse)(nil), // 15: agentpb.JobResponse + (*SyncAppRequest)(nil), // 16: agentpb.SyncAppRequest + (*SyncAppResponse)(nil), // 17: agentpb.SyncAppResponse + (*GetClusterAppsRequest)(nil), // 18: agentpb.GetClusterAppsRequest + (*GetClusterAppsResponse)(nil), // 19: agentpb.GetClusterAppsResponse + (*GetClusterAppLaunchesRequest)(nil), // 20: agentpb.GetClusterAppLaunchesRequest + (*GetClusterAppLaunchesResponse)(nil), // 21: agentpb.GetClusterAppLaunchesResponse + (*GetClusterAppConfigRequest)(nil), // 22: agentpb.GetClusterAppConfigRequest + (*GetClusterAppConfigResponse)(nil), // 23: agentpb.GetClusterAppConfigResponse + (*GetClusterAppValuesRequest)(nil), // 24: agentpb.GetClusterAppValuesRequest + (*GetClusterAppValuesResponse)(nil), // 25: agentpb.GetClusterAppValuesResponse + (*SyncAppData)(nil), // 26: agentpb.SyncAppData + (*AppData)(nil), // 27: agentpb.AppData + (*AppStatus)(nil), // 28: agentpb.AppStatus + (*AppConfig)(nil), // 29: agentpb.AppConfig + (*AppValues)(nil), // 30: agentpb.AppValues + (*AppLaunchConfig)(nil), // 31: agentpb.AppLaunchConfig + nil, // 32: agentpb.StoreCredentialRequest.CredentialEntry + (*any1.Any)(nil), // 33: google.protobuf.Any } var file_agent_proto_depIdxs = []int32{ 0, // 0: agentpb.PingResponse.status:type_name -> agentpb.StatusCode - 34, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry + 32, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry 0, // 2: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode - 35, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any - 28, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData + 33, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any + 26, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData 0, // 5: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode 0, // 6: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode - 29, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData + 27, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData 0, // 8: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode - 33, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig + 31, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig 0, // 10: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode - 31, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig + 29, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig 0, // 12: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode - 32, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues - 31, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig - 32, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues - 31, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig - 30, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus + 30, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues + 29, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig + 30, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues + 29, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig + 28, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus 1, // 18: agentpb.Agent.Ping:input_type -> agentpb.PingRequest - 16, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest + 14, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest 3, // 20: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest - 5, // 21: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest - 7, // 22: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest - 8, // 23: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest - 9, // 24: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest - 10, // 25: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest - 11, // 26: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest - 11, // 27: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest - 12, // 28: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest - 13, // 29: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest - 14, // 30: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest - 15, // 31: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest - 18, // 32: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest - 20, // 33: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest - 22, // 34: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest - 24, // 35: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest - 26, // 36: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest - 2, // 37: agentpb.Agent.Ping:output_type -> agentpb.PingResponse - 17, // 38: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse - 4, // 39: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse - 6, // 40: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse - 17, // 41: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse - 17, // 42: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse - 17, // 43: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse - 17, // 44: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse - 17, // 45: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse - 17, // 46: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse - 17, // 47: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse - 17, // 48: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse - 17, // 49: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse - 17, // 50: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse - 19, // 51: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse - 21, // 52: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse - 23, // 53: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse - 25, // 54: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse - 27, // 55: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse - 37, // [37:56] is the sub-list for method output_type - 18, // [18:37] is the sub-list for method input_type + 5, // 21: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest + 6, // 22: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest + 7, // 23: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest + 8, // 24: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest + 9, // 25: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest + 9, // 26: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest + 10, // 27: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest + 11, // 28: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest + 12, // 29: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest + 13, // 30: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest + 16, // 31: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest + 18, // 32: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest + 20, // 33: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest + 22, // 34: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest + 24, // 35: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest + 2, // 36: agentpb.Agent.Ping:output_type -> agentpb.PingResponse + 15, // 37: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse + 4, // 38: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse + 15, // 39: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse + 15, // 40: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse + 15, // 41: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse + 15, // 42: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse + 15, // 43: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse + 15, // 44: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse + 15, // 45: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse + 15, // 46: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse + 15, // 47: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse + 15, // 48: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse + 17, // 49: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse + 19, // 50: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse + 21, // 51: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse + 23, // 52: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse + 25, // 53: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse + 36, // [36:54] is the sub-list for method output_type + 18, // [18:36] is the sub-list for method input_type 18, // [18:18] is the sub-list for extension type_name 18, // [18:18] is the sub-list for extension extendee 0, // [0:18] is the sub-list for field type_name @@ -2701,30 +2576,6 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClimonInstallRequest); i { case 0: return &v.state @@ -2736,7 +2587,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClimonDeleteRequest); i { case 0: return &v.state @@ -2748,7 +2599,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationInstallRequest); i { case 0: return &v.state @@ -2760,7 +2611,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationDeleteRequest); i { case 0: return &v.state @@ -2772,7 +2623,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterRequest); i { case 0: return &v.state @@ -2784,7 +2635,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryAddRequest); i { case 0: return &v.state @@ -2796,7 +2647,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryDeleteRequest); i { case 0: return &v.state @@ -2808,7 +2659,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectAddRequest); i { case 0: return &v.state @@ -2820,7 +2671,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectDeleteRequest); i { case 0: return &v.state @@ -2832,7 +2683,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobRequest); i { case 0: return &v.state @@ -2844,7 +2695,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobResponse); i { case 0: return &v.state @@ -2856,7 +2707,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppRequest); i { case 0: return &v.state @@ -2868,7 +2719,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppResponse); i { case 0: return &v.state @@ -2880,7 +2731,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppsRequest); i { case 0: return &v.state @@ -2892,7 +2743,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppsResponse); i { case 0: return &v.state @@ -2904,7 +2755,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppLaunchesRequest); i { case 0: return &v.state @@ -2916,7 +2767,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppLaunchesResponse); i { case 0: return &v.state @@ -2928,7 +2779,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppConfigRequest); i { case 0: return &v.state @@ -2940,7 +2791,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppConfigResponse); i { case 0: return &v.state @@ -2952,7 +2803,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppValuesRequest); i { case 0: return &v.state @@ -2964,7 +2815,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppValuesResponse); i { case 0: return &v.state @@ -2976,7 +2827,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppData); i { case 0: return &v.state @@ -2988,7 +2839,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppData); i { case 0: return &v.state @@ -3000,7 +2851,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppStatus); i { case 0: return &v.state @@ -3012,7 +2863,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppConfig); i { case 0: return &v.state @@ -3024,7 +2875,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppValues); i { case 0: return &v.state @@ -3036,7 +2887,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppLaunchConfig); i { case 0: return &v.state @@ -3055,7 +2906,7 @@ func file_agent_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_proto_rawDesc, NumEnums: 1, - NumMessages: 34, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/capten/capten-sdk/agentpb/agent_grpc.pb.go b/capten/capten-sdk/agentpb/agent_grpc.pb.go index 3a3e5948..8a2a937e 100644 --- a/capten/capten-sdk/agentpb/agent_grpc.pb.go +++ b/capten/capten-sdk/agentpb/agent_grpc.pb.go @@ -22,7 +22,6 @@ const ( Agent_Ping_FullMethodName = "/agentpb.Agent/Ping" Agent_SubmitJob_FullMethodName = "/agentpb.Agent/SubmitJob" Agent_StoreCredential_FullMethodName = "/agentpb.Agent/StoreCredential" - Agent_Sync_FullMethodName = "/agentpb.Agent/Sync" Agent_ClimonAppInstall_FullMethodName = "/agentpb.Agent/ClimonAppInstall" Agent_ClimonAppDelete_FullMethodName = "/agentpb.Agent/ClimonAppDelete" Agent_DeployerAppInstall_FullMethodName = "/agentpb.Agent/DeployerAppInstall" @@ -47,7 +46,6 @@ type AgentClient interface { Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) StoreCredential(ctx context.Context, in *StoreCredentialRequest, opts ...grpc.CallOption) (*StoreCredentialResponse, error) - Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) ClimonAppInstall(ctx context.Context, in *ClimonInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) ClimonAppDelete(ctx context.Context, in *ClimonDeleteRequest, opts ...grpc.CallOption) (*JobResponse, error) DeployerAppInstall(ctx context.Context, in *ApplicationInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) @@ -100,15 +98,6 @@ func (c *agentClient) StoreCredential(ctx context.Context, in *StoreCredentialRe return out, nil } -func (c *agentClient) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) { - out := new(SyncResponse) - err := c.cc.Invoke(ctx, Agent_Sync_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *agentClient) ClimonAppInstall(ctx context.Context, in *ClimonInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) { out := new(JobResponse) err := c.cc.Invoke(ctx, Agent_ClimonAppInstall_FullMethodName, in, out, opts...) @@ -251,7 +240,6 @@ type AgentServer interface { Ping(context.Context, *PingRequest) (*PingResponse, error) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) - Sync(context.Context, *SyncRequest) (*SyncResponse, error) ClimonAppInstall(context.Context, *ClimonInstallRequest) (*JobResponse, error) ClimonAppDelete(context.Context, *ClimonDeleteRequest) (*JobResponse, error) DeployerAppInstall(context.Context, *ApplicationInstallRequest) (*JobResponse, error) @@ -283,9 +271,6 @@ func (UnimplementedAgentServer) SubmitJob(context.Context, *JobRequest) (*JobRes func (UnimplementedAgentServer) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoreCredential not implemented") } -func (UnimplementedAgentServer) Sync(context.Context, *SyncRequest) (*SyncResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Sync not implemented") -} func (UnimplementedAgentServer) ClimonAppInstall(context.Context, *ClimonInstallRequest) (*JobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ClimonAppInstall not implemented") } @@ -398,24 +383,6 @@ func _Agent_StoreCredential_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -func _Agent_Sync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SyncRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AgentServer).Sync(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Agent_Sync_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AgentServer).Sync(ctx, req.(*SyncRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Agent_ClimonAppInstall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ClimonInstallRequest) if err := dec(in); err != nil { @@ -705,10 +672,6 @@ var Agent_ServiceDesc = grpc.ServiceDesc{ MethodName: "StoreCredential", Handler: _Agent_StoreCredential_Handler, }, - { - MethodName: "Sync", - Handler: _Agent_Sync_Handler, - }, { MethodName: "ClimonAppInstall", Handler: _Agent_ClimonAppInstall_Handler, diff --git a/capten/climon/Dockerfile b/capten/climon/Dockerfile deleted file mode 100644 index e69de29b..00000000 diff --git a/capten/climon/integration_tests/setup_test.go b/capten/climon/integration_tests/setup_test.go index 44b03c46..cc722ffd 100644 --- a/capten/climon/integration_tests/setup_test.go +++ b/capten/climon/integration_tests/setup_test.go @@ -10,7 +10,6 @@ import ( "github.com/intelops/go-common/logging" "github.com/kelseyhightower/envconfig" "github.com/kube-tarian/kad/capten/climon/pkg/application" - "github.com/kube-tarian/kad/capten/climon/pkg/db/cassandra" ) var logger = logging.NewLogger() @@ -76,12 +75,7 @@ func checkResponse(resp *http.Response, statusCode int) bool { func startApplication(stop chan bool) { os.Setenv("PORT", "9080") log := logging.NewLogger() - db, err := cassandra.Create(logger) - if err != nil { - logger.Fatalf("failed to create db connection", err) - } - - app := application.New(log, db) + app := application.New(log) go app.Start() <-stop diff --git a/capten/climon/main.go b/capten/climon/main.go index adb9d1ff..b54a3daa 100644 --- a/capten/climon/main.go +++ b/capten/climon/main.go @@ -1,32 +1,19 @@ package main import ( - "log" "os" "os/signal" "syscall" "github.com/intelops/go-common/logging" "github.com/kube-tarian/kad/capten/climon/pkg/application" - "github.com/kube-tarian/kad/capten/climon/pkg/db/cassandra" - "github.com/kube-tarian/kad/capten/climon/pkg/temporal" ) func main() { logger := logging.NewLogger() logger.Infof("Started deployment worker\n") - db, err := cassandra.Create(logger) - if err != nil { - logger.Fatalf("failed to create db connection", err) - } - - temporalObj := temporal.New(os.Getenv("TEMPORAL_ADDRESS")) - if err := temporalObj.StartWorkers(); err != nil { - log.Fatalln("failed to start worker", err) - } - - app := application.New(logger, nil) + app := application.New(logger) go app.Start() signals := make(chan os.Signal, 1) @@ -34,7 +21,5 @@ func main() { <-signals app.Close() - db.Close() - temporalObj.StopWorkers() logger.Infof("Exiting deployment worker\n") } diff --git a/capten/climon/pkg/activities/activity.go b/capten/climon/pkg/activities/activity.go index 6a533b35..47983850 100644 --- a/capten/climon/pkg/activities/activity.go +++ b/capten/climon/pkg/activities/activity.go @@ -7,11 +7,9 @@ import ( "strings" "github.com/intelops/go-common/logging" - "github.com/kube-tarian/kad/capten/climon/pkg/db/cassandra" "github.com/kube-tarian/kad/capten/common-pkg/plugins" workerframework "github.com/kube-tarian/kad/capten/common-pkg/worker-framework" "github.com/kube-tarian/kad/capten/model" - "github.com/pkg/errors" ) type Activities struct { @@ -59,14 +57,6 @@ func (a *Activities) ClimonInstallActivity(ctx context.Context, req *model.Climo }, err } - if err := InsertToDb(logger, req); err != nil { - logger.Errorf("insert db failed, %v", err) - return model.ResponsePayload{ - Status: "Failed", - Message: json.RawMessage(fmt.Sprintf("database update failed %v", err)), - }, err - } - return model.ResponsePayload{ Status: "Success", Message: msg, @@ -107,50 +97,8 @@ func (a *Activities) ClimonDeleteActivity(ctx context.Context, req *model.Climon }, err } - if err := DeleteDbEntry(logger, req); err != nil { - logger.Errorf("delete plugin failed, %v", err) - return model.ResponsePayload{ - Status: "Failed", - Message: json.RawMessage(fmt.Sprintf("database update failed %v", err)), - }, err - } - return model.ResponsePayload{ Status: "Success", Message: msg, }, nil } - -func InsertToDb(logger logging.Logger, reqData *model.ClimonPostRequest) error { - dbConf, err := cassandra.GetDbConfig() - if err != nil { - return errors.Wrap(err, "failed to store data in database") - } - - db, err := cassandra.NewCassandraStore(dbConf.DbAddresses, dbConf.DbAdminUsername, dbConf.DbAdminPassword) - if err != nil { - return errors.Wrap(err, "failed to store data in database") - } - - if err := db.InsertToolsDb(reqData); err != nil { - return errors.Wrap(err, "failed to store data in database") - } - return nil -} - -func DeleteDbEntry(logger logging.Logger, reqData *model.ClimonDeleteRequest) error { - dbConf, err := cassandra.GetDbConfig() - if err != nil { - return errors.Wrap(err, "failed to delete data in database") - } - - db, err := cassandra.NewCassandraStore(dbConf.DbAddresses, dbConf.DbAdminUsername, dbConf.DbAdminPassword) - if err != nil { - return errors.Wrap(err, "failed to delete data in database") - } - - if err := db.DeleteToolsDbEntry(reqData); err != nil { - return errors.Wrap(err, "failed to delete data in database") - } - return nil -} diff --git a/capten/climon/pkg/application/application.go b/capten/climon/pkg/application/application.go index c26bad8e..c6e9ee1c 100644 --- a/capten/climon/pkg/application/application.go +++ b/capten/climon/pkg/application/application.go @@ -8,12 +8,11 @@ import ( "github.com/go-chi/chi/v5" + "github.com/intelops/go-common/logging" "github.com/kelseyhightower/envconfig" "github.com/kube-tarian/kad/capten/climon/pkg/activities" - "github.com/kube-tarian/kad/capten/climon/pkg/db/cassandra" "github.com/kube-tarian/kad/capten/climon/pkg/handler" "github.com/kube-tarian/kad/capten/climon/pkg/workflows" - "github.com/intelops/go-common/logging" workerframework "github.com/kube-tarian/kad/capten/common-pkg/worker-framework" ) @@ -32,10 +31,9 @@ type Application struct { httpServer *http.Server worker *workerframework.Worker logger logging.Logger - Db cassandra.Store } -func New(logger logging.Logger, db cassandra.Store) *Application { +func New(logger logging.Logger) *Application { cfg := &Configuration{} if err := envconfig.Process("", cfg); err != nil { logger.Fatalf("Could not parse env Config: %v\n", err) @@ -65,7 +63,6 @@ func New(logger logging.Logger, db cassandra.Store) *Application { httpServer: httpServer, worker: worker, logger: logger, - Db: db, } } diff --git a/capten/climon/pkg/db/cassandra/README.md b/capten/climon/pkg/db/cassandra/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/capten/climon/pkg/db/cassandra/cassandra.yaml b/capten/climon/pkg/db/cassandra/cassandra.yaml deleted file mode 100644 index 3e3148b4..00000000 --- a/capten/climon/pkg/db/cassandra/cassandra.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# enable password authentication! -authenticator: PasswordAuthenticator \ No newline at end of file diff --git a/capten/climon/pkg/db/cassandra/cassandra_store.go b/capten/climon/pkg/db/cassandra/cassandra_store.go deleted file mode 100644 index 8c1daee5..00000000 --- a/capten/climon/pkg/db/cassandra/cassandra_store.go +++ /dev/null @@ -1,230 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import ( - "errors" - "fmt" - "strings" - "sync" - "time" - - "github.com/kube-tarian/kad/capten/climon/pkg/types" - - "github.com/kube-tarian/kad/capten/model" - - "github.com/gocql/gocql" - "github.com/intelops/go-common/logging" -) - -const ( - createKeyspaceSchemaChangeCQL = `CREATE KEYSPACE IF NOT EXISTS schema_change WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', %s } AND DURABLE_WRITES = true` - createTableKeyspaceLockCQL = "CREATE TABLE IF NOT EXISTS schema_change.lock(keyspace_to_lock text, started_at timestamp, PRIMARY KEY(keyspace_to_lock)) WITH default_time_to_live = 300" - createKeyspaceCQL = "CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : %s } AND DURABLE_WRITES = true" - createUser = "CREATE USER %s WITH PASSWORD '%s' NOSUPERUSER;" - alterUser = "ALTER USER %s WITH PASSWORD '%s' NOSUPERUSER;" - grantPermission = "GRANT ALL PERMISSIONS ON KEYSPACE %s TO %s ;" - grantSchemaChangeLockSelectPermission = "GRANT SELECT ON TABLE schema_change.lock TO %s ;" - grantSchemaChangeLockModifyPermission = "GRANT MODIFY ON TABLE schema_change.lock TO %s ;" - createToolsTableCQL = "CREATE TABLE IF NOT EXISTS %s.tools ( name text, repo_name text, repo_url text, chart_name text, namespace text, release_name text, version text, PRIMARY KEY (name))" - captenKeyspace = "capten" - insertToolsCQL = `INSERT INTO capten.tools (name, repo_name, repo_url, chart_name, namespace, release_name, version) VALUES (?, ?, ?, ?, ?, ?, ?)` - deleteToolsCQL = "DELETE FROM capten.tools where name='%s' if exists" -) - -type cassandraStore struct { - log logging.Logger - session *gocql.Session -} - -var ( - cassandraStoreObj *cassandraStore - once sync.Once -) - -func NewCassandraStore(dbAddress []string, username, password string) (Store, error) { - var err error - once.Do(func() { - cassandraStoreObj = &cassandraStore{} - cassandraStoreObj.session, err = Connect(dbAddress, username, password) - }) - - return cassandraStoreObj, err -} - -func Connect(dbAddress []string, dbAdminUsername string, dbAdminPassword string) (*gocql.Session, error) { - cluster, err := configureClusterConfig(dbAddress, dbAdminUsername, dbAdminPassword) - if err != nil { - return nil, err - } - - return createDbSession(cluster) -} - -func GetStore() *cassandraStore { - return cassandraStoreObj -} - -func (c *cassandraStore) Close() { - c.session.Close() -} -func (c *cassandraStore) CreateDbUser(serviceUsername string, servicePassword string) (err error) { - // Create database user for service usage - err = c.session.Query(fmt.Sprintf(createUser, serviceUsername, servicePassword)).Exec() - if err != nil { - if strings.Contains(err.Error(), "already exists") { - return c.updateDbUser(serviceUsername, servicePassword) - } else { - c.log.Error("Unable to create service user", err) - return - } - } - return -} - -func (c *cassandraStore) GrantPermission(serviceUsername string, dbName string) (err error) { - err = c.session.Query(fmt.Sprintf(grantSchemaChangeLockSelectPermission, serviceUsername)).Exec() - if err != nil { - c.log.Error("Unable to grant select permission to service user on schema_change.lock table", err) - return - } - - err = c.session.Query(fmt.Sprintf(grantSchemaChangeLockModifyPermission, serviceUsername)).Exec() - if err != nil { - c.log.Error("Unable to grant modify permission to service user on schema_change.lock table", err) - return - } - - err = c.session.Query(fmt.Sprintf(grantPermission, dbName, serviceUsername)).Exec() - if err != nil { - c.log.Error("Unable to grant permission to service user", err) - return - } - - return -} - -func (c *cassandraStore) CreateDb(keyspace, dbName string, replicationFactor string) error { - if err := c.session.Query(fmt.Sprintf(createKeyspaceCQL, keyspace, replicationFactor)).Exec(); err != nil { - c.log.Error("Unable to create the keyspace", err) - return err - } - - if err := c.session.Query(fmt.Sprintf(createToolsTableCQL, keyspace)).Exec(); err != nil { - c.log.Error("Unable to create the tools table", err) - return err - } - - return nil -} - -func (c *cassandraStore) CreateLockSchemaDb(replicationFactor string) (err error) { - // Create keyspace only if it does not already exist - err = c.session.Query(fmt.Sprintf(createKeyspaceSchemaChangeCQL, replicationFactor)).Exec() - if err != nil { - c.log.Error("Unable to create the schema_change keyspace", err) - return - } - - // Create table only if it does not already exist - err = retry(3, 2*time.Second, func() (err error) { - err = c.session.Query(createTableKeyspaceLockCQL).Exec() - if err != nil { - return err - } - return nil - }) - if err != nil { - c.log.Error("Unable to create the schema_change.lock table", err) - return - } - - return -} - -func configureClusterConfig(addrs []string, adminUsername string, adminPassword string) (cluster *gocql.ClusterConfig, err error) { - if len(addrs) == 0 { - err = errors.New("you must specify a Cassandra address to connect to") - return - } - - cluster = gocql.NewCluster(addrs...) - cluster.Consistency = gocql.One - cluster.Timeout = 20 * time.Second - cluster.ConnectTimeout = 20 * time.Second - - if adminUsername != "" { - cluster.Authenticator = gocql.PasswordAuthenticator{ - Username: adminUsername, - Password: adminPassword, - } - } - - return -} - -func createDbSession(cluster *gocql.ClusterConfig) (session *gocql.Session, err error) { - session, err = cluster.CreateSession() - if err != nil { - return nil, err - } - - return -} - -func (c *cassandraStore) updateDbUser(serviceUsername string, servicePassword string) (err error) { - // alter database user for service usage - err = c.session.Query(fmt.Sprintf(alterUser, serviceUsername, servicePassword)).Exec() - if err != nil { - c.log.Error("Unable to update service user, failed with error : ", err) - return - } - return -} - -func retry(attempts int, sleep time.Duration, f func() error) (err error) { - for i := 0; ; i++ { - err = f() - if err == nil { - return - } - - if i >= (attempts - 1) { - break - } - time.Sleep(sleep) - } - return -} - -func (c *cassandraStore) InsertToolsDb(data *model.ClimonPostRequest) error { - return c.session.Query(insertToolsCQL, - data.ReleaseName, - data.RepoName, - data.RepoUrl, - data.ChartName, - data.Namespace, - data.ReleaseName, - data.Version).Exec() -} - -func (c *cassandraStore) InsertApps(apps []types.App) error { - for _, app := range apps { - err := c.session.Query(insertToolsCQL, - app.ReleaseName, - app.RepoName, - app.RepoURL, - app.ChartName, - app.Namespace, - app.ReleaseName, - app.Version).Exec() - if err != nil { - return err - } - } - - return nil -} - -func (c *cassandraStore) DeleteToolsDbEntry(data *model.ClimonDeleteRequest) error { - return c.session.Query(fmt.Sprintf(deleteToolsCQL, data.ReleaseName)).Exec() -} diff --git a/capten/climon/pkg/db/cassandra/db_config.go b/capten/climon/pkg/db/cassandra/db_config.go deleted file mode 100644 index 782995e5..00000000 --- a/capten/climon/pkg/db/cassandra/db_config.go +++ /dev/null @@ -1,28 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import ( - "github.com/kube-tarian/kad/capten/climon/pkg/types" - "github.com/kube-tarian/kad/capten/model" -) - -type DBConfig struct { - DbAddresses []string `envconfig:"CASSANDRA_SERVICE_URL" default:"localhost:9042"` - DbAdminUsername string `envconfig:"CASSANDRA_USERNAME" default:"user"` - DbServiceUsername string `envconfig:"DB_SERVICE_USERNAME" default:"user"` - DbName string `envconfig:"CASSANDRA_KEYSPACE_NAME" default:"capten"` - DbReplicationFactor string `envconfig:"DB_REPLICATION_FACTOR" default:"1"` - DbAdminPassword string `envconfig:"CASSANDRA_PASSWORD" default:"password"` - DbServicePassword string `envconfig:"DB_SERVICE_PASSWD" default:"password"` -} - -type Store interface { - Close() - InsertToolsDb(data *model.ClimonPostRequest) error - InsertApps(apps []types.App) error - DeleteToolsDbEntry(data *model.ClimonDeleteRequest) error - CreateDbUser(serviceUsername string, servicePassword string) (err error) - GrantPermission(serviceUsername string, dbName string) (err error) - CreateDb(keyspace, dbName string, replicationFactor string) (err error) - CreateLockSchemaDb(replicationFactor string) (err error) -} diff --git a/capten/climon/pkg/db/cassandra/db_configurator.go b/capten/climon/pkg/db/cassandra/db_configurator.go deleted file mode 100644 index 1f5a0783..00000000 --- a/capten/climon/pkg/db/cassandra/db_configurator.go +++ /dev/null @@ -1,35 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import ( - "github.com/intelops/go-common/logging" -) - -type DbConfigurator struct { - logg logging.Logger - store Store -} - -func NewDbConfigurator(logger logging.Logger, store Store) (handler *DbConfigurator) { - handler = &DbConfigurator{ - logg: logger, - store: store, - } - - return -} - -func (dbConf *DbConfigurator) ConfigureDb(conf DBConfig) (err error) { - //dbConf.logg.Debug("Creating new db cluster configuration") - //err = dbConf.store.Connect(conf.DbAddresses, conf.DbAdminUsername, conf.DbAdminPassword) - //if err != nil { - // return - //} - - dbConf.logg.Infof("Creating new db %s with %s", conf.DbName, conf.DbReplicationFactor) - err = dbConf.store.CreateDb(captenKeyspace, conf.DbName, conf.DbReplicationFactor) - if err != nil { - return - } - return -} diff --git a/capten/climon/pkg/db/cassandra/db_creation.go b/capten/climon/pkg/db/cassandra/db_creation.go deleted file mode 100644 index f0916907..00000000 --- a/capten/climon/pkg/db/cassandra/db_creation.go +++ /dev/null @@ -1,39 +0,0 @@ -// Package cassandra contains ... -package cassandra - -import ( - "github.com/kelseyhightower/envconfig" - "github.com/intelops/go-common/logging" -) - -func Create(log logging.Logger) (Store, error) { - dbConf, err := GetDbConfig() - if err != nil { - log.Errorf("failed to parse db config", err) - return nil, err - } - - dbStore, err := NewCassandraStore(dbConf.DbAddresses, dbConf.DbAdminUsername, dbConf.DbAdminPassword) - if err != nil { - log.Errorf("failed to connect to ca") - return nil, err - } - - dbConfigurator := NewDbConfigurator(log, dbStore) - log.Info("Start DB configuration") - if err := dbConfigurator.ConfigureDb(*dbConf); err != nil { - log.Errorf("Could not configure db properly err: %s", err) - return nil, err - } - - return dbStore, nil -} - -func GetDbConfig() (*DBConfig, error) { - dbConf := &DBConfig{} - if err := envconfig.Process("", dbConf); err != nil { - return nil, err - } - - return dbConf, nil -} diff --git a/capten/climon/pkg/db/db.go b/capten/climon/pkg/db/db.go deleted file mode 100644 index d9369055..00000000 --- a/capten/climon/pkg/db/db.go +++ /dev/null @@ -1,73 +0,0 @@ -package db - -import ( - "fmt" - "log" - "os" - "sync" - - "github.com/gocql/gocql" -) - -const ( - keyspace = "capten" -) - -type cassandra struct { - session *gocql.Session -} - -var ( - cassandraSession *cassandra - once sync.Once -) - -func New() (*cassandra, error) { - var err error - once.Do(func() { - cassandraSession = &cassandra{} - cassandraSession.session, err = connect() - if err != nil { - log.Println("failed to connect to cassandra") - } - }) - - return cassandraSession, err -} - -func connect() (*gocql.Session, error) { - cluster := gocql.NewCluster(os.Getenv("CASSANDRA_HOST")) - cluster.Keyspace = keyspace - cluster.Consistency = gocql.Quorum - cluster.Authenticator = gocql.PasswordAuthenticator{ - Username: os.Getenv("CASSANDRA_USERNAME"), - Password: os.Getenv("CASSANDRA_PASSWORD"), - } - - session, err := cluster.CreateSession() - if err != nil { - return nil, fmt.Errorf("failed to create c") - } - - return session, nil -} - -func (c *cassandra) GetEndpoint(customerID string) (string, error) { - var endpoint string - iter := c.session.Query(`SELECT endpoint FROM endpoints WHERE customer_id = ?`, customerID).Iter() - iter.Scan(&endpoint) - if err := iter.Close(); err != nil { - return "", fmt.Errorf("failed to close the db iterator %v", err) - } - - return endpoint, nil -} - -func (c *cassandra) RegisterEndpoint(customerID, endpoint string) error { - if err := c.session.Query(`INSERT INTO endpoints (customer_id, endpoint) VALUES (?, ?)`, - customerID, endpoint).Exec(); err != nil { - return err - } - - return nil -} diff --git a/capten/climon/pkg/temporal/client.go b/capten/climon/pkg/temporal/client.go deleted file mode 100644 index 95a7193d..00000000 --- a/capten/climon/pkg/temporal/client.go +++ /dev/null @@ -1,59 +0,0 @@ -package temporal - -import ( - "log" - - "github.com/pkg/errors" - - tc "go.temporal.io/sdk/client" - tw "go.temporal.io/sdk/worker" -) - -type Client struct { - options tc.Options - temporalClient tc.Client - worker tw.Worker -} - -func NewClient(address string) (*Client, error) { - options := tc.Options{ - HostPort: address, - } - - temporalClient, err := tc.Dial(options) - if err != nil { - log.Println("failed to dail temporal", err) - return nil, err - } - - return &Client{ - options: options, - temporalClient: temporalClient, - }, nil -} - -func (c *Client) Close() { - c.worker.Stop() - c.temporalClient.Close() -} - -func (c *Client) CreateWorker(taskQue string) { - c.worker = tw.New(c.temporalClient, taskQue, tw.Options{}) -} - -func (c *Client) RegisterWorkflow(workflow interface{}) { - c.worker.RegisterWorkflow(workflow) -} - -func (c *Client) RegisterActivity(activity interface{}) { - c.worker.RegisterActivity(activity) -} - -func (c *Client) StartWorker() error { - log.Println("starting the worker") - err := c.worker.Run(tw.InterruptCh()) - if err != nil { - return errors.Wrapf(err, "unable to start the worker") - } - return nil -} diff --git a/capten/climon/pkg/temporal/syncworker.go b/capten/climon/pkg/temporal/syncworker.go deleted file mode 100644 index bdd7783c..00000000 --- a/capten/climon/pkg/temporal/syncworker.go +++ /dev/null @@ -1,83 +0,0 @@ -package temporal - -import ( - "context" - "fmt" - "time" - - "github.com/kube-tarian/kad/capten/climon/pkg/db/cassandra" - "github.com/kube-tarian/kad/capten/climon/pkg/types" - - "github.com/pkg/errors" - - "go.temporal.io/sdk/temporal" - "go.temporal.io/sdk/workflow" -) - -const ( - SyncTaskQueue = "SYNC_TASK_QUEUE" -) - -type syncWorker struct { - temporalClient *Client - db cassandra.Store -} - -type SyncDataRequest struct { - Type string `json:"type"` - Apps []types.App `json:"apps"` -} - -func NewSyncWorker(address string) (Worker, error) { - temporalClient, err := NewClient(address) - if err != nil { - return nil, errors.Wrap(err, "unable to create Temporal client") - } - - db := cassandra.GetStore() - syncWorkerObj := syncWorker{temporalClient: temporalClient, db: db} - temporalClient.CreateWorker(SyncTaskQueue) - temporalClient.RegisterWorkflow(syncWorkerObj.SyncWorkflow) - temporalClient.RegisterActivity(syncWorkerObj.SyncActivity) - return &syncWorkerObj, nil -} - -func (s *syncWorker) Start() error { - return s.temporalClient.StartWorker() -} - -func (s *syncWorker) Stop() error { - s.temporalClient.Close() - return nil -} - -func (s *syncWorker) SyncWorkflow(ctx workflow.Context, request SyncDataRequest) error { - // RetryPolicy specifies how to automatically handle retries if an Activity fails. - retryPolicy := &temporal.RetryPolicy{ - InitialInterval: time.Second, - BackoffCoefficient: 2.0, - MaximumInterval: time.Minute, - MaximumAttempts: 5, - } - - options := workflow.ActivityOptions{ - // Timeout options specify when to automatically timeout Activity functions. - StartToCloseTimeout: time.Minute, - // Optionally provide a customized RetryPolicy. - // Temporal retries failures by default, this is just an example. - RetryPolicy: retryPolicy, - } - - ctx = workflow.WithActivityOptions(ctx, options) - err := workflow.ExecuteActivity(ctx, s.SyncActivity, request).Get(ctx, nil) - if err != nil { - return errors.Wrapf(err, "failed to deploy") - } - - return nil -} - -func (s *syncWorker) SyncActivity(ctx context.Context, request SyncDataRequest) error { - fmt.Printf("%+v", request) - return s.db.InsertApps(request.Apps) -} diff --git a/capten/climon/pkg/temporal/worker.go b/capten/climon/pkg/temporal/worker.go deleted file mode 100644 index 168b2599..00000000 --- a/capten/climon/pkg/temporal/worker.go +++ /dev/null @@ -1,58 +0,0 @@ -package temporal - -import ( - "fmt" -) - -type Worker interface { - Start() error - Stop() error -} - -var workersInitFuncMap = map[string]func(address string) (Worker, error){ - "SyncWorker": NewSyncWorker, -} - -type worker struct { - temporalAddress string - startedWorkers map[string]Worker -} - -func New(address string) *worker { - return &worker{ - temporalAddress: address, - startedWorkers: make(map[string]Worker), - } -} - -func (w *worker) StartWorkers() error { - for name, initFunc := range workersInitFuncMap { - workerObj, err := initFunc(w.temporalAddress) - if err != nil { - return fmt.Errorf("failed to create worker: %s err: %v", name, err) - } - - var workerError error - go func() { - if err := workerObj.Start(); err != nil { - workerError = fmt.Errorf("failed to start worker: %s, err: %v", name, err) - } - }() - - if workerError != nil { - return workerError - } - - w.startedWorkers[name] = workerObj - } - - return nil -} - -func (w *worker) StopWorkers() { - for name, workerObj := range w.startedWorkers { - if err := workerObj.Stop(); err != nil { - fmt.Println("error stopping worker:", name) - } - } -} diff --git a/capten/climon/pkg/types/type.go b/capten/climon/pkg/types/type.go deleted file mode 100644 index 9eab7c5d..00000000 --- a/capten/climon/pkg/types/type.go +++ /dev/null @@ -1,13 +0,0 @@ -package types - -type App struct { - Name string `json:"Name"` - ChartName string `json:"ChartName"` - RepoName string `json:"RepoName"` - RepoURL string `json:"RepoURL"` - Namespace string `json:"Namespace"` - ReleaseName string `json:"ReleaseName"` - Version string `json:"Version"` - CreateNamespace bool `json:"CreateNamespace"` - Override map[string]interface{} `json:"Override"` -} diff --git a/proto/agent.proto b/proto/agent.proto index 7f2d8a5f..9373b92c 100644 --- a/proto/agent.proto +++ b/proto/agent.proto @@ -13,7 +13,6 @@ service Agent { rpc SubmitJob (JobRequest) returns (JobResponse) {} rpc StoreCredential (StoreCredentialRequest) returns (StoreCredentialResponse) {} - rpc Sync(SyncRequest) returns (SyncResponse) {} rpc ClimonAppInstall (ClimonInstallRequest) returns (JobResponse) {} rpc ClimonAppDelete (ClimonDeleteRequest) returns (JobResponse) {} @@ -64,16 +63,6 @@ message StoreCredentialResponse { string statusMessage = 2; } -message SyncRequest { - string type = 1; - string data = 2; -} - -message SyncResponse { - string status = 1; - string message = 2; -} - message ClimonInstallRequest { string plugin_name = 1; string repo_name = 2; diff --git a/server/pkg/handler/handle_agent.go b/server/pkg/handler/handle_agent.go index 28eea561..75a11f24 100644 --- a/server/pkg/handler/handle_agent.go +++ b/server/pkg/handler/handle_agent.go @@ -1,14 +1,10 @@ package handler import ( - "context" "errors" - "fmt" - "io" "net/http" "github.com/kube-tarian/kad/server/pkg/credential" - "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/gin-gonic/gin" @@ -85,32 +81,5 @@ func (a *APIHandler) PutAgentEndpoint(c *gin.Context) { } func (a *APIHandler) PostAgentApps(c *gin.Context) { - jsonData, err := io.ReadAll(c.Request.Body) - if err != nil { - a.setFailedResponse(c, "failed to read payload", err) - return - } - - fmt.Println("body is", string(jsonData)) - syncData := &agentpb.SyncRequest{ - Type: "app-data", - Data: string(jsonData), - } - - customerId := c.GetHeader("customer_id") - if customerId == "" { - a.setFailedResponse(c, "missing customer id header", errors.New("")) - return - } - - agent, err := a.agentHandler.GetAgent(customerId, "") - if err != nil { - a.setFailedResponse(c, fmt.Sprintf("unregistered customer %v", "1"), errors.New("")) - return - } - - response, err := agent.GetClient().Sync(context.Background(), syncData) - - a.log.Debug("response ") - fmt.Printf("response %+v, err: %v\n", response, err) + a.setFailedResponse(c, "not implemented", errors.New("")) } diff --git a/server/pkg/pb/agentpb/agent.pb.go b/server/pkg/pb/agentpb/agent.pb.go index f4f46ac9..9e886f67 100644 --- a/server/pkg/pb/agentpb/agent.pb.go +++ b/server/pkg/pb/agentpb/agent.pb.go @@ -284,116 +284,6 @@ func (x *StoreCredentialResponse) GetStatusMessage() string { return "" } -type SyncRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Data string `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *SyncRequest) Reset() { - *x = SyncRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncRequest) ProtoMessage() {} - -func (x *SyncRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[4] - 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 SyncRequest.ProtoReflect.Descriptor instead. -func (*SyncRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{4} -} - -func (x *SyncRequest) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *SyncRequest) GetData() string { - if x != nil { - return x.Data - } - return "" -} - -type SyncResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *SyncResponse) Reset() { - *x = SyncResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncResponse) ProtoMessage() {} - -func (x *SyncResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[5] - 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 SyncResponse.ProtoReflect.Descriptor instead. -func (*SyncResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{5} -} - -func (x *SyncResponse) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *SyncResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - type ClimonInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -413,7 +303,7 @@ type ClimonInstallRequest struct { func (x *ClimonInstallRequest) Reset() { *x = ClimonInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +316,7 @@ func (x *ClimonInstallRequest) String() string { func (*ClimonInstallRequest) ProtoMessage() {} func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[6] + mi := &file_agent_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +329,7 @@ func (x *ClimonInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonInstallRequest.ProtoReflect.Descriptor instead. func (*ClimonInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{6} + return file_agent_proto_rawDescGZIP(), []int{4} } func (x *ClimonInstallRequest) GetPluginName() string { @@ -520,7 +410,7 @@ type ClimonDeleteRequest struct { func (x *ClimonDeleteRequest) Reset() { *x = ClimonDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -533,7 +423,7 @@ func (x *ClimonDeleteRequest) String() string { func (*ClimonDeleteRequest) ProtoMessage() {} func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[7] + mi := &file_agent_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -546,7 +436,7 @@ func (x *ClimonDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClimonDeleteRequest.ProtoReflect.Descriptor instead. func (*ClimonDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{7} + return file_agent_proto_rawDescGZIP(), []int{5} } func (x *ClimonDeleteRequest) GetPluginName() string { @@ -603,7 +493,7 @@ type ApplicationInstallRequest struct { func (x *ApplicationInstallRequest) Reset() { *x = ApplicationInstallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +506,7 @@ func (x *ApplicationInstallRequest) String() string { func (*ApplicationInstallRequest) ProtoMessage() {} func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[8] + mi := &file_agent_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +519,7 @@ func (x *ApplicationInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationInstallRequest.ProtoReflect.Descriptor instead. func (*ApplicationInstallRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{8} + return file_agent_proto_rawDescGZIP(), []int{6} } func (x *ApplicationInstallRequest) GetPluginName() string { @@ -710,7 +600,7 @@ type ApplicationDeleteRequest struct { func (x *ApplicationDeleteRequest) Reset() { *x = ApplicationDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -723,7 +613,7 @@ func (x *ApplicationDeleteRequest) String() string { func (*ApplicationDeleteRequest) ProtoMessage() {} func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[9] + mi := &file_agent_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -736,7 +626,7 @@ func (x *ApplicationDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationDeleteRequest.ProtoReflect.Descriptor instead. func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{9} + return file_agent_proto_rawDescGZIP(), []int{7} } func (x *ApplicationDeleteRequest) GetPluginName() string { @@ -786,7 +676,7 @@ type ClusterRequest struct { func (x *ClusterRequest) Reset() { *x = ClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -799,7 +689,7 @@ func (x *ClusterRequest) String() string { func (*ClusterRequest) ProtoMessage() {} func (x *ClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[10] + mi := &file_agent_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -812,7 +702,7 @@ func (x *ClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterRequest.ProtoReflect.Descriptor instead. func (*ClusterRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{10} + return file_agent_proto_rawDescGZIP(), []int{8} } func (x *ClusterRequest) GetPluginName() string { @@ -842,7 +732,7 @@ type RepositoryAddRequest struct { func (x *RepositoryAddRequest) Reset() { *x = RepositoryAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -855,7 +745,7 @@ func (x *RepositoryAddRequest) String() string { func (*RepositoryAddRequest) ProtoMessage() {} func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[11] + mi := &file_agent_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -868,7 +758,7 @@ func (x *RepositoryAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryAddRequest.ProtoReflect.Descriptor instead. func (*RepositoryAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{11} + return file_agent_proto_rawDescGZIP(), []int{9} } func (x *RepositoryAddRequest) GetPluginName() string { @@ -904,7 +794,7 @@ type RepositoryDeleteRequest struct { func (x *RepositoryDeleteRequest) Reset() { *x = RepositoryDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -917,7 +807,7 @@ func (x *RepositoryDeleteRequest) String() string { func (*RepositoryDeleteRequest) ProtoMessage() {} func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[12] + mi := &file_agent_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -930,7 +820,7 @@ func (x *RepositoryDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryDeleteRequest.ProtoReflect.Descriptor instead. func (*RepositoryDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{12} + return file_agent_proto_rawDescGZIP(), []int{10} } func (x *RepositoryDeleteRequest) GetPluginName() string { @@ -959,7 +849,7 @@ type ProjectAddRequest struct { func (x *ProjectAddRequest) Reset() { *x = ProjectAddRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -972,7 +862,7 @@ func (x *ProjectAddRequest) String() string { func (*ProjectAddRequest) ProtoMessage() {} func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[13] + mi := &file_agent_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -985,7 +875,7 @@ func (x *ProjectAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectAddRequest.ProtoReflect.Descriptor instead. func (*ProjectAddRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{13} + return file_agent_proto_rawDescGZIP(), []int{11} } func (x *ProjectAddRequest) GetPluginName() string { @@ -1014,7 +904,7 @@ type ProjectDeleteRequest struct { func (x *ProjectDeleteRequest) Reset() { *x = ProjectDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1027,7 +917,7 @@ func (x *ProjectDeleteRequest) String() string { func (*ProjectDeleteRequest) ProtoMessage() {} func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[14] + mi := &file_agent_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,7 +930,7 @@ func (x *ProjectDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectDeleteRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{14} + return file_agent_proto_rawDescGZIP(), []int{12} } func (x *ProjectDeleteRequest) GetPluginName() string { @@ -1069,7 +959,7 @@ type JobRequest struct { func (x *JobRequest) Reset() { *x = JobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +972,7 @@ func (x *JobRequest) String() string { func (*JobRequest) ProtoMessage() {} func (x *JobRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[15] + mi := &file_agent_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +985,7 @@ func (x *JobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. func (*JobRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{15} + return file_agent_proto_rawDescGZIP(), []int{13} } func (x *JobRequest) GetOperation() string { @@ -1125,7 +1015,7 @@ type JobResponse struct { func (x *JobResponse) Reset() { *x = JobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1138,7 +1028,7 @@ func (x *JobResponse) String() string { func (*JobResponse) ProtoMessage() {} func (x *JobResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[16] + mi := &file_agent_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1151,7 +1041,7 @@ func (x *JobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. func (*JobResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{16} + return file_agent_proto_rawDescGZIP(), []int{14} } func (x *JobResponse) GetId() string { @@ -1186,7 +1076,7 @@ type SyncAppRequest struct { func (x *SyncAppRequest) Reset() { *x = SyncAppRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1199,7 +1089,7 @@ func (x *SyncAppRequest) String() string { func (*SyncAppRequest) ProtoMessage() {} func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[17] + mi := &file_agent_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1212,7 +1102,7 @@ func (x *SyncAppRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppRequest.ProtoReflect.Descriptor instead. func (*SyncAppRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{17} + return file_agent_proto_rawDescGZIP(), []int{15} } func (x *SyncAppRequest) GetData() *SyncAppData { @@ -1234,7 +1124,7 @@ type SyncAppResponse struct { func (x *SyncAppResponse) Reset() { *x = SyncAppResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1137,7 @@ func (x *SyncAppResponse) String() string { func (*SyncAppResponse) ProtoMessage() {} func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[18] + mi := &file_agent_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1150,7 @@ func (x *SyncAppResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppResponse.ProtoReflect.Descriptor instead. func (*SyncAppResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{18} + return file_agent_proto_rawDescGZIP(), []int{16} } func (x *SyncAppResponse) GetStatus() StatusCode { @@ -1286,7 +1176,7 @@ type GetClusterAppsRequest struct { func (x *GetClusterAppsRequest) Reset() { *x = GetClusterAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1189,7 @@ func (x *GetClusterAppsRequest) String() string { func (*GetClusterAppsRequest) ProtoMessage() {} func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[19] + mi := &file_agent_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,7 +1202,7 @@ func (x *GetClusterAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppsRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{19} + return file_agent_proto_rawDescGZIP(), []int{17} } type GetClusterAppsResponse struct { @@ -1328,7 +1218,7 @@ type GetClusterAppsResponse struct { func (x *GetClusterAppsResponse) Reset() { *x = GetClusterAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1341,7 +1231,7 @@ func (x *GetClusterAppsResponse) String() string { func (*GetClusterAppsResponse) ProtoMessage() {} func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[20] + mi := &file_agent_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1354,7 +1244,7 @@ func (x *GetClusterAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppsResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppsResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{20} + return file_agent_proto_rawDescGZIP(), []int{18} } func (x *GetClusterAppsResponse) GetStatus() StatusCode { @@ -1387,7 +1277,7 @@ type GetClusterAppLaunchesRequest struct { func (x *GetClusterAppLaunchesRequest) Reset() { *x = GetClusterAppLaunchesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1400,7 +1290,7 @@ func (x *GetClusterAppLaunchesRequest) String() string { func (*GetClusterAppLaunchesRequest) ProtoMessage() {} func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[21] + mi := &file_agent_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1413,7 +1303,7 @@ func (x *GetClusterAppLaunchesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{21} + return file_agent_proto_rawDescGZIP(), []int{19} } type GetClusterAppLaunchesResponse struct { @@ -1429,7 +1319,7 @@ type GetClusterAppLaunchesResponse struct { func (x *GetClusterAppLaunchesResponse) Reset() { *x = GetClusterAppLaunchesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1442,7 +1332,7 @@ func (x *GetClusterAppLaunchesResponse) String() string { func (*GetClusterAppLaunchesResponse) ProtoMessage() {} func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[22] + mi := &file_agent_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1455,7 +1345,7 @@ func (x *GetClusterAppLaunchesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppLaunchesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppLaunchesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{22} + return file_agent_proto_rawDescGZIP(), []int{20} } func (x *GetClusterAppLaunchesResponse) GetStatus() StatusCode { @@ -1490,7 +1380,7 @@ type GetClusterAppConfigRequest struct { func (x *GetClusterAppConfigRequest) Reset() { *x = GetClusterAppConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1503,7 +1393,7 @@ func (x *GetClusterAppConfigRequest) String() string { func (*GetClusterAppConfigRequest) ProtoMessage() {} func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[23] + mi := &file_agent_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1516,7 +1406,7 @@ func (x *GetClusterAppConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{23} + return file_agent_proto_rawDescGZIP(), []int{21} } func (x *GetClusterAppConfigRequest) GetReleaseName() string { @@ -1539,7 +1429,7 @@ type GetClusterAppConfigResponse struct { func (x *GetClusterAppConfigResponse) Reset() { *x = GetClusterAppConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1552,7 +1442,7 @@ func (x *GetClusterAppConfigResponse) String() string { func (*GetClusterAppConfigResponse) ProtoMessage() {} func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[24] + mi := &file_agent_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1565,7 +1455,7 @@ func (x *GetClusterAppConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppConfigResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppConfigResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{24} + return file_agent_proto_rawDescGZIP(), []int{22} } func (x *GetClusterAppConfigResponse) GetStatus() StatusCode { @@ -1600,7 +1490,7 @@ type GetClusterAppValuesRequest struct { func (x *GetClusterAppValuesRequest) Reset() { *x = GetClusterAppValuesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1613,7 +1503,7 @@ func (x *GetClusterAppValuesRequest) String() string { func (*GetClusterAppValuesRequest) ProtoMessage() {} func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[25] + mi := &file_agent_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1626,7 +1516,7 @@ func (x *GetClusterAppValuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesRequest.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesRequest) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{25} + return file_agent_proto_rawDescGZIP(), []int{23} } func (x *GetClusterAppValuesRequest) GetReleaseName() string { @@ -1649,7 +1539,7 @@ type GetClusterAppValuesResponse struct { func (x *GetClusterAppValuesResponse) Reset() { *x = GetClusterAppValuesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1662,7 +1552,7 @@ func (x *GetClusterAppValuesResponse) String() string { func (*GetClusterAppValuesResponse) ProtoMessage() {} func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[26] + mi := &file_agent_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1675,7 +1565,7 @@ func (x *GetClusterAppValuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClusterAppValuesResponse.ProtoReflect.Descriptor instead. func (*GetClusterAppValuesResponse) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{26} + return file_agent_proto_rawDescGZIP(), []int{24} } func (x *GetClusterAppValuesResponse) GetStatus() StatusCode { @@ -1711,7 +1601,7 @@ type SyncAppData struct { func (x *SyncAppData) Reset() { *x = SyncAppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1724,7 +1614,7 @@ func (x *SyncAppData) String() string { func (*SyncAppData) ProtoMessage() {} func (x *SyncAppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[27] + mi := &file_agent_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1737,7 +1627,7 @@ func (x *SyncAppData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncAppData.ProtoReflect.Descriptor instead. func (*SyncAppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{27} + return file_agent_proto_rawDescGZIP(), []int{25} } func (x *SyncAppData) GetConfig() *AppConfig { @@ -1766,7 +1656,7 @@ type AppData struct { func (x *AppData) Reset() { *x = AppData{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1779,7 +1669,7 @@ func (x *AppData) String() string { func (*AppData) ProtoMessage() {} func (x *AppData) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[28] + mi := &file_agent_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1792,7 +1682,7 @@ func (x *AppData) ProtoReflect() protoreflect.Message { // Deprecated: Use AppData.ProtoReflect.Descriptor instead. func (*AppData) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{28} + return file_agent_proto_rawDescGZIP(), []int{26} } func (x *AppData) GetConfig() *AppConfig { @@ -1820,7 +1710,7 @@ type AppStatus struct { func (x *AppStatus) Reset() { *x = AppStatus{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1833,7 +1723,7 @@ func (x *AppStatus) String() string { func (*AppStatus) ProtoMessage() {} func (x *AppStatus) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[29] + mi := &file_agent_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1846,7 +1736,7 @@ func (x *AppStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AppStatus.ProtoReflect.Descriptor instead. func (*AppStatus) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{29} + return file_agent_proto_rawDescGZIP(), []int{27} } func (x *AppStatus) GetRuntimeStatus() string { @@ -1881,7 +1771,7 @@ type AppConfig struct { func (x *AppConfig) Reset() { *x = AppConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1894,7 +1784,7 @@ func (x *AppConfig) String() string { func (*AppConfig) ProtoMessage() {} func (x *AppConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[30] + mi := &file_agent_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +1797,7 @@ func (x *AppConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppConfig.ProtoReflect.Descriptor instead. func (*AppConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{30} + return file_agent_proto_rawDescGZIP(), []int{28} } func (x *AppConfig) GetReleaseName() string { @@ -2027,7 +1917,7 @@ type AppValues struct { func (x *AppValues) Reset() { *x = AppValues{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[31] + mi := &file_agent_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2040,7 +1930,7 @@ func (x *AppValues) String() string { func (*AppValues) ProtoMessage() {} func (x *AppValues) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[31] + mi := &file_agent_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2053,7 +1943,7 @@ func (x *AppValues) ProtoReflect() protoreflect.Message { // Deprecated: Use AppValues.ProtoReflect.Descriptor instead. func (*AppValues) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{31} + return file_agent_proto_rawDescGZIP(), []int{29} } func (x *AppValues) GetOverrideValues() []byte { @@ -2086,7 +1976,7 @@ type AppLaunchConfig struct { func (x *AppLaunchConfig) Reset() { *x = AppLaunchConfig{} if protoimpl.UnsafeEnabled { - mi := &file_agent_proto_msgTypes[32] + mi := &file_agent_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2099,7 +1989,7 @@ func (x *AppLaunchConfig) String() string { func (*AppLaunchConfig) ProtoMessage() {} func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { - mi := &file_agent_proto_msgTypes[32] + mi := &file_agent_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2112,7 +2002,7 @@ func (x *AppLaunchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLaunchConfig.ProtoReflect.Descriptor instead. func (*AppLaunchConfig) Descriptor() ([]byte, []int) { - return file_agent_proto_rawDescGZIP(), []int{32} + return file_agent_proto_rawDescGZIP(), []int{30} } func (x *AppLaunchConfig) GetReleaseName() string { @@ -2192,267 +2082,256 @@ var file_agent_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x35, - 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, - 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, - 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, + 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, + 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 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, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x6d, + 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, + 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, 0x21, + 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, + 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, + 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, 0x0a, + 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 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, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, + 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, - 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, - 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, + 0x57, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, + 0x0a, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x57, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x22, + 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, + 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x97, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, + 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, - 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, - 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x61, 0x70, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, - 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, - 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, - 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, - 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x70, + 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, + 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x61, 0x0a, + 0x07, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x41, + 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x31, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0xf3, 0x03, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, + 0x68, 0x55, 0x52, 0x4c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, - 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, - 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x03, 0x32, 0xa5, 0x0b, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, - 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, - 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, - 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x14, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5b, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, + 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, + 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x49, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x55, 0x52, 0x4c, 0x12, 0x2c, 0x0a, 0x11, + 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, + 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x52, 0x41, 0x4c, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x32, 0xee, 0x0a, 0x0a, 0x05, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, @@ -2543,104 +2422,100 @@ func file_agent_proto_rawDescGZIP() []byte { } var file_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 34) +var file_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_agent_proto_goTypes = []interface{}{ (StatusCode)(0), // 0: agentpb.StatusCode (*PingRequest)(nil), // 1: agentpb.PingRequest (*PingResponse)(nil), // 2: agentpb.PingResponse (*StoreCredentialRequest)(nil), // 3: agentpb.StoreCredentialRequest (*StoreCredentialResponse)(nil), // 4: agentpb.StoreCredentialResponse - (*SyncRequest)(nil), // 5: agentpb.SyncRequest - (*SyncResponse)(nil), // 6: agentpb.SyncResponse - (*ClimonInstallRequest)(nil), // 7: agentpb.ClimonInstallRequest - (*ClimonDeleteRequest)(nil), // 8: agentpb.ClimonDeleteRequest - (*ApplicationInstallRequest)(nil), // 9: agentpb.ApplicationInstallRequest - (*ApplicationDeleteRequest)(nil), // 10: agentpb.ApplicationDeleteRequest - (*ClusterRequest)(nil), // 11: agentpb.ClusterRequest - (*RepositoryAddRequest)(nil), // 12: agentpb.RepositoryAddRequest - (*RepositoryDeleteRequest)(nil), // 13: agentpb.RepositoryDeleteRequest - (*ProjectAddRequest)(nil), // 14: agentpb.ProjectAddRequest - (*ProjectDeleteRequest)(nil), // 15: agentpb.ProjectDeleteRequest - (*JobRequest)(nil), // 16: agentpb.JobRequest - (*JobResponse)(nil), // 17: agentpb.JobResponse - (*SyncAppRequest)(nil), // 18: agentpb.SyncAppRequest - (*SyncAppResponse)(nil), // 19: agentpb.SyncAppResponse - (*GetClusterAppsRequest)(nil), // 20: agentpb.GetClusterAppsRequest - (*GetClusterAppsResponse)(nil), // 21: agentpb.GetClusterAppsResponse - (*GetClusterAppLaunchesRequest)(nil), // 22: agentpb.GetClusterAppLaunchesRequest - (*GetClusterAppLaunchesResponse)(nil), // 23: agentpb.GetClusterAppLaunchesResponse - (*GetClusterAppConfigRequest)(nil), // 24: agentpb.GetClusterAppConfigRequest - (*GetClusterAppConfigResponse)(nil), // 25: agentpb.GetClusterAppConfigResponse - (*GetClusterAppValuesRequest)(nil), // 26: agentpb.GetClusterAppValuesRequest - (*GetClusterAppValuesResponse)(nil), // 27: agentpb.GetClusterAppValuesResponse - (*SyncAppData)(nil), // 28: agentpb.SyncAppData - (*AppData)(nil), // 29: agentpb.AppData - (*AppStatus)(nil), // 30: agentpb.AppStatus - (*AppConfig)(nil), // 31: agentpb.AppConfig - (*AppValues)(nil), // 32: agentpb.AppValues - (*AppLaunchConfig)(nil), // 33: agentpb.AppLaunchConfig - nil, // 34: agentpb.StoreCredentialRequest.CredentialEntry - (*any1.Any)(nil), // 35: google.protobuf.Any + (*ClimonInstallRequest)(nil), // 5: agentpb.ClimonInstallRequest + (*ClimonDeleteRequest)(nil), // 6: agentpb.ClimonDeleteRequest + (*ApplicationInstallRequest)(nil), // 7: agentpb.ApplicationInstallRequest + (*ApplicationDeleteRequest)(nil), // 8: agentpb.ApplicationDeleteRequest + (*ClusterRequest)(nil), // 9: agentpb.ClusterRequest + (*RepositoryAddRequest)(nil), // 10: agentpb.RepositoryAddRequest + (*RepositoryDeleteRequest)(nil), // 11: agentpb.RepositoryDeleteRequest + (*ProjectAddRequest)(nil), // 12: agentpb.ProjectAddRequest + (*ProjectDeleteRequest)(nil), // 13: agentpb.ProjectDeleteRequest + (*JobRequest)(nil), // 14: agentpb.JobRequest + (*JobResponse)(nil), // 15: agentpb.JobResponse + (*SyncAppRequest)(nil), // 16: agentpb.SyncAppRequest + (*SyncAppResponse)(nil), // 17: agentpb.SyncAppResponse + (*GetClusterAppsRequest)(nil), // 18: agentpb.GetClusterAppsRequest + (*GetClusterAppsResponse)(nil), // 19: agentpb.GetClusterAppsResponse + (*GetClusterAppLaunchesRequest)(nil), // 20: agentpb.GetClusterAppLaunchesRequest + (*GetClusterAppLaunchesResponse)(nil), // 21: agentpb.GetClusterAppLaunchesResponse + (*GetClusterAppConfigRequest)(nil), // 22: agentpb.GetClusterAppConfigRequest + (*GetClusterAppConfigResponse)(nil), // 23: agentpb.GetClusterAppConfigResponse + (*GetClusterAppValuesRequest)(nil), // 24: agentpb.GetClusterAppValuesRequest + (*GetClusterAppValuesResponse)(nil), // 25: agentpb.GetClusterAppValuesResponse + (*SyncAppData)(nil), // 26: agentpb.SyncAppData + (*AppData)(nil), // 27: agentpb.AppData + (*AppStatus)(nil), // 28: agentpb.AppStatus + (*AppConfig)(nil), // 29: agentpb.AppConfig + (*AppValues)(nil), // 30: agentpb.AppValues + (*AppLaunchConfig)(nil), // 31: agentpb.AppLaunchConfig + nil, // 32: agentpb.StoreCredentialRequest.CredentialEntry + (*any1.Any)(nil), // 33: google.protobuf.Any } var file_agent_proto_depIdxs = []int32{ 0, // 0: agentpb.PingResponse.status:type_name -> agentpb.StatusCode - 34, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry + 32, // 1: agentpb.StoreCredentialRequest.credential:type_name -> agentpb.StoreCredentialRequest.CredentialEntry 0, // 2: agentpb.StoreCredentialResponse.status:type_name -> agentpb.StatusCode - 35, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any - 28, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData + 33, // 3: agentpb.JobRequest.payload:type_name -> google.protobuf.Any + 26, // 4: agentpb.SyncAppRequest.data:type_name -> agentpb.SyncAppData 0, // 5: agentpb.SyncAppResponse.status:type_name -> agentpb.StatusCode 0, // 6: agentpb.GetClusterAppsResponse.status:type_name -> agentpb.StatusCode - 29, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData + 27, // 7: agentpb.GetClusterAppsResponse.appData:type_name -> agentpb.AppData 0, // 8: agentpb.GetClusterAppLaunchesResponse.status:type_name -> agentpb.StatusCode - 33, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig + 31, // 9: agentpb.GetClusterAppLaunchesResponse.launchConfigList:type_name -> agentpb.AppLaunchConfig 0, // 10: agentpb.GetClusterAppConfigResponse.status:type_name -> agentpb.StatusCode - 31, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig + 29, // 11: agentpb.GetClusterAppConfigResponse.appConfig:type_name -> agentpb.AppConfig 0, // 12: agentpb.GetClusterAppValuesResponse.status:type_name -> agentpb.StatusCode - 32, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues - 31, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig - 32, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues - 31, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig - 30, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus + 30, // 13: agentpb.GetClusterAppValuesResponse.values:type_name -> agentpb.AppValues + 29, // 14: agentpb.SyncAppData.config:type_name -> agentpb.AppConfig + 30, // 15: agentpb.SyncAppData.values:type_name -> agentpb.AppValues + 29, // 16: agentpb.AppData.config:type_name -> agentpb.AppConfig + 28, // 17: agentpb.AppData.status:type_name -> agentpb.AppStatus 1, // 18: agentpb.Agent.Ping:input_type -> agentpb.PingRequest - 16, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest + 14, // 19: agentpb.Agent.SubmitJob:input_type -> agentpb.JobRequest 3, // 20: agentpb.Agent.StoreCredential:input_type -> agentpb.StoreCredentialRequest - 5, // 21: agentpb.Agent.Sync:input_type -> agentpb.SyncRequest - 7, // 22: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest - 8, // 23: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest - 9, // 24: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest - 10, // 25: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest - 11, // 26: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest - 11, // 27: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest - 12, // 28: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest - 13, // 29: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest - 14, // 30: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest - 15, // 31: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest - 18, // 32: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest - 20, // 33: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest - 22, // 34: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest - 24, // 35: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest - 26, // 36: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest - 2, // 37: agentpb.Agent.Ping:output_type -> agentpb.PingResponse - 17, // 38: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse - 4, // 39: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse - 6, // 40: agentpb.Agent.Sync:output_type -> agentpb.SyncResponse - 17, // 41: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse - 17, // 42: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse - 17, // 43: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse - 17, // 44: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse - 17, // 45: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse - 17, // 46: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse - 17, // 47: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse - 17, // 48: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse - 17, // 49: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse - 17, // 50: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse - 19, // 51: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse - 21, // 52: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse - 23, // 53: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse - 25, // 54: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse - 27, // 55: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse - 37, // [37:56] is the sub-list for method output_type - 18, // [18:37] is the sub-list for method input_type + 5, // 21: agentpb.Agent.ClimonAppInstall:input_type -> agentpb.ClimonInstallRequest + 6, // 22: agentpb.Agent.ClimonAppDelete:input_type -> agentpb.ClimonDeleteRequest + 7, // 23: agentpb.Agent.DeployerAppInstall:input_type -> agentpb.ApplicationInstallRequest + 8, // 24: agentpb.Agent.DeployerAppDelete:input_type -> agentpb.ApplicationDeleteRequest + 9, // 25: agentpb.Agent.ClusterAdd:input_type -> agentpb.ClusterRequest + 9, // 26: agentpb.Agent.ClusterDelete:input_type -> agentpb.ClusterRequest + 10, // 27: agentpb.Agent.RepositoryAdd:input_type -> agentpb.RepositoryAddRequest + 11, // 28: agentpb.Agent.RepositoryDelete:input_type -> agentpb.RepositoryDeleteRequest + 12, // 29: agentpb.Agent.ProjectAdd:input_type -> agentpb.ProjectAddRequest + 13, // 30: agentpb.Agent.ProjectDelete:input_type -> agentpb.ProjectDeleteRequest + 16, // 31: agentpb.Agent.SyncApp:input_type -> agentpb.SyncAppRequest + 18, // 32: agentpb.Agent.GetClusterApps:input_type -> agentpb.GetClusterAppsRequest + 20, // 33: agentpb.Agent.GetClusterAppLaunches:input_type -> agentpb.GetClusterAppLaunchesRequest + 22, // 34: agentpb.Agent.GetClusterAppConfig:input_type -> agentpb.GetClusterAppConfigRequest + 24, // 35: agentpb.Agent.GetClusterAppValues:input_type -> agentpb.GetClusterAppValuesRequest + 2, // 36: agentpb.Agent.Ping:output_type -> agentpb.PingResponse + 15, // 37: agentpb.Agent.SubmitJob:output_type -> agentpb.JobResponse + 4, // 38: agentpb.Agent.StoreCredential:output_type -> agentpb.StoreCredentialResponse + 15, // 39: agentpb.Agent.ClimonAppInstall:output_type -> agentpb.JobResponse + 15, // 40: agentpb.Agent.ClimonAppDelete:output_type -> agentpb.JobResponse + 15, // 41: agentpb.Agent.DeployerAppInstall:output_type -> agentpb.JobResponse + 15, // 42: agentpb.Agent.DeployerAppDelete:output_type -> agentpb.JobResponse + 15, // 43: agentpb.Agent.ClusterAdd:output_type -> agentpb.JobResponse + 15, // 44: agentpb.Agent.ClusterDelete:output_type -> agentpb.JobResponse + 15, // 45: agentpb.Agent.RepositoryAdd:output_type -> agentpb.JobResponse + 15, // 46: agentpb.Agent.RepositoryDelete:output_type -> agentpb.JobResponse + 15, // 47: agentpb.Agent.ProjectAdd:output_type -> agentpb.JobResponse + 15, // 48: agentpb.Agent.ProjectDelete:output_type -> agentpb.JobResponse + 17, // 49: agentpb.Agent.SyncApp:output_type -> agentpb.SyncAppResponse + 19, // 50: agentpb.Agent.GetClusterApps:output_type -> agentpb.GetClusterAppsResponse + 21, // 51: agentpb.Agent.GetClusterAppLaunches:output_type -> agentpb.GetClusterAppLaunchesResponse + 23, // 52: agentpb.Agent.GetClusterAppConfig:output_type -> agentpb.GetClusterAppConfigResponse + 25, // 53: agentpb.Agent.GetClusterAppValues:output_type -> agentpb.GetClusterAppValuesResponse + 36, // [36:54] is the sub-list for method output_type + 18, // [18:36] is the sub-list for method input_type 18, // [18:18] is the sub-list for extension type_name 18, // [18:18] is the sub-list for extension extendee 0, // [0:18] is the sub-list for field type_name @@ -2701,30 +2576,6 @@ func file_agent_proto_init() { } } file_agent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClimonInstallRequest); i { case 0: return &v.state @@ -2736,7 +2587,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClimonDeleteRequest); i { case 0: return &v.state @@ -2748,7 +2599,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationInstallRequest); i { case 0: return &v.state @@ -2760,7 +2611,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationDeleteRequest); i { case 0: return &v.state @@ -2772,7 +2623,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterRequest); i { case 0: return &v.state @@ -2784,7 +2635,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryAddRequest); i { case 0: return &v.state @@ -2796,7 +2647,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryDeleteRequest); i { case 0: return &v.state @@ -2808,7 +2659,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectAddRequest); i { case 0: return &v.state @@ -2820,7 +2671,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectDeleteRequest); i { case 0: return &v.state @@ -2832,7 +2683,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobRequest); i { case 0: return &v.state @@ -2844,7 +2695,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobResponse); i { case 0: return &v.state @@ -2856,7 +2707,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppRequest); i { case 0: return &v.state @@ -2868,7 +2719,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppResponse); i { case 0: return &v.state @@ -2880,7 +2731,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppsRequest); i { case 0: return &v.state @@ -2892,7 +2743,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppsResponse); i { case 0: return &v.state @@ -2904,7 +2755,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppLaunchesRequest); i { case 0: return &v.state @@ -2916,7 +2767,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppLaunchesResponse); i { case 0: return &v.state @@ -2928,7 +2779,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppConfigRequest); i { case 0: return &v.state @@ -2940,7 +2791,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppConfigResponse); i { case 0: return &v.state @@ -2952,7 +2803,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppValuesRequest); i { case 0: return &v.state @@ -2964,7 +2815,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClusterAppValuesResponse); i { case 0: return &v.state @@ -2976,7 +2827,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncAppData); i { case 0: return &v.state @@ -2988,7 +2839,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppData); i { case 0: return &v.state @@ -3000,7 +2851,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppStatus); i { case 0: return &v.state @@ -3012,7 +2863,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppConfig); i { case 0: return &v.state @@ -3024,7 +2875,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppValues); i { case 0: return &v.state @@ -3036,7 +2887,7 @@ func file_agent_proto_init() { return nil } } - file_agent_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_agent_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppLaunchConfig); i { case 0: return &v.state @@ -3055,7 +2906,7 @@ func file_agent_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_proto_rawDesc, NumEnums: 1, - NumMessages: 34, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/server/pkg/pb/agentpb/agent_grpc.pb.go b/server/pkg/pb/agentpb/agent_grpc.pb.go index 3a3e5948..8a2a937e 100644 --- a/server/pkg/pb/agentpb/agent_grpc.pb.go +++ b/server/pkg/pb/agentpb/agent_grpc.pb.go @@ -22,7 +22,6 @@ const ( Agent_Ping_FullMethodName = "/agentpb.Agent/Ping" Agent_SubmitJob_FullMethodName = "/agentpb.Agent/SubmitJob" Agent_StoreCredential_FullMethodName = "/agentpb.Agent/StoreCredential" - Agent_Sync_FullMethodName = "/agentpb.Agent/Sync" Agent_ClimonAppInstall_FullMethodName = "/agentpb.Agent/ClimonAppInstall" Agent_ClimonAppDelete_FullMethodName = "/agentpb.Agent/ClimonAppDelete" Agent_DeployerAppInstall_FullMethodName = "/agentpb.Agent/DeployerAppInstall" @@ -47,7 +46,6 @@ type AgentClient interface { Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) SubmitJob(ctx context.Context, in *JobRequest, opts ...grpc.CallOption) (*JobResponse, error) StoreCredential(ctx context.Context, in *StoreCredentialRequest, opts ...grpc.CallOption) (*StoreCredentialResponse, error) - Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) ClimonAppInstall(ctx context.Context, in *ClimonInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) ClimonAppDelete(ctx context.Context, in *ClimonDeleteRequest, opts ...grpc.CallOption) (*JobResponse, error) DeployerAppInstall(ctx context.Context, in *ApplicationInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) @@ -100,15 +98,6 @@ func (c *agentClient) StoreCredential(ctx context.Context, in *StoreCredentialRe return out, nil } -func (c *agentClient) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) { - out := new(SyncResponse) - err := c.cc.Invoke(ctx, Agent_Sync_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *agentClient) ClimonAppInstall(ctx context.Context, in *ClimonInstallRequest, opts ...grpc.CallOption) (*JobResponse, error) { out := new(JobResponse) err := c.cc.Invoke(ctx, Agent_ClimonAppInstall_FullMethodName, in, out, opts...) @@ -251,7 +240,6 @@ type AgentServer interface { Ping(context.Context, *PingRequest) (*PingResponse, error) SubmitJob(context.Context, *JobRequest) (*JobResponse, error) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) - Sync(context.Context, *SyncRequest) (*SyncResponse, error) ClimonAppInstall(context.Context, *ClimonInstallRequest) (*JobResponse, error) ClimonAppDelete(context.Context, *ClimonDeleteRequest) (*JobResponse, error) DeployerAppInstall(context.Context, *ApplicationInstallRequest) (*JobResponse, error) @@ -283,9 +271,6 @@ func (UnimplementedAgentServer) SubmitJob(context.Context, *JobRequest) (*JobRes func (UnimplementedAgentServer) StoreCredential(context.Context, *StoreCredentialRequest) (*StoreCredentialResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoreCredential not implemented") } -func (UnimplementedAgentServer) Sync(context.Context, *SyncRequest) (*SyncResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Sync not implemented") -} func (UnimplementedAgentServer) ClimonAppInstall(context.Context, *ClimonInstallRequest) (*JobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ClimonAppInstall not implemented") } @@ -398,24 +383,6 @@ func _Agent_StoreCredential_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -func _Agent_Sync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SyncRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AgentServer).Sync(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Agent_Sync_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AgentServer).Sync(ctx, req.(*SyncRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Agent_ClimonAppInstall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ClimonInstallRequest) if err := dec(in); err != nil { @@ -705,10 +672,6 @@ var Agent_ServiceDesc = grpc.ServiceDesc{ MethodName: "StoreCredential", Handler: _Agent_StoreCredential_Handler, }, - { - MethodName: "Sync", - Handler: _Agent_Sync_Handler, - }, { MethodName: "ClimonAppInstall", Handler: _Agent_ClimonAppInstall_Handler, From b13618397f918743966f085580e73297959b5a38 Mon Sep 17 00:00:00 2001 From: indresh-28 Date: Tue, 8 Aug 2023 20:20:07 +0530 Subject: [PATCH 30/31] fix app config fetch api query --- capten/agent/pkg/capten-store/app_config_store.go | 10 ++++------ capten/common-pkg/cassandra/db-client/client.go | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/capten/agent/pkg/capten-store/app_config_store.go b/capten/agent/pkg/capten-store/app_config_store.go index 7031a609..a7ccc867 100644 --- a/capten/agent/pkg/capten-store/app_config_store.go +++ b/capten/agent/pkg/capten-store/app_config_store.go @@ -15,13 +15,11 @@ const ( ) func CreateSelectByFieldNameQuery(keyspace, field string) string { - return fmt.Sprintf(CreateSelectAllQuery(), keyspace) + fmt.Sprintf(" WHERE %s = ?", field) + return CreateSelectAllQuery(keyspace) + fmt.Sprintf(" WHERE %s = ?", field) } -func CreateSelectAllQuery() string { - return "SELECT " + - strings.Join(appConfigfields, ", ") + - " FROM %s.AppConfig" +func CreateSelectAllQuery(keyspace string) string { + return fmt.Sprintf("SELECT %s FROM %s.AppConfig", strings.Join(appConfigfields, ", "), keyspace) } const ( @@ -87,7 +85,7 @@ func (a *Store) GetAppConfig(appReleaseName string) (*agentpb.SyncAppData, error } func (a *Store) GetAllApps() ([]*agentpb.SyncAppData, error) { - selectAllQuery := a.client.Session().Query(CreateSelectAllQuery()) + selectAllQuery := a.client.Session().Query(CreateSelectAllQuery(a.keyspace)) iter := selectAllQuery.Iter() config := agentpb.AppConfig{} diff --git a/capten/common-pkg/cassandra/db-client/client.go b/capten/common-pkg/cassandra/db-client/client.go index d452b52f..980302a0 100644 --- a/capten/common-pkg/cassandra/db-client/client.go +++ b/capten/common-pkg/cassandra/db-client/client.go @@ -19,7 +19,7 @@ type Config struct { Keyspace string `envconfig:"DB_NAME" required:"true"` ClusterTimeout int `envconfig:"CLUSTER_TIMEOUT_IN_SEC" default:"20"` ClusterConnectTimeout int `envconfig:"CLUSTER_CONNECT_TIMEOUT_IN_SEC" default:"20"` - ClusterConistency uint16 `envconfig:"CLUSTER_CONSISTENCY" default:"3"` + ClusterConistency uint16 `envconfig:"CLUSTER_CONSISTENCY" default:"1"` MaxRetryCount int `envconfig:"MAX_RETRY_COUNT" default:"3"` MaxConnectionCount int `envconfig:"MAX_CLUSTER_CONNECTION_COUNT" default:"5"` EnableCassandraTrace bool `envconfig:"ENABLE_CASSANDRA_TRACE" default:"false"` From 11127909a82c0e3c74951182c29af14a9b5a1b46 Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Tue, 8 Aug 2023 22:57:45 +0530 Subject: [PATCH 31/31] adding test clients --- server/examples/agent.go | 41 -------- server/examples/agent/agent_client.go | 62 ++++++++++++ server/examples/astra/astra-client.go | 46 +++++++++ server/examples/server/server_client.go | 121 ++++++++++++++++++++++++ 4 files changed, 229 insertions(+), 41 deletions(-) delete mode 100644 server/examples/agent.go create mode 100644 server/examples/agent/agent_client.go create mode 100644 server/examples/astra/astra-client.go create mode 100644 server/examples/server/server_client.go diff --git a/server/examples/agent.go b/server/examples/agent.go deleted file mode 100644 index c493e628..00000000 --- a/server/examples/agent.go +++ /dev/null @@ -1,41 +0,0 @@ -package main - -import ( - "context" - "fmt" - - "github.com/intelops/go-common/credentials" - "github.com/kube-tarian/kad/server/pkg/pb/agentpb" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" -) - -func main() { - conn, err := grpc.Dial("captenagent.dev.optimizor.app:80", - grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - fmt.Println("connect error: ", err) - return - } - storeServiceCred(conn) -} - -func storeServiceCred(conn grpc.ClientConnInterface) { - serviceCred := credentials.ServiceCredential{ - UserName: "user", - Password: "password2", - } - serviceCredMap := credentials.PrepareServiceCredentialMap(serviceCred) - agentClient := agentpb.NewAgentClient(conn) - _, err := agentClient.StoreCredential(context.Background(), &agentpb.StoreCredentialRequest{ - CredentialType: credentials.ServiceUserCredentialType, - CredEntityName: "vitess", - CredIdentifier: "user", - Credential: serviceCredMap, - }) - if err != nil { - fmt.Println("store error: ", err) - return - } - fmt.Println("successful: ", err) -} diff --git a/server/examples/agent/agent_client.go b/server/examples/agent/agent_client.go new file mode 100644 index 00000000..47ff9560 --- /dev/null +++ b/server/examples/agent/agent_client.go @@ -0,0 +1,62 @@ +package main + +import ( + "context" + "fmt" + "os" + + "github.com/intelops/go-common/credentials" + "github.com/intelops/go-common/logging" + "github.com/kube-tarian/kad/server/pkg/agent" + "github.com/kube-tarian/kad/server/pkg/pb/agentpb" +) + +func main() { + log := logging.NewLogger() + cfg, err := getAgentConfig("https://captenagent.dev.test.app") + if err != nil { + log.Fatalf("failed to load agent config: ", err) + } + + ac, err := agent.NewAgent(log, cfg) + if err != nil { + log.Fatalf("failed to connect to agent: ", err) + return + } + storeServiceCred(ac.GetClient()) +} + +func storeServiceCred(ac agentpb.AgentClient) { + serviceCred := credentials.ServiceCredential{ + UserName: "testuser", + Password: "password2", + } + serviceCredMap := credentials.PrepareServiceCredentialMap(serviceCred) + _, err := ac.StoreCredential(context.Background(), &agentpb.StoreCredentialRequest{ + CredentialType: credentials.ServiceUserCredentialType, + CredEntityName: "testentity", + CredIdentifier: "testentityuser", + Credential: serviceCredMap, + }) + if err != nil { + fmt.Println("store error: ", err) + return + } + fmt.Println("successful") +} + +func getAgentConfig(address string) (*agent.Config, error) { + cadata, err := os.ReadFile("/var/capten/cert/ca.crt") + if err != nil { + return nil, fmt.Errorf("ca failed, %v", err) + } + cdata, err := os.ReadFile("/var/capten/cert/client.crt") + if err != nil { + return nil, fmt.Errorf("client failed, %v", err) + } + ckey, err := os.ReadFile("/var/capten/cert/client.key") + if err != nil { + return nil, fmt.Errorf("key failed, %v", err) + } + return &agent.Config{Address: address, CaCert: string(cadata), Cert: string(cdata), Key: string(ckey)}, nil +} diff --git a/server/examples/astra/astra-client.go b/server/examples/astra/astra-client.go new file mode 100644 index 00000000..2bbfda76 --- /dev/null +++ b/server/examples/astra/astra-client.go @@ -0,0 +1,46 @@ +package main + +import ( + "crypto/tls" + "log" + + "github.com/stargate/stargate-grpc-go-client/stargate/pkg/auth" + "github.com/stargate/stargate-grpc-go-client/stargate/pkg/client" + "github.com/stargate/stargate-grpc-go-client/stargate/pkg/proto" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" +) + +func main() { + host := "-.apps.astra.datastax.com:443" + token := "AstraCS:" + tlsConfig := &tls.Config{ + InsecureSkipVerify: false, + } + + log.Printf("connecting to astra %s", host) + conn, err := grpc.Dial(host, grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)), + grpc.WithBlock(), + grpc.WithPerRPCCredentials( + auth.NewStaticTokenProvider(token), + ), + ) + if err != nil { + log.Fatalf("failed to connect to astra db, %v", err) + } + + log.Printf("connected to %v", conn) + session, err := client.NewStargateClientWithConn(conn) + if err != nil { + log.Fatalf("error creating stargate client, %v", err) + } + + log.Printf("exec query") + res, err := session.ExecuteQuery(&proto.Query{Cql: "DESCRIBE 'capten'"}) + if err != nil { + log.Fatalf("error exec query, %v", err) + } + + result := res.GetResult() + log.Printf("result, %v", result) +} diff --git a/server/examples/server/server_client.go b/server/examples/server/server_client.go new file mode 100644 index 00000000..a465c169 --- /dev/null +++ b/server/examples/server/server_client.go @@ -0,0 +1,121 @@ +package main + +import ( + "context" + "fmt" + "os" + + "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/metadata" +) + +func main() { + fmt.Println("Registration testing") + gr, err := grpc.Dial("captenserver.test.app:80", grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + fmt.Println("GRPC failed", err) + return + } + sc := serverpb.NewServerClient(gr) + ctx := context.TODO() + ctx = metadata.AppendToOutgoingContext(ctx, "organizationID", "eab9af58-1cbd-4f25-b3f3-d07ee99a5baa") + + resp1, err := sc.GetClusters(ctx, &serverpb.GetClustersRequest{}) + if err != nil { + fmt.Println("error with get registrations ", err) + } else { + fmt.Println("registrations fetch done", resp1.Status, resp1.StatusMessage, len(resp1.Data)) + for _, cluster := range resp1.Data { + fmt.Printf("cluster: %+v\n", *cluster) + } + } + + cadata, err := os.ReadFile("/var/capten/cert/ca.crt") + if err != nil { + fmt.Println("ca failed", err) + return + } + + cdata, err := os.ReadFile("/var/capten/cert/client.crt") + if err != nil { + fmt.Println("client failed", err) + return + } + + ckey, err := os.ReadFile("/var/dev/capten/cert/client.key") + if err != nil { + fmt.Println("key failed", err) + return + } + + nresp, err := sc.NewClusterRegistration(ctx, &serverpb.NewClusterRegistrationRequest{ + AgentEndpoint: "https://captenagent.dev.test.app", + ClusterName: "awscluster-3", + ClientKeyData: string(ckey), + ClientCertData: string(cdata), + ClientCAChainData: string(cadata), + }) + if err != nil { + fmt.Println("error with registration ", err) + } else { + fmt.Println("Server testing done", nresp.Status, nresp.StatusMessage, nresp.ClusterID) + } + + nresp1, err := sc.NewClusterRegistration(ctx, &serverpb.NewClusterRegistrationRequest{ + AgentEndpoint: "https://captenagent.dev.test.app", + ClusterName: "awscluster-4", + ClientKeyData: "fsdfgsdfsdf", + ClientCertData: "bcvbvcbhhhfh", + ClientCAChainData: "tyrytertyeyeyey", + }) + if err != nil { + fmt.Println("error with registration ", err) + } else { + fmt.Println("Server testing done", nresp1.Status, nresp1.StatusMessage, nresp1.ClusterID) + } + + gresp2, err := sc.GetClusters(ctx, &serverpb.GetClustersRequest{}) + if err != nil { + fmt.Println("error with get registrations ", err) + } else { + fmt.Println("registrations fetch done", gresp2.Status, gresp2.StatusMessage, len(gresp2.Data)) + for _, cluster := range gresp2.Data { + fmt.Printf("cluster: %+v\n", *cluster) + } + } + + uresp, err := sc.UpdateClusterRegistration(ctx, &serverpb.UpdateClusterRegistrationRequest{ + ClusterID: nresp.ClusterID, + AgentEndpoint: "https://captenagent.dev.test.app1", + ClusterName: "awscluster-3-update", + ClientKeyData: string(ckey), + ClientCertData: string(cdata), + ClientCAChainData: string(cadata), + }) + if err != nil { + fmt.Println("error with get registrations ", err) + } else { + fmt.Println("registrations fetch done", uresp.Status, uresp.StatusMessage) + } + + gresp3, err := sc.GetClusters(ctx, &serverpb.GetClustersRequest{}) + if err != nil { + fmt.Println("error with get registrations ", err) + } else { + fmt.Println("registrations fetch done", gresp3.Status, gresp3.StatusMessage, len(gresp3.Data)) + for _, cluster := range gresp3.Data { + fmt.Printf("cluster: %+v\n", *cluster) + } + } + + for _, cluster := range gresp3.Data { + dresp, err := sc.DeleteClusterRegistration(ctx, &serverpb.DeleteClusterRegistrationRequest{ClusterID: cluster.ClusterID}) + if err != nil { + fmt.Println("error with get registrations ", err, cluster.ClusterID) + } else { + fmt.Println("registrations delete done", dresp.Status, dresp.StatusMessage, cluster.ClusterID) + } + } +}