Какова структура базы данных сонара?

Я пытаюсь создать ежемесячную базу отчетов по коэффициенту ниже

  • LoC (строки кода)
  • Соответствие правила%
  • Комментарий%
  • Открытый документированный API%
  • Нарушения безопасности
  • Нарушения (без информации)
  • Дублированная строка%

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

О подсказках ниже указан запрос

Подсказка:

select proj.name as ClassName, -- Class Name for which violation has been found out
       proj.long_name as LongName, -- Long Class Name i.e. with package for which violation has been found out
       rf.failure_level as ErrorLevel, -- Error level of the violation
       rf.message as Violation, -- Cause of Violation 
       rf.line as LineNumber, -- Line number of the class file
       ru.name ViolationName, -- Violation Description
       ru.plugin_name PluginType -- Plugin tool by which this error has been detected i.e. findbug, PMD, etc.
       --  ,ru.description  -- (if violation description is required we can add this column) from projects proj  inner join snapshots snap on  proj.id = snap.project_id inner join rule_failures rf on rf.snapshot_id = snap.id inner join rules ru on ru.id = rf.rule_id

Ответ 1

Вы можете получить приведенную выше информацию, используя приведенную ниже таблицу.

1) проекты, моментальные снимки, метрики и project_measures. где таблица проектов содержит имя проекта. И для каждого проекта в мгновенной таблице создается один идентификатор моментального снимка в определенный период времени. затем из таблицы снимков возьмите идентификатор моментального снимка и выполните поиск в таблице projects_measure. и поиск значения атрибута descibed с использованием метрического идентификатора.

select distinct proj.name NAME_OF_PROJ, metric.description Description,
                projdesc.value, snap.created_at CREATED_DATE
  from projects proj
    inner join snapshots snap on snap.project_id=proj.id 
  inner join (select max(snap2.created_at) as date_of_creation,id from snapshots snap2 
              where Date(snap2.created_at)   in ('2011-12-20','2012-02-21') 
               and snap2.project_id  in (5507,35252,9807,38954,23018,32390) 
              GROUP BY DAY(snap2.created_at),snap2.project_id ) as Lookup on Lookup.id=snap.id 

  inner join project_measures projdesc on  projdesc.snapshot_id=snap.id 
  inner join metrics metric on  projdesc.metric_id =metric.id 
  where  metric.id in( 1,2...)

Ответ 2

Я бы предложил использовать Sonar REST API для получения статистики.

Схема базы данных намеренно недокументирована командой разработчиков. Это позволяет им вносить изменения, которые не нарушают зависимых приложений отчетности. (Очевидно, это не останавливает тех, кто выполняет SQL-запросы)


Пример

В качестве примера можно использовать проект CXF в nemo.

API REST "resources" возвращает последнее значение показателей, которые вы запросили

http://nemo.sonarsource.org/api/resources?resource=org.apache.cxf:cxf&verbose=true&metrics=ncloc,violations_density,comment_lines_density,public_documented_api_density,duplicated_lines_density,blocker_violations,critical_violations,major_violations,minor_violations

И "timemachine" REST API возвращает необработанный дамп CSV данных:

http://nemo.sonarsource.org/api/timemachine?resource=org.apache.cxf:cxf&format=csv&metrics=ncloc,violations_density,comment_lines_density,public_documented_api_density,duplicated_lines_density,blocker_violations,critical_violations,major_violations,minor_violations

(Мой браузер будет удобно запускать электронную таблицу для чтения CSV-данных)

Ответ 3

Я пытаюсь создать мета-API командного уровня поверх SonarQube, и отсутствие документации приводит в бешенство. Да, есть конечная точка API документации, но отсутствие модели данных, "интересной" структуры ER и, как правило, неоднозначных документов означает, что я еще не нашел способа найти группы, прикрепленные к шаблону разрешений (только дает вам количество групп/пользователей).

Вы можете добавлять, удалять, обновлять разрешения, но если я не пропустил что-то очень простое (вероятно, я), конечная точка api/permissions/search_templates фактически не возвращает группы, присоединенные к шаблону. Кто-нибудь может решить это для меня? :)