diff --git a/Makefile b/Makefile index 58fea85a3c..b90eaf71ea 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ NAME = "github.com/goto/optimus" LAST_COMMIT := $(shell git rev-parse --short HEAD) LAST_TAG := "$(shell git rev-list --tags --max-count=1)" OPMS_VERSION := "$(shell git describe --tags ${LAST_TAG})-next" -PROTON_COMMIT := "8e1c00250e4a3ef62086f513d52c43c790946eff" +PROTON_COMMIT := "b95054a6983b21201141a46c8cb8ecc95e6cdf7d" .PHONY: build test test-ci generate-proto unit-test-ci integration-test vet coverage clean install lint diff --git a/config/config_server.go b/config/config_server.go index b0ebc025d5..b349bbb9c4 100644 --- a/config/config_server.go +++ b/config/config_server.go @@ -24,6 +24,7 @@ type ServerConfig struct { Features FeaturesConfig `mapstructure:"features"` Plugins Plugins `mapstructure:"plugins"` JobValidationConfig JobValidationConfig `mapstructure:"job_validation"` + JobExpectatorConfig JobExpectatorConfig `mapstructure:"job_expectator"` } type UpstreamResolver struct { @@ -165,3 +166,8 @@ type JobValidationConfig struct { type ValidateScheduleConfig struct { ReferenceTimezone string `mapstructure:"reference_timezone"` } + +type JobExpectatorConfig struct { + BufferDurationInMinutes int `mapstructure:"buffer_duration_in_minutes" default:"10"` + DurationEstimatorConfig DurationEstimatorConfig `mapstructure:"duration_estimator_config"` +} diff --git a/config/loader_test.go b/config/loader_test.go index 6587c41cb7..5c43252442 100644 --- a/config/loader_test.go +++ b/config/loader_test.go @@ -311,6 +311,16 @@ func (s *ConfigTestSuite) initExpectedServerConfig() { MaxPaddingMinutes: 1000, }, } + s.expectedServerConfig.JobExpectatorConfig = config.JobExpectatorConfig{ + BufferDurationInMinutes: 10, + DurationEstimatorConfig: config.DurationEstimatorConfig{ + LastNRuns: 7, + Percentile: 95, + PaddingPercentage: 0, + MinPaddingMinutes: 0, + MaxPaddingMinutes: 1000, + }, + } } func (*ConfigTestSuite) initServerConfigEnv() { diff --git a/core/scheduler/handler/v1beta1/job_run.go b/core/scheduler/handler/v1beta1/job_run.go index e8ec811a6a..064739a281 100644 --- a/core/scheduler/handler/v1beta1/job_run.go +++ b/core/scheduler/handler/v1beta1/job_run.go @@ -37,6 +37,10 @@ type JobSLAPredictorService interface { IdentifySLABreaches(ctx context.Context, projectName tenant.ProjectName, jobNames []scheduler.JobName, labels map[string]string, reqConfig service.JobSLAPredictorRequestConfig) (map[scheduler.JobName]map[scheduler.JobName]*service.JobState, error) } +type JobExpectatorService interface { + GenerateExpectedFinishTimes(ctx context.Context, projectName tenant.ProjectName, jobNames []scheduler.JobName, labels map[string]string, referenceTime time.Time, scheduleRangeInHours time.Duration) (map[scheduler.JobSchedule]service.FinishTimeDetail, error) +} + type JobRunService interface { JobRunInput(context.Context, tenant.ProjectName, scheduler.JobName, scheduler.RunConfig) (*scheduler.ExecutorInput, error) UpdateJobState(context.Context, *scheduler.Event) error @@ -73,6 +77,7 @@ type JobRunHandler struct { jobLineageService JobLineageService jobSLAPredictorService JobSLAPredictorService thirdPartySensorService ThirdPartySensorService + jobExpectatorService JobExpectatorService pb.UnimplementedJobRunServiceServer } @@ -574,6 +579,58 @@ func (h JobRunHandler) GetJobRunLineageSummary(ctx context.Context, req *pb.GetJ return toJobRunLineageSummaryResponse(jobRunLineages), nil } +// GenerateExpectedFinishTime generates expected finish time for jobs based on their schedule in the given range +func (h JobRunHandler) GenerateExpectedFinishTime(ctx context.Context, req *pb.GenerateExpectedFinishTimeRequest) (*pb.GenerateExpectedFinishTimeResponse, error) { + projectName, err := tenant.ProjectNameFrom(req.GetProjectName()) + if err != nil { + h.l.Error(fmt.Sprintf("error adapting project name [%s]: %s", req.GetProjectName(), err.Error())) + return nil, errors.GRPCErr(err, "unable to adapt project name") + } + + jobNames := []scheduler.JobName{} + for _, jn := range req.GetJobNames() { + jobName, err := scheduler.JobNameFrom(jn) + if err != nil { + h.l.Error(fmt.Sprintf("error adapting job name [%s]: %s", jn, err.Error())) + return nil, errors.GRPCErr(err, "unable to adapt job name") + } + jobNames = append(jobNames, jobName) + } + + referenceTime := time.Now().UTC() + if req.GetReferenceTime() != nil && req.GetReferenceTime().IsValid() { + referenceTime = req.GetReferenceTime().AsTime().UTC() + } + scheduleRangeInHours := time.Duration(req.GetScheduledRangeInHours()) * time.Hour + + jobsWithFinishTime, err := h.jobExpectatorService.GenerateExpectedFinishTimes(ctx, projectName, jobNames, req.GetJobLabels(), referenceTime, scheduleRangeInHours) + if err != nil { + h.l.Error(fmt.Sprintf("error generating expected finish times: %s", err.Error())) + return nil, errors.GRPCErr(err, "unable to generate expected finish times") + } + + response := &pb.GenerateExpectedFinishTimeResponse{ + InprogressJobs: make(map[string]*pb.FinishTimeDetailResponse), + FinishedJobs: make(map[string]*pb.FinishTimeDetailResponse), + } + for jobSchedule, jobWithFinishTime := range jobsWithFinishTime { + finishTimeDetail := &pb.FinishTimeDetailResponse{ + ScheduledAt: timestamppb.New(jobSchedule.ScheduledAt), + } + + switch jobWithFinishTime.Status { + case service.FinishTimeStatusFinished: + finishTimeDetail.FinishTime = &pb.FinishTimeDetailResponse_ActualFinishTime{ActualFinishTime: timestamppb.New(jobWithFinishTime.FinishTime)} + response.FinishedJobs[jobSchedule.JobName.String()] = finishTimeDetail + case service.FinishTimeStatusInprogress: + finishTimeDetail.FinishTime = &pb.FinishTimeDetailResponse_ExpectedFinishTime{ExpectedFinishTime: timestamppb.New(jobWithFinishTime.FinishTime)} + response.InprogressJobs[jobSchedule.JobName.String()] = finishTimeDetail + } + } + + return response, nil +} + func NewJobRunHandler( l log.Logger, service JobRunService, @@ -582,6 +639,7 @@ func NewJobRunHandler( jobLineageService JobLineageService, jobSLAPredictorService JobSLAPredictorService, thirdPartySensorService ThirdPartySensorService, + jobExpectatorService JobExpectatorService, ) *JobRunHandler { return &JobRunHandler{ l: l, @@ -591,5 +649,6 @@ func NewJobRunHandler( jobLineageService: jobLineageService, jobSLAPredictorService: jobSLAPredictorService, thirdPartySensorService: thirdPartySensorService, + jobExpectatorService: jobExpectatorService, } } diff --git a/core/scheduler/handler/v1beta1/job_run_test.go b/core/scheduler/handler/v1beta1/job_run_test.go index 7117b8e5da..a5028f81f2 100644 --- a/core/scheduler/handler/v1beta1/job_run_test.go +++ b/core/scheduler/handler/v1beta1/job_run_test.go @@ -37,7 +37,7 @@ func TestJobRunHandler(t *testing.T) { t.Run("GetJobRun", func(t *testing.T) { t.Run("should return error if project name is invalid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.GetJobRunsRequest{ ProjectName: "", JobName: "job1", @@ -52,7 +52,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("should return error if job name is invalid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.GetJobRunsRequest{ ProjectName: "proj", JobName: "", @@ -67,7 +67,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("should return error if state is invalid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.GetJobRunsRequest{ ProjectName: "proj", JobName: "job1", @@ -93,7 +93,7 @@ func TestJobRunHandler(t *testing.T) { Return(jobRuns, nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, nil) req := &pb.GetJobRunsRequest{ ProjectName: "proj", JobName: "job1", @@ -126,7 +126,7 @@ func TestJobRunHandler(t *testing.T) { Return(jobRuns, fmt.Errorf("service error")) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, nil) req := &pb.GetJobRunsRequest{ ProjectName: "proj", JobName: "job1", @@ -144,7 +144,7 @@ func TestJobRunHandler(t *testing.T) { t.Run("JobRunInput", func(t *testing.T) { t.Run("returns error when project name is invalid", func(t *testing.T) { service := new(mockJobRunService) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "", @@ -162,7 +162,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("returns error when job name is invalid", func(t *testing.T) { service := new(mockJobRunService) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "proj", @@ -180,7 +180,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("returns error when executor is invalid", func(t *testing.T) { service := new(mockJobRunService) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "proj", @@ -198,7 +198,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("returns error when scheduled_at is invalid", func(t *testing.T) { service := new(mockJobRunService) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "proj", @@ -215,7 +215,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("returns error when run config is invalid", func(t *testing.T) { service := new(mockJobRunService) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "proj", @@ -237,7 +237,7 @@ func TestJobRunHandler(t *testing.T) { Return(&scheduler.ExecutorInput{}, fmt.Errorf("error in service")) defer service.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "proj", @@ -263,7 +263,7 @@ func TestJobRunHandler(t *testing.T) { }, nil) defer service.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) inputRequest := pb.JobRunInputRequest{ ProjectName: "proj", @@ -327,7 +327,7 @@ func TestJobRunHandler(t *testing.T) { jobRunService.On("GetInterval", ctx, tenant.ProjectName(projectName), scheduler.JobName(jobName), jobScheduleTime).Return(dataInterval, nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, thirdPartySensorService) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, thirdPartySensorService, nil) req := &pb.GetThirdPartySensorRequest{ ThirdPartyType: upstreamResolverType.String(), @@ -393,7 +393,7 @@ func TestJobRunHandler(t *testing.T) { jobRunService.On("GetInterval", ctx, tenant.ProjectName(projectName), scheduler.JobName(jobName), jobScheduleTime).Return(dataInterval, nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, thirdPartySensorService) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, thirdPartySensorService, nil) req := &pb.GetThirdPartySensorRequest{ ThirdPartyType: upstreamResolverType.String(), @@ -440,7 +440,7 @@ func TestJobRunHandler(t *testing.T) { jobRunService.On("GetJobRuns", ctx, tenant.ProjectName(projectName), job.Name, query).Return(jobRuns, "", nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: projectName, @@ -485,7 +485,7 @@ func TestJobRunHandler(t *testing.T) { jobRunService.On("GetJobRuns", ctx, tenant.ProjectName(projectName), job.Name, query).Return(jobRuns, "", nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: projectName, @@ -523,7 +523,7 @@ func TestJobRunHandler(t *testing.T) { jobRunService.On("GetJobRuns", ctx, tenant.ProjectName(projectName), job.Name, query).Return(nil, "", fmt.Errorf("some random error")) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: projectName, @@ -537,7 +537,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("should not return job runs if project name is not valid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: "", JobName: "transform-tables", @@ -552,7 +552,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("should not return job runs if job name is not valid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: "some-project", JobName: "", @@ -566,7 +566,7 @@ func TestJobRunHandler(t *testing.T) { assert.Nil(t, resp) }) t.Run("should not return job runs if only start date is invalid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: "some-project", JobName: "jobname", @@ -579,7 +579,7 @@ func TestJobRunHandler(t *testing.T) { assert.Nil(t, resp) }) t.Run("should not return job runs if only end date is invalid", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) req := &pb.JobRunRequest{ ProjectName: "some-project", JobName: "jobname", @@ -594,7 +594,7 @@ func TestJobRunHandler(t *testing.T) { }) t.Run("UploadToScheduler", func(t *testing.T) { t.Run("should fail deployment if project name empty", func(t *testing.T) { - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) namespaceName := "namespace-name" req := &pb.UploadToSchedulerRequest{ ProjectName: "", @@ -613,7 +613,7 @@ func TestJobRunHandler(t *testing.T) { } jobRunService := new(mockJobRunService) jobRunService.On("UploadToScheduler", ctx, tenant.ProjectName(projectName)).Return(nil) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, nil) _, err := jobRunHandler.UploadToScheduler(ctx, req) assert.Nil(t, err) @@ -634,7 +634,7 @@ func TestJobRunHandler(t *testing.T) { Value: eventValues, }, } - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) resp, err := jobRunHandler.RegisterJobEvent(ctx, req) assert.NotNil(t, err) @@ -658,7 +658,7 @@ func TestJobRunHandler(t *testing.T) { Value: eventValues, }, } - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) resp, err := jobRunHandler.RegisterJobEvent(ctx, req) assert.NotNil(t, err) @@ -681,7 +681,7 @@ func TestJobRunHandler(t *testing.T) { Value: eventValues, }, } - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) resp, err := jobRunHandler.RegisterJobEvent(ctx, req) assert.NotNil(t, err) @@ -705,7 +705,7 @@ func TestJobRunHandler(t *testing.T) { Value: eventValues, }, } - jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, nil, nil, nil, nil, nil, nil, nil) resp, err := jobRunHandler.RegisterJobEvent(ctx, req) assert.NotNil(t, err) @@ -756,7 +756,7 @@ func TestJobRunHandler(t *testing.T) { notifier.On("Relay", ctx, event).Return(nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, notifier, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, notifier, nil, nil, nil, nil, nil) resp, err := jobRunHandler.RegisterJobEvent(ctx, req) assert.NotNil(t, err) @@ -807,7 +807,7 @@ func TestJobRunHandler(t *testing.T) { notifier.On("Relay", ctx, event).Return(nil) defer jobRunService.AssertExpectations(t) - jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, notifier, nil, nil, nil, nil) + jobRunHandler := v1beta1.NewJobRunHandler(logger, jobRunService, notifier, nil, nil, nil, nil, nil) resp, err := jobRunHandler.RegisterJobEvent(ctx, req) assert.NotNil(t, err) @@ -822,7 +822,7 @@ func TestJobRunHandler(t *testing.T) { service := new(mockJobRunService) defer service.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) request := &pb.GetIntervalRequest{ ProjectName: "", JobName: "test_job", @@ -840,7 +840,7 @@ func TestJobRunHandler(t *testing.T) { service := new(mockJobRunService) defer service.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) request := &pb.GetIntervalRequest{ ProjectName: "test_project", JobName: "", @@ -858,7 +858,7 @@ func TestJobRunHandler(t *testing.T) { service := new(mockJobRunService) defer service.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) request := &pb.GetIntervalRequest{ ProjectName: "test_project", JobName: "test_job", @@ -876,7 +876,7 @@ func TestJobRunHandler(t *testing.T) { service := new(mockJobRunService) defer service.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) request := &pb.GetIntervalRequest{ ProjectName: "test_project", JobName: "test_job", @@ -932,7 +932,7 @@ func TestJobRunHandler(t *testing.T) { assert.NotNil(t, interval) assert.NoError(t, err) - handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, service, nil, nil, nil, nil, nil, nil) request := &pb.GetIntervalRequest{ ProjectName: "test_project", JobName: "test_job", @@ -955,7 +955,7 @@ func TestJobRunHandler(t *testing.T) { defer jobRunService.AssertExpectations(t) defer jobLineageService.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, jobLineageService, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, jobLineageService, nil, nil, nil) req := &pb.GetJobRunLineageSummaryRequest{ TargetJobs: []*pb.TargetJobRunIdentifier{ @@ -979,7 +979,7 @@ func TestJobRunHandler(t *testing.T) { defer jobRunService.AssertExpectations(t) defer jobLineageService.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, jobLineageService, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, jobLineageService, nil, nil, nil) req := &pb.GetJobRunLineageSummaryRequest{ TargetJobs: []*pb.TargetJobRunIdentifier{ @@ -1006,7 +1006,7 @@ func TestJobRunHandler(t *testing.T) { defer jobRunService.AssertExpectations(t) defer jobLineageService.AssertExpectations(t) - handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, jobLineageService, nil, nil) + handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, jobLineageService, nil, nil, nil) scheduledAt := timestamppb.Now() req := &pb.GetJobRunLineageSummaryRequest{ @@ -1045,6 +1045,58 @@ func TestJobRunHandler(t *testing.T) { assert.Equal(t, len(mockLineages), len(resp.Jobs)) }) }) + + t.Run("GenerateExpectedFinishTime", func(t *testing.T) { + t.Run("should return error when estimator service error", func(t *testing.T) { + jobRunService := new(mockJobRunService) + defer jobRunService.AssertExpectations(t) + + jobExpectatorService := NewJobExpectatorService(t) + defer jobExpectatorService.AssertExpectations(t) + + handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, jobExpectatorService) + + req := &pb.GenerateExpectedFinishTimeRequest{ + ProjectName: projectName, + JobNames: []string{"job-A"}, + ScheduledRangeInHours: 12, + } + + jobExpectatorService.On("GenerateExpectedFinishTimes", ctx, tenant.ProjectName(projectName), []scheduler.JobName{"job-A"}, mock.Anything, mock.Anything, 12*time.Hour).Return(nil, errors.New("service error")) + resp, err := handler.GenerateExpectedFinishTime(ctx, req) + assert.NotNil(t, err) + assert.Nil(t, resp) + assert.ErrorContains(t, err, "unable to generate expected finish times") + }) + t.Run("should return expected finish time successfully", func(t *testing.T) { + jobRunService := new(mockJobRunService) + defer jobRunService.AssertExpectations(t) + + jobExpectatorService := NewJobExpectatorService(t) + defer jobExpectatorService.AssertExpectations(t) + + handler := v1beta1.NewJobRunHandler(logger, jobRunService, nil, nil, nil, nil, nil, jobExpectatorService) + + req := &pb.GenerateExpectedFinishTimeRequest{ + ProjectName: projectName, + JobNames: []string{"job-A"}, + ScheduledRangeInHours: 12, + } + + expectedFinishTime := timestamppb.New(time.Now().Add(30 * time.Minute)) + + jobExpectatorService.On("GenerateExpectedFinishTimes", ctx, tenant.ProjectName(projectName), []scheduler.JobName{"job-A"}, mock.Anything, mock.Anything, 12*time.Hour).Return(map[scheduler.JobSchedule]service.FinishTimeDetail{ + { + JobName: "job-A", + ScheduledAt: time.Now(), + }: {FinishTime: expectedFinishTime.AsTime(), Status: service.FinishTimeStatusInprogress}, + }, nil) + resp, err := handler.GenerateExpectedFinishTime(ctx, req) + assert.Nil(t, err) + assert.NotNil(t, resp) + assert.Equal(t, 1, len(resp.InprogressJobs)) + }) + }) } type mockThirdPartyClient struct { @@ -1152,3 +1204,53 @@ func (m *mockNotifier) Relay(ctx context.Context, event *scheduler.Event) error args := m.Called(ctx, event) return args.Error(0) } + +// JobExpectatorService is an autogenerated mock type for the JobExpectatorService type +type JobExpectatorService struct { + mock.Mock +} + +// GenerateExpectedFinishTimes provides a mock function with given fields: ctx, projectName, jobNames, labels, referenceTime, scheduleRangeInHours +func (_m *JobExpectatorService) GenerateExpectedFinishTimes(ctx context.Context, projectName tenant.ProjectName, jobNames []scheduler.JobName, labels map[string]string, referenceTime time.Time, scheduleRangeInHours time.Duration) (map[scheduler.JobSchedule]service.FinishTimeDetail, error) { + ret := _m.Called(ctx, projectName, jobNames, labels, referenceTime, scheduleRangeInHours) + + if len(ret) == 0 { + panic("no return value specified for GenerateExpectedFinishTimes") + } + + var r0 map[scheduler.JobSchedule]service.FinishTimeDetail + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, tenant.ProjectName, []scheduler.JobName, map[string]string, time.Time, time.Duration) (map[scheduler.JobSchedule]service.FinishTimeDetail, error)); ok { + return rf(ctx, projectName, jobNames, labels, referenceTime, scheduleRangeInHours) + } + if rf, ok := ret.Get(0).(func(context.Context, tenant.ProjectName, []scheduler.JobName, map[string]string, time.Time, time.Duration) map[scheduler.JobSchedule]service.FinishTimeDetail); ok { + r0 = rf(ctx, projectName, jobNames, labels, referenceTime, scheduleRangeInHours) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[scheduler.JobSchedule]service.FinishTimeDetail) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, tenant.ProjectName, []scheduler.JobName, map[string]string, time.Time, time.Duration) error); ok { + r1 = rf(ctx, projectName, jobNames, labels, referenceTime, scheduleRangeInHours) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// NewJobExpectatorService creates a new instance of JobExpectatorService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewJobExpectatorService(t interface { + mock.TestingT + Cleanup(func()) +}, +) *JobExpectatorService { + mock := &JobExpectatorService{} + mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/core/scheduler/service/job_expectator_service.go b/core/scheduler/service/job_expectator_service.go new file mode 100644 index 0000000000..12b15496b2 --- /dev/null +++ b/core/scheduler/service/job_expectator_service.go @@ -0,0 +1,268 @@ +package service + +import ( + "context" + "fmt" + "time" + + "github.com/goto/salt/log" + + "github.com/goto/optimus/core/scheduler" + "github.com/goto/optimus/core/tenant" +) + +type FinishTimeStatus string + +const ( + FinishTimeStatusInprogress FinishTimeStatus = "inprogress" + FinishTimeStatusFinished FinishTimeStatus = "finished" +) + +type FinishTimeDetail struct { + Status FinishTimeStatus + FinishTime time.Time +} + +type JobRunExpectationDetailsRepository interface { + UpsertExpectedFinishTime(ctx context.Context, projectName tenant.ProjectName, jobName scheduler.JobName, scheduledAt, expectedFinishTime time.Time) error +} + +type JobExpectatorService struct { + l log.Logger + bufferDuration time.Duration + jobRunExpectationDetailsRepo JobRunExpectationDetailsRepository + jobDetailsGetter JobDetailsGetter + jobLineageFetcher JobLineageFetcher + durationEstimator DurationEstimator +} + +func NewJobExpectatorService( + logger log.Logger, + bufferDurationInMinutes int, + jobRunExpectationDetailsRepo JobRunExpectationDetailsRepository, + jobDetailsGetter JobDetailsGetter, + jobLineageFetcher JobLineageFetcher, + durationEstimator DurationEstimator, +) *JobExpectatorService { + return &JobExpectatorService{ + l: logger, + bufferDuration: time.Duration(bufferDurationInMinutes) * time.Minute, + jobRunExpectationDetailsRepo: jobRunExpectationDetailsRepo, + jobDetailsGetter: jobDetailsGetter, + jobLineageFetcher: jobLineageFetcher, + durationEstimator: durationEstimator, + } +} + +func (s *JobExpectatorService) GenerateExpectedFinishTimes(ctx context.Context, projectName tenant.ProjectName, jobNames []scheduler.JobName, labels map[string]string, referenceTime time.Time, scheduleRangeInHours time.Duration) (map[scheduler.JobSchedule]FinishTimeDetail, error) { + jobRunExpectedFinishTimeDetail := make(map[scheduler.JobSchedule]FinishTimeDetail) + + if len(jobNames) == 0 && len(labels) == 0 { + s.l.Warn("no job names or labels provided, skipping expected finish time generation") + return jobRunExpectedFinishTimeDetail, nil + } + + // fetch job details + jobsWithDetails, err := getJobWithDetails(ctx, s.l, s.jobDetailsGetter, projectName, jobNames, labels) + if err != nil { + return nil, err + } + if len(jobsWithDetails) == 0 { + return jobRunExpectedFinishTimeDetail, nil + } + + // get scheduled at + jobSchedules := getJobSchedules(s.l, jobsWithDetails, scheduleRangeInHours, referenceTime) + if len(jobSchedules) == 0 { + s.l.Warn("no job schedules found for the given jobs in the next schedule range, skipping expected finish time generation") + return jobRunExpectedFinishTimeDetail, nil + } + + // get lineage + jobsWithLineageMap, err := s.jobLineageFetcher.GetJobLineage(ctx, jobSchedules) + if err != nil { + s.l.Error(fmt.Sprintf("failed to get job lineage, skipping expected finish time generation: %s", err.Error())) + return nil, err + } + + uniqueJobNames := collectJobNames(jobsWithLineageMap) + + // get job durations estimation + jobDurationsEstimation, err := s.durationEstimator.GetPercentileDurationByJobNames(ctx, referenceTime, uniqueJobNames) + if err != nil { + s.l.Error(fmt.Sprintf("failed to estimate job durations, skipping expected finish time generation: %s", err.Error())) + return nil, err + } + + // calculate expected finish time for each job + for _, jobSchedule := range jobSchedules { + if jobSchedule == nil { // safety check + s.l.Warn("nil job schedule provided, cannot calculate expected finish time") + continue + } + key := *jobSchedule + if _, ok := jobRunExpectedFinishTimeDetail[key]; ok { // already calculated + continue + } + if _, ok := jobsWithLineageMap[jobSchedule.JobName]; !ok { // safety check + s.l.Warn(fmt.Sprintf("no lineage found for job [%s], cannot calculate expected finish time", jobSchedule.JobName)) + continue + } + s.l.Debug("calculating expected finish time for job", "job", jobSchedule.JobName, "scheduled_at", jobSchedule.ScheduledAt) + err := s.PopulateExpectedFinishTime(jobSchedule, jobsWithLineageMap[jobSchedule.JobName], jobRunExpectedFinishTimeDetail, jobDurationsEstimation, referenceTime) + if err != nil { + s.l.Error(fmt.Sprintf("failed to populate expected finish time for job [%s]: %s", jobSchedule.JobName, err.Error())) + return nil, err + } + } + + // save to db + for _, jobSchedule := range jobSchedules { + key := *jobSchedule + expectedFinishTimeDetail, ok := jobRunExpectedFinishTimeDetail[key] + if !ok { + s.l.Warn(fmt.Sprintf("expected finish time not found for job schedule [job: %s, scheduled_at: %s]", jobSchedule.JobName, jobSchedule.ScheduledAt)) + continue + } + // only upsert if still in progress + if expectedFinishTimeDetail.Status == FinishTimeStatusInprogress { + s.l.Info(fmt.Sprintf("expected finish time calculated [job: %s, scheduled_at: %s, expected_finish_time: %s, status: %s]", jobSchedule.JobName, jobSchedule.ScheduledAt, expectedFinishTimeDetail.FinishTime, expectedFinishTimeDetail.Status)) + err := s.jobRunExpectationDetailsRepo.UpsertExpectedFinishTime(ctx, projectName, jobSchedule.JobName, jobSchedule.ScheduledAt, expectedFinishTimeDetail.FinishTime) + if err != nil { + s.l.Error(fmt.Sprintf("failed to upsert expected finish time for job schedule [job: %s, scheduled_at: %s, error: %s]", jobSchedule.JobName, jobSchedule.ScheduledAt, err.Error())) + return nil, err + } + } + } + + // expected finish time generated for target jobs + finalJobRunExpectedFinishTimes := make(map[scheduler.JobSchedule]FinishTimeDetail) + for _, jobSchedule := range jobSchedules { + key := *jobSchedule + expectedFinishTime, ok := jobRunExpectedFinishTimeDetail[key] + if !ok { + s.l.Warn(fmt.Sprintf("expected finish time not found for job schedule [job: %s, scheduled_at: %s]", jobSchedule.JobName, jobSchedule.ScheduledAt)) + continue + } + finalJobRunExpectedFinishTimes[key] = expectedFinishTime + } + + return finalJobRunExpectedFinishTimes, nil +} + +func (s *JobExpectatorService) PopulateExpectedFinishTime(jobTarget *scheduler.JobSchedule, currentJobWithLineage *scheduler.JobLineageSummary, jobRunExpectedFinishTimes map[scheduler.JobSchedule]FinishTimeDetail, jobDurationsEstimation map[scheduler.JobName]*time.Duration, referenceTime time.Time) error { + // pre condition check + if currentJobWithLineage == nil || currentJobWithLineage.JobRuns[jobTarget.JobName] == nil { + // TODO: add metric to track how many times this happens + s.l.Error(fmt.Sprintf("[critical] no job run found for job [%s], skipping expected finish time calculation", currentJobWithLineage.JobName)) + return nil + } + if !currentJobWithLineage.IsEnabled { + s.l.Debug(fmt.Sprintf("job is disabled, skipping expected finish time calculation [%s]", currentJobWithLineage.JobName)) + return nil + } + + currentJobRun := currentJobWithLineage.JobRuns[jobTarget.JobName] + currentJobScheduleKey := scheduler.JobSchedule{ + // TODO: add project name as well, PR: https://github.com/goto/optimus/pull/501 + JobName: currentJobWithLineage.JobName, + ScheduledAt: currentJobRun.ScheduledAt, + } + + taskStartTime := currentJobRun.TaskStartTime + jobEndTime := currentJobRun.JobEndTime + + // termination condition: 1. if end_time is not nil + if jobEndTime != nil { + // if job has already ended, we can set the expected finish time to job end time + s.l.Debug(fmt.Sprintf("job has already ended, setting expected finish time to job end time [job: %s, scheduled_at: %s]", currentJobWithLineage.JobName, currentJobRun.ScheduledAt)) + jobRunExpectedFinishTimes[currentJobScheduleKey] = FinishTimeDetail{ + Status: FinishTimeStatusFinished, + FinishTime: *jobEndTime, + } + return nil + } + + // get estimated duration, once we know the job is not finished yet + // this information is needed to calculate expected finish time + // estimationDuration already has buffer time included, so we don't need to add extra buffer time in the expected finish time calculation + estimatedDuration, ok := jobDurationsEstimation[currentJobWithLineage.JobName] + if !ok || estimatedDuration == nil { + // if no estimation found, we cannot proceed + s.l.Warn(fmt.Sprintf("no duration estimation found for job [%s], cannot calculate expected finish time", currentJobWithLineage.JobName)) + // rest of the logic can still work with buffer duration, which means expected finish time will be the same as max upstream expected finish time. + // this is a better approach than skipping expected finish time calculation entirely, as we can still provide some expected finish time estimation based on upstream jobs, + // rather than having no estimation at all. + estimatedDuration = &s.bufferDuration // use buffer time as default duration + } + + // termination condition: 2. cache if already calculated + if _, ok := jobRunExpectedFinishTimes[currentJobScheduleKey]; ok { + s.l.Debug(fmt.Sprintf("expected finish time already calculated for job [%s], skipping", currentJobWithLineage.JobName)) + return nil + } + + if taskStartTime != nil { + // termination condition: 3. if start_time is not nil, end_time is nil, and scheduled_time+duration 0 { - jobsWithDetails, err := s.jobDetailsGetter.GetJobsByLabels(ctx, projectName, labels) + jobsWithDetails, err := jobDetailsGetter.GetJobsByLabels(ctx, projectName, labels) if err != nil { return nil, err } @@ -275,15 +275,15 @@ func (s JobSLAPredictorService) getJobWithDetails(ctx context.Context, projectNa filteredJobByLabel[job.Name] = job filteredJobMerged[job.Name] = job } - s.l.Info("fetched jobs by labels", "count", len(filteredJobByLabel)) - s.l.Info("jobs fetched by labels", "jobs", filteredJobByLabel) + l.Info("fetched jobs by labels", "count", len(filteredJobByLabel)) + l.Info("jobs fetched by labels", "jobs", filteredJobByLabel) } filteredJobSchedules := []*scheduler.JobWithDetails{} for _, job := range filteredJobMerged { filteredJobSchedules = append(filteredJobSchedules, job) } - s.l.Info("total jobs fetched after merging by names and labels", "count", len(filteredJobSchedules)) + l.Info("total jobs fetched after merging by names and labels", "count", len(filteredJobSchedules)) return filteredJobSchedules, nil } @@ -328,36 +328,36 @@ func (s *JobSLAPredictorService) getTargetedSLA(jobs []*scheduler.JobWithDetails return targetedSLAByJobName } -func (s *JobSLAPredictorService) getJobSchedules(jobs []*scheduler.JobWithDetails, scheduleRangeInHours time.Duration, referenceTime time.Time) map[scheduler.JobName]*scheduler.JobSchedule { +func getJobSchedules(l log.Logger, jobs []*scheduler.JobWithDetails, scheduleRangeInHours time.Duration, referenceTime time.Time) map[scheduler.JobName]*scheduler.JobSchedule { jobSchedules := make(map[scheduler.JobName]*scheduler.JobSchedule) - s.l.Info("jobs to get schedules for", "count", len(jobs)) + l.Info("jobs to get schedules for", "count", len(jobs)) for _, job := range jobs { if job.Schedule == nil { continue } nextScheduledAt, err := job.Schedule.GetNextSchedule(referenceTime) if err != nil { - s.l.Warn("failed to get scheduled at for job, skipping SLA prediction", "job", job.Name, "error", err) + l.Warn("failed to get scheduled at for job, skipping SLA prediction", "job", job.Name, "error", err) continue } prevScheduledAt, err := job.Schedule.GetPreviousSchedule(referenceTime) if err != nil { - s.l.Warn("failed to get previous scheduled at for job, skipping SLA prediction", "job", job.Name, "error", err) + l.Warn("failed to get previous scheduled at for job, skipping SLA prediction", "job", job.Name, "error", err) continue } var scheduledAt time.Time if nextScheduledAt.Sub(referenceTime).Milliseconds() < scheduleRangeInHours.Milliseconds() { - s.l.Debug("using next scheduled at for job within schedule range", "job", job.Name) + l.Debug("using next scheduled at for job within schedule range", "job", job.Name) scheduledAt = nextScheduledAt } else if referenceTime.Sub(prevScheduledAt).Milliseconds() < scheduleRangeInHours.Milliseconds() { - s.l.Debug("using previous scheduled at for job within schedule range", "job", job.Name) + l.Debug("using previous scheduled at for job within schedule range", "job", job.Name) scheduledAt = prevScheduledAt } if scheduledAt.IsZero() { - s.l.Warn("no scheduled at found for job in the next schedule range, skipping SLA prediction", "job", job.Name) + l.Warn("no scheduled at found for job in the next schedule range, skipping SLA prediction", "job", job.Name) continue } @@ -366,7 +366,7 @@ func (s *JobSLAPredictorService) getJobSchedules(jobs []*scheduler.JobWithDetail ScheduledAt: scheduledAt, } } - s.l.Info("total job schedules found", "count", len(jobSchedules)) + l.Info("total job schedules found", "count", len(jobSchedules)) // jobs not having schedule within the range will be skipped jobsSkipped := []string{} for _, job := range jobs { @@ -375,7 +375,7 @@ func (s *JobSLAPredictorService) getJobSchedules(jobs []*scheduler.JobWithDetail } } if len(jobsSkipped) > 0 { - s.l.Info("jobs skipped due to no schedule within the range", "jobs", jobsSkipped) + l.Info("jobs skipped due to no schedule within the range", "jobs", jobsSkipped) } return jobSchedules } diff --git a/core/scheduler/service/job_sla_predictor_service_test.go b/core/scheduler/service/job_sla_predictor_service_test.go index eb3f24981a..0e301c0414 100644 --- a/core/scheduler/service/job_sla_predictor_service_test.go +++ b/core/scheduler/service/job_sla_predictor_service_test.go @@ -106,7 +106,7 @@ func TestIdentifySLABreaches(t *testing.T) { Severity: "", } - jobDetailsGetter.On("GetJobsByLabels", ctx, projectName, labels, false, "").Return([]*scheduler.JobWithDetails{}, nil).Once() + jobDetailsGetter.On("GetJobsByLabels", ctx, projectName, labels).Return([]*scheduler.JobWithDetails{}, nil).Once() // when jobBreachRootCause, err := jobSLAPredictorService.IdentifySLABreaches(ctx, projectName, jobNames, labels, reqConfig) @@ -1479,7 +1479,7 @@ func (_m *JobDetailsGetter) GetJobs(ctx context.Context, projectName tenant.Proj // GetJobsByLabels provides a mock function with given fields: ctx, projectName, labels func (_m *JobDetailsGetter) GetJobsByLabels(ctx context.Context, projectName tenant.ProjectName, labels map[string]string) ([]*scheduler.JobWithDetails, error) { - ret := _m.Called(ctx, projectName, labels, false, "") + ret := _m.Called(ctx, projectName, labels) if len(ret) == 0 { panic("no return value specified for GetJobsByLabels") diff --git a/internal/store/postgres/migrations/000080_create_job_run_expectation_details_table.down.sql b/internal/store/postgres/migrations/000080_create_job_run_expectation_details_table.down.sql new file mode 100644 index 0000000000..776a22b711 --- /dev/null +++ b/internal/store/postgres/migrations/000080_create_job_run_expectation_details_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS job_run_expectation_details; \ No newline at end of file diff --git a/internal/store/postgres/migrations/000080_create_job_run_expectation_details_table.up.sql b/internal/store/postgres/migrations/000080_create_job_run_expectation_details_table.up.sql new file mode 100644 index 0000000000..59de0321a3 --- /dev/null +++ b/internal/store/postgres/migrations/000080_create_job_run_expectation_details_table.up.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS job_run_expectation_details ( + project_name TEXT NOT NULL, + job_name TEXT NOT NULL, + scheduled_at TIMESTAMPTZ NOT NULL, + expected_finish_time TIMESTAMPTZ, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + PRIMARY KEY (project_name, job_name, scheduled_at) +); \ No newline at end of file diff --git a/internal/store/postgres/scheduler/job_run_repository.go b/internal/store/postgres/scheduler/job_run_repository.go index 835967ebda..9e5c143045 100644 --- a/internal/store/postgres/scheduler/job_run_repository.go +++ b/internal/store/postgres/scheduler/job_run_repository.go @@ -614,6 +614,17 @@ ORDER BY scheduled_at DESC return summaries, nil } +func (j *JobRunRepository) UpsertExpectedFinishTime(ctx context.Context, projectName tenant.ProjectName, jobName scheduler.JobName, scheduledAt, expectedFinishTime time.Time) error { + upsertQuery := ` + INSERT INTO job_run_expected_finish_time (project_name, job_name, scheduled_at, expected_finish_time, created_at, updated_at) + VALUES ($1, $2, $3, $4, NOW(), NOW()) + ON CONFLICT (project_name, job_name, scheduled_at) + DO UPDATE SET expected_finish_time = EXCLUDED.expected_finish_time, updated_at = NOW() + ` + _, err := j.db.Exec(ctx, upsertQuery, projectName, jobName, scheduledAt, expectedFinishTime) + return errors.WrapIfErr(scheduler.EntityJobRun, "unable to upsert expected finish time", err) +} + func NewJobRunRepository(pool *pgxpool.Pool, l log.Logger) *JobRunRepository { return &JobRunRepository{ db: pool, diff --git a/protos/gotocompany/optimus/core/v1beta1/backup.pb.go b/protos/gotocompany/optimus/core/v1beta1/backup.pb.go index 641cf97a13..082d8c6d7f 100644 --- a/protos/gotocompany/optimus/core/v1beta1/backup.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/backup.pb.go @@ -648,13 +648,13 @@ var file_gotocompany_optimus_core_v1beta1_backup_proto_rawDesc = []byte{ 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x3a, 0x01, 0x2a, 0x22, 0x5c, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, - 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0xe0, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x22, 0x5c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0xe0, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, diff --git a/protos/gotocompany/optimus/core/v1beta1/job_run.pb.go b/protos/gotocompany/optimus/core/v1beta1/job_run.pb.go index b16a5c2fce..7f6e4bb23f 100644 --- a/protos/gotocompany/optimus/core/v1beta1/job_run.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/job_run.pb.go @@ -2802,6 +2802,229 @@ func (x *UpstreamJobsStatus) GetJobsStatus() []*UpstreamJobStatus { return nil } +type GenerateExpectedFinishTimeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` + JobNames []string `protobuf:"bytes,2,rep,name=job_names,json=jobNames,proto3" json:"job_names,omitempty"` + JobLabels map[string]string `protobuf:"bytes,3,rep,name=job_labels,json=jobLabels,proto3" json:"job_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ScheduledRangeInHours int32 `protobuf:"varint,4,opt,name=scheduled_range_in_hours,json=scheduledRangeInHours,proto3" json:"scheduled_range_in_hours,omitempty"` + ReferenceTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=reference_time,json=referenceTime,proto3" json:"reference_time,omitempty"` // RFC3339 format +} + +func (x *GenerateExpectedFinishTimeRequest) Reset() { + *x = GenerateExpectedFinishTimeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateExpectedFinishTimeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateExpectedFinishTimeRequest) ProtoMessage() {} + +func (x *GenerateExpectedFinishTimeRequest) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateExpectedFinishTimeRequest.ProtoReflect.Descriptor instead. +func (*GenerateExpectedFinishTimeRequest) Descriptor() ([]byte, []int) { + return file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDescGZIP(), []int{40} +} + +func (x *GenerateExpectedFinishTimeRequest) GetProjectName() string { + if x != nil { + return x.ProjectName + } + return "" +} + +func (x *GenerateExpectedFinishTimeRequest) GetJobNames() []string { + if x != nil { + return x.JobNames + } + return nil +} + +func (x *GenerateExpectedFinishTimeRequest) GetJobLabels() map[string]string { + if x != nil { + return x.JobLabels + } + return nil +} + +func (x *GenerateExpectedFinishTimeRequest) GetScheduledRangeInHours() int32 { + if x != nil { + return x.ScheduledRangeInHours + } + return 0 +} + +func (x *GenerateExpectedFinishTimeRequest) GetReferenceTime() *timestamppb.Timestamp { + if x != nil { + return x.ReferenceTime + } + return nil +} + +type GenerateExpectedFinishTimeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InprogressJobs map[string]*FinishTimeDetailResponse `protobuf:"bytes,1,rep,name=inprogress_jobs,json=inprogressJobs,proto3" json:"inprogress_jobs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + FinishedJobs map[string]*FinishTimeDetailResponse `protobuf:"bytes,2,rep,name=finished_jobs,json=finishedJobs,proto3" json:"finished_jobs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *GenerateExpectedFinishTimeResponse) Reset() { + *x = GenerateExpectedFinishTimeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateExpectedFinishTimeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateExpectedFinishTimeResponse) ProtoMessage() {} + +func (x *GenerateExpectedFinishTimeResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[41] + 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 GenerateExpectedFinishTimeResponse.ProtoReflect.Descriptor instead. +func (*GenerateExpectedFinishTimeResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDescGZIP(), []int{41} +} + +func (x *GenerateExpectedFinishTimeResponse) GetInprogressJobs() map[string]*FinishTimeDetailResponse { + if x != nil { + return x.InprogressJobs + } + return nil +} + +func (x *GenerateExpectedFinishTimeResponse) GetFinishedJobs() map[string]*FinishTimeDetailResponse { + if x != nil { + return x.FinishedJobs + } + return nil +} + +type FinishTimeDetailResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ScheduledAt *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=scheduled_at,json=scheduledAt,proto3" json:"scheduled_at,omitempty"` + // Types that are assignable to FinishTime: + // + // *FinishTimeDetailResponse_ExpectedFinishTime + // *FinishTimeDetailResponse_ActualFinishTime + FinishTime isFinishTimeDetailResponse_FinishTime `protobuf_oneof:"finish_time"` +} + +func (x *FinishTimeDetailResponse) Reset() { + *x = FinishTimeDetailResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinishTimeDetailResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinishTimeDetailResponse) ProtoMessage() {} + +func (x *FinishTimeDetailResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[42] + 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 FinishTimeDetailResponse.ProtoReflect.Descriptor instead. +func (*FinishTimeDetailResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDescGZIP(), []int{42} +} + +func (x *FinishTimeDetailResponse) GetScheduledAt() *timestamppb.Timestamp { + if x != nil { + return x.ScheduledAt + } + return nil +} + +func (m *FinishTimeDetailResponse) GetFinishTime() isFinishTimeDetailResponse_FinishTime { + if m != nil { + return m.FinishTime + } + return nil +} + +func (x *FinishTimeDetailResponse) GetExpectedFinishTime() *timestamppb.Timestamp { + if x, ok := x.GetFinishTime().(*FinishTimeDetailResponse_ExpectedFinishTime); ok { + return x.ExpectedFinishTime + } + return nil +} + +func (x *FinishTimeDetailResponse) GetActualFinishTime() *timestamppb.Timestamp { + if x, ok := x.GetFinishTime().(*FinishTimeDetailResponse_ActualFinishTime); ok { + return x.ActualFinishTime + } + return nil +} + +type isFinishTimeDetailResponse_FinishTime interface { + isFinishTimeDetailResponse_FinishTime() +} + +type FinishTimeDetailResponse_ExpectedFinishTime struct { + ExpectedFinishTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expected_finish_time,json=expectedFinishTime,proto3,oneof"` +} + +type FinishTimeDetailResponse_ActualFinishTime struct { + ActualFinishTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=actual_finish_time,json=actualFinishTime,proto3,oneof"` +} + +func (*FinishTimeDetailResponse_ExpectedFinishTime) isFinishTimeDetailResponse_FinishTime() {} + +func (*FinishTimeDetailResponse_ActualFinishTime) isFinishTimeDetailResponse_FinishTime() {} + var File_gotocompany_optimus_core_v1beta1_job_run_proto protoreflect.FileDescriptor var file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDesc = []byte{ @@ -3375,160 +3598,251 @@ var file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDesc = []byte{ 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x32, 0xfc, 0x11, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, - 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, - 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x3a, 0x01, 0x2a, 0x22, 0x38, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, - 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, - 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0xa7, 0x01, 0x0a, 0x06, 0x4a, 0x6f, 0x62, 0x52, - 0x75, 0x6e, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, - 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, - 0x6e, 0x12, 0xd2, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x74, 0x75, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x21, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, + 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x52, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x4a, 0x6f, 0x62, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x18, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x69, 0x6e, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, + 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x4a, 0x6f, 0x62, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa1, 0x04, 0x0a, 0x22, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, + 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6a, 0x6f, 0x62, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0e, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4a, 0x6f, 0x62, + 0x73, 0x12, 0x7b, 0x0a, 0x0d, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6a, 0x6f, + 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x1a, 0x7d, + 0x0a, 0x13, 0x49, 0x6e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4a, 0x6f, 0x62, 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, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x54, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, + 0x11, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4a, 0x6f, 0x62, 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, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x84, 0x02, 0x0a, 0x18, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4e, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x48, 0x00, 0x52, 0x12, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, + 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, + 0x52, 0x10, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, + 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x32, 0xeb, 0x13, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, + 0x52, 0x75, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, + 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0xa7, 0x01, 0x0a, 0x06, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, + 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0xdb, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x3c, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, + 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x12, + 0xd2, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x41, 0x22, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, + 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, - 0x75, 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x12, - 0xe6, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x79, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x53, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x67, 0x6f, + 0x72, 0x6f, 0x6c, 0x65, 0x12, 0xdb, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x3c, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x41, 0x22, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, + 0x6c, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, + 0x73, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, + 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x12, 0xe6, 0x01, + 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x53, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x53, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x46, 0x3a, 0x01, 0x2a, 0x1a, 0x41, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2d, 0x70, 0x61, 0x72, 0x74, - 0x79, 0x2d, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0xe5, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, 0x22, - 0x4f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, - 0x7b, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0xbf, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, + 0x1a, 0x41, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x74, 0x68, 0x69, 0x72, 0x64, 0x2d, 0x70, 0x61, 0x72, 0x74, 0x79, 0x2d, 0x73, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0xe5, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, + 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x54, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x53, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x22, 0x4f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x75, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x12, 0xbb, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, - 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x12, 0xcb, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x69, - 0x6e, 0x65, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0xbf, + 0x01, 0x0a, 0x11, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x3a, 0x01, 0x2a, + 0x12, 0xbb, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x6a, 0x6f, 0x62, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0xcb, + 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x69, 0x6e, 0x65, + 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x69, 0x6e, 0x65, 0x61, - 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x72, 0x75, 0x6e, 0x2d, 0x6c, - 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x2d, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xf1, - 0x01, 0x0a, 0x1a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x50, 0x6f, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x53, 0x4c, 0x41, 0x42, 0x72, 0x65, 0x61, 0x63, 0x68, 0x12, 0x43, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x50, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x53, 0x4c, 0x41, 0x42, 0x72, 0x65, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x50, 0x6f, - 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x4c, 0x41, 0x42, 0x72, 0x65, 0x61, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, - 0x3a, 0x01, 0x2a, 0x22, 0x3d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, - 0x6c, 0x61, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x63, 0x68, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x79, 0x42, 0x8f, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x42, 0x0d, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x92, 0x41, 0x3b, 0x12, 0x05, 0x32, 0x03, 0x30, 0x2e, 0x31, - 0x1a, 0x0e, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x3a, 0x39, 0x31, 0x30, 0x30, - 0x22, 0x04, 0x2f, 0x61, 0x70, 0x69, 0x2a, 0x01, 0x01, 0x72, 0x19, 0x0a, 0x17, 0x4f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x20, 0x4a, 0x6f, 0x62, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x72, 0x75, 0x6e, 0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x67, + 0x65, 0x2d, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xf1, 0x01, 0x0a, + 0x1a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x50, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x53, 0x4c, 0x41, 0x42, 0x72, 0x65, 0x61, 0x63, 0x68, 0x12, 0x43, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, + 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x50, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x53, 0x4c, 0x41, 0x42, 0x72, 0x65, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x44, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x50, 0x6f, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x4c, 0x41, 0x42, 0x72, 0x65, 0x61, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x22, 0x3d, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x6c, 0x61, 0x5f, 0x62, 0x72, + 0x65, 0x61, 0x63, 0x68, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x3a, 0x01, 0x2a, + 0x12, 0xec, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x43, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x69, + 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x62, + 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x01, 0x2a, 0x42, + 0x8f, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x42, 0x0d, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x50, 0x01, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x92, 0x41, 0x3b, 0x12, 0x05, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x1a, 0x0e, 0x31, + 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x3a, 0x39, 0x31, 0x30, 0x30, 0x22, 0x04, 0x2f, + 0x61, 0x70, 0x69, 0x2a, 0x01, 0x01, 0x72, 0x19, 0x0a, 0x17, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x75, + 0x73, 0x20, 0x4a, 0x6f, 0x62, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3544,7 +3858,7 @@ func file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDescGZIP() []byte { } var file_gotocompany_optimus_core_v1beta1_job_run_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes = make([]protoimpl.MessageInfo, 45) +var file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes = make([]protoimpl.MessageInfo, 51) var file_gotocompany_optimus_core_v1beta1_job_run_proto_goTypes = []interface{}{ (InstanceSpec_Type)(0), // 0: gotocompany.optimus.core.v1beta1.InstanceSpec.Type (InstanceSpecData_Type)(0), // 1: gotocompany.optimus.core.v1beta1.InstanceSpecData.Type @@ -3588,106 +3902,123 @@ var file_gotocompany_optimus_core_v1beta1_job_run_proto_goTypes = []interface{}{ (*IdentifyPotentialSLABreachResponse)(nil), // 39: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse (*UpstreamJobStatus)(nil), // 40: gotocompany.optimus.core.v1beta1.UpstreamJobStatus (*UpstreamJobsStatus)(nil), // 41: gotocompany.optimus.core.v1beta1.UpstreamJobsStatus - nil, // 42: gotocompany.optimus.core.v1beta1.JobRunInputResponse.EnvsEntry - nil, // 43: gotocompany.optimus.core.v1beta1.JobRunInputResponse.FilesEntry - nil, // 44: gotocompany.optimus.core.v1beta1.JobRunInputResponse.SecretsEntry - nil, // 45: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.JobLabelsEntry - nil, // 46: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.JobsEntry - (*timestamppb.Timestamp)(nil), // 47: google.protobuf.Timestamp - (*JobEvent)(nil), // 48: gotocompany.optimus.core.v1beta1.JobEvent - (*JobRun)(nil), // 49: gotocompany.optimus.core.v1beta1.JobRun - (*durationpb.Duration)(nil), // 50: google.protobuf.Duration + (*GenerateExpectedFinishTimeRequest)(nil), // 42: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeRequest + (*GenerateExpectedFinishTimeResponse)(nil), // 43: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse + (*FinishTimeDetailResponse)(nil), // 44: gotocompany.optimus.core.v1beta1.FinishTimeDetailResponse + nil, // 45: gotocompany.optimus.core.v1beta1.JobRunInputResponse.EnvsEntry + nil, // 46: gotocompany.optimus.core.v1beta1.JobRunInputResponse.FilesEntry + nil, // 47: gotocompany.optimus.core.v1beta1.JobRunInputResponse.SecretsEntry + nil, // 48: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.JobLabelsEntry + nil, // 49: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.JobsEntry + nil, // 50: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeRequest.JobLabelsEntry + nil, // 51: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.InprogressJobsEntry + nil, // 52: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.FinishedJobsEntry + (*timestamppb.Timestamp)(nil), // 53: google.protobuf.Timestamp + (*JobEvent)(nil), // 54: gotocompany.optimus.core.v1beta1.JobEvent + (*JobRun)(nil), // 55: gotocompany.optimus.core.v1beta1.JobRun + (*durationpb.Duration)(nil), // 56: google.protobuf.Duration } var file_gotocompany_optimus_core_v1beta1_job_run_proto_depIdxs = []int32{ - 47, // 0: gotocompany.optimus.core.v1beta1.DataCompleteness.date:type_name -> google.protobuf.Timestamp + 53, // 0: gotocompany.optimus.core.v1beta1.DataCompleteness.date:type_name -> google.protobuf.Timestamp 3, // 1: gotocompany.optimus.core.v1beta1.DexSensorResponse.log:type_name -> gotocompany.optimus.core.v1beta1.DataCompleteness - 47, // 2: gotocompany.optimus.core.v1beta1.GetThirdPartySensorRequest.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 2: gotocompany.optimus.core.v1beta1.GetThirdPartySensorRequest.scheduled_at:type_name -> google.protobuf.Timestamp 2, // 3: gotocompany.optimus.core.v1beta1.GetThirdPartySensorRequest.dex_sensor_request:type_name -> gotocompany.optimus.core.v1beta1.DexSensorRequest 4, // 4: gotocompany.optimus.core.v1beta1.GetThirdPartySensorResponse.dex_sensor_response:type_name -> gotocompany.optimus.core.v1beta1.DexSensorResponse - 47, // 5: gotocompany.optimus.core.v1beta1.GetIntervalRequest.reference_time:type_name -> google.protobuf.Timestamp - 47, // 6: gotocompany.optimus.core.v1beta1.GetIntervalResponse.start_time:type_name -> google.protobuf.Timestamp - 47, // 7: gotocompany.optimus.core.v1beta1.GetIntervalResponse.end_time:type_name -> google.protobuf.Timestamp - 48, // 8: gotocompany.optimus.core.v1beta1.RegisterJobEventRequest.event:type_name -> gotocompany.optimus.core.v1beta1.JobEvent - 47, // 9: gotocompany.optimus.core.v1beta1.JobRunInputRequest.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 5: gotocompany.optimus.core.v1beta1.GetIntervalRequest.reference_time:type_name -> google.protobuf.Timestamp + 53, // 6: gotocompany.optimus.core.v1beta1.GetIntervalResponse.start_time:type_name -> google.protobuf.Timestamp + 53, // 7: gotocompany.optimus.core.v1beta1.GetIntervalResponse.end_time:type_name -> google.protobuf.Timestamp + 54, // 8: gotocompany.optimus.core.v1beta1.RegisterJobEventRequest.event:type_name -> gotocompany.optimus.core.v1beta1.JobEvent + 53, // 9: gotocompany.optimus.core.v1beta1.JobRunInputRequest.scheduled_at:type_name -> google.protobuf.Timestamp 0, // 10: gotocompany.optimus.core.v1beta1.JobRunInputRequest.instance_type:type_name -> gotocompany.optimus.core.v1beta1.InstanceSpec.Type - 47, // 11: gotocompany.optimus.core.v1beta1.GetJobRunsRequest.since:type_name -> google.protobuf.Timestamp - 47, // 12: gotocompany.optimus.core.v1beta1.GetJobRunsRequest.until:type_name -> google.protobuf.Timestamp - 47, // 13: gotocompany.optimus.core.v1beta1.JobRunWithDetail.scheduled_at:type_name -> google.protobuf.Timestamp - 47, // 14: gotocompany.optimus.core.v1beta1.JobRunWithDetail.start_time:type_name -> google.protobuf.Timestamp - 47, // 15: gotocompany.optimus.core.v1beta1.JobRunWithDetail.end_time:type_name -> google.protobuf.Timestamp + 53, // 11: gotocompany.optimus.core.v1beta1.GetJobRunsRequest.since:type_name -> google.protobuf.Timestamp + 53, // 12: gotocompany.optimus.core.v1beta1.GetJobRunsRequest.until:type_name -> google.protobuf.Timestamp + 53, // 13: gotocompany.optimus.core.v1beta1.JobRunWithDetail.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 14: gotocompany.optimus.core.v1beta1.JobRunWithDetail.start_time:type_name -> google.protobuf.Timestamp + 53, // 15: gotocompany.optimus.core.v1beta1.JobRunWithDetail.end_time:type_name -> google.protobuf.Timestamp 15, // 16: gotocompany.optimus.core.v1beta1.GetJobRunsResponse.job_runs:type_name -> gotocompany.optimus.core.v1beta1.JobRunWithDetail - 47, // 17: gotocompany.optimus.core.v1beta1.JobRunRequest.start_date:type_name -> google.protobuf.Timestamp - 47, // 18: gotocompany.optimus.core.v1beta1.JobRunRequest.end_date:type_name -> google.protobuf.Timestamp - 49, // 19: gotocompany.optimus.core.v1beta1.JobRunResponse.job_runs:type_name -> gotocompany.optimus.core.v1beta1.JobRun + 53, // 17: gotocompany.optimus.core.v1beta1.JobRunRequest.start_date:type_name -> google.protobuf.Timestamp + 53, // 18: gotocompany.optimus.core.v1beta1.JobRunRequest.end_date:type_name -> google.protobuf.Timestamp + 55, // 19: gotocompany.optimus.core.v1beta1.JobRunResponse.job_runs:type_name -> gotocompany.optimus.core.v1beta1.JobRun 24, // 20: gotocompany.optimus.core.v1beta1.InstanceSpec.data:type_name -> gotocompany.optimus.core.v1beta1.InstanceSpecData - 47, // 21: gotocompany.optimus.core.v1beta1.InstanceSpec.executed_at:type_name -> google.protobuf.Timestamp + 53, // 21: gotocompany.optimus.core.v1beta1.InstanceSpec.executed_at:type_name -> google.protobuf.Timestamp 0, // 22: gotocompany.optimus.core.v1beta1.InstanceSpec.type:type_name -> gotocompany.optimus.core.v1beta1.InstanceSpec.Type 1, // 23: gotocompany.optimus.core.v1beta1.InstanceSpecData.type:type_name -> gotocompany.optimus.core.v1beta1.InstanceSpecData.Type - 42, // 24: gotocompany.optimus.core.v1beta1.JobRunInputResponse.envs:type_name -> gotocompany.optimus.core.v1beta1.JobRunInputResponse.EnvsEntry - 43, // 25: gotocompany.optimus.core.v1beta1.JobRunInputResponse.files:type_name -> gotocompany.optimus.core.v1beta1.JobRunInputResponse.FilesEntry - 44, // 26: gotocompany.optimus.core.v1beta1.JobRunInputResponse.secrets:type_name -> gotocompany.optimus.core.v1beta1.JobRunInputResponse.SecretsEntry - 50, // 27: gotocompany.optimus.core.v1beta1.TaskWindow.size:type_name -> google.protobuf.Duration - 50, // 28: gotocompany.optimus.core.v1beta1.TaskWindow.offset:type_name -> google.protobuf.Duration + 45, // 24: gotocompany.optimus.core.v1beta1.JobRunInputResponse.envs:type_name -> gotocompany.optimus.core.v1beta1.JobRunInputResponse.EnvsEntry + 46, // 25: gotocompany.optimus.core.v1beta1.JobRunInputResponse.files:type_name -> gotocompany.optimus.core.v1beta1.JobRunInputResponse.FilesEntry + 47, // 26: gotocompany.optimus.core.v1beta1.JobRunInputResponse.secrets:type_name -> gotocompany.optimus.core.v1beta1.JobRunInputResponse.SecretsEntry + 56, // 27: gotocompany.optimus.core.v1beta1.TaskWindow.size:type_name -> google.protobuf.Duration + 56, // 28: gotocompany.optimus.core.v1beta1.TaskWindow.offset:type_name -> google.protobuf.Duration 28, // 29: gotocompany.optimus.core.v1beta1.GetJobRunLineageSummaryRequest.target_jobs:type_name -> gotocompany.optimus.core.v1beta1.TargetJobRunIdentifier - 47, // 30: gotocompany.optimus.core.v1beta1.TargetJobRunIdentifier.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 30: gotocompany.optimus.core.v1beta1.TargetJobRunIdentifier.scheduled_at:type_name -> google.protobuf.Timestamp 30, // 31: gotocompany.optimus.core.v1beta1.GetJobRunLineageSummaryResponse.jobs:type_name -> gotocompany.optimus.core.v1beta1.JobRunLineageSummary - 47, // 32: gotocompany.optimus.core.v1beta1.JobRunLineageSummary.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 32: gotocompany.optimus.core.v1beta1.JobRunLineageSummary.scheduled_at:type_name -> google.protobuf.Timestamp 34, // 33: gotocompany.optimus.core.v1beta1.JobRunLineageSummary.job_runs:type_name -> gotocompany.optimus.core.v1beta1.JobExecutionSummary 31, // 34: gotocompany.optimus.core.v1beta1.JobRunLineageSummary.execution_summary:type_name -> gotocompany.optimus.core.v1beta1.LineageExecutionSummary 33, // 35: gotocompany.optimus.core.v1beta1.LineageExecutionSummary.largest_scheduled_way_too_late_job:type_name -> gotocompany.optimus.core.v1beta1.LineageDelaySummary 33, // 36: gotocompany.optimus.core.v1beta1.LineageExecutionSummary.largest_system_scheduling_delay_job:type_name -> gotocompany.optimus.core.v1beta1.LineageDelaySummary 32, // 37: gotocompany.optimus.core.v1beta1.LineageExecutionSummary.top_longest_task_duration_jobs:type_name -> gotocompany.optimus.core.v1beta1.JobWithTaskDuration 32, // 38: gotocompany.optimus.core.v1beta1.LineageExecutionSummary.top_longest_hook_duration_jobs:type_name -> gotocompany.optimus.core.v1beta1.JobWithTaskDuration - 47, // 39: gotocompany.optimus.core.v1beta1.LineageDelaySummary.scheduled_at:type_name -> google.protobuf.Timestamp - 47, // 40: gotocompany.optimus.core.v1beta1.LineageDelaySummary.upstream_scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 39: gotocompany.optimus.core.v1beta1.LineageDelaySummary.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 40: gotocompany.optimus.core.v1beta1.LineageDelaySummary.upstream_scheduled_at:type_name -> google.protobuf.Timestamp 37, // 41: gotocompany.optimus.core.v1beta1.JobExecutionSummary.sla:type_name -> gotocompany.optimus.core.v1beta1.SLAConfig 35, // 42: gotocompany.optimus.core.v1beta1.JobExecutionSummary.job_run_summary:type_name -> gotocompany.optimus.core.v1beta1.JobRunSummary 36, // 43: gotocompany.optimus.core.v1beta1.JobExecutionSummary.delay_summary:type_name -> gotocompany.optimus.core.v1beta1.JobRunDelaySummary - 47, // 44: gotocompany.optimus.core.v1beta1.JobRunSummary.scheduled_at:type_name -> google.protobuf.Timestamp - 47, // 45: gotocompany.optimus.core.v1beta1.JobRunSummary.sla_time:type_name -> google.protobuf.Timestamp - 47, // 46: gotocompany.optimus.core.v1beta1.JobRunSummary.job_start_time:type_name -> google.protobuf.Timestamp - 47, // 47: gotocompany.optimus.core.v1beta1.JobRunSummary.job_end_time:type_name -> google.protobuf.Timestamp - 47, // 48: gotocompany.optimus.core.v1beta1.JobRunSummary.wait_start_time:type_name -> google.protobuf.Timestamp - 47, // 49: gotocompany.optimus.core.v1beta1.JobRunSummary.wait_end_time:type_name -> google.protobuf.Timestamp - 47, // 50: gotocompany.optimus.core.v1beta1.JobRunSummary.task_start_time:type_name -> google.protobuf.Timestamp - 47, // 51: gotocompany.optimus.core.v1beta1.JobRunSummary.task_end_time:type_name -> google.protobuf.Timestamp - 47, // 52: gotocompany.optimus.core.v1beta1.JobRunSummary.hook_start_time:type_name -> google.protobuf.Timestamp - 47, // 53: gotocompany.optimus.core.v1beta1.JobRunSummary.hook_end_time:type_name -> google.protobuf.Timestamp - 50, // 54: gotocompany.optimus.core.v1beta1.SLAConfig.duration:type_name -> google.protobuf.Duration - 45, // 55: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.job_labels:type_name -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.JobLabelsEntry - 47, // 56: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.reference_time:type_name -> google.protobuf.Timestamp - 46, // 57: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.jobs:type_name -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.JobsEntry - 47, // 58: gotocompany.optimus.core.v1beta1.UpstreamJobStatus.inferred_sla_time:type_name -> google.protobuf.Timestamp - 47, // 59: gotocompany.optimus.core.v1beta1.UpstreamJobStatus.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 44: gotocompany.optimus.core.v1beta1.JobRunSummary.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 45: gotocompany.optimus.core.v1beta1.JobRunSummary.sla_time:type_name -> google.protobuf.Timestamp + 53, // 46: gotocompany.optimus.core.v1beta1.JobRunSummary.job_start_time:type_name -> google.protobuf.Timestamp + 53, // 47: gotocompany.optimus.core.v1beta1.JobRunSummary.job_end_time:type_name -> google.protobuf.Timestamp + 53, // 48: gotocompany.optimus.core.v1beta1.JobRunSummary.wait_start_time:type_name -> google.protobuf.Timestamp + 53, // 49: gotocompany.optimus.core.v1beta1.JobRunSummary.wait_end_time:type_name -> google.protobuf.Timestamp + 53, // 50: gotocompany.optimus.core.v1beta1.JobRunSummary.task_start_time:type_name -> google.protobuf.Timestamp + 53, // 51: gotocompany.optimus.core.v1beta1.JobRunSummary.task_end_time:type_name -> google.protobuf.Timestamp + 53, // 52: gotocompany.optimus.core.v1beta1.JobRunSummary.hook_start_time:type_name -> google.protobuf.Timestamp + 53, // 53: gotocompany.optimus.core.v1beta1.JobRunSummary.hook_end_time:type_name -> google.protobuf.Timestamp + 56, // 54: gotocompany.optimus.core.v1beta1.SLAConfig.duration:type_name -> google.protobuf.Duration + 48, // 55: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.job_labels:type_name -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.JobLabelsEntry + 53, // 56: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest.reference_time:type_name -> google.protobuf.Timestamp + 49, // 57: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.jobs:type_name -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.JobsEntry + 53, // 58: gotocompany.optimus.core.v1beta1.UpstreamJobStatus.inferred_sla_time:type_name -> google.protobuf.Timestamp + 53, // 59: gotocompany.optimus.core.v1beta1.UpstreamJobStatus.scheduled_at:type_name -> google.protobuf.Timestamp 40, // 60: gotocompany.optimus.core.v1beta1.UpstreamJobsStatus.jobs_status:type_name -> gotocompany.optimus.core.v1beta1.UpstreamJobStatus - 41, // 61: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.JobsEntry.value:type_name -> gotocompany.optimus.core.v1beta1.UpstreamJobsStatus - 13, // 62: gotocompany.optimus.core.v1beta1.JobRunService.JobRunInput:input_type -> gotocompany.optimus.core.v1beta1.JobRunInputRequest - 17, // 63: gotocompany.optimus.core.v1beta1.JobRunService.JobRun:input_type -> gotocompany.optimus.core.v1beta1.JobRunRequest - 19, // 64: gotocompany.optimus.core.v1beta1.JobRunService.GetSchedulerRole:input_type -> gotocompany.optimus.core.v1beta1.GetSchedulerRoleRequest - 21, // 65: gotocompany.optimus.core.v1beta1.JobRunService.CreateSchedulerRole:input_type -> gotocompany.optimus.core.v1beta1.CreateSchedulerRoleRequest - 14, // 66: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRuns:input_type -> gotocompany.optimus.core.v1beta1.GetJobRunsRequest - 5, // 67: gotocompany.optimus.core.v1beta1.JobRunService.GetThirdPartySensorStatus:input_type -> gotocompany.optimus.core.v1beta1.GetThirdPartySensorRequest - 11, // 68: gotocompany.optimus.core.v1beta1.JobRunService.RegisterJobEvent:input_type -> gotocompany.optimus.core.v1beta1.RegisterJobEventRequest - 9, // 69: gotocompany.optimus.core.v1beta1.JobRunService.UploadToScheduler:input_type -> gotocompany.optimus.core.v1beta1.UploadToSchedulerRequest - 7, // 70: gotocompany.optimus.core.v1beta1.JobRunService.GetInterval:input_type -> gotocompany.optimus.core.v1beta1.GetIntervalRequest - 27, // 71: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRunLineageSummary:input_type -> gotocompany.optimus.core.v1beta1.GetJobRunLineageSummaryRequest - 38, // 72: gotocompany.optimus.core.v1beta1.JobRunService.IdentifyPotentialSLABreach:input_type -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest - 25, // 73: gotocompany.optimus.core.v1beta1.JobRunService.JobRunInput:output_type -> gotocompany.optimus.core.v1beta1.JobRunInputResponse - 18, // 74: gotocompany.optimus.core.v1beta1.JobRunService.JobRun:output_type -> gotocompany.optimus.core.v1beta1.JobRunResponse - 20, // 75: gotocompany.optimus.core.v1beta1.JobRunService.GetSchedulerRole:output_type -> gotocompany.optimus.core.v1beta1.GetSchedulerRoleResponse - 22, // 76: gotocompany.optimus.core.v1beta1.JobRunService.CreateSchedulerRole:output_type -> gotocompany.optimus.core.v1beta1.CreateSchedulerRoleResponse - 16, // 77: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRuns:output_type -> gotocompany.optimus.core.v1beta1.GetJobRunsResponse - 6, // 78: gotocompany.optimus.core.v1beta1.JobRunService.GetThirdPartySensorStatus:output_type -> gotocompany.optimus.core.v1beta1.GetThirdPartySensorResponse - 12, // 79: gotocompany.optimus.core.v1beta1.JobRunService.RegisterJobEvent:output_type -> gotocompany.optimus.core.v1beta1.RegisterJobEventResponse - 10, // 80: gotocompany.optimus.core.v1beta1.JobRunService.UploadToScheduler:output_type -> gotocompany.optimus.core.v1beta1.UploadToSchedulerResponse - 8, // 81: gotocompany.optimus.core.v1beta1.JobRunService.GetInterval:output_type -> gotocompany.optimus.core.v1beta1.GetIntervalResponse - 29, // 82: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRunLineageSummary:output_type -> gotocompany.optimus.core.v1beta1.GetJobRunLineageSummaryResponse - 39, // 83: gotocompany.optimus.core.v1beta1.JobRunService.IdentifyPotentialSLABreach:output_type -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse - 73, // [73:84] is the sub-list for method output_type - 62, // [62:73] is the sub-list for method input_type - 62, // [62:62] is the sub-list for extension type_name - 62, // [62:62] is the sub-list for extension extendee - 0, // [0:62] is the sub-list for field type_name + 50, // 61: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeRequest.job_labels:type_name -> gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeRequest.JobLabelsEntry + 53, // 62: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeRequest.reference_time:type_name -> google.protobuf.Timestamp + 51, // 63: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.inprogress_jobs:type_name -> gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.InprogressJobsEntry + 52, // 64: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.finished_jobs:type_name -> gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.FinishedJobsEntry + 53, // 65: gotocompany.optimus.core.v1beta1.FinishTimeDetailResponse.scheduled_at:type_name -> google.protobuf.Timestamp + 53, // 66: gotocompany.optimus.core.v1beta1.FinishTimeDetailResponse.expected_finish_time:type_name -> google.protobuf.Timestamp + 53, // 67: gotocompany.optimus.core.v1beta1.FinishTimeDetailResponse.actual_finish_time:type_name -> google.protobuf.Timestamp + 41, // 68: gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse.JobsEntry.value:type_name -> gotocompany.optimus.core.v1beta1.UpstreamJobsStatus + 44, // 69: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.InprogressJobsEntry.value:type_name -> gotocompany.optimus.core.v1beta1.FinishTimeDetailResponse + 44, // 70: gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse.FinishedJobsEntry.value:type_name -> gotocompany.optimus.core.v1beta1.FinishTimeDetailResponse + 13, // 71: gotocompany.optimus.core.v1beta1.JobRunService.JobRunInput:input_type -> gotocompany.optimus.core.v1beta1.JobRunInputRequest + 17, // 72: gotocompany.optimus.core.v1beta1.JobRunService.JobRun:input_type -> gotocompany.optimus.core.v1beta1.JobRunRequest + 19, // 73: gotocompany.optimus.core.v1beta1.JobRunService.GetSchedulerRole:input_type -> gotocompany.optimus.core.v1beta1.GetSchedulerRoleRequest + 21, // 74: gotocompany.optimus.core.v1beta1.JobRunService.CreateSchedulerRole:input_type -> gotocompany.optimus.core.v1beta1.CreateSchedulerRoleRequest + 14, // 75: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRuns:input_type -> gotocompany.optimus.core.v1beta1.GetJobRunsRequest + 5, // 76: gotocompany.optimus.core.v1beta1.JobRunService.GetThirdPartySensorStatus:input_type -> gotocompany.optimus.core.v1beta1.GetThirdPartySensorRequest + 11, // 77: gotocompany.optimus.core.v1beta1.JobRunService.RegisterJobEvent:input_type -> gotocompany.optimus.core.v1beta1.RegisterJobEventRequest + 9, // 78: gotocompany.optimus.core.v1beta1.JobRunService.UploadToScheduler:input_type -> gotocompany.optimus.core.v1beta1.UploadToSchedulerRequest + 7, // 79: gotocompany.optimus.core.v1beta1.JobRunService.GetInterval:input_type -> gotocompany.optimus.core.v1beta1.GetIntervalRequest + 27, // 80: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRunLineageSummary:input_type -> gotocompany.optimus.core.v1beta1.GetJobRunLineageSummaryRequest + 38, // 81: gotocompany.optimus.core.v1beta1.JobRunService.IdentifyPotentialSLABreach:input_type -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachRequest + 42, // 82: gotocompany.optimus.core.v1beta1.JobRunService.GenerateExpectedFinishTime:input_type -> gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeRequest + 25, // 83: gotocompany.optimus.core.v1beta1.JobRunService.JobRunInput:output_type -> gotocompany.optimus.core.v1beta1.JobRunInputResponse + 18, // 84: gotocompany.optimus.core.v1beta1.JobRunService.JobRun:output_type -> gotocompany.optimus.core.v1beta1.JobRunResponse + 20, // 85: gotocompany.optimus.core.v1beta1.JobRunService.GetSchedulerRole:output_type -> gotocompany.optimus.core.v1beta1.GetSchedulerRoleResponse + 22, // 86: gotocompany.optimus.core.v1beta1.JobRunService.CreateSchedulerRole:output_type -> gotocompany.optimus.core.v1beta1.CreateSchedulerRoleResponse + 16, // 87: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRuns:output_type -> gotocompany.optimus.core.v1beta1.GetJobRunsResponse + 6, // 88: gotocompany.optimus.core.v1beta1.JobRunService.GetThirdPartySensorStatus:output_type -> gotocompany.optimus.core.v1beta1.GetThirdPartySensorResponse + 12, // 89: gotocompany.optimus.core.v1beta1.JobRunService.RegisterJobEvent:output_type -> gotocompany.optimus.core.v1beta1.RegisterJobEventResponse + 10, // 90: gotocompany.optimus.core.v1beta1.JobRunService.UploadToScheduler:output_type -> gotocompany.optimus.core.v1beta1.UploadToSchedulerResponse + 8, // 91: gotocompany.optimus.core.v1beta1.JobRunService.GetInterval:output_type -> gotocompany.optimus.core.v1beta1.GetIntervalResponse + 29, // 92: gotocompany.optimus.core.v1beta1.JobRunService.GetJobRunLineageSummary:output_type -> gotocompany.optimus.core.v1beta1.GetJobRunLineageSummaryResponse + 39, // 93: gotocompany.optimus.core.v1beta1.JobRunService.IdentifyPotentialSLABreach:output_type -> gotocompany.optimus.core.v1beta1.IdentifyPotentialSLABreachResponse + 43, // 94: gotocompany.optimus.core.v1beta1.JobRunService.GenerateExpectedFinishTime:output_type -> gotocompany.optimus.core.v1beta1.GenerateExpectedFinishTimeResponse + 83, // [83:95] is the sub-list for method output_type + 71, // [71:83] is the sub-list for method input_type + 71, // [71:71] is the sub-list for extension type_name + 71, // [71:71] is the sub-list for extension extendee + 0, // [0:71] is the sub-list for field type_name } func init() { file_gotocompany_optimus_core_v1beta1_job_run_proto_init() } @@ -4177,6 +4508,42 @@ func file_gotocompany_optimus_core_v1beta1_job_run_proto_init() { return nil } } + file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateExpectedFinishTimeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateExpectedFinishTimeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinishTimeDetailResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[3].OneofWrappers = []interface{}{ (*GetThirdPartySensorRequest_DexSensorRequest)(nil), @@ -4185,13 +4552,17 @@ func file_gotocompany_optimus_core_v1beta1_job_run_proto_init() { (*GetThirdPartySensorResponse_DexSensorResponse)(nil), } file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_gotocompany_optimus_core_v1beta1_job_run_proto_msgTypes[42].OneofWrappers = []interface{}{ + (*FinishTimeDetailResponse_ExpectedFinishTime)(nil), + (*FinishTimeDetailResponse_ActualFinishTime)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gotocompany_optimus_core_v1beta1_job_run_proto_rawDesc, NumEnums: 2, - NumMessages: 45, + NumMessages: 51, NumExtensions: 0, NumServices: 1, }, diff --git a/protos/gotocompany/optimus/core/v1beta1/job_run.pb.gw.go b/protos/gotocompany/optimus/core/v1beta1/job_run.pb.gw.go index 56278fc38f..f7bc0edf82 100644 --- a/protos/gotocompany/optimus/core/v1beta1/job_run.pb.gw.go +++ b/protos/gotocompany/optimus/core/v1beta1/job_run.pb.gw.go @@ -935,6 +935,74 @@ func local_request_JobRunService_IdentifyPotentialSLABreach_0(ctx context.Contex } +func request_JobRunService_GenerateExpectedFinishTime_0(ctx context.Context, marshaler runtime.Marshaler, client JobRunServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GenerateExpectedFinishTimeRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project_name") + } + + protoReq.ProjectName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project_name", err) + } + + msg, err := client.GenerateExpectedFinishTime(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_JobRunService_GenerateExpectedFinishTime_0(ctx context.Context, marshaler runtime.Marshaler, server JobRunServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GenerateExpectedFinishTimeRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project_name") + } + + protoReq.ProjectName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project_name", err) + } + + msg, err := server.GenerateExpectedFinishTime(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterJobRunServiceHandlerServer registers the http handlers for service JobRunService to "mux". // UnaryRPC :call JobRunServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1194,6 +1262,29 @@ func RegisterJobRunServiceHandlerServer(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("POST", pattern_JobRunService_GenerateExpectedFinishTime_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gotocompany.optimus.core.v1beta1.JobRunService/GenerateExpectedFinishTime", runtime.WithHTTPPathPattern("/v1beta1/project/{project_name}/expected_job_finish_time")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_JobRunService_GenerateExpectedFinishTime_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_JobRunService_GenerateExpectedFinishTime_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1455,6 +1546,26 @@ func RegisterJobRunServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("POST", pattern_JobRunService_GenerateExpectedFinishTime_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gotocompany.optimus.core.v1beta1.JobRunService/GenerateExpectedFinishTime", runtime.WithHTTPPathPattern("/v1beta1/project/{project_name}/expected_job_finish_time")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_JobRunService_GenerateExpectedFinishTime_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_JobRunService_GenerateExpectedFinishTime_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1480,6 +1591,8 @@ var ( pattern_JobRunService_GetJobRunLineageSummary_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "job-run-lineage-summary"}, "")) pattern_JobRunService_IdentifyPotentialSLABreach_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1beta1", "project", "project_name", "potential_sla_breach", "identify"}, "")) + + pattern_JobRunService_GenerateExpectedFinishTime_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "project", "project_name", "expected_job_finish_time"}, "")) ) var ( @@ -1504,4 +1617,6 @@ var ( forward_JobRunService_GetJobRunLineageSummary_0 = runtime.ForwardResponseMessage forward_JobRunService_IdentifyPotentialSLABreach_0 = runtime.ForwardResponseMessage + + forward_JobRunService_GenerateExpectedFinishTime_0 = runtime.ForwardResponseMessage ) diff --git a/protos/gotocompany/optimus/core/v1beta1/job_run.swagger.json b/protos/gotocompany/optimus/core/v1beta1/job_run.swagger.json index c8989f2e5b..81b00fee27 100644 --- a/protos/gotocompany/optimus/core/v1beta1/job_run.swagger.json +++ b/protos/gotocompany/optimus/core/v1beta1/job_run.swagger.json @@ -54,6 +54,67 @@ ] } }, + "/v1beta1/project/{projectName}/expected_job_finish_time": { + "post": { + "summary": "GenerateExpectedFinishTime generates and stores the expected finish time for a given job(s)", + "operationId": "JobRunService_GenerateExpectedFinishTime", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1GenerateExpectedFinishTimeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "projectName", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "jobNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "jobLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "scheduledRangeInHours": { + "type": "integer", + "format": "int32" + }, + "referenceTime": { + "type": "string", + "format": "date-time" + } + } + } + } + ], + "tags": [ + "JobRunService" + ] + } + }, "/v1beta1/project/{projectName}/job/{jobName}/interval": { "get": { "summary": "GetInterval gets interval on specific job given reference time.", @@ -627,7 +688,7 @@ "NULL_VALUE" ], "default": "NULL_VALUE", - "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." }, "rpcStatus": { "type": "object", @@ -684,6 +745,40 @@ } } }, + "v1beta1FinishTimeDetailResponse": { + "type": "object", + "properties": { + "scheduledAt": { + "type": "string", + "format": "date-time" + }, + "expectedFinishTime": { + "type": "string", + "format": "date-time" + }, + "actualFinishTime": { + "type": "string", + "format": "date-time" + } + } + }, + "v1beta1GenerateExpectedFinishTimeResponse": { + "type": "object", + "properties": { + "inprogressJobs": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1beta1FinishTimeDetailResponse" + } + }, + "finishedJobs": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1beta1FinishTimeDetailResponse" + } + } + } + }, "v1beta1GetIntervalResponse": { "type": "object", "properties": { diff --git a/protos/gotocompany/optimus/core/v1beta1/job_run_grpc.pb.go b/protos/gotocompany/optimus/core/v1beta1/job_run_grpc.pb.go index 82fff29d61..024a3f4dfe 100644 --- a/protos/gotocompany/optimus/core/v1beta1/job_run_grpc.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/job_run_grpc.pb.go @@ -43,6 +43,8 @@ type JobRunServiceClient interface { GetJobRunLineageSummary(ctx context.Context, in *GetJobRunLineageSummaryRequest, opts ...grpc.CallOption) (*GetJobRunLineageSummaryResponse, error) // IdentifyPotentialSLABreach notifies optimus service about potential SLA breach for given job(s) IdentifyPotentialSLABreach(ctx context.Context, in *IdentifyPotentialSLABreachRequest, opts ...grpc.CallOption) (*IdentifyPotentialSLABreachResponse, error) + // GenerateExpectedFinishTime generates and stores the expected finish time for a given job(s) + GenerateExpectedFinishTime(ctx context.Context, in *GenerateExpectedFinishTimeRequest, opts ...grpc.CallOption) (*GenerateExpectedFinishTimeResponse, error) } type jobRunServiceClient struct { @@ -152,6 +154,15 @@ func (c *jobRunServiceClient) IdentifyPotentialSLABreach(ctx context.Context, in return out, nil } +func (c *jobRunServiceClient) GenerateExpectedFinishTime(ctx context.Context, in *GenerateExpectedFinishTimeRequest, opts ...grpc.CallOption) (*GenerateExpectedFinishTimeResponse, error) { + out := new(GenerateExpectedFinishTimeResponse) + err := c.cc.Invoke(ctx, "/gotocompany.optimus.core.v1beta1.JobRunService/GenerateExpectedFinishTime", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // JobRunServiceServer is the server API for JobRunService service. // All implementations must embed UnimplementedJobRunServiceServer // for forward compatibility @@ -177,6 +188,8 @@ type JobRunServiceServer interface { GetJobRunLineageSummary(context.Context, *GetJobRunLineageSummaryRequest) (*GetJobRunLineageSummaryResponse, error) // IdentifyPotentialSLABreach notifies optimus service about potential SLA breach for given job(s) IdentifyPotentialSLABreach(context.Context, *IdentifyPotentialSLABreachRequest) (*IdentifyPotentialSLABreachResponse, error) + // GenerateExpectedFinishTime generates and stores the expected finish time for a given job(s) + GenerateExpectedFinishTime(context.Context, *GenerateExpectedFinishTimeRequest) (*GenerateExpectedFinishTimeResponse, error) mustEmbedUnimplementedJobRunServiceServer() } @@ -217,6 +230,9 @@ func (UnimplementedJobRunServiceServer) GetJobRunLineageSummary(context.Context, func (UnimplementedJobRunServiceServer) IdentifyPotentialSLABreach(context.Context, *IdentifyPotentialSLABreachRequest) (*IdentifyPotentialSLABreachResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method IdentifyPotentialSLABreach not implemented") } +func (UnimplementedJobRunServiceServer) GenerateExpectedFinishTime(context.Context, *GenerateExpectedFinishTimeRequest) (*GenerateExpectedFinishTimeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GenerateExpectedFinishTime not implemented") +} func (UnimplementedJobRunServiceServer) mustEmbedUnimplementedJobRunServiceServer() {} // UnsafeJobRunServiceServer may be embedded to opt out of forward compatibility for this service. @@ -428,6 +444,24 @@ func _JobRunService_IdentifyPotentialSLABreach_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _JobRunService_GenerateExpectedFinishTime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateExpectedFinishTimeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobRunServiceServer).GenerateExpectedFinishTime(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gotocompany.optimus.core.v1beta1.JobRunService/GenerateExpectedFinishTime", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobRunServiceServer).GenerateExpectedFinishTime(ctx, req.(*GenerateExpectedFinishTimeRequest)) + } + return interceptor(ctx, in, info, handler) +} + // JobRunService_ServiceDesc is the grpc.ServiceDesc for JobRunService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -479,6 +513,10 @@ var JobRunService_ServiceDesc = grpc.ServiceDesc{ MethodName: "IdentifyPotentialSLABreach", Handler: _JobRunService_IdentifyPotentialSLABreach_Handler, }, + { + MethodName: "GenerateExpectedFinishTime", + Handler: _JobRunService_GenerateExpectedFinishTime_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "gotocompany/optimus/core/v1beta1/job_run.proto", diff --git a/protos/gotocompany/optimus/core/v1beta1/job_spec.pb.go b/protos/gotocompany/optimus/core/v1beta1/job_spec.pb.go index 87f3ef6e15..ef67eb0c97 100644 --- a/protos/gotocompany/optimus/core/v1beta1/job_spec.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/job_spec.pb.go @@ -6779,11 +6779,11 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, - 0x3a, 0x01, 0x2a, 0x22, 0x46, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x6a, 0x6f, 0x62, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0xe6, 0x01, 0x0a, 0x16, + 0x22, 0x46, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, + 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0xe6, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, @@ -6794,11 +6794,11 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x43, 0x3a, 0x01, 0x2a, 0x22, 0x3e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x6a, 0x6f, 0x62, 0x12, 0xe1, 0x01, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x4a, 0x6f, 0x62, 0x53, + 0x43, 0x22, 0x3e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, + 0x62, 0x3a, 0x01, 0x2a, 0x12, 0xe1, 0x01, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, @@ -6808,11 +6808,11 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x22, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0xea, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, + 0xe4, 0x93, 0x02, 0x44, 0x22, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xea, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, @@ -6823,11 +6823,11 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0xf1, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x44, 0x1a, 0x3f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, + 0x62, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xf1, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, @@ -6837,12 +6837,12 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x01, - 0x2a, 0x22, 0x46, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, - 0x62, 0x73, 0x2d, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x46, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2d, + 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, @@ -6905,10 +6905,10 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x01, 0x2a, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x2d, 0x6a, 0x6f, 0x62, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x6a, + 0x6f, 0x62, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xdd, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, @@ -6954,11 +6954,11 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x7e, 0x0a, + 0x4c, 0x22, 0x47, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6a, 0x6f, + 0x62, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x0b, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, @@ -7018,12 +7018,12 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, - 0x32, 0x4b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x2d, 0x6a, 0x6f, 0x62, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0xd6, 0x01, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x32, 0x4b, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x2d, 0x6a, 0x6f, 0x62, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xd6, 0x01, 0x0a, 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x4a, 0x6f, 0x62, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, @@ -7032,12 +7032,12 @@ var file_gotocompany_optimus_core_v1beta1_job_spec_proto_rawDesc = []byte{ 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4a, 0x6f, 0x62, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x32, 0x49, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x2d, 0x6a, 0x6f, 0x62, - 0x2d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x0e, 0x42, 0x75, 0x6c, 0x6b, 0x44, + 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x32, 0x49, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x2d, 0x6a, 0x6f, 0x62, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xbc, 0x01, 0x0a, 0x0e, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x75, 0x6c, diff --git a/protos/gotocompany/optimus/core/v1beta1/namespace.pb.go b/protos/gotocompany/optimus/core/v1beta1/namespace.pb.go index 5c03eba229..a98c45b6de 100644 --- a/protos/gotocompany/optimus/core/v1beta1/namespace.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/namespace.pb.go @@ -479,10 +479,10 @@ var file_gotocompany_optimus_core_v1beta1_namespace_proto_rawDesc = []byte{ 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0xcb, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xcb, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, diff --git a/protos/gotocompany/optimus/core/v1beta1/project.pb.go b/protos/gotocompany/optimus/core/v1beta1/project.pb.go index 1fed34fb68..605cf48b99 100644 --- a/protos/gotocompany/optimus/core/v1beta1/project.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/project.pb.go @@ -566,8 +566,8 @@ var file_gotocompany_optimus_core_v1beta1_project_proto_rawDesc = []byte{ 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x97, + 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, diff --git a/protos/gotocompany/optimus/core/v1beta1/replay.pb.go b/protos/gotocompany/optimus/core/v1beta1/replay.pb.go index 11e7292d3b..e4c7af56af 100644 --- a/protos/gotocompany/optimus/core/v1beta1/replay.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/replay.pb.go @@ -1095,10 +1095,10 @@ var file_gotocompany_optimus_core_v1beta1_replay_proto_rawDesc = []byte{ 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, - 0x22, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x12, 0xb8, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xb8, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x70, @@ -1107,10 +1107,10 @@ var file_gotocompany_optimus_core_v1beta1_replay_proto_rawDesc = []byte{ 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, - 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x2d, 0x64, 0x72, 0x79, 0x2d, - 0x72, 0x75, 0x6e, 0x12, 0xa7, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, + 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x2d, 0x64, 0x72, 0x79, 0x2d, 0x72, 0x75, 0x6e, + 0x3a, 0x01, 0x2a, 0x12, 0xa7, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, diff --git a/protos/gotocompany/optimus/core/v1beta1/resource.pb.go b/protos/gotocompany/optimus/core/v1beta1/resource.pb.go index 35963997aa..2174680281 100644 --- a/protos/gotocompany/optimus/core/v1beta1/resource.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/resource.pb.go @@ -2020,13 +2020,13 @@ var file_gotocompany_optimus_core_v1beta1_resource_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x3a, - 0x01, 0x2a, 0x22, 0x4e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x79, - 0x6e, 0x63, 0x12, 0xee, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x22, + 0x4e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x3a, + 0x01, 0x2a, 0x12, 0xee, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, @@ -2035,13 +2035,13 @@ var file_gotocompany_optimus_core_v1beta1_resource_proto_rawDesc = []byte{ 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, - 0x3a, 0x01, 0x2a, 0x22, 0x5e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0xf5, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x22, 0x5e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x3a, 0x01, 0x2a, 0x12, 0xf5, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, @@ -2065,13 +2065,13 @@ var file_gotocompany_optimus_core_v1beta1_resource_proto_rawDesc = []byte{ 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x3a, 0x01, 0x2a, 0x1a, 0x5e, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0xf6, 0x01, 0x0a, + 0x65, 0x22, 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x1a, 0x5e, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, + 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xf6, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, @@ -2080,14 +2080,14 @@ var file_gotocompany_optimus_core_v1beta1_resource_proto_rawDesc = []byte{ 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 0x3a, 0x01, 0x2a, 0x22, 0x66, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2d, 0x75, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0xfb, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x73, 0x65, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 0x22, 0x66, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2d, 0x75, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0xfb, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, @@ -2113,11 +2113,11 @@ var file_gotocompany_optimus_core_v1beta1_resource_proto_rawDesc = []byte{ 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, 0x2a, 0x22, - 0x39, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0xf5, 0x01, 0x0a, 0x0e, 0x41, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x22, 0x39, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xf5, 0x01, 0x0a, 0x0e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, @@ -2126,14 +2126,14 @@ var file_gotocompany_optimus_core_v1beta1_resource_proto_rawDesc = []byte{ 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x3a, 0x01, 0x2a, 0x22, 0x65, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2d, 0x61, 0x70, 0x70, - 0x6c, 0x79, 0x12, 0xe4, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x22, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x3a, + 0x01, 0x2a, 0x12, 0xe4, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, diff --git a/protos/gotocompany/optimus/core/v1beta1/resource.swagger.json b/protos/gotocompany/optimus/core/v1beta1/resource.swagger.json index 42dd06cf88..bc03fb54af 100644 --- a/protos/gotocompany/optimus/core/v1beta1/resource.swagger.json +++ b/protos/gotocompany/optimus/core/v1beta1/resource.swagger.json @@ -568,7 +568,7 @@ "NULL_VALUE" ], "default": "NULL_VALUE", - "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." }, "rpcStatus": { "type": "object", diff --git a/protos/gotocompany/optimus/core/v1beta1/runtime.pb.go b/protos/gotocompany/optimus/core/v1beta1/runtime.pb.go index dc73639783..0131905a36 100644 --- a/protos/gotocompany/optimus/core/v1beta1/runtime.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/runtime.pb.go @@ -143,8 +143,8 @@ var file_gotocompany_optimus_core_v1beta1_runtime_proto_rawDesc = []byte{ 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x97, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, + 0x15, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x42, 0x97, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x42, 0x15, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, diff --git a/protos/gotocompany/optimus/core/v1beta1/secret.pb.go b/protos/gotocompany/optimus/core/v1beta1/secret.pb.go index 78f21eb830..7b866db77d 100644 --- a/protos/gotocompany/optimus/core/v1beta1/secret.pb.go +++ b/protos/gotocompany/optimus/core/v1beta1/secret.pb.go @@ -583,11 +583,11 @@ var file_gotocompany_optimus_core_v1beta1_secret_proto_rawDesc = []byte{ 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x01, 0x2a, 0x22, 0x34, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0xbe, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x3a, 0x01, 0x2a, 0x12, 0xbe, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, @@ -595,11 +595,11 @@ var file_gotocompany_optimus_core_v1beta1_secret_proto_rawDesc = []byte{ 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x01, 0x2a, 0x1a, 0x34, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, + 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x1a, 0x34, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, diff --git a/server/optimus.go b/server/optimus.go index b55178fce6..e742154e44 100644 --- a/server/optimus.go +++ b/server/optimus.go @@ -199,7 +199,6 @@ func (s *OptimusServer) setupDB() error { if err != nil { return fmt.Errorf("postgres.Open: %w", err) } - return nil } @@ -446,6 +445,14 @@ func (s *OptimusServer) setupHandlers() error { newJobSLAPredictorService := schedulerService.NewJobSLAPredictorService(s.logger, s.conf.Alerting.PotentialSLABreachConfig, slaRepository, jobLineageService, newDurationEstimatorService, jobProviderRepo, alertsHandler, tenantService, newJobRunService) + // Job Estimator Service + newJobExpectatorDurationEstimatorService := schedulerService.NewDurationEstimatorService(s.logger, jobRunRepo, + s.conf.JobExpectatorConfig.DurationEstimatorConfig.LastNRuns, s.conf.JobExpectatorConfig.DurationEstimatorConfig.Percentile, + s.conf.JobExpectatorConfig.DurationEstimatorConfig.PaddingPercentage, s.conf.JobExpectatorConfig.DurationEstimatorConfig.MinPaddingMinutes, + s.conf.JobExpectatorConfig.DurationEstimatorConfig.MaxPaddingMinutes, + ) + jobExpectatorService := schedulerService.NewJobExpectatorService(s.logger, s.conf.JobExpectatorConfig.BufferDurationInMinutes, jobRunRepo, jobProviderRepo, jobLineageService, newJobExpectatorDurationEstimatorService) + // Resource Bounded Context primaryResourceService := rService.NewResourceService(s.logger, resourceRepository, jJobService, resourceManager, s.eventHandler, jJobService, alertsHandler, tenantService, newEngine, syncer, syncStatusRepository) backupService := rService.NewBackupService(backupRepository, resourceRepository, resourceManager, s.logger) @@ -488,7 +495,7 @@ func (s *OptimusServer) setupHandlers() error { pb.RegisterResourceServiceServer(s.grpcServer, rHandler.NewResourceHandler(s.logger, primaryResourceService, resourceChangeLogService)) sensorService := schedulerService.NewSensorService(s.logger, s.conf.UpstreamResolvers...) - pb.RegisterJobRunServiceServer(s.grpcServer, schedulerHandler.NewJobRunHandler(s.logger, newJobRunService, eventsService, newSchedulerService, jobLineageService, newJobSLAPredictorService, sensorService)) + pb.RegisterJobRunServiceServer(s.grpcServer, schedulerHandler.NewJobRunHandler(s.logger, newJobRunService, eventsService, newSchedulerService, jobLineageService, newJobSLAPredictorService, sensorService, jobExpectatorService)) // backup service pb.RegisterBackupServiceServer(s.grpcServer, rHandler.NewBackupHandler(s.logger, backupService))