Как получить лучшую производительность от Hudson CI API? - PullRequest
2 голосов
/ 18 января 2011

Я пытаюсь написать для себя небольшой инструмент, который бы интегрировался с сервером сборки Hudson. Текущий контрольно-пропускной пункт, который я ударил, является производительностью. Я хотел бы сделать простую вещь, как список всех рабочих мест и время последней успешной сборки. Hudson API предоставляет эту информацию, но я должен либо запросить все по номеру depth=2, либо запросить каждое задание по отдельности (сейчас их 150). Даже при exclude любой подход занимает полминуты. Это неприемлемо для пользовательского интерфейса, который должен быть быстрым. Мне нужно, чтобы это время было ниже 1 с, предпочтительно ниже 0,5 с.

Текущее решение, которое я придумала, заключается в интенсивном кэшировании на стороне клиента. Данные сборки не меняются, поэтому все становится намного проще. Но это все еще много кода.

Возможно, есть другой способ быстро получить эту информацию? Возможно, есть плагин, который кэширует все данные и увеличивает скорость API? Обратите внимание, что инструмент обычно НЕ имеет доступа к HUDSON_HOME.

1 Ответ

3 голосов
/ 19 января 2011

Использование параметра запроса tree намного, намного быстрее, чем запрос в depth=2.Согласно документации встроенного API Hudson (см. Контроль количества данных, которые вы выбираете в http://hudson/api/), tree, более эффективен, чем исключение, поскольку сервер не генерирует, а затем отбрасывает данные.

Я думаю, что следующий URL будет работать для запроса в вашем вопросе:

http://hudson/api/xml?tree=jobs[name,lastSuccessfulBuild[number,url,timestamp]]

В моей системе с 40-ю заданиями:

$ time curl "http://hudson/api/xml?tree=jobs\[name,lastSuccessfulBuild\[number,url,timestamp\]\]"

<hudson><job><name>Example Windows build</name>
   <lastSuccessfulBuild><number>7</number>
   <timestamp>1264806194000</timestamp>
...lots of unformatted XML...

real    0m0.166s
user    0m0.062s
sys     0m0.093s
...