Spec-Zone.ru › CouchDB 3.5

/

GET /

Обращение к корню экземпляра CouchDB возвращает метаинформацию об экземпляре. Ответ представляет собой структуру JSON, содержащую информацию о сервере, включая приветственное сообщение, версию сервера и список features. Элементы features могут меняться в зависимости от включённых параметров конфигурации (например, quickjs, если он задан как движок JavaScript по умолчанию) или установленных и настроенных дополнительных компонентов (например, приложения для текстовой индексации nouveau).

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET / HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Length: 247
Content-Type: application/json
Date: Mon, 21 Oct 2024 21:53:51 GMT
Server: CouchDB/3.4.2 (Erlang OTP/25)

{
    "couchdb": "Welcome",
    "features": [
        "access-ready",
        "partitioned",
        "pluggable-storage-engines",
        "reshard",
        "scheduler"
    ],
    "git_sha": "6e5ad2a5c",
    "uuid": "9ddf59457dbb8772316cf06fc5e5a2e4",
    "vendor": {
        "name": "The Apache Software Foundation"
    },
    "version": "3.4.2"
}

/_active_tasks

Изменено в версии 2.1.0: Из-за особенностей работы планировщика репликации задания непрерывной репликации могли периодически останавливаться, а затем запускаться снова. Пока они не выполняются, они не отображаются в конечной точке _active_tasks

Изменено в версии 3.3: Для заданий репликации добавлены поля “bulk_get_attempts” и “bulk_get_docs”.

GET /_active_tasks

Список выполняющихся задач, включающий тип задачи, имя, состояние и идентификатор процесса. Результат представляет собой массив JSON текущих выполняющихся задач, каждая из которых описана отдельным объектом. Набор полей объекта ответа может различаться в зависимости от типа операции.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Объект JSON ответа:
  • changes_done (number) – Обработанные изменения

  • database (string) – Исходная база данных

  • pid (string) – Идентификатор процесса

  • progress (number) – Текущий процент выполнения

  • started_on (number) – Время начала задачи в формате метки времени Unix

  • status (string) – Сообщение о состоянии задачи

  • task (string) – Имя задачи

  • total_changes (number) – Общее число изменений для обработки

  • type (string) – Тип операции

  • updated_on (number) – Метка времени Unix последнего обновления операции

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Требуются права администратора сервера CouchDB

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_active_tasks HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 1690
Content-Type: application/json
Date: Sat, 10 Aug 2013 06:37:31 GMT
Server: CouchDB (Erlang/OTP)

[
    {
        "changes_done": 64438,
        "database": "mailbox",
        "pid": "<0.12986.1>",
        "progress": 84,
        "started_on": 1376116576,
        "total_changes": 76215,
        "type": "database_compaction",
        "updated_on": 1376116619
    },
    {
        "changes_done": 14443,
        "database": "mailbox",
        "design_document": "c9753817b3ba7c674d92361f24f59b9f",
        "pid": "<0.10461.3>",
        "progress": 18,
        "started_on": 1376116621,
        "total_changes": 76215,
        "type": "indexer",
        "updated_on": 1376116650
    },
    {
        "changes_done": 5454,
        "database": "mailbox",
        "design_document": "_design/meta",
        "pid": "<0.6838.4>",
        "progress": 7,
        "started_on": 1376116632,
        "total_changes": 76215,
        "type": "indexer",
        "updated_on": 1376116651
    },
    {
        "checkpointed_source_seq": 68585,
        "continuous": false,
        "doc_id": null,
        "doc_write_failures": 0,
        "bulk_get_attempts": 4524,
        "bulk_get_docs": 4524,
        "docs_read": 4524,
        "docs_written": 4524,
        "missing_revisions_found": 4524,
        "pid": "<0.1538.5>",
        "progress": 44,
        "replication_id": "9bc1727d74d49d9e157e260bb8bbd1d5",
        "revisions_checked": 4524,
        "source": "mailbox",
        "source_seq": 154419,
        "started_on": 1376116644,
        "target": "http://mailsrv:5984/mailbox",
        "type": "replication",
        "updated_on": 1376116651
    }
]

/_all_dbs

GET /_all_dbs

Возвращает список всех баз данных в экземпляре CouchDB.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Параметры запроса:
  • descending (boolean) – Возвращать базы данных в порядке убывания по ключу. Значение по умолчанию — false.

  • endkey (json) – Прекратить возвращать базы данных при достижении указанного ключа.

  • end_key (json) – Псевдоним параметра endkey

  • inclusive_end (boolean) – Указывает, следует ли включать указанный конечный ключ в результат. Значение по умолчанию — true.

  • limit (number) – Ограничить число возвращаемых баз данных указанным значением.

  • skip (number) – Пропустить указанное число баз данных перед началом возврата результатов. Значение по умолчанию — 0.

  • startkey (json) – Возвращать базы данных, начиная с указанного ключа.

  • start_key (json) – Псевдоним для startkey.

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_all_dbs HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 52
Content-Type: application/json
Date: Sat, 10 Aug 2013 06:57:48 GMT
Server: CouchDB (Erlang/OTP)

[
   "_users",
   "contacts",
   "docs",
   "invoices",
   "locations"
]

/_dbs_info

Добавлено в версии 3.2.

GET /_dbs_info

Возвращает список сведений обо всех базах данных в экземпляре CouchDB.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Параметры запроса:
  • descending (boolean) – Возвращать сведения о базах данных в порядке убывания по ключу. Значение по умолчанию — false.

  • endkey (json) – Прекратить возвращать сведения о базах данных при достижении указанного ключа.

  • end_key (json) – Псевдоним параметра endkey

  • limit (number) – Ограничить число возвращаемых сведений о базах данных указанным значением.

  • skip (number) – Пропустить указанное число баз данных перед началом возврата результатов. Значение по умолчанию — 0.

  • startkey (json) – Возвращать сведения о базах данных, начиная с указанного ключа.

  • start_key (json) – Псевдоним для startkey.

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_dbs_info HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Thu, 18 Nov 2021 14:37:35 GMT
Server: CouchDB (Erlang OTP/23)

[
  {
    "key": "animals",
    "info": {
      "db_name": "animals",
      "update_seq": "52232",
      "sizes": {
        "file": 1178613587,
        "external": 1713103872,
        "active": 1162451555
      },
      "purge_seq": 0,
      "doc_del_count": 0,
      "doc_count": 52224,
      "disk_format_version": 6,
      "compact_running": false,
      "cluster": {
        "q": 8,
        "n": 3,
        "w": 2,
        "r": 2
      },
      "instance_start_time": "0"
    }
  }
]

Добавлено в версии 2.2.

POST /_dbs_info

Возвращает сведения об указанном списке баз данных в экземпляре CouchDB. Это позволяет запросить сведения о нескольких базах данных в одном запросе вместо нескольких запросов GET /{db}.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON запроса:
  • keys (array) – Массив имён баз данных для запроса

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 400 Неверный запрос – В запросе отсутствуют ключи или превышено допустимое число ключей

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

POST /_dbs_info HTTP/1.1
Accept: application/json
Host: localhost:5984
Content-Type: application/json

{
    "keys": [
        "animals",
        "plants"
    ]
}

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Sat, 20 Dec 2017 06:57:48 GMT
Server: CouchDB (Erlang/OTP)

[
  {
    "key": "animals",
    "info": {
      "db_name": "animals",
      "update_seq": "52232",
      "sizes": {
        "file": 1178613587,
        "external": 1713103872,
        "active": 1162451555
      },
      "purge_seq": 0,
      "doc_del_count": 0,
      "doc_count": 52224,
      "disk_format_version": 6,
      "compact_running": false,
      "cluster": {
        "q": 8,
        "n": 3,
        "w": 2,
        "r": 2
      },
      "instance_start_time": "0"
    }
  },
  {
    "key": "plants",
    "info": {
      "db_name": "plants",
      "update_seq": "303",
      "sizes": {
        "file": 3872387,
        "external": 2339,
        "active": 67475
      },
      "purge_seq": 0,
      "doc_del_count": 0,
      "doc_count": 11,
      "disk_format_version": 6,
      "compact_running": false,
      "cluster": {
        "q": 8,
        "n": 3,
        "w": 2,
        "r": 2
      },
      "instance_start_time": "0"
    }
  }
]

Примечание

Допустимое число баз данных в списке можно ограничить, изменив параметр max_db_number_for_dbs_info_req в файле конфигурации. По умолчанию лимит равен 100. Увеличить лимит можно, однако это создаёт нагрузку на сервер, поэтому рекомендуется отправлять больше запросов по 100 баз данных, а не несколько запросов по 1000 и более баз данных за раз.

/_cluster_setup

Добавлено в версии 2.0.

GET /_cluster_setup

