SonarQube 5.5 API — соглашение componentKey

Я пытаюсь извлечь данные о покрытии из нашего экземпляра SonarQube, используя 'api/measures/component. конечная точка. Это для многомодульного java-проекта. Используя POSTMAN, я могу запросить один java-файл, используя «componentKey», который состоит из строки, подобной этой.

[maven-groupId]:[maven-artifactId]:[path to java file]

который генерирует строку типа

com.i.pc.e.components.o:om-wf-e:src/main/java/com/i/e/o/wf/actions/Xxxx.java

и возвращает этот ответ json

{
"component": {
  "id": "AVci_6G7elHqFlTqG_OC",
  "key": "com.i.pc.e.components.o:om-wfl-e:src/main/java/com/i/e/o/wf/actions/Xxxx.java",
  "name": "Xxxx.java",
  "qualifier": "FIL",
  "path": "src/main/java/com/i/e/om/wf/actions/Xxxxx.java",
  "language": "java",
  "measures": []
},
"metrics": [
  {
    "key": "coverage",
    "name": "Coverage",
    "description": "Coverage by unit tests",
    "domain": "Coverage",
    "type": "PERCENT",
    "higherValuesAreBetter": true,
    "qualitative": true,
    "hidden": false,
    "custom": false,
    "decimalScale": 1,
    "bestValue": "100.0",
    "worstValue": "0.0"
  }
]

}

Это нормально для одноразового запроса, но мне нужно сделать это для нескольких исходных файлов Java, и у меня не будет под рукой сведений о Maven.

Существует ли соглашение или документация по формату 'componentKey'?

В идеале я хотел бы определить полное имя пакета и исходного файла java в «compomentKey» или есть способ найти «componentId» через какой-либо другой вызов REST API?


person emeraldjava    schedule 13.09.2016    source источник


Ответы (1)


Используйте сервис components для итерации по вашему дереву (или поддеревьям в вашем дереве), начиная с из вашего проекта и введите значение sonar.projectKey в параметр baseComponentKey. Обратите особое внимание на параметр strategy, который определяет, какое подмножество дочерних элементов извлекает вызов.

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

person G. Ann - SonarSource Team    schedule 13.09.2016
comment
Спасибо @g-ann-sonarsource-team, но это по-прежнему предполагает, что я знаю «baseComponentKey» или «baseComponentId». Есть ли API-интерфейс поиска или запроса, где я могу передать полное имя класса и пакета? - person emeraldjava; 13.09.2016
comment
Я немного расширил @emeraldjava. Посмотрите, поможет ли это - person G. Ann - SonarSource Team; 14.09.2016