2012-02-08 168 views
12

我想下面的因素生成月度报告的基础什么是声纳数据库结构?

  1. LOC(行代码)
  2. 规则合规%
  3. 评论%
  4. 公共记录的API%
  5. 安全侵犯
  6. 违规(不含信息)
  7. 重复行%

我试图检查声纳数据库中的实体关系,所有的表都是独立的。 我不知道从哪张表中我应该得到的价值,以产生报告。

对于下面的查询提示中提到

提示:

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 
+0

是否太多适合您的需求了?[报告插件](http://docs.codehaus.org/display/SONAR/Sonar+PDF+Plugin)? – oers 2012-02-08 13:03:14

+0

哦,请在您以前的问题上为您的努力提供帮助并[请接受答案](http://meta.stackexchange.com/a/5235/160062)。 – oers 2012-02-08 13:06:04

回答

7

你可以得到上面的信息使用下表。

1)项目,快照,指标和项目对策。其中项目表包含项目名称。并且对于每个项目,在快照表中的一段时间内创建一个快照ID。然后从快照表中获取快照ID并搜索它的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...) 
+0

是的它工作正常 – Amrin 2012-02-23 11:34:56

11

我会建议使用Sonar REST API检索统计数据。

数据库架构故意未被开发团队记录在案。这使他们能够进行不会中断相关报告应用程序的更改。 (显然,这并不能阻止别人运行SQL查询)


使用CXF project in nemo作为一个例子。

的 “资源” REST API返回的度量标准的最新值的要求

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

和 “时间机器” 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数据a)

+0

Mark绝对是对的,你不应该直接查询数据库,而是使用我们提供的Web服务API。如果API不能完全满足您的需求,那么请在用户邮件列表上发送邮件,我们将看到如何改进它。 – 2012-02-09 12:29:33