Возвращает состояние узла или кластера в соответствии с мастером настройки кластера.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Параметры запроса:
  • ensure_dbs_exist (array) – Список системных баз данных, наличие которых нужно обеспечить на узле/в кластере. По умолчанию — ["_users","_replicator"].

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Объект JSON ответа:
  • state (string) – Текущее state узла и/или кластера (см. ниже)

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Возвращаемое значение state указывает текущее состояние узла или кластера и может быть одним из следующих:

  • cluster_disabled: Текущий узел полностью не настроен.

  • single_node_disabled: Текущий узел настроен как одиночный (автономный) узел ([cluster] n=1), но для него либо не задан администратор уровня сервера, либо не созданы стандартные системные базы данных. Если указан параметр запроса ensure_dbs_exist, предоставленный список баз данных заменяет список стандартных системных баз данных по умолчанию.

  • single_node_enabled: Текущий узел настроен как одиночный (автономный) узел, для него задан администратор уровня сервера и создан ensure_dbs_exist список баз данных (явно указанный или заданный по умолчанию).

  • cluster_enabled: Текущий узел имеет [cluster] n > 1, не привязан к 127.0.0.1, и для него задан администратор уровня сервера. Однако полный набор стандартных системных баз данных ещё не создан. Если указан параметр запроса ensure_dbs_exist, предоставленный список баз данных заменяет список стандартных системных баз данных по умолчанию.

  • cluster_finished: Текущий узел имеет [cluster] n > 1, не привязан к 127.0.0.1, для него задан администратор уровня сервера и создан ensure_dbs_exist список баз данных (явно указанный или заданный по умолчанию).

Запрос:

GET /_cluster_setup HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
X-CouchDB-Body-Time: 0
X-Couch-Request-ID: 5c058bdd37
Server: CouchDB/2.1.0-7f17678 (Erlang OTP/17)
Date: Sun, 30 Jul 2017 06:33:18 GMT
Content-Type: application/json
Content-Length: 29
Cache-Control: must-revalidate

{"state":"cluster_enabled"}
POST /_cluster_setup

Настроить узел как одиночный (автономный) узел, как часть кластера или завершить настройку кластера.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

  • Content-Type – application/json

Объект JSON запроса:
  • action (string) –

    • enable_single_node: Настроить текущий узел как отдельный автономный сервер CouchDB.

    • enable_cluster: Настроить локальный или удалённый узел как узел кластера, подготовив его к присоединению к новому кластеру CouchDB.

    • add_node: Добавить указанный удалённый узел в список узлов этого кластера, присоединив его к кластеру.

    • finish_cluster: Завершить настройку кластера, создав стандартные системные базы данных.

  • bind_address (string) – IP-адрес, на котором будет ожидать подключения текущий узел. Специальное значение 0.0.0.0 можно указать для привязки ко всем интерфейсам хоста. (только enable_cluster и enable_single_node)

  • username (string) – Имя пользователя администратора уровня сервера, которого нужно создать. (только enable_cluster и enable_single_node) либо имя пользователя администратора удалённого сервера (add_node)

  • password (string) – Пароль администратора уровня сервера, которого нужно создать. (только enable_cluster и enable_single_node) либо имя пользователя администратора удалённого сервера (add_node)

  • port (number) – TCP-порт, на котором будет ожидать подключения этот узел (только enable_cluster и enable_single_node), либо TCP-порт, на котором будет ожидать подключения удалённый узел (только add_node).

  • node_count (number) – Общее число узлов, которые будут включены в кластер, включая этот узел. Используется для определения значения n кластера; максимум — 3. (только enable_cluster)

  • remote_node (string) – IP-адрес удалённого узла, который нужно настроить и включить в список узлов этого кластера. (только enable_cluster)

  • remote_current_user (string) – Имя пользователя администратора уровня сервера, авторизованного на удалённом узле. (только enable_cluster)

  • remote_current_password (string) – Пароль администратора уровня сервера, авторизованного на удалённом узле. (только enable_cluster)

  • host (string) – IP-адрес удалённого узла, который нужно добавить в кластер. (только add_node)

  • ensure_dbs_exist (array) – Список системных баз данных, наличие которых нужно обеспечить на узле/в кластере. По умолчанию — ["_users","_replicator"].

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Пример запроса/ответа здесь не приведён. Пример работающего запроса см. в разделе API настройки кластера.

/_db_updates

Добавлено в версии 1.4.

GET /_db_updates

Возвращает список всех событий баз данных в экземпляре CouchDB. Для использования этой конечной точки требуется наличие базы данных _global_changes.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Параметры запроса:
  • feed (string) –

    • normal: Возвращает все исторические изменения БД, затем закрывает соединение. По умолчанию.

    • longpoll: Закрывает соединение после первого события.

    • continuous: Отправляет строку JSON для каждого события. Сохраняет сокет открытым до timeout.

    • eventsource: Аналогично continuous, но события передаются в формате EventSource.

  • timeout (number) – Число миллисекунд до закрытия соединения CouchDB. Значение по умолчанию — 60000.

  • heartbeat (number) – Интервал в миллисекундах, по истечении которого в результатах отправляется пустая строка. Применимо только к лентам longpoll, continuous и eventsource. Переопределяет любой тайм-аут, чтобы лента оставалась активной бесконечно. Значение по умолчанию — 60000. Можно указать true, чтобы использовать значение по умолчанию.

  • since (string) – Возвращать только обновления после указанного идентификатора последовательности. Если указанный идентификатор последовательности не существует, возвращаются все изменения. Можно указать строку now, чтобы начать отображение только новых обновлений.

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

  • Transfer-Encoding – chunked

Объект JSON ответа:
  • results (array) – Массив событий баз данных. В режимах longpoll и continuous весь ответ содержит данные массива results.

  • last_seq (string) – Идентификатор последней последовательности в отчёте.

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Требуются права администратора сервера CouchDB

  • 403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Поле results обновлений базы данных:

Параметры JSON:
  • db_name (string) – Имя базы данных.

  • type (string) – Событие базы данных относится к одному из типов: created, updated, deleted.

  • seq (json) – Последовательность обновления события.

Запрос:

GET /_db_updates HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Sat, 18 Mar 2017 19:01:35 GMT
Etag: "C1KU98Y6H0LGM7EQQYL6VSL07"
Server: CouchDB/2.0.0 (Erlang OTP/17)
Transfer-Encoding: chunked
X-Couch-Request-ID: ad87efc7ff
X-CouchDB-Body-Time: 0

{
    "results":[
        {"db_name":"mailbox","type":"created","seq":"1-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZExFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4h"},
        {"db_name":"mailbox","type":"deleted","seq":"2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZEpFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4hdQsg6vYTUncAou4-IXUPIOpA7ssCAIFHa60"}
    ],
    "last_seq": "2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZEpFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4hdQsg6vYTUncAou4-IXUPIOpA7ssCAIFHa60"
}

/_membership

Добавлено в версии 2.0.

GET /_membership

Отображает узлы, входящие в кластер, в виде cluster_nodes. Поле all_nodes отображает все узлы, о которых известно этому узлу, включая входящие в кластер. Конечная точка полезна при настройке кластера; см. Управление узлами

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Доступ запрещён – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_membership HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Sat, 11 Jul 2015 07:02:41 GMT
Server: CouchDB (Erlang/OTP)
Content-Length: 142

{
    "all_nodes": [
        "node1@127.0.0.1",
        "node2@127.0.0.1",
        "node3@127.0.0.1"
    ],
    "cluster_nodes": [
        "node1@127.0.0.1",
        "node2@127.0.0.1",
        "node3@127.0.0.1"
    ]
}

/_replicate

Изменено в версии 3.3: В объект ответа с историей репликации добавлены поля “bulk_get_attempts” и “bulk_get_docs”.

POST /_replicate

Создаёт запрос на репликацию, настраивает или останавливает операцию репликации.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

  • Content-Type – application/json

Поля JSON-запроса:
  • cancel (boolean) – Отменяет репликацию

  • continuous (boolean) – Настраивает непрерывную репликацию

  • create_target (boolean) – Создаёт целевую базу данных. На целевом сервере требуются права администратора.

  • create_target_params (object) – Объект с параметрами, которые будут использованы при создании целевой базы данных. Может содержать стандартные параметры q и n.

  • winning_revs_only (boolean) – Реплицировать только выигравшие ревизии.

  • doc_ids (array) – Массив идентификаторов документов для синхронизации. doc_ids, filter и selector являются взаимоисключающими.

  • filter (string) – Имя функции фильтра. doc_ids, filter и selector являются взаимоисключающими.

  • selector (json) – Селектор для фильтрации документов при синхронизации. Работает так же, как объекты селектора в документах репликации. doc_ids, filter и selector являются взаимоисключающими.

  • source_proxy (string) – Адрес прокси-сервера, через который должна выполняться репликация из источника (протокол может быть «http», «https» или «socks5»)

  • target_proxy (string) – Адрес прокси-сервера, через который должна выполняться репликация в целевую базу (протокол может быть «http», «https» или «socks5»)

  • source (string/object) – Полный URL исходной базы данных или объект, содержащий полный URL исходной базы данных с дополнительными параметрами, например заголовками. Например: ‘http://example.com/source_db_name’ или {“url”:”url in here”, “headers”: {“header1”:”value1”, …}} . Для обратной совместимости CouchDB 3.x автоматически преобразует простые имена баз данных, добавляя адрес и порт, на котором прослушивает запросы CouchDB, чтобы сформировать полный URL. Такое поведение устарело в версии 3.x и будет удалено в CouchDB 4.0.

  • target (string/object) – Полный URL целевой базы данных или объект, содержащий полный URL целевой базы данных с дополнительными параметрами, например заголовками. Например: ‘http://example.com/target_db_name’ или {“url”:”url in here”, “headers”: {“header1”:”value1”, …}} . Для обратной совместимости CouchDB 3.x автоматически преобразует простые имена баз данных, добавляя адрес и порт, на котором прослушивает запросы CouchDB, чтобы сформировать полный URL. Такое поведение устарело в версии 3.x и будет удалено в CouchDB 4.0.

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Поля JSON-ответа:
  • history (array) – История репликации (см. ниже)

  • ok (boolean) – Состояние репликации

  • replication_id_version (number) – Версия протокола репликации

  • session_id (string) – Уникальный идентификатор сеанса

  • source_last_seq (number) – Последний номер последовательности, считанный из исходной базы данных

