diff --git a/src/compare/compare.controller.js b/src/compare/compare.controller.js
index 0b70141..2f0a20e 100644
--- a/src/compare/compare.controller.js
+++ b/src/compare/compare.controller.js
@@ -34,4 +34,5 @@ function editController($scope, $http, sonarApi, sonarEndpoint) {
});
}
$scope.updateProjects();
+
}
diff --git a/src/issues/edit.html b/src/issues/edit.html
new file mode 100644
index 0000000..f29c501
--- /dev/null
+++ b/src/issues/edit.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
Passed
+ Quality Gate
+
+
+
+
+
+
Error
+ Quality Gate
+
+
+
+
+
+
Warning
+ Quality Gate
+
+
+
+
+
+
+
unknown
+ Quality Gate
+
+
+
+
+
+
+
{{vm.coverage||"unknown"}}
+ Code Coverage
+
+
+
+
{{vm.blocker||"unknown"}}
+ Blocker Issues
+
+
+
+
diff --git a/src/service.js b/src/service.js
index 0434a85..0fd44f2 100644
--- a/src/service.js
+++ b/src/service.js
@@ -13,10 +13,18 @@ function sonarApi($http, $q) {
function createApiUrlAllProjectsStatistics(sonarUrl) {
return sonarUrl + '/api/resources?metrics=ncloc,coverage';
}
+
+ function createApiUrlAllMyIssues(sonarUrl) {
+ return sonarUrl + '/api/issues/search?assignees=__me__';//--> nur zum Testen, eigentlich ist es __me__!
+ }
function createApiUrlMetrics(sonarUrl, projectname) {
return sonarUrl + '/api/measures/component?componentKey=' + projectname + '&metricKeys=open_issues,ncloc,public_documented_api_density,duplicated_lines_density,sqale_index';
}
+
+ function createApiUrlQuality(sonarUrl, projectname) {
+ return sonarUrl + '/api/resources?resource=' + projectname + '&metrics=coverage,blocker_violations,quality_gate_details';
+ }
function getProjectTime(projectBeginn, projectEnd) {
var beginn = new Date(projectBeginn);
@@ -24,13 +32,13 @@ function sonarApi($http, $q) {
var today = new Date();
var maxDays = workingDaysBetweenDates(beginn, end);
- var daysLeft = workingDaysBetweenDates(today, end)
+ var daysLeft = workingDaysBetweenDates(today, end);
return {
'maxDays': maxDays,
'daysLeft': daysLeft
};
-
+
}
function workingDaysBetweenDates(startDate, endDate) {
@@ -227,13 +235,43 @@ function sonarApi($http, $q) {
return generateArray(projects);
});
}
+
+ function getAllMyIssues(sonarUrl){
+ var apiUrl = createApiUrlAllMyIssues(sonarUrl);
+
+ return $http({
+ method: 'GET',
+ url: apiUrl,
+ headers: {
+ 'Accept': 'application/json'
+ }
+ }).then(function(response) {
+ return response.data.issues;
+ });
+ }
+
+ function getProjectquality(sonarUrl, project){
+ var apiUrl = createApiUrlQuality(sonarUrl, project);
+
+ return $http({
+ method: 'GET',
+ url: apiUrl,
+ headers: {
+ 'Accept': 'application/json'
+ }
+ }).then(function(response) {
+ return response.data[0];
+ });
+ }
return {
getProjects: getProjects,
getAllProjectsStatistics: getAllProjectsStatistics,
getChartData: getChartData,
getMetrics: getMetrics,
- getProjectTime: getProjectTime
+ getProjectTime: getProjectTime,
+ getAllMyIssues: getAllMyIssues,
+ getProjectquality: getProjectquality
};
}
diff --git a/src/sonar.js b/src/sonar.js
index 9cce32d..904691b 100644
--- a/src/sonar.js
+++ b/src/sonar.js
@@ -2,7 +2,7 @@
//app initialisation with dependencies
var sonarADFWidget = angular.module('adf.widget.sonar', ['adf.provider', 'chart.js', 'ui.bootstrap', 'ui.bootstrap.datepicker','angular-svg-round-progressbar'])
.constant("sonarEndpoint", {
- "url": "https://sonarqube.com"
+ "url": "https://ecosystem.cloudogu.com/sonar"//https://sonarqube.com"
}).constant("METRIC_NAMES", {"open_issues":"Open Issues","ncloc":"Lines of Code",
"public_documented_api_density": "Public documented API density","duplicated_lines_density": "Duplicated Lines (%)",
"sqale_index":"SQALE index", "coverage": "Coverage (%)", "tests": "Tests" })
@@ -111,6 +111,50 @@ var sonarADFWidget = angular.module('adf.widget.sonar', ['adf.provider', 'chart.
edit: {
templateUrl: '{widgetsPath}/sonar/src/project-progress/edit.html'
}
+ })
+ .widget('sonar-my-issues', {
+ title: 'Sonar: My Issues',
+ description: 'Displays all issues of yourself',
+ templateUrl: '{widgetsPath}/sonar/src/issues/view.html',
+ resolve: {
+ data: function(sonarApi, config, sonarEndpoint) {
+ if (config.apiUrl) {
+ return sonarApi.getAllMyIssues(config.apiUrl);
+ }
+ else if (sonarEndpoint.url){
+ return sonarApi.getAllMyIssues(sonarEndpoint.url);
+ }
+ return 'Please Setup the Widget';
+ }
+ },
+ category: 'SonarQube',
+ controller: 'sonarIssueCtrl',
+ controllerAs: 'vm',
+ edit: {
+ templateUrl: '{widgetsPath}/sonar/src/issues/edit.html'
+ }
+ })
+ .widget('sonar-projectquality', {
+ title: 'Sonar: Projectquality of a Project',
+ description: 'Displays Status of the Quality Gate, Code Coverage and Blocker Issues',
+ templateUrl: '{widgetsPath}/sonar/src/projectquality/view.html',
+ resolve: {
+ data: function(sonarApi, config, sonarEndpoint) {
+ if (config.apiUrl && config.project) {
+ return sonarApi.getProjectquality(config.apiUrl, config.project);
+ }
+ else if (sonarEndpoint.url && config.project){
+ return sonarApi.getProjectquality(sonarEndpoint.url, config.project);
+ }
+ return 'Please Setup the Widget';
+ }
+ },
+ category: 'SonarQube',
+ controller: 'qualityCtrl',
+ controllerAs: 'vm',
+ edit: {
+ templateUrl: '{widgetsPath}/sonar/src/projectquality/edit.html'
+ }
});
});