report-view.js
354 lines
| 10.4 KiB
| application/javascript
|
JavascriptLexer
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. | ||||
r0 | ||||
r84 | angular.module('appenlight.components.reportView', []) | |||
.component('reportView', { | ||||
templateUrl: 'components/views/report-view/report-view.html', | ||||
controller: ReportViewController | ||||
}); | ||||
ReportViewController.$inject = ['$window', '$location', '$state', '$uibModal', | ||||
r0 | '$cookies', 'reportGroupPropertyResource', 'reportGroupResource', | |||
r62 | 'logsNoIdResource', 'stateHolder']; | |||
r0 | ||||
r84 | function ReportViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) { | |||
r0 | var vm = this; | |||
vm.window = $window; | ||||
r71 | vm.stateHolder = stateHolder; | |||
vm.$state = $state; | ||||
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"; | ||||
}); | ||||
r62 | if (stateHolder.AeUser.id){ | |||
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(); | ||||
} | ||||