Коды состояния:
  • 200 OK – Запрос на репликацию успешно выполнен

  • 202 Принято – Запрос на непрерывную репликацию принят

  • 400 Неверный запрос – Недопустимые данные JSON

  • 401 Не авторизован – Требуются права администратора сервера CouchDB

  • 403 Доступ запрещён – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными

  • 404 Не найдено – Исходная или целевая база данных не найдена либо предпринята попытка отменить неизвестную задачу репликации

  • 500 Внутренняя ошибка сервера – Недопустимая спецификация JSON

Спецификация запроса на репликацию задаётся содержимым JSON-запроса. JSON должен представлять собой объект с полями, определяющими источник, целевую базу и другие параметры.

История репликации — это массив объектов со следующей структурой:

Параметры JSON:
  • doc_write_failures (number) – Количество ошибок записи документов

  • docs_read (number) – Количество прочитанных документов

  • docs_written (number) – Количество документов, записанных в целевую базу

  • bulk_get_attempts (number) – Общее количество попыток получить ревизии документов с помощью _bulk_get.

  • bulk_get_docs (number) – Общее количество успешно полученных документов с помощью _bulk_get.

  • end_last_seq (number) – Последний номер последовательности в потоке изменений

  • end_time (string) – Дата и время завершения операции репликации в формате RFC 2822

  • missing_checked (number) – Количество проверенных отсутствующих документов

  • missing_found (number) – Количество найденных отсутствующих документов

  • recorded_seq (number) – Последний записанный номер последовательности

  • session_id (string) – Идентификатор сеанса этой операции репликации

  • start_last_seq (number) – Первый номер последовательности в потоке изменений

  • start_time (string) – Дата и время начала операции репликации в формате RFC 2822

Примечание

Начиная с CouchDB 2.0.0 для параметров репликации source и target требуются полные URL.

Запрос

POST /_replicate HTTP/1.1
Accept: application/json
Content-Length: 80
Content-Type: application/json
Host: localhost:5984

{
    "source": "http://adm:pass@127.0.0.1:5984/db_a",
    "target": "http://adm:pass@127.0.0.1:5984/db_b"
}

Ответ

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 692
Content-Type: application/json
Date: Sun, 11 Aug 2013 20:38:50 GMT
Server: CouchDB (Erlang/OTP)

{
    "history": [
        {
            "doc_write_failures": 0,
            "docs_read": 10,
            "bulk_get_attempts": 10,
            "bulk_get_docs": 10,
            "docs_written": 10,
            "end_last_seq": 28,
            "end_time": "Sun, 11 Aug 2013 20:38:50 GMT",
            "missing_checked": 10,
            "missing_found": 10,
            "recorded_seq": 28,
            "session_id": "142a35854a08e205c47174d91b1f9628",
            "start_last_seq": 1,
            "start_time": "Sun, 11 Aug 2013 20:38:50 GMT"
        },
        {
            "doc_write_failures": 0,
            "docs_read": 1,
            "bulk_get_attempts": 1,
            "bulk_get_docs": 1,
            "docs_written": 1,
            "end_last_seq": 1,
            "end_time": "Sat, 10 Aug 2013 15:41:54 GMT",
            "missing_checked": 1,
            "missing_found": 1,
            "recorded_seq": 1,
            "session_id": "6314f35c51de3ac408af79d6ee0c1a09",
            "start_last_seq": 0,
            "start_time": "Sat, 10 Aug 2013 15:41:54 GMT"
        }
    ],
    "ok": true,
    "replication_id_version": 3,
    "session_id": "142a35854a08e205c47174d91b1f9628",
    "source_last_seq": 28
}

Операция репликации

Цель репликации — по завершении процесса обеспечить наличие всех активных документов исходной базы данных в целевой базе данных, а также удалить в целевой базе (если они там есть) все документы, удалённые в исходной базе данных.

Репликацию можно описать как отправку или получение данных:

  • Репликация с получением — это репликация, при которой source является удалённым экземпляром CouchDB, а target — локальной базой данных.

    Репликация с получением — наиболее подходящий вариант, если исходная база данных имеет постоянный IP-адрес, а целевая (локальная) база данных может получать динамически назначаемый IP-адрес (например, через DHCP). Это особенно важно при репликации с центрального сервера на мобильное или другое устройство.

  • Репликация с отправкой — это репликация, при которой source является локальной базой данных, а target — удалённой базой данных.

Указание исходной и целевой баз данных

Если вы хотите выполнить репликацию в любой из следующих ситуаций, необходимо указать URL базы данных CouchDB:

  • Репликация с удалённой базой данных (например, с другим экземпляром CouchDB на том же или другом узле)

  • Репликация с базой данных, требующей аутентификации

Например, чтобы запросить репликацию между базой данных, локальной для экземпляра CouchDB, которому отправляется запрос, и удалённой базой данных, можно использовать следующий запрос:

POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json

{
    "source" : "recipes",
    "target" : "http://coucdb-remote:5984/recipes",
}

Во всех случаях запрашиваемые базы данных, указанные в source и target, должны существовать. Если это не так, в объекте JSON будет возвращена ошибка:

{
    "error" : "db_not_found"
    "reason" : "could not open http://couchdb-remote:5984/ol1ka/",
}

Можно создать целевую базу данных (если учётные данные пользователя это позволяют), добавив поле create_target в объект запроса:

POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json

{
    "create_target" : true
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
}

Поле create_target не приводит к удалению данных. Если база данных уже существует, репликация выполняется как обычно.

Однократная репликация

Можно запросить репликацию базы данных, чтобы синхронизировать две базы данных. По умолчанию процесс репликации выполняется один раз и синхронизирует две базы данных. Например, чтобы выполнить однократную синхронизацию двух баз данных, можно передать поля source и target в содержимом JSON-запроса.

POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "source" : "recipes",
    "target" : "recipes-snapshot",
}

В приведённом выше примере будут синхронизированы базы данных recipes и recipes-snapshot. Эти базы данных локальны для экземпляра CouchDB, которому был отправлен запрос. В ответе будет содержаться структура JSON с результатом (успешным или неудачным) процесса синхронизации и его статистикой:

{
    "ok" : true,
    "history" : [
        {
            "docs_read" : 1000,
            "bulk_get_attempts": 1000,
            "bulk_get_docs": 1000,
            "session_id" : "52c2370f5027043d286daca4de247db0",
            "recorded_seq" : 1000,
            "end_last_seq" : 1000,
            "doc_write_failures" : 0,
            "start_time" : "Thu, 28 Oct 2010 10:24:13 GMT",
            "start_last_seq" : 0,
            "end_time" : "Thu, 28 Oct 2010 10:24:14 GMT",
            "missing_checked" : 0,
            "docs_written" : 1000,
            "missing_found" : 1000
        }
    ],
    "session_id" : "52c2370f5027043d286daca4de247db0",
    "source_last_seq" : 1000
}

Непрерывная репликация

Синхронизация базы данных описанными выше способами происходит только один раз — в момент отправки запроса на репликацию. Чтобы целевая база данных постоянно реплицировалась из исходной, необходимо установить для поля continuous объекта JSON в запросе значение true.

При непрерывной репликации изменения в исходной базе данных постоянно реплицируются в целевую базу, пока вы явно не запросите прекращение репликации.

POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "continuous" : true
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
}

Изменения будут реплицироваться между двумя базами данных, пока между экземплярами доступно сетевое соединение.

Примечание

Чтобы поддерживать синхронизацию двух баз данных друг с другом, необходимо настроить репликацию в обоих направлениях: реплицировать из source в target, а затем отдельно — из target в source.

Отмена непрерывной репликации

Можно отменить непрерывную репликацию, добавив поле cancel в объект JSON-запроса и установив его значение в true. Обратите внимание, что структура запроса должна быть идентична исходной, чтобы запрос на отмену был выполнен. Например, если вы запросили непрерывную репликацию, запрос на отмену также должен содержать поле continuous.

Например, следующий запрос на репликацию:

POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json

{
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
    "create_target" : true,
    "continuous" : true
}

необходимо отменить с помощью запроса:

POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "cancel" : true,
    "continuous" : true
    "create_target" : true,
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
}

Запрос на отмену несуществующей репликации приводит к ошибке 404.

/_scheduler/jobs

GET /_scheduler/jobs

Список заданий репликации. Включает репликации, созданные через конечную точку /_replicate, а также созданные с помощью документов репликации. Не включает репликации, выполнение которых завершено, или репликации, запуск которых не удался из-за некорректных документов репликации. Описание каждого задания содержит информацию об источнике и целевой базе, идентификатор репликации, историю последних событий и некоторые другие сведения.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Параметры запроса:
  • limit (number) – Количество возвращаемых результатов

  • skip (number) – Количество результатов, пропускаемых с начала списка, отсортированного по идентификатору репликации

