##// END OF EJS Templates
testing: stubs for travis and tox configs
testing: stubs for travis and tox configs

File last commit:

r112:998f0d14
r137:7b408943
Show More
report-view.js
354 lines | 10.4 KiB | application/javascript | JavascriptLexer
license: change the license to Apache 2.0
r112 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
project: initial commit
r0
components: reports componentized
r84 angular.module('appenlight.components.reportView', [])
.component('reportView', {
templateUrl: 'components/views/report-view/report-view.html',
controller: ReportViewController
});
ReportViewController.$inject = ['$window', '$location', '$state', '$uibModal',
project: initial commit
r0 '$cookies', 'reportGroupPropertyResource', 'reportGroupResource',
angular: load basic user info via ajax on first load
r62 'logsNoIdResource', 'stateHolder'];
project: initial commit
r0
components: reports componentized
r84 function ReportViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
project: initial commit
r0 var vm = this;
vm.window = $window;
angular: start transitioning to component approach
r71 vm.stateHolder = stateHolder;
vm.$state = $state;
project: initial commit
r0 vm.reportHistoryConfig = {
data: {
json: [],
xFormat: '%Y-%m-%dT%H:%M:%S'
},
color: {
pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%Y-%m-%d'
}
},
y: {
tick: {
count: 5,
format: d3.format('.2s')
}
}
},
subchart: {
show: true,
size: {
height: 20
}
},
size: {
height: 250
},
zoom: {
rescale: true
},
grid: {
x: {
show: true
},
y: {
show: true
}
},
tooltip: {
format: {
title: function (d) {
return '' + d;
},
value: function (v) {
return v
}
}
}
};
vm.mentionedPeople = [];
vm.reportHistoryData = {};
vm.textTraceback = true;
vm.rawTraceback = '';
vm.traceback = '';
vm.reportType = 'report';
vm.report = null;
vm.showLong = false;
vm.reportLogs = null;
vm.requestStats = null;
vm.comment = null;
vm.is_loading = {
report: true,
logs: true,
history: true
};
vm.searchMentionedPeople = function(term){
//vm.mentionedPeople = [];
var term = term.toLowerCase();
reportGroupPropertyResource.get({
groupId: vm.report.group_id,
key: 'assigned_users'
}, null,
function (data) {
var users = [];
_.each(data.assigned, function(u){
users.push({label: u.user_name});
});
_.each(data.unassigned, function(u){
users.push({label: u.user_name});
});
var result = _.filter(users, function(u){
return u.label.toLowerCase().indexOf(term) !== -1;
});
vm.mentionedPeople = result;
});
};
vm.searchTag = function (tag, value) {
console.log(tag, value);
if (vm.report.report_type === 3) {
$location.url($state.href('report.list_slow'));
}
else {
$location.url($state.href('report.list'));
}
$location.search(tag, value);
};
vm.tabs = {
slow_calls:false,
request_details:false,
logs:false,
comments:false,
affected_users:false
};
if ($cookies.selectedReportTab) {
vm.tabs[$cookies.selectedReportTab] = true;
}
else{
$cookies.selectedReportTab = 'request_details';
vm.tabs.request_details = true;
}
vm.fetchLogs = function () {
if (!vm.report.request_id){
return
}
vm.is_loading.logs = true;
logsNoIdResource.query({request_id: vm.report.request_id},
function (data) {
vm.is_loading.logs = false;
vm.reportLogs = data;
}, function () {
vm.is_loading.logs = false;
});
};
vm.addComment = function () {
reportGroupPropertyResource.save({
groupId: vm.report.group_id,
key: 'comments'
}, {body: vm.comment},
function (data) {
vm.report.comments.push(data);
});
vm.comment = '';
};
vm.fetchReport = function () {
vm.is_loading.report = true;
reportGroupResource.get($state.params, function (data) {
vm.is_loading.report = false;
if (data.request) {
try {
var to_sort = _.pairs(data.request);
data.request = _.object(_.sortBy(to_sort, function (i) {
return i[0]
}));
}
catch (err) {
}
}
vm.report = data;
if (vm.report.req_stats) {
vm.requestStats = [];
_.each(_.pairs(vm.report.req_stats['percentages']), function (p) {
vm.requestStats.push({
name: p[0],
value: vm.report.req_stats[p[0]].toFixed(3),
percent: p[1],
calls: vm.report.req_stats[p[0] + '_calls']
})
});
}
vm.traceback = data.traceback;
_.each(vm.traceback, function (frame) {
if (frame.line) {
vm.rawTraceback += 'File ' + frame.file + ' line ' + frame.line + ' in ' + frame.fn + ": \r\n";
}
vm.rawTraceback += ' ' + frame.cline + "\r\n";
});
angular: load basic user info via ajax on first load
r62 if (stateHolder.AeUser.id){
project: initial commit
r0 vm.fetchHistory();
}
vm.selectedTab($cookies.selectedReportTab);
}, function (response) {
console.log(response);
if (response.status == 403) {
var uid = response.headers('x-appenlight-uid');
if (!uid) {
window.location = '/register?came_from=' + encodeURIComponent(window.location);
}
}
vm.is_loading.report = false;
});
};
vm.selectedTab = function(tab_name){
$cookies.selectedReportTab = tab_name;
if (tab_name == 'logs' && vm.reportLogs === null) {
vm.fetchLogs();
}
};
vm.markFixed = function () {
reportGroupResource.update({
groupId: vm.report.group_id
}, {fixed: !vm.report.group.fixed},
function (data) {
vm.report.group.fixed = data.fixed;
});
};
vm.markPublic = function () {
reportGroupResource.update({
groupId: vm.report.group_id
}, {public: !vm.report.group.public},
function (data) {
vm.report.group.public = data.public;
});
};
vm.delete = function () {
reportGroupResource.delete({'groupId': vm.report.group_id},
function (data) {
$state.go('report.list');
})
};
vm.assignUsersModal = function (index) {
vm.opts = {
backdrop: 'static',
templateUrl: 'AssignReportCtrl.html',
controller: 'AssignReportCtrl as ctrl',
resolve: {
report: function () {
return vm.report;
}
}
};
var modalInstance = $uibModal.open(vm.opts);
modalInstance.result.then(function (report) {
}, function () {
console.info('Modal dismissed at: ' + new Date());
});
};
vm.fetchHistory = function () {
reportGroupPropertyResource.query({
groupId: vm.report.group_id,
key: 'history'
}, function (data) {
vm.reportHistoryData = {
json: data,
keys: {
x: 'x',
value: ["reports"]
},
names: {
reports: 'Reports history'
},
type: 'bar'
};
vm.is_loading.history = false;
});
};
vm.nextDetail = function () {
$state.go('report.view_detail', {
groupId: vm.report.group_id,
reportId: vm.report.group.next_report
});
};
vm.previousDetail = function () {
$state.go('report.view_detail', {
groupId: vm.report.group_id,
reportId: vm.report.group.previous_report
});
};
vm.runIntegration = function (integration_name) {
console.log(integration_name);
if (integration_name == 'bitbucket') {
var controller = 'BitbucketIntegrationCtrl as ctrl';
var template_url = 'templates/integrations/bitbucket.html';
}
else if (integration_name == 'github') {
var controller = 'GithubIntegrationCtrl as ctrl';
var template_url = 'templates/integrations/github.html';
}
else if (integration_name == 'jira') {
var controller = 'JiraIntegrationCtrl as ctrl';
var template_url = 'templates/integrations/jira.html';
}
else {
return false;
}
vm.opts = {
backdrop: 'static',
templateUrl: template_url,
controller: controller,
resolve: {
integrationName: function () {
return integration_name
},
report: function () {
return vm.report;
}
}
};
var modalInstance = $uibModal.open(vm.opts);
modalInstance.result.then(function (report) {
}, function () {
console.info('Modal dismissed at: ' + new Date());
});
};
// load report
vm.fetchReport();
}