Google cloud tasks NodeJS api: получить статистику очереди?

#node.js #google-api #google-api-client #beta #google-cloud-tasks

#node.js #google-api #google-api-клиент #бета #google-cloud-задачи

Вопрос:

Я хочу получить поле статистики для очереди в Google cloud tasks, используя клиентскую библиотеку nodejs @google-cloud/tasks . Поле статистики существует только в v2beta3 версии, однако для его получения нам нужно передать параметры запроса readMask=* , но я не знаю, как передать его с помощью клиентской библиотеки. Я пытался использовать otherArgs параметры, но это не работает.

 const tasks = require('@google-cloud/tasks');

const client = new tasks.v2beta3.GoogleCloudTasks()

// Get queue containing stats
const queue = await client.getQueue({name: '..'}, {otherArgs: {readMask: '*'}})
 

Ответ №1:

Маска чтения указывает, какие пути объекта ответа извлекать. Ответ будет включать все возможные пути с заполнителями, такими как null, UNSPECIFIED и т. Д., А Затем содержать фактические значения, которые вы хотите.

 const request = {
    ...
    readMask: { paths: ['name', 'stats', 'state', ...] }
};
 

getQueue

 const { v2beta3 } = require('@google-cloud/tasks');
const tasksClient = new v2beta3.CloudTasksClient();

async function main() {
    const request = {
        name: 'projects/PROJECT/locations/LOCATION/queues/QUEUE',
        readMask: { paths: ['name', 'stats'] }
    };

    const [response] = await tasksClient.getQueue(request);

    console.log(response);
}
main();

/*
{
  name: 'projects/PROJECT/locations/LOCATION/queues/QUEUE',
  ...
  stats: {
    tasksCount: '113',
    oldestEstimatedArrivalTime: null,
    executedLastMinuteCount: '0',
    concurrentDispatchesCount: '0',
    effectiveExecutionRate: 500
  }
}
*/
 

Список запросов

 const { v2beta3 } = require('@google-cloud/tasks');
const tasksClient = new v2beta3.CloudTasksClient();

async function main() {
    const request = {
        parent: 'projects/PROJECT/locations/LOCATION',
        readMask: { paths: ['name', 'stats'] }
    };

    const [response] = await tasksClient.listQueues(request);

    console.log(response);
}
main();

/*
[
  {
    name: 'projects/PROJECT/locations/LOCATION/queues/QUEUE',
    ...
    stats: {
      tasksCount: '1771',
      oldestEstimatedArrivalTime: [Object],
      executedLastMinuteCount: '0',
      concurrentDispatchesCount: '0',
      effectiveExecutionRate: 500
    }
  },
  ...
]
*/

 

Ответ №2:

Взглянув на исходный код клиентской библиотеки, я не вижу ссылки на параметр readMask, указанный в версии v2beta3 REST API projects.locations.метод queues.get.

Соответствующий метод в клиентской библиотеке NodeJS getQueue() ожидает тип запроса IGetQueueRequest, который не имеет readMask параметра и ожидает только name свойство.

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

Что касается самого REST API, в общедоступных документах в разделе readMask есть ошибка, поскольку * не является допустимым символом. Если вы хотите получить поле Queue.stats, вы должны просто ввести stats параметр readMask. Если вы хотите получить все соответствующие поля, вы должны ввести их все (например name,rateLimits,retryConfig,state,taskTtl,tombstoneTtl,type,stats , должны получить все соответствующие поля, которые вы получаете при вызове метода поле Queue.stats).

Следующая картинка должна вам помочь.возвращайте только поле Queue.stats

В качестве обходного пути, если вы нажмете на символ расширения в разделе «Попробуйте этот API» документации для соответствующего метода, вы можете нажать на раздел JAVASCRIPT и получить соответствующий код для построения запроса, как показано на следующем рисунке.код на JS

РЕДАКТИРОВАТЬ 23 ЯНВАРЯ 2020 года

Документация была исправлена, чтобы сообщить об этом, чтобы выразить это:

[Queue.stats] будет возвращен, только если он был явно указан в маске.

Что означает, что простая запись stats в поле readMask вернет статистику.

Комментарии:

1. Это позор. Для предлагаемого вами кода требуется ключ API и идентификатор клиента, который является дополнительной конфигурацией.

2. ДА. Вы правы! Преимущество клиентских библиотек в том, что они обрабатывают аутентификацию и авторизацию под капотом с помощью переменных среды, но я не вижу никаких других возможностей с использованием JS. Вы можете получить поле Queue.stats, используя клиентскую библиотеку Python. Я могу опубликовать некоторый код для этого, если вы сочтете его полезным.