Поля JSON-ответа:
  • offset (number) – Количество пропущенных результатов

  • total_rows (number) – Общее количество заданий репликации

  • id (string) – Идентификатор репликации.

  • database (string) – База данных документа репликации

  • doc_id (string) – Идентификатор документа репликации

  • history (list) – История событий с временными метками в виде списка объектов

  • pid (string) – Идентификатор процесса репликации

  • node (string) – Узел кластера, на котором выполняется задание

  • source (string) – Источник репликации

  • target (string) – Целевая база репликации

  • start_time (string) – Временная метка начала репликации

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Не авторизован – Требуются права администратора сервера CouchDB

  • 403 Доступ запрещён – Недостаточно разрешений / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_scheduler/jobs HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 1690
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:05:16 GMT
Server: CouchDB (Erlang/OTP)

{
    "jobs": [
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000003",
            "history": [
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "started"
                },
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "added"
                }
            ],
            "id": "8f5b1bd0be6f9166ccfd36fc8be8fc22+continuous",
            "info": {
                "changes_pending": 0,
                "checkpointed_source_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ",
                "doc_write_failures": 0,
                "docs_read": 113,
                "docs_written": 113,
                "bulk_get_attempts": 113,
                "bulk_get_docs": 113,
                "missing_revisions_found": 113,
                "revisions_checked": 113,
                "source_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ",
                "through_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ"
            },
            "node": "node1@127.0.0.1",
            "pid": "<0.1850.0>",
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "target": "http://adm:*****@localhost:15984/cdyno-0000003/",
            "user": null
        },
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000002",
            "history": [
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "started"
                },
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "added"
                }
            ],
            "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
            "info": {
                "changes_pending": null,
                "checkpointed_source_seq": 0,
                "doc_write_failures": 0,
                "docs_read": 12,
                "docs_written": 12,
                "bulk_get_attempts": 12,
                "bulk_get_docs": 12,
                "missing_revisions_found": 12,
                "revisions_checked": 12,
                "source_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg",
                "through_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg"
            },
            "node": "node2@127.0.0.1",
            "pid": "<0.1757.0>",
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "target": "http://adm:*****@localhost:15984/cdyno-0000002/",
            "user": null
        }
    ],
    "offset": 0,
    "total_rows": 2
 }

/_scheduler/docs

Изменено в версии 2.1.0: Используйте эту конечную точку для отслеживания состояния репликаций на основе документов. Ранее для получения полной сводки состояния требовалось опрашивать и документы, и _active_tasks

Изменено в версии 3.0.0: В состояниях ошибки поле “info” было строкой, а стало объектом

Изменено в версии 3.3: В объект “info” добавлены поля “bulk_get_attempts” и “bulk_get_docs”.

GET /_scheduler/docs

Список состояний документов репликации. Включает информацию обо всех документах, даже в состояниях completed и failed. Для каждого документа возвращаются его идентификатор, база данных, идентификатор репликации, источник и целевой объект, а также другая информация.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Параметры запроса:
  • limit (number) – Количество возвращаемых результатов

  • skip (number) – Количество результатов, которые нужно пропустить с начала списка, упорядоченного по идентификатору документа

Объект JSON ответа:
  • offset (number) – Количество пропущенных результатов

  • total_rows (number) – Общее количество документов репликации.

  • id (string) – Идентификатор репликации или null, если состояние — completed или failed

  • state (string) – Одно из следующих состояний (описания см. в разделе Состояния репликации): initializing, running, completed, pending, crashing, error, failed

  • database (string) – База данных, из которой получен документ репликации

  • doc_id (string) – Идентификатор документа репликации

  • node (string) – Узел кластера, на котором выполняется задание

  • source (string) – Источник репликации

  • target (string) – Целевой объект репликации

  • start_time (string) – Временная метка начала репликации

  • last_updated (string) – Временная метка последнего обновления состояния

  • info (object) – Содержит дополнительные сведения о состоянии. При ошибках это будет объект с полем "error" и строковым значением. Для состояний успешного выполнения см. ниже.

  • error_count (number) – Количество последовательных ошибок. Показывает, сколько раз подряд происходил сбой этой репликации. Повторные попытки репликации выполняются с экспоненциально увеличивающейся задержкой, зависящей от этого значения. После успешного выполнения репликации счётчик сбрасывается на 0. Это значение можно использовать, чтобы понять, почему конкретная репликация не продвигается.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Поле info документа планировщика:

Параметры JSON:
  • revisions_checked (number) – Количество проверенных ревизий с момента начала этой репликации.

  • missing_revisions_found (number) – Количество ревизий, найденных в источнике, но отсутствующих в целевом объекте.

  • docs_read (number) – Количество документов, прочитанных из источника.

  • docs_written (number) – Количество документов, записанных в целевой объект.

  • bulk_get_attempts (number) – Общее количество попыток получить ревизии документов с помощью _bulk_get.

  • bulk_get_docs (number) – Общее количество успешно полученных документов с помощью _bulk_get.

  • changes_pending (number) – Количество изменений, которые ещё не реплицированы.

  • doc_write_failures (number) – Количество документов, которые не удалось записать в целевой объект.

  • checkpointed_source_seq (object) – Идентификатор последовательности источника, который был успешно реплицирован последним.

Запрос:

GET /_scheduler/docs HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:10:08 GMT
Server: Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked

{
    "docs": [
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000002",
            "error_count": 0,
            "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
            "info": {
                "changes_pending": 15,
                "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg",
                "doc_write_failures": 0,
                "docs_read": 67,
                "bulk_get_attempts": 67,
                "bulk_get_docs": 67,
                "docs_written": 67,
                "missing_revisions_found": 67,
                "revisions_checked": 67,
                "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8",
                "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8"
            },
            "last_updated": "2017-04-29T05:01:37Z",
            "node": "node2@127.0.0.1",
            "source_proxy": null,
            "target_proxy": null,
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "state": "running",
            "target": "http://adm:*****@localhost:15984/cdyno-0000002/"
        },
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000003",
            "error_count": 0,
            "id": "8f5b1bd0be6f9166ccfd36fc8be8fc22+continuous",
            "info": {
                "changes_pending": null,
                "checkpointed_source_seq": 0,
                "doc_write_failures": 0,
                "bulk_get_attempts": 12,
                "bulk_get_docs": 12,
                "docs_read": 12,
                "docs_written": 12,
                "missing_revisions_found": 12,
                "revisions_checked": 12,
                "source_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg",
                "through_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg"
            },
            "last_updated": "2017-04-29T05:01:37Z",
            "node": "node1@127.0.0.1",
            "source_proxy": null,
            "target_proxy": null,
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "state": "running",
            "target": "http://adm:*****@localhost:15984/cdyno-0000003/"
        }
    ],
    "offset": 0,
    "total_rows": 2
}
GET /_scheduler/docs/{replicator_db}

Получить сведения о документах репликации из базы данных репликатора. База данных репликатора по умолчанию — _replicator, но могут существовать и другие базы данных репликатора, если их имена заканчиваются суффиксом /_replicator.

Примечание

Для удобства слеши (/) в именах баз данных репликатора можно не экранировать. Поэтому /_scheduler/docs/other/_replicator является допустимым и эквивалентно /_scheduler/docs/other%2f_replicator

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Параметры запроса:
  • limit (number) – Количество возвращаемых результатов

  • skip (number) – Количество результатов, которые нужно пропустить с начала списка, упорядоченного по идентификатору документа

Объект JSON ответа:
  • offset (number) – Количество пропущенных результатов

  • total_rows (number) – Общее количество документов репликации.

  • id (string) – Идентификатор репликации или null, если состояние — completed или failed

  • state (string) – Одно из следующих состояний (описания см. в разделе Состояния репликации): initializing, running, completed, pending, crashing, error, failed

  • database (string) – База данных, из которой получен документ репликации

  • doc_id (string) – Идентификатор документа репликации

  • node (string) – Узел кластера, на котором выполняется задание

  • source (string) – Источник репликации

  • target (string) – Целевой объект репликации

  • start_time (string) – Временная метка начала репликации

  • last_update (string) – Временная метка последнего обновления состояния

  • info (object) – Содержит дополнительные сведения о состоянии. При ошибках это будет объект с полем "error" и строковым значением. Для состояний успешного выполнения см. ниже.

  • error_count (number) – Количество последовательных ошибок. Показывает, сколько раз подряд происходил сбой этой репликации. Повторные попытки репликации выполняются с экспоненциально увеличивающейся задержкой, зависящей от этого значения. После успешного выполнения репликации счётчик сбрасывается на 0. Это значение можно использовать, чтобы понять, почему конкретная репликация не продвигается.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Поле info документа планировщика:

Параметры JSON:
  • revisions_checked (number) – Количество проверенных ревизий с момента начала этой репликации.

  • missing_revisions_found (number) – Количество ревизий, найденных в источнике, но отсутствующих в целевом объекте.

  • docs_read (number) – Количество документов, прочитанных из источника.

  • docs_written (number) – Количество документов, записанных в целевой объект.

  • bulk_get_attempts (number) – Общее количество попыток получить ревизии документов с помощью _bulk_get.

  • bulk_get_docs (number) – Общее количество успешно полученных документов с помощью _bulk_get.

  • changes_pending (number) – Количество изменений, которые ещё не реплицированы.

  • doc_write_failures (number) – Количество документов, которые не удалось записать в целевой объект.

  • checkpointed_source_seq (object) – Идентификатор последовательности источника, который был успешно реплицирован последним.

Запрос:

GET /_scheduler/docs/other/_replicator HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:10:08 GMT
Server: Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked

