ЕСОЗ - публічна документація

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Jabba provides api to create a new asynchronous job, which will be stored in PostgreSQL and processed through Kafka. Jabba just a job manager and stores result of callback with meta data. Jobs logic is on the side of the caller

Create new Job

The first argument is list of tasks or one task map. Task is a map with two atom fields:

  • :callback

    • the callback is being invoked. It is called when message consumed from Kafka. The result of the

    callback must return:

    • {:ok, map} or :ok

      • in case of success

    • {:error, map}

      • in case of error

  • :name (optional) - name of the task The second argument defines a job type and could be used as a filter for jobs searching Options

    • :strategy

      • job processing strategy. Available:

      :sequentially. Read more in about strategy below

    • :meta

      • additional data for the job that stored in database and could be used as a filter for jobs searching

    • :name

      • job name that stored in database

    Strategies

    • :sequentially

      • Default strategy. Execute each job task step by step. In case of error, task and job will be marked as failed. All tasks after failed task will be marked as

      ABORTED

    • :concurrent

      • Execute job tasks concurrently. In case of error, task and job will be marked as failed. Returns

      {:ok, %Job{} tuple with job that was created or {:error, term} tuple with error reason

    Examples

    iex> Jabba.RPC.create_job(
      {"il", Core.RPC, :deactivate_legal_entity, ["2e7141ac-d021-448f-a71a-f6ea454a06b8"]},
      "deactivation_legal_entity",
      [
        meta: %{
          request_id: "197bed61-5e4b-49d1-b064-5830c8f18146",
          legal_entity_id: "2e7141ac-d021-448f-a71a-f6ea454a06b8"
        }
      ]
    )
    {:ok, %{
      id: "6868d53f-6e37-46bc-af34-29e650446310",
      name: "Job name",
      type: "deactivate_legal_entity",
      status: "PENDING",
      strategy: "SEQUENTIALLY",
      meta: %{},
      ended_at: #DateTime<2019-02-04 14:08:42.434612Z>,
      inserted_at: #DateTime<2019-02-04 14:08:42.434612Z>,
      updated_at: #DateTime<2019-02-04 14:08:42.434619Z>
    }}
    

Get Job by id

Examples

iex> Jabba.RPC.get_job()
{:ok, %{
  id: "6868d53f-6e37-46bc-af34-29e650446310",
  name: "Job name",
  type: "deactivate_legal_entity",
  status: "PROCESSED",
  strategy: "SEQUENTIALLY",
  meta: %{},
  ended_at: #DateTime<2019-02-04 14:08:42.434612Z>,
  inserted_at: #DateTime<2019-02-04 14:08:42.434612Z>,
  updated_at: #DateTime<2019-02-04 14:08:42.434619Z>
}}

Search for Jobs

Check available formats for filter here https://github.com/edenlabllc/ecto_filter Available parameters:

Parameter

Type

Example

filter

list

[{:status, :equal, "NEW"}]

order_by

list

[asc: :inserted_at] or [desc: :status]

cursor

{integer, integer} or nil

{0, 10}

Examples

  iex> Jabba.RPC.search_jobs([{:status, :equal, "PROCESSED"}], [desc: :status], {0, 10})
  {:ok, [%{
    id: "6868d53f-6e37-46bc-af34-29e650446310",
    name: "Job name",
    type: "deactivate_legal_entity",
    status: "PROCESSED",
    strategy: "SEQUENTIALLY",
    meta: %{},
    ended_at: #DateTime<2019-02-04 14:08:42.434612Z>,
    inserted_at: #DateTime<2019-02-04 14:08:42.434612Z>,
    updated_at: #DateTime<2019-02-04 14:08:42.434619Z>
  }]}

Search for Tasks

Check available formats for filter here https://github.com/edenlabllc/ecto_filter Available parameters:

Parameter

Type

Example

filter

list

[{:job_id, :equal, "53a8d53f-4e37-26bc-cf34-29e65044bb3a"}]

order_by

list

[asc: :inserted_at] or [desc: :status]

cursor

{integer, integer} or nil

{0, 10}

Examples

  iex> Jabba.RPC.search_tasks([{:job_id, :equal, "53a8d53f-4e37-26bc-cf34-29e65044bb3a"}], [desc: :status], {0, 10})
  {:ok, [%{
    id: "6868d53f-6e37-46bc-af34-29e650446310",
    job_id: "53a8d53f-4e37-26bc-cf34-29e65044bb3a",
    callback: {"test", TestRPC, :run, []}",
    name: "Some task name",
    priority: 0,
    result: %{},
    meta: %{},
    status: "PROCESSED",
    ended_at: #DateTime<2019-02-04 14:08:42.434612Z>,
    inserted_at: #DateTime<2019-02-04 14:08:42.434612Z>,
    updated_at: #DateTime<2019-02-04 14:08:42.434619Z>
  }]}

  • No labels