Revision af30b2fd

b/lib/cli.py
41 41
                      Option, OptionValueError, SUPPRESS_HELP)
42 42

  
43 43
__all__ = ["DEBUG_OPT", "NOHDR_OPT", "SEP_OPT", "GenericMain",
44
           "SubmitOpCode",
44
           "SubmitOpCode", "GetClient",
45 45
           "cli_option", "GenerateTable", "AskUser",
46 46
           "ARGS_NONE", "ARGS_FIXED", "ARGS_ATLEAST", "ARGS_ANY", "ARGS_ONE",
47 47
           "USEUNITS_OPT", "FIELDS_OPT", "FORCE_OPT",
......
394 394
      break
395 395
    time.sleep(1)
396 396

  
397
  jobs = cl.QueryJobs([job_id], ["status", "result"])
397
  jobs = cl.QueryJobs([job_id], ["status", "opresult"])
398 398
  if not jobs:
399 399
    raise errors.JobLost("Job with id %s lost" % job_id)
400 400

  
......
405 405
    raise errors.OpExecError(result)
406 406

  
407 407

  
408
def GetClient():
409
  # TODO: Cache object?
410
  return luxi.Client()
411

  
412

  
408 413
def FormatError(err):
409 414
  """Return a formatted error message for a given error.
410 415

  
b/lib/jqueue.py
47 47
    self._lock = threading.Lock()
48 48

  
49 49
  @utils.LockedMethod
50
  def GetInput(self):
51
    """Returns the original opcode.
52

  
53
    """
54
    return self.input
55

  
56
  @utils.LockedMethod
50 57
  def SetStatus(self, status, result):
51 58
    """Update the opcode status and result.
52 59

  
......
228 235
        row.append(job.id)
229 236
      elif fname == "status":
230 237
        row.append(job.GetStatus())
231
      elif fname == "result":
232
        # TODO
238
      elif fname == "ops":
239
        row.append([op.GetInput().__getstate__() for op in job._ops])
240
      elif fname == "opresult":
233 241
        row.append([op.GetResult() for op in job._ops])
242
      elif fname == "opstatus":
243
        row.append([op.GetStatus() for op in job._ops])
234 244
      else:
235 245
        raise errors.OpExecError("Invalid job query field '%s'" % fname)
236 246
    return row
b/scripts/gnt-job
35 35

  
36 36
_LIST_DEF_FIELDS = ["id", "status"]
37 37

  
38
_USER_JOB_STATUS = {
39
  constants.JOB_STATUS_QUEUED: "queued",
40
  constants.JOB_STATUS_RUNNING: "running",
41
  constants.JOB_STATUS_CANCELED: "canceled",
42
  constants.JOB_STATUS_SUCCESS: "success",
43
  constants.JOB_STATUS_ERROR: "error",
44
  }
45

  
38 46
def ListJobs(opts, args):
39 47
  """List the jobs
40 48

  
......
46 54
  else:
47 55
    selected_fields = opts.output.split(",")
48 56

  
49
  query = {
50
    "object": "jobs",
51
    "fields": selected_fields,
52
    "names": [],
53
    }
54

  
55
  output = SubmitQuery(query)
57
  output = GetClient().QueryJobs(None, selected_fields)
56 58
  if not opts.no_headers:
59
    # TODO: Implement more fields
57 60
    headers = {
58 61
      "id": "ID",
59 62
      "status": "Status",
60
      "op_list": "OpCodes",
61
      "op_status": "OpStatus",
62
      "op_result": "OpResult",
63
      "ops": "OpCodes",
64
      "opresult": "OpCode_result",
65
      "opstatus": "OpCode_status",
63 66
      }
64 67
  else:
65 68
    headers = None
......
73 76
    for idx, field in enumerate(selected_fields):
74 77
      val = row[idx]
75 78
      if field == "status":
76
        if val == opcodes.Job.STATUS_PENDING:
77
          val = "pending"
78
        elif val == opcodes.Job.STATUS_RUNNING:
79
          val = "running"
80
        elif val == opcodes.Job.STATUS_SUCCESS:
81
          val = "finished"
82
        elif val == opcodes.Job.STATUS_FAIL:
83
          val = "failed"
84
        elif val == opcodes.Job.STATUS_ABORT:
85
          val = "aborted"
79
        if val in _USER_JOB_STATUS:
80
          val = _USER_JOB_STATUS[val]
86 81
        else:
87 82
          raise errors.ProgrammerError("Unknown job status code '%s'" % val)
88 83

  

Also available in: Unified diff