{
    "docs": [
        {
            "database": "other/_replicator",
            "doc_id": "cdyno-0000001-0000002",
            "error_count": 0,
            "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
            "info": {
                "changes_pending": 0,
                "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg",
                "doc_write_failures": 0,
                "docs_read": 67,
                "bulk_get_attempts": 67,
                "bulk_get_docs": 67,
                "docs_written": 67,
                "missing_revisions_found": 67,
                "revisions_checked": 67,
                "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8",
                "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8"
            },
            "last_updated": "2017-04-29T05:01:37Z",
            "node": "node2@127.0.0.1",
            "source_proxy": null,
            "target_proxy": null,
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "state": "running",
            "target": "http://adm:*****@localhost:15984/cdyno-0000002/"
        }
    ],
    "offset": 0,
    "total_rows": 1
}
GET /_scheduler/docs/{replicator_db}/{docid}

Примечание

Для удобства слеши (/) в именах баз данных репликатора можно не экранировать. Поэтому /_scheduler/docs/other/_replicator является допустимым и эквивалентно /_scheduler/docs/other%2f_replicator

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON ответа:
  • id (string) – Идентификатор репликации или null, если состояние — completed или failed

  • state (string) – Одно из следующих состояний (описания см. в разделе Состояния репликации): initializing, running, completed, pending, crashing, error, failed

  • database (string) – База данных, из которой получен документ репликации

  • doc_id (string) – Идентификатор документа репликации

  • node (string) – Узел кластера, на котором выполняется задание

  • source (string) – Источник репликации

  • target (string) – Целевой объект репликации

  • start_time (string) – Временная метка начала репликации

  • last_update (string) – Временная метка последнего обновления состояния

  • info (object) – Содержит дополнительные сведения о состоянии. При ошибках это будет объект с полем "error" и строковым значением. Для состояний успешного выполнения см. ниже.

  • error_count (number) – Количество последовательных ошибок. Показывает, сколько раз подряд происходил сбой этой репликации. Повторные попытки репликации выполняются с экспоненциально увеличивающейся задержкой, зависящей от этого значения. После успешного выполнения репликации счётчик сбрасывается на 0. Это значение можно использовать, чтобы понять, почему конкретная репликация не продвигается.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Поле info документа планировщика:

Параметры JSON:
  • revisions_checked (number) – Количество проверенных ревизий с момента начала этой репликации.

  • missing_revisions_found (number) – Количество ревизий, найденных в источнике, но отсутствующих в целевом объекте.

  • docs_read (number) – Количество документов, прочитанных из источника.

  • docs_written (number) – Количество документов, записанных в целевой объект.

  • bulk_get_attempts (number) – Общее количество попыток получить ревизии документов с помощью _bulk_get.

  • bulk_get_docs (number) – Общее количество успешно полученных документов с помощью _bulk_get.

  • changes_pending (number) – Количество изменений, которые ещё не реплицированы.

  • doc_write_failures (number) – Количество документов, которые не удалось записать в целевой объект.

  • checkpointed_source_seq (object) –

    Идентификатор последовательности источника, который был последним

    успешно реплицирован.

    Запрос:

GET /_scheduler/docs/other/_replicator/cdyno-0000001-0000002 HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:10:08 GMT
Server: Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked

{
    "database": "other/_replicator",
    "doc_id": "cdyno-0000001-0000002",
    "error_count": 0,
    "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
    "info": {
        "changes_pending": 0,
        "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg",
        "doc_write_failures": 0,
        "docs_read": 67,
        "bulk_get_attempts": 67,
        "bulk_get_docs": 67,
        "docs_written": 67,
        "missing_revisions_found": 67,
        "revisions_checked": 67,
        "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8",
        "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8"
    },
    "last_updated": "2017-04-29T05:01:37Z",
    "node": "node2@127.0.0.1",
    "source_proxy": null,
    "target_proxy": null,
    "source": "http://myserver.com/foo",
    "start_time": "2017-04-29T05:01:37Z",
    "state": "running",
    "target": "http://adm:*****@localhost:15984/cdyno-0000002/"
}

/_node/{node-name}

GET /_node/{node-name}

Конечную точку /_node/{node-name} можно использовать, чтобы узнать имя узла Erlang сервера, обрабатывающего запрос. Это особенно полезно при обращении к /_node/_local для получения этой информации. Повторное получение этих сведений с конечной точки CouchDB может помочь определить, правильно ли запросы к кластеру CouchDB проходят через обратный балансировщик нагрузки.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Неавторизованный запрос к защищённому API

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_node/_local HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 27
Content-Type: application/json
Date: Tue, 28 Jan 2020 19:25:51 GMT
Server: CouchDB (Erlang OTP)
X-Couch-Request-ID: 5b8db6c677
X-CouchDB-Body-Time: 0

{"name":"node1@127.0.0.1"}

/_node/{node-name}/_stats

GET /_node/{node-name}/_stats

Ресурс _stats возвращает объект JSON со статистикой работающего сервера. Объект состоит из разделов верхнего уровня, объединяющих статистические данные для различных записей; отдельную статистику легко определить, а её содержимое описано в явном виде.

Статистика собирается внутри системы с настраиваемым интервалом. При мониторинге конечной точки _stats необходимо опрашивать её с частотой как минимум вдвое выше, чем этот интервал, чтобы получать точные результаты. Например, если интервал равен 10 секундам, опрашивайте _stats не реже одного раза в 5 секунд.

Строка _local служит псевдонимом локального имени узла, поэтому во всех URL статистики {node-name} можно заменить на _local, чтобы обращаться к статистике локального узла.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Неавторизованный запрос к защищённому API

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_node/_local/_stats/couchdb/request_time HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 187
Content-Type: application/json
Date: Sat, 10 Aug 2013 11:41:11 GMT
Server: CouchDB (Erlang/OTP)

{
  "value": {
    "min": 0,
    "max": 0,
    "arithmetic_mean": 0,
    "geometric_mean": 0,
    "harmonic_mean": 0,
    "median": 0,
    "variance": 0,
    "standard_deviation": 0,
    "skewness": 0,
    "kurtosis": 0,
    "percentile": [
      [
        50,
        0
      ],
      [
        75,
        0
      ],
      [
        90,
        0
      ],
      [
        95,
        0
      ],
      [
        99,
        0
      ],
      [
        999,
        0
      ]
    ],
    "histogram": [
      [
        0,
        0
      ]
    ],
    "n": 0
  },
  "type": "histogram",
  "desc": "length of a request inside CouchDB without MochiWeb"
}

Поля содержат текущие, минимальные и максимальные значения, а также набор статистических средних и количественных показателей. Единицы измерения количественных показателей не определены, однако приведённые ниже описания позволяют их установить.

Статистика представлена по «группам» и разделена на следующие разделы верхнего уровня:

  • couch_log: подсистема ведения журналов

  • couch_replicator: планировщик репликации и подсистема репликации

  • couchdb: основные операции с базой данных CouchDB

  • fabric: операции, связанные с кластером

  • global_changes: глобальная лента изменений

  • mem3: статистика, связанная с членством узлов

  • pread: исключения, связанные с файлами CouchDB

  • rexi: статистика, связанная с внутренними вызовами RPC кластера

Тип статистики указан в поле type и может иметь одно из следующих значений:

  • counter: монотонно возрастающий счётчик, сбрасываемый при перезапуске

  • histogram: сгруппированный набор значений со значимыми интервалами. Ограничен текущим интервалом сбора.

  • gauge: отдельное числовое значение, которое может увеличиваться и уменьшаться

Можно также получить отдельные статистические данные, указав в URL-пути раздел статистики и её идентификатор. Например, чтобы получить статистику request_time из раздела couchdb для целевого узла, можно использовать:

GET /_node/_local/_stats/couchdb/request_time HTTP/1.1

Возвращается полный объект статистики, как и при полном запросе, но содержащий только запрошенную отдельную статистику.

/_node/{node-name}/_prometheus

GET /_node/{node-name}/_prometheus

Ресурс _prometheus возвращает ответ text/plain, объединяющий данные конечных точек /_node/{node-name}/_stats и /_node/{node-name}/_system. Формат определяется Prometheus. Версия формата — 2.0.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Неавторизованный запрос к защищённому API

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_node/_local/_prometheus HTTP/1.1
Accept: text/plain
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 187
Content-Type: text/plain; version=2.0
Date: Sat, 10 May 2020 11:41:11 GMT
Server: CouchDB (Erlang/OTP)

