From 8bd3957247a3749ead9555a7af904c11fd38498d Mon Sep 17 00:00:00 2001 From: kkrishna Date: Sat, 27 Jan 2018 10:33:55 -0800 Subject: [PATCH] GetJobs api (#53) * GetJobs API added --- examples/client.go | 14 +++++++++++++- realis.go | 31 +++++++++++++++++++++++++++++++ realis_e2e_test.go | 11 +++++++++-- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/examples/client.go b/examples/client.go index 9c2e1b8..8160678 100644 --- a/examples/client.go +++ b/examples/client.go @@ -31,7 +31,7 @@ import ( "github.com/paypal/gorealis/response" ) -var cmd, executor, url, clustersConfig, clusterName, updateId, username, password, zkUrl, hostList string +var cmd, executor, url, clustersConfig, clusterName, updateId, username, password, zkUrl, hostList, role string var CONNECTION_TIMEOUT = 20000 @@ -46,6 +46,8 @@ func init() { flag.StringVar(&password, "password", "secret", "Password to use for authorization") flag.StringVar(&zkUrl, "zkurl", "", "zookeeper url") flag.StringVar(&hostList, "hostList", "", "Comma separated list of hosts to operate on") + flag.StringVar(&role, "role", "", "owner role to use") + flag.Parse() // Attempt to load leader from zookeeper using a @@ -593,6 +595,16 @@ func main() { } fmt.Print(result.String()) + case "getJobs": + fmt.Println("GetJobs...role: ", role) + _, result, err := r.GetJobs(role) + if err != nil { + fmt.Print("error: %+v\n", err.Error()) + os.Exit(1) + } + fmt.Println("map size: ", len(result.Configs)) + fmt.Println(result.String()) + default: fmt.Println("Command not supported") os.Exit(1) diff --git a/realis.go b/realis.go index 7caa3a4..03554aa 100644 --- a/realis.go +++ b/realis.go @@ -47,6 +47,7 @@ type Realis interface { GetJobUpdateSummaries(jobUpdateQuery *aurora.JobUpdateQuery) (*aurora.Response, error) GetTaskStatus(query *aurora.TaskQuery) ([]*aurora.ScheduledTask, error) GetTasksWithoutConfigs(query *aurora.TaskQuery) ([]*aurora.ScheduledTask, error) + GetJobs(role string) (*aurora.Response, *aurora.GetJobsResult_, error) JobUpdateDetails(updateQuery aurora.JobUpdateQuery) (*aurora.Response, error) KillJob(key *aurora.JobKey) (*aurora.Response, error) KillInstances(key *aurora.JobKey, instances ...int32) (*aurora.Response, error) @@ -548,6 +549,33 @@ func (r *realisClient) GetJobUpdateSummaries(jobUpdateQuery *aurora.JobUpdateQue return resp, nil } +func (r *realisClient) GetJobs(role string) (*aurora.Response, *aurora.GetJobsResult_, error) { + var resp *aurora.Response + var result *aurora.GetJobsResult_ + var clientErr error + + retryErr := ExponentialBackoff(*r.config.backoff, func() (bool, error) { + resp, clientErr = r.thriftCallHelper(func() (*aurora.Response, error) { + return r.readonlyClient.GetJobs(role) + }) + + if clientErr != nil { + return false, clientErr + } + return true, nil + }) + + if resp != nil && resp.GetResult_() != nil { + result = resp.GetResult_().GetJobsResult_ + } + + if retryErr != nil { + return nil, result, errors.Wrap(clientErr, retryErr.Error()+": Error getting Jobs from Aurora Scheduler") + } + + return resp, result, nil +} + // Kill specific instances of a job. func (r *realisClient) KillInstances(key *aurora.JobKey, instances ...int32) (*aurora.Response, error) { @@ -696,6 +724,9 @@ func (r *realisClient) DescheduleCronJob(key *aurora.JobKey) (*aurora.Response, } + + + func (r *realisClient) StartCronJob(key *aurora.JobKey) (*aurora.Response, error) { var resp *aurora.Response var clientErr error diff --git a/realis_e2e_test.go b/realis_e2e_test.go index d278ffc..1538886 100644 --- a/realis_e2e_test.go +++ b/realis_e2e_test.go @@ -83,9 +83,10 @@ func TestGetCACerts(t *testing.T) { func TestRealisClient_CreateJob_Thermos(t *testing.T) { + role := "vagrant" job := realis.NewJob(). Environment("prod"). - Role("vagrant"). + Role(role). Name("create_thermos_job_test"). ExecutorName(aurora.AURORA_EXECUTOR_NAME). ExecutorData(string(thermosPayload)). @@ -109,7 +110,13 @@ func TestRealisClient_CreateJob_Thermos(t *testing.T) { assert.True(t, success) assert.NoError(t, err) - // Tasks must exist for it to be killed + //Fetch all obs + _, result, err := r.GetJobs(role) + fmt.Printf("GetJobs length: %+v \n", len(result.Configs)) + assert.Equal(t, len(result.Configs), 1) + assert.NoError(t, err) + + // Tasks must exist for it to, be killed t.Run("TestRealisClient_KillJob_Thermos", func(t *testing.T) { start := time.Now() resp, err := r.KillJob(job.JobKey())