From ab9a769124caa543808c719ee935b006d1b207c4 Mon Sep 17 00:00:00 2001
From: Lawrence Wong <lawwong@paypal.com>
Date: Fri, 12 Aug 2022 14:32:04 -0700
Subject: [PATCH] Address code review comments

---
 cmd/fetch.go | 34 +++++++++++++++++++++++++++-------
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/cmd/fetch.go b/cmd/fetch.go
index f15933b..242a629 100644
--- a/cmd/fetch.go
+++ b/cmd/fetch.go
@@ -125,8 +125,8 @@ func init() {
 	// fetch tasks with status
 	fetchCmd.AddCommand(fetchTasksWithStatusCmd)
 
-	fetchTasksWithStatusCmd.Flags().StringVarP(taskStatus, "taskStatus", "x", "", "Task Status")
-	fetchTasksWithStatusCmd.MarkFlagRequired("taskStatus")
+	fetchTasksWithStatusCmd.Flags().StringVarP(taskStatus, "status", "x", "", "Task Status")
+	fetchTasksWithStatusCmd.MarkFlagRequired("status")
 	fetchTasksWithStatusCmd.Flags().StringVarP(env, "environment", "e", "", "Aurora Environment")
 	fetchTasksWithStatusCmd.Flags().StringVarP(role, "role", "r", "", "Aurora Role")
 	fetchTasksWithStatusCmd.Flags().StringVarP(name, "name", "n", "", "Aurora Name")
@@ -228,7 +228,7 @@ var fetchAvailCapacityCmd = &cobra.Command{
 }
 
 var fetchTasksWithStatusCmd = &cobra.Command{
-	Use:   "tasksWithStatus",
+	Use:   "tasks",
 	Short: "Fetch tasks with status",
 	Long:  `This command will return the list of tasks with a given status`,
 	Run:   fetchTasksWithStatus,
@@ -509,7 +509,7 @@ func fetchAvailCapacity(cmd *cobra.Command, args []string) {
 func fetchTasksWithStatus(cmd *cobra.Command, args []string) {
 	status := *taskStatus
 
-	log.Infof("Fetching tasks for environment/role/job:[%s/%s/%s] \n", *env, *role, *name)
+	log.Infof("Fetching tasks for role/environment/job:[%s/%s/%s] \n", *role, *env, *name)
 	log.Infof("Fetching tasks for a given status: %v \n", status)
 
 	// This Query takes nil for values it shouldn't need to match against.
@@ -523,6 +523,19 @@ func fetchTasksWithStatus(cmd *cobra.Command, args []string) {
 	if *name == "" {
 		name = nil
 	}
+	// role needs to be specified if env is specified
+	if env != nil {
+		if role == nil {
+			log.Fatalln("Role must be specified when env is specified.")
+		}
+	}
+	// role or env needs to be specified if name is specified
+	if name != nil {
+		if role == nil && env == nil {
+			log.Fatalln("Role or env must be specified when name is specified.")
+		}
+	}
+
 	queryStatuses, err := scheduleStatusFromString(status)
 	if err != nil {
 		log.Fatalf("error: %+v", err)
@@ -536,12 +549,19 @@ func fetchTasksWithStatus(cmd *cobra.Command, args []string) {
 	}
 
 	if toJson {
-		tasksMap := map[string][]*aurora.ScheduledTask{strings.ToUpper(status): tasks}
-		fmt.Println(internal.ToJSON(tasksMap))
+		taskStatus := strings.ToUpper(status)
+		// convert task lists to a list of task id like role-env-name-[instance-id]
+		taskIdsMap := map[string][]string{}
+		var taskIds []string
+		for _, task := range tasks {
+			taskIds = append(taskIds, task.AssignedTask.TaskId)
+		}
+		taskIdsMap[taskStatus] = taskIds
+		fmt.Println(internal.ToJSON(taskIdsMap))
 	} else {
 		fmt.Printf("Tasks for status %s:\n", strings.ToUpper(status))
 		for _, t := range tasks {
-			fmt.Println(t)
+			fmt.Println(t.AssignedTask.TaskId)
 		}
 	}
 }