# TYPE couchdb_couch_log_requests_total counter
couchdb_couch_log_requests_total{level="alert"} 0
couchdb_couch_log_requests_total{level="critical"} 0
couchdb_couch_log_requests_total{level="debug"} 0
couchdb_couch_log_requests_total{level="emergency"} 0
couchdb_couch_log_requests_total{level="error"} 0
couchdb_couch_log_requests_total{level="info"} 8
couchdb_couch_log_requests_total{level="notice"} 51
couchdb_couch_log_requests_total{level="warning"} 0
# TYPE couchdb_couch_replicator_changes_manager_deaths_total counter
couchdb_couch_replicator_changes_manager_deaths_total 0
# TYPE couchdb_couch_replicator_changes_queue_deaths_total counter
couchdb_couch_replicator_changes_queue_deaths_total 0
# TYPE couchdb_couch_replicator_changes_read_failures_total counter
couchdb_couch_replicator_changes_read_failures_total 0
# TYPE couchdb_couch_replicator_changes_reader_deaths_total counter
couchdb_couch_replicator_changes_reader_deaths_total 0
# TYPE couchdb_couch_replicator_checkpoints_failure_total counter
couchdb_couch_replicator_checkpoints_failure_total 0
# TYPE couchdb_couch_replicator_checkpoints_total counter
couchdb_couch_replicator_checkpoints_total 0
# TYPE couchdb_couch_replicator_connection_acquires_total counter
couchdb_couch_replicator_connection_acquires_total 0
# TYPE couchdb_couch_replicator_connection_closes_total counter
couchdb_couch_replicator_connection_closes_total 0
# TYPE couchdb_couch_replicator_connection_creates_total counter
couchdb_couch_replicator_connection_creates_total 0
# TYPE couchdb_couch_replicator_connection_owner_crashes_total counter
couchdb_couch_replicator_connection_owner_crashes_total 0
# TYPE couchdb_couch_replicator_connection_releases_total counter
couchdb_couch_replicator_connection_releases_total 0
# TYPE couchdb_couch_replicator_connection_worker_crashes_total counter
couchdb_couch_replicator_connection_worker_crashes_total 0
# TYPE couchdb_couch_replicator_db_scans_total counter
couchdb_couch_replicator_db_scans_total 1
# TYPE couchdb_couch_replicator_docs_completed_state_updates_total counter
couchdb_couch_replicator_docs_completed_state_updates_total 0
# TYPE couchdb_couch_replicator_docs_db_changes_total counter
couchdb_couch_replicator_docs_db_changes_total 0
# TYPE couchdb_couch_replicator_docs_dbs_deleted_total counter
couchdb_couch_replicator_docs_dbs_deleted_total 0
# TYPE couchdb_couch_replicator_docs_dbs_found_total counter
couchdb_couch_replicator_docs_dbs_found_total 2
# TYPE couchdb_couch_replicator_docs_failed_state_updates_total counter
couchdb_couch_replicator_docs_failed_state_updates_total 0
# TYPE couchdb_couch_replicator_failed_starts_total counter
couchdb_couch_replicator_failed_starts_total 0
# TYPE couchdb_couch_replicator_jobs_adds_total counter
couchdb_couch_replicator_jobs_adds_total 0
# TYPE couchdb_couch_replicator_jobs_crashed gauge
couchdb_couch_replicator_jobs_crashed 0
# TYPE couchdb_couch_replicator_jobs_crashes_total counter
couchdb_couch_replicator_jobs_crashes_total 0
# TYPE couchdb_couch_replicator_jobs_duplicate_adds_total counter
couchdb_couch_replicator_jobs_duplicate_adds_total 0
# TYPE couchdb_couch_replicator_jobs_pending gauge
couchdb_couch_replicator_jobs_pending 0
# TYPE couchdb_couch_replicator_jobs_removes_total counter
couchdb_couch_replicator_jobs_removes_total 0
# TYPE couchdb_couch_replicator_jobs_running gauge
couchdb_couch_replicator_jobs_running 0
# TYPE couchdb_couch_replicator_jobs_starts_total counter
couchdb_couch_replicator_jobs_starts_total 0
# TYPE couchdb_couch_replicator_jobs_stops_total counter
couchdb_couch_replicator_jobs_stops_total 0
# TYPE couchdb_couch_replicator_jobs_total gauge
couchdb_couch_replicator_jobs_total 0
# TYPE couchdb_couch_replicator_requests_total counter
couchdb_couch_replicator_requests_total 0
# TYPE couchdb_couch_replicator_responses_failure_total counter
couchdb_couch_replicator_responses_failure_total 0
# TYPE couchdb_couch_replicator_responses_total counter
couchdb_couch_replicator_responses_total 0
# TYPE couchdb_couch_replicator_stream_responses_failure_total counter
couchdb_couch_replicator_stream_responses_failure_total 0
# TYPE couchdb_couch_replicator_stream_responses_total counter
couchdb_couch_replicator_stream_responses_total 0
# TYPE couchdb_couch_replicator_worker_deaths_total counter
couchdb_couch_replicator_worker_deaths_total 0
# TYPE couchdb_couch_replicator_workers_started_total counter
couchdb_couch_replicator_workers_started_total 0
# TYPE couchdb_auth_cache_requests_total counter
couchdb_auth_cache_requests_total 0
# TYPE couchdb_auth_cache_misses_total counter
couchdb_auth_cache_misses_total 0
# TYPE couchdb_collect_results_time_seconds summary
couchdb_collect_results_time_seconds{quantile="0.5"} 0.0
couchdb_collect_results_time_seconds{quantile="0.75"} 0.0
couchdb_collect_results_time_seconds{quantile="0.9"} 0.0
couchdb_collect_results_time_seconds{quantile="0.95"} 0.0
couchdb_collect_results_time_seconds{quantile="0.99"} 0.0
couchdb_collect_results_time_seconds{quantile="0.999"} 0.0
couchdb_collect_results_time_seconds_sum 0.0
couchdb_collect_results_time_seconds_count 0
# TYPE couchdb_couch_server_lru_skip_total counter
couchdb_couch_server_lru_skip_total 0
# TYPE couchdb_database_purges_total counter
couchdb_database_purges_total 0
# TYPE couchdb_database_reads_total counter
couchdb_database_reads_total 0
# TYPE couchdb_database_writes_total counter
couchdb_database_writes_total 0
# TYPE couchdb_db_open_time_seconds summary
couchdb_db_open_time_seconds{quantile="0.5"} 0.0
couchdb_db_open_time_seconds{quantile="0.75"} 0.0
couchdb_db_open_time_seconds{quantile="0.9"} 0.0
couchdb_db_open_time_seconds{quantile="0.95"} 0.0
couchdb_db_open_time_seconds{quantile="0.99"} 0.0
couchdb_db_open_time_seconds{quantile="0.999"} 0.0
couchdb_db_open_time_seconds_sum 0.0
couchdb_db_open_time_seconds_count 0
# TYPE couchdb_dbinfo_seconds summary
couchdb_dbinfo_seconds{quantile="0.5"} 0.0
couchdb_dbinfo_seconds{quantile="0.75"} 0.0
couchdb_dbinfo_seconds{quantile="0.9"} 0.0
couchdb_dbinfo_seconds{quantile="0.95"} 0.0
couchdb_dbinfo_seconds{quantile="0.99"} 0.0
couchdb_dbinfo_seconds{quantile="0.999"} 0.0
couchdb_dbinfo_seconds_sum 0.0
couchdb_dbinfo_seconds_count 0
# TYPE couchdb_document_inserts_total counter
couchdb_document_inserts_total 0
# TYPE couchdb_document_purges_failure_total counter
couchdb_document_purges_failure_total 0
# TYPE couchdb_document_purges_success_total counter
couchdb_document_purges_success_total 0
# TYPE couchdb_document_purges_total_total counter
couchdb_document_purges_total_total 0
# TYPE couchdb_document_writes_total counter
couchdb_document_writes_total 0
# TYPE couchdb_httpd_aborted_requests_total counter
couchdb_httpd_aborted_requests_total 0
# TYPE couchdb_httpd_all_docs_timeouts_total counter
couchdb_httpd_all_docs_timeouts_total 0
# TYPE couchdb_httpd_bulk_docs_seconds summary
couchdb_httpd_bulk_docs_seconds{quantile="0.5"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.75"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.9"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.95"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.99"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.999"} 0.0
couchdb_httpd_bulk_docs_seconds_sum 0.0
couchdb_httpd_bulk_docs_seconds_count 0
...remaining couchdb metrics from _stats and _system

Если указан дополнительный параметр конфигурации порта, клиент может обращаться к этому API через указанный порт, не требующий аутентификации. По умолчанию этот параметр false (ВЫКЛ.). Если параметр включён — true (ВКЛ.), порты по умолчанию для кластера из 3 узлов: 17986, 27986, 37986. Подробности см. в разделе Настройка конечной точки Prometheus.

GET /_node/_local/_prometheus HTTP/1.1
Accept: text/plain
Host: localhost:17986

/_node/{node-name}/_smoosh/status

Добавлено в версии 3.4.

GET /_node/{node-name}/_smoosh/status

Выводит состояние каждого канала, количество выполняемых в данный момент заданий и количество заданий в очереди (а также наименьший и наибольший приоритет элементов в очереди). Цель — предоставить достаточно сведений о smoosh с первого взгляда, чтобы оператор мог оценить, достаточно ли эффективно smoosh использует доступное для освобождения пространство в кластере.

Как правило, при нормальном состоянии в каналах ratio_dbs и ratio_views будут находиться элементы. Из-за настроек по умолчанию элементы почти наверняка будут и в каналах slack_dbs и slack_views. Судя по нашему опыту, одни лишь каналы низкого приоритета не особенно эффективны для поддержания хорошей степени уплотнения.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_node/_local/_smoosh/status HTTP/1.1
Host: 127.0.0.1:5984
Accept: */*

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "channels": {
        "slack_dbs": {
            "starting": 0,
            "waiting": {
                "size": 0,
                "min": 0,
                "max": 0
            },
            "active": 0
        },
        "ratio_dbs": {
            "starting": 0,
            "waiting": {
                "size": 56,
                "min": 1.125,
                "max": 11.0625
            },
            "active": 0
        },
        "ratio_views": {
            "starting": 0,
            "waiting": {
                "size": 0,
                "min": 0,
                "max": 0
            },
            "active": 0
        },
        "upgrade_dbs": {
            "starting": 0,
            "waiting": {
                "size": 0,
                "min": 0,
                "max": 0
            },
            "active": 0
        },
        "slack_views": {
            "starting": 0,
            "waiting": {
                "size": 0,
                "min": 0,
                "max": 0
            },
            "active": 0
        },
        "upgrade_views": {
            "starting": 0,
            "waiting": {
                "size": 0,
                "min": 0,
                "max": 0
            },
            "active": 0
        },
        "index_cleanup": {
            "starting": 0,
            "waiting": {
                "size": 0,
                "min": 0,
                "max": 0
            },
            "active": 0
        }
    }
}

/_node/{node-name}/_system

GET /_node/{node-name}/_system

Ресурс _system возвращает объект JSON с различными статистическими данными об уровне системы для работающего сервера. Объект структурирован по разделам верхнего уровня, в которых собраны статистические данные по различным записям; каждая отдельная статистика легко определяется, а её содержимое описано самостоятельно.

Строка _local служит псевдонимом имени локального узла, поэтому во всех URL статистики {node-name} можно заменить на _local, чтобы взаимодействовать со статистикой локального узла.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_node/_local/_system HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 187
Content-Type: application/json
Date: Sat, 10 Aug 2013 11:41:11 GMT
Server: CouchDB (Erlang/OTP)

{
  "uptime": 259,
  "memory": {}
}

Эти статистические данные предназначены, как правило, только для разработчиков CouchDB.

/_node/{node-name}/_restart

POST /_node/{node-name}/_restart

Этот API предназначен только для интеграционного тестирования и не должен использоваться в рабочей среде.

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

/_node/{node-name}/_versions

GET /_node/{node-name}/_versions

Ресурс _versions возвращает объект JSON с различными сведениями об уровне системы для работающего сервера.

При наличии обнаруженного узла поиска clouseau также отображается его версия.

Строка _local служит псевдонимом имени локального узла, поэтому во всех URL статистики {node-name} можно заменить на _local, чтобы взаимодействовать со сведениями о локальном узле.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Заголовки ответа:
  • Content-Type –

    • application/json

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_node/_local/_versions HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 368
Content-Type: application/json
Date: Sat, 03 Sep 2022 08:12:12 GMT
Server: CouchDB/3.2.2-ea382cf (Erlang OTP/25)

{
    "javascript_engine": {
        "version": "91",
        "name": "spidermonkey"
    },
    "erlang": {
        "version": "25.0.4",
        "supported_hashes": [
            "sha",
            "sha224",
            "sha256",
        ]
    },
    "clouseau": {
        "version": "2.24.0"
    },
    "collation_driver": {
        "name": "libicu",
        "library_version": "70.1",
        "collator_version": "153.112",
        "collation_algorithm_version": "14"
    }
}

/_search_analyze

Предупреждение

Для работы конечных точек поиска необходим работающий поисковый плагин, подключённый к каждому узлу кластера. Подробнее см. в разделе Установка поискового плагина.

Добавлено в версии 3.0.

POST /_search_analyze

Проверяет результаты токенизации анализатором Lucene на примере текста.

Параметры:
  • analyzer – Тип анализатора

  • text – Токен анализатора, который требуется проверить

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 400 Неверный запрос – Тело запроса содержит ошибку (имеет неверный формат или в нём отсутствует обязательное поле)

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 500 Внутренняя ошибка сервера – Произошла ошибка сервера (или ошибка другого типа)

Запрос:

POST /_search_analyze HTTP/1.1
Host: localhost:5984
Content-Type: application/json

{"analyzer":"english", "text":"running"}

Ответ:

{
    "tokens": [
        "run"
    ]
}

/_nouveau_analyze

Предупреждение

Nouveau — экспериментальная функция. В будущих выпусках работа конечных точек может измениться, а существующие индексы могут стать недействительными.

Предупреждение

Для работы конечных точек Nouveau необходим работающий сервер Nouveau. Подробнее см. в разделе Установка сервера Nouveau.

Добавлено в версии 3.4.0.

POST /_nouveau_analyze

Проверяет результаты токенизации анализатором Lucene на примере текста.

Параметры:
  • analyzer – Имя анализатора

  • text – Токен анализатора, который требуется проверить

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 400 Неверный запрос – Тело запроса содержит ошибку (имеет неверный формат или в нём отсутствует обязательное поле)

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 500 Внутренняя ошибка сервера – Произошла ошибка сервера (или ошибка другого типа)

Запрос:

POST /_nouveau_analyze HTTP/1.1
Host: localhost:5984
Content-Type: application/json

{"analyzer":"english", "text":"running"}

Ответ:

{
    "tokens": [
        "run"
    ]
}

/_utils

GET /_utils

Открывает встроенный интерфейс администрирования Fauxton для CouchDB.

Заголовки ответа:
  • Location – Новый URI-адрес

Коды состояния:
  • 301 Перемещено навсегда – Перенаправляет на GET /_utils/

GET /_utils/
Заголовки ответа:
  • Content-Type – text/html

  • Last-Modified – Временная метка изменения статических файлов

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

/_up

Добавлено в версии 2.0.

GET /_up

Подтверждает, что сервер запущен и готов обрабатывать запросы. Если параметр maintenance_mode имеет значение true или nolb, конечная точка вернёт ответ 404. Поле состояния в теле ответа также изменяется в соответствии с текущим значением maintenance_mode; по умолчанию используется ok.

Если параметр maintenance_mode имеет значение true, в поле состояния устанавливается значение maintenance_mode.

Если для параметра maintenance_mode задано значение nolb, в поле состояния устанавливается значение nolb.

Заголовки ответа:
  • Content-Type – application/json

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 404 Не найдено – В данный момент сервер недоступен для обработки запросов.

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 16
Content-Type: application/json
Date: Sat, 17 Mar 2018 04:46:26 GMT
Server: CouchDB/2.2.0-f999071ec (Erlang OTP/19)
X-Couch-Request-ID: c57a3b2787
X-CouchDB-Body-Time: 0

{"status":"ok"}

/_uuids

Изменено в версии 2.0.0.

GET /_uuids

Запрашивает один или несколько универсальных уникальных идентификаторов (UUID) у экземпляра CouchDB. Ответ представляет собой объект JSON со списком UUID.

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

Параметры запроса:
  • count (number) – Количество UUID для возврата. Значение по умолчанию — 1.

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

  • ETag – Хеш ответа

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 400 Неверный запрос – Запрошено больше UUID, чем разрешено получить параметром allowed

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_uuids?count=10 HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Length: 362
Content-Type: application/json
Date: Sat, 10 Aug 2013 11:46:25 GMT
ETag: "DGRWWQFLUDWN5MRKSLKQ425XV"
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Pragma: no-cache
Server: CouchDB (Erlang/OTP)

{
    "uuids": [
        "75480ca477454894678e22eec6002413",
        "75480ca477454894678e22eec600250b",
        "75480ca477454894678e22eec6002c41",
        "75480ca477454894678e22eec6003b90",
        "75480ca477454894678e22eec6003fca",
        "75480ca477454894678e22eec6004bef",
        "75480ca477454894678e22eec600528f",
        "75480ca477454894678e22eec6005e0b",
        "75480ca477454894678e22eec6006158",
        "75480ca477454894678e22eec6006161"
    ]
}

Тип UUID определяется параметром UUID algorithm в конфигурации CouchDB.

Тип UUID можно изменить в любое время с помощью API конфигурации. Например, тип UUID можно изменить на random, отправив следующий HTTP-запрос:

PUT http://couchdb:5984/_node/nonode@nohost/_config/uuids/algorithm HTTP/1.1
Content-Type: application/json
Accept: */*

"random"

Проверить изменение можно, получив список UUID:

{
    "uuids" : [
        "031aad7b469956cf2826fcb2a9260492",
        "6ec875e15e6b385120938df18ee8e496",
        "cff9e881516483911aa2f0e98949092d",
        "b89d37509d39dd712546f9510d4a9271",
        "2e0dbf7f6c4ad716f21938a016e4e59f"
    ]
}

/favicon.ico

GET /favicon.ico

Бинарное содержимое значка сайта favicon.ico.

Заголовки ответа:
  • Content-Type – image/x-icon

Коды состояния:
  • 200 ОК – Запрос успешно выполнен

  • 401 Не авторизован – Неавторизованный запрос к защищённому API

  • 403 Запрещено – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 404 Не найдено – Запрошенное содержимое не найдено

/_reshard

Добавлено в версии 2.4.

GET /_reshard

Возвращает количество завершённых, неудачных, выполняющихся, остановленных и всех заданий, а также состояние перераспределения сегментов в кластере.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON ответа:
  • state (string) – stopped или running

  • state_reason (string) – null или строка с дополнительными сведениями либо причиной, связанной с состоянием

  • completed (number) – Количество завершённых заданий по перераспределению сегментов

  • failed (number) – Количество неудачных заданий по перераспределению сегментов

  • running (number) – Количество выполняющихся заданий по перераспределению сегментов

  • stopped (number) – Количество остановленных заданий по перераспределению сегментов

  • total (number) – Общее количество заданий по перераспределению сегментов

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_reshard HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "completed": 21,
    "failed": 0,
    "running": 3,
    "state": "running",
    "state_reason": null,
    "stopped": 0,
    "total": 24
}
GET /_reshard/state

Возвращает состояние перераспределения сегментов и дополнительные сведения о состоянии, если они имеются.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON ответа:
  • state (string) – stopped или running

  • state_reason (string) – Дополнительные сведения либо причина, связанные с состоянием

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_reshard/state HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "reason": null,
    "state": "running"
}
PUT /_reshard/state

Изменяет состояние перераспределения сегментов в кластере. Возможны состояния stopped и running. Это запускает и останавливает глобальное перераспределение сегментов на всех узлах кластера. Если выполняются какие-либо задания, они будут остановлены при переходе состояния в stopped. Когда состояние снова изменится на running, эти задания продолжат выполняться.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON запроса:
  • state (string) – stopped или running

  • state_reason (string) – Необязательная строка с дополнительными сведениями либо причиной, связанными с состоянием

Объект JSON ответа:
  • ok (boolean) – true

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 400 Bad Request – Недопустимый запрос. Возможно, указано неверное или отсутствует имя состояния.

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

PUT /_reshard/state HTTP/1.1
Accept: application/json
Host: localhost:5984

{
    "state": "stopped",
    "reason": "Rebalancing in progress"
}

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "ok": true
}
GET /_reshard/jobs

Примечание

Структура ответа, в частности поля total_rows и offset, должна соответствовать структуре конечной точки _scheduler/jobs.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON ответа:
  • jobs (list) – Массив объектов JSON, по одному для каждого задания по перераспределению сегментов. Описание полей каждого задания см. в конечной точке /_reshard/job/{jobid}.

  • offset (number) – Смещение в списке объектов заданий. В настоящее время задано в коде как 0.

  • total_rows (number) – Общее количество заданий по перераспределению сегментов в кластере.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_reshard/jobs HTTP/1.1
Accept: application/json

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "jobs": [
        {
            "history": [
                {
                    "detail": null,
                    "timestamp": "2019-03-28T15:28:02Z",
                    "type": "new"
                },
                {
                    "detail": "initial_copy",
                    "timestamp": "2019-03-28T15:28:02Z",
                    "type": "running"
                }
            ],
            "id": "001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a",
            "job_state": "completed",
            "node": "node1@127.0.0.1",
            "source": "shards/00000000-1fffffff/d1.1553786862",
            "split_state": "completed",
            "start_time": "2019-03-28T15:28:02Z",
            "state_info": {},
            "target": [
                "shards/00000000-0fffffff/d1.1553786862",
                "shards/10000000-1fffffff/d1.1553786862"
            ],
            "type": "split",
            "update_time": "2019-03-28T15:28:08Z"
        }
    ],
    "offset": 0,
    "total_rows": 24
}
GET /_reshard/jobs/{jobid}

Получает сведения о задании по перераспределению сегментов с идентификатором jobid.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON ответа:
  • id (string) – Идентификатор задания.

  • type (string) – На данный момент реализован только split.

  • job_state (string) – Состояние выполнения задания. Возможны значения new, running, stopped, completed или failed.

  • split_state (string) – Подробное состояние, относящееся к разделению сегментов. Оно показывает ход выполнения разделения сегментов; возможны значения new, initial_copy, topoff1, build_indices, topoff2, copy_local_docs, update_shardmap, wait_source_close, topoff3, source_delete или completed.

  • state_info (object) – Необязательные дополнительные сведения, связанные с текущим состоянием.

  • source (string) – Для заданий типа split это исходный сегмент.

  • target (list) – Для заданий типа split это список из двух или более целевых сегментов.

  • history (list) – Список объектов JSON, содержащих историю переходов между состояниями задания.

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

Запрос:

GET /_reshard/jobs/001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a HTTP/1.1
Accept: application/json

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{

    "id": "001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a",
    "job_state": "completed",
    "node": "node1@127.0.0.1",
    "source": "shards/00000000-1fffffff/d1.1553786862",
    "split_state": "completed",
    "start_time": "2019-03-28T15:28:02Z",
    "state_info": {},
    "target": [
        "shards/00000000-0fffffff/d1.1553786862",
        "shards/10000000-1fffffff/d1.1553786862"
    ],
    "type": "split",
    "update_time": "2019-03-28T15:28:08Z",
    "history": [
        {
            "detail": null,
            "timestamp": "2019-03-28T15:28:02Z",
            "type": "new"
        },
        {
            "detail": "initial_copy",
            "timestamp": "2019-03-28T15:28:02Z",
            "type": "running"
        }
    ]
}
POST /_reshard/jobs

В зависимости от указанных в запросе полей будут созданы одно или несколько заданий по перераспределению сегментов. Ответ представляет собой массив результатов в формате JSON. Каждый объект результата соответствует одному заданию по перераспределению сегментов для определённого узла и диапазона. Некоторые запросы могут завершиться успешно, а другие — с ошибкой. В успешных результатах будут ключ "ok": true и значение, а в заданиях с ошибкой — ключ "error": "{error_message}" и значение.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON запроса:
  • type (string) – Тип задания. В настоящее время допускается только "split".

  • db (string) – База данных, которую нужно разделить. Это поле нельзя указывать одновременно с полем "shard”.

  • node (string) – Разделить сегменты на определённом узле. Этот параметр необязателен. Значение должно соответствовать одному из узлов, возвращаемых конечной точкой _membership.

  • range (string) – Разделить копии сегментов в указанном диапазоне. Формат диапазона: hhhhhhhh-hhhhhhhh, где h — шестнадцатеричная цифра. Используется этот формат, поскольку именно так диапазоны представлены в файловой системе. Этот параметр необязателен и не может использоваться одновременно с полем "shard".

  • shard (string) – Разделить определённый сегмент. Сегмент следует указать в формате "shards/{range}/{db}.{suffix}". Здесь range имеет формат hhhhhhhh-hhhhhhhh, db — имя базы данных, а suffix — суффикс создания сегмента (временная метка).

  • error (string) – Сообщение об ошибке, если создать задание не удалось.

  • node – Узел кластера, на котором было создано и выполняется задание.

Объект JSON ответа:
  • ok (boolean) – true, если задание создано успешно.

Коды состояния:
  • 201 Created – Одно или несколько заданий успешно созданы

  • 400 Bad Request – Недопустимый запрос. Возможно, не прошла проверка параметров.

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 404 Not Found – База данных, узел, диапазон или сегмент не найдены

Запрос:

POST /_reshard/jobs HTTP/1.1
Accept: application/json
Content-Type: application/json

{
   "db": "db3",
   "range": "80000000-ffffffff",
   "type": "split"
}

Ответ:

HTTP/1.1 201 Created
Content-Type: application/json

[
    {
        "id": "001-30d7848a6feeb826d5e3ea5bb7773d672af226fd34fd84a8fb1ca736285df557",
        "node": "node1@127.0.0.1",
        "ok": true,
        "shard": "shards/80000000-ffffffff/db3.1554148353"
    },
    {
        "id": "001-c2d734360b4cb3ff8b3feaccb2d787bf81ce2e773489eddd985ddd01d9de8e01",
        "node": "node2@127.0.0.1",
        "ok": true,
        "shard": "shards/80000000-ffffffff/db3.1554148353"
    }
]
DELETE /_reshard/jobs/{jobid}

Если задание выполняется, остановите его, а затем удалите.

Объект JSON ответа:
  • ok (boolean) – true, если задание успешно удалено.

Коды состояния:
  • 200 OK – Задание успешно удалено

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 404 Not Found – Задание не найдено

Запрос:

DELETE /_reshard/jobs/001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a HTTP/1.1

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "ok": true
}
GET /_reshard/jobs/{jobid}/state

Возвращает состояние выполнения задания по перераспределению сегментов с идентификатором jobid.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON запроса:
  • state (string) – Одно из значений: new, running, stopped, completed или failed.

  • state_reason (string) – Дополнительные сведения, связанные с состоянием

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 404 Not Found – Задание не найдено

Запрос:

GET /_reshard/jobs/001-b3da04f969bbd682faaab5a6c373705cbcca23f732c386bb1a608cfbcfe9faff/state HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "reason": null,
    "state": "running"
}
PUT /_reshard/jobs/{jobid}/state

Изменяет состояние определённого задания по перераспределению сегментов с идентификатором jobid. Состояние можно изменить с stopped на running или с running на stopped. Если отдельное задание переведено в состояние stopped с помощью этого API, оно останется в состоянии stopped, даже если глобальное состояние перераспределения сегментов переключить с stopped на running. Если задание уже находится в состоянии completed, оно останется в состоянии completed.

Заголовки запроса:
  • Accept –

    • application/json

Заголовки ответа:
  • Content-Type –

    • application/json

Объект JSON запроса:
  • state (string) – stopped или running

  • state_reason (string) – Необязательная строка с дополнительными сведениями либо причиной, связанными с состоянием

Объект JSON ответа:
  • ok (boolean) – true

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 400 Bad Request – Недопустимый запрос. Например, может быть указано неверное имя состояния.

  • 401 Unauthorized – Требуются права администратора сервера CouchDB

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными

  • 404 Not Found – Задание не найдено

Запрос:

PUT /_reshard/state/001-b3da04f969bbd682faaab5a6c373705cbcca23f732c386bb1a608cfbcfe9faff/state HTTP/1.1
Accept: application/json
Host: localhost:5984

{
    "state": "stopped",
    "reason": "Rebalancing in progress"
}

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json

{
     "ok": true
}

Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/api/server/common.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API