This diff has been collapsed as it changes many lines, (7879 lines changed)
Show them
Hide them
|
|
@@
-2681,6
+2681,9
b" angular.module('appenlight.components', ["
|
|
2681
|
'appenlight.components.appenlightHeader',
|
|
2681
|
'appenlight.components.appenlightHeader',
|
|
2682
|
'appenlight.components.indexDashboardView',
|
|
2682
|
'appenlight.components.indexDashboardView',
|
|
2683
|
'appenlight.components.logsBrowserView',
|
|
2683
|
'appenlight.components.logsBrowserView',
|
|
|
|
|
2684
|
'appenlight.components.reportView',
|
|
|
|
|
2685
|
'appenlight.components.reportsBrowserView',
|
|
|
|
|
2686
|
'appenlight.components.reportsSlowBrowserView',
|
|
2684
|
'appenlight.components.eventBrowserView',
|
|
2687
|
'appenlight.components.eventBrowserView',
|
|
2685
|
'appenlight.components.userProfileView',
|
|
2688
|
'appenlight.components.userProfileView',
|
|
2686
|
'appenlight.components.userIdentitiesView',
|
|
2689
|
'appenlight.components.userIdentitiesView',
|
|
@@
-4609,1459
+4612,1574
b' function kickstartAE(initialUserData) {'
|
|
4609
|
);
|
|
4612
|
);
|
|
4610
|
|
|
4613
|
|
|
4611
|
|
|
4614
|
|
|
4612
|
$templateCache.put('components/views/settings-view/settings-view.html',
|
|
4615
|
$templateCache.put('components/views/report-view/report-view.html',
|
|
4613
|
"<div class=\"row\">\n" +
|
|
4616
|
"<script type=\"text/ng-template\" id=\"slow_call.html\">\n" +
|
|
4614
|
" <div class=\"col-sm-3\" id=\"menu\">\n" +
|
|
4617
|
" <table class=\"report-table\">\n" +
|
|
4615
|
" <div class=\"panel panel-default\">\n" +
|
|
4618
|
" <tr>\n" +
|
|
4616
|
" <div class=\"panel-heading\">Applications</div>\n" +
|
|
4619
|
" <td class=\"table-label\">Type</td>\n" +
|
|
4617
|
" <ul class=\"list-group\">\n" +
|
|
4620
|
" <td class=\"data\"><strong>{{call.type}}\n" +
|
|
4618
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.list\"><span class=\"fa fa-cog\"></span> List applications</a></li>\n" +
|
|
4621
|
" ({{call.subtype}})\n" +
|
|
4619
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.update({resourceId:'new'})\"><span class=\"fa fa-plus-circle\"></span> Create application</a></li>\n" +
|
|
4622
|
" </strong></td>\n" +
|
|
4620
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.purge_logs\"><span class=\"fa fa-trash-o\"></span> Purge logs</a></li>\n" +
|
|
4623
|
" </tr>\n" +
|
|
4621
|
" </ul>\n" +
|
|
4624
|
" <tr>\n" +
|
|
4622
|
" </div>\n" +
|
|
4625
|
" <td class=\"table-label\">Duration</td>\n" +
|
|
|
|
|
4626
|
" <td class=\"data\"><strong class=\"textColor_1\">{{call.duration}}</strong></td>\n" +
|
|
|
|
|
4627
|
" </tr>\n" +
|
|
|
|
|
4628
|
" <tr>\n" +
|
|
|
|
|
4629
|
" <td class=\"table-label\">Start Time</td>\n" +
|
|
|
|
|
4630
|
" <td class=\"data\">{{call.timestamp}}</td>\n" +
|
|
|
|
|
4631
|
" </tr>\n" +
|
|
|
|
|
4632
|
" <tr>\n" +
|
|
|
|
|
4633
|
" <td class=\"table-label\">Statement</td>\n" +
|
|
|
|
|
4634
|
" <td class=\"data\">\n" +
|
|
|
|
|
4635
|
" <pre class=\"word-wrap\">{{call.statement}}</pre>\n" +
|
|
|
|
|
4636
|
" </td>\n" +
|
|
|
|
|
4637
|
" </tr>\n" +
|
|
|
|
|
4638
|
" <tr ng-if=\"call.location\">\n" +
|
|
|
|
|
4639
|
" <td class=\"table-label\">Location</td>\n" +
|
|
|
|
|
4640
|
" <td class=\"data\">{{call.location}}</td>\n" +
|
|
|
|
|
4641
|
" </tr>\n" +
|
|
|
|
|
4642
|
" <tr>\n" +
|
|
|
|
|
4643
|
" <td class=\"table-label\">Parameters</td>\n" +
|
|
|
|
|
4644
|
" <td class=\"\">\n" +
|
|
|
|
|
4645
|
" <div class=\"var-listing\" human-format vars=\"call.parameters\"></div>\n" +
|
|
|
|
|
4646
|
" </td>\n" +
|
|
|
|
|
4647
|
" </tr>\n" +
|
|
|
|
|
4648
|
" </table>\n" +
|
|
4623
|
"\n" +
|
|
4649
|
"\n" +
|
|
|
|
|
4650
|
" <div ng-if=\"call.children.length > 0\" class=\"subcalls p-l-8\">\n" +
|
|
4624
|
"\n" +
|
|
4651
|
"\n" +
|
|
4625
|
" <div class=\"panel panel-default\">\n" +
|
|
4652
|
" <p><strong>\n" +
|
|
4626
|
" <div class=\"panel-heading\">Settings</div>\n" +
|
|
4653
|
" <small>Sub-calls</small>\n" +
|
|
4627
|
" <ul class=\"list-group\">\n" +
|
|
4654
|
" </strong></p>\n" +
|
|
4628
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.edit\"><span class=\"fa fa-user\"></span> Profile details</a></li>\n" +
|
|
|
|
|
4629
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.password\"><span class=\"fa fa-lock\"></span> Change Password</a></li>\n" +
|
|
|
|
|
4630
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.identities\"><span class=\"fa fa-link\"></span> External Identities</a></li>\n" +
|
|
|
|
|
4631
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.auth_tokens\"><span class=\"fa fa-unlock\"></span> Auth Tokens</a></li>\n" +
|
|
|
|
|
4632
|
" </ul>\n" +
|
|
|
|
|
4633
|
" </div>\n" +
|
|
|
|
|
4634
|
"\n" +
|
|
4655
|
"\n" +
|
|
4635
|
" <div class=\"panel panel-default\">\n" +
|
|
4656
|
" <div class=\"panel panel-default\">\n" +
|
|
4636
|
" <div class=\"panel-heading\">Notifications</div>\n" +
|
|
4657
|
" <div ng-repeat=\"call in call.children\" ng-include=\"'slow_call.html'\" class=\"panel-body\"/>\n" +
|
|
4637
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
4638
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.alert_channels.list\"><span class=\"fa fa-bullhorn\"></span> Alert channels</a></li>\n" +
|
|
|
|
|
4639
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.alert_channels.email\"><span class=\"fa fa-envelope\"></span> Add email channel</a></li>\n" +
|
|
|
|
|
4640
|
" </ul>\n" +
|
|
|
|
|
4641
|
" </div>\n" +
|
|
4658
|
" </div>\n" +
|
|
4642
|
" </div>\n" +
|
|
4659
|
" </div>\n" +
|
|
|
|
|
4660
|
" </div>\n" +
|
|
4643
|
"\n" +
|
|
4661
|
"\n" +
|
|
4644
|
" <div class=\"col-sm-9\" ui-view></div>\n" +
|
|
4662
|
"</script>\n" +
|
|
4645
|
"</div>\n"
|
|
|
|
|
4646
|
);
|
|
|
|
|
4647
|
|
|
|
|
|
4648
|
|
|
|
|
|
4649
|
$templateCache.put('components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
|
|
|
|
|
4650
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.email\"></ng-include>\n" +
|
|
|
|
|
4651
|
"\n" +
|
|
4663
|
"\n" +
|
|
4652
|
"<div ng-show=\"!$ctrl.loading.email\">\n" +
|
|
4664
|
"<script type=\"text/ng-template\" id=\"AssignReportCtrl.html\">\n" +
|
|
4653
|
"\n" +
|
|
4665
|
"\n" +
|
|
4654
|
" <div class=\"panel panel-default\">\n" +
|
|
4666
|
" <div class=\"modal-header\">\n" +
|
|
4655
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
4667
|
" <h3>Assign users to report</h3>\n" +
|
|
4656
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
4657
|
" <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>\n" +
|
|
|
|
|
4658
|
" <form class=\"form-horizontal\" name=\"$ctrl.channelForm\" ng-submit=\"$ctrl.createChannel()\">\n" +
|
|
|
|
|
4659
|
" <div class=\"form-group\" id=\"row-email\">\n" +
|
|
|
|
|
4660
|
" <data-form-errors errors=\"$ctrl.channelForm.ae_validation.email\"></data-form-errors>\n" +
|
|
|
|
|
4661
|
" <label id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4662
|
" Email Address\n" +
|
|
|
|
|
4663
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
4664
|
" </label>\n" +
|
|
|
|
|
4665
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4666
|
" <input class=\"form-control\" type=\"text\" ng-model=\"$ctrl.form.email\">\n" +
|
|
|
|
|
4667
|
" </div>\n" +
|
|
|
|
|
4668
|
" </div>\n" +
|
|
|
|
|
4669
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
4670
|
" <label for=\"submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4671
|
" </label>\n" +
|
|
|
|
|
4672
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4673
|
" <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Add email channel\">\n" +
|
|
|
|
|
4674
|
" </div>\n" +
|
|
|
|
|
4675
|
" </div>\n" +
|
|
|
|
|
4676
|
" </form>\n" +
|
|
|
|
|
4677
|
" </div>\n" +
|
|
|
|
|
4678
|
" </div>\n" +
|
|
4668
|
" </div>\n" +
|
|
4679
|
"</div>\n"
|
|
4669
|
" <div class=\"modal-body\">\n" +
|
|
4680
|
);
|
|
|
|
|
4681
|
|
|
|
|
|
4682
|
|
|
|
|
|
4683
|
$templateCache.put('components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
|
|
|
|
|
4684
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.channels || $ctrl.loading.applications\"></ng-include>\n" +
|
|
|
|
|
4685
|
"\n" +
|
|
4670
|
"\n" +
|
|
4686
|
"<div ng-if=\"!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions\">\n" +
|
|
4671
|
" <ng-include src=\"'templates/loader.html'\" ng-if=\"ctrl.loading\"></ng-include>\n" +
|
|
4687
|
"\n" +
|
|
4672
|
"\n" +
|
|
4688
|
" <div class=\"panel panel-default\">\n" +
|
|
4673
|
" <div class=\"row\" ng-if=\"!ctrl.loading\">\n" +
|
|
4689
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
4674
|
" <div class=\"col-sm-6\">\n" +
|
|
4690
|
" <div class=\"panel-body\">\n" +
|
|
4675
|
" <strong>Unassigned</strong>\n" +
|
|
4691
|
" <h1>Report alert rules</h1>\n" +
|
|
|
|
|
4692
|
" <p>\n" +
|
|
|
|
|
4693
|
" <a class=\"btn btn-info\" ng-click=\"$ctrl.addAction()\"><span class=\"fa fa-plus-circle\"></span> Add top-level rule</a>\n" +
|
|
|
|
|
4694
|
" </p>\n" +
|
|
|
|
|
4695
|
"\n" +
|
|
4676
|
"\n" +
|
|
4696
|
" <report-alert-action action=\"action\" rule-definitions=\"$ctrl.ruleDefinitions\"\n" +
|
|
4677
|
" <div class=\"user-assignment\" ng-repeat=\"user in ctrl.unAssignedUsers\"\n" +
|
|
4697
|
" possible-channels=\"$ctrl.alertChannels\"\n" +
|
|
4678
|
" ng-click=\"ctrl.reassignUser(user)\">\n" +
|
|
4698
|
" actions=\"$ctrl.alertActions\" applications=\"$ctrl.applications\"\n" +
|
|
4679
|
" <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
|
|
4699
|
" ng-repeat=\"action in $ctrl.alertActions | filter: {type:'report'}\"></report-alert-action>\n" +
|
|
4680
|
" <strong>{{user.user_name}}</strong><br/>\n" +
|
|
|
|
|
4681
|
" {{user.name}}\n" +
|
|
|
|
|
4682
|
" <div class=\"clear\"></div>\n" +
|
|
|
|
|
4683
|
" </div>\n" +
|
|
|
|
|
4684
|
" </div>\n" +
|
|
|
|
|
4685
|
"\n" +
|
|
|
|
|
4686
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
4687
|
" <strong>Assigned</strong>\n" +
|
|
4700
|
"\n" +
|
|
4688
|
"\n" +
|
|
|
|
|
4689
|
" <div class=\"user-assignment\" ng-repeat=\"user in ctrl.assignedUsers\" ng-click=\"ctrl.reassignUser(user)\">\n" +
|
|
|
|
|
4690
|
" <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
|
|
|
|
|
4691
|
" {{user.user_name}}<br/>\n" +
|
|
|
|
|
4692
|
" {{user.name}}\n" +
|
|
|
|
|
4693
|
" <div class=\"clear\"></div>\n" +
|
|
|
|
|
4694
|
" </div>\n" +
|
|
|
|
|
4695
|
" </div>\n" +
|
|
4701
|
" </div>\n" +
|
|
4696
|
" </div>\n" +
|
|
4702
|
" </div>\n" +
|
|
4697
|
" </div>\n" +
|
|
|
|
|
4698
|
" <div class=\"modal-footer\">\n" +
|
|
|
|
|
4699
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">OK</button>\n" +
|
|
|
|
|
4700
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
|
|
|
4701
|
" </div>\n" +
|
|
|
|
|
4702
|
"</script>\n" +
|
|
4703
|
"\n" +
|
|
4703
|
"\n" +
|
|
4704
|
" <div class=\"panel panel-default\">\n" +
|
|
4704
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading.report\"></ng-include>\n" +
|
|
4705
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
4706
|
" <h1>Alert channels</h1>\n" +
|
|
|
|
|
4707
|
"\n" +
|
|
4705
|
"\n" +
|
|
4708
|
" <p>Here you can configure your <em>alert channels</em>.</p>\n" +
|
|
4706
|
"<div ng-if=\"!$ctrl.is_loading.report && $ctrl.report === null\">\n" +
|
|
|
|
|
4707
|
" <strong>OOPS something went wrong :(</strong>\n" +
|
|
|
|
|
4708
|
"</div>\n" +
|
|
4709
|
"\n" +
|
|
4709
|
"\n" +
|
|
4710
|
" <p>An alert channel serves as means of delivery of notifications about important events that happen in your applications.</p>\n" +
|
|
4710
|
"<div ng-if=\"$ctrl.report !== null && !$ctrl.is_loading.report\">\n" +
|
|
4711
|
"\n" +
|
|
4711
|
"\n" +
|
|
4712
|
" <div class=\"alert alert-success\">You can add more integrations that support different alert channels via application management panel.</div>\n" +
|
|
4712
|
" <div ng-if=\"$ctrl.stateHolder.AeUser.id\" class=\"row\">\n" +
|
|
|
|
|
4713
|
" <div class=\"col-lg-12\">\n" +
|
|
|
|
|
4714
|
" <a onclick=\"window.history.back()\" class=\"btn btn-default\" ng-if=\"$ctrl.window.history.length > 2\"><span class=\"fa fa-arrow-circle-o-left\"></span>\n" +
|
|
|
|
|
4715
|
" Go back</a>\n" +
|
|
|
|
|
4716
|
" <a class=\"btn btn-default\" ng-click=\"$ctrl.assignUsersModal()\" ng-if=\"$ctrl.reportType == 'report'\"><span\n" +
|
|
|
|
|
4717
|
" class=\"fa fa-flag\"></span> Assign report\n" +
|
|
|
|
|
4718
|
" to user</a>\n" +
|
|
4713
|
"\n" +
|
|
4719
|
"\n" +
|
|
4714
|
" <table class=\"table table-striped\">\n" +
|
|
4720
|
" <a class=\"btn {{ $ctrl.report.group.fixed ? 'btn-success' : 'btn-default'}}\" ng-click=\"$ctrl.markFixed()\"\n" +
|
|
4715
|
" <tr ng-repeat=\"channel in $ctrl.alertChannels\" class=\"animate-repeat\">\n" +
|
|
4721
|
" ng-if=\"$ctrl.reportType == 'report'\">\n" +
|
|
4716
|
" <td><strong>{{ channel.channel_visible_value }}</strong></td>\n" +
|
|
4722
|
" <span class=\"fa fa-check\"></span> Mark fixed</a>\n" +
|
|
4717
|
" <td class=\"text-right\">\n" +
|
|
|
|
|
4718
|
" <span class=\"btn btn-default\" data-uib-tooltip=\"Channel is {{ channel.channel_validated? '' :'NOT' }} validated\" tooltip-append-to-body=\"true\"\n" +
|
|
|
|
|
4719
|
" ng-class=\"{dim:!channel.channel_validated}\">\n" +
|
|
|
|
|
4720
|
" <span class=\"fa\" ng-class=\"{'fa-check-circle':channel.channel_validated, 'fa-times-circle':!channel.channel_validated}\"></span>\n" +
|
|
|
|
|
4721
|
" </span>\n" +
|
|
|
|
|
4722
|
" <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.send_alerts ? 'OFF' : 'ON' }} alerting on this chanel\"\n" +
|
|
|
|
|
4723
|
" ng-click=\"$ctrl.updateChannel(channel,'send_alerts')\" ng-class=\"{dim:!channel.send_alerts}\" tooltip-append-to-body=\"true\">\n" +
|
|
|
|
|
4724
|
" <span class=\"fa fa-rss\"></span> Alerts\n" +
|
|
|
|
|
4725
|
" </a>\n" +
|
|
|
|
|
4726
|
" <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.daily_digest ? 'OFF' : 'ON' }} daily digests on this channel\"\n" +
|
|
|
|
|
4727
|
" ng-click=\"$ctrl.updateChannel(channel,'daily_digest')\" ng-class=\"{dim:!channel.daily_digest}\" tooltip-append-to-body=\"true\">\n" +
|
|
|
|
|
4728
|
" <span class=\"fa fa-envelope\"></span> Daily digests\n" +
|
|
|
|
|
4729
|
" </a>\n" +
|
|
|
|
|
4730
|
"\n" +
|
|
4723
|
"\n" +
|
|
4731
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
4724
|
" <span class=\"dropdown\" ng-if=\"$ctrl.report.application.integrations.length\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
4732
|
" <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove</a>\n" +
|
|
4725
|
" <a class=\"dropdown-toggle btn btn-default\" data-uib-dropdown-toggle>\n" +
|
|
4733
|
" <ul class=\"dropdown-menu\">\n" +
|
|
4726
|
" <span class=\"fa fa-send\"></span> Integrations\n" +
|
|
4734
|
" <li><a>No</a></li>\n" +
|
|
4727
|
" </a>\n" +
|
|
4735
|
" <li><a ng-click=\"$ctrl.removeChannel(channel)\">Yes</a></li>\n" +
|
|
4728
|
" <ul class=\"dropdown-menu\">\n" +
|
|
4736
|
" </ul>\n" +
|
|
4729
|
" <li ng-repeat=\"choice in $ctrl.report.application.integrations\">\n" +
|
|
4737
|
" </span>\n" +
|
|
4730
|
" <a ng-click=\"$ctrl.runIntegration(choice.name)\">{{choice.action}}</a>\n" +
|
|
|
|
|
4731
|
" </li>\n" +
|
|
|
|
|
4732
|
" </ul>\n" +
|
|
|
|
|
4733
|
" </span>\n" +
|
|
4738
|
"\n" +
|
|
4734
|
"\n" +
|
|
4739
|
" </td>\n" +
|
|
4735
|
" <a class=\"btn btn-default\" ng-click=\"$ctrl.markPublic()\">Make {{$ctrl.group.public ? 'private' : 'public'}}</a>\n" +
|
|
4740
|
" </tr>\n" +
|
|
|
|
|
4741
|
" </table>\n" +
|
|
|
|
|
4742
|
"\n" +
|
|
4736
|
"\n" +
|
|
4743
|
" </div>\n" +
|
|
4737
|
"<span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
4738
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Delete</a>\n" +
|
|
|
|
|
4739
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
4740
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
4741
|
" <li><a ng-click=\"$ctrl.delete()\">Yes</a></li>\n" +
|
|
|
|
|
4742
|
" </ul>\n" +
|
|
|
|
|
4743
|
"</span>\n" +
|
|
|
|
|
4744
|
" </div>\n" +
|
|
4744
|
" </div>\n" +
|
|
4745
|
" </div>\n" +
|
|
4745
|
"\n" +
|
|
4746
|
"\n" +
|
|
4746
|
"</div>\n"
|
|
4747
|
" <div class=\"row\">\n" +
|
|
4747
|
);
|
|
4748
|
" <div class=\"col-lg-4\">\n" +
|
|
4748
|
|
|
|
|
|
4749
|
|
|
|
|
|
4750
|
$templateCache.put('components/views/user-auth-tokens-view/user-auth-tokens-view.html',
|
|
|
|
|
4751
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.tokens\"></ng-include>\n" +
|
|
|
|
|
4752
|
"\n" +
|
|
4749
|
"\n" +
|
|
4753
|
"<div ng-show=\"!$ctrl.loading.tokens\">\n" +
|
|
4750
|
" <div class=\"panel panel-default m-t-1\">\n" +
|
|
|
|
|
4751
|
" <div class=\"panel-body\">\n" +
|
|
4754
|
"\n" +
|
|
4752
|
"\n" +
|
|
4755
|
" <div class=\"panel panel-default\">\n" +
|
|
4753
|
" <h3 class=\"m-t-0\">Report Information</h3>\n" +
|
|
4756
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
|
|
|
4757
|
"\n" +
|
|
4754
|
"\n" +
|
|
4758
|
" <div class=\"panel-body\">\n" +
|
|
4755
|
" <table class=\"report-table with-ellipsis\">\n" +
|
|
|
|
|
4756
|
" <tr>\n" +
|
|
|
|
|
4757
|
" <td class=\"table-label\">Occurences</td>\n" +
|
|
|
|
|
4758
|
" <td class=\"data\">{{$ctrl.report.group.occurences}}</td>\n" +
|
|
|
|
|
4759
|
" </tr>\n" +
|
|
|
|
|
4760
|
" <tr ng-if=\"$ctrl.report.http_status\">\n" +
|
|
|
|
|
4761
|
" <td class=\"table-label\">HTTP status</td>\n" +
|
|
|
|
|
4762
|
" <td class=\"data\">{{$ctrl.report.http_status}}</td>\n" +
|
|
|
|
|
4763
|
" </tr>\n" +
|
|
|
|
|
4764
|
" <tr ng-if=\"$ctrl.report.group.priority\">\n" +
|
|
|
|
|
4765
|
" <td class=\"table-label\">Priority</td>\n" +
|
|
|
|
|
4766
|
" <td class=\"data\">{{$ctrl.report.group.priority}}</td>\n" +
|
|
|
|
|
4767
|
" </tr>\n" +
|
|
|
|
|
4768
|
" <tr ng-if=\"$ctrl.report.group.public\">\n" +
|
|
|
|
|
4769
|
" <td class=\"table-label\">Public URL</td>\n" +
|
|
|
|
|
4770
|
" <td class=\"data\">\n" +
|
|
|
|
|
4771
|
" <form>\n" +
|
|
|
|
|
4772
|
" <textarea class=\"TextAreaField form-control\" id=\"public-url\" onclick=\"this.select()\">{{$ctrl.$state.href($ctrl.$state.current.name, $ctrl.$state.params, {absolute: true})}}</textarea>\n" +
|
|
|
|
|
4773
|
" </form>\n" +
|
|
|
|
|
4774
|
" </td>\n" +
|
|
|
|
|
4775
|
" </tr>\n" +
|
|
|
|
|
4776
|
" <tr data-uib-tooltip=\"{{$ctrl.report.url}}\">\n" +
|
|
|
|
|
4777
|
" <td class=\"table-label\">URL</td>\n" +
|
|
|
|
|
4778
|
" <td class=\"data ellipsis\"><a href=\"{{$ctrl.report.url}}\">{{$ctrl.report.url}}</a></td>\n" +
|
|
|
|
|
4779
|
" </tr>\n" +
|
|
4759
|
"\n" +
|
|
4780
|
"\n" +
|
|
4760
|
" <div class=\"alert alert-success\">You can use those tokens to authenticate yourself when performing various API calls</div>\n" +
|
|
4781
|
" <tr ng-if=\"$ctrl.report.ip\">\n" +
|
|
|
|
|
4782
|
" <td class=\"table-label\">Remote IP</td>\n" +
|
|
|
|
|
4783
|
" <td class=\"data\">{{$ctrl.report.ip}}</td>\n" +
|
|
|
|
|
4784
|
" </tr>\n" +
|
|
|
|
|
4785
|
" <tr ng-if=\"$ctrl.report.user_agent\" data-uib-tooltip=\"{{$ctrl.report.user_agent}}\">\n" +
|
|
|
|
|
4786
|
" <td class=\"table-label\">User Agent</td>\n" +
|
|
|
|
|
4787
|
" <td class=\"data ellipsis\">{{$ctrl.report.user_agent}}</td>\n" +
|
|
|
|
|
4788
|
" </tr>\n" +
|
|
|
|
|
4789
|
" <tr ng-if=\"$ctrl.report.message\">\n" +
|
|
|
|
|
4790
|
" <td class=\"table-label\">Message</td>\n" +
|
|
|
|
|
4791
|
" <td class=\"data\">{{$ctrl.report.message}}</td>\n" +
|
|
|
|
|
4792
|
" </tr>\n" +
|
|
|
|
|
4793
|
" <tr ng-if=\"$ctrl.report.duration > 0\">\n" +
|
|
|
|
|
4794
|
" <td class=\"table-label\">Duration</td>\n" +
|
|
|
|
|
4795
|
" <td class=\"data\">\n" +
|
|
|
|
|
4796
|
" <span>{{$ctrl.report.duration}}s</span>\n" +
|
|
|
|
|
4797
|
" </td>\n" +
|
|
|
|
|
4798
|
" </tr>\n" +
|
|
|
|
|
4799
|
" <tr>\n" +
|
|
|
|
|
4800
|
" <td class=\"table-label\">First occured</td>\n" +
|
|
|
|
|
4801
|
" <td class=\"data\">\n" +
|
|
|
|
|
4802
|
" <span uib-tooltip=\"{{$ctrl.report.group.first_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
4803
|
" time=\"{{$ctrl.report.group.first_timestamp}}\"/></span>\n" +
|
|
|
|
|
4804
|
" </td>\n" +
|
|
|
|
|
4805
|
" </tr>\n" +
|
|
|
|
|
4806
|
" <tr>\n" +
|
|
|
|
|
4807
|
" <td class=\"table-label\">Last occured</td>\n" +
|
|
|
|
|
4808
|
" <td class=\"data\">\n" +
|
|
|
|
|
4809
|
" <span uib-tooltip=\"{{$ctrl.report.group.last_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
4810
|
" time=\"{{$ctrl.report.group.last_timestamp}}\"/></span>\n" +
|
|
|
|
|
4811
|
" </td>\n" +
|
|
|
|
|
4812
|
" </tr>\n" +
|
|
|
|
|
4813
|
" </table>\n" +
|
|
4761
|
"\n" +
|
|
4814
|
"\n" +
|
|
4762
|
" <hr/>\n" +
|
|
4815
|
" <div ng-if=\"$ctrl.requestStats\">\n" +
|
|
|
|
|
4816
|
" <h3>Performance stats</h3>\n" +
|
|
4763
|
"\n" +
|
|
4817
|
"\n" +
|
|
4764
|
" <form method=\"post\" class=\"form-inline\" name=\"$ctrl.TokenForm\" ng-submit=\"$ctrl.addToken()\" novalidate>\n" +
|
|
4818
|
" <div class=\"perf_stats\">\n" +
|
|
4765
|
" <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.description\"></data-form-errors>\n" +
|
|
4819
|
" <span class=\"stat\" ng-repeat=\"stat in $ctrl.requestStats\"\n" +
|
|
4766
|
" <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.expires\"></data-form-errors>\n" +
|
|
4820
|
" ng-if=\"stat.calls > 0 || stat.value > 0\"><strong>\n" +
|
|
4767
|
" <div class=\"form-group\">\n" +
|
|
4821
|
" <span class=\"{{stat.name}} bar\" style=\"width:10px\"></span> {{stat.calls}}\n" +
|
|
4768
|
" <label>\n" +
|
|
4822
|
" <span ng-if=\"stat.name!='main'\"><small>{{stat.name}} calls</small></span>\n" +
|
|
4769
|
" Description\n" +
|
|
4823
|
" <span ng-if=\"stat.name=='main'\">\n" +
|
|
4770
|
" </label>\n" +
|
|
4824
|
" <span class=\"fa fa-question-circle\"\n" +
|
|
4771
|
" <input class=\"form-control\" name=\"description\" placeholder=\"Token description\" type=\"text\" ng-model=\"$ctrl.form.description\">\n" +
|
|
4825
|
" data-uib-tooltip=\"Execution time that didnt get assigned to other layers\"></span> Other</span>\n" +
|
|
4772
|
" </div>\n" +
|
|
4826
|
" </strong>\n" +
|
|
4773
|
" <div class=\"form-group\">\n" +
|
|
4827
|
" </span>\n" +
|
|
4774
|
" <label>\n" +
|
|
|
|
|
4775
|
" Expires\n" +
|
|
|
|
|
4776
|
" </label>\n" +
|
|
|
|
|
4777
|
" <select class=\"form-control\" ng-model=\"$ctrl.form.expires\" ng-options=\"i.key as i.label for i in $ctrl.expireOptions | objectToOrderedArray:'minutes'\">\n" +
|
|
|
|
|
4778
|
" <option value=\"\">Never</option>\n" +
|
|
|
|
|
4779
|
" </select>\n" +
|
|
|
|
|
4780
|
" </div>\n" +
|
|
|
|
|
4781
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
4782
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4783
|
" </label>\n" +
|
|
|
|
|
4784
|
" <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Create Token\">\n" +
|
|
|
|
|
4785
|
" </div>\n" +
|
|
|
|
|
4786
|
" </form>\n" +
|
|
|
|
|
4787
|
"\n" +
|
|
|
|
|
4788
|
" </div>\n" +
|
|
|
|
|
4789
|
"\n" +
|
|
|
|
|
4790
|
"\n" +
|
|
|
|
|
4791
|
" </div>\n" +
|
|
|
|
|
4792
|
"\n" +
|
|
|
|
|
4793
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
4794
|
" <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.tokens\" class=\"table table-striped\">\n" +
|
|
|
|
|
4795
|
" <caption>Your current tokens</caption>\n" +
|
|
|
|
|
4796
|
" <thead>\n" +
|
|
|
|
|
4797
|
" <tr>\n" +
|
|
|
|
|
4798
|
" <th st-sort=\"description\"><a>Description</a></th>\n" +
|
|
|
|
|
4799
|
" <th class=\"created\"><a>Created</a></th>\n" +
|
|
|
|
|
4800
|
" <th class=\"expires\"><a>Expires</a></th>\n" +
|
|
|
|
|
4801
|
" <th class=\"options\"></th>\n" +
|
|
|
|
|
4802
|
" </tr>\n" +
|
|
|
|
|
4803
|
" <tr>\n" +
|
|
|
|
|
4804
|
" <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
4805
|
" <th></th>\n" +
|
|
|
|
|
4806
|
" <th></th>\n" +
|
|
|
|
|
4807
|
" <th></th>\n" +
|
|
|
|
|
4808
|
" </tr>\n" +
|
|
|
|
|
4809
|
" </thead>\n" +
|
|
|
|
|
4810
|
" <tbody>\n" +
|
|
|
|
|
4811
|
"\n" +
|
|
|
|
|
4812
|
" <tr ng-repeat=\"token in displayedCollection\">\n" +
|
|
|
|
|
4813
|
" <td><p>{{token.description}}</p>\n" +
|
|
|
|
|
4814
|
" <pre ng-init=\"token.limit = 8\" ng-mouseover=\"token.limit = 99\" ng-mouseleave=\"token.limit = 8\">{{token.token| limitTo:token.limit}}...</pre>\n" +
|
|
|
|
|
4815
|
" </td>\n" +
|
|
|
|
|
4816
|
" <td><span data-uib-tooltip=\"{{token.creation_date}}\">{{token.creation_date | isoToRelativeTime}}</span></td>\n" +
|
|
|
|
|
4817
|
" <td><span ng-if=\"token.expires\" data-uib-tooltip=\"{{token.expires}}\">{{token.expires | isoToRelativeTime}}</span>\n" +
|
|
|
|
|
4818
|
" <span ng-if=\"!token.expires\">Never</span></td>\n" +
|
|
|
|
|
4819
|
" <td>\n" +
|
|
|
|
|
4820
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
4821
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
4822
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
4823
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
4824
|
" <li><a ng-click=\"$ctrl.removeToken(token)\">Yes</a></li>\n" +
|
|
|
|
|
4825
|
" </ul>\n" +
|
|
|
|
|
4826
|
" </span>\n" +
|
|
|
|
|
4827
|
" </td>\n" +
|
|
|
|
|
4828
|
" </tr>\n" +
|
|
|
|
|
4829
|
" </tbody>\n" +
|
|
|
|
|
4830
|
" </table>\n" +
|
|
|
|
|
4831
|
" </div>\n" +
|
|
|
|
|
4832
|
"\n" +
|
|
4828
|
"\n" +
|
|
4833
|
"</div>\n"
|
|
4829
|
" <div style=\"width: 100%; overflow:hidden\">\n" +
|
|
4834
|
);
|
|
4830
|
" <div class=\"{{stat.name}} bar\" style=\"width:{{stat.percent}}%; height: 25px\"\n" +
|
|
4835
|
|
|
4831
|
" ng-repeat=\"stat in $ctrl.requestStats\"\n" +
|
|
4836
|
|
|
4832
|
" data-uib-tooltip=\"{{stat.value}}s - Cumulative time spent in this request on all {{ stat.name }} calls\"></div>\n" +
|
|
4837
|
$templateCache.put('components/views/user-identities-view/user-identities-view.html',
|
|
4833
|
" <div class=\"row\">\n" +
|
|
4838
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.identities\"></ng-include>\n" +
|
|
4834
|
" <div class=\"col-xs-6 text-left\">\n" +
|
|
|
|
|
4835
|
" <small>0s</small>\n" +
|
|
|
|
|
4836
|
" </div>\n" +
|
|
|
|
|
4837
|
" <div class=\"col-xs-6 text-right\">\n" +
|
|
|
|
|
4838
|
" <small>{{$ctrl.report.duration.toFixed(3)}}s</small>\n" +
|
|
|
|
|
4839
|
" </div>\n" +
|
|
|
|
|
4840
|
" </div>\n" +
|
|
|
|
|
4841
|
" </div>\n" +
|
|
|
|
|
4842
|
" </div>\n" +
|
|
|
|
|
4843
|
" </div>\n" +
|
|
4839
|
"\n" +
|
|
4844
|
"\n" +
|
|
4840
|
"<div ng-show=\"!$ctrl.loading.identities\">\n" +
|
|
4845
|
" <h3>Tags</h3>\n" +
|
|
4841
|
"\n" +
|
|
4846
|
"\n" +
|
|
4842
|
" <div class=\"panel panel-default\">\n" +
|
|
4847
|
" <table class=\"report-table with-tags\">\n" +
|
|
4843
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
4848
|
" <tr ng-repeat=\"(tag, value) in $ctrl.report.tags\">\n" +
|
|
4844
|
" <div class=\"panel-body\">\n" +
|
|
4849
|
" <td class=\"table-label\" ng-switch=\"tag\"><!--\n" +
|
|
|
|
|
4850
|
" --><span ng-switch-when=\"user_name\">Username/UID</span><!--\n" +
|
|
|
|
|
4851
|
" --><span ng-switch-when=\"view_name\">View Name</span><!--\n" +
|
|
|
|
|
4852
|
" --><span ng-switch-when=\"server_name\">Server Name</span><!--\n" +
|
|
|
|
|
4853
|
" --><span ng-switch-default>{{ tag }}</span>\n" +
|
|
|
|
|
4854
|
" </td>\n" +
|
|
|
|
|
4855
|
" <td class=\"data\"><a ng-click=\"$ctrl.searchTag(tag, value)\">{{ value }}</td>\n" +
|
|
|
|
|
4856
|
" </tr>\n" +
|
|
|
|
|
4857
|
" </table>\n" +
|
|
4845
|
"\n" +
|
|
4858
|
"\n" +
|
|
4846
|
" <div class=\"col-sm-6\">\n" +
|
|
4859
|
" </div>\n" +
|
|
4847
|
" <p ng-show=\"$ctrl.identities.length === 0\">No external providers linked yet</p>\n" +
|
|
|
|
|
4848
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
4849
|
" <li ng-repeat=\"provider in $ctrl.identities\" class=\"animate-repeat list-group-item\">\n" +
|
|
|
|
|
4850
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
4851
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
4852
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
4853
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
4854
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
4855
|
" <li><a ng-click=\"$ctrl.removeProvider(provider)\">Yes</a></li>\n" +
|
|
|
|
|
4856
|
" </ul>\n" +
|
|
|
|
|
4857
|
" </span>\n" +
|
|
|
|
|
4858
|
" </div>\n" +
|
|
|
|
|
4859
|
" <em>@{{ provider.provider }}</em>: <strong>{{ provider.id }}</strong>\n" +
|
|
|
|
|
4860
|
" </li>\n" +
|
|
|
|
|
4861
|
" </ul>\n" +
|
|
|
|
|
4862
|
" </div>\n" +
|
|
|
|
|
4863
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
4864
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
4865
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
4866
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.google}}\" target=\"_self\">\n" +
|
|
|
|
|
4867
|
" <span class=\"fa fa-google-plus-square fa-2x\"></span> Connect with Google</a>\n" +
|
|
|
|
|
4868
|
" </li>\n" +
|
|
|
|
|
4869
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
4870
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.twitter}}\" target=\"_self\">\n" +
|
|
|
|
|
4871
|
" <span class=\"fa fa-twitter fa-2x\"></span> Connect with Twitter</a>\n" +
|
|
|
|
|
4872
|
" </li>\n" +
|
|
|
|
|
4873
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
4874
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.bitbucket}}\" target=\"_self\">\n" +
|
|
|
|
|
4875
|
" <span class=\"fa fa-bitbucket fa-2x\"></span> Connect with Bitbucket</a>\n" +
|
|
|
|
|
4876
|
" </li>\n" +
|
|
|
|
|
4877
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
4878
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.github}}\" target=\"_self\">\n" +
|
|
|
|
|
4879
|
" <span class=\"fa fa-github fa-2x\"></span> Connect with Github including private repo access</a>\n" +
|
|
|
|
|
4880
|
" </li>\n" +
|
|
|
|
|
4881
|
" </ul>\n" +
|
|
|
|
|
4882
|
" </div>\n" +
|
|
4860
|
" </div>\n" +
|
|
4883
|
" </div>\n" +
|
|
|
|
|
4884
|
" </div>\n" +
|
|
|
|
|
4885
|
"</div>\n"
|
|
|
|
|
4886
|
);
|
|
|
|
|
4887
|
|
|
|
|
|
4888
|
|
|
|
|
|
4889
|
$templateCache.put('components/views/user-password-view/user-password-view.html',
|
|
|
|
|
4890
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.password\"></ng-include>\n" +
|
|
|
|
|
4891
|
"\n" +
|
|
4861
|
"\n" +
|
|
4892
|
"<div ng-show=\"!$ctrl.loading.password\">\n" +
|
|
|
|
|
4893
|
"\n" +
|
|
4862
|
"\n" +
|
|
4894
|
" <div class=\"panel panel-default\">\n" +
|
|
4863
|
" </div>\n" +
|
|
4895
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
4864
|
" <div class=\"col-lg-8\">\n" +
|
|
4896
|
" <div class=\"panel-body\">\n" +
|
|
4865
|
" <div class=\"frames\">\n" +
|
|
|
|
|
4866
|
" <p class=\"text-center\">Report history</p>\n" +
|
|
4897
|
"\n" +
|
|
4867
|
"\n" +
|
|
4898
|
" <form class=\"form-horizontal\" name=\"$ctrl.passwordForm\" ng-submit=\"$ctrl.updatePassword()\">\n" +
|
|
4868
|
" <div class=\"panel\" ng-if=\"!$ctrl.is_loading.history\">\n" +
|
|
4899
|
" <div class=\"form-group\" id=\"row-old_password\">\n" +
|
|
4869
|
" <div class=\"panel-body\">\n" +
|
|
4900
|
" <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.old_password\"></data-form-errors>\n" +
|
|
4870
|
" <c3chart data-domid=\"report_history_chart\" data-data=\"$ctrl.reportHistoryData\" data-config=\"$ctrl.reportHistoryConfig\">\n" +
|
|
4901
|
" <label for=\"old_password\" id=\"label-old_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
4871
|
" </c3chart>\n" +
|
|
4902
|
" Old Password\n" +
|
|
|
|
|
4903
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
4904
|
" </label>\n" +
|
|
|
|
|
4905
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4906
|
" <input class=\"form-control\" id=\"old_password\" name=\"old_password\" type=\"password\" ng-model=\"$ctrl.form.old_password\">\n" +
|
|
|
|
|
4907
|
" </div>\n" +
|
|
4872
|
" </div>\n" +
|
|
4908
|
" </div>\n" +
|
|
4873
|
" </div>\n" +
|
|
4909
|
" <div class=\"form-group\" id=\"row-new_password\">\n" +
|
|
4874
|
"\n" +
|
|
4910
|
" <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password\"></data-form-errors>\n" +
|
|
4875
|
" <div class=\"row m-b-1\">\n" +
|
|
4911
|
" <label for=\"new_password\" id=\"label-new_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
4876
|
" <div class=\"col-sm-2 text-left\">\n" +
|
|
4912
|
" New Password\n" +
|
|
4877
|
" <a class=\"switch_detail btn btn-sm btn-default {{$ctrl.report.group.previous_report ? '' : 'disabled'}}\"\n" +
|
|
4913
|
" <span class=\"required\">*</span>\n" +
|
|
4878
|
" ng-click=\"$ctrl.previousDetail()\">\n" +
|
|
4914
|
" </label>\n" +
|
|
4879
|
" <span class=\"fa fa-arrow-left\"></span>\n" +
|
|
4915
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
4880
|
" Prev. detail</a>\n" +
|
|
4916
|
" <input class=\"form-control\" id=\"new_password\" name=\"new_password\" type=\"password\" ng-model=\"$ctrl.form.new_password\">\n" +
|
|
4881
|
"\n" +
|
|
4917
|
" </div>\n" +
|
|
4882
|
" </div>\n" +
|
|
4918
|
" </div>\n" +
|
|
4883
|
" <div class=\"col-sm-8 text-center\">\n" +
|
|
4919
|
" <div class=\"form-group\" id=\"row-new_password_confirm\">\n" +
|
|
4884
|
" <small>\n" +
|
|
4920
|
" <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password_confirm\"></data-form-errors>\n" +
|
|
4885
|
" <span uib-tooltip=\"{{$ctrl.report.start_time|isoToRelativeTime}}\" class=\"m-r-1\">\n" +
|
|
4921
|
" <label for=\"new_password_confirm\" id=\"label-new_password_confirm\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
4886
|
" {{$ctrl.report.start_time.replace('T', ' ')}} UTC</span>\n" +
|
|
4922
|
" Confirm Password\n" +
|
|
4887
|
" <span class=\"text-muted\">ID: {{$ctrl.report.request_id}}</span>\n" +
|
|
4923
|
" <span class=\"required\">*</span>\n" +
|
|
4888
|
" </small>\n" +
|
|
4924
|
" </label>\n" +
|
|
|
|
|
4925
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4926
|
" <input class=\"form-control\" id=\"new_password_confirm\" name=\"new_password_confirm\" type=\"password\" ng-model=\"$ctrl.form.new_password_confirm\">\n" +
|
|
|
|
|
4927
|
" </div>\n" +
|
|
4889
|
" </div>\n" +
|
|
4928
|
" </div>\n" +
|
|
4890
|
" <div class=\"col-sm-2 text-right\">\n" +
|
|
4929
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
4891
|
" <a class=\"switch_detail btn btn-sm btn-default {{$ctrl.report.group.next_report ? '' : 'disabled'}}\"\n" +
|
|
4930
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\"></label>\n" +
|
|
4892
|
" ng-click=\"$ctrl.nextDetail()\">\n" +
|
|
4931
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
4893
|
" Next detail <span class=\"fa fa-arrow-right\"></span></a>\n" +
|
|
4932
|
" <input class=\"form-control SubmitField btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Change Password\">\n" +
|
|
|
|
|
4933
|
" </div>\n" +
|
|
4894
|
" </div>\n" +
|
|
4934
|
" </div>\n" +
|
|
4895
|
" </div>\n" +
|
|
4935
|
" </form>\n" +
|
|
|
|
|
4936
|
"\n" +
|
|
4896
|
"\n" +
|
|
4937
|
" </div>\n" +
|
|
4897
|
" <h3 class=\"word-wrap\">{{$ctrl.report.error}}</h3>\n" +
|
|
4938
|
" </div>\n" +
|
|
|
|
|
4939
|
"</div>\n"
|
|
|
|
|
4940
|
);
|
|
|
|
|
4941
|
|
|
|
|
|
4942
|
|
|
|
|
|
4943
|
$templateCache.put('components/views/user-profile-view/user-profile-view.html',
|
|
|
|
|
4944
|
"<ui-view></ui-view><ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.profile\"></ng-include>\n" +
|
|
|
|
|
4945
|
"\n" +
|
|
4898
|
"\n" +
|
|
4946
|
"<div ng-show=\"!$ctrl.loading.profile\">\n" +
|
|
4899
|
" <div ng-if=\"$ctrl.report.traceback\">\n" +
|
|
4947
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
4948
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
|
|
|
4949
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
4950
|
" <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.updateProfile()\">\n" +
|
|
|
|
|
4951
|
" <div class=\"form-group\" id=\"row-email\">\n" +
|
|
|
|
|
4952
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
|
|
|
|
|
4953
|
" <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4954
|
" Email Address\n" +
|
|
|
|
|
4955
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
4956
|
" </label>\n" +
|
|
|
|
|
4957
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4958
|
" <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
|
|
|
|
|
4959
|
" </div>\n" +
|
|
|
|
|
4960
|
" </div>\n" +
|
|
|
|
|
4961
|
"\n" +
|
|
4900
|
"\n" +
|
|
4962
|
" <div class=\"form-group\" id=\"row-first_name\">\n" +
|
|
4901
|
" <h3><strong>Traceback</strong></h3>\n" +
|
|
4963
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
|
|
4902
|
"\n" +
|
|
4964
|
" <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
4903
|
" <div class=\"btn-group\">\n" +
|
|
4965
|
" First Name\n" +
|
|
4904
|
" <a ng-if=\"$ctrl.traceback.length-10 > 0 \" ng-click=\"$ctrl.showLong = !$ctrl.showLong\"\n" +
|
|
4966
|
" </label>\n" +
|
|
4905
|
" class=\"btn btn-default {{$ctrl.showLong ? 'active' : ''}}\">\n" +
|
|
4967
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
4906
|
" <span class=\"fa fa-align-left\"></span>\n" +
|
|
4968
|
" <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
|
|
4907
|
" <small>Show {{$ctrl.traceback.length-10}} remaining frames</small>\n" +
|
|
|
|
|
4908
|
" </a>\n" +
|
|
|
|
|
4909
|
"\n" +
|
|
|
|
|
4910
|
" <a class=\"btn btn-default {{$ctrl.showRaw ? 'active' : ''}}\" ng-click=\"$ctrl.showRaw = !$ctrl.showRaw\">\n" +
|
|
|
|
|
4911
|
" <span class=\"fa fa-list\"></span>\n" +
|
|
|
|
|
4912
|
" <small>Raw version</small>\n" +
|
|
|
|
|
4913
|
" </a>\n" +
|
|
4969
|
" </div>\n" +
|
|
4914
|
" </div>\n" +
|
|
4970
|
" </div>\n" +
|
|
4915
|
"\n" +
|
|
4971
|
" <div class=\"form-group\" id=\"row-last_name\">\n" +
|
|
4916
|
" <div ng-if=\"$ctrl.showRaw\" class=\"m-t-1\">\n" +
|
|
4972
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
|
|
4917
|
" <pre>{{$ctrl.rawTraceback}}</pre>\n" +
|
|
4973
|
" <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4974
|
" Last Name\n" +
|
|
|
|
|
4975
|
" </label>\n" +
|
|
|
|
|
4976
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4977
|
" <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
|
|
|
|
|
4978
|
" </div>\n" +
|
|
4918
|
" </div>\n" +
|
|
4979
|
" </div>\n" +
|
|
4919
|
" <div ng-if=\"!$ctrl.showRaw\" class=\"m-t-1\">\n" +
|
|
4980
|
" <div class=\"form-group\" id=\"row-company_name\">\n" +
|
|
|
|
|
4981
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_name\"></data-form-errors>\n" +
|
|
|
|
|
4982
|
" <label for=\"company_name\" id=\"label-company_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4983
|
" Company Name\n" +
|
|
|
|
|
4984
|
" </label>\n" +
|
|
|
|
|
4985
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4986
|
" <input class=\"form-control\" id=\"company_name\" name=\"company_name\" type=\"text\" ng-model=\"$ctrl.user.company_name\">\n" +
|
|
|
|
|
4987
|
" </div>\n" +
|
|
|
|
|
4988
|
" </div>\n" +
|
|
|
|
|
4989
|
" <div class=\"form-group\" id=\"row-company_address\">\n" +
|
|
|
|
|
4990
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_address\"></data-form-errors>\n" +
|
|
|
|
|
4991
|
" <label for=\"company_address\" id=\"label-company_address\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
4992
|
" Company Address\n" +
|
|
|
|
|
4993
|
" </label>\n" +
|
|
|
|
|
4994
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
4995
|
" <textarea class=\"form-control\" id=\"company_address\" name=\"company_address\" ng-model=\"$ctrl.user.company_address\"></textarea>\n" +
|
|
|
|
|
4996
|
" </div>\n" +
|
|
|
|
|
4997
|
" </div>\n" +
|
|
|
|
|
4998
|
" <div class=\"form-group\" id=\"row-zip_code\">\n" +
|
|
|
|
|
4999
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.zip_code\"></data-form-errors>\n" +
|
|
|
|
|
5000
|
" <label for=\"zip_code\" id=\"label-zip_code\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5001
|
" ZIP code\n" +
|
|
|
|
|
5002
|
" </label>\n" +
|
|
|
|
|
5003
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5004
|
" <input class=\"form-control\" id=\"zip_code\" name=\"zip_code\" type=\"text\" ng-model=\"$ctrl.user.zip_code\">\n" +
|
|
|
|
|
5005
|
" </div>\n" +
|
|
|
|
|
5006
|
" </div>\n" +
|
|
|
|
|
5007
|
" <div class=\"form-group\" id=\"row-city\">\n" +
|
|
|
|
|
5008
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.city\"></data-form-errors>\n" +
|
|
|
|
|
5009
|
" <label for=\"city\" id=\"label-city\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5010
|
" City\n" +
|
|
|
|
|
5011
|
" </label>\n" +
|
|
|
|
|
5012
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5013
|
" <input class=\"form-control\" id=\"city\" name=\"city\" type=\"text\" ng-model=\"$ctrl.user.city\">\n" +
|
|
|
|
|
5014
|
" </div>\n" +
|
|
|
|
|
5015
|
" </div>\n" +
|
|
|
|
|
5016
|
" <div class=\"form-group\" id=\"row-notifications\">\n" +
|
|
|
|
|
5017
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.notifications\"></data-form-errors>\n" +
|
|
|
|
|
5018
|
" <label for=\"notifications\" id=\"label-notifications\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5019
|
" Account notifications\n" +
|
|
|
|
|
5020
|
" </label>\n" +
|
|
|
|
|
5021
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5022
|
" <input checked class=\"form-control\" id=\"notifications\" name=\"notifications\" type=\"checkbox\" ng-model=\"$ctrl.user.notifications\">\n" +
|
|
|
|
|
5023
|
" </div>\n" +
|
|
|
|
|
5024
|
" </div>\n" +
|
|
|
|
|
5025
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
|
|
|
5026
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5027
|
" </label>\n" +
|
|
|
|
|
5028
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5029
|
" <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Update Account\">\n" +
|
|
|
|
|
5030
|
" </div>\n" +
|
|
|
|
|
5031
|
" </div>\n" +
|
|
|
|
|
5032
|
" </form>\n" +
|
|
|
|
|
5033
|
" </div>\n" +
|
|
|
|
|
5034
|
" </div>\n" +
|
|
|
|
|
5035
|
"</div>\n"
|
|
|
|
|
5036
|
);
|
|
|
|
|
5037
|
|
|
|
|
|
5038
|
|
|
|
|
|
5039
|
$templateCache.put('directives/permissions/permissions.html',
|
|
|
|
|
5040
|
"<div class=\"panel panel-default\">\n" +
|
|
|
|
|
5041
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5042
|
" <h3 class=\"panel-title\">Permissions</h3>\n" +
|
|
|
|
|
5043
|
" </div>\n" +
|
|
|
|
|
5044
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
5045
|
" <p>Here you can <strong>set permissions</strong> for others to access your app data.</p>\n" +
|
|
|
|
|
5046
|
"\n" +
|
|
4920
|
"\n" +
|
|
5047
|
" <p>For example you can let other staff member view or alter error reports.</p>\n" +
|
|
4921
|
" <div ng-repeat=\"frame in $ctrl.traceback\" class=\"frame {{$odd ? 'odd' : 'even'}}\"\n" +
|
|
|
|
|
4922
|
" ng-if=\"$index >= $ctrl.traceback.length-10 || $ctrl.traceback.length <= 10 || $ctrl.showLong\">\n" +
|
|
|
|
|
4923
|
" <div class=\"frameline\" ng-if=\"frame.line\">\n" +
|
|
|
|
|
4924
|
" <a class=\"inspect_vars\" ng-click=\"frame.showVars = !frame.showVars\" ng-if=\"frame.vars\">\n" +
|
|
|
|
|
4925
|
" <span class=\"fa fa-search dim btn btn-default\"\n" +
|
|
|
|
|
4926
|
" uib-tooltip=\"Show local vars\"> </span>\n" +
|
|
|
|
|
4927
|
" </a>\n" +
|
|
5048
|
"\n" +
|
|
4928
|
"\n" +
|
|
5049
|
" <div ng-if=\"permissions.possibleGroups.length > 0\">\n" +
|
|
4929
|
" <span class=\"no-vars\" ng-if=\"frame.vars.length == 0\"></span>\n" +
|
|
5050
|
" <h3>Group permissions</h3>\n" +
|
|
|
|
|
5051
|
"\n" +
|
|
4930
|
"\n" +
|
|
5052
|
" <ul class=\"list-group\">\n" +
|
|
4931
|
" <span ng-if=\"frame.file\">\n" +
|
|
5053
|
" <li ng-repeat=\"perm in permissions.currentPermissions.group\" class=\"animate-repeat list-group-item\">\n" +
|
|
4932
|
" <span class=\"mono\">File</span> <span class=\"file mono\">{{frame.file || 'Unknown file'}}</span>,\n" +
|
|
5054
|
" <strong>{{ perm.self.group_name }}</strong>\n" +
|
|
4933
|
" </span>\n" +
|
|
5055
|
" <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
|
|
4934
|
" <span ng-if=\"frame.module && !frame.file\">\n" +
|
|
5056
|
" <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
|
|
4935
|
" <span class=\"mono\">Module</span> <span class=\"file mono\">{{frame.module || 'Unknown module'}}</span>,\n" +
|
|
5057
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
|
|
4936
|
" </span>\n" +
|
|
5058
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
|
|
4937
|
" <span class=\"mono\">line</span> <span class=\"line mono\">{{frame.line || 'Unknown line'}}</span>\n" +
|
|
5059
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5060
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5061
|
" <li><a ng-click=\"permissions.removeGroupPermission(perm_name, perm)\">Yes</a></li>\n" +
|
|
|
|
|
5062
|
" </ul>\n" +
|
|
|
|
|
5063
|
" </span>\n" +
|
|
|
|
|
5064
|
" </div>\n" +
|
|
|
|
|
5065
|
" </li>\n" +
|
|
|
|
|
5066
|
" </ul>\n" +
|
|
|
|
|
5067
|
"\n" +
|
|
4938
|
"\n" +
|
|
5068
|
" <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setGroupPermission()\">\n" +
|
|
4939
|
" <span ng-if=\"frame.fn\"><span class=\"mono\">in</span> <strong\n" +
|
|
5069
|
" <div class=\"form-group\">\n" +
|
|
4940
|
" class=\"fn mono\">{{frame.fn || 'Unknown function'}}</strong></span>\n" +
|
|
5070
|
" <select class=\"form-control\" ng-model=\"permissions.form.selectedGroup\" ng-options=\"g.id as g.group_name for g in permissions.possibleGroups\"></select>\n" +
|
|
|
|
|
5071
|
" </div>\n" +
|
|
|
|
|
5072
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5073
|
" <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
|
|
|
|
|
5074
|
" <input type=\"checkbox\" ng-model=\"permissions.form.selectedGroupPermissions[permission]\"> {{ permission }}\n" +
|
|
|
|
|
5075
|
" </span>\n" +
|
|
|
|
|
5076
|
" </div>\n" +
|
|
|
|
|
5077
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5078
|
" <button class=\"btn btn-info\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
|
|
|
|
|
5079
|
" </div>\n" +
|
|
|
|
|
5080
|
" </form>\n" +
|
|
|
|
|
5081
|
"\n" +
|
|
4941
|
"\n" +
|
|
5082
|
" </div>\n" +
|
|
4942
|
" </div>\n" +
|
|
|
|
|
4943
|
" <div class=\"cline mono\" ng-if=\"frame.cline\">{{frame.cline || 'Unknown context'}}</div>\n" +
|
|
5083
|
"\n" +
|
|
4944
|
"\n" +
|
|
5084
|
" <h3>User permissions</h3>\n" +
|
|
4945
|
" <div class=\"vars\" ng-if=\"frame.showVars\">\n" +
|
|
5085
|
" <div>\n" +
|
|
4946
|
" <table class=\"var-listing small\">\n" +
|
|
5086
|
" <ul class=\"list-group\">\n" +
|
|
4947
|
" <tr ng-repeat=\"fvar in frame.vars track by $index\" class=\"frame {{$odd ? 'odd' : 'even'}}\">\n" +
|
|
5087
|
" <li ng-repeat=\"perm in permissions.currentPermissions.user\" class=\"animate-repeat list-group-item\">\n" +
|
|
4948
|
" <td class=\"var-label\">{{ fvar[0] }}</td>\n" +
|
|
5088
|
" <strong>{{ perm.self.user_name }}</strong>\n" +
|
|
4949
|
" <td>\n" +
|
|
5089
|
" <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
|
|
4950
|
" <span human-format vars=\"fvar[1]\"></span>\n" +
|
|
5090
|
" <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
|
|
4951
|
" </td>\n" +
|
|
5091
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
|
|
4952
|
" </tr>\n" +
|
|
5092
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
|
|
4953
|
" </table>\n" +
|
|
5093
|
" <ul class=\"dropdown-menu\">\n" +
|
|
4954
|
"\n" +
|
|
5094
|
" <li><a>No</a></li>\n" +
|
|
4955
|
" </div>\n" +
|
|
5095
|
" <li><a ng-click=\"permissions.removeUserPermission(perm_name,perm)\">Yes</a></li>\n" +
|
|
4956
|
" </div>\n" +
|
|
5096
|
" </ul>\n" +
|
|
|
|
|
5097
|
" </span>\n" +
|
|
|
|
|
5098
|
" </div>\n" +
|
|
4957
|
" </div>\n" +
|
|
5099
|
" </li>\n" +
|
|
|
|
|
5100
|
" </ul>\n" +
|
|
|
|
|
5101
|
" </div>\n" +
|
|
|
|
|
5102
|
" <div>\n" +
|
|
|
|
|
5103
|
" <p>First enter username or full email of person you want to give access to (the person needs to be <strong>already registered in AppEnlight</strong>)</p>\n" +
|
|
|
|
|
5104
|
"\n" +
|
|
4958
|
"\n" +
|
|
5105
|
" <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setUserPermission()\">\n" +
|
|
4959
|
"\n" +
|
|
5106
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5107
|
" <input type=\"text\" class=\"autocomplete form-control\" placeholder=\"Search for user/email\" ng-model=\"permissions.form.autocompleteUser\"\n" +
|
|
|
|
|
5108
|
" uib-typeahead=\"u.user for u in permissions.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"permissions.searchingUsers\" typeahead-wait-ms=\"250\"\n" +
|
|
|
|
|
5109
|
" typeahead-template-url=\"templates/directives/user_search_type_ahead.html\"\n" +
|
|
|
|
|
5110
|
" />\n" +
|
|
|
|
|
5111
|
" </div>\n" +
|
|
|
|
|
5112
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5113
|
" <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
|
|
|
|
|
5114
|
" <input type=\"checkbox\" ng-model=\"permissions.form.selectedUserPermissions[permission]\"> {{ permission }}\n" +
|
|
|
|
|
5115
|
" </span>\n" +
|
|
|
|
|
5116
|
" </div>\n" +
|
|
|
|
|
5117
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5118
|
" <button class=\"btn btn-info\" ng-disabled=\"!permissions.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
|
|
|
|
|
5119
|
" </div>\n" +
|
|
4960
|
" </div>\n" +
|
|
5120
|
" </form>\n" +
|
|
|
|
|
5121
|
" </div>\n" +
|
|
|
|
|
5122
|
" </div>\n" +
|
|
|
|
|
5123
|
"</div>\n"
|
|
|
|
|
5124
|
);
|
|
|
|
|
5125
|
|
|
|
|
|
5126
|
|
|
|
|
|
5127
|
$templateCache.put('directives/plugin_config/plugin_config.html',
|
|
|
|
|
5128
|
"<div ng-repeat=\"tmpl in plugin_ctrlr.inclusions track by $index\">\n" +
|
|
|
|
|
5129
|
" <div><strong>Plugin: {{tmpl.name}}</strong></div>\n" +
|
|
|
|
|
5130
|
" <ng-include src=\"tmpl.template\"></ng-include>\n" +
|
|
|
|
|
5131
|
" <hr/>\n" +
|
|
|
|
|
5132
|
"</div>\n"
|
|
|
|
|
5133
|
);
|
|
|
|
|
5134
|
|
|
|
|
|
5135
|
|
|
|
|
|
5136
|
$templateCache.put('directives/postprocess_action/postprocess_action.html',
|
|
|
|
|
5137
|
"<div class=\"panel panel-default action\">\n" +
|
|
|
|
|
5138
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5139
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
5140
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5141
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5142
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5143
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5144
|
" <li><a ng-click=\"ctrl.deleteAction(ctrl.action)\">Yes</a></li>\n" +
|
|
|
|
|
5145
|
" </ul>\n" +
|
|
|
|
|
5146
|
" </span>\n" +
|
|
|
|
|
5147
|
" </div>\n" +
|
|
|
|
|
5148
|
"\n" +
|
|
4961
|
"\n" +
|
|
5149
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5150
|
" <label>Action</label>\n" +
|
|
|
|
|
5151
|
"\n" +
|
|
4962
|
"\n" +
|
|
5152
|
" <div class=\"form-group\">\n" +
|
|
4963
|
" <uib-tabset>\n" +
|
|
5153
|
" <select class=\"form-control\" ng-model=\"ctrl.action.new_value\" ng-options=\"f[0] as f[1] for f in ctrl.possibleActions\" ng-change=\"ctrl.setDirty()\"></select>\n" +
|
|
4964
|
" <uib-tab select=\"$ctrl.selectedTab('slow_calls')\" active=\"$ctrl.tabs.slow_calls\">\n" +
|
|
5154
|
" </div>\n" +
|
|
4965
|
" <uib-tab-heading>\n" +
|
|
|
|
|
4966
|
" Slow Calls\n" +
|
|
|
|
|
4967
|
" </uib-tab-heading>\n" +
|
|
5155
|
"\n" +
|
|
4968
|
"\n" +
|
|
5156
|
" <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> Save changes</a>\n" +
|
|
4969
|
" <h3><strong>Slow Calls</strong></h3>\n" +
|
|
5157
|
"\n" +
|
|
4970
|
"\n" +
|
|
5158
|
" </div>\n" +
|
|
4971
|
" <div ng-if=\"$ctrl.report.slow_calls.length > 0\">\n" +
|
|
5159
|
" <hr/>\n" +
|
|
4972
|
" <div ng-repeat=\"call in $ctrl.report.slow_calls\" ng-include=\"'slow_call.html'\"></div>\n" +
|
|
5160
|
" <p>Meeting following criteria:</p>\n" +
|
|
4973
|
" </div>\n" +
|
|
5161
|
" <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
|
|
|
|
|
5162
|
" {{ctrl.rule}}\n" +
|
|
|
|
|
5163
|
" <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
|
|
|
|
|
5164
|
" </div>\n" +
|
|
|
|
|
5165
|
"</div>\n"
|
|
|
|
|
5166
|
);
|
|
|
|
|
5167
|
|
|
|
|
|
5168
|
|
|
|
|
|
5169
|
$templateCache.put('directives/report_alert_action/report_alert_action.html',
|
|
|
|
|
5170
|
"<div class=\"panel panel-default action\">\n" +
|
|
|
|
|
5171
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5172
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
5173
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5174
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5175
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5176
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5177
|
" <li><a ng-click=\"ctrl.deleteAction(ctrl.actions, ctrl.action)\">Yes</a></li>\n" +
|
|
|
|
|
5178
|
" </ul>\n" +
|
|
|
|
|
5179
|
" </span>\n" +
|
|
|
|
|
5180
|
" </div>\n" +
|
|
|
|
|
5181
|
"\n" +
|
|
4974
|
"\n" +
|
|
5182
|
" <div class=\"form-group\">\n" +
|
|
4975
|
" <div ng-if=\"$ctrl.report.slow_calls.length == 0\">\n" +
|
|
5183
|
" <label>Applies to</label>\n" +
|
|
4976
|
" No slow calls reported\n" +
|
|
5184
|
" <select class=\"form-control\" ng-model=\"ctrl.action.resource_id\" ng-options=\"f.resource_id as f.resource_name for f in ctrl.applications\" ng-change=\"ctrl.setDirty()\">\n" +
|
|
4977
|
" </div>\n" +
|
|
5185
|
" <option value=\"\">All Resources</option>\n" +
|
|
4978
|
"\n" +
|
|
5186
|
" </select>\n" +
|
|
4979
|
" </uib-tab>\n" +
|
|
5187
|
" </div>\n" +
|
|
4980
|
"\n" +
|
|
5188
|
" <div class=\"form-group\">\n" +
|
|
4981
|
"\n" +
|
|
5189
|
" <label>Notify</label>\n" +
|
|
4982
|
" <uib-tab select=\"$ctrl.selectedTab('request_details')\" active=\"$ctrl.tabs.request_details\">\n" +
|
|
5190
|
" <select class=\"form-control\" ng-model=\"ctrl.action.action\" ng-change=\"ctrl.setDirty()\" ng-options=\"f[0] as f[1] for f in ctrl.possibleNotifications\"></select>\n" +
|
|
4983
|
" <uib-tab-heading>\n" +
|
|
|
|
|
4984
|
" Request details\n" +
|
|
|
|
|
4985
|
" </uib-tab-heading>\n" +
|
|
|
|
|
4986
|
"\n" +
|
|
|
|
|
4987
|
" <h3><strong>Extra</strong></h3>\n" +
|
|
|
|
|
4988
|
" <div class=\"var-listing\" human-format vars=\"$ctrl.report.extra\"></div>\n" +
|
|
|
|
|
4989
|
" <h3><strong>Request details</strong></h3>\n" +
|
|
|
|
|
4990
|
" <div class=\"var-listing\" human-format vars=\"$ctrl.report.request\"></div>\n" +
|
|
|
|
|
4991
|
"\n" +
|
|
|
|
|
4992
|
" </uib-tab>\n" +
|
|
|
|
|
4993
|
"\n" +
|
|
|
|
|
4994
|
" <uib-tab select=\"$ctrl.selectedTab('logs')\" active=\"$ctrl.tabs.logs\">\n" +
|
|
|
|
|
4995
|
" <uib-tab-heading>\n" +
|
|
|
|
|
4996
|
" Logs\n" +
|
|
|
|
|
4997
|
" </uib-tab-heading>\n" +
|
|
|
|
|
4998
|
"\n" +
|
|
|
|
|
4999
|
" <div ng-if=\"$ctrl.is_loading.logs!=false\" class=\"text-center\">\n" +
|
|
|
|
|
5000
|
" <span class=\"fa fa-cog fa-spin fa-3x loader\"></span>\n" +
|
|
|
|
|
5001
|
" </div>\n" +
|
|
|
|
|
5002
|
" <p ng-if=\"$ctrl.reportLogs.length == 0\"> No logs found</p>\n" +
|
|
|
|
|
5003
|
"\n" +
|
|
|
|
|
5004
|
" <table class=\"table table-striped log-list\" ng-if=\"$ctrl.reportLogs.length > 0\">\n" +
|
|
|
|
|
5005
|
"\n" +
|
|
|
|
|
5006
|
" <caption>Logs</caption>\n" +
|
|
|
|
|
5007
|
" <thead>\n" +
|
|
|
|
|
5008
|
" <tr>\n" +
|
|
|
|
|
5009
|
" <th class=\"message\">Message</th>\n" +
|
|
|
|
|
5010
|
" <th class=\"when\">When</th>\n" +
|
|
|
|
|
5011
|
" </tr>\n" +
|
|
|
|
|
5012
|
" </thead>\n" +
|
|
|
|
|
5013
|
" <tbody>\n" +
|
|
|
|
|
5014
|
" <tr ng-repeat=\"log in $ctrl.reportLogs track by log.log_id\">\n" +
|
|
|
|
|
5015
|
" <td>\n" +
|
|
|
|
|
5016
|
" <a class=\"tag {{log.log_level|lowercase}}\">\n" +
|
|
|
|
|
5017
|
" <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
|
|
|
|
|
5018
|
" <a class=\"tag\">\n" +
|
|
|
|
|
5019
|
" <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
|
|
|
|
|
5020
|
" <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\">\n" +
|
|
|
|
|
5021
|
" <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
|
|
|
|
|
5022
|
" <div class=\"log\">\n" +
|
|
|
|
|
5023
|
" {{log.message}}\n" +
|
|
|
|
|
5024
|
" </div>\n" +
|
|
|
|
|
5025
|
" </td>\n" +
|
|
|
|
|
5026
|
" <td class=\"when\">\n" +
|
|
|
|
|
5027
|
" <a data-uib-tooltip=\"{{log.timestamp}}\">\n" +
|
|
|
|
|
5028
|
" <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
|
|
|
|
|
5029
|
" </a>\n" +
|
|
|
|
|
5030
|
" </td>\n" +
|
|
|
|
|
5031
|
" </tr>\n" +
|
|
|
|
|
5032
|
"\n" +
|
|
|
|
|
5033
|
" </tbody>\n" +
|
|
|
|
|
5034
|
" </table>\n" +
|
|
|
|
|
5035
|
"\n" +
|
|
|
|
|
5036
|
" </uib-tab>\n" +
|
|
|
|
|
5037
|
"\n" +
|
|
|
|
|
5038
|
"\n" +
|
|
|
|
|
5039
|
" <uib-tab select=\"$ctrl.selectedTab('comments')\" active=\"$ctrl.tabs.comments\">\n" +
|
|
|
|
|
5040
|
" <uib-tab-heading>\n" +
|
|
|
|
|
5041
|
" Comments\n" +
|
|
|
|
|
5042
|
" <span class=\"label label-info\">{{$ctrl.report.comments.length}}</span>\n" +
|
|
|
|
|
5043
|
"\n" +
|
|
|
|
|
5044
|
" </uib-tab-heading>\n" +
|
|
|
|
|
5045
|
"\n" +
|
|
|
|
|
5046
|
" <h3><strong>Comments</strong></h3>\n" +
|
|
|
|
|
5047
|
"\n" +
|
|
|
|
|
5048
|
" <p ng-if=\"$ctrl.report.comments.length == 0\">No comments yet - be first to add one!</p>\n" +
|
|
|
|
|
5049
|
"\n" +
|
|
|
|
|
5050
|
" <div class=\"comment\" ng-repeat=\"comment in $ctrl.report.comments\">\n" +
|
|
|
|
|
5051
|
" <p name=\"comment-{{comment.comment_id}}\"><span class=\"fa fa-comment\"></span>\n" +
|
|
|
|
|
5052
|
" <strong>{{comment.user_name}}</strong>\n" +
|
|
|
|
|
5053
|
" <iso-to-relative-time time=\"{{comment.created_timestamp}}\"/>\n" +
|
|
|
|
|
5054
|
" </p>\n" +
|
|
|
|
|
5055
|
" <p class=\"well\">{{comment.body}}</p>\n" +
|
|
|
|
|
5056
|
" </div>\n" +
|
|
|
|
|
5057
|
"\n" +
|
|
|
|
|
5058
|
" <form name=\"commentForm\" ng-submit=\"$ctrl.addComment()\">\n" +
|
|
|
|
|
5059
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5060
|
" <textarea type=\"text\" class=\"form-control\" id=\"$ctrl.commentForm\" ng-model=\"$ctrl.comment\" required\n" +
|
|
|
|
|
5061
|
" mentio mentio-search=\"$ctrl.searchMentionedPeople(term)\" mentio-items=\"$ctrl.mentionedPeople| filter:label:typedTerm\" class=\"form-control\"></textarea>\n" +
|
|
|
|
|
5062
|
"\n" +
|
|
|
|
|
5063
|
" </div>\n" +
|
|
|
|
|
5064
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5065
|
" <button class=\"btn btn-info\" ng-disabled=\"$ctrl.commentForm.$invalid\">Comment</button>\n" +
|
|
|
|
|
5066
|
" </div>\n" +
|
|
|
|
|
5067
|
" </form>\n" +
|
|
|
|
|
5068
|
"\n" +
|
|
|
|
|
5069
|
" <div ng-repeat=\"comment in $ctrl.report.comments\" class=\"{{$odd ? 'odd' : 'even'}}\" class=\"repeat-animate\">\n" +
|
|
|
|
|
5070
|
" </div>\n" +
|
|
|
|
|
5071
|
"\n" +
|
|
|
|
|
5072
|
" </uib-tab>\n" +
|
|
|
|
|
5073
|
"\n" +
|
|
|
|
|
5074
|
" <uib-tab select=\"$ctrl.selectedTab('affected_users')\" active=\"$ctrl.tabs.affected_users\">\n" +
|
|
|
|
|
5075
|
" <uib-tab-heading>\n" +
|
|
|
|
|
5076
|
" Affected users\n" +
|
|
|
|
|
5077
|
" <span class=\"label label-warning\">{{$ctrl.report.affected_users_count}}</span>\n" +
|
|
|
|
|
5078
|
"\n" +
|
|
|
|
|
5079
|
" </uib-tab-heading>\n" +
|
|
|
|
|
5080
|
"\n" +
|
|
|
|
|
5081
|
" <h3><strong>50 most affected users ID's by this issue:</strong></h3>\n" +
|
|
|
|
|
5082
|
" <ul class=\"affected-user-list\">\n" +
|
|
|
|
|
5083
|
" <li ng-repeat=\"user in $ctrl.report.top_affected_users\">\n" +
|
|
|
|
|
5084
|
" <strong>{{user.username}}</strong> <span class=\"badge\" uib-tooltip=\"occurences\">{{user.count}}</span>\n" +
|
|
|
|
|
5085
|
" </li>\n" +
|
|
|
|
|
5086
|
" </ul>\n" +
|
|
|
|
|
5087
|
"\n" +
|
|
|
|
|
5088
|
" </uib-tab>\n" +
|
|
|
|
|
5089
|
"\n" +
|
|
|
|
|
5090
|
" </uib-tabset>\n" +
|
|
5191
|
"\n" +
|
|
5091
|
"\n" +
|
|
5192
|
" <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> Save changes</a>\n" +
|
|
|
|
|
5193
|
"\n" +
|
|
5092
|
"\n" +
|
|
5194
|
" </div>\n" +
|
|
|
|
|
5195
|
" <div>\n" +
|
|
|
|
|
5196
|
" <p><strong>Channels:</strong></p>\n" +
|
|
|
|
|
5197
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5198
|
" <li class=\"list-group-item\" ng-repeat=\"channel in ctrl.action.channels\">\n" +
|
|
|
|
|
5199
|
" <strong>{{channel.channel_visible_value}}</strong>\n" +
|
|
|
|
|
5200
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
5201
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5202
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5203
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5204
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5205
|
" <li><a ng-click=\"ctrl.unBindChannel(channel)\">Yes</a></li>\n" +
|
|
|
|
|
5206
|
" </ul>\n" +
|
|
|
|
|
5207
|
" </span>\n" +
|
|
|
|
|
5208
|
" </div>\n" +
|
|
|
|
|
5209
|
" </li>\n" +
|
|
|
|
|
5210
|
" </ul>\n" +
|
|
|
|
|
5211
|
" <div class=\"form-group\" ng-if=\"ctrl.possibleChannels.length\">\n" +
|
|
|
|
|
5212
|
" <select class=\"form-control\" ng-model=\"ctrl.channelToBind\" ng-options=\"c as c.channel_visible_value for c in ctrl.possibleChannels |filter: c.supports_report_alerting\"></select>\n" +
|
|
|
|
|
5213
|
" <a class=\"btn btn-info\" ng-click=\"ctrl.bindChannel(channel, ctrl.action)\"><span class=\"fa fa-plus-circle\"></span> Add Channel</a>\n" +
|
|
|
|
|
5214
|
" </div>\n" +
|
|
|
|
|
5215
|
" <div class=\"alert alert-danger\" ng-if=\"!ctrl.possibleChannels.length\">\n" +
|
|
|
|
|
5216
|
" <span class=\"fa fa-exclamation-triangle \"></span>You need to create an alert channel before you can assign it to your rule.\n" +
|
|
|
|
|
5217
|
" </div>\n" +
|
|
5093
|
" </div>\n" +
|
|
5218
|
"\n" +
|
|
5094
|
"\n" +
|
|
5219
|
" </div>\n" +
|
|
5095
|
" </div>\n" +
|
|
5220
|
" <hr/>\n" +
|
|
|
|
|
5221
|
" <p>Meeting following criteria:</p>\n" +
|
|
|
|
|
5222
|
" <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
|
|
|
|
|
5223
|
" <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
|
|
|
|
|
5224
|
" </div>\n" +
|
|
5096
|
" </div>\n" +
|
|
5225
|
"</div>\n"
|
|
5097
|
"</div>\n"
|
|
5226
|
);
|
|
5098
|
);
|
|
5227
|
|
|
5099
|
|
|
5228
|
|
|
5100
|
|
|
5229
|
$templateCache.put('directives/rule_read_only/rule_read_only.html',
|
|
5101
|
$templateCache.put('components/views/reports-browser-view/reports-browser-view.html',
|
|
5230
|
"<div class=\"rule-read-only\">\n" +
|
|
5102
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading\"></ng-include>\n" +
|
|
5231
|
"\n" +
|
|
5103
|
"\n" +
|
|
5232
|
" <span class=\"form-group\">\n" +
|
|
5104
|
"<div ng-if=\"$ctrl.is_loading === false\">\n" +
|
|
5233
|
" {{rule_ctrlr.readOnlyPossibleFields[rule_ctrlr.rule.field]}}\n" +
|
|
|
|
|
5234
|
" </span>\n" +
|
|
|
|
|
5235
|
"\n" +
|
|
5105
|
"\n" +
|
|
5236
|
" <span ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\">\n" +
|
|
5106
|
" <p class=\"search-params\">\n" +
|
|
5237
|
" is {{rule_ctrlr.ruleDefinitions.allOps[rule_ctrlr.rule.op]}} {{rule_ctrlr.rule.value}}\n" +
|
|
5107
|
" <strong>Search params:</strong>\n" +
|
|
5238
|
" </span>\n" +
|
|
5108
|
" <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
|
|
|
|
|
5109
|
" <strong>{{tag.type}}</strong>\n" +
|
|
|
|
|
5110
|
" {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
|
|
5239
|
"\n" +
|
|
5111
|
"\n" +
|
|
5240
|
" <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
|
|
5112
|
" <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
|
|
5241
|
" <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
|
|
5113
|
" </span>\n" +
|
|
5242
|
" <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
|
|
5114
|
" </p>\n" +
|
|
5243
|
"\n" +
|
|
5115
|
"\n" +
|
|
5244
|
" <div class=\"panel panel-default\">\n" +
|
|
5116
|
" <form class=\"form\">\n" +
|
|
5245
|
" <div class=\"panel-body form-inline\">\n" +
|
|
5117
|
" <div class=\"typeahead-tags\">\n" +
|
|
5246
|
" <recursive>\n" +
|
|
5118
|
" <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter reports - filter by tags, exception, priority or other properties.\"\n" +
|
|
5247
|
" <rule-read-only rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"rule_ctrlr.parentObj\"></rule-read-only>\n" +
|
|
5119
|
" ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
|
|
5248
|
" </recursive>\n" +
|
|
5120
|
" uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
|
|
5249
|
" </div>\n" +
|
|
5121
|
" typeahead-min-length=\"1\" class=\"form-control\"\n" +
|
|
5250
|
" </div>\n" +
|
|
5122
|
" typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
|
|
5251
|
" </div>\n" +
|
|
5123
|
" </div>\n" +
|
|
|
|
|
5124
|
" </form>\n" +
|
|
5252
|
"\n" +
|
|
5125
|
"\n" +
|
|
5253
|
" </span>\n" +
|
|
|
|
|
5254
|
"</div>\n"
|
|
|
|
|
5255
|
);
|
|
|
|
|
5256
|
|
|
|
|
|
5257
|
|
|
|
|
|
5258
|
$templateCache.put('directives/rule/rule.html',
|
|
|
|
|
5259
|
"<div class=\"rule form-inline\">\n" +
|
|
|
|
|
5260
|
"\n" +
|
|
5126
|
"\n" +
|
|
5261
|
" <div class=\"form-group\">\n" +
|
|
5127
|
" <div class=\"well position-absolute increse-zindex\" ng-show=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\"\n" +
|
|
5262
|
" <select class=\"form-control\"\n" +
|
|
5128
|
" class=\"animate-show\">\n" +
|
|
5263
|
" ng-model=\"rule_ctrlr.rule.field\"\n" +
|
|
5129
|
" <uib-datepicker></uib-datepicker>\n" +
|
|
5264
|
" ng-change=\"rule_ctrlr.fieldChange()\"\n" +
|
|
|
|
|
5265
|
" ng-options=\"key as label for (key, label) in rule_ctrlr.ruleDefinitions.possibleFields\"></select>\n" +
|
|
|
|
|
5266
|
" </div>\n" +
|
|
5130
|
" </div>\n" +
|
|
5267
|
"\n" +
|
|
5131
|
"\n" +
|
|
5268
|
" <div ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\" class=\"form-group\">\n" +
|
|
5132
|
" </p>\n" +
|
|
5269
|
"\n" +
|
|
|
|
|
5270
|
" <select ng-model=\"rule_ctrlr.rule.op\" class=\"form-control\"\n" +
|
|
|
|
|
5271
|
" ng-change=\"rule_ctrlr.setDirty()\"\n" +
|
|
|
|
|
5272
|
" ng-options=\"op as rule_ctrlr.ruleDefinitions.allOps[op] for op in rule_ctrlr.ruleDefinitions.fieldOps[rule_ctrlr.rule.field]\">\n" +
|
|
|
|
|
5273
|
" </select>\n" +
|
|
|
|
|
5274
|
"\n" +
|
|
5133
|
"\n" +
|
|
5275
|
" <input type=\"text\" placeholder=\"Value\" ng-model=\"rule_ctrlr.rule.value\" ng-change=\"rule_ctrlr.setDirty()\" class=\"form-control\">\n" +
|
|
|
|
|
5276
|
"\n" +
|
|
5134
|
"\n" +
|
|
|
|
|
5135
|
" <div class=\"text-center\">\n" +
|
|
|
|
|
5136
|
" <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
|
|
|
|
|
5137
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
|
|
|
5138
|
" ng-change=\"$ctrl.paginationChange()\"\n" +
|
|
|
|
|
5139
|
" ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
|
|
5277
|
" </div>\n" +
|
|
5140
|
" </div>\n" +
|
|
5278
|
"\n" +
|
|
5141
|
"\n" +
|
|
5279
|
" <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
|
|
5142
|
" <div class=\"panel panel-default\">\n" +
|
|
5280
|
" <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
|
|
5143
|
" <!-- Default panel contents -->\n" +
|
|
5281
|
" <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
|
|
|
|
|
5282
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5283
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5284
|
" <recursive>\n" +
|
|
|
|
|
5285
|
" <rule rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"rule_ctrlr.rule\" parent-obj=\"rule_ctrlr.parentObj\"></rule>\n" +
|
|
|
|
|
5286
|
" </recursive>\n" +
|
|
|
|
|
5287
|
" </div>\n" +
|
|
|
|
|
5288
|
" </div>\n" +
|
|
|
|
|
5289
|
" </div>\n" +
|
|
|
|
|
5290
|
"\n" +
|
|
5144
|
"\n" +
|
|
5291
|
" <span ng-if=\"(rule_ctrlr.config.disable_subrules == false) == false\" class=\"btn btn-info\" ng-click=\"rule_ctrlr.add()\"><span class=\"fa fa-plus-circle\"></span> Add rule</span>\n" +
|
|
5145
|
" <table class=\"table table-striped report-list\" ng-show=\"!$ctrl.is_loading\">\n" +
|
|
|
|
|
5146
|
" <caption>Reports</caption>\n" +
|
|
|
|
|
5147
|
" <thead>\n" +
|
|
|
|
|
5148
|
" <tr>\n" +
|
|
|
|
|
5149
|
" <th class=\"c1 ordering occurences\">#</th>\n" +
|
|
|
|
|
5150
|
" <th class=\"c2 application\">Application</th>\n" +
|
|
|
|
|
5151
|
" <th class=\"c4 when\">When <input type=\"checkbox\" ng-model=\"$ctrl.notRelativeTime\"\n" +
|
|
|
|
|
5152
|
" ng-change=\"$ctrl.changeRelativeTime()\"\n" +
|
|
|
|
|
5153
|
" title=\"Tick to see UTC time instead relative\"></th>\n" +
|
|
|
|
|
5154
|
" <th class=\"c5 error_type\">Error</th>\n" +
|
|
|
|
|
5155
|
" </tr>\n" +
|
|
|
|
|
5156
|
" </thead>\n" +
|
|
|
|
|
5157
|
" <tbody>\n" +
|
|
|
|
|
5158
|
" <tr ng-repeat=\"report in $ctrl.reportsPage track by report.id\">\n" +
|
|
|
|
|
5159
|
" <td class=\"c1 occurences\">\n" +
|
|
|
|
|
5160
|
" <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
|
|
|
|
|
5161
|
" <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
|
|
|
|
|
5162
|
" {{report.group.occurences|numberToThousands}}\n" +
|
|
|
|
|
5163
|
" </span>\n" +
|
|
|
|
|
5164
|
" </td>\n" +
|
|
|
|
|
5165
|
" <td class=\"c2 application\">\n" +
|
|
|
|
|
5166
|
" <div class=\"app_name\">{{report.resource_name}}</div>\n" +
|
|
|
|
|
5167
|
" <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
|
|
|
|
|
5168
|
" <td class=\"c3 when\">\n" +
|
|
|
|
|
5169
|
" <span ng-show=\"!$ctrl.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
5170
|
" time=\"{{report.group.last_timestamp}}\"/></span>\n" +
|
|
|
|
|
5171
|
" </span>\n" +
|
|
|
|
|
5172
|
" <span ng-show=\"$ctrl.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
|
|
|
|
|
5173
|
" </td>\n" +
|
|
|
|
|
5174
|
" <td class=\"c4 report ellipsis\"><a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\" title=\"{{report.error}}\">{{report.error || 'Unknown Exception'}}</a> <br/>\n" +
|
|
|
|
|
5175
|
" <span class=\"url\">{{ report.tags.view_name || report.url_path}}</td>\n" +
|
|
|
|
|
5176
|
" </tr>\n" +
|
|
5292
|
"\n" +
|
|
5177
|
"\n" +
|
|
5293
|
" </span>\n" +
|
|
5178
|
" </tbody>\n" +
|
|
5294
|
" <div class=\"pull-right\" ng-if=\"rule_ctrlr.parentRule\">\n" +
|
|
5179
|
" </table>\n" +
|
|
5295
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
5180
|
" </div>\n" +
|
|
5296
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
5181
|
"\n" +
|
|
5297
|
" <ul class=\"dropdown-menu\">\n" +
|
|
5182
|
"\n" +
|
|
5298
|
" <li><a>No</a></li>\n" +
|
|
5183
|
" <div class=\"text-center\">\n" +
|
|
5299
|
" <li><a ng-click=\"rule_ctrlr.deleteRule(rule_ctrlr.parentRule, rule_ctrlr.rule)\">Yes</a></li>\n" +
|
|
5184
|
" <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
|
|
5300
|
" </ul>\n" +
|
|
5185
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
5301
|
" </span>\n" +
|
|
5186
|
" ng-change=\"$ctrl.paginationChange()\"\n" +
|
|
|
|
|
5187
|
" ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
|
|
5302
|
" </div>\n" +
|
|
5188
|
" </div>\n" +
|
|
|
|
|
5189
|
"\n" +
|
|
5303
|
"</div>\n"
|
|
5190
|
"</div>\n"
|
|
5304
|
);
|
|
5191
|
);
|
|
5305
|
|
|
5192
|
|
|
5306
|
|
|
5193
|
|
|
5307
|
$templateCache.put('templates/admin/applications/applications_list.html',
|
|
5194
|
$templateCache.put('components/views/reports-slow-browser-view/reports-slow-browser-view.html',
|
|
5308
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"applications.loading.applications\"></ng-include>\n" +
|
|
5195
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading\"></ng-include>\n" +
|
|
5309
|
"\n" +
|
|
5196
|
"\n" +
|
|
5310
|
"<div class=\"panel panel-default\" ng-if=\"!applications.loading.applications\">\n" +
|
|
5197
|
"<div ng-if=\"$ctrl.is_loading === false\">\n" +
|
|
5311
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5312
|
"\n" +
|
|
5198
|
"\n" +
|
|
5313
|
" Currently active applications: {{applications.applications.length}}\n" +
|
|
5199
|
" <p class=\"search-params\">\n" +
|
|
|
|
|
5200
|
" <strong>Search params:</strong>\n" +
|
|
|
|
|
5201
|
" <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
|
|
|
|
|
5202
|
" <strong>{{tag.type}}</strong>\n" +
|
|
|
|
|
5203
|
" {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
|
|
5314
|
"\n" +
|
|
5204
|
"\n" +
|
|
5315
|
" </div>\n" +
|
|
5205
|
" <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
|
|
|
|
|
5206
|
" </span>\n" +
|
|
|
|
|
5207
|
" </p>\n" +
|
|
5316
|
"\n" +
|
|
5208
|
"\n" +
|
|
5317
|
" <table st-table=\"displayedCollection\" st-safe-src=\"applications.applications\" class=\"table table-striped\">\n" +
|
|
5209
|
" <p>\n" +
|
|
5318
|
" <thead>\n" +
|
|
|
|
|
5319
|
" <tr>\n" +
|
|
|
|
|
5320
|
" <th st-sort=\"resource_name\"><a>Application name</a></th>\n" +
|
|
|
|
|
5321
|
" <th st-sort=\"owner_user_name\"><a>Owner User</a></th>\n" +
|
|
|
|
|
5322
|
" <th st-sort=\"owner_group_name\"><a>Owner Group</a></th>\n" +
|
|
|
|
|
5323
|
" <th class=\"options\"></th>\n" +
|
|
|
|
|
5324
|
" </tr>\n" +
|
|
|
|
|
5325
|
" <tr>\n" +
|
|
|
|
|
5326
|
" <th><input st-search=\"resource_name\" placeholder=\"search for application\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5327
|
" <th><input st-search=\"owner_user_name\" placeholder=\"search for user\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5328
|
" <th><input st-search=\"owner_group_name\" placeholder=\"search for group\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5329
|
" <th></th>\n" +
|
|
|
|
|
5330
|
" </tr>\n" +
|
|
|
|
|
5331
|
" </thead>\n" +
|
|
|
|
|
5332
|
" <tbody>\n" +
|
|
|
|
|
5333
|
"\n" +
|
|
5210
|
"\n" +
|
|
5334
|
" <tr ng-repeat=\"resource in displayedCollection track by resource.resource_id\">\n" +
|
|
5211
|
" <form class=\"form\">\n" +
|
|
5335
|
" <td> {{resource.resource_name}}</td>\n" +
|
|
5212
|
" <div class=\"typeahead-tags\">\n" +
|
|
5336
|
" <td>{{resource.owner_user_name}}</td>\n" +
|
|
5213
|
" <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter slowness reports - filter by tags, average response time, priority or other properties.\"\n" +
|
|
5337
|
" <td>{{resource.owner_group_name}}</td>\n" +
|
|
5214
|
" ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
|
|
5338
|
" <td>\n" +
|
|
5215
|
" uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
|
|
5339
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"applications.update({resourceId:resource.resource_id})\" data-toggle=\"tooltip\" title=\"Update application\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
5216
|
" typeahead-min-length=\"1\" class=\"form-control\"\n" +
|
|
5340
|
" </td>\n" +
|
|
5217
|
" typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
|
|
5341
|
" </tr>\n" +
|
|
5218
|
" </div>\n" +
|
|
5342
|
" <tfoot>\n" +
|
|
5219
|
" </form>\n" +
|
|
5343
|
" <tr>\n" +
|
|
|
|
|
5344
|
" <td colspan=\"4\" class=\"text-center\">\n" +
|
|
|
|
|
5345
|
" <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
|
|
|
|
|
5346
|
" </td>\n" +
|
|
|
|
|
5347
|
" </tr>\n" +
|
|
|
|
|
5348
|
" </tfoot>\n" +
|
|
|
|
|
5349
|
" </tbody>\n" +
|
|
|
|
|
5350
|
" </table>\n" +
|
|
|
|
|
5351
|
"\n" +
|
|
5220
|
"\n" +
|
|
5352
|
"</div>\n"
|
|
|
|
|
5353
|
);
|
|
|
|
|
5354
|
|
|
|
|
|
5355
|
|
|
|
|
|
5356
|
$templateCache.put('templates/admin/configs/edit.html',
|
|
|
|
|
5357
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"configs.loading.config\"></ng-include>\n" +
|
|
|
|
|
5358
|
"\n" +
|
|
5221
|
"\n" +
|
|
5359
|
"<div class=\"panel panel-default\" ng-show=\"!configs.loading.config\">\n" +
|
|
5222
|
" <div class=\"well position-absolute increse-zindex\" ng-show=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\"\n" +
|
|
5360
|
" <div class=\"panel-heading\">\n" +
|
|
5223
|
" class=\"animate-show\">\n" +
|
|
5361
|
" <h3 class=\"panel-title\">Basic Configuration</h3>\n" +
|
|
5224
|
" <uib-datepicker></uib-datepicker>\n" +
|
|
5362
|
" </div>\n" +
|
|
5225
|
" </div>\n" +
|
|
5363
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
5364
|
" <h2>Visual</h2>\n" +
|
|
|
|
|
5365
|
" <form class=\"form-horizontal\">\n" +
|
|
|
|
|
5366
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5367
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5368
|
" Footer HTML\n" +
|
|
|
|
|
5369
|
" </label>\n" +
|
|
|
|
|
5370
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5371
|
" <textarea class=\"form-control\" type=\"text\" ng-model=\"configs.configs.global.template_footer_html.value\" style=\"min-height: 150px\"></textarea>\n" +
|
|
|
|
|
5372
|
" </div>\n" +
|
|
|
|
|
5373
|
" </div>\n" +
|
|
|
|
|
5374
|
" </form>\n" +
|
|
|
|
|
5375
|
"\n" +
|
|
|
|
|
5376
|
" <h2>Functional</h2>\n" +
|
|
|
|
|
5377
|
"\n" +
|
|
5226
|
"\n" +
|
|
5378
|
" <form class=\"form-horizontal\">\n" +
|
|
5227
|
" </p>\n" +
|
|
5379
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5380
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5381
|
" Show user groups to non-admin users\n" +
|
|
|
|
|
5382
|
" </label>\n" +
|
|
|
|
|
5383
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5384
|
" <button type=\"button\" class=\"btn btn-default\" ng-model=\"configs.configs.global.list_groups_to_non_admins.value\" uib-btn-checkbox>\n" +
|
|
|
|
|
5385
|
" Enable\n" +
|
|
|
|
|
5386
|
" </button>\n" +
|
|
|
|
|
5387
|
" </div>\n" +
|
|
|
|
|
5388
|
" </div>\n" +
|
|
|
|
|
5389
|
" </form>\n" +
|
|
|
|
|
5390
|
"\n" +
|
|
5228
|
"\n" +
|
|
5391
|
" <h2>Global Rate Limiting</h2>\n" +
|
|
|
|
|
5392
|
"\n" +
|
|
5229
|
"\n" +
|
|
5393
|
" <form class=\"form-horizontal\">\n" +
|
|
5230
|
" <div class=\"text-center\">\n" +
|
|
5394
|
" <div class=\"form-group\">\n" +
|
|
5231
|
" <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
|
|
5395
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5232
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
5396
|
" Ignore reports per minute/per application\n" +
|
|
5233
|
" ng-change=\"$ctrl.paginationChange()\"\n" +
|
|
5397
|
" </label>\n" +
|
|
5234
|
" ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
|
|
5398
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5235
|
" </div>\n" +
|
|
5399
|
" <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_reports_rate_limit.value\" />\n" +
|
|
|
|
|
5400
|
" </div>\n" +
|
|
|
|
|
5401
|
" </div>\n" +
|
|
|
|
|
5402
|
"\n" +
|
|
5236
|
"\n" +
|
|
5403
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5404
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5405
|
" Ignore logs per minute/per application\n" +
|
|
|
|
|
5406
|
" </label>\n" +
|
|
|
|
|
5407
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5408
|
" <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_logs_rate_limit.value\" />\n" +
|
|
|
|
|
5409
|
" </div>\n" +
|
|
|
|
|
5410
|
" </div>\n" +
|
|
|
|
|
5411
|
"\n" +
|
|
5237
|
"\n" +
|
|
5412
|
" <div class=\"form-group\">\n" +
|
|
5238
|
" <div class=\"panel panel-default\">\n" +
|
|
5413
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5239
|
" <!-- Default panel contents -->\n" +
|
|
5414
|
" Ignore metrics per minute/per application\n" +
|
|
|
|
|
5415
|
" </label>\n" +
|
|
|
|
|
5416
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5417
|
" <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_metrics_rate_limit.value\" />\n" +
|
|
|
|
|
5418
|
" </div>\n" +
|
|
|
|
|
5419
|
" </div>\n" +
|
|
|
|
|
5420
|
"\n" +
|
|
5240
|
"\n" +
|
|
5421
|
" </form>\n" +
|
|
5241
|
" <table class=\"table table-striped report-list\" ng-show=\"!$ctrl.is_loading\">\n" +
|
|
|
|
|
5242
|
" <caption>Slow Request Reports</caption>\n" +
|
|
|
|
|
5243
|
" <thead>\n" +
|
|
|
|
|
5244
|
" <tr>\n" +
|
|
|
|
|
5245
|
" <td class=\"c1 ordering occurences\">#</td>\n" +
|
|
|
|
|
5246
|
" <td class=\"c2 average_duration\">Avg. duration</td>\n" +
|
|
|
|
|
5247
|
" <td class=\"c3 application\">Application</td>\n" +
|
|
|
|
|
5248
|
" <td class=\"c5 when\">When <input type=\"checkbox\" ng-model=\"$ctrl.notRelativeTime\"\n" +
|
|
|
|
|
5249
|
" ng-change=\"$ctrl.changeRelativeTime()\"\n" +
|
|
|
|
|
5250
|
" title=\"Tick to see UTC time instead relative\"></td>\n" +
|
|
|
|
|
5251
|
" <td class=\"c6 error_type\">Location</td>\n" +
|
|
|
|
|
5252
|
" </tr>\n" +
|
|
|
|
|
5253
|
" </thead>\n" +
|
|
|
|
|
5254
|
" <tbody>\n" +
|
|
|
|
|
5255
|
" <tr ng-repeat=\"report in $ctrl.reportsPage track by report.id\">\n" +
|
|
|
|
|
5256
|
" <td class=\"c1 occurences\">\n" +
|
|
|
|
|
5257
|
" <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
|
|
|
|
|
5258
|
" <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
|
|
|
|
|
5259
|
" {{report.group.occurences|numberToThousands}}\n" +
|
|
|
|
|
5260
|
" </span>\n" +
|
|
|
|
|
5261
|
" </td>\n" +
|
|
|
|
|
5262
|
" <td class=\"c2 average_duration\">{{report.group.average_duration.toFixed(3)}}s</td>\n" +
|
|
|
|
|
5263
|
" <td class=\"c3 application\">\n" +
|
|
|
|
|
5264
|
" <div class=\"app_name\">{{report.resource_name}}</div>\n" +
|
|
|
|
|
5265
|
" <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
|
|
|
|
|
5266
|
" <td class=\"c4 when\">\n" +
|
|
|
|
|
5267
|
" <span ng-show=\"!$ctrl.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
5268
|
" time=\"{{report.group.last_timestamp}}\"/></span>\n" +
|
|
|
|
|
5269
|
" </span>\n" +
|
|
|
|
|
5270
|
" <span ng-show=\"$ctrl.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
|
|
|
|
|
5271
|
" </td>\n" +
|
|
|
|
|
5272
|
" <td class=\"c5 report ellipsis\">\n" +
|
|
|
|
|
5273
|
" <a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\">{{ report.tags.view_name || report.url_path}} </span></a></td>\n" +
|
|
|
|
|
5274
|
" </td>\n" +
|
|
|
|
|
5275
|
" </tr>\n" +
|
|
5422
|
"\n" +
|
|
5276
|
"\n" +
|
|
5423
|
" <hr/>\n" +
|
|
5277
|
" </tbody>\n" +
|
|
|
|
|
5278
|
" </table>\n" +
|
|
5424
|
"\n" +
|
|
5279
|
"\n" +
|
|
5425
|
" <a class=\"btn btn-primary\" ng-click=\"configs.save()\">Save configuration</a>\n" +
|
|
|
|
|
5426
|
" </div>\n" +
|
|
5280
|
" </div>\n" +
|
|
5427
|
"\n" +
|
|
5281
|
"\n" +
|
|
5428
|
"</div>\n" +
|
|
5282
|
" <div class=\"text-center\">\n" +
|
|
5429
|
"\n" +
|
|
5283
|
" <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
|
|
5430
|
"\n" +
|
|
5284
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
5431
|
"<div class=\"panel panel-default\">\n" +
|
|
5285
|
" ng-change=\"$ctrl.paginationChange()\"\n" +
|
|
5432
|
" <div class=\"panel-heading\">\n" +
|
|
5286
|
" ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
|
|
5433
|
" <h3 class=\"panel-title\">Plugin Configuration</h3>\n" +
|
|
|
|
|
5434
|
" </div>\n" +
|
|
|
|
|
5435
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
5436
|
" <plugin-config section=\"'admin.config'\">\n" +
|
|
|
|
|
5437
|
" </plugin-config>\n" +
|
|
|
|
|
5438
|
" </div>\n" +
|
|
5287
|
" </div>\n" +
|
|
|
|
|
5288
|
"\n" +
|
|
5439
|
"</div>\n"
|
|
5289
|
"</div>\n"
|
|
5440
|
);
|
|
5290
|
);
|
|
5441
|
|
|
5291
|
|
|
5442
|
|
|
5292
|
|
|
5443
|
$templateCache.put('templates/admin/configs/parent_view.html',
|
|
5293
|
$templateCache.put('components/views/settings-view/settings-view.html',
|
|
5444
|
"<div ui-view></div>"
|
|
5294
|
"<div class=\"row\">\n" +
|
|
|
|
|
5295
|
" <div class=\"col-sm-3\" id=\"menu\">\n" +
|
|
|
|
|
5296
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5297
|
" <div class=\"panel-heading\">Applications</div>\n" +
|
|
|
|
|
5298
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5299
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.list\"><span class=\"fa fa-cog\"></span> List applications</a></li>\n" +
|
|
|
|
|
5300
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.update({resourceId:'new'})\"><span class=\"fa fa-plus-circle\"></span> Create application</a></li>\n" +
|
|
|
|
|
5301
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.purge_logs\"><span class=\"fa fa-trash-o\"></span> Purge logs</a></li>\n" +
|
|
|
|
|
5302
|
" </ul>\n" +
|
|
|
|
|
5303
|
" </div>\n" +
|
|
|
|
|
5304
|
"\n" +
|
|
|
|
|
5305
|
"\n" +
|
|
|
|
|
5306
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5307
|
" <div class=\"panel-heading\">Settings</div>\n" +
|
|
|
|
|
5308
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5309
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.edit\"><span class=\"fa fa-user\"></span> Profile details</a></li>\n" +
|
|
|
|
|
5310
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.password\"><span class=\"fa fa-lock\"></span> Change Password</a></li>\n" +
|
|
|
|
|
5311
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.identities\"><span class=\"fa fa-link\"></span> External Identities</a></li>\n" +
|
|
|
|
|
5312
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.auth_tokens\"><span class=\"fa fa-unlock\"></span> Auth Tokens</a></li>\n" +
|
|
|
|
|
5313
|
" </ul>\n" +
|
|
|
|
|
5314
|
" </div>\n" +
|
|
|
|
|
5315
|
"\n" +
|
|
|
|
|
5316
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5317
|
" <div class=\"panel-heading\">Notifications</div>\n" +
|
|
|
|
|
5318
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5319
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.alert_channels.list\"><span class=\"fa fa-bullhorn\"></span> Alert channels</a></li>\n" +
|
|
|
|
|
5320
|
" <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.alert_channels.email\"><span class=\"fa fa-envelope\"></span> Add email channel</a></li>\n" +
|
|
|
|
|
5321
|
" </ul>\n" +
|
|
|
|
|
5322
|
" </div>\n" +
|
|
|
|
|
5323
|
" </div>\n" +
|
|
|
|
|
5324
|
"\n" +
|
|
|
|
|
5325
|
" <div class=\"col-sm-9\" ui-view></div>\n" +
|
|
|
|
|
5326
|
"</div>\n"
|
|
5445
|
);
|
|
5327
|
);
|
|
5446
|
|
|
5328
|
|
|
5447
|
|
|
5329
|
|
|
5448
|
$templateCache.put('templates/admin/groups/groups_create.html',
|
|
5330
|
$templateCache.put('components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
|
|
5449
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"group.loading.group\"></ng-include>\n" +
|
|
5331
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.email\"></ng-include>\n" +
|
|
5450
|
"\n" +
|
|
5332
|
"\n" +
|
|
5451
|
"<div ng-show=\"!group.loading.group\">\n" +
|
|
5333
|
"<div ng-show=\"!$ctrl.loading.email\">\n" +
|
|
5452
|
"\n" +
|
|
5334
|
"\n" +
|
|
5453
|
" <div class=\"panel panel-default\">\n" +
|
|
5335
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5336
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
5454
|
" <div class=\"panel-body\">\n" +
|
|
5337
|
" <div class=\"panel-body\">\n" +
|
|
5455
|
" <form name=\"group.groupForm\" class=\"form-horizontal\" ng-submit=\"group.createGroup()\">\n" +
|
|
5338
|
" <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>\n" +
|
|
5456
|
" <div class=\"form-group\" id=\"row-group_name\">\n" +
|
|
5339
|
" <form class=\"form-horizontal\" name=\"$ctrl.channelForm\" ng-submit=\"$ctrl.createChannel()\">\n" +
|
|
5457
|
" <data-form-errors errors=\"group.groupForm.ae_validation.group_name\"></data-form-errors>\n" +
|
|
5340
|
" <div class=\"form-group\" id=\"row-email\">\n" +
|
|
5458
|
" <label for=\"group_name\" id=\"label-group_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5341
|
" <data-form-errors errors=\"$ctrl.channelForm.ae_validation.email\"></data-form-errors>\n" +
|
|
5459
|
" Group name\n" +
|
|
5342
|
" <label id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5460
|
" <span class=\"required\">*</span>\n" +
|
|
5343
|
" Email Address\n" +
|
|
5461
|
" </label>\n" +
|
|
|
|
|
5462
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5463
|
" <input class=\"form-control\" id=\"group_name\" name=\"group_name\" type=\"text\" ng-model=\"group.group.group_name\">\n" +
|
|
|
|
|
5464
|
" </div>\n" +
|
|
|
|
|
5465
|
" </div>\n" +
|
|
|
|
|
5466
|
"\n" +
|
|
|
|
|
5467
|
" <div class=\"form-group\" id=\"row-description\">\n" +
|
|
|
|
|
5468
|
" <data-form-errors errors=\"group.groupForm.ae_validation.description\"></data-form-errors>\n" +
|
|
|
|
|
5469
|
" <label for=\"description\" id=\"label-description\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5470
|
" Description\n" +
|
|
|
|
|
5471
|
" <span class=\"required\">*</span>\n" +
|
|
5344
|
" <span class=\"required\">*</span>\n" +
|
|
5472
|
" </label>\n" +
|
|
5345
|
" </label>\n" +
|
|
5473
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5346
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5474
|
" <input class=\"form-control\" id=\"description\" name=\"description\" type=\"text\" ng-model=\"group.group.description\">\n" +
|
|
5347
|
" <input class=\"form-control\" type=\"text\" ng-model=\"$ctrl.form.email\">\n" +
|
|
5475
|
" </div>\n" +
|
|
5348
|
" </div>\n" +
|
|
5476
|
" </div>\n" +
|
|
5349
|
" </div>\n" +
|
|
5477
|
"\n" +
|
|
5350
|
" <div class=\"form-group\">\n" +
|
|
5478
|
"\n" +
|
|
5351
|
" <label for=\"submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5479
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
|
|
|
5480
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5481
|
" </label>\n" +
|
|
5352
|
" </label>\n" +
|
|
5482
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5353
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5483
|
" <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.groupId ? 'Update' : 'Add'}} Group\">\n" +
|
|
5354
|
" <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Add email channel\">\n" +
|
|
5484
|
" </div>\n" +
|
|
5355
|
" </div>\n" +
|
|
5485
|
" </div>\n" +
|
|
5356
|
" </div>\n" +
|
|
5486
|
" </form>\n" +
|
|
5357
|
" </form>\n" +
|
|
5487
|
" </div>\n" +
|
|
5358
|
" </div>\n" +
|
|
5488
|
" </div>\n" +
|
|
5359
|
" </div>\n" +
|
|
|
|
|
5360
|
"</div>\n"
|
|
|
|
|
5361
|
);
|
|
|
|
|
5362
|
|
|
|
|
|
5363
|
|
|
|
|
|
5364
|
$templateCache.put('components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
|
|
|
|
|
5365
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.channels || $ctrl.loading.applications\"></ng-include>\n" +
|
|
5489
|
"\n" +
|
|
5366
|
"\n" +
|
|
|
|
|
5367
|
"<div ng-if=\"!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions\">\n" +
|
|
5490
|
"\n" +
|
|
5368
|
"\n" +
|
|
5491
|
" <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
|
|
5369
|
" <div class=\"panel panel-default\">\n" +
|
|
5492
|
" <div class=\"panel-heading\">\n" +
|
|
5370
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
5493
|
" <h3 class=\"panel-title\">Permissions summary</h3>\n" +
|
|
|
|
|
5494
|
" </div>\n" +
|
|
|
|
|
5495
|
" <div class=\"panel-body\">\n" +
|
|
5371
|
" <div class=\"panel-body\">\n" +
|
|
5496
|
" <h3>Direct application permissions</h3>\n" +
|
|
5372
|
" <h1>Report alert rules</h1>\n" +
|
|
|
|
|
5373
|
" <p>\n" +
|
|
|
|
|
5374
|
" <a class=\"btn btn-info\" ng-click=\"$ctrl.addAction()\"><span class=\"fa fa-plus-circle\"></span> Add top-level rule</a>\n" +
|
|
|
|
|
5375
|
" </p>\n" +
|
|
5497
|
"\n" +
|
|
5376
|
"\n" +
|
|
5498
|
" <ul class=\"list-group\">\n" +
|
|
5377
|
" <report-alert-action action=\"action\" rule-definitions=\"$ctrl.ruleDefinitions\"\n" +
|
|
5499
|
" <li ng-repeat=\"perm in group.resourcePermissions.group.application\" class=\"animate-repeat list-group-item\">\n" +
|
|
5378
|
" possible-channels=\"$ctrl.alertChannels\"\n" +
|
|
5500
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
5379
|
" actions=\"$ctrl.alertActions\" applications=\"$ctrl.applications\"\n" +
|
|
|
|
|
5380
|
" ng-repeat=\"action in $ctrl.alertActions | filter: {type:'report'}\"></report-alert-action>\n" +
|
|
5501
|
"\n" +
|
|
5381
|
"\n" +
|
|
5502
|
" <div class=\"pull-right\">\n" +
|
|
5382
|
" </div>\n" +
|
|
|
|
|
5383
|
" </div>\n" +
|
|
5503
|
"\n" +
|
|
5384
|
"\n" +
|
|
5504
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
5385
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5386
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
5387
|
" <h1>Alert channels</h1>\n" +
|
|
5505
|
"\n" +
|
|
5388
|
"\n" +
|
|
5506
|
" <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
|
|
5389
|
" <p>Here you can configure your <em>alert channels</em>.</p>\n" +
|
|
5507
|
" <span class=\"fa fa-cog\"></span>\n" +
|
|
|
|
|
5508
|
" </a>\n" +
|
|
|
|
|
5509
|
" </div>\n" +
|
|
|
|
|
5510
|
" </li>\n" +
|
|
|
|
|
5511
|
" </ul>\n" +
|
|
|
|
|
5512
|
"\n" +
|
|
5390
|
"\n" +
|
|
5513
|
" <h3>Direct dashboard permissions</h3>\n" +
|
|
5391
|
" <p>An alert channel serves as means of delivery of notifications about important events that happen in your applications.</p>\n" +
|
|
5514
|
"\n" +
|
|
5392
|
"\n" +
|
|
5515
|
" <ul class=\"list-group\">\n" +
|
|
5393
|
" <div class=\"alert alert-success\">You can add more integrations that support different alert channels via application management panel.</div>\n" +
|
|
5516
|
" <li ng-repeat=\"perm in group.resourcePermissions.group.dashboard\" class=\"animate-repeat list-group-item\">\n" +
|
|
|
|
|
5517
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
|
|
|
5518
|
"\n" +
|
|
5394
|
"\n" +
|
|
5519
|
" <div class=\"pull-right\">\n" +
|
|
5395
|
" <table class=\"table table-striped\">\n" +
|
|
5520
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
5396
|
" <tr ng-repeat=\"channel in $ctrl.alertChannels\" class=\"animate-repeat\">\n" +
|
|
5521
|
"\n" +
|
|
5397
|
" <td><strong>{{ channel.channel_visible_value }}</strong></td>\n" +
|
|
5522
|
" <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
|
|
5398
|
" <td class=\"text-right\">\n" +
|
|
5523
|
" <span class=\"fa fa-cog\"></span>\n" +
|
|
5399
|
" <span class=\"btn btn-default\" data-uib-tooltip=\"Channel is {{ channel.channel_validated? '' :'NOT' }} validated\" tooltip-append-to-body=\"true\"\n" +
|
|
|
|
|
5400
|
" ng-class=\"{dim:!channel.channel_validated}\">\n" +
|
|
|
|
|
5401
|
" <span class=\"fa\" ng-class=\"{'fa-check-circle':channel.channel_validated, 'fa-times-circle':!channel.channel_validated}\"></span>\n" +
|
|
|
|
|
5402
|
" </span>\n" +
|
|
|
|
|
5403
|
" <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.send_alerts ? 'OFF' : 'ON' }} alerting on this chanel\"\n" +
|
|
|
|
|
5404
|
" ng-click=\"$ctrl.updateChannel(channel,'send_alerts')\" ng-class=\"{dim:!channel.send_alerts}\" tooltip-append-to-body=\"true\">\n" +
|
|
|
|
|
5405
|
" <span class=\"fa fa-rss\"></span> Alerts\n" +
|
|
|
|
|
5406
|
" </a>\n" +
|
|
|
|
|
5407
|
" <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.daily_digest ? 'OFF' : 'ON' }} daily digests on this channel\"\n" +
|
|
|
|
|
5408
|
" ng-click=\"$ctrl.updateChannel(channel,'daily_digest')\" ng-class=\"{dim:!channel.daily_digest}\" tooltip-append-to-body=\"true\">\n" +
|
|
|
|
|
5409
|
" <span class=\"fa fa-envelope\"></span> Daily digests\n" +
|
|
5524
|
" </a>\n" +
|
|
5410
|
" </a>\n" +
|
|
5525
|
" </div>\n" +
|
|
|
|
|
5526
|
" </li>\n" +
|
|
|
|
|
5527
|
" </ul>\n" +
|
|
|
|
|
5528
|
"\n" +
|
|
5411
|
"\n" +
|
|
5529
|
" </div>\n" +
|
|
5412
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
5413
|
" <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove</a>\n" +
|
|
|
|
|
5414
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5415
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5416
|
" <li><a ng-click=\"$ctrl.removeChannel(channel)\">Yes</a></li>\n" +
|
|
|
|
|
5417
|
" </ul>\n" +
|
|
|
|
|
5418
|
" </span>\n" +
|
|
|
|
|
5419
|
"\n" +
|
|
|
|
|
5420
|
" </td>\n" +
|
|
|
|
|
5421
|
" </tr>\n" +
|
|
|
|
|
5422
|
" </table>\n" +
|
|
5530
|
"\n" +
|
|
5423
|
"\n" +
|
|
|
|
|
5424
|
" </div>\n" +
|
|
5531
|
" </div>\n" +
|
|
5425
|
" </div>\n" +
|
|
5532
|
"\n" +
|
|
5426
|
"\n" +
|
|
|
|
|
5427
|
"</div>\n"
|
|
|
|
|
5428
|
);
|
|
|
|
|
5429
|
|
|
|
|
|
5430
|
|
|
|
|
|
5431
|
$templateCache.put('components/views/user-auth-tokens-view/user-auth-tokens-view.html',
|
|
|
|
|
5432
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.tokens\"></ng-include>\n" +
|
|
|
|
|
5433
|
"\n" +
|
|
|
|
|
5434
|
"<div ng-show=\"!$ctrl.loading.tokens\">\n" +
|
|
|
|
|
5435
|
"\n" +
|
|
|
|
|
5436
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5437
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
5533
|
"\n" +
|
|
5438
|
"\n" +
|
|
5534
|
" <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
|
|
|
|
|
5535
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5536
|
" <h3 class=\"panel-title\">User list</h3>\n" +
|
|
|
|
|
5537
|
" </div>\n" +
|
|
|
|
|
5538
|
" <div class=\"panel-body\">\n" +
|
|
5439
|
" <div class=\"panel-body\">\n" +
|
|
5539
|
"\n" +
|
|
5440
|
"\n" +
|
|
5540
|
" <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"group.addUser()\">\n" +
|
|
5441
|
" <div class=\"alert alert-success\">You can use those tokens to authenticate yourself when performing various API calls</div>\n" +
|
|
|
|
|
5442
|
"\n" +
|
|
|
|
|
5443
|
" <hr/>\n" +
|
|
|
|
|
5444
|
"\n" +
|
|
|
|
|
5445
|
" <form method=\"post\" class=\"form-inline\" name=\"$ctrl.TokenForm\" ng-submit=\"$ctrl.addToken()\" novalidate>\n" +
|
|
|
|
|
5446
|
" <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.description\"></data-form-errors>\n" +
|
|
|
|
|
5447
|
" <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.expires\"></data-form-errors>\n" +
|
|
5541
|
" <div class=\"form-group\">\n" +
|
|
5448
|
" <div class=\"form-group\">\n" +
|
|
5542
|
" <input placeholder=\"Username or email\" type=\"text\" class=\"autocomplete form-control\" ng-model=\"group.form.autocompleteUser\" uib-typeahead=\"u for u in group.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"searchingUsers\" typeahead-wait-ms=\"250\"/>\n" +
|
|
5449
|
" <label>\n" +
|
|
|
|
|
5450
|
" Description\n" +
|
|
|
|
|
5451
|
" </label>\n" +
|
|
|
|
|
5452
|
" <input class=\"form-control\" name=\"description\" placeholder=\"Token description\" type=\"text\" ng-model=\"$ctrl.form.description\">\n" +
|
|
5543
|
" </div>\n" +
|
|
5453
|
" </div>\n" +
|
|
5544
|
" <div class=\"form-group\">\n" +
|
|
5454
|
" <div class=\"form-group\">\n" +
|
|
5545
|
" <button class=\"btn btn-info\" ng-disabled=\"!group.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Add user</button>\n" +
|
|
5455
|
" <label>\n" +
|
|
|
|
|
5456
|
" Expires\n" +
|
|
|
|
|
5457
|
" </label>\n" +
|
|
|
|
|
5458
|
" <select class=\"form-control\" ng-model=\"$ctrl.form.expires\" ng-options=\"i.key as i.label for i in $ctrl.expireOptions | objectToOrderedArray:'minutes'\">\n" +
|
|
|
|
|
5459
|
" <option value=\"\">Never</option>\n" +
|
|
|
|
|
5460
|
" </select>\n" +
|
|
|
|
|
5461
|
" </div>\n" +
|
|
|
|
|
5462
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5463
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5464
|
" </label>\n" +
|
|
|
|
|
5465
|
" <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Create Token\">\n" +
|
|
5546
|
" </div>\n" +
|
|
5466
|
" </div>\n" +
|
|
5547
|
" </form>\n" +
|
|
5467
|
" </form>\n" +
|
|
5548
|
"\n" +
|
|
5468
|
"\n" +
|
|
5549
|
" </div>\n" +
|
|
5469
|
" </div>\n" +
|
|
5550
|
"\n" +
|
|
5470
|
"\n" +
|
|
5551
|
" <table st-table=\"displayedCollection\" st-safe-src=\"group.users\" class=\"table table-striped\">\n" +
|
|
5471
|
"\n" +
|
|
|
|
|
5472
|
" </div>\n" +
|
|
|
|
|
5473
|
"\n" +
|
|
|
|
|
5474
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5475
|
" <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.tokens\" class=\"table table-striped\">\n" +
|
|
|
|
|
5476
|
" <caption>Your current tokens</caption>\n" +
|
|
5552
|
" <thead>\n" +
|
|
5477
|
" <thead>\n" +
|
|
5553
|
" <tr>\n" +
|
|
5478
|
" <tr>\n" +
|
|
5554
|
" <th st-sort=\"user_name\"><a>Username</a></th>\n" +
|
|
5479
|
" <th st-sort=\"description\"><a>Description</a></th>\n" +
|
|
5555
|
" <th st-sort=\"email\"><a>Email</a></th>\n" +
|
|
5480
|
" <th class=\"created\"><a>Created</a></th>\n" +
|
|
5556
|
" <th st-sort=\"status\"><a>Status</a></th>\n" +
|
|
5481
|
" <th class=\"expires\"><a>Expires</a></th>\n" +
|
|
5557
|
" <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
|
|
5482
|
" <th class=\"options\"></th>\n" +
|
|
5558
|
" <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
|
|
|
|
|
5559
|
" <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
|
|
|
|
|
5560
|
" <th class=\"options\" style=\"width: 130px\"></th>\n" +
|
|
|
|
|
5561
|
" </tr>\n" +
|
|
5483
|
" </tr>\n" +
|
|
5562
|
" <tr>\n" +
|
|
5484
|
" <tr>\n" +
|
|
5563
|
" <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
5485
|
" <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
5564
|
" <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
5486
|
" <th></th>\n" +
|
|
5565
|
" <th></th>\n" +
|
|
5487
|
" <th></th>\n" +
|
|
5566
|
" <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5567
|
" <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5568
|
" <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5569
|
" <th></th>\n" +
|
|
5488
|
" <th></th>\n" +
|
|
5570
|
" </tr>\n" +
|
|
5489
|
" </tr>\n" +
|
|
5571
|
" </thead>\n" +
|
|
5490
|
" </thead>\n" +
|
|
5572
|
" <tbody>\n" +
|
|
5491
|
" <tbody>\n" +
|
|
5573
|
"\n" +
|
|
5492
|
"\n" +
|
|
5574
|
" <tr ng-repeat=\"user in displayedCollection\">\n" +
|
|
5493
|
" <tr ng-repeat=\"token in displayedCollection\">\n" +
|
|
5575
|
" <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
|
|
5494
|
" <td><p>{{token.description}}</p>\n" +
|
|
5576
|
" <td>{{user.email}}</td>\n" +
|
|
5495
|
" <pre ng-init=\"token.limit = 8\" ng-mouseover=\"token.limit = 99\" ng-mouseleave=\"token.limit = 8\">{{token.token| limitTo:token.limit}}...</pre>\n" +
|
|
5577
|
" <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
|
|
5496
|
" </td>\n" +
|
|
5578
|
" <td>{{user.first_name}}</td>\n" +
|
|
5497
|
" <td><span data-uib-tooltip=\"{{token.creation_date}}\">{{token.creation_date | isoToRelativeTime}}</span></td>\n" +
|
|
5579
|
" <td>{{user.last_name}}</td>\n" +
|
|
5498
|
" <td><span ng-if=\"token.expires\" data-uib-tooltip=\"{{token.expires}}\">{{token.expires | isoToRelativeTime}}</span>\n" +
|
|
5580
|
" <td><span data-uib-tooltip=\"{{user.last_login_date}}\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
|
|
5499
|
" <span ng-if=\"!token.expires\">Never</span></td>\n" +
|
|
5581
|
" <td>\n" +
|
|
5500
|
" <td>\n" +
|
|
5582
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
|
|
|
5583
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
5501
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
5584
|
" <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
5502
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
5585
|
" <ul class=\"dropdown-menu\">\n" +
|
|
5503
|
" <ul class=\"dropdown-menu\">\n" +
|
|
5586
|
" <li><a>No</a></li>\n" +
|
|
5504
|
" <li><a>No</a></li>\n" +
|
|
5587
|
" <li><a ng-click=\"group.removeUser(user)\">Yes</a></li>\n" +
|
|
5505
|
" <li><a ng-click=\"$ctrl.removeToken(token)\">Yes</a></li>\n" +
|
|
5588
|
" </ul>\n" +
|
|
5506
|
" </ul>\n" +
|
|
5589
|
" </span>\n" +
|
|
5507
|
" </span>\n" +
|
|
5590
|
" </tr>\n" +
|
|
|
|
|
5591
|
" <tfoot>\n" +
|
|
|
|
|
5592
|
" <tr>\n" +
|
|
|
|
|
5593
|
" <td colspan=\"7\" class=\"text-center\">\n" +
|
|
|
|
|
5594
|
" <div st-pagination=\"\" st-items-by-page=\"50\" st-displayed-pages=\"7\"></div>\n" +
|
|
|
|
|
5595
|
" </td>\n" +
|
|
5508
|
" </td>\n" +
|
|
5596
|
" </tr>\n" +
|
|
5509
|
" </tr>\n" +
|
|
5597
|
" </tfoot>\n" +
|
|
|
|
|
5598
|
" </tbody>\n" +
|
|
5510
|
" </tbody>\n" +
|
|
5599
|
" </table>\n" +
|
|
5511
|
" </table>\n" +
|
|
5600
|
"\n" +
|
|
|
|
|
5601
|
" </div>\n" +
|
|
5512
|
" </div>\n" +
|
|
5602
|
"\n" +
|
|
5513
|
"\n" +
|
|
5603
|
"\n" +
|
|
|
|
|
5604
|
"</div>\n"
|
|
5514
|
"</div>\n"
|
|
5605
|
);
|
|
5515
|
);
|
|
5606
|
|
|
5516
|
|
|
5607
|
|
|
5517
|
|
|
5608
|
$templateCache.put('templates/admin/groups/groups_list.html',
|
|
5518
|
$templateCache.put('components/views/user-identities-view/user-identities-view.html',
|
|
5609
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"groups.loading.groups\"></ng-include>\n" +
|
|
5519
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.identities\"></ng-include>\n" +
|
|
5610
|
"\n" +
|
|
|
|
|
5611
|
"<div class=\"panel panel-default\" ng-show=\"!groups.loading.groups\">\n" +
|
|
|
|
|
5612
|
"\n" +
|
|
5520
|
"\n" +
|
|
5613
|
" <table st-table=\"displayedCollection\" st-safe-src=\"groups.groups\" class=\"table table-striped\">\n" +
|
|
5521
|
"<div ng-show=\"!$ctrl.loading.identities\">\n" +
|
|
5614
|
" <thead>\n" +
|
|
|
|
|
5615
|
" <tr>\n" +
|
|
|
|
|
5616
|
" <th st-sort=\"group_name\"><a>Group name</a></th>\n" +
|
|
|
|
|
5617
|
" <th st-sort=\"description\"><a>Description</a></th>\n" +
|
|
|
|
|
5618
|
" <th st-sort=\"members\"><a>Member count</a></th>\n" +
|
|
|
|
|
5619
|
" <th class=\"options\"></th>\n" +
|
|
|
|
|
5620
|
" </tr>\n" +
|
|
|
|
|
5621
|
" <tr>\n" +
|
|
|
|
|
5622
|
" <th><input st-search=\"group_name\" placeholder=\"search for group name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5623
|
" <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
5624
|
" <th></th>\n" +
|
|
|
|
|
5625
|
" <th></th>\n" +
|
|
|
|
|
5626
|
" </tr>\n" +
|
|
|
|
|
5627
|
" </thead>\n" +
|
|
|
|
|
5628
|
" <tbody>\n" +
|
|
|
|
|
5629
|
"\n" +
|
|
5522
|
"\n" +
|
|
5630
|
" <tr ng-repeat=\"group in displayedCollection track by group.id\">\n" +
|
|
5523
|
" <div class=\"panel panel-default\">\n" +
|
|
5631
|
" <td>{{group.group_name}}</td>\n" +
|
|
5524
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
5632
|
" <td>{{group.description}}</td>\n" +
|
|
5525
|
" <div class=\"panel-body\">\n" +
|
|
5633
|
" <td>{{group.member_count}}</td>\n" +
|
|
|
|
|
5634
|
" <td>\n" +
|
|
|
|
|
5635
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.group.update({groupId:group.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
|
|
|
5636
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
5637
|
" <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5638
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5639
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5640
|
" <li><a ng-click=\"groups.removeGroup(group)\">Yes</a></li>\n" +
|
|
|
|
|
5641
|
" </ul>\n" +
|
|
|
|
|
5642
|
" </span>\n" +
|
|
|
|
|
5643
|
" </tr>\n" +
|
|
|
|
|
5644
|
" <tfoot>\n" +
|
|
|
|
|
5645
|
" <tr>\n" +
|
|
|
|
|
5646
|
" <td colspan=\"4\" class=\"text-center\">\n" +
|
|
|
|
|
5647
|
" <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
|
|
|
|
|
5648
|
" </td>\n" +
|
|
|
|
|
5649
|
" </tr>\n" +
|
|
|
|
|
5650
|
" </tfoot>\n" +
|
|
|
|
|
5651
|
" </tbody>\n" +
|
|
|
|
|
5652
|
" </table>\n" +
|
|
|
|
|
5653
|
"\n" +
|
|
5526
|
"\n" +
|
|
5654
|
"</div>\n" +
|
|
5527
|
" <div class=\"col-sm-6\">\n" +
|
|
5655
|
"\n"
|
|
5528
|
" <p ng-show=\"$ctrl.identities.length === 0\">No external providers linked yet</p>\n" +
|
|
5656
|
);
|
|
5529
|
" <ul class=\"list-group\">\n" +
|
|
5657
|
|
|
5530
|
" <li ng-repeat=\"provider in $ctrl.identities\" class=\"animate-repeat list-group-item\">\n" +
|
|
5658
|
|
|
5531
|
" <div class=\"pull-right\">\n" +
|
|
5659
|
$templateCache.put('templates/admin/groups/parent_view.html',
|
|
5532
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
5660
|
"<div ui-view></div>"
|
|
5533
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5534
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5535
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5536
|
" <li><a ng-click=\"$ctrl.removeProvider(provider)\">Yes</a></li>\n" +
|
|
|
|
|
5537
|
" </ul>\n" +
|
|
|
|
|
5538
|
" </span>\n" +
|
|
|
|
|
5539
|
" </div>\n" +
|
|
|
|
|
5540
|
" <em>@{{ provider.provider }}</em>: <strong>{{ provider.id }}</strong>\n" +
|
|
|
|
|
5541
|
" </li>\n" +
|
|
|
|
|
5542
|
" </ul>\n" +
|
|
|
|
|
5543
|
" </div>\n" +
|
|
|
|
|
5544
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
5545
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5546
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
5547
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.google}}\" target=\"_self\">\n" +
|
|
|
|
|
5548
|
" <span class=\"fa fa-google-plus-square fa-2x\"></span> Connect with Google</a>\n" +
|
|
|
|
|
5549
|
" </li>\n" +
|
|
|
|
|
5550
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
5551
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.twitter}}\" target=\"_self\">\n" +
|
|
|
|
|
5552
|
" <span class=\"fa fa-twitter fa-2x\"></span> Connect with Twitter</a>\n" +
|
|
|
|
|
5553
|
" </li>\n" +
|
|
|
|
|
5554
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
5555
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.bitbucket}}\" target=\"_self\">\n" +
|
|
|
|
|
5556
|
" <span class=\"fa fa-bitbucket fa-2x\"></span> Connect with Bitbucket</a>\n" +
|
|
|
|
|
5557
|
" </li>\n" +
|
|
|
|
|
5558
|
" <li class=\"list-group-item\">\n" +
|
|
|
|
|
5559
|
" <a href=\"{{$ctrl.AeConfig.urls.social_auth.github}}\" target=\"_self\">\n" +
|
|
|
|
|
5560
|
" <span class=\"fa fa-github fa-2x\"></span> Connect with Github including private repo access</a>\n" +
|
|
|
|
|
5561
|
" </li>\n" +
|
|
|
|
|
5562
|
" </ul>\n" +
|
|
|
|
|
5563
|
" </div>\n" +
|
|
|
|
|
5564
|
" </div>\n" +
|
|
|
|
|
5565
|
" </div>\n" +
|
|
|
|
|
5566
|
"</div>\n"
|
|
5661
|
);
|
|
5567
|
);
|
|
5662
|
|
|
5568
|
|
|
5663
|
|
|
5569
|
|
|
5664
|
$templateCache.put('templates/admin/parent_view.html',
|
|
5570
|
$templateCache.put('components/views/user-password-view/user-password-view.html',
|
|
5665
|
"<div class=\"col-sm-3\" id=\"menu\">\n" +
|
|
5571
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.password\"></ng-include>\n" +
|
|
5666
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5667
|
" <div class=\"panel-heading\">Users and groups</div>\n" +
|
|
|
|
|
5668
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5669
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.list\"> Users</a></li>\n" +
|
|
|
|
|
5670
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.create\"> Create user</a></li>\n" +
|
|
|
|
|
5671
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.list\"> Groups</a></li>\n" +
|
|
|
|
|
5672
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.create\"> Create group</a></li>\n" +
|
|
|
|
|
5673
|
" </ul>\n" +
|
|
|
|
|
5674
|
" </div>\n" +
|
|
|
|
|
5675
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5676
|
" <div class=\"panel-heading\">Resources</div>\n" +
|
|
|
|
|
5677
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5678
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.application.list\"> List applications</a></li>\n" +
|
|
|
|
|
5679
|
" </ul>\n" +
|
|
|
|
|
5680
|
" </div>\n" +
|
|
|
|
|
5681
|
"\n" +
|
|
5572
|
"\n" +
|
|
5682
|
" <div class=\"panel panel-default\">\n" +
|
|
5573
|
"<div ng-show=\"!$ctrl.loading.password\">\n" +
|
|
5683
|
" <div class=\"panel-heading\">System</div>\n" +
|
|
|
|
|
5684
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5685
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.configs.list\"> Config variables</a></li>\n" +
|
|
|
|
|
5686
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.system\"> System</a></li>\n" +
|
|
|
|
|
5687
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.partitions\"> Partition Management</a></li>\n" +
|
|
|
|
|
5688
|
" </ul>\n" +
|
|
|
|
|
5689
|
" </div>\n" +
|
|
|
|
|
5690
|
"</div>\n" +
|
|
|
|
|
5691
|
"\n" +
|
|
5574
|
"\n" +
|
|
|
|
|
5575
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5576
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
|
|
|
5577
|
" <div class=\"panel-body\">\n" +
|
|
5692
|
"\n" +
|
|
5578
|
"\n" +
|
|
5693
|
"<div class=\"col-sm-9\" ui-view></div>\n"
|
|
5579
|
" <form class=\"form-horizontal\" name=\"$ctrl.passwordForm\" ng-submit=\"$ctrl.updatePassword()\">\n" +
|
|
|
|
|
5580
|
" <div class=\"form-group\" id=\"row-old_password\">\n" +
|
|
|
|
|
5581
|
" <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.old_password\"></data-form-errors>\n" +
|
|
|
|
|
5582
|
" <label for=\"old_password\" id=\"label-old_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5583
|
" Old Password\n" +
|
|
|
|
|
5584
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
5585
|
" </label>\n" +
|
|
|
|
|
5586
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5587
|
" <input class=\"form-control\" id=\"old_password\" name=\"old_password\" type=\"password\" ng-model=\"$ctrl.form.old_password\">\n" +
|
|
|
|
|
5588
|
" </div>\n" +
|
|
|
|
|
5589
|
" </div>\n" +
|
|
|
|
|
5590
|
" <div class=\"form-group\" id=\"row-new_password\">\n" +
|
|
|
|
|
5591
|
" <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password\"></data-form-errors>\n" +
|
|
|
|
|
5592
|
" <label for=\"new_password\" id=\"label-new_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5593
|
" New Password\n" +
|
|
|
|
|
5594
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
5595
|
" </label>\n" +
|
|
|
|
|
5596
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5597
|
" <input class=\"form-control\" id=\"new_password\" name=\"new_password\" type=\"password\" ng-model=\"$ctrl.form.new_password\">\n" +
|
|
|
|
|
5598
|
" </div>\n" +
|
|
|
|
|
5599
|
" </div>\n" +
|
|
|
|
|
5600
|
" <div class=\"form-group\" id=\"row-new_password_confirm\">\n" +
|
|
|
|
|
5601
|
" <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password_confirm\"></data-form-errors>\n" +
|
|
|
|
|
5602
|
" <label for=\"new_password_confirm\" id=\"label-new_password_confirm\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5603
|
" Confirm Password\n" +
|
|
|
|
|
5604
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
5605
|
" </label>\n" +
|
|
|
|
|
5606
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5607
|
" <input class=\"form-control\" id=\"new_password_confirm\" name=\"new_password_confirm\" type=\"password\" ng-model=\"$ctrl.form.new_password_confirm\">\n" +
|
|
|
|
|
5608
|
" </div>\n" +
|
|
|
|
|
5609
|
" </div>\n" +
|
|
|
|
|
5610
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
|
|
|
5611
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\"></label>\n" +
|
|
|
|
|
5612
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5613
|
" <input class=\"form-control SubmitField btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Change Password\">\n" +
|
|
|
|
|
5614
|
" </div>\n" +
|
|
|
|
|
5615
|
" </div>\n" +
|
|
|
|
|
5616
|
" </form>\n" +
|
|
|
|
|
5617
|
"\n" +
|
|
|
|
|
5618
|
" </div>\n" +
|
|
|
|
|
5619
|
" </div>\n" +
|
|
|
|
|
5620
|
"</div>\n"
|
|
5694
|
);
|
|
5621
|
);
|
|
5695
|
|
|
5622
|
|
|
5696
|
|
|
5623
|
|
|
5697
|
$templateCache.put('templates/admin/partitions.html',
|
|
5624
|
$templateCache.put('components/views/user-profile-view/user-profile-view.html',
|
|
5698
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"partitions.loading.partitions\"></ng-include>\n" +
|
|
5625
|
"<ui-view></ui-view><ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.profile\"></ng-include>\n" +
|
|
5699
|
"\n" +
|
|
|
|
|
5700
|
"<div ng-show=\"!partitions.loading.partitions\">\n" +
|
|
|
|
|
5701
|
"\n" +
|
|
5626
|
"\n" +
|
|
|
|
|
5627
|
"<div ng-show=\"!$ctrl.loading.profile\">\n" +
|
|
5702
|
" <div class=\"panel panel-default\">\n" +
|
|
5628
|
" <div class=\"panel panel-default\">\n" +
|
|
5703
|
" <div class=\"panel-heading\">\n" +
|
|
5629
|
" <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
|
|
5704
|
" DELETE Daily Partitions\n" +
|
|
5630
|
" <div class=\"panel-body\">\n" +
|
|
5705
|
" </div>\n" +
|
|
5631
|
" <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.updateProfile()\">\n" +
|
|
5706
|
"\n" +
|
|
5632
|
" <div class=\"form-group\" id=\"row-email\">\n" +
|
|
5707
|
" <form name=\"partitions.dailyPartitionsForm\"\n" +
|
|
5633
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
|
|
5708
|
" novalidate ng-submit=\"partitions.partitionsDelete('dailyPartitions')\"\n" +
|
|
5634
|
" <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5709
|
" class=\"form-inline\"\n" +
|
|
5635
|
" Email Address\n" +
|
|
5710
|
" ng-class=\"{'has-error':partitions.dailyPartitionsForm.$invalid}\">\n" +
|
|
5636
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
5637
|
" </label>\n" +
|
|
|
|
|
5638
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5639
|
" <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
|
|
|
|
|
5640
|
" </div>\n" +
|
|
|
|
|
5641
|
" </div>\n" +
|
|
5711
|
"\n" +
|
|
5642
|
"\n" +
|
|
5712
|
" <div class=\"panel-body\">\n" +
|
|
5643
|
" <div class=\"form-group\" id=\"row-first_name\">\n" +
|
|
|
|
|
5644
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
|
|
|
|
|
5645
|
" <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5646
|
" First Name\n" +
|
|
|
|
|
5647
|
" </label>\n" +
|
|
|
|
|
5648
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5649
|
" <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
|
|
|
|
|
5650
|
" </div>\n" +
|
|
|
|
|
5651
|
" </div>\n" +
|
|
|
|
|
5652
|
" <div class=\"form-group\" id=\"row-last_name\">\n" +
|
|
|
|
|
5653
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
|
|
|
|
|
5654
|
" <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5655
|
" Last Name\n" +
|
|
|
|
|
5656
|
" </label>\n" +
|
|
|
|
|
5657
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5658
|
" <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
|
|
|
|
|
5659
|
" </div>\n" +
|
|
|
|
|
5660
|
" </div>\n" +
|
|
|
|
|
5661
|
" <div class=\"form-group\" id=\"row-company_name\">\n" +
|
|
|
|
|
5662
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_name\"></data-form-errors>\n" +
|
|
|
|
|
5663
|
" <label for=\"company_name\" id=\"label-company_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5664
|
" Company Name\n" +
|
|
|
|
|
5665
|
" </label>\n" +
|
|
|
|
|
5666
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5667
|
" <input class=\"form-control\" id=\"company_name\" name=\"company_name\" type=\"text\" ng-model=\"$ctrl.user.company_name\">\n" +
|
|
|
|
|
5668
|
" </div>\n" +
|
|
|
|
|
5669
|
" </div>\n" +
|
|
|
|
|
5670
|
" <div class=\"form-group\" id=\"row-company_address\">\n" +
|
|
|
|
|
5671
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_address\"></data-form-errors>\n" +
|
|
|
|
|
5672
|
" <label for=\"company_address\" id=\"label-company_address\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5673
|
" Company Address\n" +
|
|
|
|
|
5674
|
" </label>\n" +
|
|
|
|
|
5675
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5676
|
" <textarea class=\"form-control\" id=\"company_address\" name=\"company_address\" ng-model=\"$ctrl.user.company_address\"></textarea>\n" +
|
|
|
|
|
5677
|
" </div>\n" +
|
|
|
|
|
5678
|
" </div>\n" +
|
|
|
|
|
5679
|
" <div class=\"form-group\" id=\"row-zip_code\">\n" +
|
|
|
|
|
5680
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.zip_code\"></data-form-errors>\n" +
|
|
|
|
|
5681
|
" <label for=\"zip_code\" id=\"label-zip_code\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5682
|
" ZIP code\n" +
|
|
|
|
|
5683
|
" </label>\n" +
|
|
|
|
|
5684
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5685
|
" <input class=\"form-control\" id=\"zip_code\" name=\"zip_code\" type=\"text\" ng-model=\"$ctrl.user.zip_code\">\n" +
|
|
|
|
|
5686
|
" </div>\n" +
|
|
|
|
|
5687
|
" </div>\n" +
|
|
|
|
|
5688
|
" <div class=\"form-group\" id=\"row-city\">\n" +
|
|
|
|
|
5689
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.city\"></data-form-errors>\n" +
|
|
|
|
|
5690
|
" <label for=\"city\" id=\"label-city\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5691
|
" City\n" +
|
|
|
|
|
5692
|
" </label>\n" +
|
|
|
|
|
5693
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5694
|
" <input class=\"form-control\" id=\"city\" name=\"city\" type=\"text\" ng-model=\"$ctrl.user.city\">\n" +
|
|
|
|
|
5695
|
" </div>\n" +
|
|
|
|
|
5696
|
" </div>\n" +
|
|
|
|
|
5697
|
" <div class=\"form-group\" id=\"row-notifications\">\n" +
|
|
|
|
|
5698
|
" <data-form-errors errors=\"$ctrl.profileForm.ae_validation.notifications\"></data-form-errors>\n" +
|
|
|
|
|
5699
|
" <label for=\"notifications\" id=\"label-notifications\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5700
|
" Account notifications\n" +
|
|
|
|
|
5701
|
" </label>\n" +
|
|
|
|
|
5702
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5703
|
" <input checked class=\"form-control\" id=\"notifications\" name=\"notifications\" type=\"checkbox\" ng-model=\"$ctrl.user.notifications\">\n" +
|
|
|
|
|
5704
|
" </div>\n" +
|
|
|
|
|
5705
|
" </div>\n" +
|
|
|
|
|
5706
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
|
|
|
5707
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5708
|
" </label>\n" +
|
|
|
|
|
5709
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
5710
|
" <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Update Account\">\n" +
|
|
|
|
|
5711
|
" </div>\n" +
|
|
|
|
|
5712
|
" </div>\n" +
|
|
|
|
|
5713
|
" </form>\n" +
|
|
|
|
|
5714
|
" </div>\n" +
|
|
|
|
|
5715
|
" </div>\n" +
|
|
|
|
|
5716
|
"</div>\n"
|
|
|
|
|
5717
|
);
|
|
|
|
|
5718
|
|
|
|
|
|
5719
|
|
|
|
|
|
5720
|
$templateCache.put('directives/permissions/permissions.html',
|
|
|
|
|
5721
|
"<div class=\"panel panel-default\">\n" +
|
|
|
|
|
5722
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5723
|
" <h3 class=\"panel-title\">Permissions</h3>\n" +
|
|
|
|
|
5724
|
" </div>\n" +
|
|
|
|
|
5725
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
5726
|
" <p>Here you can <strong>set permissions</strong> for others to access your app data.</p>\n" +
|
|
5713
|
"\n" +
|
|
5727
|
"\n" +
|
|
5714
|
" <input type=\"text\" name=\"confirm\"\n" +
|
|
5728
|
" <p>For example you can let other staff member view or alter error reports.</p>\n" +
|
|
5715
|
" placeholder=\"Enter CONFIRM to proceed\" class=\"form-control input-autosize\" confirm-validate required ng-model=\"partitions.dailyConfirm\">\n" +
|
|
|
|
|
5716
|
" <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.dailyPartitionsForm.$invalid\">\n" +
|
|
|
|
|
5717
|
" <input type=\"checkbox\" ng-model=\"partitions.dailyChecked\" ng-change=\"partitions.setCheckedList('dailyPartitions')\"> Check All\n" +
|
|
|
|
|
5718
|
"\n" +
|
|
5729
|
"\n" +
|
|
5719
|
" </div>\n" +
|
|
5730
|
" <div ng-if=\"permissions.possibleGroups.length > 0\">\n" +
|
|
|
|
|
5731
|
" <h3>Group permissions</h3>\n" +
|
|
5720
|
"\n" +
|
|
5732
|
"\n" +
|
|
5721
|
" <table class=\"table table-striped\">\n" +
|
|
5733
|
" <ul class=\"list-group\">\n" +
|
|
5722
|
" <tr>\n" +
|
|
5734
|
" <li ng-repeat=\"perm in permissions.currentPermissions.group\" class=\"animate-repeat list-group-item\">\n" +
|
|
5723
|
" <th class=\"c1 date\">Date</th>\n" +
|
|
5735
|
" <strong>{{ perm.self.group_name }}</strong>\n" +
|
|
5724
|
" <th class=\"c2 indices\">Indices</th>\n" +
|
|
5736
|
" <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
|
|
5725
|
" </tr>\n" +
|
|
5737
|
" <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
|
|
5726
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.dailyPartitions\">\n" +
|
|
5738
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
|
|
5727
|
" <td class=\"c1\">{{row[0]}}</td>\n" +
|
|
5739
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
|
|
5728
|
" <td class=\"c2\">\n" +
|
|
5740
|
" <ul class=\"dropdown-menu\">\n" +
|
|
5729
|
" <ul class=\"list-group\">\n" +
|
|
5741
|
" <li><a>No</a></li>\n" +
|
|
5730
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
|
|
5742
|
" <li><a ng-click=\"permissions.removeGroupPermission(perm_name, perm)\">Yes</a></li>\n" +
|
|
5731
|
" <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
|
|
5743
|
" </ul>\n" +
|
|
5732
|
" </li>\n" +
|
|
5744
|
" </span>\n" +
|
|
5733
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
|
|
5745
|
" </div>\n" +
|
|
5734
|
" <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
|
|
5746
|
" </li>\n" +
|
|
5735
|
" </li>\n" +
|
|
5747
|
" </ul>\n" +
|
|
5736
|
" </ul>\n" +
|
|
|
|
|
5737
|
" </td>\n" +
|
|
|
|
|
5738
|
" </tr>\n" +
|
|
|
|
|
5739
|
" </table>\n" +
|
|
|
|
|
5740
|
" </form>\n" +
|
|
|
|
|
5741
|
"\n" +
|
|
5748
|
"\n" +
|
|
5742
|
" </div>\n" +
|
|
5749
|
" <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setGroupPermission()\">\n" +
|
|
|
|
|
5750
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5751
|
" <select class=\"form-control\" ng-model=\"permissions.form.selectedGroup\" ng-options=\"g.id as g.group_name for g in permissions.possibleGroups\"></select>\n" +
|
|
|
|
|
5752
|
" </div>\n" +
|
|
|
|
|
5753
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5754
|
" <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
|
|
|
|
|
5755
|
" <input type=\"checkbox\" ng-model=\"permissions.form.selectedGroupPermissions[permission]\"> {{ permission }}\n" +
|
|
|
|
|
5756
|
" </span>\n" +
|
|
|
|
|
5757
|
" </div>\n" +
|
|
|
|
|
5758
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5759
|
" <button class=\"btn btn-info\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
|
|
|
|
|
5760
|
" </div>\n" +
|
|
|
|
|
5761
|
" </form>\n" +
|
|
5743
|
"\n" +
|
|
5762
|
"\n" +
|
|
5744
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5745
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5746
|
" DELETE Permanent Partitions\n" +
|
|
|
|
|
5747
|
" </div>\n" +
|
|
5763
|
" </div>\n" +
|
|
5748
|
"\n" +
|
|
5764
|
"\n" +
|
|
5749
|
" <form name=\"partitions.permanentPartitionsForm\" novalidate\n" +
|
|
5765
|
" <h3>User permissions</h3>\n" +
|
|
5750
|
" ng-submit=\"partitions.partitionsDelete('permanentPartitions')\"\n" +
|
|
5766
|
" <div>\n" +
|
|
5751
|
" class=\"form-inline\"\n" +
|
|
5767
|
" <ul class=\"list-group\">\n" +
|
|
5752
|
" ng-class=\"{'has-error':partitions.permanentPartitionsForm.$invalid}\">\n" +
|
|
5768
|
" <li ng-repeat=\"perm in permissions.currentPermissions.user\" class=\"animate-repeat list-group-item\">\n" +
|
|
5753
|
"\n" +
|
|
5769
|
" <strong>{{ perm.self.user_name }}</strong>\n" +
|
|
5754
|
"\n" +
|
|
5770
|
" <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
|
|
5755
|
" <div class=\"panel-body\">\n" +
|
|
5771
|
" <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
|
|
|
|
|
5772
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
|
|
|
|
|
5773
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
|
|
|
|
|
5774
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5775
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5776
|
" <li><a ng-click=\"permissions.removeUserPermission(perm_name,perm)\">Yes</a></li>\n" +
|
|
|
|
|
5777
|
" </ul>\n" +
|
|
|
|
|
5778
|
" </span>\n" +
|
|
|
|
|
5779
|
" </div>\n" +
|
|
|
|
|
5780
|
" </li>\n" +
|
|
|
|
|
5781
|
" </ul>\n" +
|
|
|
|
|
5782
|
" </div>\n" +
|
|
|
|
|
5783
|
" <div>\n" +
|
|
|
|
|
5784
|
" <p>First enter username or full email of person you want to give access to (the person needs to be <strong>already registered in AppEnlight</strong>)</p>\n" +
|
|
5756
|
"\n" +
|
|
5785
|
"\n" +
|
|
|
|
|
5786
|
" <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setUserPermission()\">\n" +
|
|
5757
|
" <div class=\"form-group\">\n" +
|
|
5787
|
" <div class=\"form-group\">\n" +
|
|
5758
|
" <input type=\"text\" name=\"confirm\"\n" +
|
|
5788
|
" <input type=\"text\" class=\"autocomplete form-control\" placeholder=\"Search for user/email\" ng-model=\"permissions.form.autocompleteUser\"\n" +
|
|
5759
|
" placeholder=\"Enter CONFIRM to proceed\" class=\"form-control\" confirm-validate required ng-model=\"partitions.permConfirm\">\n" +
|
|
5789
|
" uib-typeahead=\"u.user for u in permissions.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"permissions.searchingUsers\" typeahead-wait-ms=\"250\"\n" +
|
|
5760
|
" <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.permanentPartitionsForm.$invalid\">\n" +
|
|
5790
|
" typeahead-template-url=\"templates/directives/user_search_type_ahead.html\"\n" +
|
|
5761
|
" <input type=\"checkbox\" ng-model=\"partitions.permChecked\" ng-change=\"partitions.setCheckedList('permanentPartitions')\"> Check All\n" +
|
|
5791
|
" />\n" +
|
|
5762
|
" </div>\n" +
|
|
5792
|
" </div>\n" +
|
|
5763
|
"\n" +
|
|
5793
|
" <div class=\"form-group\">\n" +
|
|
5764
|
" </div>\n" +
|
|
5794
|
" <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
|
|
5765
|
"\n" +
|
|
5795
|
" <input type=\"checkbox\" ng-model=\"permissions.form.selectedUserPermissions[permission]\"> {{ permission }}\n" +
|
|
5766
|
" <table class=\"table table-striped\">\n" +
|
|
5796
|
" </span>\n" +
|
|
5767
|
" <tr>\n" +
|
|
5797
|
" </div>\n" +
|
|
5768
|
" <th class=\"c1 date\">Date</th>\n" +
|
|
5798
|
" <div class=\"form-group\">\n" +
|
|
5769
|
" <th class=\"c2 indices\">Indices</th>\n" +
|
|
5799
|
" <button class=\"btn btn-info\" ng-disabled=\"!permissions.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
|
|
5770
|
" </tr>\n" +
|
|
5800
|
" </div>\n" +
|
|
5771
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.permanentPartitions\">\n" +
|
|
5801
|
" </form>\n" +
|
|
5772
|
" <td class=\"c1\">{{row[0]}}</td>\n" +
|
|
5802
|
" </div>\n" +
|
|
5773
|
" <td class=\"c2\">\n" +
|
|
|
|
|
5774
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5775
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
|
|
|
|
|
5776
|
" <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
|
|
|
|
|
5777
|
" </li>\n" +
|
|
|
|
|
5778
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
|
|
|
|
|
5779
|
" <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
|
|
|
|
|
5780
|
" </li>\n" +
|
|
|
|
|
5781
|
" </ul>\n" +
|
|
|
|
|
5782
|
" </td>\n" +
|
|
|
|
|
5783
|
" </tr>\n" +
|
|
|
|
|
5784
|
" </table>\n" +
|
|
|
|
|
5785
|
" </form>\n" +
|
|
|
|
|
5786
|
"\n" +
|
|
|
|
|
5787
|
" </div>\n" +
|
|
5803
|
" </div>\n" +
|
|
5788
|
"\n" +
|
|
|
|
|
5789
|
"</div>\n"
|
|
5804
|
"</div>\n"
|
|
5790
|
);
|
|
5805
|
);
|
|
5791
|
|
|
5806
|
|
|
5792
|
|
|
5807
|
|
|
5793
|
$templateCache.put('templates/admin/system.html',
|
|
5808
|
$templateCache.put('directives/plugin_config/plugin_config.html',
|
|
5794
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"system.loading.system\"></ng-include>\n" +
|
|
5809
|
"<div ng-repeat=\"tmpl in plugin_ctrlr.inclusions track by $index\">\n" +
|
|
|
|
|
5810
|
" <div><strong>Plugin: {{tmpl.name}}</strong></div>\n" +
|
|
|
|
|
5811
|
" <ng-include src=\"tmpl.template\"></ng-include>\n" +
|
|
|
|
|
5812
|
" <hr/>\n" +
|
|
|
|
|
5813
|
"</div>\n"
|
|
|
|
|
5814
|
);
|
|
|
|
|
5815
|
|
|
|
|
|
5816
|
|
|
|
|
|
5817
|
$templateCache.put('directives/postprocess_action/postprocess_action.html',
|
|
|
|
|
5818
|
"<div class=\"panel panel-default action\">\n" +
|
|
|
|
|
5819
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5820
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
5821
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5822
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5823
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5824
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5825
|
" <li><a ng-click=\"ctrl.deleteAction(ctrl.action)\">Yes</a></li>\n" +
|
|
|
|
|
5826
|
" </ul>\n" +
|
|
|
|
|
5827
|
" </span>\n" +
|
|
|
|
|
5828
|
" </div>\n" +
|
|
5795
|
"\n" +
|
|
5829
|
"\n" +
|
|
5796
|
"<div ng-if=\"system.loading.system == false\">\n" +
|
|
5830
|
" <div class=\"form-group\">\n" +
|
|
5797
|
" <div class=\"row\">\n" +
|
|
5831
|
" <label>Action</label>\n" +
|
|
5798
|
" <div class=\"col-sm-12\">\n" +
|
|
|
|
|
5799
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5800
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5801
|
" <h3 class=\"panel-title\">\n" +
|
|
|
|
|
5802
|
" System Info\n" +
|
|
|
|
|
5803
|
" </h3>\n" +
|
|
|
|
|
5804
|
" </div>\n" +
|
|
|
|
|
5805
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
5806
|
"\n" +
|
|
5832
|
"\n" +
|
|
5807
|
" <p><strong>System Load:</strong>\n" +
|
|
5833
|
" <div class=\"form-group\">\n" +
|
|
5808
|
" 1min: {{system.systemLoad[0]}}, 5min: {{system.systemLoad[1]}}, 15min: {{system.systemLoad[2]}}\n" +
|
|
5834
|
" <select class=\"form-control\" ng-model=\"ctrl.action.new_value\" ng-options=\"f[0] as f[1] for f in ctrl.possibleActions\" ng-change=\"ctrl.setDirty()\"></select>\n" +
|
|
5809
|
" </p>\n" +
|
|
5835
|
" </div>\n" +
|
|
5810
|
" <p><strong>Awaiting tasks:</strong>\n" +
|
|
|
|
|
5811
|
" <ul>\n" +
|
|
|
|
|
5812
|
" <li>reports: {{system.queueStats.waiting_reports}}</li>\n" +
|
|
|
|
|
5813
|
" <li>logs: {{system.queueStats.waiting_logs}}</li>\n" +
|
|
|
|
|
5814
|
" <li>metrics: {{system.queueStats.waiting_metrics}}</li>\n" +
|
|
|
|
|
5815
|
" <li>other: {{system.queueStats.waiting_other}}</li>\n" +
|
|
|
|
|
5816
|
" </ul>\n" +
|
|
|
|
|
5817
|
" </p>\n" +
|
|
|
|
|
5818
|
" <p><strong>Queue stats from last minute:</strong>\n" +
|
|
|
|
|
5819
|
" <ul>\n" +
|
|
|
|
|
5820
|
" <li>Processed reports: {{system.queueStats.processed_reports}}</li>\n" +
|
|
|
|
|
5821
|
" <li>Processed logs: {{system.queueStats.processed_logs}}</li>\n" +
|
|
|
|
|
5822
|
" <li>Processed metrics: {{system.queueStats.processed_metrics}}</li>\n" +
|
|
|
|
|
5823
|
" </ul>\n" +
|
|
|
|
|
5824
|
" </p>\n" +
|
|
|
|
|
5825
|
"\n" +
|
|
5836
|
"\n" +
|
|
5826
|
" <p><strong>Disks:</strong>\n" +
|
|
5837
|
" <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> Save changes</a>\n" +
|
|
5827
|
" <ul>\n" +
|
|
|
|
|
5828
|
" <li ng-repeat=\"disk in system.disks\">\n" +
|
|
|
|
|
5829
|
" <strong>{{disk.device}}</strong> {{disk.free}}/{{disk.total}}, {{disk.percentage}}% used\n" +
|
|
|
|
|
5830
|
" </li>\n" +
|
|
|
|
|
5831
|
" </ul>\n" +
|
|
|
|
|
5832
|
" </p>\n" +
|
|
|
|
|
5833
|
"\n" +
|
|
5838
|
"\n" +
|
|
5834
|
" <p><strong>Process stats:</strong>\n" +
|
|
5839
|
" </div>\n" +
|
|
5835
|
" <ul>\n" +
|
|
5840
|
" <hr/>\n" +
|
|
5836
|
" <li>FD soft limits: {{system.selfInfo.fds.soft}}</li>\n" +
|
|
5841
|
" <p>Meeting following criteria:</p>\n" +
|
|
5837
|
" <li>FD hard limits: {{system.selfInfo.fds.hard}}</li>\n" +
|
|
5842
|
" <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
|
|
5838
|
" <li>Memlock soft limits: {{system.selfInfo.memlock.soft}}</li>\n" +
|
|
5843
|
" {{ctrl.rule}}\n" +
|
|
5839
|
" <li>Memlock hard limits: {{system.selfInfo.memlock.hard}}</li>\n" +
|
|
5844
|
" <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
|
|
5840
|
" </ul>\n" +
|
|
5845
|
" </div>\n" +
|
|
5841
|
" </p>\n" +
|
|
5846
|
"</div>\n"
|
|
|
|
|
5847
|
);
|
|
|
|
|
5848
|
|
|
|
|
|
5849
|
|
|
|
|
|
5850
|
$templateCache.put('directives/report_alert_action/report_alert_action.html',
|
|
|
|
|
5851
|
"<div class=\"panel panel-default action\">\n" +
|
|
|
|
|
5852
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5853
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
5854
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5855
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5856
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5857
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5858
|
" <li><a ng-click=\"ctrl.deleteAction(ctrl.actions, ctrl.action)\">Yes</a></li>\n" +
|
|
|
|
|
5859
|
" </ul>\n" +
|
|
|
|
|
5860
|
" </span>\n" +
|
|
|
|
|
5861
|
" </div>\n" +
|
|
5842
|
"\n" +
|
|
5862
|
"\n" +
|
|
5843
|
" </div>\n" +
|
|
5863
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5864
|
" <label>Applies to</label>\n" +
|
|
|
|
|
5865
|
" <select class=\"form-control\" ng-model=\"ctrl.action.resource_id\" ng-options=\"f.resource_id as f.resource_name for f in ctrl.applications\" ng-change=\"ctrl.setDirty()\">\n" +
|
|
|
|
|
5866
|
" <option value=\"\">All Resources</option>\n" +
|
|
|
|
|
5867
|
" </select>\n" +
|
|
|
|
|
5868
|
" </div>\n" +
|
|
|
|
|
5869
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
5870
|
" <label>Notify</label>\n" +
|
|
|
|
|
5871
|
" <select class=\"form-control\" ng-model=\"ctrl.action.action\" ng-change=\"ctrl.setDirty()\" ng-options=\"f[0] as f[1] for f in ctrl.possibleNotifications\"></select>\n" +
|
|
|
|
|
5872
|
"\n" +
|
|
|
|
|
5873
|
" <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> Save changes</a>\n" +
|
|
|
|
|
5874
|
"\n" +
|
|
|
|
|
5875
|
" </div>\n" +
|
|
|
|
|
5876
|
" <div>\n" +
|
|
|
|
|
5877
|
" <p><strong>Channels:</strong></p>\n" +
|
|
|
|
|
5878
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
5879
|
" <li class=\"list-group-item\" ng-repeat=\"channel in ctrl.action.channels\">\n" +
|
|
|
|
|
5880
|
" <strong>{{channel.channel_visible_value}}</strong>\n" +
|
|
|
|
|
5881
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
5882
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5883
|
" <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5884
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5885
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5886
|
" <li><a ng-click=\"ctrl.unBindChannel(channel)\">Yes</a></li>\n" +
|
|
|
|
|
5887
|
" </ul>\n" +
|
|
|
|
|
5888
|
" </span>\n" +
|
|
|
|
|
5889
|
" </div>\n" +
|
|
|
|
|
5890
|
" </li>\n" +
|
|
|
|
|
5891
|
" </ul>\n" +
|
|
|
|
|
5892
|
" <div class=\"form-group\" ng-if=\"ctrl.possibleChannels.length\">\n" +
|
|
|
|
|
5893
|
" <select class=\"form-control\" ng-model=\"ctrl.channelToBind\" ng-options=\"c as c.channel_visible_value for c in ctrl.possibleChannels |filter: c.supports_report_alerting\"></select>\n" +
|
|
|
|
|
5894
|
" <a class=\"btn btn-info\" ng-click=\"ctrl.bindChannel(channel, ctrl.action)\"><span class=\"fa fa-plus-circle\"></span> Add Channel</a>\n" +
|
|
|
|
|
5895
|
" </div>\n" +
|
|
|
|
|
5896
|
" <div class=\"alert alert-danger\" ng-if=\"!ctrl.possibleChannels.length\">\n" +
|
|
|
|
|
5897
|
" <span class=\"fa fa-exclamation-triangle \"></span>You need to create an alert channel before you can assign it to your rule.\n" +
|
|
5844
|
" </div>\n" +
|
|
5898
|
" </div>\n" +
|
|
|
|
|
5899
|
"\n" +
|
|
5845
|
" </div>\n" +
|
|
5900
|
" </div>\n" +
|
|
|
|
|
5901
|
" <hr/>\n" +
|
|
|
|
|
5902
|
" <p>Meeting following criteria:</p>\n" +
|
|
|
|
|
5903
|
" <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
|
|
|
|
|
5904
|
" <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
|
|
5846
|
" </div>\n" +
|
|
5905
|
" </div>\n" +
|
|
5847
|
" <div class=\"row\">\n" +
|
|
5906
|
"</div>\n"
|
|
5848
|
" <div class=\"col-sm-12\">\n" +
|
|
5907
|
);
|
|
|
|
|
5908
|
|
|
|
|
|
5909
|
|
|
|
|
|
5910
|
$templateCache.put('directives/rule_read_only/rule_read_only.html',
|
|
|
|
|
5911
|
"<div class=\"rule-read-only\">\n" +
|
|
5849
|
"\n" +
|
|
5912
|
"\n" +
|
|
5850
|
" <div class=\"panel panel-default\">\n" +
|
|
5913
|
" <span class=\"form-group\">\n" +
|
|
5851
|
" <div class=\"panel-body\">\n" +
|
|
5914
|
" {{rule_ctrlr.readOnlyPossibleFields[rule_ctrlr.rule.field]}}\n" +
|
|
|
|
|
5915
|
" </span>\n" +
|
|
5852
|
"\n" +
|
|
5916
|
"\n" +
|
|
5853
|
" <uib-tabset>\n" +
|
|
5917
|
" <span ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\">\n" +
|
|
5854
|
" <uib-tab>\n" +
|
|
5918
|
" is {{rule_ctrlr.ruleDefinitions.allOps[rule_ctrlr.rule.op]}} {{rule_ctrlr.rule.value}}\n" +
|
|
5855
|
" <uib-tab-heading>\n" +
|
|
5919
|
" </span>\n" +
|
|
5856
|
" Postgresql Tables\n" +
|
|
|
|
|
5857
|
" </uib-tab-heading>\n" +
|
|
|
|
|
5858
|
"\n" +
|
|
5920
|
"\n" +
|
|
5859
|
" <table class=\"table table-striped\">\n" +
|
|
5921
|
" <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
|
|
5860
|
" <thead>\n" +
|
|
5922
|
" <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
|
|
5861
|
" <tr>\n" +
|
|
5923
|
" <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
|
|
5862
|
" <th class=\"c1 tablename\">Table name</th>\n" +
|
|
|
|
|
5863
|
" <th class=\"c2 size_human\">Size</th>\n" +
|
|
|
|
|
5864
|
" </tr>\n" +
|
|
|
|
|
5865
|
" </thead>\n" +
|
|
|
|
|
5866
|
" <tbody>\n" +
|
|
|
|
|
5867
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in system.DBtables\">\n" +
|
|
|
|
|
5868
|
" <td class=\"c1\">{{row.table_name}}</td>\n" +
|
|
|
|
|
5869
|
" <td class=\"c2\">{{row.size_human}}</td>\n" +
|
|
|
|
|
5870
|
" </tr>\n" +
|
|
|
|
|
5871
|
" </tbody>\n" +
|
|
|
|
|
5872
|
" </table>\n" +
|
|
|
|
|
5873
|
"\n" +
|
|
5924
|
"\n" +
|
|
5874
|
" </uib-tab>\n" +
|
|
5925
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5926
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5927
|
" <recursive>\n" +
|
|
|
|
|
5928
|
" <rule-read-only rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"rule_ctrlr.parentObj\"></rule-read-only>\n" +
|
|
|
|
|
5929
|
" </recursive>\n" +
|
|
|
|
|
5930
|
" </div>\n" +
|
|
|
|
|
5931
|
" </div>\n" +
|
|
|
|
|
5932
|
" </div>\n" +
|
|
5875
|
"\n" +
|
|
5933
|
"\n" +
|
|
5876
|
" <uib-tab>\n" +
|
|
5934
|
" </span>\n" +
|
|
5877
|
" <uib-tab-heading>\n" +
|
|
5935
|
"</div>\n"
|
|
5878
|
" Elasticsearch Indices\n" +
|
|
5936
|
);
|
|
5879
|
" </uib-tab-heading>\n" +
|
|
5937
|
|
|
|
|
|
5938
|
|
|
|
|
|
5939
|
$templateCache.put('directives/rule/rule.html',
|
|
|
|
|
5940
|
"<div class=\"rule form-inline\">\n" +
|
|
5880
|
"\n" +
|
|
5941
|
"\n" +
|
|
5881
|
" <table class=\"table table-striped\">\n" +
|
|
5942
|
" <div class=\"form-group\">\n" +
|
|
5882
|
" <thead>\n" +
|
|
5943
|
" <select class=\"form-control\"\n" +
|
|
5883
|
" <tr>\n" +
|
|
5944
|
" ng-model=\"rule_ctrlr.rule.field\"\n" +
|
|
5884
|
" <th class=\"c1 tablename\">Index name</th>\n" +
|
|
5945
|
" ng-change=\"rule_ctrlr.fieldChange()\"\n" +
|
|
5885
|
" <th class=\"c2 size_human\">Size</th>\n" +
|
|
5946
|
" ng-options=\"key as label for (key, label) in rule_ctrlr.ruleDefinitions.possibleFields\"></select>\n" +
|
|
5886
|
" </tr>\n" +
|
|
5947
|
" </div>\n" +
|
|
5887
|
" </thead>\n" +
|
|
|
|
|
5888
|
" <tbody>\n" +
|
|
|
|
|
5889
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in system.ESIndices\">\n" +
|
|
|
|
|
5890
|
" <td class=\"c1\">{{row.name}}</td>\n" +
|
|
|
|
|
5891
|
" <td class=\"c2\">{{row.size_human}}</td>\n" +
|
|
|
|
|
5892
|
" </tr>\n" +
|
|
|
|
|
5893
|
" </tbody>\n" +
|
|
|
|
|
5894
|
" </table>\n" +
|
|
|
|
|
5895
|
"\n" +
|
|
5948
|
"\n" +
|
|
5896
|
" </uib-tab>\n" +
|
|
5949
|
" <div ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\" class=\"form-group\">\n" +
|
|
5897
|
"\n" +
|
|
5950
|
"\n" +
|
|
5898
|
" <uib-tab>\n" +
|
|
5951
|
" <select ng-model=\"rule_ctrlr.rule.op\" class=\"form-control\"\n" +
|
|
5899
|
" <uib-tab-heading>\n" +
|
|
5952
|
" ng-change=\"rule_ctrlr.setDirty()\"\n" +
|
|
5900
|
" Processes\n" +
|
|
5953
|
" ng-options=\"op as rule_ctrlr.ruleDefinitions.allOps[op] for op in rule_ctrlr.ruleDefinitions.fieldOps[rule_ctrlr.rule.field]\">\n" +
|
|
5901
|
" </uib-tab-heading>\n" +
|
|
5954
|
" </select>\n" +
|
|
5902
|
"\n" +
|
|
5955
|
"\n" +
|
|
5903
|
" <table class=\"table table-striped\">\n" +
|
|
5956
|
" <input type=\"text\" placeholder=\"Value\" ng-model=\"rule_ctrlr.rule.value\" ng-change=\"rule_ctrlr.setDirty()\" class=\"form-control\">\n" +
|
|
5904
|
" <thead>\n" +
|
|
|
|
|
5905
|
" <tr>\n" +
|
|
|
|
|
5906
|
" <th class=\"c1 tablename\">Owner</th>\n" +
|
|
|
|
|
5907
|
" <th class=\"c2 tablename\">PID</th>\n" +
|
|
|
|
|
5908
|
" <th class=\"c3 tablename\">CPU</th>\n" +
|
|
|
|
|
5909
|
" <th class=\"c4 tablename\">MEM</th>\n" +
|
|
|
|
|
5910
|
" <th class=\"c4 tablename\">Name</th>\n" +
|
|
|
|
|
5911
|
" </tr>\n" +
|
|
|
|
|
5912
|
" </thead>\n" +
|
|
|
|
|
5913
|
" <tbody>\n" +
|
|
|
|
|
5914
|
" <tr class=\"r{{$index}}\" ng-repeat-start=\"row in system.processInfo\">\n" +
|
|
|
|
|
5915
|
" <td class=\"c1\">{{row.owner}}</td>\n" +
|
|
|
|
|
5916
|
" <td class=\"c2\">{{row.pid}}</td>\n" +
|
|
|
|
|
5917
|
" <td class=\"c3\">{{row.cpu}}</td>\n" +
|
|
|
|
|
5918
|
" <td class=\"c4\">{{row.mem_usage}} ({{row.mem_percentage}}%)</td>\n" +
|
|
|
|
|
5919
|
" <td class=\"c5\"><strong>{{row.name}}</strong></td>\n" +
|
|
|
|
|
5920
|
" </tr>\n" +
|
|
|
|
|
5921
|
" <tr ng-repeat-end>\n" +
|
|
|
|
|
5922
|
" <td colspan=\"5\" class=\"word-wrap\">{{row.command}}</td>\n" +
|
|
|
|
|
5923
|
" </tr>\n" +
|
|
|
|
|
5924
|
" </tbody>\n" +
|
|
|
|
|
5925
|
" </table>\n" +
|
|
|
|
|
5926
|
"\n" +
|
|
5957
|
"\n" +
|
|
5927
|
" </uib-tab>\n" +
|
|
5958
|
" </div>\n" +
|
|
5928
|
"\n" +
|
|
5959
|
"\n" +
|
|
5929
|
" <uib-tab>\n" +
|
|
5960
|
" <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
|
|
5930
|
" <uib-tab-heading>\n" +
|
|
5961
|
" <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
|
|
5931
|
" Python packages\n" +
|
|
5962
|
" <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
|
|
5932
|
" </uib-tab-heading>\n" +
|
|
5963
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
5964
|
" <div class=\"panel-body form-inline\">\n" +
|
|
|
|
|
5965
|
" <recursive>\n" +
|
|
|
|
|
5966
|
" <rule rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"rule_ctrlr.rule\" parent-obj=\"rule_ctrlr.parentObj\"></rule>\n" +
|
|
|
|
|
5967
|
" </recursive>\n" +
|
|
|
|
|
5968
|
" </div>\n" +
|
|
|
|
|
5969
|
" </div>\n" +
|
|
|
|
|
5970
|
" </div>\n" +
|
|
5933
|
"\n" +
|
|
5971
|
"\n" +
|
|
5934
|
" <table class=\"table\">\n" +
|
|
5972
|
" <span ng-if=\"(rule_ctrlr.config.disable_subrules == false) == false\" class=\"btn btn-info\" ng-click=\"rule_ctrlr.add()\"><span class=\"fa fa-plus-circle\"></span> Add rule</span>\n" +
|
|
5935
|
" <tr ng-repeat=\"package in system.packages\">\n" +
|
|
|
|
|
5936
|
" <td>{{package.name}}</td>\n" +
|
|
|
|
|
5937
|
" <td>{{package.version}}</td>\n" +
|
|
|
|
|
5938
|
" </tr>\n" +
|
|
|
|
|
5939
|
" </table>\n" +
|
|
|
|
|
5940
|
" </p>\n" +
|
|
|
|
|
5941
|
"\n" +
|
|
5973
|
"\n" +
|
|
5942
|
" </uib-tab>\n" +
|
|
5974
|
" </span>\n" +
|
|
|
|
|
5975
|
" <div class=\"pull-right\" ng-if=\"rule_ctrlr.parentRule\">\n" +
|
|
|
|
|
5976
|
" <span class=\"dropdown\" data-uib-dropdown>\n" +
|
|
|
|
|
5977
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
5978
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
5979
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
5980
|
" <li><a ng-click=\"rule_ctrlr.deleteRule(rule_ctrlr.parentRule, rule_ctrlr.rule)\">Yes</a></li>\n" +
|
|
|
|
|
5981
|
" </ul>\n" +
|
|
|
|
|
5982
|
" </span>\n" +
|
|
|
|
|
5983
|
" </div>\n" +
|
|
|
|
|
5984
|
"</div>\n"
|
|
|
|
|
5985
|
);
|
|
|
|
|
5986
|
|
|
|
|
|
5987
|
|
|
|
|
|
5988
|
$templateCache.put('templates/admin/applications/applications_list.html',
|
|
|
|
|
5989
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"applications.loading.applications\"></ng-include>\n" +
|
|
5943
|
"\n" +
|
|
5990
|
"\n" +
|
|
5944
|
" </uib-tabset>\n" +
|
|
5991
|
"<div class=\"panel panel-default\" ng-if=\"!applications.loading.applications\">\n" +
|
|
|
|
|
5992
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
5993
|
"\n" +
|
|
|
|
|
5994
|
" Currently active applications: {{applications.applications.length}}\n" +
|
|
|
|
|
5995
|
"\n" +
|
|
|
|
|
5996
|
" </div>\n" +
|
|
|
|
|
5997
|
"\n" +
|
|
|
|
|
5998
|
" <table st-table=\"displayedCollection\" st-safe-src=\"applications.applications\" class=\"table table-striped\">\n" +
|
|
|
|
|
5999
|
" <thead>\n" +
|
|
|
|
|
6000
|
" <tr>\n" +
|
|
|
|
|
6001
|
" <th st-sort=\"resource_name\"><a>Application name</a></th>\n" +
|
|
|
|
|
6002
|
" <th st-sort=\"owner_user_name\"><a>Owner User</a></th>\n" +
|
|
|
|
|
6003
|
" <th st-sort=\"owner_group_name\"><a>Owner Group</a></th>\n" +
|
|
|
|
|
6004
|
" <th class=\"options\"></th>\n" +
|
|
|
|
|
6005
|
" </tr>\n" +
|
|
|
|
|
6006
|
" <tr>\n" +
|
|
|
|
|
6007
|
" <th><input st-search=\"resource_name\" placeholder=\"search for application\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6008
|
" <th><input st-search=\"owner_user_name\" placeholder=\"search for user\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6009
|
" <th><input st-search=\"owner_group_name\" placeholder=\"search for group\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6010
|
" <th></th>\n" +
|
|
|
|
|
6011
|
" </tr>\n" +
|
|
|
|
|
6012
|
" </thead>\n" +
|
|
|
|
|
6013
|
" <tbody>\n" +
|
|
|
|
|
6014
|
"\n" +
|
|
|
|
|
6015
|
" <tr ng-repeat=\"resource in displayedCollection track by resource.resource_id\">\n" +
|
|
|
|
|
6016
|
" <td> {{resource.resource_name}}</td>\n" +
|
|
|
|
|
6017
|
" <td>{{resource.owner_user_name}}</td>\n" +
|
|
|
|
|
6018
|
" <td>{{resource.owner_group_name}}</td>\n" +
|
|
|
|
|
6019
|
" <td>\n" +
|
|
|
|
|
6020
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"applications.update({resourceId:resource.resource_id})\" data-toggle=\"tooltip\" title=\"Update application\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
|
|
|
6021
|
" </td>\n" +
|
|
|
|
|
6022
|
" </tr>\n" +
|
|
|
|
|
6023
|
" <tfoot>\n" +
|
|
|
|
|
6024
|
" <tr>\n" +
|
|
|
|
|
6025
|
" <td colspan=\"4\" class=\"text-center\">\n" +
|
|
|
|
|
6026
|
" <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
|
|
|
|
|
6027
|
" </td>\n" +
|
|
|
|
|
6028
|
" </tr>\n" +
|
|
|
|
|
6029
|
" </tfoot>\n" +
|
|
|
|
|
6030
|
" </tbody>\n" +
|
|
|
|
|
6031
|
" </table>\n" +
|
|
|
|
|
6032
|
"\n" +
|
|
|
|
|
6033
|
"</div>\n"
|
|
|
|
|
6034
|
);
|
|
|
|
|
6035
|
|
|
|
|
|
6036
|
|
|
|
|
|
6037
|
$templateCache.put('templates/admin/configs/edit.html',
|
|
|
|
|
6038
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"configs.loading.config\"></ng-include>\n" +
|
|
|
|
|
6039
|
"\n" +
|
|
|
|
|
6040
|
"<div class=\"panel panel-default\" ng-show=\"!configs.loading.config\">\n" +
|
|
|
|
|
6041
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
6042
|
" <h3 class=\"panel-title\">Basic Configuration</h3>\n" +
|
|
|
|
|
6043
|
" </div>\n" +
|
|
|
|
|
6044
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
6045
|
" <h2>Visual</h2>\n" +
|
|
|
|
|
6046
|
" <form class=\"form-horizontal\">\n" +
|
|
|
|
|
6047
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6048
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6049
|
" Footer HTML\n" +
|
|
|
|
|
6050
|
" </label>\n" +
|
|
|
|
|
6051
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6052
|
" <textarea class=\"form-control\" type=\"text\" ng-model=\"configs.configs.global.template_footer_html.value\" style=\"min-height: 150px\"></textarea>\n" +
|
|
5945
|
" </div>\n" +
|
|
6053
|
" </div>\n" +
|
|
5946
|
" </div>\n" +
|
|
6054
|
" </div>\n" +
|
|
5947
|
" </div>\n" +
|
|
6055
|
" </form>\n" +
|
|
|
|
|
6056
|
"\n" +
|
|
|
|
|
6057
|
" <h2>Functional</h2>\n" +
|
|
|
|
|
6058
|
"\n" +
|
|
|
|
|
6059
|
" <form class=\"form-horizontal\">\n" +
|
|
|
|
|
6060
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6061
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6062
|
" Show user groups to non-admin users\n" +
|
|
|
|
|
6063
|
" </label>\n" +
|
|
|
|
|
6064
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6065
|
" <button type=\"button\" class=\"btn btn-default\" ng-model=\"configs.configs.global.list_groups_to_non_admins.value\" uib-btn-checkbox>\n" +
|
|
|
|
|
6066
|
" Enable\n" +
|
|
|
|
|
6067
|
" </button>\n" +
|
|
|
|
|
6068
|
" </div>\n" +
|
|
|
|
|
6069
|
" </div>\n" +
|
|
|
|
|
6070
|
" </form>\n" +
|
|
|
|
|
6071
|
"\n" +
|
|
|
|
|
6072
|
" <h2>Global Rate Limiting</h2>\n" +
|
|
|
|
|
6073
|
"\n" +
|
|
|
|
|
6074
|
" <form class=\"form-horizontal\">\n" +
|
|
|
|
|
6075
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6076
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6077
|
" Ignore reports per minute/per application\n" +
|
|
|
|
|
6078
|
" </label>\n" +
|
|
|
|
|
6079
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6080
|
" <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_reports_rate_limit.value\" />\n" +
|
|
|
|
|
6081
|
" </div>\n" +
|
|
|
|
|
6082
|
" </div>\n" +
|
|
|
|
|
6083
|
"\n" +
|
|
|
|
|
6084
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6085
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6086
|
" Ignore logs per minute/per application\n" +
|
|
|
|
|
6087
|
" </label>\n" +
|
|
|
|
|
6088
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6089
|
" <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_logs_rate_limit.value\" />\n" +
|
|
|
|
|
6090
|
" </div>\n" +
|
|
|
|
|
6091
|
" </div>\n" +
|
|
|
|
|
6092
|
"\n" +
|
|
|
|
|
6093
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6094
|
" <label class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6095
|
" Ignore metrics per minute/per application\n" +
|
|
|
|
|
6096
|
" </label>\n" +
|
|
|
|
|
6097
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6098
|
" <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_metrics_rate_limit.value\" />\n" +
|
|
|
|
|
6099
|
" </div>\n" +
|
|
|
|
|
6100
|
" </div>\n" +
|
|
|
|
|
6101
|
"\n" +
|
|
|
|
|
6102
|
" </form>\n" +
|
|
|
|
|
6103
|
"\n" +
|
|
|
|
|
6104
|
" <hr/>\n" +
|
|
|
|
|
6105
|
"\n" +
|
|
|
|
|
6106
|
" <a class=\"btn btn-primary\" ng-click=\"configs.save()\">Save configuration</a>\n" +
|
|
|
|
|
6107
|
" </div>\n" +
|
|
|
|
|
6108
|
"\n" +
|
|
|
|
|
6109
|
"</div>\n" +
|
|
|
|
|
6110
|
"\n" +
|
|
|
|
|
6111
|
"\n" +
|
|
|
|
|
6112
|
"<div class=\"panel panel-default\">\n" +
|
|
|
|
|
6113
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
6114
|
" <h3 class=\"panel-title\">Plugin Configuration</h3>\n" +
|
|
|
|
|
6115
|
" </div>\n" +
|
|
|
|
|
6116
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
6117
|
" <plugin-config section=\"'admin.config'\">\n" +
|
|
|
|
|
6118
|
" </plugin-config>\n" +
|
|
5948
|
" </div>\n" +
|
|
6119
|
" </div>\n" +
|
|
5949
|
"</div>\n"
|
|
6120
|
"</div>\n"
|
|
5950
|
);
|
|
6121
|
);
|
|
5951
|
|
|
6122
|
|
|
5952
|
|
|
6123
|
|
|
5953
|
$templateCache.put('templates/admin/users/parent_view.html',
|
|
6124
|
$templateCache.put('templates/admin/configs/parent_view.html',
|
|
5954
|
"<div ui-view></div>"
|
|
6125
|
"<div ui-view></div>"
|
|
5955
|
);
|
|
6126
|
);
|
|
5956
|
|
|
6127
|
|
|
5957
|
|
|
6128
|
|
|
5958
|
$templateCache.put('templates/admin/users/users_create.html',
|
|
6129
|
$templateCache.put('templates/admin/groups/groups_create.html',
|
|
5959
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"user.loading.user\"></ng-include>\n" +
|
|
6130
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"group.loading.group\"></ng-include>\n" +
|
|
5960
|
"\n" +
|
|
6131
|
"\n" +
|
|
5961
|
"<div ng-show=\"!user.loading.user\">\n" +
|
|
6132
|
"<div ng-show=\"!group.loading.group\">\n" +
|
|
5962
|
"\n" +
|
|
6133
|
"\n" +
|
|
5963
|
" <div class=\"panel panel-default\">\n" +
|
|
6134
|
" <div class=\"panel panel-default\">\n" +
|
|
5964
|
" <div class=\"panel-body\">\n" +
|
|
6135
|
" <div class=\"panel-body\">\n" +
|
|
5965
|
"\n" +
|
|
6136
|
" <form name=\"group.groupForm\" class=\"form-horizontal\" ng-submit=\"group.createGroup()\">\n" +
|
|
5966
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"user.user.id\">\n" +
|
|
6137
|
" <div class=\"form-group\" id=\"row-group_name\">\n" +
|
|
5967
|
" <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-user-secret\"></span> Re-login to user</a>\n" +
|
|
6138
|
" <data-form-errors errors=\"group.groupForm.ae_validation.group_name\"></data-form-errors>\n" +
|
|
5968
|
" <ul class=\"dropdown-menu\">\n" +
|
|
6139
|
" <label for=\"group_name\" id=\"label-group_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5969
|
" <li><a>No</a></li>\n" +
|
|
6140
|
" Group name\n" +
|
|
5970
|
" <li><a ng-click=\"user.reloginUser(user)\">Yes</a></li>\n" +
|
|
|
|
|
5971
|
" </ul>\n" +
|
|
|
|
|
5972
|
" </span>\n" +
|
|
|
|
|
5973
|
"\n" +
|
|
|
|
|
5974
|
" <form name=\"user.profileForm\" class=\"form-horizontal\" ng-submit=\"user.createUser()\">\n" +
|
|
|
|
|
5975
|
" <div class=\"form-group\" id=\"row-user_name\">\n" +
|
|
|
|
|
5976
|
" <data-form-errors errors=\"user.profileForm.ae_validation.user_name\"></data-form-errors>\n" +
|
|
|
|
|
5977
|
" <label for=\"user_name\" id=\"label-user_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
5978
|
" User name\n" +
|
|
|
|
|
5979
|
" <span class=\"required\">*</span>\n" +
|
|
6141
|
" <span class=\"required\">*</span>\n" +
|
|
5980
|
" </label>\n" +
|
|
6142
|
" </label>\n" +
|
|
5981
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
6143
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5982
|
" <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"user.user.user_name\">\n" +
|
|
6144
|
" <input class=\"form-control\" id=\"group_name\" name=\"group_name\" type=\"text\" ng-model=\"group.group.group_name\">\n" +
|
|
5983
|
" </div>\n" +
|
|
6145
|
" </div>\n" +
|
|
5984
|
" </div>\n" +
|
|
6146
|
" </div>\n" +
|
|
5985
|
"\n" +
|
|
6147
|
"\n" +
|
|
5986
|
" <div class=\"form-group\" id=\"row-user_password\">\n" +
|
|
6148
|
" <div class=\"form-group\" id=\"row-description\">\n" +
|
|
5987
|
" <data-form-errors errors=\"user.profileForm.ae_validation.user_password\"></data-form-errors>\n" +
|
|
6149
|
" <data-form-errors errors=\"group.groupForm.ae_validation.description\"></data-form-errors>\n" +
|
|
5988
|
" <label for=\"user_password\" id=\"label-user_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
6150
|
" <label for=\"description\" id=\"label-description\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
5989
|
" Password\n" +
|
|
6151
|
" Description\n" +
|
|
5990
|
" <span class=\"required\">*</span>\n" +
|
|
6152
|
" <span class=\"required\">*</span>\n" +
|
|
5991
|
" </label>\n" +
|
|
6153
|
" </label>\n" +
|
|
5992
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
6154
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
5993
|
" <input class=\"form-control\" id=\"user_password\" name=\"user_password\" type=\"password\" ng-model=\"user.user.user_password\">\n" +
|
|
6155
|
" <input class=\"form-control\" id=\"description\" name=\"description\" type=\"text\" ng-model=\"group.group.description\">\n" +
|
|
5994
|
"\n" +
|
|
|
|
|
5995
|
" <p class=\"m-t-1\"><a class=\"btn btn-info btn-sm\" ng-click=\"user.generatePassword()\"><span class=\"fa fa-lock\"></span> Generate password</a>\n" +
|
|
|
|
|
5996
|
" <span ng-show=\"user.gen_pass.length > 0\">(generated password: {{user.gen_pass}})</span>\n" +
|
|
|
|
|
5997
|
" </p>\n" +
|
|
|
|
|
5998
|
"\n" +
|
|
|
|
|
5999
|
" </div>\n" +
|
|
6156
|
" </div>\n" +
|
|
6000
|
" </div>\n" +
|
|
6157
|
" </div>\n" +
|
|
6001
|
"\n" +
|
|
6158
|
"\n" +
|
|
6002
|
"\n" +
|
|
6159
|
"\n" +
|
|
6003
|
" <div class=\"form-group\" id=\"row-email\">\n" +
|
|
6160
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
6004
|
" <data-form-errors errors=\"user.profileForm.ae_validation.email\"></data-form-errors>\n" +
|
|
6161
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
6005
|
" <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6006
|
" Email Address\n" +
|
|
|
|
|
6007
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
6008
|
" </label>\n" +
|
|
6162
|
" </label>\n" +
|
|
6009
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
6163
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
6010
|
" <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"user.user.email\">\n" +
|
|
6164
|
" <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.groupId ? 'Update' : 'Add'}} Group\">\n" +
|
|
6011
|
" </div>\n" +
|
|
6165
|
" </div>\n" +
|
|
6012
|
" </div>\n" +
|
|
6166
|
" </div>\n" +
|
|
|
|
|
6167
|
" </form>\n" +
|
|
|
|
|
6168
|
" </div>\n" +
|
|
|
|
|
6169
|
" </div>\n" +
|
|
6013
|
"\n" +
|
|
6170
|
"\n" +
|
|
6014
|
" <div class=\"form-group\" id=\"row-first_name\">\n" +
|
|
|
|
|
6015
|
" <data-form-errors errors=\"user.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
|
|
|
|
|
6016
|
" <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6017
|
" First Name\n" +
|
|
|
|
|
6018
|
" </label>\n" +
|
|
|
|
|
6019
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6020
|
" <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"user.user.first_name\">\n" +
|
|
|
|
|
6021
|
" </div>\n" +
|
|
|
|
|
6022
|
" </div>\n" +
|
|
|
|
|
6023
|
" <div class=\"form-group\" id=\"row-last_name\">\n" +
|
|
|
|
|
6024
|
" <data-form-errors errors=\"user.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
|
|
|
|
|
6025
|
" <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6026
|
" Last Name\n" +
|
|
|
|
|
6027
|
" </label>\n" +
|
|
|
|
|
6028
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6029
|
" <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"user.user.last_name\">\n" +
|
|
|
|
|
6030
|
" </div>\n" +
|
|
|
|
|
6031
|
" </div>\n" +
|
|
|
|
|
6032
|
"\n" +
|
|
|
|
|
6033
|
" <div class=\"form-group\" id=\"row-status\">\n" +
|
|
|
|
|
6034
|
" <data-form-errors errors=\"user.profileForm.ae_validation.status\"></data-form-errors>\n" +
|
|
|
|
|
6035
|
" <label for=\"status\" id=\"label-status\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6036
|
" Active\n" +
|
|
|
|
|
6037
|
" </label>\n" +
|
|
|
|
|
6038
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6039
|
" <input checked class=\"form-control\" id=\"status\" name=\"status\" type=\"checkbox\" ng-model=\"user.user.status\">\n" +
|
|
|
|
|
6040
|
" </div>\n" +
|
|
|
|
|
6041
|
" </div>\n" +
|
|
|
|
|
6042
|
"\n" +
|
|
|
|
|
6043
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
|
|
|
6044
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6045
|
" </label>\n" +
|
|
|
|
|
6046
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6047
|
" <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.userId ? 'Update' : 'Add'}} User\">\n" +
|
|
|
|
|
6048
|
" </div>\n" +
|
|
|
|
|
6049
|
" </div>\n" +
|
|
|
|
|
6050
|
" </form>\n" +
|
|
|
|
|
6051
|
" </div>\n" +
|
|
|
|
|
6052
|
" </div>\n" +
|
|
|
|
|
6053
|
"\n" +
|
|
6171
|
"\n" +
|
|
6054
|
"\n" +
|
|
6172
|
" <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
|
|
6055
|
" <div class=\"panel panel-default\" ng-if=\"user.user.id\">\n" +
|
|
|
|
|
6056
|
" <div class=\"panel-heading\">\n" +
|
|
6173
|
" <div class=\"panel-heading\">\n" +
|
|
6057
|
" <h3 class=\"panel-title\">Permission Summary</h3>\n" +
|
|
6174
|
" <h3 class=\"panel-title\">Permissions summary</h3>\n" +
|
|
6058
|
" </div>\n" +
|
|
6175
|
" </div>\n" +
|
|
6059
|
" <div class=\"panel-body\">\n" +
|
|
6176
|
" <div class=\"panel-body\">\n" +
|
|
6060
|
" <h3>Direct application permissions</h3>\n" +
|
|
6177
|
" <h3>Direct application permissions</h3>\n" +
|
|
6061
|
"\n" +
|
|
6178
|
"\n" +
|
|
6062
|
" <ul class=\"list-group\">\n" +
|
|
6179
|
" <ul class=\"list-group\">\n" +
|
|
6063
|
" <li ng-repeat=\"perm in user.resourcePermissions.user.application\" class=\"animate-repeat list-group-item\">\n" +
|
|
6180
|
" <li ng-repeat=\"perm in group.resourcePermissions.group.application\" class=\"animate-repeat list-group-item\">\n" +
|
|
6064
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
6181
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
|
|
|
6182
|
"\n" +
|
|
6065
|
" <div class=\"pull-right\">\n" +
|
|
6183
|
" <div class=\"pull-right\">\n" +
|
|
6066
|
"\n" +
|
|
6184
|
"\n" +
|
|
6067
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
6185
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
@@
-6076,10
+6194,10
b' function kickstartAE(initialUserData) {'
|
|
6076
|
" <h3>Direct dashboard permissions</h3>\n" +
|
|
6194
|
" <h3>Direct dashboard permissions</h3>\n" +
|
|
6077
|
"\n" +
|
|
6195
|
"\n" +
|
|
6078
|
" <ul class=\"list-group\">\n" +
|
|
6196
|
" <ul class=\"list-group\">\n" +
|
|
6079
|
" <li ng-repeat=\"perm in user.resourcePermissions.user.dashboard\" class=\"animate-repeat list-group-item\">\n" +
|
|
6197
|
" <li ng-repeat=\"perm in group.resourcePermissions.group.dashboard\" class=\"animate-repeat list-group-item\">\n" +
|
|
6080
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
6198
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
6081
|
" <div class=\"pull-right\">\n" +
|
|
|
|
|
6082
|
"\n" +
|
|
6199
|
"\n" +
|
|
|
|
|
6200
|
" <div class=\"pull-right\">\n" +
|
|
6083
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
6201
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
6084
|
"\n" +
|
|
6202
|
"\n" +
|
|
6085
|
" <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
|
|
6203
|
" <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
|
|
@@
-6094,32
+6212,33
b' function kickstartAE(initialUserData) {'
|
|
6094
|
" </div>\n" +
|
|
6212
|
" </div>\n" +
|
|
6095
|
"\n" +
|
|
6213
|
"\n" +
|
|
6096
|
"\n" +
|
|
6214
|
"\n" +
|
|
6097
|
"</div>\n"
|
|
6215
|
" <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
|
|
6098
|
);
|
|
|
|
|
6099
|
|
|
|
|
|
6100
|
|
|
|
|
|
6101
|
$templateCache.put('templates/admin/users/users_list.html',
|
|
|
|
|
6102
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"users.loading.users\"></ng-include>\n" +
|
|
|
|
|
6103
|
"\n" +
|
|
|
|
|
6104
|
"<div ng-show=\"!users.loading.users\">\n" +
|
|
|
|
|
6105
|
"\n" +
|
|
|
|
|
6106
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
6107
|
"\n" +
|
|
|
|
|
6108
|
" <div class=\"panel-heading\">\n" +
|
|
6216
|
" <div class=\"panel-heading\">\n" +
|
|
6109
|
" {{users.activeUsers}} active out of {{users.users.length}} users\n" +
|
|
6217
|
" <h3 class=\"panel-title\">User list</h3>\n" +
|
|
6110
|
" </div>\n" +
|
|
6218
|
" </div>\n" +
|
|
|
|
|
6219
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
6220
|
"\n" +
|
|
|
|
|
6221
|
" <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"group.addUser()\">\n" +
|
|
|
|
|
6222
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6223
|
" <input placeholder=\"Username or email\" type=\"text\" class=\"autocomplete form-control\" ng-model=\"group.form.autocompleteUser\" uib-typeahead=\"u for u in group.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"searchingUsers\" typeahead-wait-ms=\"250\"/>\n" +
|
|
|
|
|
6224
|
" </div>\n" +
|
|
|
|
|
6225
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6226
|
" <button class=\"btn btn-info\" ng-disabled=\"!group.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Add user</button>\n" +
|
|
|
|
|
6227
|
" </div>\n" +
|
|
|
|
|
6228
|
" </form>\n" +
|
|
6111
|
"\n" +
|
|
6229
|
"\n" +
|
|
|
|
|
6230
|
" </div>\n" +
|
|
6112
|
"\n" +
|
|
6231
|
"\n" +
|
|
6113
|
" <table st-table=\"displayedCollection\" st-safe-src=\"users.users\" class=\"table table-striped\">\n" +
|
|
6232
|
" <table st-table=\"displayedCollection\" st-safe-src=\"group.users\" class=\"table table-striped\">\n" +
|
|
6114
|
" <thead>\n" +
|
|
6233
|
" <thead>\n" +
|
|
6115
|
" <tr>\n" +
|
|
6234
|
" <tr>\n" +
|
|
6116
|
" <th class=\"user_name\" st-sort=\"user_name\"><a>Username</a></th>\n" +
|
|
6235
|
" <th st-sort=\"user_name\"><a>Username</a></th>\n" +
|
|
6117
|
" <th class=\"email\" st-sort=\"email\"><a>Email</a></th>\n" +
|
|
6236
|
" <th st-sort=\"email\"><a>Email</a></th>\n" +
|
|
6118
|
" <th class=\"status\" st-sort=\"status\"><a>Status</a></th>\n" +
|
|
6237
|
" <th st-sort=\"status\"><a>Status</a></th>\n" +
|
|
6119
|
" <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
|
|
6238
|
" <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
|
|
6120
|
" <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
|
|
6239
|
" <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
|
|
6121
|
" <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
|
|
6240
|
" <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
|
|
6122
|
" <th class=\"options\"></th>\n" +
|
|
6241
|
" <th class=\"options\" style=\"width: 130px\"></th>\n" +
|
|
6123
|
" </tr>\n" +
|
|
6242
|
" </tr>\n" +
|
|
6124
|
" <tr>\n" +
|
|
6243
|
" <tr>\n" +
|
|
6125
|
" <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
6244
|
" <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
@@
-6133,959
+6252,838
b' function kickstartAE(initialUserData) {'
|
|
6133
|
" </thead>\n" +
|
|
6252
|
" </thead>\n" +
|
|
6134
|
" <tbody>\n" +
|
|
6253
|
" <tbody>\n" +
|
|
6135
|
"\n" +
|
|
6254
|
"\n" +
|
|
6136
|
" <tr ng-repeat=\"user in displayedCollection track by user.id\">\n" +
|
|
6255
|
" <tr ng-repeat=\"user in displayedCollection\">\n" +
|
|
6137
|
" <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
|
|
6256
|
" <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
|
|
6138
|
" <td class=\"word-wrap small\">{{user.email}}</td>\n" +
|
|
6257
|
" <td>{{user.email}}</td>\n" +
|
|
6139
|
" <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
|
|
6258
|
" <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
|
|
6140
|
" <td class=\"word-wrap small\">{{user.first_name}}</td>\n" +
|
|
6259
|
" <td>{{user.first_name}}</td>\n" +
|
|
6141
|
" <td class=\"word-wrap small\">{{user.last_name}}</td>\n" +
|
|
6260
|
" <td>{{user.last_name}}</td>\n" +
|
|
6142
|
" <td><span data-uib-tooltip=\"{{user.last_login_date}}\" class=\"small\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
|
|
6261
|
" <td><span data-uib-tooltip=\"{{user.last_login_date}}\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
|
|
6143
|
" <td>\n" +
|
|
6262
|
" <td>\n" +
|
|
6144
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
6263
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
6145
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
6264
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
6146
|
" <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
6265
|
" <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
6147
|
" <ul class=\"dropdown-menu\">\n" +
|
|
6266
|
" <ul class=\"dropdown-menu\">\n" +
|
|
6148
|
" <li><a>No</a></li>\n" +
|
|
6267
|
" <li><a>No</a></li>\n" +
|
|
6149
|
" <li><a ng-click=\"users.removeUser(user)\">Yes</a></li>\n" +
|
|
6268
|
" <li><a ng-click=\"group.removeUser(user)\">Yes</a></li>\n" +
|
|
6150
|
" </ul>\n" +
|
|
6269
|
" </ul>\n" +
|
|
6151
|
" </span>\n" +
|
|
6270
|
" </span>\n" +
|
|
6152
|
" </tr>\n" +
|
|
6271
|
" </tr>\n" +
|
|
6153
|
" <tfoot>\n" +
|
|
6272
|
" <tfoot>\n" +
|
|
6154
|
" <tr>\n" +
|
|
6273
|
" <tr>\n" +
|
|
6155
|
" <td colspan=\"6\" class=\"text-center\">\n" +
|
|
6274
|
" <td colspan=\"7\" class=\"text-center\">\n" +
|
|
6156
|
" <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
|
|
6275
|
" <div st-pagination=\"\" st-items-by-page=\"50\" st-displayed-pages=\"7\"></div>\n" +
|
|
6157
|
" </td>\n" +
|
|
6276
|
" </td>\n" +
|
|
6158
|
" </tr>\n" +
|
|
6277
|
" </tr>\n" +
|
|
6159
|
" </tfoot>\n" +
|
|
6278
|
" </tfoot>\n" +
|
|
6160
|
" </tbody>\n" +
|
|
6279
|
" </tbody>\n" +
|
|
6161
|
" </table>\n" +
|
|
6280
|
" </table>\n" +
|
|
6162
|
"\n" +
|
|
6281
|
"\n" +
|
|
6163
|
"\n" +
|
|
|
|
|
6164
|
" </div>\n" +
|
|
6282
|
" </div>\n" +
|
|
|
|
|
6283
|
"\n" +
|
|
|
|
|
6284
|
"\n" +
|
|
6165
|
"</div>\n"
|
|
6285
|
"</div>\n"
|
|
6166
|
);
|
|
6286
|
);
|
|
6167
|
|
|
6287
|
|
|
6168
|
|
|
6288
|
|
|
6169
|
$templateCache.put('templates/directives/search_type_ahead.html',
|
|
6289
|
$templateCache.put('templates/admin/groups/groups_list.html',
|
|
6170
|
"<a>\n" +
|
|
6290
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"groups.loading.groups\"></ng-include>\n" +
|
|
6171
|
" <span class=\"tag\" ng-show=\"match.model.tag\">{{match.model.tag}}</span>\n" +
|
|
|
|
|
6172
|
" <span class=\"tag\" ng-show=\"!match.model.tag\">{{match.label}}</span>\n" +
|
|
|
|
|
6173
|
" <span ng-show=\"match.model.example\">-</span> <span class=\"example\">{{match.model.example}}</span>\n" +
|
|
|
|
|
6174
|
" <div class=\"description\">{{match.model.description}}</div>\n" +
|
|
|
|
|
6175
|
"\n" +
|
|
6291
|
"\n" +
|
|
6176
|
"</a>\n"
|
|
6292
|
"<div class=\"panel panel-default\" ng-show=\"!groups.loading.groups\">\n" +
|
|
|
|
|
6293
|
"\n" +
|
|
|
|
|
6294
|
" <table st-table=\"displayedCollection\" st-safe-src=\"groups.groups\" class=\"table table-striped\">\n" +
|
|
|
|
|
6295
|
" <thead>\n" +
|
|
|
|
|
6296
|
" <tr>\n" +
|
|
|
|
|
6297
|
" <th st-sort=\"group_name\"><a>Group name</a></th>\n" +
|
|
|
|
|
6298
|
" <th st-sort=\"description\"><a>Description</a></th>\n" +
|
|
|
|
|
6299
|
" <th st-sort=\"members\"><a>Member count</a></th>\n" +
|
|
|
|
|
6300
|
" <th class=\"options\"></th>\n" +
|
|
|
|
|
6301
|
" </tr>\n" +
|
|
|
|
|
6302
|
" <tr>\n" +
|
|
|
|
|
6303
|
" <th><input st-search=\"group_name\" placeholder=\"search for group name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6304
|
" <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6305
|
" <th></th>\n" +
|
|
|
|
|
6306
|
" <th></th>\n" +
|
|
|
|
|
6307
|
" </tr>\n" +
|
|
|
|
|
6308
|
" </thead>\n" +
|
|
|
|
|
6309
|
" <tbody>\n" +
|
|
|
|
|
6310
|
"\n" +
|
|
|
|
|
6311
|
" <tr ng-repeat=\"group in displayedCollection track by group.id\">\n" +
|
|
|
|
|
6312
|
" <td>{{group.group_name}}</td>\n" +
|
|
|
|
|
6313
|
" <td>{{group.description}}</td>\n" +
|
|
|
|
|
6314
|
" <td>{{group.member_count}}</td>\n" +
|
|
|
|
|
6315
|
" <td>\n" +
|
|
|
|
|
6316
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.group.update({groupId:group.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
|
|
|
6317
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
6318
|
" <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
6319
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
6320
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
6321
|
" <li><a ng-click=\"groups.removeGroup(group)\">Yes</a></li>\n" +
|
|
|
|
|
6322
|
" </ul>\n" +
|
|
|
|
|
6323
|
" </span>\n" +
|
|
|
|
|
6324
|
" </tr>\n" +
|
|
|
|
|
6325
|
" <tfoot>\n" +
|
|
|
|
|
6326
|
" <tr>\n" +
|
|
|
|
|
6327
|
" <td colspan=\"4\" class=\"text-center\">\n" +
|
|
|
|
|
6328
|
" <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
|
|
|
|
|
6329
|
" </td>\n" +
|
|
|
|
|
6330
|
" </tr>\n" +
|
|
|
|
|
6331
|
" </tfoot>\n" +
|
|
|
|
|
6332
|
" </tbody>\n" +
|
|
|
|
|
6333
|
" </table>\n" +
|
|
|
|
|
6334
|
"\n" +
|
|
|
|
|
6335
|
"</div>\n" +
|
|
|
|
|
6336
|
"\n"
|
|
6177
|
);
|
|
6337
|
);
|
|
6178
|
|
|
6338
|
|
|
6179
|
|
|
6339
|
|
|
6180
|
$templateCache.put('templates/directives/user_search_type_ahead.html',
|
|
6340
|
$templateCache.put('templates/admin/groups/parent_view.html',
|
|
6181
|
"<a>\n" +
|
|
6341
|
"<div ui-view></div>"
|
|
6182
|
" <span>{{match.label}}</span> -\n" +
|
|
|
|
|
6183
|
" <span class=\"color-secondary\">{{match.model.name}}</span>\n" +
|
|
|
|
|
6184
|
"</a>\n"
|
|
|
|
|
6185
|
);
|
|
6342
|
);
|
|
6186
|
|
|
6343
|
|
|
6187
|
|
|
6344
|
|
|
6188
|
$templateCache.put('templates/integrations/bitbucket.html',
|
|
6345
|
$templateCache.put('templates/admin/parent_view.html',
|
|
6189
|
" <div class=\"modal-header\">\n" +
|
|
6346
|
"<div class=\"col-sm-3\" id=\"menu\">\n" +
|
|
6190
|
" <h3 class=\"m-t-0\">Add issue to Bitbucket</h3>\n" +
|
|
6347
|
" <div class=\"panel panel-default\">\n" +
|
|
6191
|
" </div>\n" +
|
|
6348
|
" <div class=\"panel-heading\">Users and groups</div>\n" +
|
|
6192
|
" <div class=\"modal-body\">\n" +
|
|
6349
|
" <ul class=\"list-group\">\n" +
|
|
6193
|
" <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
|
|
6350
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.list\"> Users</a></li>\n" +
|
|
6194
|
" <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
|
|
6351
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.create\"> Create user</a></li>\n" +
|
|
6195
|
" <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
|
|
6352
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.list\"> Groups</a></li>\n" +
|
|
6196
|
" </div>\n" +
|
|
6353
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.create\"> Create group</a></li>\n" +
|
|
|
|
|
6354
|
" </ul>\n" +
|
|
|
|
|
6355
|
" </div>\n" +
|
|
|
|
|
6356
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
6357
|
" <div class=\"panel-heading\">Resources</div>\n" +
|
|
|
|
|
6358
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
6359
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.application.list\"> List applications</a></li>\n" +
|
|
|
|
|
6360
|
" </ul>\n" +
|
|
|
|
|
6361
|
" </div>\n" +
|
|
6197
|
"\n" +
|
|
6362
|
"\n" +
|
|
6198
|
" <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
|
|
6363
|
" <div class=\"panel panel-default\">\n" +
|
|
6199
|
" <div class=\"form-group\">\n" +
|
|
6364
|
" <div class=\"panel-heading\">System</div>\n" +
|
|
6200
|
" <label for=\"issue_title\">Issue Title</label>\n" +
|
|
6365
|
" <ul class=\"list-group\">\n" +
|
|
6201
|
" <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
|
|
6366
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.configs.list\"> Config variables</a></li>\n" +
|
|
6202
|
" </div>\n" +
|
|
6367
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.system\"> System</a></li>\n" +
|
|
6203
|
" <div class=\"form-group row\">\n" +
|
|
6368
|
" <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.partitions\"> Partition Management</a></li>\n" +
|
|
6204
|
" <div class=\"col-sm-6\">\n" +
|
|
6369
|
" </ul>\n" +
|
|
6205
|
" <label for=\"issue_priority\">Priority</label>\n" +
|
|
6370
|
" </div>\n" +
|
|
6206
|
" <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
|
|
6371
|
"</div>\n" +
|
|
6207
|
" </div>\n" +
|
|
|
|
|
6208
|
"\n" +
|
|
6372
|
"\n" +
|
|
6209
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
6210
|
" <label for=\"issue_responsible\">Assignee</label>\n" +
|
|
|
|
|
6211
|
" <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
|
|
|
|
|
6212
|
" </div>\n" +
|
|
|
|
|
6213
|
" </div>\n" +
|
|
|
|
|
6214
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6215
|
" <label for=\"issue_content\">Description</label>\n" +
|
|
|
|
|
6216
|
" <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
|
|
|
|
|
6217
|
" </div>\n" +
|
|
|
|
|
6218
|
" </form>\n" +
|
|
|
|
|
6219
|
"\n" +
|
|
6373
|
"\n" +
|
|
6220
|
" </div>\n" +
|
|
6374
|
"<div class=\"col-sm-9\" ui-view></div>\n"
|
|
6221
|
" <div class=\"modal-footer\">\n" +
|
|
|
|
|
6222
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
|
|
|
|
|
6223
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
|
|
|
6224
|
" </div>\n"
|
|
|
|
|
6225
|
);
|
|
6375
|
);
|
|
6226
|
|
|
6376
|
|
|
6227
|
|
|
6377
|
|
|
6228
|
$templateCache.put('templates/integrations/github.html',
|
|
6378
|
$templateCache.put('templates/admin/partitions.html',
|
|
6229
|
" <div class=\"modal-header\">\n" +
|
|
6379
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"partitions.loading.partitions\"></ng-include>\n" +
|
|
6230
|
" <h3 class=\"m-t-0\">Add issue to Github</h3>\n" +
|
|
|
|
|
6231
|
" </div>\n" +
|
|
|
|
|
6232
|
" <div class=\"modal-body\">\n" +
|
|
|
|
|
6233
|
" <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
|
|
|
|
|
6234
|
"\n" +
|
|
6380
|
"\n" +
|
|
6235
|
" <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
|
|
6381
|
"<div ng-show=\"!partitions.loading.partitions\">\n" +
|
|
6236
|
" <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
|
|
6382
|
"\n" +
|
|
|
|
|
6383
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
6384
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
6385
|
" DELETE Daily Partitions\n" +
|
|
6237
|
" </div>\n" +
|
|
6386
|
" </div>\n" +
|
|
6238
|
"\n" +
|
|
6387
|
"\n" +
|
|
6239
|
" <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
|
|
6388
|
" <form name=\"partitions.dailyPartitionsForm\"\n" +
|
|
6240
|
" <div class=\"form-group\">\n" +
|
|
6389
|
" novalidate ng-submit=\"partitions.partitionsDelete('dailyPartitions')\"\n" +
|
|
6241
|
" <label for=\"issue_title\">Issue Title</label>\n" +
|
|
6390
|
" class=\"form-inline\"\n" +
|
|
6242
|
" <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
|
|
6391
|
" ng-class=\"{'has-error':partitions.dailyPartitionsForm.$invalid}\">\n" +
|
|
6243
|
" </div>\n" +
|
|
|
|
|
6244
|
" <div class=\"form-group row\">\n" +
|
|
|
|
|
6245
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
6246
|
" <label for=\"issue_status\">Tag</label>\n" +
|
|
|
|
|
6247
|
" <select class=\"form-control\" id=\"issue_status\" ng-options=\"s for s in ctrl.statuses\" ng-model=\"ctrl.form.status\"></select>\n" +
|
|
|
|
|
6248
|
" </div>\n" +
|
|
|
|
|
6249
|
"\n" +
|
|
|
|
|
6250
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
6251
|
" <label for=\"issue_responsible\">Assignee</label>\n" +
|
|
|
|
|
6252
|
" <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
|
|
|
|
|
6253
|
" </div>\n" +
|
|
|
|
|
6254
|
" </div>\n" +
|
|
|
|
|
6255
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6256
|
" <label for=\"issue_description\">Description</label>\n" +
|
|
|
|
|
6257
|
" <textarea id=\"issue_description\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
|
|
|
|
|
6258
|
" </div>\n" +
|
|
|
|
|
6259
|
" </form>\n" +
|
|
|
|
|
6260
|
"\n" +
|
|
6392
|
"\n" +
|
|
6261
|
" </div>\n" +
|
|
6393
|
" <div class=\"panel-body\">\n" +
|
|
6262
|
" <div class=\"modal-footer\">\n" +
|
|
|
|
|
6263
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
|
|
|
|
|
6264
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
|
|
|
6265
|
" </div>\n"
|
|
|
|
|
6266
|
);
|
|
|
|
|
6267
|
|
|
|
|
|
6268
|
|
|
|
|
|
6269
|
$templateCache.put('templates/integrations/jira.html',
|
|
|
|
|
6270
|
" <div class=\"modal-header\">\n" +
|
|
|
|
|
6271
|
" <h3 class=\"m-t-0\">Add issue to Jira</h3>\n" +
|
|
|
|
|
6272
|
" </div>\n" +
|
|
|
|
|
6273
|
" <div class=\"modal-body\">\n" +
|
|
|
|
|
6274
|
" <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
|
|
|
|
|
6275
|
" <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
|
|
|
|
|
6276
|
" <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
|
|
|
|
|
6277
|
" </div>\n" +
|
|
|
|
|
6278
|
"\n" +
|
|
6394
|
"\n" +
|
|
6279
|
" <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
|
|
6395
|
" <input type=\"text\" name=\"confirm\"\n" +
|
|
6280
|
" <div class=\"form-group\">\n" +
|
|
6396
|
" placeholder=\"Enter CONFIRM to proceed\" class=\"form-control input-autosize\" confirm-validate required ng-model=\"partitions.dailyConfirm\">\n" +
|
|
6281
|
" <label for=\"issue_title\">Issue Title</label>\n" +
|
|
6397
|
" <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.dailyPartitionsForm.$invalid\">\n" +
|
|
6282
|
" <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
|
|
6398
|
" <input type=\"checkbox\" ng-model=\"partitions.dailyChecked\" ng-change=\"partitions.setCheckedList('dailyPartitions')\"> Check All\n" +
|
|
6283
|
" </div>\n" +
|
|
|
|
|
6284
|
"\n" +
|
|
6399
|
"\n" +
|
|
6285
|
" <div class=\"form-group\">\n" +
|
|
6400
|
" </div>\n" +
|
|
6286
|
" <label for=\"issue_type\">Issue Type</label>\n" +
|
|
|
|
|
6287
|
" <select class=\"form-control\" id=\"issue_type\" ng-options=\"i.name for i in ctrl.issue_types\" ng-model=\"ctrl.form.issue_type\"></select>\n" +
|
|
|
|
|
6288
|
" </div>\n" +
|
|
|
|
|
6289
|
" <div class=\"form-group row\">\n" +
|
|
|
|
|
6290
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
6291
|
" <label for=\"issue_priority\">Priority</label>\n" +
|
|
|
|
|
6292
|
" <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s.name for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
|
|
|
|
|
6293
|
" </div>\n" +
|
|
|
|
|
6294
|
"\n" +
|
|
6401
|
"\n" +
|
|
6295
|
" <div class=\"col-sm-6\">\n" +
|
|
6402
|
" <table class=\"table table-striped\">\n" +
|
|
6296
|
" <label for=\"issue_responsible\">Assignee</label>\n" +
|
|
6403
|
" <tr>\n" +
|
|
6297
|
" <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.name for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
|
|
6404
|
" <th class=\"c1 date\">Date</th>\n" +
|
|
6298
|
" </div>\n" +
|
|
6405
|
" <th class=\"c2 indices\">Indices</th>\n" +
|
|
6299
|
" </div>\n" +
|
|
6406
|
" </tr>\n" +
|
|
6300
|
" <div class=\"form-group\">\n" +
|
|
6407
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.dailyPartitions\">\n" +
|
|
6301
|
" <label for=\"issue_content\">Description</label>\n" +
|
|
6408
|
" <td class=\"c1\">{{row[0]}}</td>\n" +
|
|
6302
|
" <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
|
|
6409
|
" <td class=\"c2\">\n" +
|
|
6303
|
" </div>\n" +
|
|
6410
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
6411
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
|
|
|
|
|
6412
|
" <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
|
|
|
|
|
6413
|
" </li>\n" +
|
|
|
|
|
6414
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
|
|
|
|
|
6415
|
" <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
|
|
|
|
|
6416
|
" </li>\n" +
|
|
|
|
|
6417
|
" </ul>\n" +
|
|
|
|
|
6418
|
" </td>\n" +
|
|
|
|
|
6419
|
" </tr>\n" +
|
|
|
|
|
6420
|
" </table>\n" +
|
|
6304
|
" </form>\n" +
|
|
6421
|
" </form>\n" +
|
|
6305
|
"\n" +
|
|
6422
|
"\n" +
|
|
6306
|
" </div>\n" +
|
|
6423
|
" </div>\n" +
|
|
6307
|
" <div class=\"modal-footer\">\n" +
|
|
|
|
|
6308
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
|
|
|
|
|
6309
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
|
|
|
6310
|
" </div>\n"
|
|
|
|
|
6311
|
);
|
|
|
|
|
6312
|
|
|
|
|
|
6313
|
|
|
|
|
|
6314
|
$templateCache.put('templates/loader.html',
|
|
|
|
|
6315
|
"<div class=\"text-center\">\n" +
|
|
|
|
|
6316
|
" <span class=\"fa fa-cog fa-spin fa-5x m-a-4\"></span>\n" +
|
|
|
|
|
6317
|
"</div>\n"
|
|
|
|
|
6318
|
);
|
|
|
|
|
6319
|
|
|
|
|
|
6320
|
|
|
|
|
|
6321
|
$templateCache.put('templates/quickstart.html',
|
|
|
|
|
6322
|
"<h2>AppEnlight quickstart</h2>\n" +
|
|
|
|
|
6323
|
"\n" +
|
|
6424
|
"\n" +
|
|
6324
|
"<p>\n" +
|
|
6425
|
" <div class=\"panel panel-default\">\n" +
|
|
6325
|
" <span class=\"point\">1</span>\n" +
|
|
6426
|
" <div class=\"panel-heading\">\n" +
|
|
6326
|
" For AppEnlight to operate, you need to\n" +
|
|
6427
|
" DELETE Permanent Partitions\n" +
|
|
6327
|
" <a data-ui-sref=\"applications.update({resourceId:'new'})\" target=\"_blank\"><strong>create an app profile</strong></a> that allows\n" +
|
|
6428
|
" </div>\n" +
|
|
6328
|
" you to\n" +
|
|
|
|
|
6329
|
" obtain an <strong>API key</strong> that one of the clients can use.\n" +
|
|
|
|
|
6330
|
"</p>\n" +
|
|
|
|
|
6331
|
"\n" +
|
|
6429
|
"\n" +
|
|
6332
|
"<div class=\"clear\"></div>\n" +
|
|
6430
|
" <form name=\"partitions.permanentPartitionsForm\" novalidate\n" +
|
|
6333
|
"<hr/>\n" +
|
|
6431
|
" ng-submit=\"partitions.partitionsDelete('permanentPartitions')\"\n" +
|
|
|
|
|
6432
|
" class=\"form-inline\"\n" +
|
|
|
|
|
6433
|
" ng-class=\"{'has-error':partitions.permanentPartitionsForm.$invalid}\">\n" +
|
|
6334
|
"\n" +
|
|
6434
|
"\n" +
|
|
6335
|
"<p>\n" +
|
|
|
|
|
6336
|
" <span class=\"point\">2</span>\n" +
|
|
|
|
|
6337
|
" It is a good idea to configure an\n" +
|
|
|
|
|
6338
|
" <a data-ui-sref=\"user.alert_channels.email\" target=\"_blank\">\n" +
|
|
|
|
|
6339
|
" <strong>email alert channel</strong></a> that you can use to receive\n" +
|
|
|
|
|
6340
|
" notifications about events that happen in your application.\n" +
|
|
|
|
|
6341
|
"</p>\n" +
|
|
|
|
|
6342
|
"\n" +
|
|
6435
|
"\n" +
|
|
6343
|
"<p>\n" +
|
|
6436
|
" <div class=\"panel-body\">\n" +
|
|
6344
|
" It can be the same email account you used to register withing AppEnlight -\n" +
|
|
|
|
|
6345
|
" although we often recommend using a separate <em>errors@...</em> account\n" +
|
|
|
|
|
6346
|
" designated for alert notifications.\n" +
|
|
|
|
|
6347
|
"</p>\n" +
|
|
|
|
|
6348
|
"\n" +
|
|
6437
|
"\n" +
|
|
6349
|
"<div class=\"clear\"></div>\n" +
|
|
6438
|
" <div class=\"form-group\">\n" +
|
|
6350
|
"<hr/>\n" +
|
|
6439
|
" <input type=\"text\" name=\"confirm\"\n" +
|
|
|
|
|
6440
|
" placeholder=\"Enter CONFIRM to proceed\" class=\"form-control\" confirm-validate required ng-model=\"partitions.permConfirm\">\n" +
|
|
|
|
|
6441
|
" <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.permanentPartitionsForm.$invalid\">\n" +
|
|
|
|
|
6442
|
" <input type=\"checkbox\" ng-model=\"partitions.permChecked\" ng-change=\"partitions.setCheckedList('permanentPartitions')\"> Check All\n" +
|
|
|
|
|
6443
|
" </div>\n" +
|
|
6351
|
"\n" +
|
|
6444
|
"\n" +
|
|
6352
|
"<p>\n" +
|
|
6445
|
" </div>\n" +
|
|
6353
|
" <span class=\"point\">3</span>\n" +
|
|
|
|
|
6354
|
" In order for your application to stream meaningful information, you will need to\n" +
|
|
|
|
|
6355
|
" integrate a compatible client for your language of choice.\n" +
|
|
|
|
|
6356
|
"</p>\n" +
|
|
|
|
|
6357
|
"\n" +
|
|
6446
|
"\n" +
|
|
6358
|
"<p>Head over to the <a href=\"{{AeConfig.urls.docs}}\" target=\"_blank\">\n" +
|
|
6447
|
" <table class=\"table table-striped\">\n" +
|
|
6359
|
" <strong>developers section</strong></a> for information on currently available\n" +
|
|
6448
|
" <tr>\n" +
|
|
6360
|
" clients that you can plug into your software</p>\n"
|
|
6449
|
" <th class=\"c1 date\">Date</th>\n" +
|
|
6361
|
);
|
|
6450
|
" <th class=\"c2 indices\">Indices</th>\n" +
|
|
6362
|
|
|
6451
|
" </tr>\n" +
|
|
6363
|
|
|
6452
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.permanentPartitions\">\n" +
|
|
6364
|
$templateCache.put('templates/register.html',
|
|
6453
|
" <td class=\"c1\">{{row[0]}}</td>\n" +
|
|
6365
|
""
|
|
6454
|
" <td class=\"c2\">\n" +
|
|
|
|
|
6455
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
6456
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
|
|
|
|
|
6457
|
" <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
|
|
|
|
|
6458
|
" </li>\n" +
|
|
|
|
|
6459
|
" <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
|
|
|
|
|
6460
|
" <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
|
|
|
|
|
6461
|
" </li>\n" +
|
|
|
|
|
6462
|
" </ul>\n" +
|
|
|
|
|
6463
|
" </td>\n" +
|
|
|
|
|
6464
|
" </tr>\n" +
|
|
|
|
|
6465
|
" </table>\n" +
|
|
|
|
|
6466
|
" </form>\n" +
|
|
|
|
|
6467
|
"\n" +
|
|
|
|
|
6468
|
" </div>\n" +
|
|
|
|
|
6469
|
"\n" +
|
|
|
|
|
6470
|
"</div>\n"
|
|
6366
|
);
|
|
6471
|
);
|
|
6367
|
|
|
6472
|
|
|
6368
|
|
|
6473
|
|
|
6369
|
$templateCache.put('templates/reports/list_slow.html',
|
|
6474
|
$templateCache.put('templates/admin/system.html',
|
|
6370
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"reports_list.is_loading\"></ng-include>\n" +
|
|
6475
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"system.loading.system\"></ng-include>\n" +
|
|
6371
|
"\n" +
|
|
6476
|
"\n" +
|
|
6372
|
"<div ng-if=\"reports_list.is_loading === false\">\n" +
|
|
6477
|
"<div ng-if=\"system.loading.system == false\">\n" +
|
|
|
|
|
6478
|
" <div class=\"row\">\n" +
|
|
|
|
|
6479
|
" <div class=\"col-sm-12\">\n" +
|
|
|
|
|
6480
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
6481
|
" <div class=\"panel-heading\">\n" +
|
|
|
|
|
6482
|
" <h3 class=\"panel-title\">\n" +
|
|
|
|
|
6483
|
" System Info\n" +
|
|
|
|
|
6484
|
" </h3>\n" +
|
|
|
|
|
6485
|
" </div>\n" +
|
|
|
|
|
6486
|
" <div class=\"panel-body\">\n" +
|
|
6373
|
"\n" +
|
|
6487
|
"\n" +
|
|
6374
|
" <p class=\"search-params\">\n" +
|
|
6488
|
" <p><strong>System Load:</strong>\n" +
|
|
6375
|
" <strong>Search params:</strong>\n" +
|
|
6489
|
" 1min: {{system.systemLoad[0]}}, 5min: {{system.systemLoad[1]}}, 15min: {{system.systemLoad[2]}}\n" +
|
|
6376
|
" <span ng-repeat=\"tag in reports_list.searchParams.tags\" class=\"tag\">\n" +
|
|
6490
|
" </p>\n" +
|
|
6377
|
" <strong>{{tag.type}}</strong>\n" +
|
|
6491
|
" <p><strong>Awaiting tasks:</strong>\n" +
|
|
6378
|
" {{ tag.type == 'resource' ? reports_list.applications[tag.value].resource_name : tag.value }}\n" +
|
|
6492
|
" <ul>\n" +
|
|
|
|
|
6493
|
" <li>reports: {{system.queueStats.waiting_reports}}</li>\n" +
|
|
|
|
|
6494
|
" <li>logs: {{system.queueStats.waiting_logs}}</li>\n" +
|
|
|
|
|
6495
|
" <li>metrics: {{system.queueStats.waiting_metrics}}</li>\n" +
|
|
|
|
|
6496
|
" <li>other: {{system.queueStats.waiting_other}}</li>\n" +
|
|
|
|
|
6497
|
" </ul>\n" +
|
|
|
|
|
6498
|
" </p>\n" +
|
|
|
|
|
6499
|
" <p><strong>Queue stats from last minute:</strong>\n" +
|
|
|
|
|
6500
|
" <ul>\n" +
|
|
|
|
|
6501
|
" <li>Processed reports: {{system.queueStats.processed_reports}}</li>\n" +
|
|
|
|
|
6502
|
" <li>Processed logs: {{system.queueStats.processed_logs}}</li>\n" +
|
|
|
|
|
6503
|
" <li>Processed metrics: {{system.queueStats.processed_metrics}}</li>\n" +
|
|
|
|
|
6504
|
" </ul>\n" +
|
|
|
|
|
6505
|
" </p>\n" +
|
|
6379
|
"\n" +
|
|
6506
|
"\n" +
|
|
6380
|
" <a ng-click=\"reports_list.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
|
|
6507
|
" <p><strong>Disks:</strong>\n" +
|
|
6381
|
" </span>\n" +
|
|
6508
|
" <ul>\n" +
|
|
6382
|
" </p>\n" +
|
|
6509
|
" <li ng-repeat=\"disk in system.disks\">\n" +
|
|
|
|
|
6510
|
" <strong>{{disk.device}}</strong> {{disk.free}}/{{disk.total}}, {{disk.percentage}}% used\n" +
|
|
|
|
|
6511
|
" </li>\n" +
|
|
|
|
|
6512
|
" </ul>\n" +
|
|
|
|
|
6513
|
" </p>\n" +
|
|
6383
|
"\n" +
|
|
6514
|
"\n" +
|
|
6384
|
" <p>\n" +
|
|
6515
|
" <p><strong>Process stats:</strong>\n" +
|
|
|
|
|
6516
|
" <ul>\n" +
|
|
|
|
|
6517
|
" <li>FD soft limits: {{system.selfInfo.fds.soft}}</li>\n" +
|
|
|
|
|
6518
|
" <li>FD hard limits: {{system.selfInfo.fds.hard}}</li>\n" +
|
|
|
|
|
6519
|
" <li>Memlock soft limits: {{system.selfInfo.memlock.soft}}</li>\n" +
|
|
|
|
|
6520
|
" <li>Memlock hard limits: {{system.selfInfo.memlock.hard}}</li>\n" +
|
|
|
|
|
6521
|
" </ul>\n" +
|
|
|
|
|
6522
|
" </p>\n" +
|
|
6385
|
"\n" +
|
|
6523
|
"\n" +
|
|
6386
|
" <form class=\"form\">\n" +
|
|
6524
|
" </div>\n" +
|
|
6387
|
" <div class=\"typeahead-tags\">\n" +
|
|
6525
|
" </div>\n" +
|
|
6388
|
" <input type=\"text\" id=\"typeAhead\" ng-model=\"reports_list.filterTypeAhead\" placeholder=\"Start typing to filter slowness reports - filter by tags, average response time, priority or other properties.\"\n" +
|
|
|
|
|
6389
|
" ng-keydown=\"reports_list.typeAheadTag($event)\"\n" +
|
|
|
|
|
6390
|
" uib-typeahead=\"tag as tag.text for tag in reports_list.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
|
|
|
|
|
6391
|
" typeahead-min-length=\"1\" class=\"form-control\"\n" +
|
|
|
|
|
6392
|
" typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
|
|
|
|
|
6393
|
" </div>\n" +
|
|
6526
|
" </div>\n" +
|
|
6394
|
" </form>\n" +
|
|
|
|
|
6395
|
"\n" +
|
|
|
|
|
6396
|
"\n" +
|
|
|
|
|
6397
|
" <div class=\"well position-absolute increse-zindex\" ng-show=\"reports_list.showDatePicker\" ng-model=\"reports_list.pickerDate\" ng-change=\"reports_list.pickerDateChanged()\"\n" +
|
|
|
|
|
6398
|
" class=\"animate-show\">\n" +
|
|
|
|
|
6399
|
" <uib-datepicker></uib-datepicker>\n" +
|
|
|
|
|
6400
|
" </div>\n" +
|
|
|
|
|
6401
|
"\n" +
|
|
|
|
|
6402
|
" </p>\n" +
|
|
|
|
|
6403
|
"\n" +
|
|
|
|
|
6404
|
"\n" +
|
|
|
|
|
6405
|
" <div class=\"text-center\">\n" +
|
|
|
|
|
6406
|
" <uib-pagination total-items=\"reports_list.itemCount\" items-per-page=\"reports_list.itemsPerPage\" ng-model=\"reports_list.page\" max-size=\"10\"\n" +
|
|
|
|
|
6407
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
|
|
|
6408
|
" ng-change=\"reports_list.paginationChange()\"\n" +
|
|
|
|
|
6409
|
" ng-show=\"!reports_list.is_loading\"></uib-pagination>\n" +
|
|
|
|
|
6410
|
" </div>\n" +
|
|
6527
|
" </div>\n" +
|
|
|
|
|
6528
|
" <div class=\"row\">\n" +
|
|
|
|
|
6529
|
" <div class=\"col-sm-12\">\n" +
|
|
6411
|
"\n" +
|
|
6530
|
"\n" +
|
|
|
|
|
6531
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
6532
|
" <div class=\"panel-body\">\n" +
|
|
6412
|
"\n" +
|
|
6533
|
"\n" +
|
|
6413
|
" <div class=\"panel panel-default\">\n" +
|
|
6534
|
" <uib-tabset>\n" +
|
|
6414
|
" <!-- Default panel contents -->\n" +
|
|
6535
|
" <uib-tab>\n" +
|
|
|
|
|
6536
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6537
|
" Postgresql Tables\n" +
|
|
|
|
|
6538
|
" </uib-tab-heading>\n" +
|
|
6415
|
"\n" +
|
|
6539
|
"\n" +
|
|
6416
|
" <table class=\"table table-striped report-list\" ng-show=\"!reports_list.is_loading\">\n" +
|
|
6540
|
" <table class=\"table table-striped\">\n" +
|
|
6417
|
" <caption>Slow Request Reports</caption>\n" +
|
|
6541
|
" <thead>\n" +
|
|
6418
|
" <thead>\n" +
|
|
6542
|
" <tr>\n" +
|
|
6419
|
" <tr>\n" +
|
|
6543
|
" <th class=\"c1 tablename\">Table name</th>\n" +
|
|
6420
|
" <td class=\"c1 ordering occurences\">#</td>\n" +
|
|
6544
|
" <th class=\"c2 size_human\">Size</th>\n" +
|
|
6421
|
" <td class=\"c2 average_duration\">Avg. duration</td>\n" +
|
|
6545
|
" </tr>\n" +
|
|
6422
|
" <td class=\"c3 application\">Application</td>\n" +
|
|
6546
|
" </thead>\n" +
|
|
6423
|
" <td class=\"c5 when\">When <input type=\"checkbox\" ng-model=\"reports_list.notRelativeTime\"\n" +
|
|
6547
|
" <tbody>\n" +
|
|
6424
|
" ng-change=\"reports_list.changeRelativeTime()\"\n" +
|
|
6548
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in system.DBtables\">\n" +
|
|
6425
|
" title=\"Tick to see UTC time instead relative\"></td>\n" +
|
|
6549
|
" <td class=\"c1\">{{row.table_name}}</td>\n" +
|
|
6426
|
" <td class=\"c6 error_type\">Location</td>\n" +
|
|
6550
|
" <td class=\"c2\">{{row.size_human}}</td>\n" +
|
|
6427
|
" </tr>\n" +
|
|
6551
|
" </tr>\n" +
|
|
6428
|
" </thead>\n" +
|
|
6552
|
" </tbody>\n" +
|
|
6429
|
" <tbody>\n" +
|
|
6553
|
" </table>\n" +
|
|
6430
|
" <tr ng-repeat=\"report in reports_list.reportsPage track by report.id\">\n" +
|
|
|
|
|
6431
|
" <td class=\"c1 occurences\">\n" +
|
|
|
|
|
6432
|
" <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
|
|
|
|
|
6433
|
" <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
|
|
|
|
|
6434
|
" {{report.group.occurences|numberToThousands}}\n" +
|
|
|
|
|
6435
|
" </span>\n" +
|
|
|
|
|
6436
|
" </td>\n" +
|
|
|
|
|
6437
|
" <td class=\"c2 average_duration\">{{report.group.average_duration.toFixed(3)}}s</td>\n" +
|
|
|
|
|
6438
|
" <td class=\"c3 application\">\n" +
|
|
|
|
|
6439
|
" <div class=\"app_name\">{{report.resource_name}}</div>\n" +
|
|
|
|
|
6440
|
" <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
|
|
|
|
|
6441
|
" <td class=\"c4 when\">\n" +
|
|
|
|
|
6442
|
" <span ng-show=\"!reports_list.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
6443
|
" time=\"{{report.group.last_timestamp}}\"/></span>\n" +
|
|
|
|
|
6444
|
" </span>\n" +
|
|
|
|
|
6445
|
" <span ng-show=\"reports_list.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
|
|
|
|
|
6446
|
" </td>\n" +
|
|
|
|
|
6447
|
" <td class=\"c5 report ellipsis\">\n" +
|
|
|
|
|
6448
|
" <a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\">{{ report.tags.view_name || report.url_path}} </span></a></td>\n" +
|
|
|
|
|
6449
|
" </td>\n" +
|
|
|
|
|
6450
|
" </tr>\n" +
|
|
|
|
|
6451
|
"\n" +
|
|
6554
|
"\n" +
|
|
6452
|
" </tbody>\n" +
|
|
6555
|
" </uib-tab>\n" +
|
|
6453
|
" </table>\n" +
|
|
|
|
|
6454
|
"\n" +
|
|
6556
|
"\n" +
|
|
6455
|
" </div>\n" +
|
|
6557
|
" <uib-tab>\n" +
|
|
|
|
|
6558
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6559
|
" Elasticsearch Indices\n" +
|
|
|
|
|
6560
|
" </uib-tab-heading>\n" +
|
|
6456
|
"\n" +
|
|
6561
|
"\n" +
|
|
6457
|
" <div class=\"text-center\">\n" +
|
|
6562
|
" <table class=\"table table-striped\">\n" +
|
|
6458
|
" <uib-pagination total-items=\"reports_list.itemCount\" items-per-page=\"reports_list.itemsPerPage\" ng-model=\"reports_list.page\" max-size=\"10\"\n" +
|
|
6563
|
" <thead>\n" +
|
|
6459
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
6564
|
" <tr>\n" +
|
|
6460
|
" ng-change=\"reports_list.paginationChange()\"\n" +
|
|
6565
|
" <th class=\"c1 tablename\">Index name</th>\n" +
|
|
6461
|
" ng-show=\"!reports_list.is_loading\"></uib-pagination>\n" +
|
|
6566
|
" <th class=\"c2 size_human\">Size</th>\n" +
|
|
6462
|
" </div>\n" +
|
|
6567
|
" </tr>\n" +
|
|
|
|
|
6568
|
" </thead>\n" +
|
|
|
|
|
6569
|
" <tbody>\n" +
|
|
|
|
|
6570
|
" <tr class=\"r{{$index}}\" ng-repeat=\"row in system.ESIndices\">\n" +
|
|
|
|
|
6571
|
" <td class=\"c1\">{{row.name}}</td>\n" +
|
|
|
|
|
6572
|
" <td class=\"c2\">{{row.size_human}}</td>\n" +
|
|
|
|
|
6573
|
" </tr>\n" +
|
|
|
|
|
6574
|
" </tbody>\n" +
|
|
|
|
|
6575
|
" </table>\n" +
|
|
|
|
|
6576
|
"\n" +
|
|
|
|
|
6577
|
" </uib-tab>\n" +
|
|
|
|
|
6578
|
"\n" +
|
|
|
|
|
6579
|
" <uib-tab>\n" +
|
|
|
|
|
6580
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6581
|
" Processes\n" +
|
|
|
|
|
6582
|
" </uib-tab-heading>\n" +
|
|
|
|
|
6583
|
"\n" +
|
|
|
|
|
6584
|
" <table class=\"table table-striped\">\n" +
|
|
|
|
|
6585
|
" <thead>\n" +
|
|
|
|
|
6586
|
" <tr>\n" +
|
|
|
|
|
6587
|
" <th class=\"c1 tablename\">Owner</th>\n" +
|
|
|
|
|
6588
|
" <th class=\"c2 tablename\">PID</th>\n" +
|
|
|
|
|
6589
|
" <th class=\"c3 tablename\">CPU</th>\n" +
|
|
|
|
|
6590
|
" <th class=\"c4 tablename\">MEM</th>\n" +
|
|
|
|
|
6591
|
" <th class=\"c4 tablename\">Name</th>\n" +
|
|
|
|
|
6592
|
" </tr>\n" +
|
|
|
|
|
6593
|
" </thead>\n" +
|
|
|
|
|
6594
|
" <tbody>\n" +
|
|
|
|
|
6595
|
" <tr class=\"r{{$index}}\" ng-repeat-start=\"row in system.processInfo\">\n" +
|
|
|
|
|
6596
|
" <td class=\"c1\">{{row.owner}}</td>\n" +
|
|
|
|
|
6597
|
" <td class=\"c2\">{{row.pid}}</td>\n" +
|
|
|
|
|
6598
|
" <td class=\"c3\">{{row.cpu}}</td>\n" +
|
|
|
|
|
6599
|
" <td class=\"c4\">{{row.mem_usage}} ({{row.mem_percentage}}%)</td>\n" +
|
|
|
|
|
6600
|
" <td class=\"c5\"><strong>{{row.name}}</strong></td>\n" +
|
|
|
|
|
6601
|
" </tr>\n" +
|
|
|
|
|
6602
|
" <tr ng-repeat-end>\n" +
|
|
|
|
|
6603
|
" <td colspan=\"5\" class=\"word-wrap\">{{row.command}}</td>\n" +
|
|
|
|
|
6604
|
" </tr>\n" +
|
|
|
|
|
6605
|
" </tbody>\n" +
|
|
|
|
|
6606
|
" </table>\n" +
|
|
|
|
|
6607
|
"\n" +
|
|
|
|
|
6608
|
" </uib-tab>\n" +
|
|
|
|
|
6609
|
"\n" +
|
|
|
|
|
6610
|
" <uib-tab>\n" +
|
|
|
|
|
6611
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6612
|
" Python packages\n" +
|
|
|
|
|
6613
|
" </uib-tab-heading>\n" +
|
|
|
|
|
6614
|
"\n" +
|
|
|
|
|
6615
|
" <table class=\"table\">\n" +
|
|
|
|
|
6616
|
" <tr ng-repeat=\"package in system.packages\">\n" +
|
|
|
|
|
6617
|
" <td>{{package.name}}</td>\n" +
|
|
|
|
|
6618
|
" <td>{{package.version}}</td>\n" +
|
|
|
|
|
6619
|
" </tr>\n" +
|
|
|
|
|
6620
|
" </table>\n" +
|
|
|
|
|
6621
|
" </p>\n" +
|
|
|
|
|
6622
|
"\n" +
|
|
|
|
|
6623
|
" </uib-tab>\n" +
|
|
6463
|
"\n" +
|
|
6624
|
"\n" +
|
|
|
|
|
6625
|
" </uib-tabset>\n" +
|
|
|
|
|
6626
|
" </div>\n" +
|
|
|
|
|
6627
|
" </div>\n" +
|
|
|
|
|
6628
|
" </div>\n" +
|
|
|
|
|
6629
|
" </div>\n" +
|
|
6464
|
"</div>\n"
|
|
6630
|
"</div>\n"
|
|
6465
|
);
|
|
6631
|
);
|
|
6466
|
|
|
6632
|
|
|
6467
|
|
|
6633
|
|
|
6468
|
$templateCache.put('templates/reports/list.html',
|
|
6634
|
$templateCache.put('templates/admin/users/parent_view.html',
|
|
6469
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"reports_list.is_loading\"></ng-include>\n" +
|
|
6635
|
"<div ui-view></div>"
|
|
|
|
|
6636
|
);
|
|
|
|
|
6637
|
|
|
|
|
|
6638
|
|
|
|
|
|
6639
|
$templateCache.put('templates/admin/users/users_create.html',
|
|
|
|
|
6640
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"user.loading.user\"></ng-include>\n" +
|
|
6470
|
"\n" +
|
|
6641
|
"\n" +
|
|
6471
|
"<div ng-if=\"reports_list.is_loading === false\">\n" +
|
|
6642
|
"<div ng-show=\"!user.loading.user\">\n" +
|
|
6472
|
"\n" +
|
|
6643
|
"\n" +
|
|
6473
|
" <p class=\"search-params\">\n" +
|
|
6644
|
" <div class=\"panel panel-default\">\n" +
|
|
6474
|
" <strong>Search params:</strong>\n" +
|
|
6645
|
" <div class=\"panel-body\">\n" +
|
|
6475
|
" <span ng-repeat=\"tag in reports_list.searchParams.tags\" class=\"tag\">\n" +
|
|
|
|
|
6476
|
" <strong>{{tag.type}}</strong>\n" +
|
|
|
|
|
6477
|
" {{ tag.type == 'resource' ? reports_list.applications[tag.value].resource_name : tag.value }}\n" +
|
|
|
|
|
6478
|
"\n" +
|
|
6646
|
"\n" +
|
|
6479
|
" <a ng-click=\"reports_list.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
|
|
6647
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"user.user.id\">\n" +
|
|
6480
|
" </span>\n" +
|
|
6648
|
" <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-user-secret\"></span> Re-login to user</a>\n" +
|
|
6481
|
" </p>\n" +
|
|
6649
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
6650
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
6651
|
" <li><a ng-click=\"user.reloginUser(user)\">Yes</a></li>\n" +
|
|
|
|
|
6652
|
" </ul>\n" +
|
|
|
|
|
6653
|
" </span>\n" +
|
|
6482
|
"\n" +
|
|
6654
|
"\n" +
|
|
6483
|
" <form class=\"form\">\n" +
|
|
6655
|
" <form name=\"user.profileForm\" class=\"form-horizontal\" ng-submit=\"user.createUser()\">\n" +
|
|
6484
|
" <div class=\"typeahead-tags\">\n" +
|
|
6656
|
" <div class=\"form-group\" id=\"row-user_name\">\n" +
|
|
6485
|
" <input type=\"text\" id=\"typeAhead\" ng-model=\"reports_list.filterTypeAhead\" placeholder=\"Start typing to filter reports - filter by tags, exception, priority or other properties.\"\n" +
|
|
6657
|
" <data-form-errors errors=\"user.profileForm.ae_validation.user_name\"></data-form-errors>\n" +
|
|
6486
|
" ng-keydown=\"reports_list.typeAheadTag($event)\"\n" +
|
|
6658
|
" <label for=\"user_name\" id=\"label-user_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
6487
|
" uib-typeahead=\"tag as tag.text for tag in reports_list.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
|
|
6659
|
" User name\n" +
|
|
6488
|
" typeahead-min-length=\"1\" class=\"form-control\"\n" +
|
|
6660
|
" <span class=\"required\">*</span>\n" +
|
|
6489
|
" typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
|
|
6661
|
" </label>\n" +
|
|
6490
|
" </div>\n" +
|
|
6662
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
6491
|
" </form>\n" +
|
|
6663
|
" <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"user.user.user_name\">\n" +
|
|
|
|
|
6664
|
" </div>\n" +
|
|
|
|
|
6665
|
" </div>\n" +
|
|
6492
|
"\n" +
|
|
6666
|
"\n" +
|
|
|
|
|
6667
|
" <div class=\"form-group\" id=\"row-user_password\">\n" +
|
|
|
|
|
6668
|
" <data-form-errors errors=\"user.profileForm.ae_validation.user_password\"></data-form-errors>\n" +
|
|
|
|
|
6669
|
" <label for=\"user_password\" id=\"label-user_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6670
|
" Password\n" +
|
|
|
|
|
6671
|
" <span class=\"required\">*</span>\n" +
|
|
|
|
|
6672
|
" </label>\n" +
|
|
|
|
|
6673
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6674
|
" <input class=\"form-control\" id=\"user_password\" name=\"user_password\" type=\"password\" ng-model=\"user.user.user_password\">\n" +
|
|
6493
|
"\n" +
|
|
6675
|
"\n" +
|
|
6494
|
" <div class=\"well position-absolute increse-zindex\" ng-show=\"reports_list.showDatePicker\" ng-model=\"reports_list.pickerDate\" ng-change=\"reports_list.pickerDateChanged()\"\n" +
|
|
6676
|
" <p class=\"m-t-1\"><a class=\"btn btn-info btn-sm\" ng-click=\"user.generatePassword()\"><span class=\"fa fa-lock\"></span> Generate password</a>\n" +
|
|
6495
|
" class=\"animate-show\">\n" +
|
|
6677
|
" <span ng-show=\"user.gen_pass.length > 0\">(generated password: {{user.gen_pass}})</span>\n" +
|
|
6496
|
" <uib-datepicker></uib-datepicker>\n" +
|
|
6678
|
" </p>\n" +
|
|
6497
|
" </div>\n" +
|
|
|
|
|
6498
|
"\n" +
|
|
6679
|
"\n" +
|
|
6499
|
" </p>\n" +
|
|
6680
|
" </div>\n" +
|
|
|
|
|
6681
|
" </div>\n" +
|
|
6500
|
"\n" +
|
|
6682
|
"\n" +
|
|
6501
|
"\n" +
|
|
6683
|
"\n" +
|
|
6502
|
" <div class=\"text-center\">\n" +
|
|
6684
|
" <div class=\"form-group\" id=\"row-email\">\n" +
|
|
6503
|
" <uib-pagination total-items=\"reports_list.itemCount\" items-per-page=\"reports_list.itemsPerPage\" ng-model=\"reports_list.page\" max-size=\"10\"\n" +
|
|
6685
|
" <data-form-errors errors=\"user.profileForm.ae_validation.email\"></data-form-errors>\n" +
|
|
6504
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
6686
|
" <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
6505
|
" ng-change=\"reports_list.paginationChange()\"\n" +
|
|
6687
|
" Email Address\n" +
|
|
6506
|
" ng-show=\"!reports_list.is_loading\"></uib-pagination>\n" +
|
|
6688
|
" <span class=\"required\">*</span>\n" +
|
|
6507
|
" </div>\n" +
|
|
6689
|
" </label>\n" +
|
|
|
|
|
6690
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6691
|
" <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"user.user.email\">\n" +
|
|
|
|
|
6692
|
" </div>\n" +
|
|
|
|
|
6693
|
" </div>\n" +
|
|
6508
|
"\n" +
|
|
6694
|
"\n" +
|
|
6509
|
" <div class=\"panel panel-default\">\n" +
|
|
6695
|
" <div class=\"form-group\" id=\"row-first_name\">\n" +
|
|
6510
|
" <!-- Default panel contents -->\n" +
|
|
6696
|
" <data-form-errors errors=\"user.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
|
|
|
|
|
6697
|
" <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6698
|
" First Name\n" +
|
|
|
|
|
6699
|
" </label>\n" +
|
|
|
|
|
6700
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6701
|
" <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"user.user.first_name\">\n" +
|
|
|
|
|
6702
|
" </div>\n" +
|
|
|
|
|
6703
|
" </div>\n" +
|
|
|
|
|
6704
|
" <div class=\"form-group\" id=\"row-last_name\">\n" +
|
|
|
|
|
6705
|
" <data-form-errors errors=\"user.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
|
|
|
|
|
6706
|
" <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6707
|
" Last Name\n" +
|
|
|
|
|
6708
|
" </label>\n" +
|
|
|
|
|
6709
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6710
|
" <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"user.user.last_name\">\n" +
|
|
|
|
|
6711
|
" </div>\n" +
|
|
|
|
|
6712
|
" </div>\n" +
|
|
6511
|
"\n" +
|
|
6713
|
"\n" +
|
|
6512
|
" <table class=\"table table-striped report-list\" ng-show=\"!reports_list.is_loading\">\n" +
|
|
6714
|
" <div class=\"form-group\" id=\"row-status\">\n" +
|
|
6513
|
" <caption>Reports</caption>\n" +
|
|
6715
|
" <data-form-errors errors=\"user.profileForm.ae_validation.status\"></data-form-errors>\n" +
|
|
6514
|
" <thead>\n" +
|
|
6716
|
" <label for=\"status\" id=\"label-status\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
6515
|
" <tr>\n" +
|
|
6717
|
" Active\n" +
|
|
6516
|
" <th class=\"c1 ordering occurences\">#</th>\n" +
|
|
6718
|
" </label>\n" +
|
|
6517
|
" <th class=\"c2 application\">Application</th>\n" +
|
|
6719
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
6518
|
" <th class=\"c4 when\">When <input type=\"checkbox\" ng-model=\"reports_list.notRelativeTime\"\n" +
|
|
6720
|
" <input checked class=\"form-control\" id=\"status\" name=\"status\" type=\"checkbox\" ng-model=\"user.user.status\">\n" +
|
|
6519
|
" ng-change=\"reports_list.changeRelativeTime()\"\n" +
|
|
6721
|
" </div>\n" +
|
|
6520
|
" title=\"Tick to see UTC time instead relative\"></th>\n" +
|
|
6722
|
" </div>\n" +
|
|
6521
|
" <th class=\"c5 error_type\">Error</th>\n" +
|
|
|
|
|
6522
|
" </tr>\n" +
|
|
|
|
|
6523
|
" </thead>\n" +
|
|
|
|
|
6524
|
" <tbody>\n" +
|
|
|
|
|
6525
|
" <tr ng-repeat=\"report in reports_list.reportsPage track by report.id\">\n" +
|
|
|
|
|
6526
|
" <td class=\"c1 occurences\">\n" +
|
|
|
|
|
6527
|
" <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
|
|
|
|
|
6528
|
" <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
|
|
|
|
|
6529
|
" {{report.group.occurences|numberToThousands}}\n" +
|
|
|
|
|
6530
|
" </span>\n" +
|
|
|
|
|
6531
|
" </td>\n" +
|
|
|
|
|
6532
|
" <td class=\"c2 application\">\n" +
|
|
|
|
|
6533
|
" <div class=\"app_name\">{{report.resource_name}}</div>\n" +
|
|
|
|
|
6534
|
" <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
|
|
|
|
|
6535
|
" <td class=\"c3 when\">\n" +
|
|
|
|
|
6536
|
" <span ng-show=\"!reports_list.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
6537
|
" time=\"{{report.group.last_timestamp}}\"/></span>\n" +
|
|
|
|
|
6538
|
" </span>\n" +
|
|
|
|
|
6539
|
" <span ng-show=\"reports_list.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
|
|
|
|
|
6540
|
" </td>\n" +
|
|
|
|
|
6541
|
" <td class=\"c4 report ellipsis\"><a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\" title=\"{{report.error}}\">{{report.error || 'Unknown Exception'}}</a> <br/>\n" +
|
|
|
|
|
6542
|
" <span class=\"url\">{{ report.tags.view_name || report.url_path}}</td>\n" +
|
|
|
|
|
6543
|
" </tr>\n" +
|
|
|
|
|
6544
|
"\n" +
|
|
6723
|
"\n" +
|
|
6545
|
" </tbody>\n" +
|
|
6724
|
" <div class=\"form-group\" id=\"row-submit\">\n" +
|
|
6546
|
" </table>\n" +
|
|
6725
|
" <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
|
|
|
|
|
6726
|
" </label>\n" +
|
|
|
|
|
6727
|
" <div class=\"col-sm-8 col-lg-9\">\n" +
|
|
|
|
|
6728
|
" <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.userId ? 'Update' : 'Add'}} User\">\n" +
|
|
|
|
|
6729
|
" </div>\n" +
|
|
|
|
|
6730
|
" </div>\n" +
|
|
|
|
|
6731
|
" </form>\n" +
|
|
|
|
|
6732
|
" </div>\n" +
|
|
6547
|
" </div>\n" +
|
|
6733
|
" </div>\n" +
|
|
6548
|
"\n" +
|
|
6734
|
"\n" +
|
|
6549
|
"\n" +
|
|
6735
|
"\n" +
|
|
6550
|
" <div class=\"text-center\">\n" +
|
|
6736
|
" <div class=\"panel panel-default\" ng-if=\"user.user.id\">\n" +
|
|
6551
|
" <uib-pagination total-items=\"reports_list.itemCount\" items-per-page=\"reports_list.itemsPerPage\" ng-model=\"reports_list.page\" max-size=\"10\"\n" +
|
|
6737
|
" <div class=\"panel-heading\">\n" +
|
|
6552
|
" class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
|
|
6738
|
" <h3 class=\"panel-title\">Permission Summary</h3>\n" +
|
|
6553
|
" ng-change=\"reports_list.paginationChange()\"\n" +
|
|
|
|
|
6554
|
" ng-show=\"!reports_list.is_loading\"></uib-pagination>\n" +
|
|
|
|
|
6555
|
" </div>\n" +
|
|
|
|
|
6556
|
"\n" +
|
|
|
|
|
6557
|
"</div>\n"
|
|
|
|
|
6558
|
);
|
|
|
|
|
6559
|
|
|
|
|
|
6560
|
|
|
|
|
|
6561
|
$templateCache.put('templates/reports/parent_view.html',
|
|
|
|
|
6562
|
"<div ui-view></div>"
|
|
|
|
|
6563
|
);
|
|
|
|
|
6564
|
|
|
|
|
|
6565
|
|
|
|
|
|
6566
|
$templateCache.put('templates/reports/small_report_group_list.html',
|
|
|
|
|
6567
|
"<table class=\"errors-small-list\">\n" +
|
|
|
|
|
6568
|
" <tr ng-repeat=\"report_group in groups track by report_group.id\" class=\"animate-repeat\">\n" +
|
|
|
|
|
6569
|
" <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report_group.occurences|numberToThousands }}</span></td>\n" +
|
|
|
|
|
6570
|
" <td class=\"ellipsis c2 report_group\">\n" +
|
|
|
|
|
6571
|
" <a ui-sref=\"report.view_detail({groupId:report_group.id, reportId:report_group.last_report})\" title=\"{{report_group.error}}\" class=\"error-type\">\n" +
|
|
|
|
|
6572
|
" {{ report_group.error || \"Slow Report\"}}</a>\n" +
|
|
|
|
|
6573
|
" <br/>\n" +
|
|
|
|
|
6574
|
" <span ng-show=\"report_group.summed_duration\" class=\"duration\" data-uib-tooltip=\"Average duration\">{{report_group.summed_duration/report_group.occurences|round:2}}s</span>\n" +
|
|
|
|
|
6575
|
" <span class=\"url\">{{ report_group.view_name || report_group.url_path}}</span>\n" +
|
|
|
|
|
6576
|
" </td>\n" +
|
|
|
|
|
6577
|
" <td class=\"info\">\n" +
|
|
|
|
|
6578
|
" <strong ng-show=\"report_group.resource_id\">@{{applications[report_group.resource_id].resource_name}}</strong><br/>\n" +
|
|
|
|
|
6579
|
" <span class=\"date\">{{report_group.last_timestamp | isoToRelativeTime}}</span>\n" +
|
|
|
|
|
6580
|
" </td>\n" +
|
|
|
|
|
6581
|
" </tr>\n" +
|
|
|
|
|
6582
|
"</table>\n"
|
|
|
|
|
6583
|
);
|
|
|
|
|
6584
|
|
|
|
|
|
6585
|
|
|
|
|
|
6586
|
$templateCache.put('templates/reports/small_report_list.html',
|
|
|
|
|
6587
|
"<table class=\"errors-small-list\">\n" +
|
|
|
|
|
6588
|
" <tr ng-repeat=\"report in reports track by $index\" ng-show=\"reports.length > 0\" class=\"animate-repeat\">\n" +
|
|
|
|
|
6589
|
" <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report.group.occurences|numberToThousands }}</span></td>\n" +
|
|
|
|
|
6590
|
" <td class=\"ellipsis c2 report\">\n" +
|
|
|
|
|
6591
|
" <a ui-sref=\"report.view_detail({groupId:report.group_id, reportId:report.report_id})\" title=\"{{report.error}}\" class=\"error-type\">\n" +
|
|
|
|
|
6592
|
" {{ report.error || \"Slow Report\"}}</a>\n" +
|
|
|
|
|
6593
|
" <br/>\n" +
|
|
|
|
|
6594
|
" <span ng-show=\"report.group.summed_duration\" class=\"duration\" data-uib-tooltip=\"Average duration\">{{report.group.summed_duration/report.group.occurences|round:2}}s</span>\n" +
|
|
|
|
|
6595
|
" <span class=\"url\">{{ report.view_name || report.url_path}}</span>\n" +
|
|
|
|
|
6596
|
" </td>\n" +
|
|
|
|
|
6597
|
" <td class=\"info\">\n" +
|
|
|
|
|
6598
|
" <strong ng-show=\"report.resource_id\">@{{applications[report.resource_id].resource_name}}</strong><br/>\n" +
|
|
|
|
|
6599
|
" <span class=\"date\">{{report.last_timestamp | isoToRelativeTime}}</span>\n" +
|
|
|
|
|
6600
|
" </td>\n" +
|
|
|
|
|
6601
|
" </tr>\n" +
|
|
|
|
|
6602
|
"</table>\n"
|
|
|
|
|
6603
|
);
|
|
|
|
|
6604
|
|
|
|
|
|
6605
|
|
|
|
|
|
6606
|
$templateCache.put('templates/reports/view.html',
|
|
|
|
|
6607
|
"<script type=\"text/ng-template\" id=\"slow_call.html\">\n" +
|
|
|
|
|
6608
|
" <table class=\"report-table\">\n" +
|
|
|
|
|
6609
|
" <tr>\n" +
|
|
|
|
|
6610
|
" <td class=\"table-label\">Type</td>\n" +
|
|
|
|
|
6611
|
" <td class=\"data\"><strong>{{call.type}}\n" +
|
|
|
|
|
6612
|
" ({{call.subtype}})\n" +
|
|
|
|
|
6613
|
" </strong></td>\n" +
|
|
|
|
|
6614
|
" </tr>\n" +
|
|
|
|
|
6615
|
" <tr>\n" +
|
|
|
|
|
6616
|
" <td class=\"table-label\">Duration</td>\n" +
|
|
|
|
|
6617
|
" <td class=\"data\"><strong class=\"textColor_1\">{{call.duration}}</strong></td>\n" +
|
|
|
|
|
6618
|
" </tr>\n" +
|
|
|
|
|
6619
|
" <tr>\n" +
|
|
|
|
|
6620
|
" <td class=\"table-label\">Start Time</td>\n" +
|
|
|
|
|
6621
|
" <td class=\"data\">{{call.timestamp}}</td>\n" +
|
|
|
|
|
6622
|
" </tr>\n" +
|
|
|
|
|
6623
|
" <tr>\n" +
|
|
|
|
|
6624
|
" <td class=\"table-label\">Statement</td>\n" +
|
|
|
|
|
6625
|
" <td class=\"data\">\n" +
|
|
|
|
|
6626
|
" <pre class=\"word-wrap\">{{call.statement}}</pre>\n" +
|
|
|
|
|
6627
|
" </td>\n" +
|
|
|
|
|
6628
|
" </tr>\n" +
|
|
|
|
|
6629
|
" <tr ng-if=\"call.location\">\n" +
|
|
|
|
|
6630
|
" <td class=\"table-label\">Location</td>\n" +
|
|
|
|
|
6631
|
" <td class=\"data\">{{call.location}}</td>\n" +
|
|
|
|
|
6632
|
" </tr>\n" +
|
|
|
|
|
6633
|
" <tr>\n" +
|
|
|
|
|
6634
|
" <td class=\"table-label\">Parameters</td>\n" +
|
|
|
|
|
6635
|
" <td class=\"\">\n" +
|
|
|
|
|
6636
|
" <div class=\"var-listing\" human-format vars=\"call.parameters\"></div>\n" +
|
|
|
|
|
6637
|
" </td>\n" +
|
|
|
|
|
6638
|
" </tr>\n" +
|
|
|
|
|
6639
|
" </table>\n" +
|
|
|
|
|
6640
|
"\n" +
|
|
|
|
|
6641
|
" <div ng-if=\"call.children.length > 0\" class=\"subcalls p-l-8\">\n" +
|
|
|
|
|
6642
|
"\n" +
|
|
|
|
|
6643
|
" <p><strong>\n" +
|
|
|
|
|
6644
|
" <small>Sub-calls</small>\n" +
|
|
|
|
|
6645
|
" </strong></p>\n" +
|
|
|
|
|
6646
|
"\n" +
|
|
|
|
|
6647
|
" <div class=\"panel panel-default\">\n" +
|
|
|
|
|
6648
|
" <div ng-repeat=\"call in call.children\" ng-include=\"'slow_call.html'\" class=\"panel-body\"/>\n" +
|
|
|
|
|
6649
|
" </div>\n" +
|
|
6739
|
" </div>\n" +
|
|
6650
|
" </div>\n" +
|
|
6740
|
" <div class=\"panel-body\">\n" +
|
|
6651
|
" </div>\n" +
|
|
6741
|
" <h3>Direct application permissions</h3>\n" +
|
|
6652
|
"\n" +
|
|
6742
|
"\n" +
|
|
6653
|
"</script>\n" +
|
|
6743
|
" <ul class=\"list-group\">\n" +
|
|
|
|
|
6744
|
" <li ng-repeat=\"perm in user.resourcePermissions.user.application\" class=\"animate-repeat list-group-item\">\n" +
|
|
|
|
|
6745
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
|
|
|
6746
|
" <div class=\"pull-right\">\n" +
|
|
6654
|
"\n" +
|
|
6747
|
"\n" +
|
|
6655
|
"<script type=\"text/ng-template\" id=\"AssignReportCtrl.html\">\n" +
|
|
6748
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
6656
|
"\n" +
|
|
6749
|
"\n" +
|
|
6657
|
" <div class=\"modal-header\">\n" +
|
|
6750
|
" <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
|
|
6658
|
" <h3>Assign users to report</h3>\n" +
|
|
6751
|
" <span class=\"fa fa-cog\"></span>\n" +
|
|
6659
|
" </div>\n" +
|
|
6752
|
" </a>\n" +
|
|
6660
|
" <div class=\"modal-body\">\n" +
|
|
6753
|
" </div>\n" +
|
|
|
|
|
6754
|
" </li>\n" +
|
|
|
|
|
6755
|
" </ul>\n" +
|
|
6661
|
"\n" +
|
|
6756
|
"\n" +
|
|
6662
|
" <ng-include src=\"'templates/loader.html'\" ng-if=\"ctrl.loading\"></ng-include>\n" +
|
|
6757
|
" <h3>Direct dashboard permissions</h3>\n" +
|
|
6663
|
"\n" +
|
|
6758
|
"\n" +
|
|
6664
|
" <div class=\"row\" ng-if=\"!ctrl.loading\">\n" +
|
|
6759
|
" <ul class=\"list-group\">\n" +
|
|
6665
|
" <div class=\"col-sm-6\">\n" +
|
|
6760
|
" <li ng-repeat=\"perm in user.resourcePermissions.user.dashboard\" class=\"animate-repeat list-group-item\">\n" +
|
|
6666
|
" <strong>Unassigned</strong>\n" +
|
|
6761
|
" <strong>{{ perm.self.resource_name }}</strong>\n" +
|
|
|
|
|
6762
|
" <div class=\"pull-right\">\n" +
|
|
6667
|
"\n" +
|
|
6763
|
"\n" +
|
|
6668
|
" <div class=\"user-assignment\" ng-repeat=\"user in ctrl.unAssignedUsers\"\n" +
|
|
6764
|
" <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
|
|
6669
|
" ng-click=\"ctrl.reassignUser(user)\">\n" +
|
|
|
|
|
6670
|
" <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
|
|
|
|
|
6671
|
" <strong>{{user.user_name}}</strong><br/>\n" +
|
|
|
|
|
6672
|
" {{user.name}}\n" +
|
|
|
|
|
6673
|
" <div class=\"clear\"></div>\n" +
|
|
|
|
|
6674
|
" </div>\n" +
|
|
|
|
|
6675
|
" </div>\n" +
|
|
|
|
|
6676
|
"\n" +
|
|
6765
|
"\n" +
|
|
6677
|
" <div class=\"col-sm-6\">\n" +
|
|
6766
|
" <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
|
|
6678
|
" <strong>Assigned</strong>\n" +
|
|
6767
|
" <span class=\"fa fa-cog\"></span>\n" +
|
|
|
|
|
6768
|
" </a>\n" +
|
|
|
|
|
6769
|
" </div>\n" +
|
|
|
|
|
6770
|
" </li>\n" +
|
|
|
|
|
6771
|
" </ul>\n" +
|
|
6679
|
"\n" +
|
|
6772
|
"\n" +
|
|
6680
|
" <div class=\"user-assignment\" ng-repeat=\"user in ctrl.assignedUsers\" ng-click=\"ctrl.reassignUser(user)\">\n" +
|
|
|
|
|
6681
|
" <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
|
|
|
|
|
6682
|
" {{user.user_name}}<br/>\n" +
|
|
|
|
|
6683
|
" {{user.name}}\n" +
|
|
|
|
|
6684
|
" <div class=\"clear\"></div>\n" +
|
|
|
|
|
6685
|
" </div>\n" +
|
|
|
|
|
6686
|
" </div>\n" +
|
|
|
|
|
6687
|
" </div>\n" +
|
|
6773
|
" </div>\n" +
|
|
6688
|
" </div>\n" +
|
|
|
|
|
6689
|
" <div class=\"modal-footer\">\n" +
|
|
|
|
|
6690
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">OK</button>\n" +
|
|
|
|
|
6691
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
|
|
|
6692
|
" </div>\n" +
|
|
|
|
|
6693
|
"</script>\n" +
|
|
|
|
|
6694
|
"\n" +
|
|
6774
|
"\n" +
|
|
6695
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"report.is_loading.report\"></ng-include>\n" +
|
|
6775
|
" </div>\n" +
|
|
6696
|
"\n" +
|
|
6776
|
"\n" +
|
|
6697
|
"<div ng-if=\"!report.is_loading.report && report.report === null\">\n" +
|
|
|
|
|
6698
|
" <strong>OOPS something went wrong :(</strong>\n" +
|
|
|
|
|
6699
|
"</div>\n" +
|
|
|
|
|
6700
|
"\n" +
|
|
6777
|
"\n" +
|
|
6701
|
"<div ng-if=\"report.report !== null && !report.is_loading.report\">\n" +
|
|
6778
|
"</div>\n"
|
|
|
|
|
6779
|
);
|
|
|
|
|
6780
|
|
|
|
|
|
6781
|
|
|
|
|
|
6782
|
$templateCache.put('templates/admin/users/users_list.html',
|
|
|
|
|
6783
|
"<ng-include src=\"'templates/loader.html'\" ng-if=\"users.loading.users\"></ng-include>\n" +
|
|
6702
|
"\n" +
|
|
6784
|
"\n" +
|
|
6703
|
" <div ng-if=\"report.stateHolder.AeUser.id\" class=\"row\">\n" +
|
|
6785
|
"<div ng-show=\"!users.loading.users\">\n" +
|
|
6704
|
" <div class=\"col-lg-12\">\n" +
|
|
|
|
|
6705
|
" <a onclick=\"window.history.back()\" class=\"btn btn-default\" ng-if=\"report.window.history.length > 2\"><span class=\"fa fa-arrow-circle-o-left\"></span>\n" +
|
|
|
|
|
6706
|
" Go back</a>\n" +
|
|
|
|
|
6707
|
" <a class=\"btn btn-default\" ng-click=\"report.assignUsersModal()\" ng-if=\"report.reportType == 'report'\"><span\n" +
|
|
|
|
|
6708
|
" class=\"fa fa-flag\"></span> Assign report\n" +
|
|
|
|
|
6709
|
" to user</a>\n" +
|
|
|
|
|
6710
|
"\n" +
|
|
6786
|
"\n" +
|
|
6711
|
" <a class=\"btn {{ report.report.group.fixed ? 'btn-success' : 'btn-default'}}\" ng-click=\"report.markFixed()\"\n" +
|
|
6787
|
" <div class=\"panel panel-default\">\n" +
|
|
6712
|
" ng-if=\"report.reportType == 'report'\">\n" +
|
|
|
|
|
6713
|
" <span class=\"fa fa-check\"></span> Mark fixed</a>\n" +
|
|
|
|
|
6714
|
"\n" +
|
|
6788
|
"\n" +
|
|
6715
|
" <span class=\"dropdown\" ng-if=\"report.report.application.integrations.length\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
6789
|
" <div class=\"panel-heading\">\n" +
|
|
6716
|
" <a class=\"dropdown-toggle btn btn-default\" data-uib-dropdown-toggle>\n" +
|
|
6790
|
" {{users.activeUsers}} active out of {{users.users.length}} users\n" +
|
|
6717
|
" <span class=\"fa fa-send\"></span> Integrations\n" +
|
|
6791
|
" </div>\n" +
|
|
6718
|
" </a>\n" +
|
|
|
|
|
6719
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
6720
|
" <li ng-repeat=\"choice in report.report.application.integrations\">\n" +
|
|
|
|
|
6721
|
" <a ng-click=\"report.runIntegration(choice.name)\">{{choice.action}}</a>\n" +
|
|
|
|
|
6722
|
" </li>\n" +
|
|
|
|
|
6723
|
" </ul>\n" +
|
|
|
|
|
6724
|
" </span>\n" +
|
|
|
|
|
6725
|
"\n" +
|
|
6792
|
"\n" +
|
|
6726
|
" <a class=\"btn btn-default\" ng-click=\"report.markPublic()\">Make {{report.group.public ? 'private' : 'public'}}</a>\n" +
|
|
|
|
|
6727
|
"\n" +
|
|
6793
|
"\n" +
|
|
6728
|
"<span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
6794
|
" <table st-table=\"displayedCollection\" st-safe-src=\"users.users\" class=\"table table-striped\">\n" +
|
|
6729
|
" <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Delete</a>\n" +
|
|
6795
|
" <thead>\n" +
|
|
6730
|
" <ul class=\"dropdown-menu\">\n" +
|
|
6796
|
" <tr>\n" +
|
|
6731
|
" <li><a>No</a></li>\n" +
|
|
6797
|
" <th class=\"user_name\" st-sort=\"user_name\"><a>Username</a></th>\n" +
|
|
6732
|
" <li><a ng-click=\"report.delete()\">Yes</a></li>\n" +
|
|
6798
|
" <th class=\"email\" st-sort=\"email\"><a>Email</a></th>\n" +
|
|
6733
|
" </ul>\n" +
|
|
6799
|
" <th class=\"status\" st-sort=\"status\"><a>Status</a></th>\n" +
|
|
6734
|
"</span>\n" +
|
|
6800
|
" <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
|
|
6735
|
" </div>\n" +
|
|
6801
|
" <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
|
|
6736
|
" </div>\n" +
|
|
6802
|
" <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
|
|
|
|
|
6803
|
" <th class=\"options\"></th>\n" +
|
|
|
|
|
6804
|
" </tr>\n" +
|
|
|
|
|
6805
|
" <tr>\n" +
|
|
|
|
|
6806
|
" <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6807
|
" <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6808
|
" <th></th>\n" +
|
|
|
|
|
6809
|
" <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6810
|
" <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6811
|
" <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
|
|
|
|
|
6812
|
" <th></th>\n" +
|
|
|
|
|
6813
|
" </tr>\n" +
|
|
|
|
|
6814
|
" </thead>\n" +
|
|
|
|
|
6815
|
" <tbody>\n" +
|
|
6737
|
"\n" +
|
|
6816
|
"\n" +
|
|
6738
|
" <div class=\"row\">\n" +
|
|
6817
|
" <tr ng-repeat=\"user in displayedCollection track by user.id\">\n" +
|
|
6739
|
" <div class=\"col-lg-4\">\n" +
|
|
6818
|
" <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
|
|
|
|
|
6819
|
" <td class=\"word-wrap small\">{{user.email}}</td>\n" +
|
|
|
|
|
6820
|
" <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
|
|
|
|
|
6821
|
" <td class=\"word-wrap small\">{{user.first_name}}</td>\n" +
|
|
|
|
|
6822
|
" <td class=\"word-wrap small\">{{user.last_name}}</td>\n" +
|
|
|
|
|
6823
|
" <td><span data-uib-tooltip=\"{{user.last_login_date}}\" class=\"small\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
|
|
|
|
|
6824
|
" <td>\n" +
|
|
|
|
|
6825
|
" <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
|
|
|
|
|
6826
|
" <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
|
|
|
|
|
6827
|
" <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
|
|
|
|
|
6828
|
" <ul class=\"dropdown-menu\">\n" +
|
|
|
|
|
6829
|
" <li><a>No</a></li>\n" +
|
|
|
|
|
6830
|
" <li><a ng-click=\"users.removeUser(user)\">Yes</a></li>\n" +
|
|
|
|
|
6831
|
" </ul>\n" +
|
|
|
|
|
6832
|
" </span>\n" +
|
|
|
|
|
6833
|
" </tr>\n" +
|
|
|
|
|
6834
|
" <tfoot>\n" +
|
|
|
|
|
6835
|
" <tr>\n" +
|
|
|
|
|
6836
|
" <td colspan=\"6\" class=\"text-center\">\n" +
|
|
|
|
|
6837
|
" <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
|
|
|
|
|
6838
|
" </td>\n" +
|
|
|
|
|
6839
|
" </tr>\n" +
|
|
|
|
|
6840
|
" </tfoot>\n" +
|
|
|
|
|
6841
|
" </tbody>\n" +
|
|
|
|
|
6842
|
" </table>\n" +
|
|
6740
|
"\n" +
|
|
6843
|
"\n" +
|
|
6741
|
" <div class=\"panel panel-default m-t-1\">\n" +
|
|
|
|
|
6742
|
" <div class=\"panel-body\">\n" +
|
|
|
|
|
6743
|
"\n" +
|
|
6844
|
"\n" +
|
|
6744
|
" <h3 class=\"m-t-0\">Report Information</h3>\n" +
|
|
6845
|
" </div>\n" +
|
|
|
|
|
6846
|
"</div>\n"
|
|
|
|
|
6847
|
);
|
|
|
|
|
6848
|
|
|
|
|
|
6849
|
|
|
|
|
|
6850
|
$templateCache.put('templates/directives/search_type_ahead.html',
|
|
|
|
|
6851
|
"<a>\n" +
|
|
|
|
|
6852
|
" <span class=\"tag\" ng-show=\"match.model.tag\">{{match.model.tag}}</span>\n" +
|
|
|
|
|
6853
|
" <span class=\"tag\" ng-show=\"!match.model.tag\">{{match.label}}</span>\n" +
|
|
|
|
|
6854
|
" <span ng-show=\"match.model.example\">-</span> <span class=\"example\">{{match.model.example}}</span>\n" +
|
|
|
|
|
6855
|
" <div class=\"description\">{{match.model.description}}</div>\n" +
|
|
6745
|
"\n" +
|
|
6856
|
"\n" +
|
|
6746
|
" <table class=\"report-table with-ellipsis\">\n" +
|
|
6857
|
"</a>\n"
|
|
6747
|
" <tr>\n" +
|
|
6858
|
);
|
|
6748
|
" <td class=\"table-label\">Occurences</td>\n" +
|
|
6859
|
|
|
6749
|
" <td class=\"data\">{{report.report.group.occurences}}</td>\n" +
|
|
6860
|
|
|
6750
|
" </tr>\n" +
|
|
6861
|
$templateCache.put('templates/directives/user_search_type_ahead.html',
|
|
6751
|
" <tr ng-if=\"report.report.http_status\">\n" +
|
|
6862
|
"<a>\n" +
|
|
6752
|
" <td class=\"table-label\">HTTP status</td>\n" +
|
|
6863
|
" <span>{{match.label}}</span> -\n" +
|
|
6753
|
" <td class=\"data\">{{report.report.http_status}}</td>\n" +
|
|
6864
|
" <span class=\"color-secondary\">{{match.model.name}}</span>\n" +
|
|
6754
|
" </tr>\n" +
|
|
6865
|
"</a>\n"
|
|
6755
|
" <tr ng-if=\"report.report.group.priority\">\n" +
|
|
6866
|
);
|
|
6756
|
" <td class=\"table-label\">Priority</td>\n" +
|
|
6867
|
|
|
6757
|
" <td class=\"data\">{{report.report.group.priority}}</td>\n" +
|
|
6868
|
|
|
6758
|
" </tr>\n" +
|
|
6869
|
$templateCache.put('templates/integrations/bitbucket.html',
|
|
6759
|
" <tr ng-if=\"report.report.group.public\">\n" +
|
|
6870
|
" <div class=\"modal-header\">\n" +
|
|
6760
|
" <td class=\"table-label\">Public URL</td>\n" +
|
|
6871
|
" <h3 class=\"m-t-0\">Add issue to Bitbucket</h3>\n" +
|
|
6761
|
" <td class=\"data\">\n" +
|
|
6872
|
" </div>\n" +
|
|
6762
|
" <form>\n" +
|
|
6873
|
" <div class=\"modal-body\">\n" +
|
|
6763
|
" <textarea class=\"TextAreaField form-control\" id=\"public-url\" onclick=\"this.select()\">{{report.$state.href(report.$state.current.name, report.$state.params, {absolute: true})}}</textarea>\n" +
|
|
6874
|
" <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
|
|
6764
|
" </form>\n" +
|
|
6875
|
" <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
|
|
6765
|
" </td>\n" +
|
|
6876
|
" <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
|
|
6766
|
" </tr>\n" +
|
|
6877
|
" </div>\n" +
|
|
6767
|
" <tr data-uib-tooltip=\"{{report.report.url}}\">\n" +
|
|
|
|
|
6768
|
" <td class=\"table-label\">URL</td>\n" +
|
|
|
|
|
6769
|
" <td class=\"data ellipsis\"><a href=\"{{report.report.url}}\">{{report.report.url}}</a></td>\n" +
|
|
|
|
|
6770
|
" </tr>\n" +
|
|
|
|
|
6771
|
"\n" +
|
|
6878
|
"\n" +
|
|
6772
|
" <tr ng-if=\"report.report.ip\">\n" +
|
|
6879
|
" <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
|
|
6773
|
" <td class=\"table-label\">Remote IP</td>\n" +
|
|
6880
|
" <div class=\"form-group\">\n" +
|
|
6774
|
" <td class=\"data\">{{report.report.ip}}</td>\n" +
|
|
6881
|
" <label for=\"issue_title\">Issue Title</label>\n" +
|
|
6775
|
" </tr>\n" +
|
|
6882
|
" <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
|
|
6776
|
" <tr ng-if=\"report.report.user_agent\" data-uib-tooltip=\"{{report.report.user_agent}}\">\n" +
|
|
6883
|
" </div>\n" +
|
|
6777
|
" <td class=\"table-label\">User Agent</td>\n" +
|
|
6884
|
" <div class=\"form-group row\">\n" +
|
|
6778
|
" <td class=\"data ellipsis\">{{report.report.user_agent}}</td>\n" +
|
|
6885
|
" <div class=\"col-sm-6\">\n" +
|
|
6779
|
" </tr>\n" +
|
|
6886
|
" <label for=\"issue_priority\">Priority</label>\n" +
|
|
6780
|
" <tr ng-if=\"report.report.message\">\n" +
|
|
6887
|
" <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
|
|
6781
|
" <td class=\"table-label\">Message</td>\n" +
|
|
6888
|
" </div>\n" +
|
|
6782
|
" <td class=\"data\">{{report.report.message}}</td>\n" +
|
|
|
|
|
6783
|
" </tr>\n" +
|
|
|
|
|
6784
|
" <tr ng-if=\"report.report.duration > 0\">\n" +
|
|
|
|
|
6785
|
" <td class=\"table-label\">Duration</td>\n" +
|
|
|
|
|
6786
|
" <td class=\"data\">\n" +
|
|
|
|
|
6787
|
" <span>{{report.report.duration}}s</span>\n" +
|
|
|
|
|
6788
|
" </td>\n" +
|
|
|
|
|
6789
|
" </tr>\n" +
|
|
|
|
|
6790
|
" <tr>\n" +
|
|
|
|
|
6791
|
" <td class=\"table-label\">First occured</td>\n" +
|
|
|
|
|
6792
|
" <td class=\"data\">\n" +
|
|
|
|
|
6793
|
" <span uib-tooltip=\"{{report.report.group.first_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
6794
|
" time=\"{{report.report.group.first_timestamp}}\"/></span>\n" +
|
|
|
|
|
6795
|
" </td>\n" +
|
|
|
|
|
6796
|
" </tr>\n" +
|
|
|
|
|
6797
|
" <tr>\n" +
|
|
|
|
|
6798
|
" <td class=\"table-label\">Last occured</td>\n" +
|
|
|
|
|
6799
|
" <td class=\"data\">\n" +
|
|
|
|
|
6800
|
" <span uib-tooltip=\"{{report.report.group.last_timestamp}}\"><iso-to-relative-time\n" +
|
|
|
|
|
6801
|
" time=\"{{report.report.group.last_timestamp}}\"/></span>\n" +
|
|
|
|
|
6802
|
" </td>\n" +
|
|
|
|
|
6803
|
" </tr>\n" +
|
|
|
|
|
6804
|
" </table>\n" +
|
|
|
|
|
6805
|
"\n" +
|
|
6889
|
"\n" +
|
|
6806
|
" <div ng-if=\"report.requestStats\">\n" +
|
|
6890
|
" <div class=\"col-sm-6\">\n" +
|
|
6807
|
" <h3>Performance stats</h3>\n" +
|
|
6891
|
" <label for=\"issue_responsible\">Assignee</label>\n" +
|
|
|
|
|
6892
|
" <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
|
|
|
|
|
6893
|
" </div>\n" +
|
|
|
|
|
6894
|
" </div>\n" +
|
|
|
|
|
6895
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6896
|
" <label for=\"issue_content\">Description</label>\n" +
|
|
|
|
|
6897
|
" <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
|
|
|
|
|
6898
|
" </div>\n" +
|
|
|
|
|
6899
|
" </form>\n" +
|
|
6808
|
"\n" +
|
|
6900
|
"\n" +
|
|
6809
|
" <div class=\"perf_stats\">\n" +
|
|
6901
|
" </div>\n" +
|
|
6810
|
" <span class=\"stat\" ng-repeat=\"stat in report.requestStats\"\n" +
|
|
6902
|
" <div class=\"modal-footer\">\n" +
|
|
6811
|
" ng-if=\"stat.calls > 0 || stat.value > 0\"><strong>\n" +
|
|
6903
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
|
|
6812
|
" <span class=\"{{stat.name}} bar\" style=\"width:10px\"></span> {{stat.calls}}\n" +
|
|
6904
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
6813
|
" <span ng-if=\"stat.name!='main'\"><small>{{stat.name}} calls</small></span>\n" +
|
|
6905
|
" </div>\n"
|
|
6814
|
" <span ng-if=\"stat.name=='main'\">\n" +
|
|
6906
|
);
|
|
6815
|
" <span class=\"fa fa-question-circle\"\n" +
|
|
6907
|
|
|
6816
|
" data-uib-tooltip=\"Execution time that didnt get assigned to other layers\"></span> Other</span>\n" +
|
|
6908
|
|
|
6817
|
" </strong>\n" +
|
|
6909
|
$templateCache.put('templates/integrations/github.html',
|
|
6818
|
" </span>\n" +
|
|
6910
|
" <div class=\"modal-header\">\n" +
|
|
|
|
|
6911
|
" <h3 class=\"m-t-0\">Add issue to Github</h3>\n" +
|
|
|
|
|
6912
|
" </div>\n" +
|
|
|
|
|
6913
|
" <div class=\"modal-body\">\n" +
|
|
|
|
|
6914
|
" <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
|
|
6819
|
"\n" +
|
|
6915
|
"\n" +
|
|
6820
|
" <div style=\"width: 100%; overflow:hidden\">\n" +
|
|
6916
|
" <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
|
|
6821
|
" <div class=\"{{stat.name}} bar\" style=\"width:{{stat.percent}}%; height: 25px\"\n" +
|
|
6917
|
" <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
|
|
6822
|
" ng-repeat=\"stat in report.requestStats\"\n" +
|
|
6918
|
" </div>\n" +
|
|
6823
|
" data-uib-tooltip=\"{{stat.value}}s - Cumulative time spent in this request on all {{ stat.name }} calls\"></div>\n" +
|
|
|
|
|
6824
|
" <div class=\"row\">\n" +
|
|
|
|
|
6825
|
" <div class=\"col-xs-6 text-left\">\n" +
|
|
|
|
|
6826
|
" <small>0s</small>\n" +
|
|
|
|
|
6827
|
" </div>\n" +
|
|
|
|
|
6828
|
" <div class=\"col-xs-6 text-right\">\n" +
|
|
|
|
|
6829
|
" <small>{{report.report.duration.toFixed(3)}}s</small>\n" +
|
|
|
|
|
6830
|
" </div>\n" +
|
|
|
|
|
6831
|
" </div>\n" +
|
|
|
|
|
6832
|
" </div>\n" +
|
|
|
|
|
6833
|
" </div>\n" +
|
|
|
|
|
6834
|
" </div>\n" +
|
|
|
|
|
6835
|
"\n" +
|
|
6919
|
"\n" +
|
|
6836
|
" <h3>Tags</h3>\n" +
|
|
6920
|
" <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
|
|
|
|
|
6921
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6922
|
" <label for=\"issue_title\">Issue Title</label>\n" +
|
|
|
|
|
6923
|
" <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
|
|
|
|
|
6924
|
" </div>\n" +
|
|
|
|
|
6925
|
" <div class=\"form-group row\">\n" +
|
|
|
|
|
6926
|
" <div class=\"col-sm-6\">\n" +
|
|
|
|
|
6927
|
" <label for=\"issue_status\">Tag</label>\n" +
|
|
|
|
|
6928
|
" <select class=\"form-control\" id=\"issue_status\" ng-options=\"s for s in ctrl.statuses\" ng-model=\"ctrl.form.status\"></select>\n" +
|
|
|
|
|
6929
|
" </div>\n" +
|
|
6837
|
"\n" +
|
|
6930
|
"\n" +
|
|
6838
|
" <table class=\"report-table with-tags\">\n" +
|
|
6931
|
" <div class=\"col-sm-6\">\n" +
|
|
6839
|
" <tr ng-repeat=\"(tag, value) in report.report.tags\">\n" +
|
|
6932
|
" <label for=\"issue_responsible\">Assignee</label>\n" +
|
|
6840
|
" <td class=\"table-label\" ng-switch=\"tag\"><!--\n" +
|
|
6933
|
" <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
|
|
6841
|
" --><span ng-switch-when=\"user_name\">Username/UID</span><!--\n" +
|
|
6934
|
" </div>\n" +
|
|
6842
|
" --><span ng-switch-when=\"view_name\">View Name</span><!--\n" +
|
|
6935
|
" </div>\n" +
|
|
6843
|
" --><span ng-switch-when=\"server_name\">Server Name</span><!--\n" +
|
|
6936
|
" <div class=\"form-group\">\n" +
|
|
6844
|
" --><span ng-switch-default>{{ tag }}</span>\n" +
|
|
6937
|
" <label for=\"issue_description\">Description</label>\n" +
|
|
6845
|
" </td>\n" +
|
|
6938
|
" <textarea id=\"issue_description\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
|
|
6846
|
" <td class=\"data\"><a ng-click=\"report.searchTag(tag, value)\">{{ value }}</td>\n" +
|
|
6939
|
" </div>\n" +
|
|
6847
|
" </tr>\n" +
|
|
6940
|
" </form>\n" +
|
|
6848
|
" </table>\n" +
|
|
|
|
|
6849
|
"\n" +
|
|
6941
|
"\n" +
|
|
6850
|
" </div>\n" +
|
|
6942
|
" </div>\n" +
|
|
6851
|
" </div>\n" +
|
|
6943
|
" <div class=\"modal-footer\">\n" +
|
|
|
|
|
6944
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
|
|
|
|
|
6945
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
|
|
|
6946
|
" </div>\n"
|
|
|
|
|
6947
|
);
|
|
|
|
|
6948
|
|
|
|
|
|
6949
|
|
|
|
|
|
6950
|
$templateCache.put('templates/integrations/jira.html',
|
|
|
|
|
6951
|
" <div class=\"modal-header\">\n" +
|
|
|
|
|
6952
|
" <h3 class=\"m-t-0\">Add issue to Jira</h3>\n" +
|
|
|
|
|
6953
|
" </div>\n" +
|
|
|
|
|
6954
|
" <div class=\"modal-body\">\n" +
|
|
|
|
|
6955
|
" <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
|
|
|
|
|
6956
|
" <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
|
|
|
|
|
6957
|
" <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
|
|
|
|
|
6958
|
" </div>\n" +
|
|
6852
|
"\n" +
|
|
6959
|
"\n" +
|
|
|
|
|
6960
|
" <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
|
|
|
|
|
6961
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6962
|
" <label for=\"issue_title\">Issue Title</label>\n" +
|
|
|
|
|
6963
|
" <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
|
|
|
|
|
6964
|
" </div>\n" +
|
|
6853
|
"\n" +
|
|
6965
|
"\n" +
|
|
|
|
|
6966
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6967
|
" <label for=\"issue_type\">Issue Type</label>\n" +
|
|
|
|
|
6968
|
" <select class=\"form-control\" id=\"issue_type\" ng-options=\"i.name for i in ctrl.issue_types\" ng-model=\"ctrl.form.issue_type\"></select>\n" +
|
|
6854
|
" </div>\n" +
|
|
6969
|
" </div>\n" +
|
|
6855
|
" <div class=\"col-lg-8\">\n" +
|
|
6970
|
" <div class=\"form-group row\">\n" +
|
|
6856
|
" <div class=\"frames\">\n" +
|
|
6971
|
" <div class=\"col-sm-6\">\n" +
|
|
6857
|
" <p class=\"text-center\">Report history</p>\n" +
|
|
6972
|
" <label for=\"issue_priority\">Priority</label>\n" +
|
|
|
|
|
6973
|
" <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s.name for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
|
|
|
|
|
6974
|
" </div>\n" +
|
|
6858
|
"\n" +
|
|
6975
|
"\n" +
|
|
6859
|
" <div class=\"panel\" ng-if=\"!report.is_loading.history\">\n" +
|
|
6976
|
" <div class=\"col-sm-6\">\n" +
|
|
6860
|
" <div class=\"panel-body\">\n" +
|
|
6977
|
" <label for=\"issue_responsible\">Assignee</label>\n" +
|
|
6861
|
" <c3chart data-domid=\"report_history_chart\" data-data=\"report.reportHistoryData\" data-config=\"report.reportHistoryConfig\">\n" +
|
|
6978
|
" <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.name for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
|
|
6862
|
" </c3chart>\n" +
|
|
6979
|
" </div>\n" +
|
|
6863
|
" </div>\n" +
|
|
6980
|
" </div>\n" +
|
|
6864
|
" </div>\n" +
|
|
6981
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
6982
|
" <label for=\"issue_content\">Description</label>\n" +
|
|
|
|
|
6983
|
" <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
|
|
|
|
|
6984
|
" </div>\n" +
|
|
|
|
|
6985
|
" </form>\n" +
|
|
6865
|
"\n" +
|
|
6986
|
"\n" +
|
|
6866
|
" <div class=\"row m-b-1\">\n" +
|
|
6987
|
" </div>\n" +
|
|
6867
|
" <div class=\"col-sm-2 text-left\">\n" +
|
|
6988
|
" <div class=\"modal-footer\">\n" +
|
|
6868
|
" <a class=\"switch_detail btn btn-sm btn-default {{report.report.group.previous_report ? '' : 'disabled'}}\"\n" +
|
|
6989
|
" <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
|
|
6869
|
" ng-click=\"report.previousDetail()\">\n" +
|
|
6990
|
" <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
|
|
6870
|
" <span class=\"fa fa-arrow-left\"></span>\n" +
|
|
6991
|
" </div>\n"
|
|
6871
|
" Prev. detail</a>\n" +
|
|
6992
|
);
|
|
|
|
|
6993
|
|
|
|
|
|
6994
|
|
|
|
|
|
6995
|
$templateCache.put('templates/loader.html',
|
|
|
|
|
6996
|
"<div class=\"text-center\">\n" +
|
|
|
|
|
6997
|
" <span class=\"fa fa-cog fa-spin fa-5x m-a-4\"></span>\n" +
|
|
|
|
|
6998
|
"</div>\n"
|
|
|
|
|
6999
|
);
|
|
|
|
|
7000
|
|
|
|
|
|
7001
|
|
|
|
|
|
7002
|
$templateCache.put('templates/quickstart.html',
|
|
|
|
|
7003
|
"<h2>AppEnlight quickstart</h2>\n" +
|
|
6872
|
"\n" +
|
|
7004
|
"\n" +
|
|
6873
|
" </div>\n" +
|
|
7005
|
"<p>\n" +
|
|
6874
|
" <div class=\"col-sm-8 text-center\">\n" +
|
|
7006
|
" <span class=\"point\">1</span>\n" +
|
|
6875
|
" <small>\n" +
|
|
7007
|
" For AppEnlight to operate, you need to\n" +
|
|
6876
|
" <span uib-tooltip=\"{{report.report.start_time|isoToRelativeTime}}\" class=\"m-r-1\">\n" +
|
|
7008
|
" <a data-ui-sref=\"applications.update({resourceId:'new'})\" target=\"_blank\"><strong>create an app profile</strong></a> that allows\n" +
|
|
6877
|
" {{report.report.start_time.replace('T', ' ')}} UTC</span>\n" +
|
|
7009
|
" you to\n" +
|
|
6878
|
" <span class=\"text-muted\">ID: {{report.report.request_id}}</span>\n" +
|
|
7010
|
" obtain an <strong>API key</strong> that one of the clients can use.\n" +
|
|
6879
|
" </small>\n" +
|
|
7011
|
"</p>\n" +
|
|
6880
|
" </div>\n" +
|
|
|
|
|
6881
|
" <div class=\"col-sm-2 text-right\">\n" +
|
|
|
|
|
6882
|
" <a class=\"switch_detail btn btn-sm btn-default {{report.report.group.next_report ? '' : 'disabled'}}\"\n" +
|
|
|
|
|
6883
|
" ng-click=\"report.nextDetail()\">\n" +
|
|
|
|
|
6884
|
" Next detail <span class=\"fa fa-arrow-right\"></span></a>\n" +
|
|
|
|
|
6885
|
" </div>\n" +
|
|
|
|
|
6886
|
" </div>\n" +
|
|
|
|
|
6887
|
"\n" +
|
|
7012
|
"\n" +
|
|
6888
|
" <h3 class=\"word-wrap\">{{report.report.error}}</h3>\n" +
|
|
7013
|
"<div class=\"clear\"></div>\n" +
|
|
|
|
|
7014
|
"<hr/>\n" +
|
|
6889
|
"\n" +
|
|
7015
|
"\n" +
|
|
6890
|
" <div ng-if=\"report.report.traceback\">\n" +
|
|
7016
|
"<p>\n" +
|
|
|
|
|
7017
|
" <span class=\"point\">2</span>\n" +
|
|
|
|
|
7018
|
" It is a good idea to configure an\n" +
|
|
|
|
|
7019
|
" <a data-ui-sref=\"user.alert_channels.email\" target=\"_blank\">\n" +
|
|
|
|
|
7020
|
" <strong>email alert channel</strong></a> that you can use to receive\n" +
|
|
|
|
|
7021
|
" notifications about events that happen in your application.\n" +
|
|
|
|
|
7022
|
"</p>\n" +
|
|
6891
|
"\n" +
|
|
7023
|
"\n" +
|
|
6892
|
" <h3><strong>Traceback</strong></h3>\n" +
|
|
7024
|
"<p>\n" +
|
|
|
|
|
7025
|
" It can be the same email account you used to register withing AppEnlight -\n" +
|
|
|
|
|
7026
|
" although we often recommend using a separate <em>errors@...</em> account\n" +
|
|
|
|
|
7027
|
" designated for alert notifications.\n" +
|
|
|
|
|
7028
|
"</p>\n" +
|
|
6893
|
"\n" +
|
|
7029
|
"\n" +
|
|
6894
|
" <div class=\"btn-group\">\n" +
|
|
7030
|
"<div class=\"clear\"></div>\n" +
|
|
6895
|
" <a ng-if=\"report.traceback.length-10 > 0 \" ng-click=\"report.showLong = !report.showLong\"\n" +
|
|
7031
|
"<hr/>\n" +
|
|
6896
|
" class=\"btn btn-default {{report.showLong ? 'active' : ''}}\">\n" +
|
|
|
|
|
6897
|
" <span class=\"fa fa-align-left\"></span>\n" +
|
|
|
|
|
6898
|
" <small>Show {{report.traceback.length-10}} remaining frames</small>\n" +
|
|
|
|
|
6899
|
" </a>\n" +
|
|
|
|
|
6900
|
"\n" +
|
|
7032
|
"\n" +
|
|
6901
|
" <a class=\"btn btn-default {{report.showRaw ? 'active' : ''}}\" ng-click=\"report.showRaw = !report.showRaw\">\n" +
|
|
7033
|
"<p>\n" +
|
|
6902
|
" <span class=\"fa fa-list\"></span>\n" +
|
|
7034
|
" <span class=\"point\">3</span>\n" +
|
|
6903
|
" <small>Raw version</small>\n" +
|
|
7035
|
" In order for your application to stream meaningful information, you will need to\n" +
|
|
6904
|
" </a>\n" +
|
|
7036
|
" integrate a compatible client for your language of choice.\n" +
|
|
6905
|
" </div>\n" +
|
|
7037
|
"</p>\n" +
|
|
6906
|
"\n" +
|
|
|
|
|
6907
|
" <div ng-if=\"report.showRaw\" class=\"m-t-1\">\n" +
|
|
|
|
|
6908
|
" <pre>{{report.rawTraceback}}</pre>\n" +
|
|
|
|
|
6909
|
" </div>\n" +
|
|
|
|
|
6910
|
" <div ng-if=\"!report.showRaw\" class=\"m-t-1\">\n" +
|
|
|
|
|
6911
|
"\n" +
|
|
|
|
|
6912
|
" <div ng-repeat=\"frame in report.traceback\" class=\"frame {{$odd ? 'odd' : 'even'}}\"\n" +
|
|
|
|
|
6913
|
" ng-if=\"$index >= report.traceback.length-10 || report.traceback.length <= 10 || report.showLong\">\n" +
|
|
|
|
|
6914
|
" <div class=\"frameline\" ng-if=\"frame.line\">\n" +
|
|
|
|
|
6915
|
" <a class=\"inspect_vars\" ng-click=\"frame.showVars = !frame.showVars\" ng-if=\"frame.vars\">\n" +
|
|
|
|
|
6916
|
" <span class=\"fa fa-search dim btn btn-default\"\n" +
|
|
|
|
|
6917
|
" uib-tooltip=\"Show local vars\"> </span>\n" +
|
|
|
|
|
6918
|
" </a>\n" +
|
|
|
|
|
6919
|
"\n" +
|
|
|
|
|
6920
|
" <span class=\"no-vars\" ng-if=\"frame.vars.length == 0\"></span>\n" +
|
|
|
|
|
6921
|
"\n" +
|
|
|
|
|
6922
|
" <span ng-if=\"frame.file\">\n" +
|
|
|
|
|
6923
|
" <span class=\"mono\">File</span> <span class=\"file mono\">{{frame.file || 'Unknown file'}}</span>,\n" +
|
|
|
|
|
6924
|
" </span>\n" +
|
|
|
|
|
6925
|
" <span ng-if=\"frame.module && !frame.file\">\n" +
|
|
|
|
|
6926
|
" <span class=\"mono\">Module</span> <span class=\"file mono\">{{frame.module || 'Unknown module'}}</span>,\n" +
|
|
|
|
|
6927
|
" </span>\n" +
|
|
|
|
|
6928
|
" <span class=\"mono\">line</span> <span class=\"line mono\">{{frame.line || 'Unknown line'}}</span>\n" +
|
|
|
|
|
6929
|
"\n" +
|
|
|
|
|
6930
|
" <span ng-if=\"frame.fn\"><span class=\"mono\">in</span> <strong\n" +
|
|
|
|
|
6931
|
" class=\"fn mono\">{{frame.fn || 'Unknown function'}}</strong></span>\n" +
|
|
|
|
|
6932
|
"\n" +
|
|
|
|
|
6933
|
" </div>\n" +
|
|
|
|
|
6934
|
" <div class=\"cline mono\" ng-if=\"frame.cline\">{{frame.cline || 'Unknown context'}}</div>\n" +
|
|
|
|
|
6935
|
"\n" +
|
|
|
|
|
6936
|
" <div class=\"vars\" ng-if=\"frame.showVars\">\n" +
|
|
|
|
|
6937
|
" <table class=\"var-listing small\">\n" +
|
|
|
|
|
6938
|
" <tr ng-repeat=\"fvar in frame.vars track by $index\" class=\"frame {{$odd ? 'odd' : 'even'}}\">\n" +
|
|
|
|
|
6939
|
" <td class=\"var-label\">{{ fvar[0] }}</td>\n" +
|
|
|
|
|
6940
|
" <td>\n" +
|
|
|
|
|
6941
|
" <span human-format vars=\"fvar[1]\"></span>\n" +
|
|
|
|
|
6942
|
" </td>\n" +
|
|
|
|
|
6943
|
" </tr>\n" +
|
|
|
|
|
6944
|
" </table>\n" +
|
|
|
|
|
6945
|
"\n" +
|
|
|
|
|
6946
|
" </div>\n" +
|
|
|
|
|
6947
|
" </div>\n" +
|
|
|
|
|
6948
|
" </div>\n" +
|
|
|
|
|
6949
|
"\n" +
|
|
|
|
|
6950
|
"\n" +
|
|
|
|
|
6951
|
" </div>\n" +
|
|
|
|
|
6952
|
"\n" +
|
|
|
|
|
6953
|
"\n" +
|
|
|
|
|
6954
|
" <uib-tabset>\n" +
|
|
|
|
|
6955
|
" <uib-tab select=\"report.selectedTab('slow_calls')\" active=\"report.tabs.slow_calls\">\n" +
|
|
|
|
|
6956
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6957
|
" Slow Calls\n" +
|
|
|
|
|
6958
|
" </uib-tab-heading>\n" +
|
|
|
|
|
6959
|
"\n" +
|
|
|
|
|
6960
|
" <h3><strong>Slow Calls</strong></h3>\n" +
|
|
|
|
|
6961
|
"\n" +
|
|
|
|
|
6962
|
" <div ng-if=\"report.report.slow_calls.length > 0\">\n" +
|
|
|
|
|
6963
|
" <div ng-repeat=\"call in report.report.slow_calls\" ng-include=\"'slow_call.html'\"></div>\n" +
|
|
|
|
|
6964
|
" </div>\n" +
|
|
|
|
|
6965
|
"\n" +
|
|
|
|
|
6966
|
" <div ng-if=\"report.report.slow_calls.length == 0\">\n" +
|
|
|
|
|
6967
|
" No slow calls reported\n" +
|
|
|
|
|
6968
|
" </div>\n" +
|
|
|
|
|
6969
|
"\n" +
|
|
|
|
|
6970
|
" </uib-tab>\n" +
|
|
|
|
|
6971
|
"\n" +
|
|
|
|
|
6972
|
"\n" +
|
|
|
|
|
6973
|
" <uib-tab select=\"report.selectedTab('request_details')\" active=\"report.tabs.request_details\">\n" +
|
|
|
|
|
6974
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6975
|
" Request details\n" +
|
|
|
|
|
6976
|
" </uib-tab-heading>\n" +
|
|
|
|
|
6977
|
"\n" +
|
|
|
|
|
6978
|
" <h3><strong>Extra</strong></h3>\n" +
|
|
|
|
|
6979
|
" <div class=\"var-listing\" human-format vars=\"report.report.extra\"></div>\n" +
|
|
|
|
|
6980
|
" <h3><strong>Request details</strong></h3>\n" +
|
|
|
|
|
6981
|
" <div class=\"var-listing\" human-format vars=\"report.report.request\"></div>\n" +
|
|
|
|
|
6982
|
"\n" +
|
|
|
|
|
6983
|
" </uib-tab>\n" +
|
|
|
|
|
6984
|
"\n" +
|
|
|
|
|
6985
|
" <uib-tab select=\"report.selectedTab('logs')\" active=\"report.tabs.logs\">\n" +
|
|
|
|
|
6986
|
" <uib-tab-heading>\n" +
|
|
|
|
|
6987
|
" Logs\n" +
|
|
|
|
|
6988
|
" </uib-tab-heading>\n" +
|
|
|
|
|
6989
|
"\n" +
|
|
|
|
|
6990
|
" <div ng-if=\"report.is_loading.logs!=false\" class=\"text-center\">\n" +
|
|
|
|
|
6991
|
" <span class=\"fa fa-cog fa-spin fa-3x loader\"></span>\n" +
|
|
|
|
|
6992
|
" </div>\n" +
|
|
|
|
|
6993
|
" <p ng-if=\"report.reportLogs.length == 0\"> No logs found</p>\n" +
|
|
|
|
|
6994
|
"\n" +
|
|
|
|
|
6995
|
" <table class=\"table table-striped log-list\" ng-if=\"report.reportLogs.length > 0\">\n" +
|
|
|
|
|
6996
|
"\n" +
|
|
|
|
|
6997
|
" <caption>Logs</caption>\n" +
|
|
|
|
|
6998
|
" <thead>\n" +
|
|
|
|
|
6999
|
" <tr>\n" +
|
|
|
|
|
7000
|
" <th class=\"message\">Message</th>\n" +
|
|
|
|
|
7001
|
" <th class=\"when\">When</th>\n" +
|
|
|
|
|
7002
|
" </tr>\n" +
|
|
|
|
|
7003
|
" </thead>\n" +
|
|
|
|
|
7004
|
" <tbody>\n" +
|
|
|
|
|
7005
|
" <tr ng-repeat=\"log in report.reportLogs track by log.log_id\">\n" +
|
|
|
|
|
7006
|
" <td>\n" +
|
|
|
|
|
7007
|
" <a class=\"tag {{log.log_level|lowercase}}\">\n" +
|
|
|
|
|
7008
|
" <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
|
|
|
|
|
7009
|
" <a class=\"tag\">\n" +
|
|
|
|
|
7010
|
" <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
|
|
|
|
|
7011
|
" <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\">\n" +
|
|
|
|
|
7012
|
" <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
|
|
|
|
|
7013
|
" <div class=\"log\">\n" +
|
|
|
|
|
7014
|
" {{log.message}}\n" +
|
|
|
|
|
7015
|
" </div>\n" +
|
|
|
|
|
7016
|
" </td>\n" +
|
|
|
|
|
7017
|
" <td class=\"when\">\n" +
|
|
|
|
|
7018
|
" <a data-uib-tooltip=\"{{log.timestamp}}\">\n" +
|
|
|
|
|
7019
|
" <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
|
|
|
|
|
7020
|
" </a>\n" +
|
|
|
|
|
7021
|
" </td>\n" +
|
|
|
|
|
7022
|
" </tr>\n" +
|
|
|
|
|
7023
|
"\n" +
|
|
|
|
|
7024
|
" </tbody>\n" +
|
|
|
|
|
7025
|
" </table>\n" +
|
|
|
|
|
7026
|
"\n" +
|
|
|
|
|
7027
|
" </uib-tab>\n" +
|
|
|
|
|
7028
|
"\n" +
|
|
|
|
|
7029
|
"\n" +
|
|
|
|
|
7030
|
" <uib-tab select=\"report.selectedTab('comments')\" active=\"report.tabs.comments\">\n" +
|
|
|
|
|
7031
|
" <uib-tab-heading>\n" +
|
|
|
|
|
7032
|
" Comments\n" +
|
|
|
|
|
7033
|
" <span class=\"label label-info\">{{report.report.comments.length}}</span>\n" +
|
|
|
|
|
7034
|
"\n" +
|
|
|
|
|
7035
|
" </uib-tab-heading>\n" +
|
|
|
|
|
7036
|
"\n" +
|
|
|
|
|
7037
|
" <h3><strong>Comments</strong></h3>\n" +
|
|
|
|
|
7038
|
"\n" +
|
|
|
|
|
7039
|
" <p ng-if=\"report.report.comments.length == 0\">No comments yet - be first to add one!</p>\n" +
|
|
|
|
|
7040
|
"\n" +
|
|
|
|
|
7041
|
" <div class=\"comment\" ng-repeat=\"comment in report.report.comments\">\n" +
|
|
|
|
|
7042
|
" <p name=\"comment-{{comment.comment_id}}\"><span class=\"fa fa-comment\"></span>\n" +
|
|
|
|
|
7043
|
" <strong>{{comment.user_name}}</strong>\n" +
|
|
|
|
|
7044
|
" <iso-to-relative-time time=\"{{comment.created_timestamp}}\"/>\n" +
|
|
|
|
|
7045
|
" </p>\n" +
|
|
|
|
|
7046
|
" <p class=\"well\">{{comment.body}}</p>\n" +
|
|
|
|
|
7047
|
" </div>\n" +
|
|
|
|
|
7048
|
"\n" +
|
|
|
|
|
7049
|
" <form name=\"commentForm\" ng-submit=\"report.addComment()\">\n" +
|
|
|
|
|
7050
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
7051
|
" <textarea type=\"text\" class=\"form-control\" id=\"report.commentForm\" ng-model=\"report.comment\" required\n" +
|
|
|
|
|
7052
|
" mentio mentio-search=\"report.searchMentionedPeople(term)\" mentio-items=\"report.mentionedPeople| filter:label:typedTerm\" class=\"form-control\"></textarea>\n" +
|
|
|
|
|
7053
|
"\n" +
|
|
|
|
|
7054
|
" </div>\n" +
|
|
|
|
|
7055
|
" <div class=\"form-group\">\n" +
|
|
|
|
|
7056
|
" <button class=\"btn btn-info\" ng-disabled=\"report.commentForm.$invalid\">Comment</button>\n" +
|
|
|
|
|
7057
|
" </div>\n" +
|
|
|
|
|
7058
|
" </form>\n" +
|
|
|
|
|
7059
|
"\n" +
|
|
|
|
|
7060
|
" <div ng-repeat=\"comment in report.report.comments\" class=\"{{$odd ? 'odd' : 'even'}}\" class=\"repeat-animate\">\n" +
|
|
|
|
|
7061
|
" </div>\n" +
|
|
|
|
|
7062
|
"\n" +
|
|
|
|
|
7063
|
" </uib-tab>\n" +
|
|
|
|
|
7064
|
"\n" +
|
|
|
|
|
7065
|
" <uib-tab select=\"report.selectedTab('affected_users')\" active=\"report.tabs.affected_users\">\n" +
|
|
|
|
|
7066
|
" <uib-tab-heading>\n" +
|
|
|
|
|
7067
|
" Affected users\n" +
|
|
|
|
|
7068
|
" <span class=\"label label-warning\">{{report.report.affected_users_count}}</span>\n" +
|
|
|
|
|
7069
|
"\n" +
|
|
|
|
|
7070
|
" </uib-tab-heading>\n" +
|
|
|
|
|
7071
|
"\n" +
|
|
|
|
|
7072
|
" <h3><strong>50 most affected users ID's by this issue:</strong></h3>\n" +
|
|
|
|
|
7073
|
" <ul class=\"affected-user-list\">\n" +
|
|
|
|
|
7074
|
" <li ng-repeat=\"user in report.report.top_affected_users\">\n" +
|
|
|
|
|
7075
|
" <strong>{{user.username}}</strong> <span class=\"badge\" uib-tooltip=\"occurences\">{{user.count}}</span>\n" +
|
|
|
|
|
7076
|
" </li>\n" +
|
|
|
|
|
7077
|
" </ul>\n" +
|
|
|
|
|
7078
|
"\n" +
|
|
|
|
|
7079
|
" </uib-tab>\n" +
|
|
|
|
|
7080
|
"\n" +
|
|
|
|
|
7081
|
" </uib-tabset>\n" +
|
|
|
|
|
7082
|
"\n" +
|
|
|
|
|
7083
|
"\n" +
|
|
|
|
|
7084
|
" </div>\n" +
|
|
|
|
|
7085
|
"\n" +
|
|
7038
|
"\n" +
|
|
7086
|
" </div>\n" +
|
|
7039
|
"<p>Head over to the <a href=\"{{AeConfig.urls.docs}}\" target=\"_blank\">\n" +
|
|
7087
|
" </div>\n" +
|
|
7040
|
" <strong>developers section</strong></a> for information on currently available\n" +
|
|
7088
|
"</div>\n"
|
|
7041
|
" clients that you can plug into your software</p>\n"
|
|
|
|
|
7042
|
);
|
|
|
|
|
7043
|
|
|
|
|
|
7044
|
|
|
|
|
|
7045
|
$templateCache.put('templates/register.html',
|
|
|
|
|
7046
|
""
|
|
|
|
|
7047
|
);
|
|
|
|
|
7048
|
|
|
|
|
|
7049
|
|
|
|
|
|
7050
|
$templateCache.put('templates/reports/small_report_group_list.html',
|
|
|
|
|
7051
|
"<table class=\"errors-small-list\">\n" +
|
|
|
|
|
7052
|
" <tr ng-repeat=\"report_group in groups track by report_group.id\" class=\"animate-repeat\">\n" +
|
|
|
|
|
7053
|
" <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report_group.occurences|numberToThousands }}</span></td>\n" +
|
|
|
|
|
7054
|
" <td class=\"ellipsis c2 report_group\">\n" +
|
|
|
|
|
7055
|
" <a ui-sref=\"report.view_detail({groupId:report_group.id, reportId:report_group.last_report})\" title=\"{{report_group.error}}\" class=\"error-type\">\n" +
|
|
|
|
|
7056
|
" {{ report_group.error || \"Slow Report\"}}</a>\n" +
|
|
|
|
|
7057
|
" <br/>\n" +
|
|
|
|
|
7058
|
" <span ng-show=\"report_group.summed_duration\" class=\"duration\" data-uib-tooltip=\"Average duration\">{{report_group.summed_duration/report_group.occurences|round:2}}s</span>\n" +
|
|
|
|
|
7059
|
" <span class=\"url\">{{ report_group.view_name || report_group.url_path}}</span>\n" +
|
|
|
|
|
7060
|
" </td>\n" +
|
|
|
|
|
7061
|
" <td class=\"info\">\n" +
|
|
|
|
|
7062
|
" <strong ng-show=\"report_group.resource_id\">@{{applications[report_group.resource_id].resource_name}}</strong><br/>\n" +
|
|
|
|
|
7063
|
" <span class=\"date\">{{report_group.last_timestamp | isoToRelativeTime}}</span>\n" +
|
|
|
|
|
7064
|
" </td>\n" +
|
|
|
|
|
7065
|
" </tr>\n" +
|
|
|
|
|
7066
|
"</table>\n"
|
|
|
|
|
7067
|
);
|
|
|
|
|
7068
|
|
|
|
|
|
7069
|
|
|
|
|
|
7070
|
$templateCache.put('templates/reports/small_report_list.html',
|
|
|
|
|
7071
|
"<table class=\"errors-small-list\">\n" +
|
|
|
|
|
7072
|
" <tr ng-repeat=\"report in reports track by $index\" ng-show=\"reports.length > 0\" class=\"animate-repeat\">\n" +
|
|
|
|
|
7073
|
" <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report.group.occurences|numberToThousands }}</span></td>\n" +
|
|
|
|
|
7074
|
" <td class=\"ellipsis c2 report\">\n" +
|
|
|
|
|
7075
|
" <a ui-sref=\"report.view_detail({groupId:report.group_id, reportId:report.report_id})\" title=\"{{report.error}}\" class=\"error-type\">\n" +
|
|
|
|
|
7076
|
" {{ report.error || \"Slow Report\"}}</a>\n" +
|
|
|
|
|
7077
|
" <br/>\n" +
|
|
|
|
|
7078
|
" <span ng-show=\"report.group.summed_duration\" class=\"duration\" data-uib-tooltip=\"Average duration\">{{report.group.summed_duration/report.group.occurences|round:2}}s</span>\n" +
|
|
|
|
|
7079
|
" <span class=\"url\">{{ report.view_name || report.url_path}}</span>\n" +
|
|
|
|
|
7080
|
" </td>\n" +
|
|
|
|
|
7081
|
" <td class=\"info\">\n" +
|
|
|
|
|
7082
|
" <strong ng-show=\"report.resource_id\">@{{applications[report.resource_id].resource_name}}</strong><br/>\n" +
|
|
|
|
|
7083
|
" <span class=\"date\">{{report.last_timestamp | isoToRelativeTime}}</span>\n" +
|
|
|
|
|
7084
|
" </td>\n" +
|
|
|
|
|
7085
|
" </tr>\n" +
|
|
|
|
|
7086
|
"</table>\n"
|
|
7089
|
);
|
|
7087
|
);
|
|
7090
|
|
|
7088
|
|
|
7091
|
|
|
7089
|
|
|
@@
-8784,275
+8782,345
b' function LogsBrowserController($location, stateHolder, typeAheadTagHelper, logsN'
|
|
8784
|
// # services, and proprietary license terms, please see
|
|
8782
|
// # services, and proprietary license terms, please see
|
|
8785
|
// # https://rhodecode.com/licenses/
|
|
8783
|
// # https://rhodecode.com/licenses/
|
|
8786
|
|
|
8784
|
|
|
8787
|
angular.module('appenlight.components.settingsView', [])
|
|
8785
|
angular.module('appenlight.components.reportView', [])
|
|
8788
|
.component('settingsView', {
|
|
8786
|
.component('reportView', {
|
|
8789
|
templateUrl: 'components/views/settings-view/settings-view.html',
|
|
8787
|
templateUrl: 'components/views/report-view/report-view.html',
|
|
8790
|
controller: SettingsViewController
|
|
8788
|
controller: ReportViewController
|
|
8791
|
});
|
|
|
|
|
8792
|
|
|
|
|
|
8793
|
SettingsViewController.$inject = ['$state'];
|
|
|
|
|
8794
|
|
|
|
|
|
8795
|
function SettingsViewController($state) {
|
|
|
|
|
8796
|
this.$state = $state;
|
|
|
|
|
8797
|
console.info('SettingsViewController');
|
|
|
|
|
8798
|
}
|
|
|
|
|
8799
|
|
|
|
|
|
8800
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
|
|
|
8801
|
// #
|
|
|
|
|
8802
|
// # This program is free software: you can redistribute it and/or modify
|
|
|
|
|
8803
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
|
|
|
8804
|
// # (only), as published by the Free Software Foundation.
|
|
|
|
|
8805
|
// #
|
|
|
|
|
8806
|
// # This program is distributed in the hope that it will be useful,
|
|
|
|
|
8807
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
8808
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
8809
|
// # GNU General Public License for more details.
|
|
|
|
|
8810
|
// #
|
|
|
|
|
8811
|
// # You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
8812
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
8813
|
// #
|
|
|
|
|
8814
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
8815
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
8816
|
// # services, and proprietary license terms, please see
|
|
|
|
|
8817
|
// # https://rhodecode.com/licenses/
|
|
|
|
|
8818
|
|
|
|
|
|
8819
|
angular.module('appenlight.components.userAlertChannelsEmailNewView', [])
|
|
|
|
|
8820
|
.component('userAlertChannelsEmailNewView', {
|
|
|
|
|
8821
|
templateUrl: 'components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
|
|
|
|
|
8822
|
controller: AlertChannelsEmailController
|
|
|
|
|
8823
|
});
|
|
8789
|
});
|
|
8824
|
|
|
8790
|
|
|
8825
|
AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
|
|
8791
|
ReportViewController.$inject = ['$window', '$location', '$state', '$uibModal',
|
|
|
|
|
8792
|
'$cookies', 'reportGroupPropertyResource', 'reportGroupResource',
|
|
|
|
|
8793
|
'logsNoIdResource', 'stateHolder'];
|
|
8826
|
|
|
8794
|
|
|
8827
|
function AlertChannelsEmailController($state, userSelfPropertyResource) {
|
|
8795
|
function ReportViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
|
|
8828
|
|
|
|
|
|
8829
|
var vm = this;
|
|
8796
|
var vm = this;
|
|
|
|
|
8797
|
vm.window = $window;
|
|
|
|
|
8798
|
vm.stateHolder = stateHolder;
|
|
8830
|
vm.$state = $state;
|
|
8799
|
vm.$state = $state;
|
|
8831
|
vm.loading = {email: false};
|
|
8800
|
vm.reportHistoryConfig = {
|
|
8832
|
vm.form = {};
|
|
8801
|
data: {
|
|
8833
|
|
|
8802
|
json: [],
|
|
8834
|
vm.createChannel = function () {
|
|
8803
|
xFormat: '%Y-%m-%dT%H:%M:%S'
|
|
8835
|
vm.loading.email = true;
|
|
8804
|
},
|
|
8836
|
|
|
8805
|
color: {
|
|
8837
|
userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
|
|
8806
|
pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
|
|
8838
|
//vm.loading.email = false;
|
|
8807
|
},
|
|
8839
|
//setServerValidation(vm.channelForm);
|
|
8808
|
axis: {
|
|
8840
|
//vm.form = {};
|
|
8809
|
x: {
|
|
8841
|
$state.go('user.alert_channels.list');
|
|
8810
|
type: 'timeseries',
|
|
8842
|
}, function (response) {
|
|
8811
|
tick: {
|
|
8843
|
if (response.status == 422) {
|
|
8812
|
format: '%Y-%m-%d'
|
|
8844
|
setServerValidation(vm.channelForm, response.data);
|
|
8813
|
}
|
|
|
|
|
8814
|
},
|
|
|
|
|
8815
|
y: {
|
|
|
|
|
8816
|
tick: {
|
|
|
|
|
8817
|
count: 5,
|
|
|
|
|
8818
|
format: d3.format('.2s')
|
|
|
|
|
8819
|
}
|
|
8845
|
}
|
|
8820
|
}
|
|
8846
|
vm.loading.email = false;
|
|
8821
|
},
|
|
8847
|
});
|
|
8822
|
subchart: {
|
|
8848
|
}
|
|
8823
|
show: true,
|
|
8849
|
}
|
|
8824
|
size: {
|
|
8850
|
|
|
8825
|
height: 20
|
|
8851
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
8826
|
}
|
|
8852
|
// #
|
|
8827
|
},
|
|
8853
|
// # This program is free software: you can redistribute it and/or modify
|
|
8828
|
size: {
|
|
8854
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
8829
|
height: 250
|
|
8855
|
// # (only), as published by the Free Software Foundation.
|
|
8830
|
},
|
|
8856
|
// #
|
|
8831
|
zoom: {
|
|
8857
|
// # This program is distributed in the hope that it will be useful,
|
|
8832
|
rescale: true
|
|
8858
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
8833
|
},
|
|
8859
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
8834
|
grid: {
|
|
8860
|
// # GNU General Public License for more details.
|
|
8835
|
x: {
|
|
8861
|
// #
|
|
8836
|
show: true
|
|
8862
|
// # You should have received a copy of the GNU Affero General Public License
|
|
8837
|
},
|
|
8863
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
8838
|
y: {
|
|
8864
|
// #
|
|
8839
|
show: true
|
|
8865
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
8840
|
}
|
|
8866
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
8841
|
},
|
|
8867
|
// # services, and proprietary license terms, please see
|
|
8842
|
tooltip: {
|
|
8868
|
// # https://rhodecode.com/licenses/
|
|
8843
|
format: {
|
|
8869
|
|
|
8844
|
title: function (d) {
|
|
8870
|
angular.module('appenlight.components.userAlertChannelsListView', [])
|
|
8845
|
return '' + d;
|
|
8871
|
.component('userAlertChannelsListView', {
|
|
8846
|
},
|
|
8872
|
templateUrl: 'components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
|
|
8847
|
value: function (v) {
|
|
8873
|
controller: userAlertChannelsListViewController
|
|
8848
|
return v
|
|
8874
|
});
|
|
8849
|
}
|
|
8875
|
|
|
8850
|
}
|
|
8876
|
userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
|
|
8851
|
}
|
|
8877
|
|
|
8852
|
};
|
|
8878
|
function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
|
|
8853
|
vm.mentionedPeople = [];
|
|
8879
|
|
|
8854
|
vm.reportHistoryData = {};
|
|
8880
|
var vm = this;
|
|
8855
|
vm.textTraceback = true;
|
|
8881
|
vm.$state = $state;
|
|
8856
|
vm.rawTraceback = '';
|
|
8882
|
vm.loading = {channels: true, applications: true, actions:true};
|
|
8857
|
vm.traceback = '';
|
|
8883
|
|
|
8858
|
vm.reportType = 'report';
|
|
8884
|
vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
|
|
8859
|
vm.report = null;
|
|
8885
|
function (data) {
|
|
8860
|
vm.showLong = false;
|
|
8886
|
vm.loading.channels = false;
|
|
8861
|
vm.reportLogs = null;
|
|
8887
|
});
|
|
8862
|
vm.requestStats = null;
|
|
8888
|
|
|
8863
|
vm.comment = null;
|
|
8889
|
vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
|
|
8864
|
vm.is_loading = {
|
|
8890
|
function (data) {
|
|
8865
|
report: true,
|
|
8891
|
vm.loading.actions = false;
|
|
8866
|
logs: true,
|
|
8892
|
});
|
|
8867
|
history: true
|
|
8893
|
|
|
|
|
|
8894
|
vm.applications = applicationsNoIdResource.query({permission: 'view'},
|
|
|
|
|
8895
|
function (data) {
|
|
|
|
|
8896
|
vm.loading.applications = false;
|
|
|
|
|
8897
|
});
|
|
|
|
|
8898
|
|
|
|
|
|
8899
|
var allOps = {
|
|
|
|
|
8900
|
'eq': 'Equal',
|
|
|
|
|
8901
|
'ne': 'Not equal',
|
|
|
|
|
8902
|
'ge': 'Greater or equal',
|
|
|
|
|
8903
|
'gt': 'Greater than',
|
|
|
|
|
8904
|
'le': 'Lesser or equal',
|
|
|
|
|
8905
|
'lt': 'Lesser than',
|
|
|
|
|
8906
|
'startswith': 'Starts with',
|
|
|
|
|
8907
|
'endswith': 'Ends with',
|
|
|
|
|
8908
|
'contains': 'Contains'
|
|
|
|
|
8909
|
};
|
|
8868
|
};
|
|
8910
|
|
|
8869
|
|
|
8911
|
var fieldOps = {};
|
|
8870
|
vm.searchMentionedPeople = function(term){
|
|
8912
|
fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
|
|
8871
|
//vm.mentionedPeople = [];
|
|
8913
|
fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
|
|
8872
|
var term = term.toLowerCase();
|
|
8914
|
fieldOps['duration'] = ['ge', 'le'];
|
|
8873
|
reportGroupPropertyResource.get({
|
|
8915
|
fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
8874
|
groupId: vm.report.group_id,
|
|
8916
|
'contains'];
|
|
8875
|
key: 'assigned_users'
|
|
8917
|
fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
8876
|
}, null,
|
|
8918
|
'contains'];
|
|
8877
|
function (data) {
|
|
8919
|
fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
8878
|
var users = [];
|
|
8920
|
'contains'];
|
|
8879
|
_.each(data.assigned, function(u){
|
|
8921
|
fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
8880
|
users.push({label: u.user_name});
|
|
8922
|
'contains'];
|
|
8881
|
});
|
|
8923
|
fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
|
|
8882
|
_.each(data.unassigned, function(u){
|
|
|
|
|
8883
|
users.push({label: u.user_name});
|
|
|
|
|
8884
|
});
|
|
8924
|
|
|
8885
|
|
|
8925
|
var possibleFields = {
|
|
8886
|
var result = _.filter(users, function(u){
|
|
8926
|
'__AND__': 'All met (composite rule)',
|
|
8887
|
return u.label.toLowerCase().indexOf(term) !== -1;
|
|
8927
|
'__OR__': 'One met (composite rule)',
|
|
8888
|
});
|
|
8928
|
'__NOT__': 'Not met (composite rule)',
|
|
8889
|
vm.mentionedPeople = result;
|
|
8929
|
'http_status': 'HTTP Status',
|
|
8890
|
});
|
|
8930
|
'duration': 'Request duration',
|
|
|
|
|
8931
|
'group:priority': 'Group -> Priority',
|
|
|
|
|
8932
|
'url_domain': 'Domain',
|
|
|
|
|
8933
|
'url_path': 'URL Path',
|
|
|
|
|
8934
|
'error': 'Error',
|
|
|
|
|
8935
|
'tags:server_name': 'Tag -> Server name',
|
|
|
|
|
8936
|
'group:occurences': 'Group -> Occurences'
|
|
|
|
|
8937
|
};
|
|
8891
|
};
|
|
8938
|
|
|
8892
|
|
|
8939
|
vm.ruleDefinitions = {
|
|
8893
|
vm.searchTag = function (tag, value) {
|
|
8940
|
fieldOps: fieldOps,
|
|
8894
|
|
|
8941
|
allOps: allOps,
|
|
8895
|
if (vm.report.report_type === 3) {
|
|
8942
|
possibleFields: possibleFields
|
|
8896
|
$location.url($state.href('report.list_slow'));
|
|
|
|
|
8897
|
}
|
|
|
|
|
8898
|
else {
|
|
|
|
|
8899
|
$location.url($state.href('report.list'));
|
|
|
|
|
8900
|
}
|
|
|
|
|
8901
|
$location.search(tag, value);
|
|
8943
|
};
|
|
8902
|
};
|
|
8944
|
|
|
8903
|
|
|
8945
|
vm.addAction = function (channel) {
|
|
8904
|
vm.tabs = {
|
|
8946
|
|
|
8905
|
slow_calls:false,
|
|
8947
|
userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
|
|
8906
|
request_details:false,
|
|
8948
|
vm.alertActions.push(data);
|
|
8907
|
logs:false,
|
|
8949
|
}, function (response) {
|
|
8908
|
comments:false,
|
|
8950
|
if (response.status == 422) {
|
|
8909
|
affected_users:false
|
|
8951
|
|
|
|
|
|
8952
|
}
|
|
|
|
|
8953
|
});
|
|
|
|
|
8954
|
};
|
|
8910
|
};
|
|
|
|
|
8911
|
if ($cookies.selectedReportTab) {
|
|
|
|
|
8912
|
vm.tabs[$cookies.selectedReportTab] = true;
|
|
|
|
|
8913
|
}
|
|
|
|
|
8914
|
else{
|
|
|
|
|
8915
|
$cookies.selectedReportTab = 'request_details';
|
|
|
|
|
8916
|
vm.tabs.request_details = true;
|
|
|
|
|
8917
|
}
|
|
8955
|
|
|
8918
|
|
|
8956
|
vm.updateChannel = function (channel, subKey) {
|
|
8919
|
vm.fetchLogs = function () {
|
|
8957
|
var params = {
|
|
8920
|
if (!vm.report.request_id){
|
|
8958
|
key: 'alert_channels',
|
|
8921
|
return
|
|
8959
|
channel_name: channel['channel_name'],
|
|
|
|
|
8960
|
channel_value: channel['channel_value']
|
|
|
|
|
8961
|
};
|
|
|
|
|
8962
|
var toUpdate = {};
|
|
|
|
|
8963
|
if (['daily_digest', 'send_alerts'].indexOf(subKey) !== -1) {
|
|
|
|
|
8964
|
toUpdate[subKey] = !channel[subKey];
|
|
|
|
|
8965
|
}
|
|
8922
|
}
|
|
8966
|
userSelfPropertyResource.update(params, toUpdate, function (data) {
|
|
8923
|
vm.is_loading.logs = true;
|
|
8967
|
_.extend(channel, data);
|
|
8924
|
logsNoIdResource.query({request_id: vm.report.request_id},
|
|
|
|
|
8925
|
function (data) {
|
|
|
|
|
8926
|
vm.is_loading.logs = false;
|
|
|
|
|
8927
|
vm.reportLogs = data;
|
|
|
|
|
8928
|
}, function () {
|
|
|
|
|
8929
|
vm.is_loading.logs = false;
|
|
8968
|
});
|
|
8930
|
});
|
|
8969
|
};
|
|
8931
|
};
|
|
8970
|
|
|
8932
|
vm.addComment = function () {
|
|
8971
|
vm.removeChannel = function (channel) {
|
|
8933
|
reportGroupPropertyResource.save({
|
|
8972
|
|
|
8934
|
groupId: vm.report.group_id,
|
|
8973
|
userSelfPropertyResource.delete({
|
|
8935
|
key: 'comments'
|
|
8974
|
key: 'alert_channels',
|
|
8936
|
}, {body: vm.comment},
|
|
8975
|
channel_name: channel.channel_name,
|
|
8937
|
function (data) {
|
|
8976
|
channel_value: channel.channel_value
|
|
8938
|
vm.report.comments.push(data);
|
|
8977
|
}, function () {
|
|
|
|
|
8978
|
vm.alertChannels = _.filter(vm.alertChannels, function(item){
|
|
|
|
|
8979
|
return item != channel;
|
|
|
|
|
8980
|
});
|
|
8939
|
});
|
|
8981
|
});
|
|
8940
|
vm.comment = '';
|
|
8982
|
|
|
8941
|
};
|
|
8983
|
}
|
|
|
|
|
8984
|
|
|
8942
|
|
|
8985
|
}
|
|
8943
|
vm.fetchReport = function () {
|
|
|
|
|
8944
|
vm.is_loading.report = true;
|
|
|
|
|
8945
|
reportGroupResource.get($state.params, function (data) {
|
|
|
|
|
8946
|
vm.is_loading.report = false;
|
|
|
|
|
8947
|
if (data.request) {
|
|
|
|
|
8948
|
try {
|
|
|
|
|
8949
|
var to_sort = _.pairs(data.request);
|
|
|
|
|
8950
|
data.request = _.object(_.sortBy(to_sort, function (i) {
|
|
|
|
|
8951
|
return i[0]
|
|
|
|
|
8952
|
}));
|
|
|
|
|
8953
|
}
|
|
|
|
|
8954
|
catch (err) {
|
|
|
|
|
8955
|
}
|
|
|
|
|
8956
|
}
|
|
|
|
|
8957
|
vm.report = data;
|
|
|
|
|
8958
|
if (vm.report.req_stats) {
|
|
|
|
|
8959
|
vm.requestStats = [];
|
|
|
|
|
8960
|
_.each(_.pairs(vm.report.req_stats['percentages']), function (p) {
|
|
|
|
|
8961
|
vm.requestStats.push({
|
|
|
|
|
8962
|
name: p[0],
|
|
|
|
|
8963
|
value: vm.report.req_stats[p[0]].toFixed(3),
|
|
|
|
|
8964
|
percent: p[1],
|
|
|
|
|
8965
|
calls: vm.report.req_stats[p[0] + '_calls']
|
|
|
|
|
8966
|
})
|
|
|
|
|
8967
|
});
|
|
|
|
|
8968
|
}
|
|
|
|
|
8969
|
vm.traceback = data.traceback;
|
|
|
|
|
8970
|
_.each(vm.traceback, function (frame) {
|
|
|
|
|
8971
|
if (frame.line) {
|
|
|
|
|
8972
|
vm.rawTraceback += 'File ' + frame.file + ' line ' + frame.line + ' in ' + frame.fn + ": \r\n";
|
|
|
|
|
8973
|
}
|
|
|
|
|
8974
|
vm.rawTraceback += ' ' + frame.cline + "\r\n";
|
|
|
|
|
8975
|
});
|
|
8986
|
|
|
8976
|
|
|
8987
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
8977
|
if (stateHolder.AeUser.id){
|
|
8988
|
// #
|
|
8978
|
vm.fetchHistory();
|
|
8989
|
// # This program is free software: you can redistribute it and/or modify
|
|
8979
|
}
|
|
8990
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
|
|
|
8991
|
// # (only), as published by the Free Software Foundation.
|
|
|
|
|
8992
|
// #
|
|
|
|
|
8993
|
// # This program is distributed in the hope that it will be useful,
|
|
|
|
|
8994
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
8995
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
8996
|
// # GNU General Public License for more details.
|
|
|
|
|
8997
|
// #
|
|
|
|
|
8998
|
// # You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
8999
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
9000
|
// #
|
|
|
|
|
9001
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
9002
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
9003
|
// # services, and proprietary license terms, please see
|
|
|
|
|
9004
|
// # https://rhodecode.com/licenses/
|
|
|
|
|
9005
|
|
|
8980
|
|
|
9006
|
angular.module('appenlight.components.userAuthTokensView', [])
|
|
8981
|
vm.selectedTab($cookies.selectedReportTab);
|
|
9007
|
.component('userAuthTokensView', {
|
|
|
|
|
9008
|
templateUrl: 'components/views/user-auth-tokens-view/user-auth-tokens-view.html',
|
|
|
|
|
9009
|
controller: userAuthTokensViewController
|
|
|
|
|
9010
|
});
|
|
|
|
|
9011
|
|
|
8982
|
|
|
9012
|
userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
|
|
8983
|
}, function (response) {
|
|
|
|
|
8984
|
|
|
|
|
|
8985
|
if (response.status == 403) {
|
|
|
|
|
8986
|
var uid = response.headers('x-appenlight-uid');
|
|
|
|
|
8987
|
if (!uid) {
|
|
|
|
|
8988
|
window.location = '/register?came_from=' + encodeURIComponent(window.location);
|
|
|
|
|
8989
|
}
|
|
|
|
|
8990
|
}
|
|
|
|
|
8991
|
vm.is_loading.report = false;
|
|
|
|
|
8992
|
});
|
|
|
|
|
8993
|
};
|
|
9013
|
|
|
8994
|
|
|
9014
|
function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
|
|
8995
|
vm.selectedTab = function(tab_name){
|
|
9015
|
|
|
8996
|
$cookies.selectedReportTab = tab_name;
|
|
9016
|
var vm = this;
|
|
8997
|
if (tab_name == 'logs' && vm.reportLogs === null) {
|
|
9017
|
vm.$state = $state;
|
|
8998
|
vm.fetchLogs();
|
|
9018
|
vm.loading = {tokens: true};
|
|
8999
|
}
|
|
|
|
|
9000
|
};
|
|
9019
|
|
|
9001
|
|
|
9020
|
vm.expireOptions = AeConfig.timeOptions;
|
|
9002
|
vm.markFixed = function () {
|
|
|
|
|
9003
|
reportGroupResource.update({
|
|
|
|
|
9004
|
groupId: vm.report.group_id
|
|
|
|
|
9005
|
}, {fixed: !vm.report.group.fixed},
|
|
|
|
|
9006
|
function (data) {
|
|
|
|
|
9007
|
vm.report.group.fixed = data.fixed;
|
|
|
|
|
9008
|
});
|
|
|
|
|
9009
|
};
|
|
9021
|
|
|
9010
|
|
|
9022
|
vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
|
|
9011
|
vm.markPublic = function () {
|
|
9023
|
function (data) {
|
|
9012
|
reportGroupResource.update({
|
|
9024
|
vm.loading.tokens = false;
|
|
9013
|
groupId: vm.report.group_id
|
|
9025
|
});
|
|
9014
|
}, {public: !vm.report.group.public},
|
|
|
|
|
9015
|
function (data) {
|
|
|
|
|
9016
|
vm.report.group.public = data.public;
|
|
|
|
|
9017
|
});
|
|
|
|
|
9018
|
};
|
|
9026
|
|
|
9019
|
|
|
9027
|
vm.addToken = function () {
|
|
9020
|
vm.delete = function () {
|
|
9028
|
vm.loading.tokens = true;
|
|
9021
|
reportGroupResource.delete({'groupId': vm.report.group_id},
|
|
9029
|
userSelfPropertyResource.save({key: 'auth_tokens'},
|
|
|
|
|
9030
|
vm.form,
|
|
|
|
|
9031
|
function (data) {
|
|
9022
|
function (data) {
|
|
9032
|
vm.loading.tokens = false;
|
|
9023
|
$state.go('report.list');
|
|
9033
|
setServerValidation(vm.TokenForm);
|
|
9024
|
})
|
|
9034
|
vm.form = {};
|
|
9025
|
};
|
|
9035
|
vm.tokens.push(data);
|
|
9026
|
|
|
9036
|
}, function (response) {
|
|
9027
|
vm.assignUsersModal = function (index) {
|
|
9037
|
vm.loading.tokens = false;
|
|
9028
|
vm.opts = {
|
|
9038
|
if (response.status == 422) {
|
|
9029
|
backdrop: 'static',
|
|
9039
|
setServerValidation(vm.TokenForm, response.data);
|
|
9030
|
templateUrl: 'AssignReportCtrl.html',
|
|
|
|
|
9031
|
controller: 'AssignReportCtrl as ctrl',
|
|
|
|
|
9032
|
resolve: {
|
|
|
|
|
9033
|
report: function () {
|
|
|
|
|
9034
|
return vm.report;
|
|
9040
|
}
|
|
9035
|
}
|
|
9041
|
})
|
|
9036
|
}
|
|
|
|
|
9037
|
};
|
|
|
|
|
9038
|
var modalInstance = $uibModal.open(vm.opts);
|
|
|
|
|
9039
|
modalInstance.result.then(function (report) {
|
|
|
|
|
9040
|
|
|
|
|
|
9041
|
}, function () {
|
|
|
|
|
9042
|
console.info('Modal dismissed at: ' + new Date());
|
|
|
|
|
9043
|
});
|
|
|
|
|
9044
|
|
|
9042
|
};
|
|
9045
|
};
|
|
9043
|
|
|
9046
|
|
|
9044
|
vm.removeToken = function (token) {
|
|
9047
|
vm.fetchHistory = function () {
|
|
9045
|
userSelfPropertyResource.delete({
|
|
9048
|
reportGroupPropertyResource.query({
|
|
9046
|
key: 'auth_tokens',
|
|
9049
|
groupId: vm.report.group_id,
|
|
9047
|
token: token.token
|
|
9050
|
key: 'history'
|
|
9048
|
},
|
|
9051
|
}, function (data) {
|
|
9049
|
function () {
|
|
9052
|
vm.reportHistoryData = {
|
|
9050
|
var index = vm.tokens.indexOf(token);
|
|
9053
|
json: data,
|
|
9051
|
if (index !== -1) {
|
|
9054
|
keys: {
|
|
9052
|
vm.tokens.splice(index, 1);
|
|
9055
|
x: 'x',
|
|
|
|
|
9056
|
value: ["reports"]
|
|
|
|
|
9057
|
},
|
|
|
|
|
9058
|
names: {
|
|
|
|
|
9059
|
reports: 'Reports history'
|
|
|
|
|
9060
|
},
|
|
|
|
|
9061
|
type: 'bar'
|
|
|
|
|
9062
|
};
|
|
|
|
|
9063
|
vm.is_loading.history = false;
|
|
|
|
|
9064
|
});
|
|
|
|
|
9065
|
};
|
|
|
|
|
9066
|
|
|
|
|
|
9067
|
vm.nextDetail = function () {
|
|
|
|
|
9068
|
$state.go('report.view_detail', {
|
|
|
|
|
9069
|
groupId: vm.report.group_id,
|
|
|
|
|
9070
|
reportId: vm.report.group.next_report
|
|
|
|
|
9071
|
});
|
|
|
|
|
9072
|
};
|
|
|
|
|
9073
|
vm.previousDetail = function () {
|
|
|
|
|
9074
|
$state.go('report.view_detail', {
|
|
|
|
|
9075
|
groupId: vm.report.group_id,
|
|
|
|
|
9076
|
reportId: vm.report.group.previous_report
|
|
|
|
|
9077
|
});
|
|
|
|
|
9078
|
};
|
|
|
|
|
9079
|
|
|
|
|
|
9080
|
vm.runIntegration = function (integration_name) {
|
|
|
|
|
9081
|
|
|
|
|
|
9082
|
if (integration_name == 'bitbucket') {
|
|
|
|
|
9083
|
var controller = 'BitbucketIntegrationCtrl as ctrl';
|
|
|
|
|
9084
|
var template_url = 'templates/integrations/bitbucket.html';
|
|
|
|
|
9085
|
}
|
|
|
|
|
9086
|
else if (integration_name == 'github') {
|
|
|
|
|
9087
|
var controller = 'GithubIntegrationCtrl as ctrl';
|
|
|
|
|
9088
|
var template_url = 'templates/integrations/github.html';
|
|
|
|
|
9089
|
}
|
|
|
|
|
9090
|
else if (integration_name == 'jira') {
|
|
|
|
|
9091
|
var controller = 'JiraIntegrationCtrl as ctrl';
|
|
|
|
|
9092
|
var template_url = 'templates/integrations/jira.html';
|
|
|
|
|
9093
|
}
|
|
|
|
|
9094
|
else {
|
|
|
|
|
9095
|
return false;
|
|
|
|
|
9096
|
}
|
|
|
|
|
9097
|
|
|
|
|
|
9098
|
vm.opts = {
|
|
|
|
|
9099
|
backdrop: 'static',
|
|
|
|
|
9100
|
templateUrl: template_url,
|
|
|
|
|
9101
|
controller: controller,
|
|
|
|
|
9102
|
resolve: {
|
|
|
|
|
9103
|
integrationName: function () {
|
|
|
|
|
9104
|
return integration_name
|
|
|
|
|
9105
|
},
|
|
|
|
|
9106
|
report: function () {
|
|
|
|
|
9107
|
return vm.report;
|
|
9053
|
}
|
|
9108
|
}
|
|
9054
|
})
|
|
9109
|
}
|
|
9055
|
}
|
|
9110
|
};
|
|
|
|
|
9111
|
var modalInstance = $uibModal.open(vm.opts);
|
|
|
|
|
9112
|
modalInstance.result.then(function (report) {
|
|
|
|
|
9113
|
|
|
|
|
|
9114
|
}, function () {
|
|
|
|
|
9115
|
console.info('Modal dismissed at: ' + new Date());
|
|
|
|
|
9116
|
});
|
|
|
|
|
9117
|
|
|
|
|
|
9118
|
};
|
|
|
|
|
9119
|
|
|
|
|
|
9120
|
// load report
|
|
|
|
|
9121
|
vm.fetchReport();
|
|
|
|
|
9122
|
|
|
|
|
|
9123
|
|
|
9056
|
}
|
|
9124
|
}
|
|
9057
|
|
|
9125
|
|
|
9058
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9126
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
@@
-9074,188
+9142,605
b' function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig'
|
|
9074
|
// # services, and proprietary license terms, please see
|
|
9142
|
// # services, and proprietary license terms, please see
|
|
9075
|
// # https://rhodecode.com/licenses/
|
|
9143
|
// # https://rhodecode.com/licenses/
|
|
9076
|
|
|
9144
|
|
|
9077
|
angular.module('appenlight.components.userIdentitiesView', [])
|
|
9145
|
angular.module('appenlight.components.reportsBrowserView', [])
|
|
9078
|
.component('userIdentitiesView', {
|
|
9146
|
.component('reportsBrowserView', {
|
|
9079
|
templateUrl: 'components/views/user-identities-view/user-identities-view.html',
|
|
9147
|
templateUrl: 'components/views/reports-browser-view/reports-browser-view.html',
|
|
9080
|
controller: UserIdentitiesController
|
|
9148
|
controller: reportsBrowserViewController
|
|
9081
|
});
|
|
9149
|
});
|
|
9082
|
|
|
9150
|
|
|
9083
|
UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
|
|
9151
|
reportsBrowserViewController.$inject = ['$location', '$cookies',
|
|
|
|
|
9152
|
'stateHolder', 'typeAheadTagHelper', 'reportsResource'];
|
|
9084
|
|
|
9153
|
|
|
9085
|
function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
|
|
9154
|
function reportsBrowserViewController($location, $cookies, stateHolder,
|
|
9086
|
|
|
9155
|
typeAheadTagHelper, reportsResource) {
|
|
9087
|
var vm = this;
|
|
9156
|
var vm = this;
|
|
9088
|
vm.$state = $state;
|
|
9157
|
vm.applications = stateHolder.AeUser.applications_map;
|
|
9089
|
vm.AeConfig = AeConfig;
|
|
9158
|
stateHolder.section = 'reports';
|
|
9090
|
vm.loading = {identities: true};
|
|
9159
|
vm.today = function () {
|
|
9091
|
|
|
9160
|
vm.pickerDate = new Date();
|
|
9092
|
vm.identities = userSelfPropertyResource.query(
|
|
9161
|
};
|
|
9093
|
{key: 'external_identities'},
|
|
9162
|
vm.today();
|
|
9094
|
function (data) {
|
|
9163
|
vm.reportsPage = [];
|
|
9095
|
vm.loading.identities = false;
|
|
9164
|
vm.page = 1;
|
|
9096
|
|
|
9165
|
vm.itemCount = 0;
|
|
9097
|
});
|
|
9166
|
vm.itemsPerPage = 250;
|
|
9098
|
|
|
9167
|
typeAheadTagHelper.tags = [];
|
|
9099
|
vm.removeProvider = function (provider) {
|
|
9168
|
vm.searchParams = {tags: [], page: 1, type: 'report'};
|
|
9100
|
|
|
9169
|
vm.is_loading = false;
|
|
9101
|
userSelfPropertyResource.delete(
|
|
9170
|
vm.filterTypeAheadOptions = [
|
|
9102
|
{
|
|
9171
|
{
|
|
9103
|
key: 'external_identities',
|
|
9172
|
type: 'error',
|
|
9104
|
provider: provider.provider,
|
|
9173
|
text: 'error:',
|
|
9105
|
id: provider.id
|
|
9174
|
'description': 'Full-text search in your reports',
|
|
9106
|
},
|
|
9175
|
example: 'error:text-im-looking-for',
|
|
9107
|
function (status) {
|
|
9176
|
tag: 'Error'
|
|
9108
|
if (status){
|
|
9177
|
},
|
|
9109
|
vm.identities = _.filter(vm.identities, function (item) {
|
|
9178
|
{
|
|
9110
|
return item != provider
|
|
9179
|
type: 'view_name',
|
|
9111
|
});
|
|
9180
|
text: 'view_name:',
|
|
9112
|
}
|
|
9181
|
'description': 'Query reports occured in specific views',
|
|
|
|
|
9182
|
example: "view_name:module.foo",
|
|
|
|
|
9183
|
tag: 'View Name'
|
|
|
|
|
9184
|
},
|
|
|
|
|
9185
|
{
|
|
|
|
|
9186
|
type: 'resource',
|
|
|
|
|
9187
|
text: 'resource:',
|
|
|
|
|
9188
|
'description': 'Restrict resultset to application',
|
|
|
|
|
9189
|
example: "resource:ID",
|
|
|
|
|
9190
|
tag: 'Application'
|
|
|
|
|
9191
|
},
|
|
|
|
|
9192
|
{
|
|
|
|
|
9193
|
type: 'priority',
|
|
|
|
|
9194
|
text: 'priority:',
|
|
|
|
|
9195
|
'description': 'Show reports with specific priority',
|
|
|
|
|
9196
|
example: 'priority:8',
|
|
|
|
|
9197
|
tag: 'Priority'
|
|
|
|
|
9198
|
},
|
|
|
|
|
9199
|
{
|
|
|
|
|
9200
|
type: 'min_occurences',
|
|
|
|
|
9201
|
text: 'min_occurences:',
|
|
|
|
|
9202
|
'description': 'Show reports from groups with at least X occurences',
|
|
|
|
|
9203
|
example: 'min_occurences:25',
|
|
|
|
|
9204
|
tag: 'Occurences'
|
|
|
|
|
9205
|
},
|
|
|
|
|
9206
|
{
|
|
|
|
|
9207
|
type: 'url_path',
|
|
|
|
|
9208
|
text: 'url_path:',
|
|
|
|
|
9209
|
'description': 'Show reports from specific URL paths',
|
|
|
|
|
9210
|
example: 'url_path:/foo/bar/baz',
|
|
|
|
|
9211
|
tag: 'Url Path'
|
|
|
|
|
9212
|
},
|
|
|
|
|
9213
|
{
|
|
|
|
|
9214
|
type: 'url_domain',
|
|
|
|
|
9215
|
text: 'url_domain:',
|
|
|
|
|
9216
|
'description': 'Show reports from specific domain',
|
|
|
|
|
9217
|
example: 'url_domain:domain.com',
|
|
|
|
|
9218
|
tag: 'Domain'
|
|
|
|
|
9219
|
},
|
|
|
|
|
9220
|
{
|
|
|
|
|
9221
|
type: 'report_status',
|
|
|
|
|
9222
|
text: 'report_status:',
|
|
|
|
|
9223
|
'description': 'Show reports from groups with specific status',
|
|
|
|
|
9224
|
example: 'report_status:never_reviewed',
|
|
|
|
|
9225
|
tag: 'Status'
|
|
|
|
|
9226
|
},
|
|
|
|
|
9227
|
{
|
|
|
|
|
9228
|
type: 'request_id',
|
|
|
|
|
9229
|
text: 'request_id:',
|
|
|
|
|
9230
|
'description': 'Show reports with specific request id',
|
|
|
|
|
9231
|
example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
|
|
|
|
|
9232
|
tag: 'Request ID'
|
|
|
|
|
9233
|
},
|
|
|
|
|
9234
|
{
|
|
|
|
|
9235
|
type: 'server_name',
|
|
|
|
|
9236
|
text: 'server_name:',
|
|
|
|
|
9237
|
'description': 'Show reports tagged with this key/value pair',
|
|
|
|
|
9238
|
example: 'server_name:hostname',
|
|
|
|
|
9239
|
tag: 'Tag'
|
|
|
|
|
9240
|
},
|
|
|
|
|
9241
|
{
|
|
|
|
|
9242
|
type: 'http_status',
|
|
|
|
|
9243
|
text: 'http_status:',
|
|
|
|
|
9244
|
'description': 'Show reports with specific HTTP status code',
|
|
|
|
|
9245
|
example: "http_status:",
|
|
|
|
|
9246
|
tag: 'HTTP Status'
|
|
|
|
|
9247
|
},
|
|
|
|
|
9248
|
{
|
|
|
|
|
9249
|
type: 'http_status',
|
|
|
|
|
9250
|
text: 'http_status:500',
|
|
|
|
|
9251
|
'description': 'Show reports with specific HTTP status code',
|
|
|
|
|
9252
|
example: "http_status:500",
|
|
|
|
|
9253
|
tag: 'HTTP Status'
|
|
|
|
|
9254
|
},
|
|
|
|
|
9255
|
{
|
|
|
|
|
9256
|
type: 'http_status',
|
|
|
|
|
9257
|
text: 'http_status:404',
|
|
|
|
|
9258
|
'description': 'Include 404 reports in your search',
|
|
|
|
|
9259
|
example: "http_status:404",
|
|
|
|
|
9260
|
tag: 'HTTP Status'
|
|
|
|
|
9261
|
},
|
|
|
|
|
9262
|
{
|
|
|
|
|
9263
|
type: 'start_date',
|
|
|
|
|
9264
|
text: 'start_date:',
|
|
|
|
|
9265
|
'description': 'Show reports newer than this date (press TAB for dropdown)',
|
|
|
|
|
9266
|
example: 'start_date:2014-08-15T13:00',
|
|
|
|
|
9267
|
tag: 'Start Date'
|
|
|
|
|
9268
|
},
|
|
|
|
|
9269
|
{
|
|
|
|
|
9270
|
type: 'end_date',
|
|
|
|
|
9271
|
text: 'end_date:',
|
|
|
|
|
9272
|
'description': 'Show reports older than this date (press TAB for dropdown)',
|
|
|
|
|
9273
|
example: 'start_date:2014-08-15T23:59',
|
|
|
|
|
9274
|
tag: 'End Date'
|
|
|
|
|
9275
|
}
|
|
|
|
|
9276
|
];
|
|
|
|
|
9277
|
|
|
|
|
|
9278
|
vm.filterTypeAhead = undefined;
|
|
|
|
|
9279
|
vm.showDatePicker = false;
|
|
|
|
|
9280
|
vm.manualOpen = false;
|
|
|
|
|
9281
|
vm.aheadFilter = typeAheadTagHelper.aheadFilter;
|
|
|
|
|
9282
|
vm.removeSearchTag = function (tag) {
|
|
|
|
|
9283
|
$location.search(tag.type, null);
|
|
|
|
|
9284
|
vm.refresh();
|
|
|
|
|
9285
|
};
|
|
|
|
|
9286
|
vm.addSearchTag = function (tag) {
|
|
|
|
|
9287
|
$location.search(tag.type, tag.value);
|
|
|
|
|
9288
|
vm.refresh();
|
|
|
|
|
9289
|
};
|
|
|
|
|
9290
|
vm.notRelativeTime = false;
|
|
|
|
|
9291
|
if ($cookies.notRelativeTime) {
|
|
|
|
|
9292
|
vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
|
|
|
|
|
9293
|
}
|
|
|
|
|
9294
|
|
|
|
|
|
9295
|
vm.changeRelativeTime = function () {
|
|
|
|
|
9296
|
$cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
|
|
|
|
|
9297
|
};
|
|
|
|
|
9298
|
|
|
|
|
|
9299
|
_.each(_.range(1, 11), function (priority) {
|
|
|
|
|
9300
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
9301
|
type: 'priority',
|
|
|
|
|
9302
|
text: 'priority:' + priority.toString(),
|
|
|
|
|
9303
|
description: 'Show entries with specific priority',
|
|
|
|
|
9304
|
example: 'priority:' + priority,
|
|
|
|
|
9305
|
tag: 'Priority'
|
|
|
|
|
9306
|
});
|
|
|
|
|
9307
|
});
|
|
|
|
|
9308
|
_.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
|
|
|
|
|
9309
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
9310
|
type: 'report_status',
|
|
|
|
|
9311
|
text: 'report_status:' + status,
|
|
|
|
|
9312
|
'description': 'Show only reports with this status',
|
|
|
|
|
9313
|
example: 'report_status:' + status,
|
|
|
|
|
9314
|
tag: 'Status ' + status.toUpperCase()
|
|
|
|
|
9315
|
});
|
|
|
|
|
9316
|
});
|
|
|
|
|
9317
|
_.each(stateHolder.AeUser.applications, function (item) {
|
|
|
|
|
9318
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
9319
|
type: 'resource',
|
|
|
|
|
9320
|
text: 'resource:' + item.resource_id + ':' + item.resource_name,
|
|
|
|
|
9321
|
example: 'resource:' + item.resource_id,
|
|
|
|
|
9322
|
'tag': item.resource_name,
|
|
|
|
|
9323
|
'description': 'Restrict resultset to this application'
|
|
|
|
|
9324
|
});
|
|
|
|
|
9325
|
});
|
|
|
|
|
9326
|
|
|
|
|
|
9327
|
vm.paginationChange = function(){
|
|
|
|
|
9328
|
$location.search('page', vm.page);
|
|
|
|
|
9329
|
vm.refresh();
|
|
|
|
|
9330
|
};
|
|
|
|
|
9331
|
|
|
|
|
|
9332
|
vm.typeAheadTag = function (event) {
|
|
|
|
|
9333
|
var text = vm.filterTypeAhead;
|
|
|
|
|
9334
|
if (_.isObject(vm.filterTypeAhead)) {
|
|
|
|
|
9335
|
text = vm.filterTypeAhead.text;
|
|
|
|
|
9336
|
}
|
|
|
|
|
9337
|
if (!vm.filterTypeAhead) {
|
|
|
|
|
9338
|
return
|
|
|
|
|
9339
|
}
|
|
|
|
|
9340
|
|
|
|
|
|
9341
|
var parsed = text.split(':');
|
|
|
|
|
9342
|
var tag = {'type': null, 'value': null};
|
|
|
|
|
9343
|
// app tags have : twice
|
|
|
|
|
9344
|
if (parsed.length > 2 && parsed[0] == 'resource') {
|
|
|
|
|
9345
|
tag.type = 'resource';
|
|
|
|
|
9346
|
tag.value = parsed[1];
|
|
|
|
|
9347
|
}
|
|
|
|
|
9348
|
// normal tag:value
|
|
|
|
|
9349
|
else if (parsed.length > 1) {
|
|
|
|
|
9350
|
tag.type = parsed[0];
|
|
|
|
|
9351
|
var tagValue = parsed.slice(1);
|
|
|
|
|
9352
|
if (tagValue) {
|
|
|
|
|
9353
|
tag.value = tagValue.join(':');
|
|
|
|
|
9354
|
}
|
|
|
|
|
9355
|
}
|
|
|
|
|
9356
|
else {
|
|
|
|
|
9357
|
tag.type = 'error';
|
|
|
|
|
9358
|
tag.value = parsed.join(':');
|
|
|
|
|
9359
|
}
|
|
|
|
|
9360
|
|
|
|
|
|
9361
|
// set datepicker hour based on type of field
|
|
|
|
|
9362
|
if ('start_date:' == text) {
|
|
|
|
|
9363
|
vm.showDatePicker = true;
|
|
|
|
|
9364
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
|
|
|
9365
|
}
|
|
|
|
|
9366
|
else if ('end_date:' == text) {
|
|
|
|
|
9367
|
vm.showDatePicker = true;
|
|
|
|
|
9368
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
9369
|
}
|
|
|
|
|
9370
|
|
|
|
|
|
9371
|
if (event.keyCode != 13 || !tag.type || !tag.value) {
|
|
|
|
|
9372
|
return
|
|
|
|
|
9373
|
}
|
|
|
|
|
9374
|
vm.showDatePicker = false;
|
|
|
|
|
9375
|
// aka we selected one of main options
|
|
|
|
|
9376
|
vm.addSearchTag({type: tag.type, value: tag.value});
|
|
|
|
|
9377
|
// clear typeahead
|
|
|
|
|
9378
|
vm.filterTypeAhead = undefined;
|
|
|
|
|
9379
|
};
|
|
|
|
|
9380
|
|
|
|
|
|
9381
|
vm.pickerDateChanged = function(){
|
|
|
|
|
9382
|
if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
|
|
|
|
|
9383
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
|
|
|
9384
|
}
|
|
|
|
|
9385
|
else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
|
|
|
|
|
9386
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
9387
|
}
|
|
|
|
|
9388
|
vm.showDatePicker = false;
|
|
|
|
|
9389
|
};
|
|
|
|
|
9390
|
|
|
|
|
|
9391
|
var reportPresentation = function (report) {
|
|
|
|
|
9392
|
report.presentation = {};
|
|
|
|
|
9393
|
if (report.group.public) {
|
|
|
|
|
9394
|
report.presentation.className = 'public';
|
|
|
|
|
9395
|
report.presentation.tooltip = 'Public';
|
|
|
|
|
9396
|
}
|
|
|
|
|
9397
|
else if (report.group.fixed) {
|
|
|
|
|
9398
|
report.presentation.className = 'fixed';
|
|
|
|
|
9399
|
report.presentation.tooltip = 'Fixed';
|
|
|
|
|
9400
|
}
|
|
|
|
|
9401
|
else if (report.group.read) {
|
|
|
|
|
9402
|
report.presentation.className = 'reviewed';
|
|
|
|
|
9403
|
report.presentation.tooltip = 'Reviewed';
|
|
|
|
|
9404
|
}
|
|
|
|
|
9405
|
else {
|
|
|
|
|
9406
|
report.presentation.className = 'new';
|
|
|
|
|
9407
|
report.presentation.tooltip = 'New';
|
|
|
|
|
9408
|
}
|
|
|
|
|
9409
|
return report;
|
|
|
|
|
9410
|
};
|
|
|
|
|
9411
|
|
|
|
|
|
9412
|
vm.fetchReports = function (searchParams) {
|
|
|
|
|
9413
|
vm.is_loading = true;
|
|
|
|
|
9414
|
reportsResource.query(searchParams, function (data, getResponseHeaders) {
|
|
|
|
|
9415
|
var headers = getResponseHeaders();
|
|
|
|
|
9416
|
|
|
|
|
|
9417
|
vm.is_loading = false;
|
|
|
|
|
9418
|
vm.reportsPage = _.map(data, function (item) {
|
|
|
|
|
9419
|
return reportPresentation(item);
|
|
|
|
|
9420
|
});
|
|
|
|
|
9421
|
vm.itemCount = headers['x-total-count'];
|
|
|
|
|
9422
|
vm.itemsPerPage = headers['x-items-per-page'];
|
|
|
|
|
9423
|
}, function () {
|
|
|
|
|
9424
|
vm.is_loading = false;
|
|
|
|
|
9425
|
});
|
|
|
|
|
9426
|
};
|
|
|
|
|
9427
|
|
|
|
|
|
9428
|
vm.filterId = function (log) {
|
|
|
|
|
9429
|
vm.searchParams.tags.push({
|
|
|
|
|
9430
|
type: "request_id",
|
|
|
|
|
9431
|
value: log.request_id
|
|
|
|
|
9432
|
});
|
|
|
|
|
9433
|
vm.refresh();
|
|
|
|
|
9434
|
};
|
|
|
|
|
9435
|
|
|
|
|
|
9436
|
vm.refresh = function(){
|
|
|
|
|
9437
|
vm.searchParams = parseSearchToTags($location.search());
|
|
|
|
|
9438
|
vm.page = Number(vm.searchParams.page) || 1;
|
|
|
|
|
9439
|
var params = parseTagsToSearch(vm.searchParams);
|
|
|
|
|
9440
|
|
|
|
|
|
9441
|
vm.fetchReports(params);
|
|
|
|
|
9442
|
};
|
|
|
|
|
9443
|
// initial load
|
|
|
|
|
9444
|
vm.refresh();
|
|
|
|
|
9445
|
}
|
|
|
|
|
9446
|
|
|
|
|
|
9447
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
|
|
|
9448
|
// #
|
|
|
|
|
9449
|
// # This program is free software: you can redistribute it and/or modify
|
|
|
|
|
9450
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
|
|
|
9451
|
// # (only), as published by the Free Software Foundation.
|
|
|
|
|
9452
|
// #
|
|
|
|
|
9453
|
// # This program is distributed in the hope that it will be useful,
|
|
|
|
|
9454
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
9455
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
9456
|
// # GNU General Public License for more details.
|
|
|
|
|
9457
|
// #
|
|
|
|
|
9458
|
// # You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
9459
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
9460
|
// #
|
|
|
|
|
9461
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
9462
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
9463
|
// # services, and proprietary license terms, please see
|
|
|
|
|
9464
|
// # https://rhodecode.com/licenses/
|
|
|
|
|
9465
|
|
|
|
|
|
9466
|
'use strict';
|
|
|
|
|
9467
|
|
|
|
|
|
9468
|
/* Controllers */
|
|
|
|
|
9469
|
|
|
|
|
|
9470
|
angular.module('appenlight.components.reportsSlowBrowserView', [])
|
|
|
|
|
9471
|
.component('reportsSlowBrowserView', {
|
|
|
|
|
9472
|
templateUrl: 'components/views/reports-slow-browser-view/reports-slow-browser-view.html',
|
|
|
|
|
9473
|
controller: ReportsSlowBrowserViewController
|
|
|
|
|
9474
|
});
|
|
|
|
|
9475
|
|
|
|
|
|
9476
|
ReportsSlowBrowserViewController.$inject = ['$location', '$cookies',
|
|
|
|
|
9477
|
'stateHolder', 'typeAheadTagHelper', 'slowReportsResource']
|
|
|
|
|
9478
|
|
|
|
|
|
9479
|
function ReportsSlowBrowserViewController($location, $cookies, stateHolder, typeAheadTagHelper, slowReportsResource) {
|
|
|
|
|
9480
|
var vm = this;
|
|
|
|
|
9481
|
vm.applications = stateHolder.AeUser.applications_map;
|
|
|
|
|
9482
|
stateHolder.section = 'slow_reports';
|
|
|
|
|
9483
|
vm.today = function () {
|
|
|
|
|
9484
|
vm.pickerDate = new Date();
|
|
|
|
|
9485
|
};
|
|
|
|
|
9486
|
vm.today();
|
|
|
|
|
9487
|
vm.reportsPage = [];
|
|
|
|
|
9488
|
vm.page = 1;
|
|
|
|
|
9489
|
vm.itemCount = 0;
|
|
|
|
|
9490
|
vm.itemsPerPage = 250;
|
|
|
|
|
9491
|
typeAheadTagHelper.tags = [];
|
|
|
|
|
9492
|
vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
|
|
|
|
|
9493
|
vm.is_loading = false;
|
|
|
|
|
9494
|
vm.filterTypeAheadOptions = [
|
|
|
|
|
9495
|
{
|
|
|
|
|
9496
|
type: 'view_name',
|
|
|
|
|
9497
|
text: 'view_name:',
|
|
|
|
|
9498
|
'description': 'Query reports occured in specific views',
|
|
|
|
|
9499
|
tag: 'View Name',
|
|
|
|
|
9500
|
example: "view_name:module.foo"
|
|
|
|
|
9501
|
},
|
|
|
|
|
9502
|
{
|
|
|
|
|
9503
|
type: 'resource',
|
|
|
|
|
9504
|
text: 'resource:',
|
|
|
|
|
9505
|
'description': 'Restrict resultset to application',
|
|
|
|
|
9506
|
tag: 'Application',
|
|
|
|
|
9507
|
example: "resource:ID"
|
|
|
|
|
9508
|
},
|
|
|
|
|
9509
|
{
|
|
|
|
|
9510
|
type: 'priority',
|
|
|
|
|
9511
|
text: 'priority:',
|
|
|
|
|
9512
|
'description': 'Show reports with specific priority',
|
|
|
|
|
9513
|
example: 'priority:8',
|
|
|
|
|
9514
|
tag: 'Priority'
|
|
|
|
|
9515
|
},
|
|
|
|
|
9516
|
{
|
|
|
|
|
9517
|
type: 'min_occurences',
|
|
|
|
|
9518
|
text: 'min_occurences:',
|
|
|
|
|
9519
|
'description': 'Show reports from groups with at least X occurences',
|
|
|
|
|
9520
|
example: 'min_occurences:25',
|
|
|
|
|
9521
|
tag: 'Min. occurences'
|
|
|
|
|
9522
|
},
|
|
|
|
|
9523
|
{
|
|
|
|
|
9524
|
type: 'min_duration',
|
|
|
|
|
9525
|
text: 'min_duration:',
|
|
|
|
|
9526
|
'description': 'Show reports from groups with average duration >= Xs',
|
|
|
|
|
9527
|
example: 'min_duration:4.5',
|
|
|
|
|
9528
|
tag: 'Min. duration'
|
|
|
|
|
9529
|
},
|
|
|
|
|
9530
|
{
|
|
|
|
|
9531
|
type: 'url_path',
|
|
|
|
|
9532
|
text: 'url_path:',
|
|
|
|
|
9533
|
'description': 'Show reports from specific URL paths',
|
|
|
|
|
9534
|
example: 'url_path:/foo/bar/baz',
|
|
|
|
|
9535
|
tag: 'Url Path'
|
|
|
|
|
9536
|
},
|
|
|
|
|
9537
|
{
|
|
|
|
|
9538
|
type: 'url_domain',
|
|
|
|
|
9539
|
text: 'url_domain:',
|
|
|
|
|
9540
|
'description': 'Show reports from specific domain',
|
|
|
|
|
9541
|
example: 'url_domain:domain.com',
|
|
|
|
|
9542
|
tag: 'Domain'
|
|
|
|
|
9543
|
},
|
|
|
|
|
9544
|
{
|
|
|
|
|
9545
|
type: 'request_id',
|
|
|
|
|
9546
|
text: 'request_id:',
|
|
|
|
|
9547
|
'description': 'Show reports with specific request id',
|
|
|
|
|
9548
|
example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
|
|
|
|
|
9549
|
tag: 'Request ID'
|
|
|
|
|
9550
|
},
|
|
|
|
|
9551
|
{
|
|
|
|
|
9552
|
type: 'report_status',
|
|
|
|
|
9553
|
text: 'report_status:',
|
|
|
|
|
9554
|
'description': 'Show reports from groups with specific status',
|
|
|
|
|
9555
|
example: 'report_status:never_reviewed',
|
|
|
|
|
9556
|
tag: 'Status'
|
|
|
|
|
9557
|
},
|
|
|
|
|
9558
|
{
|
|
|
|
|
9559
|
type: 'server_name',
|
|
|
|
|
9560
|
text: 'server_name:',
|
|
|
|
|
9561
|
'description': 'Show reports tagged with this key/value pair',
|
|
|
|
|
9562
|
example: 'server_name:hostname',
|
|
|
|
|
9563
|
tag: 'Tag'
|
|
|
|
|
9564
|
},
|
|
|
|
|
9565
|
{
|
|
|
|
|
9566
|
type: 'start_date',
|
|
|
|
|
9567
|
text: 'start_date:',
|
|
|
|
|
9568
|
'description': 'Show reports newer than this date (press TAB for dropdown)',
|
|
|
|
|
9569
|
example: 'start_date:2014-08-15T13:00',
|
|
|
|
|
9570
|
tag: 'Start Date'
|
|
|
|
|
9571
|
},
|
|
|
|
|
9572
|
{
|
|
|
|
|
9573
|
type: 'end_date',
|
|
|
|
|
9574
|
text: 'end_date:',
|
|
|
|
|
9575
|
'description': 'Show reports older than this date (press TAB for dropdown)',
|
|
|
|
|
9576
|
example: 'start_date:2014-08-15T23:59',
|
|
|
|
|
9577
|
tag: 'End Date'
|
|
|
|
|
9578
|
}
|
|
|
|
|
9579
|
];
|
|
9113
|
|
|
9580
|
|
|
9114
|
});
|
|
9581
|
vm.filterTypeAhead = undefined;
|
|
|
|
|
9582
|
vm.showDatePicker = false;
|
|
|
|
|
9583
|
vm.aheadFilter = typeAheadTagHelper.aheadFilter;
|
|
|
|
|
9584
|
vm.removeSearchTag = function (tag) {
|
|
|
|
|
9585
|
$location.search(tag.type, null);
|
|
|
|
|
9586
|
vm.refresh();
|
|
|
|
|
9587
|
};
|
|
|
|
|
9588
|
vm.addSearchTag = function (tag) {
|
|
|
|
|
9589
|
$location.search(tag.type, tag.value);
|
|
|
|
|
9590
|
vm.refresh();
|
|
|
|
|
9591
|
};
|
|
|
|
|
9592
|
vm.manualOpen = false;
|
|
|
|
|
9593
|
vm.notRelativeTime = false;
|
|
|
|
|
9594
|
if ($cookies.notRelativeTime) {
|
|
|
|
|
9595
|
vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
|
|
9115
|
}
|
|
9596
|
}
|
|
9116
|
}
|
|
|
|
|
9117
|
|
|
|
|
|
9118
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
|
|
|
9119
|
// #
|
|
|
|
|
9120
|
// # This program is free software: you can redistribute it and/or modify
|
|
|
|
|
9121
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
|
|
|
9122
|
// # (only), as published by the Free Software Foundation.
|
|
|
|
|
9123
|
// #
|
|
|
|
|
9124
|
// # This program is distributed in the hope that it will be useful,
|
|
|
|
|
9125
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
9126
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
9127
|
// # GNU General Public License for more details.
|
|
|
|
|
9128
|
// #
|
|
|
|
|
9129
|
// # You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
9130
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
9131
|
// #
|
|
|
|
|
9132
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
9133
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
9134
|
// # services, and proprietary license terms, please see
|
|
|
|
|
9135
|
// # https://rhodecode.com/licenses/
|
|
|
|
|
9136
|
|
|
9597
|
|
|
9137
|
angular.module('appenlight.components.userPasswordView', [])
|
|
|
|
|
9138
|
.component('userPasswordView', {
|
|
|
|
|
9139
|
templateUrl: 'components/views/user-password-view/user-password-view.html',
|
|
|
|
|
9140
|
controller: UserPasswordViewController
|
|
|
|
|
9141
|
});
|
|
|
|
|
9142
|
|
|
|
|
|
9143
|
UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
|
|
|
|
|
9144
|
|
|
9598
|
|
|
9145
|
function UserPasswordViewController($state, userSelfPropertyResource) {
|
|
9599
|
vm.changeRelativeTime = function () {
|
|
9146
|
|
|
9600
|
$cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
|
|
9147
|
var vm = this;
|
|
9601
|
};
|
|
9148
|
vm.$state = $state;
|
|
|
|
|
9149
|
vm.loading = {password: false};
|
|
|
|
|
9150
|
vm.form = {};
|
|
|
|
|
9151
|
|
|
9602
|
|
|
9152
|
vm.updatePassword = function () {
|
|
9603
|
_.each(_.range(1, 11), function (priority) {
|
|
9153
|
vm.loading.password = true;
|
|
9604
|
vm.filterTypeAheadOptions.push({
|
|
9154
|
|
|
9605
|
type: 'priority',
|
|
9155
|
userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
|
|
9606
|
text: 'priority:' + priority.toString(),
|
|
9156
|
vm.loading.password = false;
|
|
9607
|
description: 'Show entries with specific priority',
|
|
9157
|
vm.form = {};
|
|
9608
|
example: 'priority:' + priority,
|
|
9158
|
setServerValidation(vm.passwordForm);
|
|
9609
|
tag: 'Priority'
|
|
9159
|
}, function (response) {
|
|
|
|
|
9160
|
if (response.status == 422) {
|
|
|
|
|
9161
|
|
|
|
|
|
9162
|
setServerValidation(vm.passwordForm, response.data);
|
|
|
|
|
9163
|
|
|
|
|
|
9164
|
}
|
|
|
|
|
9165
|
vm.loading.password = false;
|
|
|
|
|
9166
|
});
|
|
9610
|
});
|
|
9167
|
}
|
|
9611
|
});
|
|
9168
|
}
|
|
9612
|
_.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
|
|
|
|
|
9613
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
9614
|
type: 'report_status',
|
|
|
|
|
9615
|
text: 'report_status:' + status,
|
|
|
|
|
9616
|
'description': 'Show only reports with this status',
|
|
|
|
|
9617
|
example: 'report_status:' + status,
|
|
|
|
|
9618
|
tag: 'Status ' + status.toUpperCase()
|
|
|
|
|
9619
|
});
|
|
|
|
|
9620
|
});
|
|
|
|
|
9621
|
_.each(stateHolder.AeUser.applications, function (item) {
|
|
|
|
|
9622
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
9623
|
type: 'resource',
|
|
|
|
|
9624
|
text: 'resource:' + item.resource_id + ':' + item.resource_name,
|
|
|
|
|
9625
|
example: 'resource:' + item.resource_id,
|
|
|
|
|
9626
|
'tag': item.resource_name,
|
|
|
|
|
9627
|
'description': 'Restrict resultset to this application'
|
|
|
|
|
9628
|
});
|
|
|
|
|
9629
|
});
|
|
9169
|
|
|
9630
|
|
|
9170
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9631
|
vm.typeAheadTag = function (event) {
|
|
9171
|
// #
|
|
9632
|
var text = vm.filterTypeAhead;
|
|
9172
|
// # This program is free software: you can redistribute it and/or modify
|
|
9633
|
if (_.isObject(vm.filterTypeAhead)) {
|
|
9173
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
9634
|
text = vm.filterTypeAhead.text;
|
|
9174
|
// # (only), as published by the Free Software Foundation.
|
|
9635
|
};
|
|
9175
|
// #
|
|
9636
|
if (!vm.filterTypeAhead) {
|
|
9176
|
// # This program is distributed in the hope that it will be useful,
|
|
9637
|
return
|
|
9177
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9638
|
}
|
|
9178
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
9639
|
var parsed = text.split(':');
|
|
9179
|
// # GNU General Public License for more details.
|
|
9640
|
var tag = {'type': null, 'value': null};
|
|
9180
|
// #
|
|
9641
|
// app tags have : twice
|
|
9181
|
// # You should have received a copy of the GNU Affero General Public License
|
|
9642
|
if (parsed.length > 2 && parsed[0] == 'resource') {
|
|
9182
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
9643
|
tag.type = 'resource';
|
|
9183
|
// #
|
|
9644
|
tag.value = parsed[1];
|
|
9184
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
9645
|
}
|
|
9185
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
9646
|
// normal tag:value
|
|
9186
|
// # services, and proprietary license terms, please see
|
|
9647
|
else if (parsed.length > 1) {
|
|
9187
|
// # https://rhodecode.com/licenses/
|
|
9648
|
tag.type = parsed[0];
|
|
|
|
|
9649
|
var tagValue = parsed.slice(1);
|
|
|
|
|
9650
|
if (tagValue) {
|
|
|
|
|
9651
|
tag.value = tagValue.join(':');
|
|
|
|
|
9652
|
}
|
|
|
|
|
9653
|
}
|
|
9188
|
|
|
9654
|
|
|
9189
|
angular.module('appenlight.components.userProfileView', [])
|
|
9655
|
// set datepicker hour based on type of field
|
|
9190
|
.component('userProfileView', {
|
|
9656
|
if ('start_date:' == text) {
|
|
9191
|
templateUrl: 'components/views/user-profile-view/user-profile-view.html',
|
|
9657
|
vm.showDatePicker = true;
|
|
9192
|
controller: UserProfileViewController
|
|
9658
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
9193
|
});
|
|
9659
|
}
|
|
|
|
|
9660
|
else if ('end_date:' == text) {
|
|
|
|
|
9661
|
vm.showDatePicker = true;
|
|
|
|
|
9662
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
9663
|
}
|
|
9194
|
|
|
9664
|
|
|
9195
|
UserProfileViewController.$inject = ['$state', 'userSelfResource'];
|
|
9665
|
if (event.keyCode != 13 || !tag.type || !tag.value) {
|
|
|
|
|
9666
|
return
|
|
|
|
|
9667
|
}
|
|
|
|
|
9668
|
vm.showDatePicker = false;
|
|
|
|
|
9669
|
// aka we selected one of main options
|
|
|
|
|
9670
|
vm.addSearchTag({type: tag.type, value: tag.value});
|
|
|
|
|
9671
|
// clear typeahead
|
|
|
|
|
9672
|
vm.filterTypeAhead = undefined;
|
|
|
|
|
9673
|
};
|
|
9196
|
|
|
9674
|
|
|
9197
|
function UserProfileViewController($state, userSelfResource) {
|
|
9675
|
vm.paginationChange = function(){
|
|
9198
|
|
|
9676
|
$location.search('page', vm.page);
|
|
9199
|
var vm = this;
|
|
9677
|
vm.refresh();
|
|
9200
|
vm.$state = $state;
|
|
9678
|
};
|
|
9201
|
vm.loading = {profile: true};
|
|
|
|
|
9202
|
|
|
9679
|
|
|
9203
|
vm.user = userSelfResource.get(null, function (data) {
|
|
9680
|
vm.pickerDateChanged = function(){
|
|
9204
|
vm.loading.profile = false;
|
|
9681
|
if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
|
|
9205
|
|
|
9682
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
9206
|
});
|
|
9683
|
}
|
|
|
|
|
9684
|
else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
|
|
|
|
|
9685
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
9686
|
}
|
|
|
|
|
9687
|
vm.showDatePicker = false;
|
|
|
|
|
9688
|
};
|
|
9207
|
|
|
9689
|
|
|
9208
|
vm.updateProfile = function () {
|
|
9690
|
var reportPresentation = function (report) {
|
|
9209
|
vm.loading.profile = true;
|
|
9691
|
report.presentation = {};
|
|
|
|
|
9692
|
if (report.group.public) {
|
|
|
|
|
9693
|
report.presentation.className = 'public';
|
|
|
|
|
9694
|
report.presentation.tooltip = 'Public';
|
|
|
|
|
9695
|
}
|
|
|
|
|
9696
|
else if (report.group.fixed) {
|
|
|
|
|
9697
|
report.presentation.className = 'fixed';
|
|
|
|
|
9698
|
report.presentation.tooltip = 'Fixed';
|
|
|
|
|
9699
|
}
|
|
|
|
|
9700
|
else if (report.group.read) {
|
|
|
|
|
9701
|
report.presentation.className = 'reviewed';
|
|
|
|
|
9702
|
report.presentation.tooltip = 'Reviewed';
|
|
|
|
|
9703
|
}
|
|
|
|
|
9704
|
else {
|
|
|
|
|
9705
|
report.presentation.className = 'new';
|
|
|
|
|
9706
|
report.presentation.tooltip = 'New';
|
|
|
|
|
9707
|
}
|
|
|
|
|
9708
|
return report;
|
|
|
|
|
9709
|
};
|
|
9210
|
|
|
9710
|
|
|
9211
|
|
|
9711
|
vm.fetchReports = function (searchParams) {
|
|
9212
|
vm.user.$update(null, function () {
|
|
9712
|
vm.is_loading = true;
|
|
9213
|
vm.loading.profile = false;
|
|
9713
|
slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
|
|
9214
|
setServerValidation(vm.profileForm);
|
|
9714
|
var headers = getResponseHeaders();
|
|
9215
|
}, function (response) {
|
|
9715
|
|
|
9216
|
if (response.status == 422) {
|
|
9716
|
vm.is_loading = false;
|
|
9217
|
setServerValidation(vm.profileForm, response.data);
|
|
9717
|
vm.reportsPage = _.map(data, function (item) {
|
|
9218
|
}
|
|
9718
|
return reportPresentation(item);
|
|
9219
|
vm.loading.profile = false;
|
|
9719
|
});
|
|
|
|
|
9720
|
vm.itemCount = headers['x-total-count'];
|
|
|
|
|
9721
|
vm.itemsPerPage = headers['x-items-per-page'];
|
|
|
|
|
9722
|
}, function () {
|
|
|
|
|
9723
|
vm.is_loading = false;
|
|
9220
|
});
|
|
9724
|
});
|
|
9221
|
}
|
|
9725
|
};
|
|
9222
|
}
|
|
|
|
|
9223
|
|
|
9726
|
|
|
9224
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9727
|
vm.filterId = function (log) {
|
|
9225
|
// #
|
|
9728
|
vm.searchParams.tags.push({
|
|
9226
|
// # This program is free software: you can redistribute it and/or modify
|
|
9729
|
type: "request_id",
|
|
9227
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
9730
|
value: log.request_id
|
|
9228
|
// # (only), as published by the Free Software Foundation.
|
|
9731
|
});
|
|
9229
|
// #
|
|
9732
|
vm.refresh();
|
|
9230
|
// # This program is distributed in the hope that it will be useful,
|
|
9733
|
};
|
|
9231
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9734
|
vm.refresh = function(){
|
|
9232
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
9735
|
vm.searchParams = parseSearchToTags($location.search());
|
|
9233
|
// # GNU General Public License for more details.
|
|
9736
|
vm.page = Number(vm.searchParams.page) || 1;
|
|
9234
|
// #
|
|
9737
|
var params = parseTagsToSearch(vm.searchParams);
|
|
9235
|
// # You should have received a copy of the GNU Affero General Public License
|
|
9738
|
vm.fetchReports(params);
|
|
9236
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
9739
|
};
|
|
9237
|
// #
|
|
|
|
|
9238
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
9239
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
9240
|
// # services, and proprietary license terms, please see
|
|
|
|
|
9241
|
// # https://rhodecode.com/licenses/
|
|
|
|
|
9242
|
|
|
9740
|
|
|
9243
|
var aeconfig = angular.module('appenlight.config', []);
|
|
9741
|
//initial load
|
|
9244
|
aeconfig.factory('AeConfig', function () {
|
|
9742
|
vm.refresh();
|
|
9245
|
var obj = {};
|
|
9743
|
}
|
|
9246
|
obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
|
|
|
|
|
9247
|
obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
|
|
|
|
|
9248
|
obj.plugins = decodeEncodedJSON(window.AE.plugins);
|
|
|
|
|
9249
|
obj.topNav = decodeEncodedJSON(window.AE.topNav);
|
|
|
|
|
9250
|
obj.ws_url = window.AE.ws_url;
|
|
|
|
|
9251
|
obj.urls = window.AE.urls;
|
|
|
|
|
9252
|
// set keys on values because we wont be able to retrieve them everywhere
|
|
|
|
|
9253
|
for (var key in obj.timeOptions) {
|
|
|
|
|
9254
|
obj.timeOptions[key]['key'] = key;
|
|
|
|
|
9255
|
}
|
|
|
|
|
9256
|
console.info('config', obj);
|
|
|
|
|
9257
|
return obj;
|
|
|
|
|
9258
|
});
|
|
|
|
|
9259
|
|
|
9744
|
|
|
9260
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9745
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9261
|
// #
|
|
9746
|
// #
|
|
@@
-9276,22
+9761,18
b" aeconfig.factory('AeConfig', function () {"
|
|
9276
|
// # services, and proprietary license terms, please see
|
|
9761
|
// # services, and proprietary license terms, please see
|
|
9277
|
// # https://rhodecode.com/licenses/
|
|
9762
|
// # https://rhodecode.com/licenses/
|
|
9278
|
|
|
9763
|
|
|
9279
|
angular.module('appenlight.controllers').controller('AdminApplicationsListController', AdminApplicationsListController);
|
|
9764
|
angular.module('appenlight.components.settingsView', [])
|
|
9280
|
|
|
9765
|
.component('settingsView', {
|
|
9281
|
AdminApplicationsListController.$inject = ['applicationsResource'];
|
|
9766
|
templateUrl: 'components/views/settings-view/settings-view.html',
|
|
|
|
|
9767
|
controller: SettingsViewController
|
|
|
|
|
9768
|
});
|
|
9282
|
|
|
9769
|
|
|
9283
|
function AdminApplicationsListController(applicationsResource) {
|
|
9770
|
SettingsViewController.$inject = ['$state'];
|
|
9284
|
|
|
|
|
|
9285
|
var vm = this;
|
|
|
|
|
9286
|
vm.loading = {applications: true};
|
|
|
|
|
9287
|
|
|
9771
|
|
|
9288
|
vm.applications = applicationsResource.query({
|
|
9772
|
function SettingsViewController($state) {
|
|
9289
|
root_list: true,
|
|
9773
|
this.$state = $state;
|
|
9290
|
resource_type: 'application'
|
|
9774
|
console.info('SettingsViewController');
|
|
9291
|
}, function (data) {
|
|
9775
|
}
|
|
9292
|
vm.loading = {applications: false};
|
|
|
|
|
9293
|
});
|
|
|
|
|
9294
|
};
|
|
|
|
|
9295
|
|
|
9776
|
|
|
9296
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9777
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9297
|
// #
|
|
9778
|
// #
|
|
@@
-9312,44
+9793,37
b' function AdminApplicationsListController(applicationsResource) {'
|
|
9312
|
// # services, and proprietary license terms, please see
|
|
9793
|
// # services, and proprietary license terms, please see
|
|
9313
|
// # https://rhodecode.com/licenses/
|
|
9794
|
// # https://rhodecode.com/licenses/
|
|
9314
|
|
|
9795
|
|
|
9315
|
angular.module('appenlight.controllers').controller('ConfigsListController', ConfigsListController);
|
|
9796
|
angular.module('appenlight.components.userAlertChannelsEmailNewView', [])
|
|
|
|
|
9797
|
.component('userAlertChannelsEmailNewView', {
|
|
|
|
|
9798
|
templateUrl: 'components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
|
|
|
|
|
9799
|
controller: AlertChannelsEmailController
|
|
|
|
|
9800
|
});
|
|
9316
|
|
|
9801
|
|
|
9317
|
ConfigsListController.$inject = ['configsResource', 'configsNoIdResource'];
|
|
9802
|
AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
|
|
9318
|
|
|
9803
|
|
|
9319
|
function ConfigsListController(configsResource, configsNoIdResource) {
|
|
9804
|
function AlertChannelsEmailController($state, userSelfPropertyResource) {
|
|
|
|
|
9805
|
|
|
9320
|
var vm = this;
|
|
9806
|
var vm = this;
|
|
9321
|
vm.loading = {config: true};
|
|
9807
|
vm.$state = $state;
|
|
9322
|
|
|
9808
|
vm.loading = {email: false};
|
|
9323
|
var filters = [
|
|
9809
|
vm.form = {};
|
|
9324
|
'template_footer_html:global',
|
|
|
|
|
9325
|
'list_groups_to_non_admins:global',
|
|
|
|
|
9326
|
'per_application_reports_rate_limit:global',
|
|
|
|
|
9327
|
'per_application_logs_rate_limit:global',
|
|
|
|
|
9328
|
'per_application_metrics_rate_limit:global',
|
|
|
|
|
9329
|
];
|
|
|
|
|
9330
|
|
|
|
|
|
9331
|
vm.configs = {};
|
|
|
|
|
9332
|
|
|
|
|
|
9333
|
vm.configList = configsResource.query({filter: filters},
|
|
|
|
|
9334
|
function (data) {
|
|
|
|
|
9335
|
vm.loading = {config: false};
|
|
|
|
|
9336
|
_.each(data, function (item) {
|
|
|
|
|
9337
|
if (vm.configs[item.section] === undefined) {
|
|
|
|
|
9338
|
vm.configs[item.section] = {};
|
|
|
|
|
9339
|
}
|
|
|
|
|
9340
|
vm.configs[item.section][item.key] = item;
|
|
|
|
|
9341
|
});
|
|
|
|
|
9342
|
});
|
|
|
|
|
9343
|
|
|
9810
|
|
|
9344
|
vm.save = function () {
|
|
9811
|
vm.createChannel = function () {
|
|
9345
|
vm.loading.config = true;
|
|
9812
|
vm.loading.email = true;
|
|
9346
|
_.each(vm.configList, function (item) {
|
|
9813
|
|
|
9347
|
item.$save();
|
|
9814
|
userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
|
|
|
|
|
9815
|
//vm.loading.email = false;
|
|
|
|
|
9816
|
//setServerValidation(vm.channelForm);
|
|
|
|
|
9817
|
//vm.form = {};
|
|
|
|
|
9818
|
$state.go('user.alert_channels.list');
|
|
|
|
|
9819
|
}, function (response) {
|
|
|
|
|
9820
|
if (response.status == 422) {
|
|
|
|
|
9821
|
setServerValidation(vm.channelForm, response.data);
|
|
|
|
|
9822
|
}
|
|
|
|
|
9823
|
vm.loading.email = false;
|
|
9348
|
});
|
|
9824
|
});
|
|
9349
|
vm.loading.config = false;
|
|
9825
|
}
|
|
9350
|
};
|
|
9826
|
}
|
|
9351
|
|
|
|
|
|
9352
|
};
|
|
|
|
|
9353
|
|
|
9827
|
|
|
9354
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9828
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9355
|
// #
|
|
9829
|
// #
|
|
@@
-9370,128
+9844,122
b' function ConfigsListController(configsResource, configsNoIdResource) {'
|
|
9370
|
// # services, and proprietary license terms, please see
|
|
9844
|
// # services, and proprietary license terms, please see
|
|
9371
|
// # https://rhodecode.com/licenses/
|
|
9845
|
// # https://rhodecode.com/licenses/
|
|
9372
|
|
|
9846
|
|
|
9373
|
angular.module('appenlight.controllers').controller('AdminGroupsCreateController', AdminGroupsCreateController);
|
|
9847
|
angular.module('appenlight.components.userAlertChannelsListView', [])
|
|
|
|
|
9848
|
.component('userAlertChannelsListView', {
|
|
|
|
|
9849
|
templateUrl: 'components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
|
|
|
|
|
9850
|
controller: userAlertChannelsListViewController
|
|
|
|
|
9851
|
});
|
|
9374
|
|
|
9852
|
|
|
9375
|
AdminGroupsCreateController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource', 'AeConfig'];
|
|
9853
|
userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
|
|
9376
|
|
|
9854
|
|
|
9377
|
function AdminGroupsCreateController($state, groupsResource, groupsPropertyResource, sectionViewResource, AeConfig) {
|
|
9855
|
function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
|
|
9378
|
|
|
9856
|
|
|
9379
|
var vm = this;
|
|
9857
|
var vm = this;
|
|
9380
|
vm.loading = {
|
|
9858
|
vm.$state = $state;
|
|
9381
|
group: false,
|
|
9859
|
vm.loading = {channels: true, applications: true, actions:true};
|
|
9382
|
resource_permissions: false,
|
|
|
|
|
9383
|
users: false
|
|
|
|
|
9384
|
};
|
|
|
|
|
9385
|
|
|
9860
|
|
|
9386
|
vm.form = {
|
|
9861
|
vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
|
|
9387
|
autocompleteUser: '',
|
|
9862
|
function (data) {
|
|
9388
|
}
|
|
9863
|
vm.loading.channels = false;
|
|
|
|
|
9864
|
});
|
|
9389
|
|
|
9865
|
|
|
|
|
|
9866
|
vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
|
|
|
|
|
9867
|
function (data) {
|
|
|
|
|
9868
|
vm.loading.actions = false;
|
|
|
|
|
9869
|
});
|
|
9390
|
|
|
9870
|
|
|
9391
|
if (typeof $state.params.groupId !== 'undefined') {
|
|
9871
|
vm.applications = applicationsNoIdResource.query({permission: 'view'},
|
|
9392
|
vm.loading.group = true;
|
|
9872
|
function (data) {
|
|
9393
|
var groupId = $state.params.groupId;
|
|
9873
|
vm.loading.applications = false;
|
|
9394
|
vm.group = groupsResource.get({groupId: groupId}, function (data) {
|
|
|
|
|
9395
|
vm.loading.group = false;
|
|
|
|
|
9396
|
});
|
|
9874
|
});
|
|
9397
|
|
|
9875
|
|
|
9398
|
vm.resource_permissions = groupsPropertyResource.query(
|
|
9876
|
var allOps = {
|
|
9399
|
{groupId: groupId, key: 'resource_permissions'}, function (data) {
|
|
9877
|
'eq': 'Equal',
|
|
9400
|
vm.loading.resource_permissions = false;
|
|
9878
|
'ne': 'Not equal',
|
|
9401
|
var tmpObj = {
|
|
9879
|
'ge': 'Greater or equal',
|
|
9402
|
'group': {
|
|
9880
|
'gt': 'Greater than',
|
|
9403
|
'application': {},
|
|
9881
|
'le': 'Lesser or equal',
|
|
9404
|
'dashboard': {}
|
|
9882
|
'lt': 'Lesser than',
|
|
9405
|
}
|
|
9883
|
'startswith': 'Starts with',
|
|
9406
|
};
|
|
9884
|
'endswith': 'Ends with',
|
|
9407
|
_.each(data, function (item) {
|
|
9885
|
'contains': 'Contains'
|
|
9408
|
|
|
9886
|
};
|
|
9409
|
var section = tmpObj[item.type][item.resource_type];
|
|
|
|
|
9410
|
if (typeof section[item.resource_id] == 'undefined') {
|
|
|
|
|
9411
|
section[item.resource_id] = {
|
|
|
|
|
9412
|
self: item,
|
|
|
|
|
9413
|
permissions: []
|
|
|
|
|
9414
|
}
|
|
|
|
|
9415
|
}
|
|
|
|
|
9416
|
section[item.resource_id].permissions.push(item.perm_name);
|
|
|
|
|
9417
|
|
|
9887
|
|
|
9418
|
});
|
|
9888
|
var fieldOps = {};
|
|
9419
|
vm.resourcePermissions = tmpObj;
|
|
9889
|
fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
|
|
9420
|
});
|
|
9890
|
fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
|
|
|
|
|
9891
|
fieldOps['duration'] = ['ge', 'le'];
|
|
|
|
|
9892
|
fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
|
|
|
9893
|
'contains'];
|
|
|
|
|
9894
|
fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
|
|
|
9895
|
'contains'];
|
|
|
|
|
9896
|
fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
|
|
|
9897
|
'contains'];
|
|
|
|
|
9898
|
fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
|
|
|
|
|
9899
|
'contains'];
|
|
|
|
|
9900
|
fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
|
|
9421
|
|
|
9901
|
|
|
9422
|
vm.users = groupsPropertyResource.query(
|
|
9902
|
var possibleFields = {
|
|
9423
|
{groupId: groupId, key: 'users'}, function (data) {
|
|
9903
|
'__AND__': 'All met (composite rule)',
|
|
9424
|
vm.loading.users = false;
|
|
9904
|
'__OR__': 'One met (composite rule)',
|
|
9425
|
}, function () {
|
|
9905
|
'__NOT__': 'Not met (composite rule)',
|
|
9426
|
vm.loading.users = false;
|
|
9906
|
'http_status': 'HTTP Status',
|
|
9427
|
});
|
|
9907
|
'duration': 'Request duration',
|
|
|
|
|
9908
|
'group:priority': 'Group -> Priority',
|
|
|
|
|
9909
|
'url_domain': 'Domain',
|
|
|
|
|
9910
|
'url_path': 'URL Path',
|
|
|
|
|
9911
|
'error': 'Error',
|
|
|
|
|
9912
|
'tags:server_name': 'Tag -> Server name',
|
|
|
|
|
9913
|
'group:occurences': 'Group -> Occurences'
|
|
|
|
|
9914
|
};
|
|
9428
|
|
|
9915
|
|
|
9429
|
}
|
|
9916
|
vm.ruleDefinitions = {
|
|
9430
|
else {
|
|
9917
|
fieldOps: fieldOps,
|
|
9431
|
var groupId = null;
|
|
9918
|
allOps: allOps,
|
|
9432
|
}
|
|
9919
|
possibleFields: possibleFields
|
|
|
|
|
9920
|
};
|
|
9433
|
|
|
9921
|
|
|
9434
|
var formResponse = function (response) {
|
|
9922
|
vm.addAction = function (channel) {
|
|
9435
|
if (response.status === 422) {
|
|
9923
|
|
|
9436
|
setServerValidation(vm.groupForm, response.data);
|
|
9924
|
userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
|
|
9437
|
}
|
|
9925
|
vm.alertActions.push(data);
|
|
9438
|
vm.loading.group = false;
|
|
9926
|
}, function (response) {
|
|
|
|
|
9927
|
if (response.status == 422) {
|
|
|
|
|
9928
|
|
|
|
|
|
9929
|
}
|
|
|
|
|
9930
|
});
|
|
9439
|
};
|
|
9931
|
};
|
|
9440
|
|
|
9932
|
|
|
9441
|
vm.createGroup = function () {
|
|
9933
|
vm.updateChannel = function (channel, subKey) {
|
|
9442
|
vm.loading.group = true;
|
|
9934
|
var params = {
|
|
9443
|
if (groupId) {
|
|
9935
|
key: 'alert_channels',
|
|
9444
|
groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
|
|
9936
|
channel_name: channel['channel_name'],
|
|
9445
|
setServerValidation(vm.groupForm);
|
|
9937
|
channel_value: channel['channel_value']
|
|
9446
|
vm.loading.group = false;
|
|
9938
|
};
|
|
9447
|
}, formResponse);
|
|
9939
|
var toUpdate = {};
|
|
9448
|
}
|
|
9940
|
if (['daily_digest', 'send_alerts'].indexOf(subKey) !== -1) {
|
|
9449
|
else {
|
|
9941
|
toUpdate[subKey] = !channel[subKey];
|
|
9450
|
groupsResource.save(vm.group, function (data) {
|
|
|
|
|
9451
|
$state.go('admin.group.update', {groupId: data.id});
|
|
|
|
|
9452
|
}, formResponse);
|
|
|
|
|
9453
|
}
|
|
9942
|
}
|
|
|
|
|
9943
|
userSelfPropertyResource.update(params, toUpdate, function (data) {
|
|
|
|
|
9944
|
_.extend(channel, data);
|
|
|
|
|
9945
|
});
|
|
9454
|
};
|
|
9946
|
};
|
|
9455
|
|
|
9947
|
|
|
9456
|
vm.removeUser = function (user) {
|
|
9948
|
vm.removeChannel = function (channel) {
|
|
9457
|
groupsPropertyResource.delete(
|
|
9949
|
|
|
9458
|
{groupId: groupId, key: 'users', user_name: user.user_name},
|
|
9950
|
userSelfPropertyResource.delete({
|
|
9459
|
function (data) {
|
|
9951
|
key: 'alert_channels',
|
|
9460
|
vm.loading.users = false;
|
|
9952
|
channel_name: channel.channel_name,
|
|
9461
|
vm.users = _.filter(vm.users, function (item) {
|
|
9953
|
channel_value: channel.channel_value
|
|
9462
|
return item != user;
|
|
9954
|
}, function () {
|
|
9463
|
});
|
|
9955
|
vm.alertChannels = _.filter(vm.alertChannels, function(item){
|
|
9464
|
}, function () {
|
|
9956
|
return item != channel;
|
|
9465
|
vm.loading.users = false;
|
|
|
|
|
9466
|
});
|
|
9957
|
});
|
|
9467
|
};
|
|
9958
|
});
|
|
9468
|
|
|
9959
|
|
|
9469
|
vm.addUser = function () {
|
|
|
|
|
9470
|
groupsPropertyResource.save(
|
|
|
|
|
9471
|
{groupId: groupId, key: 'users'},
|
|
|
|
|
9472
|
{user_name: vm.form.autocompleteUser},
|
|
|
|
|
9473
|
function (data) {
|
|
|
|
|
9474
|
vm.loading.users = false;
|
|
|
|
|
9475
|
vm.users.push(data);
|
|
|
|
|
9476
|
vm.form.autocompleteUser = '';
|
|
|
|
|
9477
|
}, function () {
|
|
|
|
|
9478
|
vm.loading.users = false;
|
|
|
|
|
9479
|
});
|
|
|
|
|
9480
|
}
|
|
9960
|
}
|
|
9481
|
|
|
9961
|
|
|
9482
|
vm.searchUsers = function (searchPhrase) {
|
|
9962
|
}
|
|
9483
|
|
|
|
|
|
9484
|
return sectionViewResource.query({
|
|
|
|
|
9485
|
section: 'users_section',
|
|
|
|
|
9486
|
view: 'search_users',
|
|
|
|
|
9487
|
'user_name': searchPhrase
|
|
|
|
|
9488
|
}).$promise.then(function (data) {
|
|
|
|
|
9489
|
return _.map(data, function (item) {
|
|
|
|
|
9490
|
return item.user;
|
|
|
|
|
9491
|
});
|
|
|
|
|
9492
|
});
|
|
|
|
|
9493
|
}
|
|
|
|
|
9494
|
};
|
|
|
|
|
9495
|
|
|
9963
|
|
|
9496
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9964
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9497
|
// #
|
|
9965
|
// #
|
|
@@
-9512,40
+9980,57
b' function AdminGroupsCreateController($state, groupsResource, groupsPropertyResou'
|
|
9512
|
// # services, and proprietary license terms, please see
|
|
9980
|
// # services, and proprietary license terms, please see
|
|
9513
|
// # https://rhodecode.com/licenses/
|
|
9981
|
// # https://rhodecode.com/licenses/
|
|
9514
|
|
|
9982
|
|
|
9515
|
angular.module('appenlight.controllers').controller('AdminGroupsController', AdminGroupsController);
|
|
9983
|
angular.module('appenlight.components.userAuthTokensView', [])
|
|
|
|
|
9984
|
.component('userAuthTokensView', {
|
|
|
|
|
9985
|
templateUrl: 'components/views/user-auth-tokens-view/user-auth-tokens-view.html',
|
|
|
|
|
9986
|
controller: userAuthTokensViewController
|
|
|
|
|
9987
|
});
|
|
9516
|
|
|
9988
|
|
|
9517
|
AdminGroupsController.$inject = ['groupsResource'];
|
|
9989
|
userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
|
|
9518
|
|
|
9990
|
|
|
9519
|
function AdminGroupsController(groupsResource) {
|
|
9991
|
function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
|
|
9520
|
|
|
9992
|
|
|
9521
|
var vm = this;
|
|
9993
|
var vm = this;
|
|
9522
|
vm.loading = {groups: true};
|
|
9994
|
vm.$state = $state;
|
|
|
|
|
9995
|
vm.loading = {tokens: true};
|
|
9523
|
|
|
9996
|
|
|
9524
|
vm.groups = groupsResource.query({}, function (data) {
|
|
9997
|
vm.expireOptions = AeConfig.timeOptions;
|
|
9525
|
vm.loading = {groups: false};
|
|
|
|
|
9526
|
vm.activeUsers = _.reduce(vm.groups, function(memo, val){
|
|
|
|
|
9527
|
if (val.status == 1){
|
|
|
|
|
9528
|
return memo + 1;
|
|
|
|
|
9529
|
}
|
|
|
|
|
9530
|
return memo;
|
|
|
|
|
9531
|
}, 0);
|
|
|
|
|
9532
|
|
|
|
|
|
9533
|
});
|
|
|
|
|
9534
|
|
|
9998
|
|
|
|
|
|
9999
|
vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
|
|
|
|
|
10000
|
function (data) {
|
|
|
|
|
10001
|
vm.loading.tokens = false;
|
|
|
|
|
10002
|
});
|
|
9535
|
|
|
10003
|
|
|
9536
|
vm.removeGroup = function (group) {
|
|
10004
|
vm.addToken = function () {
|
|
9537
|
groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
|
|
10005
|
vm.loading.tokens = true;
|
|
9538
|
|
|
10006
|
userSelfPropertyResource.save({key: 'auth_tokens'},
|
|
9539
|
if (data) {
|
|
10007
|
vm.form,
|
|
9540
|
var index = vm.groups.indexOf(group);
|
|
10008
|
function (data) {
|
|
|
|
|
10009
|
vm.loading.tokens = false;
|
|
|
|
|
10010
|
setServerValidation(vm.TokenForm);
|
|
|
|
|
10011
|
vm.form = {};
|
|
|
|
|
10012
|
vm.tokens.push(data);
|
|
|
|
|
10013
|
}, function (response) {
|
|
|
|
|
10014
|
vm.loading.tokens = false;
|
|
|
|
|
10015
|
if (response.status == 422) {
|
|
|
|
|
10016
|
setServerValidation(vm.TokenForm, response.data);
|
|
|
|
|
10017
|
}
|
|
|
|
|
10018
|
})
|
|
|
|
|
10019
|
};
|
|
|
|
|
10020
|
|
|
|
|
|
10021
|
vm.removeToken = function (token) {
|
|
|
|
|
10022
|
userSelfPropertyResource.delete({
|
|
|
|
|
10023
|
key: 'auth_tokens',
|
|
|
|
|
10024
|
token: token.token
|
|
|
|
|
10025
|
},
|
|
|
|
|
10026
|
function () {
|
|
|
|
|
10027
|
var index = vm.tokens.indexOf(token);
|
|
9541
|
if (index !== -1) {
|
|
10028
|
if (index !== -1) {
|
|
9542
|
vm.groups.splice(index, 1);
|
|
10029
|
vm.tokens.splice(index, 1);
|
|
9543
|
vm.activeGroups -= 1;
|
|
|
|
|
9544
|
}
|
|
10030
|
}
|
|
9545
|
}
|
|
10031
|
})
|
|
9546
|
});
|
|
|
|
|
9547
|
}
|
|
10032
|
}
|
|
9548
|
};
|
|
10033
|
}
|
|
9549
|
|
|
10034
|
|
|
9550
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10035
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9551
|
// #
|
|
10036
|
// #
|
|
@@
-9566,110
+10051,97
b' function AdminGroupsController(groupsResource) {'
|
|
9566
|
// # services, and proprietary license terms, please see
|
|
10051
|
// # services, and proprietary license terms, please see
|
|
9567
|
// # https://rhodecode.com/licenses/
|
|
10052
|
// # https://rhodecode.com/licenses/
|
|
9568
|
|
|
10053
|
|
|
9569
|
angular.module('appenlight.controllers').controller('AdminPartitionsController', AdminPartitionsController);
|
|
10054
|
angular.module('appenlight.components.userIdentitiesView', [])
|
|
|
|
|
10055
|
.component('userIdentitiesView', {
|
|
|
|
|
10056
|
templateUrl: 'components/views/user-identities-view/user-identities-view.html',
|
|
|
|
|
10057
|
controller: UserIdentitiesController
|
|
|
|
|
10058
|
});
|
|
9570
|
|
|
10059
|
|
|
9571
|
AdminPartitionsController.$inject = ['sectionViewResource'];
|
|
10060
|
UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
|
|
9572
|
|
|
10061
|
|
|
9573
|
function AdminPartitionsController(sectionViewResource) {
|
|
10062
|
function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
|
|
|
|
|
10063
|
|
|
9574
|
var vm = this;
|
|
10064
|
var vm = this;
|
|
9575
|
vm.permanentPartitions = [];
|
|
10065
|
vm.$state = $state;
|
|
9576
|
vm.dailyPartitions = [];
|
|
10066
|
vm.AeConfig = AeConfig;
|
|
9577
|
vm.loading = {partitions: true};
|
|
10067
|
vm.loading = {identities: true};
|
|
9578
|
vm.dailyChecked = false;
|
|
|
|
|
9579
|
vm.permChecked = false;
|
|
|
|
|
9580
|
vm.dailyConfirm = '';
|
|
|
|
|
9581
|
vm.permConfirm = '';
|
|
|
|
|
9582
|
|
|
|
|
|
9583
|
|
|
|
|
|
9584
|
vm.loadPartitions = function (data) {
|
|
|
|
|
9585
|
var permanentPartitions = vm.transformPartitionList(
|
|
|
|
|
9586
|
data.permanent_partitions);
|
|
|
|
|
9587
|
var dailyPartitions = vm.transformPartitionList(
|
|
|
|
|
9588
|
data.daily_partitions);
|
|
|
|
|
9589
|
vm.permanentPartitions = permanentPartitions;
|
|
|
|
|
9590
|
vm.dailyPartitions = dailyPartitions;
|
|
|
|
|
9591
|
vm.loading = {partitions: false};
|
|
|
|
|
9592
|
};
|
|
|
|
|
9593
|
|
|
|
|
|
9594
|
vm.setCheckedList = function (scope) {
|
|
|
|
|
9595
|
var toTest = null;
|
|
|
|
|
9596
|
if (scope === 'dailyPartitions'){
|
|
|
|
|
9597
|
toTest = 'dailyChecked';
|
|
|
|
|
9598
|
}
|
|
|
|
|
9599
|
else{
|
|
|
|
|
9600
|
toTest = 'permChecked';
|
|
|
|
|
9601
|
}
|
|
|
|
|
9602
|
|
|
10068
|
|
|
9603
|
if (vm[toTest]) {
|
|
10069
|
vm.identities = userSelfPropertyResource.query(
|
|
9604
|
var val = true;
|
|
10070
|
{key: 'external_identities'},
|
|
9605
|
}
|
|
10071
|
function (data) {
|
|
9606
|
else {
|
|
10072
|
vm.loading.identities = false;
|
|
9607
|
var val = false;
|
|
10073
|
|
|
9608
|
}
|
|
|
|
|
9609
|
|
|
|
|
|
9610
|
_.each(vm[scope], function (item) {
|
|
|
|
|
9611
|
_.each(item[1].pg, function (index) {
|
|
|
|
|
9612
|
index.checked = val;
|
|
|
|
|
9613
|
});
|
|
|
|
|
9614
|
_.each(item[1].elasticsearch, function (index) {
|
|
|
|
|
9615
|
index.checked = val;
|
|
|
|
|
9616
|
});
|
|
|
|
|
9617
|
});
|
|
10074
|
});
|
|
9618
|
}
|
|
|
|
|
9619
|
|
|
|
|
|
9620
|
|
|
10075
|
|
|
9621
|
vm.transformPartitionList = function (inputList) {
|
|
10076
|
vm.removeProvider = function (provider) {
|
|
9622
|
var outputList = [];
|
|
10077
|
|
|
|
|
|
10078
|
userSelfPropertyResource.delete(
|
|
|
|
|
10079
|
{
|
|
|
|
|
10080
|
key: 'external_identities',
|
|
|
|
|
10081
|
provider: provider.provider,
|
|
|
|
|
10082
|
id: provider.id
|
|
|
|
|
10083
|
},
|
|
|
|
|
10084
|
function (status) {
|
|
|
|
|
10085
|
if (status){
|
|
|
|
|
10086
|
vm.identities = _.filter(vm.identities, function (item) {
|
|
|
|
|
10087
|
return item != provider
|
|
|
|
|
10088
|
});
|
|
|
|
|
10089
|
}
|
|
9623
|
|
|
10090
|
|
|
9624
|
_.each(inputList, function (item) {
|
|
|
|
|
9625
|
var time = [item[0], {
|
|
|
|
|
9626
|
elasticsearch: [],
|
|
|
|
|
9627
|
pg: []
|
|
|
|
|
9628
|
}]
|
|
|
|
|
9629
|
_.each(item[1].pg, function (index) {
|
|
|
|
|
9630
|
time[1].pg.push({name: index, checked: false})
|
|
|
|
|
9631
|
});
|
|
|
|
|
9632
|
_.each(item[1].elasticsearch, function (index) {
|
|
|
|
|
9633
|
time[1].elasticsearch.push({
|
|
|
|
|
9634
|
name: index,
|
|
|
|
|
9635
|
checked: false
|
|
|
|
|
9636
|
})
|
|
|
|
|
9637
|
});
|
|
10091
|
});
|
|
9638
|
outputList.push(time);
|
|
10092
|
}
|
|
9639
|
});
|
|
10093
|
}
|
|
9640
|
return outputList;
|
|
|
|
|
9641
|
};
|
|
|
|
|
9642
|
|
|
|
|
|
9643
|
sectionViewResource.get({section:'admin_section', view: 'partitions'},
|
|
|
|
|
9644
|
vm.loadPartitions);
|
|
|
|
|
9645
|
|
|
10094
|
|
|
9646
|
vm.partitionsDelete = function (partitionType) {
|
|
10095
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9647
|
var es_indices = [];
|
|
10096
|
// #
|
|
9648
|
var pg_indices = [];
|
|
10097
|
// # This program is free software: you can redistribute it and/or modify
|
|
9649
|
_.each(vm[partitionType], function (item) {
|
|
10098
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
9650
|
_.each(item[1].pg, function (index) {
|
|
10099
|
// # (only), as published by the Free Software Foundation.
|
|
9651
|
if (index.checked) {
|
|
10100
|
// #
|
|
9652
|
pg_indices.push(index.name)
|
|
10101
|
// # This program is distributed in the hope that it will be useful,
|
|
9653
|
}
|
|
10102
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
9654
|
});
|
|
10103
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
9655
|
_.each(item[1].elasticsearch, function (index) {
|
|
10104
|
// # GNU General Public License for more details.
|
|
9656
|
if (index.checked) {
|
|
10105
|
// #
|
|
9657
|
es_indices.push(index.name)
|
|
10106
|
// # You should have received a copy of the GNU Affero General Public License
|
|
9658
|
}
|
|
10107
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
9659
|
});
|
|
10108
|
// #
|
|
9660
|
});
|
|
10109
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
9661
|
|
|
10110
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
10111
|
// # services, and proprietary license terms, please see
|
|
|
|
|
10112
|
// # https://rhodecode.com/licenses/
|
|
9662
|
|
|
10113
|
|
|
9663
|
vm.loading = {partitions: true};
|
|
10114
|
angular.module('appenlight.components.userPasswordView', [])
|
|
9664
|
sectionViewResource.save({section:'admin_section',
|
|
10115
|
.component('userPasswordView', {
|
|
9665
|
view: 'partitions_remove'}, {
|
|
10116
|
templateUrl: 'components/views/user-password-view/user-password-view.html',
|
|
9666
|
es_indices: es_indices,
|
|
10117
|
controller: UserPasswordViewController
|
|
9667
|
pg_indices: pg_indices,
|
|
10118
|
});
|
|
9668
|
confirm: 'CONFIRM'
|
|
|
|
|
9669
|
}, vm.loadPartitions);
|
|
|
|
|
9670
|
|
|
10119
|
|
|
9671
|
}
|
|
10120
|
UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
|
|
|
|
|
10121
|
|
|
|
|
|
10122
|
function UserPasswordViewController($state, userSelfPropertyResource) {
|
|
|
|
|
10123
|
|
|
|
|
|
10124
|
var vm = this;
|
|
|
|
|
10125
|
vm.$state = $state;
|
|
|
|
|
10126
|
vm.loading = {password: false};
|
|
|
|
|
10127
|
vm.form = {};
|
|
9672
|
|
|
10128
|
|
|
|
|
|
10129
|
vm.updatePassword = function () {
|
|
|
|
|
10130
|
vm.loading.password = true;
|
|
|
|
|
10131
|
|
|
|
|
|
10132
|
userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
|
|
|
|
|
10133
|
vm.loading.password = false;
|
|
|
|
|
10134
|
vm.form = {};
|
|
|
|
|
10135
|
setServerValidation(vm.passwordForm);
|
|
|
|
|
10136
|
}, function (response) {
|
|
|
|
|
10137
|
if (response.status == 422) {
|
|
|
|
|
10138
|
|
|
|
|
|
10139
|
setServerValidation(vm.passwordForm, response.data);
|
|
|
|
|
10140
|
|
|
|
|
|
10141
|
}
|
|
|
|
|
10142
|
vm.loading.password = false;
|
|
|
|
|
10143
|
});
|
|
|
|
|
10144
|
}
|
|
9673
|
}
|
|
10145
|
}
|
|
9674
|
|
|
10146
|
|
|
9675
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10147
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
@@
-9691,31
+10163,40
b' function AdminPartitionsController(sectionViewResource) {'
|
|
9691
|
// # services, and proprietary license terms, please see
|
|
10163
|
// # services, and proprietary license terms, please see
|
|
9692
|
// # https://rhodecode.com/licenses/
|
|
10164
|
// # https://rhodecode.com/licenses/
|
|
9693
|
|
|
10165
|
|
|
9694
|
angular.module('appenlight.controllers').controller('AdminSystemController', AdminSystemController);
|
|
10166
|
angular.module('appenlight.components.userProfileView', [])
|
|
|
|
|
10167
|
.component('userProfileView', {
|
|
|
|
|
10168
|
templateUrl: 'components/views/user-profile-view/user-profile-view.html',
|
|
|
|
|
10169
|
controller: UserProfileViewController
|
|
|
|
|
10170
|
});
|
|
9695
|
|
|
10171
|
|
|
9696
|
AdminSystemController.$inject = ['sectionViewResource'];
|
|
10172
|
UserProfileViewController.$inject = ['$state', 'userSelfResource'];
|
|
9697
|
|
|
10173
|
|
|
9698
|
function AdminSystemController(sectionViewResource) {
|
|
10174
|
function UserProfileViewController($state, userSelfResource) {
|
|
|
|
|
10175
|
|
|
9699
|
var vm = this;
|
|
10176
|
var vm = this;
|
|
9700
|
vm.tables = [];
|
|
10177
|
vm.$state = $state;
|
|
9701
|
vm.loading = {system: true};
|
|
10178
|
vm.loading = {profile: true};
|
|
9702
|
sectionViewResource.get({
|
|
|
|
|
9703
|
section: 'admin_section',
|
|
|
|
|
9704
|
view: 'system'
|
|
|
|
|
9705
|
}, null, function (data) {
|
|
|
|
|
9706
|
vm.DBtables = data.db_tables;
|
|
|
|
|
9707
|
vm.ESIndices = data.es_indices;
|
|
|
|
|
9708
|
vm.queueStats = data.queue_stats;
|
|
|
|
|
9709
|
vm.systemLoad = data.system_load;
|
|
|
|
|
9710
|
vm.packages = data.packages;
|
|
|
|
|
9711
|
vm.processInfo = data.process_info;
|
|
|
|
|
9712
|
vm.disks = data.disks;
|
|
|
|
|
9713
|
vm.memory = data.memory;
|
|
|
|
|
9714
|
vm.selfInfo = data.self_info;
|
|
|
|
|
9715
|
|
|
10179
|
|
|
9716
|
vm.loading.system = false;
|
|
10180
|
vm.user = userSelfResource.get(null, function (data) {
|
|
|
|
|
10181
|
vm.loading.profile = false;
|
|
|
|
|
10182
|
|
|
9717
|
});
|
|
10183
|
});
|
|
9718
|
};
|
|
10184
|
|
|
|
|
|
10185
|
vm.updateProfile = function () {
|
|
|
|
|
10186
|
vm.loading.profile = true;
|
|
|
|
|
10187
|
|
|
|
|
|
10188
|
|
|
|
|
|
10189
|
vm.user.$update(null, function () {
|
|
|
|
|
10190
|
vm.loading.profile = false;
|
|
|
|
|
10191
|
setServerValidation(vm.profileForm);
|
|
|
|
|
10192
|
}, function (response) {
|
|
|
|
|
10193
|
if (response.status == 422) {
|
|
|
|
|
10194
|
setServerValidation(vm.profileForm, response.data);
|
|
|
|
|
10195
|
}
|
|
|
|
|
10196
|
vm.loading.profile = false;
|
|
|
|
|
10197
|
});
|
|
|
|
|
10198
|
}
|
|
|
|
|
10199
|
}
|
|
9719
|
|
|
10200
|
|
|
9720
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10201
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9721
|
// #
|
|
10202
|
// #
|
|
@@
-9736,106
+10217,57
b' function AdminSystemController(sectionViewResource) {'
|
|
9736
|
// # services, and proprietary license terms, please see
|
|
10217
|
// # services, and proprietary license terms, please see
|
|
9737
|
// # https://rhodecode.com/licenses/
|
|
10218
|
// # https://rhodecode.com/licenses/
|
|
9738
|
|
|
10219
|
|
|
9739
|
angular.module('appenlight.controllers').controller('AdminUsersCreateController', AdminUsersCreateController);
|
|
10220
|
var aeconfig = angular.module('appenlight.config', []);
|
|
9740
|
|
|
10221
|
aeconfig.factory('AeConfig', function () {
|
|
9741
|
AdminUsersCreateController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
|
|
10222
|
var obj = {};
|
|
9742
|
|
|
10223
|
obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
|
|
9743
|
function AdminUsersCreateController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
|
|
10224
|
obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
|
|
9744
|
|
|
10225
|
obj.plugins = decodeEncodedJSON(window.AE.plugins);
|
|
9745
|
var vm = this;
|
|
10226
|
obj.topNav = decodeEncodedJSON(window.AE.topNav);
|
|
9746
|
vm.loading = {user: false};
|
|
10227
|
obj.ws_url = window.AE.ws_url;
|
|
9747
|
|
|
10228
|
obj.urls = window.AE.urls;
|
|
9748
|
|
|
10229
|
// set keys on values because we wont be able to retrieve them everywhere
|
|
9749
|
if (typeof $state.params.userId !== 'undefined') {
|
|
10230
|
for (var key in obj.timeOptions) {
|
|
9750
|
vm.loading.user = true;
|
|
10231
|
obj.timeOptions[key]['key'] = key;
|
|
9751
|
var userId = $state.params.userId;
|
|
|
|
|
9752
|
vm.user = usersResource.get({userId: userId}, function (data) {
|
|
|
|
|
9753
|
vm.loading.user = false;
|
|
|
|
|
9754
|
// cast to true for angular checkbox
|
|
|
|
|
9755
|
if (vm.user.status === 1) {
|
|
|
|
|
9756
|
vm.user.status = true;
|
|
|
|
|
9757
|
}
|
|
|
|
|
9758
|
});
|
|
|
|
|
9759
|
|
|
|
|
|
9760
|
vm.resource_permissions = usersPropertyResource.query(
|
|
|
|
|
9761
|
{userId: userId, key: 'resource_permissions'}, function (data) {
|
|
|
|
|
9762
|
vm.loading.resource_permissions = false;
|
|
|
|
|
9763
|
var tmpObj = {
|
|
|
|
|
9764
|
'user': {
|
|
|
|
|
9765
|
'application': {},
|
|
|
|
|
9766
|
'dashboard': {}
|
|
|
|
|
9767
|
},
|
|
|
|
|
9768
|
'group': {
|
|
|
|
|
9769
|
'application': {},
|
|
|
|
|
9770
|
'dashboard': {}
|
|
|
|
|
9771
|
}
|
|
|
|
|
9772
|
};
|
|
|
|
|
9773
|
_.each(data, function (item) {
|
|
|
|
|
9774
|
|
|
|
|
|
9775
|
var section = tmpObj[item.type][item.resource_type];
|
|
|
|
|
9776
|
if (typeof section[item.resource_id] == 'undefined'){
|
|
|
|
|
9777
|
section[item.resource_id] = {
|
|
|
|
|
9778
|
self:item,
|
|
|
|
|
9779
|
permissions: []
|
|
|
|
|
9780
|
}
|
|
|
|
|
9781
|
}
|
|
|
|
|
9782
|
section[item.resource_id].permissions.push(item.perm_name);
|
|
|
|
|
9783
|
|
|
|
|
|
9784
|
});
|
|
|
|
|
9785
|
vm.resourcePermissions = tmpObj;
|
|
|
|
|
9786
|
});
|
|
|
|
|
9787
|
|
|
|
|
|
9788
|
}
|
|
|
|
|
9789
|
else {
|
|
|
|
|
9790
|
var userId = null;
|
|
|
|
|
9791
|
vm.user = {
|
|
|
|
|
9792
|
status: true
|
|
|
|
|
9793
|
}
|
|
|
|
|
9794
|
}
|
|
10232
|
}
|
|
|
|
|
10233
|
console.info('config', obj);
|
|
|
|
|
10234
|
return obj;
|
|
|
|
|
10235
|
});
|
|
9795
|
|
|
10236
|
|
|
9796
|
var formResponse = function (response) {
|
|
10237
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9797
|
if (response.status == 422) {
|
|
10238
|
// #
|
|
9798
|
setServerValidation(vm.profileForm, response.data);
|
|
10239
|
// # This program is free software: you can redistribute it and/or modify
|
|
9799
|
}
|
|
10240
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
9800
|
vm.loading.user = false;
|
|
10241
|
// # (only), as published by the Free Software Foundation.
|
|
9801
|
}
|
|
10242
|
// #
|
|
|
|
|
10243
|
// # This program is distributed in the hope that it will be useful,
|
|
|
|
|
10244
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
10245
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
10246
|
// # GNU General Public License for more details.
|
|
|
|
|
10247
|
// #
|
|
|
|
|
10248
|
// # You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
10249
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
10250
|
// #
|
|
|
|
|
10251
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
10252
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
10253
|
// # services, and proprietary license terms, please see
|
|
|
|
|
10254
|
// # https://rhodecode.com/licenses/
|
|
9802
|
|
|
10255
|
|
|
9803
|
vm.createUser = function () {
|
|
10256
|
angular.module('appenlight.controllers').controller('AdminApplicationsListController', AdminApplicationsListController);
|
|
9804
|
vm.loading.user = true;
|
|
|
|
|
9805
|
|
|
|
|
|
9806
|
if (userId) {
|
|
|
|
|
9807
|
usersResource.update({userId: vm.user.id}, vm.user, function (data) {
|
|
|
|
|
9808
|
setServerValidation(vm.profileForm);
|
|
|
|
|
9809
|
vm.loading.user = false;
|
|
|
|
|
9810
|
}, formResponse);
|
|
|
|
|
9811
|
}
|
|
|
|
|
9812
|
else {
|
|
|
|
|
9813
|
usersResource.save(vm.user, function (data) {
|
|
|
|
|
9814
|
$state.go('admin.user.update', {userId: data.id});
|
|
|
|
|
9815
|
}, formResponse);
|
|
|
|
|
9816
|
}
|
|
|
|
|
9817
|
}
|
|
|
|
|
9818
|
|
|
10257
|
|
|
9819
|
vm.generatePassword = function () {
|
|
10258
|
AdminApplicationsListController.$inject = ['applicationsResource'];
|
|
9820
|
var length = 8;
|
|
|
|
|
9821
|
var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
|
|
|
9822
|
vm.gen_pass = "";
|
|
|
|
|
9823
|
for (var i = 0, n = charset.length; i < length; ++i) {
|
|
|
|
|
9824
|
vm.gen_pass += charset.charAt(Math.floor(Math.random() * n));
|
|
|
|
|
9825
|
}
|
|
|
|
|
9826
|
vm.user.user_password = '' + vm.gen_pass;
|
|
|
|
|
9827
|
|
|
|
|
|
9828
|
}
|
|
|
|
|
9829
|
|
|
10259
|
|
|
9830
|
vm.reloginUser = function () {
|
|
10260
|
function AdminApplicationsListController(applicationsResource) {
|
|
9831
|
sectionViewResource.get({
|
|
10261
|
|
|
9832
|
section: 'admin_section', view: 'relogin_user',
|
|
10262
|
var vm = this;
|
|
9833
|
user_id: vm.user.id
|
|
10263
|
vm.loading = {applications: true};
|
|
9834
|
}, function () {
|
|
|
|
|
9835
|
window.location = AeConfig.urls.baseUrl;
|
|
|
|
|
9836
|
});
|
|
|
|
|
9837
|
|
|
10264
|
|
|
9838
|
}
|
|
10265
|
vm.applications = applicationsResource.query({
|
|
|
|
|
10266
|
root_list: true,
|
|
|
|
|
10267
|
resource_type: 'application'
|
|
|
|
|
10268
|
}, function (data) {
|
|
|
|
|
10269
|
vm.loading = {applications: false};
|
|
|
|
|
10270
|
});
|
|
9839
|
};
|
|
10271
|
};
|
|
9840
|
|
|
10272
|
|
|
9841
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10273
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
@@
-9857,39
+10289,43
b' function AdminUsersCreateController($state, usersResource, usersPropertyResource'
|
|
9857
|
// # services, and proprietary license terms, please see
|
|
10289
|
// # services, and proprietary license terms, please see
|
|
9858
|
// # https://rhodecode.com/licenses/
|
|
10290
|
// # https://rhodecode.com/licenses/
|
|
9859
|
|
|
10291
|
|
|
9860
|
angular.module('appenlight.controllers').controller('AdminUsersController', AdminUsersController);
|
|
10292
|
angular.module('appenlight.controllers').controller('ConfigsListController', ConfigsListController);
|
|
9861
|
|
|
10293
|
|
|
9862
|
AdminUsersController.$inject = ['usersResource'];
|
|
10294
|
ConfigsListController.$inject = ['configsResource', 'configsNoIdResource'];
|
|
9863
|
|
|
10295
|
|
|
9864
|
function AdminUsersController(usersResource) {
|
|
10296
|
function ConfigsListController(configsResource, configsNoIdResource) {
|
|
9865
|
|
|
|
|
|
9866
|
var vm = this;
|
|
10297
|
var vm = this;
|
|
9867
|
vm.loading = {users: true};
|
|
10298
|
vm.loading = {config: true};
|
|
9868
|
|
|
10299
|
|
|
9869
|
vm.users = usersResource.query({}, function (data) {
|
|
10300
|
var filters = [
|
|
9870
|
vm.loading = {users: false};
|
|
10301
|
'template_footer_html:global',
|
|
9871
|
vm.activeUsers = _.reduce(vm.users, function(memo, val){
|
|
10302
|
'list_groups_to_non_admins:global',
|
|
9872
|
if (val.status == 1){
|
|
10303
|
'per_application_reports_rate_limit:global',
|
|
9873
|
return memo + 1;
|
|
10304
|
'per_application_logs_rate_limit:global',
|
|
9874
|
}
|
|
10305
|
'per_application_metrics_rate_limit:global',
|
|
9875
|
return memo;
|
|
10306
|
];
|
|
9876
|
}, 0);
|
|
|
|
|
9877
|
|
|
|
|
|
9878
|
});
|
|
|
|
|
9879
|
|
|
10307
|
|
|
|
|
|
10308
|
vm.configs = {};
|
|
9880
|
|
|
10309
|
|
|
9881
|
vm.removeUser = function (user) {
|
|
10310
|
vm.configList = configsResource.query({filter: filters},
|
|
9882
|
usersResource.remove({userId: user.id}, function (data, responseHeaders) {
|
|
10311
|
function (data) {
|
|
9883
|
|
|
10312
|
vm.loading = {config: false};
|
|
9884
|
if (data) {
|
|
10313
|
_.each(data, function (item) {
|
|
9885
|
var index = vm.users.indexOf(user);
|
|
10314
|
if (vm.configs[item.section] === undefined) {
|
|
9886
|
if (index !== -1) {
|
|
10315
|
vm.configs[item.section] = {};
|
|
9887
|
vm.users.splice(index, 1);
|
|
|
|
|
9888
|
vm.activeUsers -= 1;
|
|
|
|
|
9889
|
}
|
|
10316
|
}
|
|
9890
|
}
|
|
10317
|
vm.configs[item.section][item.key] = item;
|
|
|
|
|
10318
|
});
|
|
9891
|
});
|
|
10319
|
});
|
|
9892
|
}
|
|
10320
|
|
|
|
|
|
10321
|
vm.save = function () {
|
|
|
|
|
10322
|
vm.loading.config = true;
|
|
|
|
|
10323
|
_.each(vm.configList, function (item) {
|
|
|
|
|
10324
|
item.$save();
|
|
|
|
|
10325
|
});
|
|
|
|
|
10326
|
vm.loading.config = false;
|
|
|
|
|
10327
|
};
|
|
|
|
|
10328
|
|
|
9893
|
};
|
|
10329
|
};
|
|
9894
|
|
|
10330
|
|
|
9895
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10331
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
@@
-9911,80
+10347,128
b' function AdminUsersController(usersResource) {'
|
|
9911
|
// # services, and proprietary license terms, please see
|
|
10347
|
// # services, and proprietary license terms, please see
|
|
9912
|
// # https://rhodecode.com/licenses/
|
|
10348
|
// # https://rhodecode.com/licenses/
|
|
9913
|
|
|
10349
|
|
|
9914
|
angular.module('appenlight.controllers')
|
|
10350
|
angular.module('appenlight.controllers').controller('AdminGroupsCreateController', AdminGroupsCreateController);
|
|
9915
|
.controller('BitbucketIntegrationCtrl', BitbucketIntegrationCtrl)
|
|
|
|
|
9916
|
|
|
10351
|
|
|
9917
|
BitbucketIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
|
|
10352
|
AdminGroupsCreateController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource', 'AeConfig'];
|
|
9918
|
|
|
10353
|
|
|
9919
|
function BitbucketIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
|
|
10354
|
function AdminGroupsCreateController($state, groupsResource, groupsPropertyResource, sectionViewResource, AeConfig) {
|
|
|
|
|
10355
|
|
|
9920
|
var vm = this;
|
|
10356
|
var vm = this;
|
|
9921
|
vm.loading = true;
|
|
10357
|
vm.loading = {
|
|
9922
|
vm.assignees = [];
|
|
10358
|
group: false,
|
|
9923
|
vm.report = report;
|
|
10359
|
resource_permissions: false,
|
|
9924
|
vm.integrationName = integrationName;
|
|
10360
|
users: false
|
|
9925
|
vm.statuses = [];
|
|
10361
|
};
|
|
9926
|
vm.priorities = [];
|
|
10362
|
|
|
9927
|
vm.error_messages = [];
|
|
|
|
|
9928
|
vm.form = {
|
|
10363
|
vm.form = {
|
|
9929
|
content: '\n' +
|
|
10364
|
autocompleteUser: '',
|
|
9930
|
'Issue created for report: ' +
|
|
10365
|
}
|
|
9931
|
$state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
|
|
10366
|
|
|
|
|
|
10367
|
|
|
|
|
|
10368
|
if (typeof $state.params.groupId !== 'undefined') {
|
|
|
|
|
10369
|
vm.loading.group = true;
|
|
|
|
|
10370
|
var groupId = $state.params.groupId;
|
|
|
|
|
10371
|
vm.group = groupsResource.get({groupId: groupId}, function (data) {
|
|
|
|
|
10372
|
vm.loading.group = false;
|
|
|
|
|
10373
|
});
|
|
|
|
|
10374
|
|
|
|
|
|
10375
|
vm.resource_permissions = groupsPropertyResource.query(
|
|
|
|
|
10376
|
{groupId: groupId, key: 'resource_permissions'}, function (data) {
|
|
|
|
|
10377
|
vm.loading.resource_permissions = false;
|
|
|
|
|
10378
|
var tmpObj = {
|
|
|
|
|
10379
|
'group': {
|
|
|
|
|
10380
|
'application': {},
|
|
|
|
|
10381
|
'dashboard': {}
|
|
|
|
|
10382
|
}
|
|
|
|
|
10383
|
};
|
|
|
|
|
10384
|
_.each(data, function (item) {
|
|
|
|
|
10385
|
|
|
|
|
|
10386
|
var section = tmpObj[item.type][item.resource_type];
|
|
|
|
|
10387
|
if (typeof section[item.resource_id] == 'undefined') {
|
|
|
|
|
10388
|
section[item.resource_id] = {
|
|
|
|
|
10389
|
self: item,
|
|
|
|
|
10390
|
permissions: []
|
|
|
|
|
10391
|
}
|
|
|
|
|
10392
|
}
|
|
|
|
|
10393
|
section[item.resource_id].permissions.push(item.perm_name);
|
|
|
|
|
10394
|
|
|
|
|
|
10395
|
});
|
|
|
|
|
10396
|
vm.resourcePermissions = tmpObj;
|
|
|
|
|
10397
|
});
|
|
|
|
|
10398
|
|
|
|
|
|
10399
|
vm.users = groupsPropertyResource.query(
|
|
|
|
|
10400
|
{groupId: groupId, key: 'users'}, function (data) {
|
|
|
|
|
10401
|
vm.loading.users = false;
|
|
|
|
|
10402
|
}, function () {
|
|
|
|
|
10403
|
vm.loading.users = false;
|
|
|
|
|
10404
|
});
|
|
|
|
|
10405
|
|
|
|
|
|
10406
|
}
|
|
|
|
|
10407
|
else {
|
|
|
|
|
10408
|
var groupId = null;
|
|
|
|
|
10409
|
}
|
|
|
|
|
10410
|
|
|
|
|
|
10411
|
var formResponse = function (response) {
|
|
|
|
|
10412
|
if (response.status === 422) {
|
|
|
|
|
10413
|
setServerValidation(vm.groupForm, response.data);
|
|
|
|
|
10414
|
}
|
|
|
|
|
10415
|
vm.loading.group = false;
|
|
9932
|
};
|
|
10416
|
};
|
|
9933
|
|
|
10417
|
|
|
9934
|
vm.fetchInfo = function () {
|
|
10418
|
vm.createGroup = function () {
|
|
9935
|
integrationResource.get({
|
|
10419
|
vm.loading.group = true;
|
|
9936
|
resourceId: vm.report.resource_id,
|
|
10420
|
if (groupId) {
|
|
9937
|
action: 'info',
|
|
10421
|
groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
|
|
9938
|
integration: vm.integrationName
|
|
10422
|
setServerValidation(vm.groupForm);
|
|
9939
|
}, null,
|
|
10423
|
vm.loading.group = false;
|
|
|
|
|
10424
|
}, formResponse);
|
|
|
|
|
10425
|
}
|
|
|
|
|
10426
|
else {
|
|
|
|
|
10427
|
groupsResource.save(vm.group, function (data) {
|
|
|
|
|
10428
|
$state.go('admin.group.update', {groupId: data.id});
|
|
|
|
|
10429
|
}, formResponse);
|
|
|
|
|
10430
|
}
|
|
|
|
|
10431
|
};
|
|
|
|
|
10432
|
|
|
|
|
|
10433
|
vm.removeUser = function (user) {
|
|
|
|
|
10434
|
groupsPropertyResource.delete(
|
|
|
|
|
10435
|
{groupId: groupId, key: 'users', user_name: user.user_name},
|
|
9940
|
function (data) {
|
|
10436
|
function (data) {
|
|
9941
|
vm.loading = false;
|
|
10437
|
vm.loading.users = false;
|
|
9942
|
if (data.error_messages) {
|
|
10438
|
vm.users = _.filter(vm.users, function (item) {
|
|
9943
|
vm.error_messages = data.error_messages;
|
|
10439
|
return item != user;
|
|
9944
|
}
|
|
10440
|
});
|
|
9945
|
vm.assignees = data.assignees;
|
|
10441
|
}, function () {
|
|
9946
|
vm.priorities = data.priorities;
|
|
10442
|
vm.loading.users = false;
|
|
9947
|
vm.form.responsible = vm.assignees[0];
|
|
|
|
|
9948
|
vm.form.priority = vm.priorities[0];
|
|
|
|
|
9949
|
}, function (error_data) {
|
|
|
|
|
9950
|
if (error_data.data.error_messages) {
|
|
|
|
|
9951
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
9952
|
}
|
|
|
|
|
9953
|
else {
|
|
|
|
|
9954
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
9955
|
}
|
|
|
|
|
9956
|
});
|
|
10443
|
});
|
|
9957
|
};
|
|
10444
|
};
|
|
9958
|
vm.ok = function () {
|
|
10445
|
|
|
9959
|
vm.loading = true;
|
|
10446
|
vm.addUser = function () {
|
|
9960
|
vm.form.group_id = vm.report.group_id;
|
|
10447
|
groupsPropertyResource.save(
|
|
9961
|
integrationResource.save({
|
|
10448
|
{groupId: groupId, key: 'users'},
|
|
9962
|
resourceId: vm.report.resource_id,
|
|
10449
|
{user_name: vm.form.autocompleteUser},
|
|
9963
|
action: 'create-issue',
|
|
|
|
|
9964
|
integration: vm.integrationName
|
|
|
|
|
9965
|
}, vm.form,
|
|
|
|
|
9966
|
function (data) {
|
|
10450
|
function (data) {
|
|
9967
|
vm.loading = false;
|
|
10451
|
vm.loading.users = false;
|
|
9968
|
if (data.error_messages) {
|
|
10452
|
vm.users.push(data);
|
|
9969
|
vm.error_messages = data.error_messages;
|
|
10453
|
vm.form.autocompleteUser = '';
|
|
9970
|
}
|
|
10454
|
}, function () {
|
|
9971
|
if (data !== false) {
|
|
10455
|
vm.loading.users = false;
|
|
9972
|
$uibModalInstance.dismiss('success');
|
|
|
|
|
9973
|
}
|
|
|
|
|
9974
|
}, function (error_data) {
|
|
|
|
|
9975
|
if (error_data.data.error_messages) {
|
|
|
|
|
9976
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
9977
|
}
|
|
|
|
|
9978
|
else {
|
|
|
|
|
9979
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
9980
|
}
|
|
|
|
|
9981
|
});
|
|
10456
|
});
|
|
9982
|
};
|
|
10457
|
}
|
|
9983
|
vm.cancel = function () {
|
|
10458
|
|
|
9984
|
$uibModalInstance.dismiss('cancel');
|
|
10459
|
vm.searchUsers = function (searchPhrase) {
|
|
9985
|
};
|
|
10460
|
|
|
9986
|
vm.fetchInfo();
|
|
10461
|
return sectionViewResource.query({
|
|
9987
|
}
|
|
10462
|
section: 'users_section',
|
|
|
|
|
10463
|
view: 'search_users',
|
|
|
|
|
10464
|
'user_name': searchPhrase
|
|
|
|
|
10465
|
}).$promise.then(function (data) {
|
|
|
|
|
10466
|
return _.map(data, function (item) {
|
|
|
|
|
10467
|
return item.user;
|
|
|
|
|
10468
|
});
|
|
|
|
|
10469
|
});
|
|
|
|
|
10470
|
}
|
|
|
|
|
10471
|
};
|
|
9988
|
|
|
10472
|
|
|
9989
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10473
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
9990
|
// #
|
|
10474
|
// #
|
|
@@
-10005,82
+10489,40
b' function BitbucketIntegrationCtrl($uibModalInstance, $state, report, integration'
|
|
10005
|
// # services, and proprietary license terms, please see
|
|
10489
|
// # services, and proprietary license terms, please see
|
|
10006
|
// # https://rhodecode.com/licenses/
|
|
10490
|
// # https://rhodecode.com/licenses/
|
|
10007
|
|
|
10491
|
|
|
10008
|
angular.module('appenlight.controllers')
|
|
10492
|
angular.module('appenlight.controllers').controller('AdminGroupsController', AdminGroupsController);
|
|
10009
|
.controller('GithubIntegrationCtrl', GithubIntegrationCtrl);
|
|
|
|
|
10010
|
|
|
10493
|
|
|
10011
|
GithubIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
|
|
10494
|
AdminGroupsController.$inject = ['groupsResource'];
|
|
10012
|
|
|
10495
|
|
|
10013
|
function GithubIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
|
|
10496
|
function AdminGroupsController(groupsResource) {
|
|
|
|
|
10497
|
|
|
10014
|
var vm = this;
|
|
10498
|
var vm = this;
|
|
10015
|
vm.loading = true;
|
|
10499
|
vm.loading = {groups: true};
|
|
10016
|
vm.assignees = [];
|
|
|
|
|
10017
|
vm.report = report;
|
|
|
|
|
10018
|
vm.integrationName = integrationName;
|
|
|
|
|
10019
|
vm.statuses = [];
|
|
|
|
|
10020
|
vm.assignees = [];
|
|
|
|
|
10021
|
vm.error_messages = [];
|
|
|
|
|
10022
|
vm.form = {
|
|
|
|
|
10023
|
content: '\n' +
|
|
|
|
|
10024
|
'Issue created for report: ' +
|
|
|
|
|
10025
|
$state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
|
|
|
|
|
10026
|
};
|
|
|
|
|
10027
|
|
|
10500
|
|
|
10028
|
vm.fetchInfo = function () {
|
|
10501
|
vm.groups = groupsResource.query({}, function (data) {
|
|
10029
|
integrationResource.get({
|
|
10502
|
vm.loading = {groups: false};
|
|
10030
|
resourceId: vm.report.resource_id,
|
|
10503
|
vm.activeUsers = _.reduce(vm.groups, function(memo, val){
|
|
10031
|
action: 'info',
|
|
10504
|
if (val.status == 1){
|
|
10032
|
integration: vm.integrationName
|
|
10505
|
return memo + 1;
|
|
10033
|
}, null,
|
|
10506
|
}
|
|
10034
|
function (data) {
|
|
10507
|
return memo;
|
|
10035
|
vm.loading = false;
|
|
10508
|
}, 0);
|
|
10036
|
if (data.error_messages) {
|
|
10509
|
|
|
10037
|
vm.error_messages = data.error_messages;
|
|
10510
|
});
|
|
10038
|
}
|
|
10511
|
|
|
10039
|
else {
|
|
10512
|
|
|
10040
|
vm.assignees = data.assignees;
|
|
10513
|
vm.removeGroup = function (group) {
|
|
10041
|
vm.statuses = data.statuses;
|
|
10514
|
groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
|
|
10042
|
vm.form.responsible = vm.assignees[0];
|
|
10515
|
|
|
10043
|
vm.form.status = vm.statuses[0];
|
|
10516
|
if (data) {
|
|
10044
|
}
|
|
10517
|
var index = vm.groups.indexOf(group);
|
|
10045
|
}, function (error_data) {
|
|
10518
|
if (index !== -1) {
|
|
10046
|
if (error_data.data.error_messages) {
|
|
10519
|
vm.groups.splice(index, 1);
|
|
10047
|
vm.error_messages = error_data.data.error_messages;
|
|
10520
|
vm.activeGroups -= 1;
|
|
10048
|
}
|
|
|
|
|
10049
|
else {
|
|
|
|
|
10050
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
10051
|
}
|
|
|
|
|
10052
|
});
|
|
|
|
|
10053
|
};
|
|
|
|
|
10054
|
vm.ok = function () {
|
|
|
|
|
10055
|
vm.loading = true;
|
|
|
|
|
10056
|
vm.form.group_id = vm.report.group_id;
|
|
|
|
|
10057
|
integrationResource.save({
|
|
|
|
|
10058
|
resourceId: vm.report.resource_id,
|
|
|
|
|
10059
|
action: 'create-issue',
|
|
|
|
|
10060
|
integration: vm.integrationName
|
|
|
|
|
10061
|
}, vm.form,
|
|
|
|
|
10062
|
function (data) {
|
|
|
|
|
10063
|
vm.loading = false;
|
|
|
|
|
10064
|
if (data.error_messages) {
|
|
|
|
|
10065
|
vm.error_messages = data.error_messages;
|
|
|
|
|
10066
|
}
|
|
|
|
|
10067
|
else {
|
|
|
|
|
10068
|
$uibModalInstance.dismiss('success');
|
|
|
|
|
10069
|
}
|
|
|
|
|
10070
|
}, function (error_data) {
|
|
|
|
|
10071
|
if (error_data.data.error_messages) {
|
|
|
|
|
10072
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
10073
|
}
|
|
|
|
|
10074
|
else {
|
|
|
|
|
10075
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
10076
|
}
|
|
10521
|
}
|
|
10077
|
});
|
|
10522
|
}
|
|
10078
|
};
|
|
10523
|
});
|
|
10079
|
vm.cancel = function () {
|
|
10524
|
}
|
|
10080
|
$uibModalInstance.dismiss('cancel');
|
|
10525
|
};
|
|
10081
|
};
|
|
|
|
|
10082
|
vm.fetchInfo();
|
|
|
|
|
10083
|
}
|
|
|
|
|
10084
|
|
|
10526
|
|
|
10085
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10527
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10086
|
// #
|
|
10528
|
// #
|
|
@@
-10101,83
+10543,110
b' function GithubIntegrationCtrl($uibModalInstance, $state, report, integrationNam'
|
|
10101
|
// # services, and proprietary license terms, please see
|
|
10543
|
// # services, and proprietary license terms, please see
|
|
10102
|
// # https://rhodecode.com/licenses/
|
|
10544
|
// # https://rhodecode.com/licenses/
|
|
10103
|
|
|
10545
|
|
|
10104
|
angular.module('appenlight.controllers')
|
|
10546
|
angular.module('appenlight.controllers').controller('AdminPartitionsController', AdminPartitionsController);
|
|
10105
|
.controller('JiraIntegrationCtrl', JiraIntegrationCtrl)
|
|
|
|
|
10106
|
|
|
10547
|
|
|
10107
|
JiraIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
|
|
10548
|
AdminPartitionsController.$inject = ['sectionViewResource'];
|
|
10108
|
|
|
10549
|
|
|
10109
|
function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
|
|
10550
|
function AdminPartitionsController(sectionViewResource) {
|
|
10110
|
var vm = this;
|
|
10551
|
var vm = this;
|
|
10111
|
vm.loading = true;
|
|
10552
|
vm.permanentPartitions = [];
|
|
10112
|
vm.assignees = [];
|
|
10553
|
vm.dailyPartitions = [];
|
|
10113
|
vm.report = report;
|
|
10554
|
vm.loading = {partitions: true};
|
|
10114
|
vm.integrationName = integrationName;
|
|
10555
|
vm.dailyChecked = false;
|
|
10115
|
vm.statuses = [];
|
|
10556
|
vm.permChecked = false;
|
|
10116
|
vm.priorities = [];
|
|
10557
|
vm.dailyConfirm = '';
|
|
10117
|
vm.issue_types = [];
|
|
10558
|
vm.permConfirm = '';
|
|
10118
|
vm.error_messages = [];
|
|
10559
|
|
|
10119
|
vm.form = {
|
|
10560
|
|
|
10120
|
content: '\n' +
|
|
10561
|
vm.loadPartitions = function (data) {
|
|
10121
|
'Issue created for report: ' +
|
|
10562
|
var permanentPartitions = vm.transformPartitionList(
|
|
10122
|
$state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
|
|
10563
|
data.permanent_partitions);
|
|
|
|
|
10564
|
var dailyPartitions = vm.transformPartitionList(
|
|
|
|
|
10565
|
data.daily_partitions);
|
|
|
|
|
10566
|
vm.permanentPartitions = permanentPartitions;
|
|
|
|
|
10567
|
vm.dailyPartitions = dailyPartitions;
|
|
|
|
|
10568
|
vm.loading = {partitions: false};
|
|
10123
|
};
|
|
10569
|
};
|
|
10124
|
|
|
10570
|
|
|
10125
|
vm.fetchInfo = function () {
|
|
10571
|
vm.setCheckedList = function (scope) {
|
|
10126
|
integrationResource.get({
|
|
10572
|
var toTest = null;
|
|
10127
|
resourceId: vm.report.resource_id,
|
|
10573
|
if (scope === 'dailyPartitions'){
|
|
10128
|
action: 'info',
|
|
10574
|
toTest = 'dailyChecked';
|
|
10129
|
integration: vm.integrationName
|
|
10575
|
}
|
|
10130
|
}, null,
|
|
10576
|
else{
|
|
10131
|
function (data) {
|
|
10577
|
toTest = 'permChecked';
|
|
10132
|
vm.loading = false;
|
|
10578
|
}
|
|
10133
|
if (data.error_messages) {
|
|
10579
|
|
|
10134
|
vm.error_messages = data.error_messages;
|
|
10580
|
if (vm[toTest]) {
|
|
10135
|
}
|
|
10581
|
var val = true;
|
|
10136
|
vm.assignees = data.assignees;
|
|
10582
|
}
|
|
10137
|
vm.priorities = data.priorities;
|
|
10583
|
else {
|
|
10138
|
vm.issue_types = data.issue_types;
|
|
10584
|
var val = false;
|
|
10139
|
vm.form.issue_type = vm.issue_types[0];
|
|
10585
|
}
|
|
10140
|
vm.form.responsible = vm.assignees[0];
|
|
10586
|
|
|
10141
|
vm.form.priority = vm.priorities[0];
|
|
10587
|
_.each(vm[scope], function (item) {
|
|
10142
|
}, function (error_data) {
|
|
10588
|
_.each(item[1].pg, function (index) {
|
|
10143
|
|
|
10589
|
index.checked = val;
|
|
10144
|
if (error_data.data.error_messages) {
|
|
10590
|
});
|
|
10145
|
vm.error_messages = error_data.data.error_messages;
|
|
10591
|
_.each(item[1].elasticsearch, function (index) {
|
|
10146
|
}
|
|
10592
|
index.checked = val;
|
|
10147
|
else {
|
|
10593
|
});
|
|
10148
|
vm.error_messages = ['There was a problem processing your request'];
|
|
10594
|
});
|
|
10149
|
}
|
|
10595
|
}
|
|
|
|
|
10596
|
|
|
|
|
|
10597
|
|
|
|
|
|
10598
|
vm.transformPartitionList = function (inputList) {
|
|
|
|
|
10599
|
var outputList = [];
|
|
|
|
|
10600
|
|
|
|
|
|
10601
|
_.each(inputList, function (item) {
|
|
|
|
|
10602
|
var time = [item[0], {
|
|
|
|
|
10603
|
elasticsearch: [],
|
|
|
|
|
10604
|
pg: []
|
|
|
|
|
10605
|
}]
|
|
|
|
|
10606
|
_.each(item[1].pg, function (index) {
|
|
|
|
|
10607
|
time[1].pg.push({name: index, checked: false})
|
|
|
|
|
10608
|
});
|
|
|
|
|
10609
|
_.each(item[1].elasticsearch, function (index) {
|
|
|
|
|
10610
|
time[1].elasticsearch.push({
|
|
|
|
|
10611
|
name: index,
|
|
|
|
|
10612
|
checked: false
|
|
|
|
|
10613
|
})
|
|
10150
|
});
|
|
10614
|
});
|
|
|
|
|
10615
|
outputList.push(time);
|
|
|
|
|
10616
|
});
|
|
|
|
|
10617
|
return outputList;
|
|
10151
|
};
|
|
10618
|
};
|
|
10152
|
vm.ok = function () {
|
|
10619
|
|
|
10153
|
vm.loading = true;
|
|
10620
|
sectionViewResource.get({section:'admin_section', view: 'partitions'},
|
|
10154
|
vm.form.group_id = vm.report.group_id;
|
|
10621
|
vm.loadPartitions);
|
|
10155
|
integrationResource.save({
|
|
10622
|
|
|
10156
|
resourceId: vm.report.resource_id,
|
|
10623
|
vm.partitionsDelete = function (partitionType) {
|
|
10157
|
action: 'create-issue',
|
|
10624
|
var es_indices = [];
|
|
10158
|
integration: vm.integrationName
|
|
10625
|
var pg_indices = [];
|
|
10159
|
}, vm.form,
|
|
10626
|
_.each(vm[partitionType], function (item) {
|
|
10160
|
function (data) {
|
|
10627
|
_.each(item[1].pg, function (index) {
|
|
10161
|
vm.loading = false;
|
|
10628
|
if (index.checked) {
|
|
10162
|
if (data.error_messages) {
|
|
10629
|
pg_indices.push(index.name)
|
|
10163
|
vm.error_messages = data.error_messages;
|
|
|
|
|
10164
|
}
|
|
|
|
|
10165
|
if (data !== false) {
|
|
|
|
|
10166
|
$uibModalInstance.dismiss('success');
|
|
|
|
|
10167
|
}
|
|
|
|
|
10168
|
}, function (error_data) {
|
|
|
|
|
10169
|
if (error_data.data.error_messages) {
|
|
|
|
|
10170
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
10171
|
}
|
|
10630
|
}
|
|
10172
|
else {
|
|
10631
|
});
|
|
10173
|
vm.error_messages = ['There was a problem processing your request'];
|
|
10632
|
_.each(item[1].elasticsearch, function (index) {
|
|
|
|
|
10633
|
if (index.checked) {
|
|
|
|
|
10634
|
es_indices.push(index.name)
|
|
10174
|
}
|
|
10635
|
}
|
|
10175
|
});
|
|
10636
|
});
|
|
10176
|
};
|
|
10637
|
});
|
|
10177
|
vm.cancel = function () {
|
|
10638
|
|
|
10178
|
$uibModalInstance.dismiss('cancel');
|
|
10639
|
|
|
10179
|
};
|
|
10640
|
vm.loading = {partitions: true};
|
|
10180
|
vm.fetchInfo();
|
|
10641
|
sectionViewResource.save({section:'admin_section',
|
|
|
|
|
10642
|
view: 'partitions_remove'}, {
|
|
|
|
|
10643
|
es_indices: es_indices,
|
|
|
|
|
10644
|
pg_indices: pg_indices,
|
|
|
|
|
10645
|
confirm: 'CONFIRM'
|
|
|
|
|
10646
|
}, vm.loadPartitions);
|
|
|
|
|
10647
|
|
|
|
|
|
10648
|
}
|
|
|
|
|
10649
|
|
|
10181
|
}
|
|
10650
|
}
|
|
10182
|
|
|
10651
|
|
|
10183
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10652
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
@@
-10199,72
+10668,31
b' function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName,'
|
|
10199
|
// # services, and proprietary license terms, please see
|
|
10668
|
// # services, and proprietary license terms, please see
|
|
10200
|
// # https://rhodecode.com/licenses/
|
|
10669
|
// # https://rhodecode.com/licenses/
|
|
10201
|
|
|
10670
|
|
|
10202
|
angular.module('appenlight.controllers').controller('AssignReportCtrl', AssignReportCtrl);
|
|
10671
|
angular.module('appenlight.controllers').controller('AdminSystemController', AdminSystemController);
|
|
10203
|
AssignReportCtrl.$inject = ['$uibModalInstance', 'reportGroupPropertyResource', 'report'];
|
|
|
|
|
10204
|
|
|
|
|
|
10205
|
function AssignReportCtrl($uibModalInstance, reportGroupPropertyResource, report) {
|
|
|
|
|
10206
|
var vm = this;
|
|
|
|
|
10207
|
vm.loading = true;
|
|
|
|
|
10208
|
vm.assignedUsers = [];
|
|
|
|
|
10209
|
vm.unAssignedUsers = [];
|
|
|
|
|
10210
|
vm.report = report;
|
|
|
|
|
10211
|
vm.fetchAssignments = function () {
|
|
|
|
|
10212
|
reportGroupPropertyResource.get({
|
|
|
|
|
10213
|
groupId: vm.report.group_id,
|
|
|
|
|
10214
|
key: 'assigned_users'
|
|
|
|
|
10215
|
}, null,
|
|
|
|
|
10216
|
function (data) {
|
|
|
|
|
10217
|
vm.assignedUsers = data.assigned;
|
|
|
|
|
10218
|
vm.unAssignedUsers = data.unassigned;
|
|
|
|
|
10219
|
vm.loading = false;
|
|
|
|
|
10220
|
});
|
|
|
|
|
10221
|
}
|
|
|
|
|
10222
|
|
|
|
|
|
10223
|
vm.reassignUser = function (user) {
|
|
|
|
|
10224
|
var is_assigned = vm.assignedUsers.indexOf(user);
|
|
|
|
|
10225
|
if (is_assigned != -1) {
|
|
|
|
|
10226
|
vm.assignedUsers.splice(is_assigned, 1);
|
|
|
|
|
10227
|
vm.unAssignedUsers.push(user);
|
|
|
|
|
10228
|
return
|
|
|
|
|
10229
|
}
|
|
|
|
|
10230
|
var is_unassigned = vm.unAssignedUsers.indexOf(user);
|
|
|
|
|
10231
|
if (is_unassigned != -1) {
|
|
|
|
|
10232
|
vm.unAssignedUsers.splice(is_unassigned, 1);
|
|
|
|
|
10233
|
vm.assignedUsers.push(user);
|
|
|
|
|
10234
|
return
|
|
|
|
|
10235
|
}
|
|
|
|
|
10236
|
}
|
|
|
|
|
10237
|
vm.updateAssignments = function () {
|
|
|
|
|
10238
|
var post = {'unassigned': [], 'assigned': []};
|
|
|
|
|
10239
|
_.each(vm.assignedUsers, function (u) {
|
|
|
|
|
10240
|
post['assigned'].push(u.user_name)
|
|
|
|
|
10241
|
});
|
|
|
|
|
10242
|
_.each(vm.unAssignedUsers, function (u) {
|
|
|
|
|
10243
|
post['unassigned'].push(u.user_name)
|
|
|
|
|
10244
|
});
|
|
|
|
|
10245
|
vm.loading = true;
|
|
|
|
|
10246
|
reportGroupPropertyResource.update({
|
|
|
|
|
10247
|
groupId: vm.report.group_id,
|
|
|
|
|
10248
|
key: 'assigned_users'
|
|
|
|
|
10249
|
}, post,
|
|
|
|
|
10250
|
function (data) {
|
|
|
|
|
10251
|
vm.loading = false;
|
|
|
|
|
10252
|
$uibModalInstance.close(vm.report);
|
|
|
|
|
10253
|
});
|
|
|
|
|
10254
|
};
|
|
|
|
|
10255
|
|
|
|
|
|
10256
|
|
|
|
|
|
10257
|
vm.ok = function () {
|
|
|
|
|
10258
|
vm.updateAssignments();
|
|
|
|
|
10259
|
};
|
|
|
|
|
10260
|
|
|
10672
|
|
|
10261
|
vm.cancel = function () {
|
|
10673
|
AdminSystemController.$inject = ['sectionViewResource'];
|
|
10262
|
$uibModalInstance.dismiss('cancel');
|
|
|
|
|
10263
|
};
|
|
|
|
|
10264
|
|
|
10674
|
|
|
10265
|
vm.fetchAssignments();
|
|
10675
|
function AdminSystemController(sectionViewResource) {
|
|
|
|
|
10676
|
var vm = this;
|
|
|
|
|
10677
|
vm.tables = [];
|
|
|
|
|
10678
|
vm.loading = {system: true};
|
|
|
|
|
10679
|
sectionViewResource.get({
|
|
|
|
|
10680
|
section: 'admin_section',
|
|
|
|
|
10681
|
view: 'system'
|
|
|
|
|
10682
|
}, null, function (data) {
|
|
|
|
|
10683
|
vm.DBtables = data.db_tables;
|
|
|
|
|
10684
|
vm.ESIndices = data.es_indices;
|
|
|
|
|
10685
|
vm.queueStats = data.queue_stats;
|
|
|
|
|
10686
|
vm.systemLoad = data.system_load;
|
|
|
|
|
10687
|
vm.packages = data.packages;
|
|
|
|
|
10688
|
vm.processInfo = data.process_info;
|
|
|
|
|
10689
|
vm.disks = data.disks;
|
|
|
|
|
10690
|
vm.memory = data.memory;
|
|
|
|
|
10691
|
vm.selfInfo = data.self_info;
|
|
10266
|
|
|
10692
|
|
|
10267
|
}
|
|
10693
|
vm.loading.system = false;
|
|
|
|
|
10694
|
});
|
|
|
|
|
10695
|
};
|
|
10268
|
|
|
10696
|
|
|
10269
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10697
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10270
|
// #
|
|
10698
|
// #
|
|
@@
-10285,281
+10713,107
b' function AssignReportCtrl($uibModalInstance, reportGroupPropertyResource, report'
|
|
10285
|
// # services, and proprietary license terms, please see
|
|
10713
|
// # services, and proprietary license terms, please see
|
|
10286
|
// # https://rhodecode.com/licenses/
|
|
10714
|
// # https://rhodecode.com/licenses/
|
|
10287
|
|
|
10715
|
|
|
10288
|
'use strict';
|
|
10716
|
angular.module('appenlight.controllers').controller('AdminUsersCreateController', AdminUsersCreateController);
|
|
10289
|
|
|
|
|
|
10290
|
/* Controllers */
|
|
|
|
|
10291
|
|
|
|
|
|
10292
|
angular.module('appenlight.controllers')
|
|
|
|
|
10293
|
.controller('ReportsListSlowController', ReportsListSlowController);
|
|
|
|
|
10294
|
|
|
10717
|
|
|
10295
|
ReportsListSlowController.$inject = ['$location', '$cookies',
|
|
10718
|
AdminUsersCreateController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
|
|
10296
|
'stateHolder', 'typeAheadTagHelper', 'slowReportsResource']
|
|
|
|
|
10297
|
|
|
10719
|
|
|
10298
|
function ReportsListSlowController($location, $cookies, stateHolder, typeAheadTagHelper, slowReportsResource) {
|
|
10720
|
function AdminUsersCreateController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
|
|
|
|
|
10721
|
|
|
10299
|
var vm = this;
|
|
10722
|
var vm = this;
|
|
10300
|
vm.applications = stateHolder.AeUser.applications_map;
|
|
10723
|
vm.loading = {user: false};
|
|
10301
|
stateHolder.section = 'slow_reports';
|
|
|
|
|
10302
|
vm.today = function () {
|
|
|
|
|
10303
|
vm.pickerDate = new Date();
|
|
|
|
|
10304
|
};
|
|
|
|
|
10305
|
vm.today();
|
|
|
|
|
10306
|
vm.reportsPage = [];
|
|
|
|
|
10307
|
vm.page = 1;
|
|
|
|
|
10308
|
vm.itemCount = 0;
|
|
|
|
|
10309
|
vm.itemsPerPage = 250;
|
|
|
|
|
10310
|
typeAheadTagHelper.tags = [];
|
|
|
|
|
10311
|
vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
|
|
|
|
|
10312
|
vm.is_loading = false;
|
|
|
|
|
10313
|
vm.filterTypeAheadOptions = [
|
|
|
|
|
10314
|
{
|
|
|
|
|
10315
|
type: 'view_name',
|
|
|
|
|
10316
|
text: 'view_name:',
|
|
|
|
|
10317
|
'description': 'Query reports occured in specific views',
|
|
|
|
|
10318
|
tag: 'View Name',
|
|
|
|
|
10319
|
example: "view_name:module.foo"
|
|
|
|
|
10320
|
},
|
|
|
|
|
10321
|
{
|
|
|
|
|
10322
|
type: 'resource',
|
|
|
|
|
10323
|
text: 'resource:',
|
|
|
|
|
10324
|
'description': 'Restrict resultset to application',
|
|
|
|
|
10325
|
tag: 'Application',
|
|
|
|
|
10326
|
example: "resource:ID"
|
|
|
|
|
10327
|
},
|
|
|
|
|
10328
|
{
|
|
|
|
|
10329
|
type: 'priority',
|
|
|
|
|
10330
|
text: 'priority:',
|
|
|
|
|
10331
|
'description': 'Show reports with specific priority',
|
|
|
|
|
10332
|
example: 'priority:8',
|
|
|
|
|
10333
|
tag: 'Priority'
|
|
|
|
|
10334
|
},
|
|
|
|
|
10335
|
{
|
|
|
|
|
10336
|
type: 'min_occurences',
|
|
|
|
|
10337
|
text: 'min_occurences:',
|
|
|
|
|
10338
|
'description': 'Show reports from groups with at least X occurences',
|
|
|
|
|
10339
|
example: 'min_occurences:25',
|
|
|
|
|
10340
|
tag: 'Min. occurences'
|
|
|
|
|
10341
|
},
|
|
|
|
|
10342
|
{
|
|
|
|
|
10343
|
type: 'min_duration',
|
|
|
|
|
10344
|
text: 'min_duration:',
|
|
|
|
|
10345
|
'description': 'Show reports from groups with average duration >= Xs',
|
|
|
|
|
10346
|
example: 'min_duration:4.5',
|
|
|
|
|
10347
|
tag: 'Min. duration'
|
|
|
|
|
10348
|
},
|
|
|
|
|
10349
|
{
|
|
|
|
|
10350
|
type: 'url_path',
|
|
|
|
|
10351
|
text: 'url_path:',
|
|
|
|
|
10352
|
'description': 'Show reports from specific URL paths',
|
|
|
|
|
10353
|
example: 'url_path:/foo/bar/baz',
|
|
|
|
|
10354
|
tag: 'Url Path'
|
|
|
|
|
10355
|
},
|
|
|
|
|
10356
|
{
|
|
|
|
|
10357
|
type: 'url_domain',
|
|
|
|
|
10358
|
text: 'url_domain:',
|
|
|
|
|
10359
|
'description': 'Show reports from specific domain',
|
|
|
|
|
10360
|
example: 'url_domain:domain.com',
|
|
|
|
|
10361
|
tag: 'Domain'
|
|
|
|
|
10362
|
},
|
|
|
|
|
10363
|
{
|
|
|
|
|
10364
|
type: 'request_id',
|
|
|
|
|
10365
|
text: 'request_id:',
|
|
|
|
|
10366
|
'description': 'Show reports with specific request id',
|
|
|
|
|
10367
|
example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
|
|
|
|
|
10368
|
tag: 'Request ID'
|
|
|
|
|
10369
|
},
|
|
|
|
|
10370
|
{
|
|
|
|
|
10371
|
type: 'report_status',
|
|
|
|
|
10372
|
text: 'report_status:',
|
|
|
|
|
10373
|
'description': 'Show reports from groups with specific status',
|
|
|
|
|
10374
|
example: 'report_status:never_reviewed',
|
|
|
|
|
10375
|
tag: 'Status'
|
|
|
|
|
10376
|
},
|
|
|
|
|
10377
|
{
|
|
|
|
|
10378
|
type: 'server_name',
|
|
|
|
|
10379
|
text: 'server_name:',
|
|
|
|
|
10380
|
'description': 'Show reports tagged with this key/value pair',
|
|
|
|
|
10381
|
example: 'server_name:hostname',
|
|
|
|
|
10382
|
tag: 'Tag'
|
|
|
|
|
10383
|
},
|
|
|
|
|
10384
|
{
|
|
|
|
|
10385
|
type: 'start_date',
|
|
|
|
|
10386
|
text: 'start_date:',
|
|
|
|
|
10387
|
'description': 'Show reports newer than this date (press TAB for dropdown)',
|
|
|
|
|
10388
|
example: 'start_date:2014-08-15T13:00',
|
|
|
|
|
10389
|
tag: 'Start Date'
|
|
|
|
|
10390
|
},
|
|
|
|
|
10391
|
{
|
|
|
|
|
10392
|
type: 'end_date',
|
|
|
|
|
10393
|
text: 'end_date:',
|
|
|
|
|
10394
|
'description': 'Show reports older than this date (press TAB for dropdown)',
|
|
|
|
|
10395
|
example: 'start_date:2014-08-15T23:59',
|
|
|
|
|
10396
|
tag: 'End Date'
|
|
|
|
|
10397
|
}
|
|
|
|
|
10398
|
];
|
|
|
|
|
10399
|
|
|
|
|
|
10400
|
vm.filterTypeAhead = undefined;
|
|
|
|
|
10401
|
vm.showDatePicker = false;
|
|
|
|
|
10402
|
vm.aheadFilter = typeAheadTagHelper.aheadFilter;
|
|
|
|
|
10403
|
vm.removeSearchTag = function (tag) {
|
|
|
|
|
10404
|
$location.search(tag.type, null);
|
|
|
|
|
10405
|
vm.refresh();
|
|
|
|
|
10406
|
};
|
|
|
|
|
10407
|
vm.addSearchTag = function (tag) {
|
|
|
|
|
10408
|
$location.search(tag.type, tag.value);
|
|
|
|
|
10409
|
vm.refresh();
|
|
|
|
|
10410
|
};
|
|
|
|
|
10411
|
vm.manualOpen = false;
|
|
|
|
|
10412
|
vm.notRelativeTime = false;
|
|
|
|
|
10413
|
if ($cookies.notRelativeTime) {
|
|
|
|
|
10414
|
vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
|
|
|
|
|
10415
|
}
|
|
|
|
|
10416
|
|
|
|
|
|
10417
|
|
|
|
|
|
10418
|
vm.changeRelativeTime = function () {
|
|
|
|
|
10419
|
$cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
|
|
|
|
|
10420
|
};
|
|
|
|
|
10421
|
|
|
10724
|
|
|
10422
|
_.each(_.range(1, 11), function (priority) {
|
|
|
|
|
10423
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
10424
|
type: 'priority',
|
|
|
|
|
10425
|
text: 'priority:' + priority.toString(),
|
|
|
|
|
10426
|
description: 'Show entries with specific priority',
|
|
|
|
|
10427
|
example: 'priority:' + priority,
|
|
|
|
|
10428
|
tag: 'Priority'
|
|
|
|
|
10429
|
});
|
|
|
|
|
10430
|
});
|
|
|
|
|
10431
|
_.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
|
|
|
|
|
10432
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
10433
|
type: 'report_status',
|
|
|
|
|
10434
|
text: 'report_status:' + status,
|
|
|
|
|
10435
|
'description': 'Show only reports with this status',
|
|
|
|
|
10436
|
example: 'report_status:' + status,
|
|
|
|
|
10437
|
tag: 'Status ' + status.toUpperCase()
|
|
|
|
|
10438
|
});
|
|
|
|
|
10439
|
});
|
|
|
|
|
10440
|
_.each(stateHolder.AeUser.applications, function (item) {
|
|
|
|
|
10441
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
10442
|
type: 'resource',
|
|
|
|
|
10443
|
text: 'resource:' + item.resource_id + ':' + item.resource_name,
|
|
|
|
|
10444
|
example: 'resource:' + item.resource_id,
|
|
|
|
|
10445
|
'tag': item.resource_name,
|
|
|
|
|
10446
|
'description': 'Restrict resultset to this application'
|
|
|
|
|
10447
|
});
|
|
|
|
|
10448
|
});
|
|
|
|
|
10449
|
|
|
10725
|
|
|
10450
|
vm.typeAheadTag = function (event) {
|
|
10726
|
if (typeof $state.params.userId !== 'undefined') {
|
|
10451
|
var text = vm.filterTypeAhead;
|
|
10727
|
vm.loading.user = true;
|
|
10452
|
if (_.isObject(vm.filterTypeAhead)) {
|
|
10728
|
var userId = $state.params.userId;
|
|
10453
|
text = vm.filterTypeAhead.text;
|
|
10729
|
vm.user = usersResource.get({userId: userId}, function (data) {
|
|
10454
|
};
|
|
10730
|
vm.loading.user = false;
|
|
10455
|
if (!vm.filterTypeAhead) {
|
|
10731
|
// cast to true for angular checkbox
|
|
10456
|
return
|
|
10732
|
if (vm.user.status === 1) {
|
|
10457
|
}
|
|
10733
|
vm.user.status = true;
|
|
10458
|
var parsed = text.split(':');
|
|
|
|
|
10459
|
var tag = {'type': null, 'value': null};
|
|
|
|
|
10460
|
// app tags have : twice
|
|
|
|
|
10461
|
if (parsed.length > 2 && parsed[0] == 'resource') {
|
|
|
|
|
10462
|
tag.type = 'resource';
|
|
|
|
|
10463
|
tag.value = parsed[1];
|
|
|
|
|
10464
|
}
|
|
|
|
|
10465
|
// normal tag:value
|
|
|
|
|
10466
|
else if (parsed.length > 1) {
|
|
|
|
|
10467
|
tag.type = parsed[0];
|
|
|
|
|
10468
|
var tagValue = parsed.slice(1);
|
|
|
|
|
10469
|
if (tagValue) {
|
|
|
|
|
10470
|
tag.value = tagValue.join(':');
|
|
|
|
|
10471
|
}
|
|
10734
|
}
|
|
10472
|
}
|
|
10735
|
});
|
|
10473
|
|
|
|
|
|
10474
|
// set datepicker hour based on type of field
|
|
|
|
|
10475
|
if ('start_date:' == text) {
|
|
|
|
|
10476
|
vm.showDatePicker = true;
|
|
|
|
|
10477
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
|
|
|
10478
|
}
|
|
|
|
|
10479
|
else if ('end_date:' == text) {
|
|
|
|
|
10480
|
vm.showDatePicker = true;
|
|
|
|
|
10481
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
10482
|
}
|
|
|
|
|
10483
|
|
|
|
|
|
10484
|
if (event.keyCode != 13 || !tag.type || !tag.value) {
|
|
|
|
|
10485
|
return
|
|
|
|
|
10486
|
}
|
|
|
|
|
10487
|
vm.showDatePicker = false;
|
|
|
|
|
10488
|
// aka we selected one of main options
|
|
|
|
|
10489
|
vm.addSearchTag({type: tag.type, value: tag.value});
|
|
|
|
|
10490
|
// clear typeahead
|
|
|
|
|
10491
|
vm.filterTypeAhead = undefined;
|
|
|
|
|
10492
|
};
|
|
|
|
|
10493
|
|
|
10736
|
|
|
10494
|
vm.paginationChange = function(){
|
|
10737
|
vm.resource_permissions = usersPropertyResource.query(
|
|
10495
|
$location.search('page', vm.page);
|
|
10738
|
{userId: userId, key: 'resource_permissions'}, function (data) {
|
|
10496
|
vm.refresh();
|
|
10739
|
vm.loading.resource_permissions = false;
|
|
10497
|
};
|
|
10740
|
var tmpObj = {
|
|
|
|
|
10741
|
'user': {
|
|
|
|
|
10742
|
'application': {},
|
|
|
|
|
10743
|
'dashboard': {}
|
|
|
|
|
10744
|
},
|
|
|
|
|
10745
|
'group': {
|
|
|
|
|
10746
|
'application': {},
|
|
|
|
|
10747
|
'dashboard': {}
|
|
|
|
|
10748
|
}
|
|
|
|
|
10749
|
};
|
|
|
|
|
10750
|
_.each(data, function (item) {
|
|
|
|
|
10751
|
|
|
|
|
|
10752
|
var section = tmpObj[item.type][item.resource_type];
|
|
|
|
|
10753
|
if (typeof section[item.resource_id] == 'undefined'){
|
|
|
|
|
10754
|
section[item.resource_id] = {
|
|
|
|
|
10755
|
self:item,
|
|
|
|
|
10756
|
permissions: []
|
|
|
|
|
10757
|
}
|
|
|
|
|
10758
|
}
|
|
|
|
|
10759
|
section[item.resource_id].permissions.push(item.perm_name);
|
|
10498
|
|
|
10760
|
|
|
10499
|
vm.pickerDateChanged = function(){
|
|
10761
|
});
|
|
10500
|
if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
|
|
10762
|
vm.resourcePermissions = tmpObj;
|
|
10501
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
10763
|
});
|
|
10502
|
}
|
|
|
|
|
10503
|
else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
|
|
|
|
|
10504
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
10505
|
}
|
|
|
|
|
10506
|
vm.showDatePicker = false;
|
|
|
|
|
10507
|
};
|
|
|
|
|
10508
|
|
|
10764
|
|
|
10509
|
var reportPresentation = function (report) {
|
|
10765
|
}
|
|
10510
|
report.presentation = {};
|
|
10766
|
else {
|
|
10511
|
if (report.group.public) {
|
|
10767
|
var userId = null;
|
|
10512
|
report.presentation.className = 'public';
|
|
10768
|
vm.user = {
|
|
10513
|
report.presentation.tooltip = 'Public';
|
|
10769
|
status: true
|
|
10514
|
}
|
|
10770
|
}
|
|
10515
|
else if (report.group.fixed) {
|
|
10771
|
}
|
|
10516
|
report.presentation.className = 'fixed';
|
|
10772
|
|
|
10517
|
report.presentation.tooltip = 'Fixed';
|
|
10773
|
var formResponse = function (response) {
|
|
|
|
|
10774
|
if (response.status == 422) {
|
|
|
|
|
10775
|
setServerValidation(vm.profileForm, response.data);
|
|
10518
|
}
|
|
10776
|
}
|
|
10519
|
else if (report.group.read) {
|
|
10777
|
vm.loading.user = false;
|
|
10520
|
report.presentation.className = 'reviewed';
|
|
10778
|
}
|
|
10521
|
report.presentation.tooltip = 'Reviewed';
|
|
10779
|
|
|
|
|
|
10780
|
vm.createUser = function () {
|
|
|
|
|
10781
|
vm.loading.user = true;
|
|
|
|
|
10782
|
|
|
|
|
|
10783
|
if (userId) {
|
|
|
|
|
10784
|
usersResource.update({userId: vm.user.id}, vm.user, function (data) {
|
|
|
|
|
10785
|
setServerValidation(vm.profileForm);
|
|
|
|
|
10786
|
vm.loading.user = false;
|
|
|
|
|
10787
|
}, formResponse);
|
|
10522
|
}
|
|
10788
|
}
|
|
10523
|
else {
|
|
10789
|
else {
|
|
10524
|
report.presentation.className = 'new';
|
|
10790
|
usersResource.save(vm.user, function (data) {
|
|
10525
|
report.presentation.tooltip = 'New';
|
|
10791
|
$state.go('admin.user.update', {userId: data.id});
|
|
|
|
|
10792
|
}, formResponse);
|
|
10526
|
}
|
|
10793
|
}
|
|
10527
|
return report;
|
|
10794
|
}
|
|
10528
|
};
|
|
|
|
|
10529
|
|
|
10795
|
|
|
10530
|
vm.fetchReports = function (searchParams) {
|
|
10796
|
vm.generatePassword = function () {
|
|
10531
|
vm.is_loading = true;
|
|
10797
|
var length = 8;
|
|
10532
|
slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
|
|
10798
|
var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
10533
|
var headers = getResponseHeaders();
|
|
10799
|
vm.gen_pass = "";
|
|
10534
|
|
|
10800
|
for (var i = 0, n = charset.length; i < length; ++i) {
|
|
10535
|
vm.is_loading = false;
|
|
10801
|
vm.gen_pass += charset.charAt(Math.floor(Math.random() * n));
|
|
10536
|
vm.reportsPage = _.map(data, function (item) {
|
|
10802
|
}
|
|
10537
|
return reportPresentation(item);
|
|
10803
|
vm.user.user_password = '' + vm.gen_pass;
|
|
10538
|
});
|
|
10804
|
|
|
10539
|
vm.itemCount = headers['x-total-count'];
|
|
10805
|
}
|
|
10540
|
vm.itemsPerPage = headers['x-items-per-page'];
|
|
|
|
|
10541
|
}, function () {
|
|
|
|
|
10542
|
vm.is_loading = false;
|
|
|
|
|
10543
|
});
|
|
|
|
|
10544
|
};
|
|
|
|
|
10545
|
|
|
10806
|
|
|
10546
|
vm.filterId = function (log) {
|
|
10807
|
vm.reloginUser = function () {
|
|
10547
|
vm.searchParams.tags.push({
|
|
10808
|
sectionViewResource.get({
|
|
10548
|
type: "request_id",
|
|
10809
|
section: 'admin_section', view: 'relogin_user',
|
|
10549
|
value: log.request_id
|
|
10810
|
user_id: vm.user.id
|
|
|
|
|
10811
|
}, function () {
|
|
|
|
|
10812
|
window.location = AeConfig.urls.baseUrl;
|
|
10550
|
});
|
|
10813
|
});
|
|
10551
|
vm.refresh();
|
|
|
|
|
10552
|
};
|
|
|
|
|
10553
|
vm.refresh = function(){
|
|
|
|
|
10554
|
vm.searchParams = parseSearchToTags($location.search());
|
|
|
|
|
10555
|
vm.page = Number(vm.searchParams.page) || 1;
|
|
|
|
|
10556
|
var params = parseTagsToSearch(vm.searchParams);
|
|
|
|
|
10557
|
vm.fetchReports(params);
|
|
|
|
|
10558
|
};
|
|
|
|
|
10559
|
|
|
10814
|
|
|
10560
|
//initial load
|
|
10815
|
}
|
|
10561
|
vm.refresh();
|
|
10816
|
};
|
|
10562
|
}
|
|
|
|
|
10563
|
|
|
10817
|
|
|
10564
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10818
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10565
|
// #
|
|
10819
|
// #
|
|
@@
-10580,303
+10834,229
b' function ReportsListSlowController($location, $cookies, stateHolder, typeAheadTa'
|
|
10580
|
// # services, and proprietary license terms, please see
|
|
10834
|
// # services, and proprietary license terms, please see
|
|
10581
|
// # https://rhodecode.com/licenses/
|
|
10835
|
// # https://rhodecode.com/licenses/
|
|
10582
|
|
|
10836
|
|
|
10583
|
angular.module('appenlight.controllers')
|
|
10837
|
angular.module('appenlight.controllers').controller('AdminUsersController', AdminUsersController);
|
|
10584
|
.controller('ReportsListController', ReportsListController);
|
|
|
|
|
10585
|
|
|
10838
|
|
|
10586
|
ReportsListController.$inject = ['$location', '$cookies',
|
|
10839
|
AdminUsersController.$inject = ['usersResource'];
|
|
10587
|
'stateHolder', 'typeAheadTagHelper', 'reportsResource'];
|
|
|
|
|
10588
|
|
|
10840
|
|
|
10589
|
function ReportsListController($location, $cookies, stateHolder,
|
|
10841
|
function AdminUsersController(usersResource) {
|
|
10590
|
typeAheadTagHelper, reportsResource) {
|
|
10842
|
|
|
10591
|
var vm = this;
|
|
10843
|
var vm = this;
|
|
10592
|
vm.applications = stateHolder.AeUser.applications_map;
|
|
10844
|
vm.loading = {users: true};
|
|
10593
|
stateHolder.section = 'reports';
|
|
|
|
|
10594
|
vm.today = function () {
|
|
|
|
|
10595
|
vm.pickerDate = new Date();
|
|
|
|
|
10596
|
};
|
|
|
|
|
10597
|
vm.today();
|
|
|
|
|
10598
|
vm.reportsPage = [];
|
|
|
|
|
10599
|
vm.page = 1;
|
|
|
|
|
10600
|
vm.itemCount = 0;
|
|
|
|
|
10601
|
vm.itemsPerPage = 250;
|
|
|
|
|
10602
|
typeAheadTagHelper.tags = [];
|
|
|
|
|
10603
|
vm.searchParams = {tags: [], page: 1, type: 'report'};
|
|
|
|
|
10604
|
vm.is_loading = false;
|
|
|
|
|
10605
|
vm.filterTypeAheadOptions = [
|
|
|
|
|
10606
|
{
|
|
|
|
|
10607
|
type: 'error',
|
|
|
|
|
10608
|
text: 'error:',
|
|
|
|
|
10609
|
'description': 'Full-text search in your reports',
|
|
|
|
|
10610
|
example: 'error:text-im-looking-for',
|
|
|
|
|
10611
|
tag: 'Error'
|
|
|
|
|
10612
|
},
|
|
|
|
|
10613
|
{
|
|
|
|
|
10614
|
type: 'view_name',
|
|
|
|
|
10615
|
text: 'view_name:',
|
|
|
|
|
10616
|
'description': 'Query reports occured in specific views',
|
|
|
|
|
10617
|
example: "view_name:module.foo",
|
|
|
|
|
10618
|
tag: 'View Name'
|
|
|
|
|
10619
|
},
|
|
|
|
|
10620
|
{
|
|
|
|
|
10621
|
type: 'resource',
|
|
|
|
|
10622
|
text: 'resource:',
|
|
|
|
|
10623
|
'description': 'Restrict resultset to application',
|
|
|
|
|
10624
|
example: "resource:ID",
|
|
|
|
|
10625
|
tag: 'Application'
|
|
|
|
|
10626
|
},
|
|
|
|
|
10627
|
{
|
|
|
|
|
10628
|
type: 'priority',
|
|
|
|
|
10629
|
text: 'priority:',
|
|
|
|
|
10630
|
'description': 'Show reports with specific priority',
|
|
|
|
|
10631
|
example: 'priority:8',
|
|
|
|
|
10632
|
tag: 'Priority'
|
|
|
|
|
10633
|
},
|
|
|
|
|
10634
|
{
|
|
|
|
|
10635
|
type: 'min_occurences',
|
|
|
|
|
10636
|
text: 'min_occurences:',
|
|
|
|
|
10637
|
'description': 'Show reports from groups with at least X occurences',
|
|
|
|
|
10638
|
example: 'min_occurences:25',
|
|
|
|
|
10639
|
tag: 'Occurences'
|
|
|
|
|
10640
|
},
|
|
|
|
|
10641
|
{
|
|
|
|
|
10642
|
type: 'url_path',
|
|
|
|
|
10643
|
text: 'url_path:',
|
|
|
|
|
10644
|
'description': 'Show reports from specific URL paths',
|
|
|
|
|
10645
|
example: 'url_path:/foo/bar/baz',
|
|
|
|
|
10646
|
tag: 'Url Path'
|
|
|
|
|
10647
|
},
|
|
|
|
|
10648
|
{
|
|
|
|
|
10649
|
type: 'url_domain',
|
|
|
|
|
10650
|
text: 'url_domain:',
|
|
|
|
|
10651
|
'description': 'Show reports from specific domain',
|
|
|
|
|
10652
|
example: 'url_domain:domain.com',
|
|
|
|
|
10653
|
tag: 'Domain'
|
|
|
|
|
10654
|
},
|
|
|
|
|
10655
|
{
|
|
|
|
|
10656
|
type: 'report_status',
|
|
|
|
|
10657
|
text: 'report_status:',
|
|
|
|
|
10658
|
'description': 'Show reports from groups with specific status',
|
|
|
|
|
10659
|
example: 'report_status:never_reviewed',
|
|
|
|
|
10660
|
tag: 'Status'
|
|
|
|
|
10661
|
},
|
|
|
|
|
10662
|
{
|
|
|
|
|
10663
|
type: 'request_id',
|
|
|
|
|
10664
|
text: 'request_id:',
|
|
|
|
|
10665
|
'description': 'Show reports with specific request id',
|
|
|
|
|
10666
|
example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
|
|
|
|
|
10667
|
tag: 'Request ID'
|
|
|
|
|
10668
|
},
|
|
|
|
|
10669
|
{
|
|
|
|
|
10670
|
type: 'server_name',
|
|
|
|
|
10671
|
text: 'server_name:',
|
|
|
|
|
10672
|
'description': 'Show reports tagged with this key/value pair',
|
|
|
|
|
10673
|
example: 'server_name:hostname',
|
|
|
|
|
10674
|
tag: 'Tag'
|
|
|
|
|
10675
|
},
|
|
|
|
|
10676
|
{
|
|
|
|
|
10677
|
type: 'http_status',
|
|
|
|
|
10678
|
text: 'http_status:',
|
|
|
|
|
10679
|
'description': 'Show reports with specific HTTP status code',
|
|
|
|
|
10680
|
example: "http_status:",
|
|
|
|
|
10681
|
tag: 'HTTP Status'
|
|
|
|
|
10682
|
},
|
|
|
|
|
10683
|
{
|
|
|
|
|
10684
|
type: 'http_status',
|
|
|
|
|
10685
|
text: 'http_status:500',
|
|
|
|
|
10686
|
'description': 'Show reports with specific HTTP status code',
|
|
|
|
|
10687
|
example: "http_status:500",
|
|
|
|
|
10688
|
tag: 'HTTP Status'
|
|
|
|
|
10689
|
},
|
|
|
|
|
10690
|
{
|
|
|
|
|
10691
|
type: 'http_status',
|
|
|
|
|
10692
|
text: 'http_status:404',
|
|
|
|
|
10693
|
'description': 'Include 404 reports in your search',
|
|
|
|
|
10694
|
example: "http_status:404",
|
|
|
|
|
10695
|
tag: 'HTTP Status'
|
|
|
|
|
10696
|
},
|
|
|
|
|
10697
|
{
|
|
|
|
|
10698
|
type: 'start_date',
|
|
|
|
|
10699
|
text: 'start_date:',
|
|
|
|
|
10700
|
'description': 'Show reports newer than this date (press TAB for dropdown)',
|
|
|
|
|
10701
|
example: 'start_date:2014-08-15T13:00',
|
|
|
|
|
10702
|
tag: 'Start Date'
|
|
|
|
|
10703
|
},
|
|
|
|
|
10704
|
{
|
|
|
|
|
10705
|
type: 'end_date',
|
|
|
|
|
10706
|
text: 'end_date:',
|
|
|
|
|
10707
|
'description': 'Show reports older than this date (press TAB for dropdown)',
|
|
|
|
|
10708
|
example: 'start_date:2014-08-15T23:59',
|
|
|
|
|
10709
|
tag: 'End Date'
|
|
|
|
|
10710
|
}
|
|
|
|
|
10711
|
];
|
|
|
|
|
10712
|
|
|
10845
|
|
|
10713
|
vm.filterTypeAhead = undefined;
|
|
10846
|
vm.users = usersResource.query({}, function (data) {
|
|
10714
|
vm.showDatePicker = false;
|
|
10847
|
vm.loading = {users: false};
|
|
10715
|
vm.manualOpen = false;
|
|
10848
|
vm.activeUsers = _.reduce(vm.users, function(memo, val){
|
|
10716
|
vm.aheadFilter = typeAheadTagHelper.aheadFilter;
|
|
10849
|
if (val.status == 1){
|
|
10717
|
vm.removeSearchTag = function (tag) {
|
|
10850
|
return memo + 1;
|
|
10718
|
$location.search(tag.type, null);
|
|
10851
|
}
|
|
10719
|
vm.refresh();
|
|
10852
|
return memo;
|
|
10720
|
};
|
|
10853
|
}, 0);
|
|
10721
|
vm.addSearchTag = function (tag) {
|
|
10854
|
|
|
10722
|
$location.search(tag.type, tag.value);
|
|
10855
|
});
|
|
10723
|
vm.refresh();
|
|
|
|
|
10724
|
};
|
|
|
|
|
10725
|
vm.notRelativeTime = false;
|
|
|
|
|
10726
|
if ($cookies.notRelativeTime) {
|
|
|
|
|
10727
|
vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
|
|
|
|
|
10728
|
}
|
|
|
|
|
10729
|
|
|
10856
|
|
|
10730
|
vm.changeRelativeTime = function () {
|
|
|
|
|
10731
|
$cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
|
|
|
|
|
10732
|
};
|
|
|
|
|
10733
|
|
|
10857
|
|
|
10734
|
_.each(_.range(1, 11), function (priority) {
|
|
10858
|
vm.removeUser = function (user) {
|
|
10735
|
vm.filterTypeAheadOptions.push({
|
|
10859
|
usersResource.remove({userId: user.id}, function (data, responseHeaders) {
|
|
10736
|
type: 'priority',
|
|
10860
|
|
|
10737
|
text: 'priority:' + priority.toString(),
|
|
10861
|
if (data) {
|
|
10738
|
description: 'Show entries with specific priority',
|
|
10862
|
var index = vm.users.indexOf(user);
|
|
10739
|
example: 'priority:' + priority,
|
|
10863
|
if (index !== -1) {
|
|
10740
|
tag: 'Priority'
|
|
10864
|
vm.users.splice(index, 1);
|
|
10741
|
});
|
|
10865
|
vm.activeUsers -= 1;
|
|
10742
|
});
|
|
10866
|
}
|
|
10743
|
_.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
|
|
10867
|
}
|
|
10744
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
10745
|
type: 'report_status',
|
|
|
|
|
10746
|
text: 'report_status:' + status,
|
|
|
|
|
10747
|
'description': 'Show only reports with this status',
|
|
|
|
|
10748
|
example: 'report_status:' + status,
|
|
|
|
|
10749
|
tag: 'Status ' + status.toUpperCase()
|
|
|
|
|
10750
|
});
|
|
|
|
|
10751
|
});
|
|
|
|
|
10752
|
_.each(stateHolder.AeUser.applications, function (item) {
|
|
|
|
|
10753
|
vm.filterTypeAheadOptions.push({
|
|
|
|
|
10754
|
type: 'resource',
|
|
|
|
|
10755
|
text: 'resource:' + item.resource_id + ':' + item.resource_name,
|
|
|
|
|
10756
|
example: 'resource:' + item.resource_id,
|
|
|
|
|
10757
|
'tag': item.resource_name,
|
|
|
|
|
10758
|
'description': 'Restrict resultset to this application'
|
|
|
|
|
10759
|
});
|
|
10868
|
});
|
|
10760
|
});
|
|
10869
|
}
|
|
10761
|
|
|
10870
|
};
|
|
10762
|
vm.paginationChange = function(){
|
|
|
|
|
10763
|
$location.search('page', vm.page);
|
|
|
|
|
10764
|
vm.refresh();
|
|
|
|
|
10765
|
};
|
|
|
|
|
10766
|
|
|
10871
|
|
|
10767
|
vm.typeAheadTag = function (event) {
|
|
10872
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10768
|
var text = vm.filterTypeAhead;
|
|
10873
|
// #
|
|
10769
|
if (_.isObject(vm.filterTypeAhead)) {
|
|
10874
|
// # This program is free software: you can redistribute it and/or modify
|
|
10770
|
text = vm.filterTypeAhead.text;
|
|
10875
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
10771
|
}
|
|
10876
|
// # (only), as published by the Free Software Foundation.
|
|
10772
|
if (!vm.filterTypeAhead) {
|
|
10877
|
// #
|
|
10773
|
return
|
|
10878
|
// # This program is distributed in the hope that it will be useful,
|
|
10774
|
}
|
|
10879
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
10880
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
10881
|
// # GNU General Public License for more details.
|
|
|
|
|
10882
|
// #
|
|
|
|
|
10883
|
// # You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
10884
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
10885
|
// #
|
|
|
|
|
10886
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
|
|
|
10887
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
|
|
|
10888
|
// # services, and proprietary license terms, please see
|
|
|
|
|
10889
|
// # https://rhodecode.com/licenses/
|
|
10775
|
|
|
10890
|
|
|
10776
|
var parsed = text.split(':');
|
|
10891
|
angular.module('appenlight.controllers')
|
|
10777
|
var tag = {'type': null, 'value': null};
|
|
10892
|
.controller('BitbucketIntegrationCtrl', BitbucketIntegrationCtrl)
|
|
10778
|
// app tags have : twice
|
|
|
|
|
10779
|
if (parsed.length > 2 && parsed[0] == 'resource') {
|
|
|
|
|
10780
|
tag.type = 'resource';
|
|
|
|
|
10781
|
tag.value = parsed[1];
|
|
|
|
|
10782
|
}
|
|
|
|
|
10783
|
// normal tag:value
|
|
|
|
|
10784
|
else if (parsed.length > 1) {
|
|
|
|
|
10785
|
tag.type = parsed[0];
|
|
|
|
|
10786
|
var tagValue = parsed.slice(1);
|
|
|
|
|
10787
|
if (tagValue) {
|
|
|
|
|
10788
|
tag.value = tagValue.join(':');
|
|
|
|
|
10789
|
}
|
|
|
|
|
10790
|
}
|
|
|
|
|
10791
|
else {
|
|
|
|
|
10792
|
tag.type = 'error';
|
|
|
|
|
10793
|
tag.value = parsed.join(':');
|
|
|
|
|
10794
|
}
|
|
|
|
|
10795
|
|
|
10893
|
|
|
10796
|
// set datepicker hour based on type of field
|
|
10894
|
BitbucketIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
|
|
10797
|
if ('start_date:' == text) {
|
|
|
|
|
10798
|
vm.showDatePicker = true;
|
|
|
|
|
10799
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
|
|
|
10800
|
}
|
|
|
|
|
10801
|
else if ('end_date:' == text) {
|
|
|
|
|
10802
|
vm.showDatePicker = true;
|
|
|
|
|
10803
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
|
|
|
10804
|
}
|
|
|
|
|
10805
|
|
|
10895
|
|
|
10806
|
if (event.keyCode != 13 || !tag.type || !tag.value) {
|
|
10896
|
function BitbucketIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
|
|
10807
|
return
|
|
10897
|
var vm = this;
|
|
10808
|
}
|
|
10898
|
vm.loading = true;
|
|
10809
|
vm.showDatePicker = false;
|
|
10899
|
vm.assignees = [];
|
|
10810
|
// aka we selected one of main options
|
|
10900
|
vm.report = report;
|
|
10811
|
vm.addSearchTag({type: tag.type, value: tag.value});
|
|
10901
|
vm.integrationName = integrationName;
|
|
10812
|
// clear typeahead
|
|
10902
|
vm.statuses = [];
|
|
10813
|
vm.filterTypeAhead = undefined;
|
|
10903
|
vm.priorities = [];
|
|
|
|
|
10904
|
vm.error_messages = [];
|
|
|
|
|
10905
|
vm.form = {
|
|
|
|
|
10906
|
content: '\n' +
|
|
|
|
|
10907
|
'Issue created for report: ' +
|
|
|
|
|
10908
|
$state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
|
|
10814
|
};
|
|
10909
|
};
|
|
10815
|
|
|
10910
|
|
|
10816
|
vm.pickerDateChanged = function(){
|
|
10911
|
vm.fetchInfo = function () {
|
|
10817
|
if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
|
|
10912
|
integrationResource.get({
|
|
10818
|
vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
|
|
10913
|
resourceId: vm.report.resource_id,
|
|
10819
|
}
|
|
10914
|
action: 'info',
|
|
10820
|
else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
|
|
10915
|
integration: vm.integrationName
|
|
10821
|
vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
|
|
10916
|
}, null,
|
|
10822
|
}
|
|
10917
|
function (data) {
|
|
10823
|
vm.showDatePicker = false;
|
|
10918
|
vm.loading = false;
|
|
|
|
|
10919
|
if (data.error_messages) {
|
|
|
|
|
10920
|
vm.error_messages = data.error_messages;
|
|
|
|
|
10921
|
}
|
|
|
|
|
10922
|
vm.assignees = data.assignees;
|
|
|
|
|
10923
|
vm.priorities = data.priorities;
|
|
|
|
|
10924
|
vm.form.responsible = vm.assignees[0];
|
|
|
|
|
10925
|
vm.form.priority = vm.priorities[0];
|
|
|
|
|
10926
|
}, function (error_data) {
|
|
|
|
|
10927
|
if (error_data.data.error_messages) {
|
|
|
|
|
10928
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
10929
|
}
|
|
|
|
|
10930
|
else {
|
|
|
|
|
10931
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
10932
|
}
|
|
|
|
|
10933
|
});
|
|
|
|
|
10934
|
};
|
|
|
|
|
10935
|
vm.ok = function () {
|
|
|
|
|
10936
|
vm.loading = true;
|
|
|
|
|
10937
|
vm.form.group_id = vm.report.group_id;
|
|
|
|
|
10938
|
integrationResource.save({
|
|
|
|
|
10939
|
resourceId: vm.report.resource_id,
|
|
|
|
|
10940
|
action: 'create-issue',
|
|
|
|
|
10941
|
integration: vm.integrationName
|
|
|
|
|
10942
|
}, vm.form,
|
|
|
|
|
10943
|
function (data) {
|
|
|
|
|
10944
|
vm.loading = false;
|
|
|
|
|
10945
|
if (data.error_messages) {
|
|
|
|
|
10946
|
vm.error_messages = data.error_messages;
|
|
|
|
|
10947
|
}
|
|
|
|
|
10948
|
if (data !== false) {
|
|
|
|
|
10949
|
$uibModalInstance.dismiss('success');
|
|
|
|
|
10950
|
}
|
|
|
|
|
10951
|
}, function (error_data) {
|
|
|
|
|
10952
|
if (error_data.data.error_messages) {
|
|
|
|
|
10953
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
10954
|
}
|
|
|
|
|
10955
|
else {
|
|
|
|
|
10956
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
10957
|
}
|
|
|
|
|
10958
|
});
|
|
10824
|
};
|
|
10959
|
};
|
|
|
|
|
10960
|
vm.cancel = function () {
|
|
|
|
|
10961
|
$uibModalInstance.dismiss('cancel');
|
|
|
|
|
10962
|
};
|
|
|
|
|
10963
|
vm.fetchInfo();
|
|
|
|
|
10964
|
}
|
|
10825
|
|
|
10965
|
|
|
10826
|
var reportPresentation = function (report) {
|
|
10966
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
10827
|
report.presentation = {};
|
|
10967
|
// #
|
|
10828
|
if (report.group.public) {
|
|
10968
|
// # This program is free software: you can redistribute it and/or modify
|
|
10829
|
report.presentation.className = 'public';
|
|
10969
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
10830
|
report.presentation.tooltip = 'Public';
|
|
10970
|
// # (only), as published by the Free Software Foundation.
|
|
10831
|
}
|
|
10971
|
// #
|
|
10832
|
else if (report.group.fixed) {
|
|
10972
|
// # This program is distributed in the hope that it will be useful,
|
|
10833
|
report.presentation.className = 'fixed';
|
|
10973
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10834
|
report.presentation.tooltip = 'Fixed';
|
|
10974
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
10835
|
}
|
|
10975
|
// # GNU General Public License for more details.
|
|
10836
|
else if (report.group.read) {
|
|
10976
|
// #
|
|
10837
|
report.presentation.className = 'reviewed';
|
|
10977
|
// # You should have received a copy of the GNU Affero General Public License
|
|
10838
|
report.presentation.tooltip = 'Reviewed';
|
|
10978
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
10839
|
}
|
|
10979
|
// #
|
|
10840
|
else {
|
|
10980
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
10841
|
report.presentation.className = 'new';
|
|
10981
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
10842
|
report.presentation.tooltip = 'New';
|
|
10982
|
// # services, and proprietary license terms, please see
|
|
10843
|
}
|
|
10983
|
// # https://rhodecode.com/licenses/
|
|
10844
|
return report;
|
|
10984
|
|
|
|
|
|
10985
|
angular.module('appenlight.controllers')
|
|
|
|
|
10986
|
.controller('GithubIntegrationCtrl', GithubIntegrationCtrl);
|
|
|
|
|
10987
|
|
|
|
|
|
10988
|
GithubIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
|
|
|
|
|
10989
|
|
|
|
|
|
10990
|
function GithubIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
|
|
|
|
|
10991
|
var vm = this;
|
|
|
|
|
10992
|
vm.loading = true;
|
|
|
|
|
10993
|
vm.assignees = [];
|
|
|
|
|
10994
|
vm.report = report;
|
|
|
|
|
10995
|
vm.integrationName = integrationName;
|
|
|
|
|
10996
|
vm.statuses = [];
|
|
|
|
|
10997
|
vm.assignees = [];
|
|
|
|
|
10998
|
vm.error_messages = [];
|
|
|
|
|
10999
|
vm.form = {
|
|
|
|
|
11000
|
content: '\n' +
|
|
|
|
|
11001
|
'Issue created for report: ' +
|
|
|
|
|
11002
|
$state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
|
|
10845
|
};
|
|
11003
|
};
|
|
10846
|
|
|
11004
|
|
|
10847
|
vm.fetchReports = function (searchParams) {
|
|
11005
|
vm.fetchInfo = function () {
|
|
10848
|
vm.is_loading = true;
|
|
11006
|
integrationResource.get({
|
|
10849
|
reportsResource.query(searchParams, function (data, getResponseHeaders) {
|
|
11007
|
resourceId: vm.report.resource_id,
|
|
10850
|
var headers = getResponseHeaders();
|
|
11008
|
action: 'info',
|
|
10851
|
|
|
11009
|
integration: vm.integrationName
|
|
10852
|
vm.is_loading = false;
|
|
11010
|
}, null,
|
|
10853
|
vm.reportsPage = _.map(data, function (item) {
|
|
11011
|
function (data) {
|
|
10854
|
return reportPresentation(item);
|
|
11012
|
vm.loading = false;
|
|
|
|
|
11013
|
if (data.error_messages) {
|
|
|
|
|
11014
|
vm.error_messages = data.error_messages;
|
|
|
|
|
11015
|
}
|
|
|
|
|
11016
|
else {
|
|
|
|
|
11017
|
vm.assignees = data.assignees;
|
|
|
|
|
11018
|
vm.statuses = data.statuses;
|
|
|
|
|
11019
|
vm.form.responsible = vm.assignees[0];
|
|
|
|
|
11020
|
vm.form.status = vm.statuses[0];
|
|
|
|
|
11021
|
}
|
|
|
|
|
11022
|
}, function (error_data) {
|
|
|
|
|
11023
|
if (error_data.data.error_messages) {
|
|
|
|
|
11024
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
11025
|
}
|
|
|
|
|
11026
|
else {
|
|
|
|
|
11027
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
11028
|
}
|
|
10855
|
});
|
|
11029
|
});
|
|
10856
|
vm.itemCount = headers['x-total-count'];
|
|
|
|
|
10857
|
vm.itemsPerPage = headers['x-items-per-page'];
|
|
|
|
|
10858
|
}, function () {
|
|
|
|
|
10859
|
vm.is_loading = false;
|
|
|
|
|
10860
|
});
|
|
|
|
|
10861
|
};
|
|
11030
|
};
|
|
10862
|
|
|
11031
|
vm.ok = function () {
|
|
10863
|
vm.filterId = function (log) {
|
|
11032
|
vm.loading = true;
|
|
10864
|
vm.searchParams.tags.push({
|
|
11033
|
vm.form.group_id = vm.report.group_id;
|
|
10865
|
type: "request_id",
|
|
11034
|
integrationResource.save({
|
|
10866
|
value: log.request_id
|
|
11035
|
resourceId: vm.report.resource_id,
|
|
10867
|
});
|
|
11036
|
action: 'create-issue',
|
|
10868
|
vm.refresh();
|
|
11037
|
integration: vm.integrationName
|
|
|
|
|
11038
|
}, vm.form,
|
|
|
|
|
11039
|
function (data) {
|
|
|
|
|
11040
|
vm.loading = false;
|
|
|
|
|
11041
|
if (data.error_messages) {
|
|
|
|
|
11042
|
vm.error_messages = data.error_messages;
|
|
|
|
|
11043
|
}
|
|
|
|
|
11044
|
else {
|
|
|
|
|
11045
|
$uibModalInstance.dismiss('success');
|
|
|
|
|
11046
|
}
|
|
|
|
|
11047
|
}, function (error_data) {
|
|
|
|
|
11048
|
if (error_data.data.error_messages) {
|
|
|
|
|
11049
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
11050
|
}
|
|
|
|
|
11051
|
else {
|
|
|
|
|
11052
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
11053
|
}
|
|
|
|
|
11054
|
});
|
|
10869
|
};
|
|
11055
|
};
|
|
10870
|
|
|
11056
|
vm.cancel = function () {
|
|
10871
|
vm.refresh = function(){
|
|
11057
|
$uibModalInstance.dismiss('cancel');
|
|
10872
|
vm.searchParams = parseSearchToTags($location.search());
|
|
|
|
|
10873
|
vm.page = Number(vm.searchParams.page) || 1;
|
|
|
|
|
10874
|
var params = parseTagsToSearch(vm.searchParams);
|
|
|
|
|
10875
|
|
|
|
|
|
10876
|
vm.fetchReports(params);
|
|
|
|
|
10877
|
};
|
|
11058
|
};
|
|
10878
|
// initial load
|
|
11059
|
vm.fetchInfo();
|
|
10879
|
vm.refresh();
|
|
|
|
|
10880
|
}
|
|
11060
|
}
|
|
10881
|
|
|
11061
|
|
|
10882
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
11062
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
@@
-10898,339
+11078,168
b' function ReportsListController($location, $cookies, stateHolder,'
|
|
10898
|
// # services, and proprietary license terms, please see
|
|
11078
|
// # services, and proprietary license terms, please see
|
|
10899
|
// # https://rhodecode.com/licenses/
|
|
11079
|
// # https://rhodecode.com/licenses/
|
|
10900
|
|
|
11080
|
|
|
10901
|
angular.module('appenlight.controllers').controller('ReportsViewController', ReportsViewController);
|
|
11081
|
angular.module('appenlight.controllers')
|
|
10902
|
ReportsViewController.$inject = ['$window', '$location', '$state', '$uibModal',
|
|
11082
|
.controller('JiraIntegrationCtrl', JiraIntegrationCtrl)
|
|
10903
|
'$cookies', 'reportGroupPropertyResource', 'reportGroupResource',
|
|
|
|
|
10904
|
'logsNoIdResource', 'stateHolder'];
|
|
|
|
|
10905
|
|
|
|
|
|
10906
|
function ReportsViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
|
|
|
|
|
10907
|
var vm = this;
|
|
|
|
|
10908
|
vm.window = $window;
|
|
|
|
|
10909
|
vm.stateHolder = stateHolder;
|
|
|
|
|
10910
|
vm.$state = $state;
|
|
|
|
|
10911
|
vm.reportHistoryConfig = {
|
|
|
|
|
10912
|
data: {
|
|
|
|
|
10913
|
json: [],
|
|
|
|
|
10914
|
xFormat: '%Y-%m-%dT%H:%M:%S'
|
|
|
|
|
10915
|
},
|
|
|
|
|
10916
|
color: {
|
|
|
|
|
10917
|
pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
|
|
|
|
|
10918
|
},
|
|
|
|
|
10919
|
axis: {
|
|
|
|
|
10920
|
x: {
|
|
|
|
|
10921
|
type: 'timeseries',
|
|
|
|
|
10922
|
tick: {
|
|
|
|
|
10923
|
format: '%Y-%m-%d'
|
|
|
|
|
10924
|
}
|
|
|
|
|
10925
|
},
|
|
|
|
|
10926
|
y: {
|
|
|
|
|
10927
|
tick: {
|
|
|
|
|
10928
|
count: 5,
|
|
|
|
|
10929
|
format: d3.format('.2s')
|
|
|
|
|
10930
|
}
|
|
|
|
|
10931
|
}
|
|
|
|
|
10932
|
},
|
|
|
|
|
10933
|
subchart: {
|
|
|
|
|
10934
|
show: true,
|
|
|
|
|
10935
|
size: {
|
|
|
|
|
10936
|
height: 20
|
|
|
|
|
10937
|
}
|
|
|
|
|
10938
|
},
|
|
|
|
|
10939
|
size: {
|
|
|
|
|
10940
|
height: 250
|
|
|
|
|
10941
|
},
|
|
|
|
|
10942
|
zoom: {
|
|
|
|
|
10943
|
rescale: true
|
|
|
|
|
10944
|
},
|
|
|
|
|
10945
|
grid: {
|
|
|
|
|
10946
|
x: {
|
|
|
|
|
10947
|
show: true
|
|
|
|
|
10948
|
},
|
|
|
|
|
10949
|
y: {
|
|
|
|
|
10950
|
show: true
|
|
|
|
|
10951
|
}
|
|
|
|
|
10952
|
},
|
|
|
|
|
10953
|
tooltip: {
|
|
|
|
|
10954
|
format: {
|
|
|
|
|
10955
|
title: function (d) {
|
|
|
|
|
10956
|
return '' + d;
|
|
|
|
|
10957
|
},
|
|
|
|
|
10958
|
value: function (v) {
|
|
|
|
|
10959
|
return v
|
|
|
|
|
10960
|
}
|
|
|
|
|
10961
|
}
|
|
|
|
|
10962
|
}
|
|
|
|
|
10963
|
};
|
|
|
|
|
10964
|
vm.mentionedPeople = [];
|
|
|
|
|
10965
|
vm.reportHistoryData = {};
|
|
|
|
|
10966
|
vm.textTraceback = true;
|
|
|
|
|
10967
|
vm.rawTraceback = '';
|
|
|
|
|
10968
|
vm.traceback = '';
|
|
|
|
|
10969
|
vm.reportType = 'report';
|
|
|
|
|
10970
|
vm.report = null;
|
|
|
|
|
10971
|
vm.showLong = false;
|
|
|
|
|
10972
|
vm.reportLogs = null;
|
|
|
|
|
10973
|
vm.requestStats = null;
|
|
|
|
|
10974
|
vm.comment = null;
|
|
|
|
|
10975
|
vm.is_loading = {
|
|
|
|
|
10976
|
report: true,
|
|
|
|
|
10977
|
logs: true,
|
|
|
|
|
10978
|
history: true
|
|
|
|
|
10979
|
};
|
|
|
|
|
10980
|
|
|
|
|
|
10981
|
vm.searchMentionedPeople = function(term){
|
|
|
|
|
10982
|
//vm.mentionedPeople = [];
|
|
|
|
|
10983
|
var term = term.toLowerCase();
|
|
|
|
|
10984
|
reportGroupPropertyResource.get({
|
|
|
|
|
10985
|
groupId: vm.report.group_id,
|
|
|
|
|
10986
|
key: 'assigned_users'
|
|
|
|
|
10987
|
}, null,
|
|
|
|
|
10988
|
function (data) {
|
|
|
|
|
10989
|
var users = [];
|
|
|
|
|
10990
|
_.each(data.assigned, function(u){
|
|
|
|
|
10991
|
users.push({label: u.user_name});
|
|
|
|
|
10992
|
});
|
|
|
|
|
10993
|
_.each(data.unassigned, function(u){
|
|
|
|
|
10994
|
users.push({label: u.user_name});
|
|
|
|
|
10995
|
});
|
|
|
|
|
10996
|
|
|
|
|
|
10997
|
var result = _.filter(users, function(u){
|
|
|
|
|
10998
|
return u.label.toLowerCase().indexOf(term) !== -1;
|
|
|
|
|
10999
|
});
|
|
|
|
|
11000
|
vm.mentionedPeople = result;
|
|
|
|
|
11001
|
});
|
|
|
|
|
11002
|
};
|
|
|
|
|
11003
|
|
|
|
|
|
11004
|
vm.searchTag = function (tag, value) {
|
|
|
|
|
11005
|
|
|
|
|
|
11006
|
if (vm.report.report_type === 3) {
|
|
|
|
|
11007
|
$location.url($state.href('report.list_slow'));
|
|
|
|
|
11008
|
}
|
|
|
|
|
11009
|
else {
|
|
|
|
|
11010
|
$location.url($state.href('report.list'));
|
|
|
|
|
11011
|
}
|
|
|
|
|
11012
|
$location.search(tag, value);
|
|
|
|
|
11013
|
};
|
|
|
|
|
11014
|
|
|
|
|
|
11015
|
vm.tabs = {
|
|
|
|
|
11016
|
slow_calls:false,
|
|
|
|
|
11017
|
request_details:false,
|
|
|
|
|
11018
|
logs:false,
|
|
|
|
|
11019
|
comments:false,
|
|
|
|
|
11020
|
affected_users:false
|
|
|
|
|
11021
|
};
|
|
|
|
|
11022
|
if ($cookies.selectedReportTab) {
|
|
|
|
|
11023
|
vm.tabs[$cookies.selectedReportTab] = true;
|
|
|
|
|
11024
|
}
|
|
|
|
|
11025
|
else{
|
|
|
|
|
11026
|
$cookies.selectedReportTab = 'request_details';
|
|
|
|
|
11027
|
vm.tabs.request_details = true;
|
|
|
|
|
11028
|
}
|
|
|
|
|
11029
|
|
|
|
|
|
11030
|
vm.fetchLogs = function () {
|
|
|
|
|
11031
|
if (!vm.report.request_id){
|
|
|
|
|
11032
|
return
|
|
|
|
|
11033
|
}
|
|
|
|
|
11034
|
vm.is_loading.logs = true;
|
|
|
|
|
11035
|
logsNoIdResource.query({request_id: vm.report.request_id},
|
|
|
|
|
11036
|
function (data) {
|
|
|
|
|
11037
|
vm.is_loading.logs = false;
|
|
|
|
|
11038
|
vm.reportLogs = data;
|
|
|
|
|
11039
|
}, function () {
|
|
|
|
|
11040
|
vm.is_loading.logs = false;
|
|
|
|
|
11041
|
});
|
|
|
|
|
11042
|
};
|
|
|
|
|
11043
|
vm.addComment = function () {
|
|
|
|
|
11044
|
reportGroupPropertyResource.save({
|
|
|
|
|
11045
|
groupId: vm.report.group_id,
|
|
|
|
|
11046
|
key: 'comments'
|
|
|
|
|
11047
|
}, {body: vm.comment},
|
|
|
|
|
11048
|
function (data) {
|
|
|
|
|
11049
|
vm.report.comments.push(data);
|
|
|
|
|
11050
|
});
|
|
|
|
|
11051
|
vm.comment = '';
|
|
|
|
|
11052
|
};
|
|
|
|
|
11053
|
|
|
|
|
|
11054
|
vm.fetchReport = function () {
|
|
|
|
|
11055
|
vm.is_loading.report = true;
|
|
|
|
|
11056
|
reportGroupResource.get($state.params, function (data) {
|
|
|
|
|
11057
|
vm.is_loading.report = false;
|
|
|
|
|
11058
|
if (data.request) {
|
|
|
|
|
11059
|
try {
|
|
|
|
|
11060
|
var to_sort = _.pairs(data.request);
|
|
|
|
|
11061
|
data.request = _.object(_.sortBy(to_sort, function (i) {
|
|
|
|
|
11062
|
return i[0]
|
|
|
|
|
11063
|
}));
|
|
|
|
|
11064
|
}
|
|
|
|
|
11065
|
catch (err) {
|
|
|
|
|
11066
|
}
|
|
|
|
|
11067
|
}
|
|
|
|
|
11068
|
vm.report = data;
|
|
|
|
|
11069
|
if (vm.report.req_stats) {
|
|
|
|
|
11070
|
vm.requestStats = [];
|
|
|
|
|
11071
|
_.each(_.pairs(vm.report.req_stats['percentages']), function (p) {
|
|
|
|
|
11072
|
vm.requestStats.push({
|
|
|
|
|
11073
|
name: p[0],
|
|
|
|
|
11074
|
value: vm.report.req_stats[p[0]].toFixed(3),
|
|
|
|
|
11075
|
percent: p[1],
|
|
|
|
|
11076
|
calls: vm.report.req_stats[p[0] + '_calls']
|
|
|
|
|
11077
|
})
|
|
|
|
|
11078
|
});
|
|
|
|
|
11079
|
}
|
|
|
|
|
11080
|
vm.traceback = data.traceback;
|
|
|
|
|
11081
|
_.each(vm.traceback, function (frame) {
|
|
|
|
|
11082
|
if (frame.line) {
|
|
|
|
|
11083
|
vm.rawTraceback += 'File ' + frame.file + ' line ' + frame.line + ' in ' + frame.fn + ": \r\n";
|
|
|
|
|
11084
|
}
|
|
|
|
|
11085
|
vm.rawTraceback += ' ' + frame.cline + "\r\n";
|
|
|
|
|
11086
|
});
|
|
|
|
|
11087
|
|
|
|
|
|
11088
|
if (stateHolder.AeUser.id){
|
|
|
|
|
11089
|
vm.fetchHistory();
|
|
|
|
|
11090
|
}
|
|
|
|
|
11091
|
|
|
|
|
|
11092
|
vm.selectedTab($cookies.selectedReportTab);
|
|
|
|
|
11093
|
|
|
11083
|
|
|
11094
|
}, function (response) {
|
|
11084
|
JiraIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
|
|
11095
|
|
|
|
|
|
11096
|
if (response.status == 403) {
|
|
|
|
|
11097
|
var uid = response.headers('x-appenlight-uid');
|
|
|
|
|
11098
|
if (!uid) {
|
|
|
|
|
11099
|
window.location = '/register?came_from=' + encodeURIComponent(window.location);
|
|
|
|
|
11100
|
}
|
|
|
|
|
11101
|
}
|
|
|
|
|
11102
|
vm.is_loading.report = false;
|
|
|
|
|
11103
|
});
|
|
|
|
|
11104
|
};
|
|
|
|
|
11105
|
|
|
11085
|
|
|
11106
|
vm.selectedTab = function(tab_name){
|
|
11086
|
function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
|
|
11107
|
$cookies.selectedReportTab = tab_name;
|
|
11087
|
var vm = this;
|
|
11108
|
if (tab_name == 'logs' && vm.reportLogs === null) {
|
|
11088
|
vm.loading = true;
|
|
11109
|
vm.fetchLogs();
|
|
11089
|
vm.assignees = [];
|
|
11110
|
}
|
|
11090
|
vm.report = report;
|
|
|
|
|
11091
|
vm.integrationName = integrationName;
|
|
|
|
|
11092
|
vm.statuses = [];
|
|
|
|
|
11093
|
vm.priorities = [];
|
|
|
|
|
11094
|
vm.issue_types = [];
|
|
|
|
|
11095
|
vm.error_messages = [];
|
|
|
|
|
11096
|
vm.form = {
|
|
|
|
|
11097
|
content: '\n' +
|
|
|
|
|
11098
|
'Issue created for report: ' +
|
|
|
|
|
11099
|
$state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
|
|
11111
|
};
|
|
11100
|
};
|
|
11112
|
|
|
11101
|
|
|
11113
|
vm.markFixed = function () {
|
|
11102
|
vm.fetchInfo = function () {
|
|
11114
|
reportGroupResource.update({
|
|
11103
|
integrationResource.get({
|
|
11115
|
groupId: vm.report.group_id
|
|
11104
|
resourceId: vm.report.resource_id,
|
|
11116
|
}, {fixed: !vm.report.group.fixed},
|
|
11105
|
action: 'info',
|
|
|
|
|
11106
|
integration: vm.integrationName
|
|
|
|
|
11107
|
}, null,
|
|
11117
|
function (data) {
|
|
11108
|
function (data) {
|
|
11118
|
vm.report.group.fixed = data.fixed;
|
|
11109
|
vm.loading = false;
|
|
|
|
|
11110
|
if (data.error_messages) {
|
|
|
|
|
11111
|
vm.error_messages = data.error_messages;
|
|
|
|
|
11112
|
}
|
|
|
|
|
11113
|
vm.assignees = data.assignees;
|
|
|
|
|
11114
|
vm.priorities = data.priorities;
|
|
|
|
|
11115
|
vm.issue_types = data.issue_types;
|
|
|
|
|
11116
|
vm.form.issue_type = vm.issue_types[0];
|
|
|
|
|
11117
|
vm.form.responsible = vm.assignees[0];
|
|
|
|
|
11118
|
vm.form.priority = vm.priorities[0];
|
|
|
|
|
11119
|
}, function (error_data) {
|
|
|
|
|
11120
|
|
|
|
|
|
11121
|
if (error_data.data.error_messages) {
|
|
|
|
|
11122
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
11123
|
}
|
|
|
|
|
11124
|
else {
|
|
|
|
|
11125
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
11126
|
}
|
|
11119
|
});
|
|
11127
|
});
|
|
11120
|
};
|
|
11128
|
};
|
|
11121
|
|
|
11129
|
vm.ok = function () {
|
|
11122
|
vm.markPublic = function () {
|
|
11130
|
vm.loading = true;
|
|
11123
|
reportGroupResource.update({
|
|
11131
|
vm.form.group_id = vm.report.group_id;
|
|
11124
|
groupId: vm.report.group_id
|
|
11132
|
integrationResource.save({
|
|
11125
|
}, {public: !vm.report.group.public},
|
|
11133
|
resourceId: vm.report.resource_id,
|
|
|
|
|
11134
|
action: 'create-issue',
|
|
|
|
|
11135
|
integration: vm.integrationName
|
|
|
|
|
11136
|
}, vm.form,
|
|
11126
|
function (data) {
|
|
11137
|
function (data) {
|
|
11127
|
vm.report.group.public = data.public;
|
|
11138
|
vm.loading = false;
|
|
|
|
|
11139
|
if (data.error_messages) {
|
|
|
|
|
11140
|
vm.error_messages = data.error_messages;
|
|
|
|
|
11141
|
}
|
|
|
|
|
11142
|
if (data !== false) {
|
|
|
|
|
11143
|
$uibModalInstance.dismiss('success');
|
|
|
|
|
11144
|
}
|
|
|
|
|
11145
|
}, function (error_data) {
|
|
|
|
|
11146
|
if (error_data.data.error_messages) {
|
|
|
|
|
11147
|
vm.error_messages = error_data.data.error_messages;
|
|
|
|
|
11148
|
}
|
|
|
|
|
11149
|
else {
|
|
|
|
|
11150
|
vm.error_messages = ['There was a problem processing your request'];
|
|
|
|
|
11151
|
}
|
|
11128
|
});
|
|
11152
|
});
|
|
11129
|
};
|
|
11153
|
};
|
|
11130
|
|
|
11154
|
vm.cancel = function () {
|
|
11131
|
vm.delete = function () {
|
|
11155
|
$uibModalInstance.dismiss('cancel');
|
|
11132
|
reportGroupResource.delete({'groupId': vm.report.group_id},
|
|
|
|
|
11133
|
function (data) {
|
|
|
|
|
11134
|
$state.go('report.list');
|
|
|
|
|
11135
|
})
|
|
|
|
|
11136
|
};
|
|
11156
|
};
|
|
|
|
|
11157
|
vm.fetchInfo();
|
|
|
|
|
11158
|
}
|
|
11137
|
|
|
11159
|
|
|
11138
|
vm.assignUsersModal = function (index) {
|
|
11160
|
;// # Copyright (C) 2010-2016 RhodeCode GmbH
|
|
11139
|
vm.opts = {
|
|
11161
|
// #
|
|
11140
|
backdrop: 'static',
|
|
11162
|
// # This program is free software: you can redistribute it and/or modify
|
|
11141
|
templateUrl: 'AssignReportCtrl.html',
|
|
11163
|
// # it under the terms of the GNU Affero General Public License, version 3
|
|
11142
|
controller: 'AssignReportCtrl as ctrl',
|
|
11164
|
// # (only), as published by the Free Software Foundation.
|
|
11143
|
resolve: {
|
|
11165
|
// #
|
|
11144
|
report: function () {
|
|
11166
|
// # This program is distributed in the hope that it will be useful,
|
|
11145
|
return vm.report;
|
|
11167
|
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11146
|
}
|
|
11168
|
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11147
|
}
|
|
11169
|
// # GNU General Public License for more details.
|
|
11148
|
};
|
|
11170
|
// #
|
|
11149
|
var modalInstance = $uibModal.open(vm.opts);
|
|
11171
|
// # You should have received a copy of the GNU Affero General Public License
|
|
11150
|
modalInstance.result.then(function (report) {
|
|
11172
|
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
11151
|
|
|
11173
|
// #
|
|
11152
|
}, function () {
|
|
11174
|
// # This program is dual-licensed. If you wish to learn more about the
|
|
11153
|
console.info('Modal dismissed at: ' + new Date());
|
|
11175
|
// # AppEnlight Enterprise Edition, including its added features, Support
|
|
11154
|
});
|
|
11176
|
// # services, and proprietary license terms, please see
|
|
|
|
|
11177
|
// # https://rhodecode.com/licenses/
|
|
11155
|
|
|
11178
|
|
|
11156
|
};
|
|
11179
|
angular.module('appenlight.controllers').controller('AssignReportCtrl', AssignReportCtrl);
|
|
|
|
|
11180
|
AssignReportCtrl.$inject = ['$uibModalInstance', 'reportGroupPropertyResource', 'report'];
|
|
11157
|
|
|
11181
|
|
|
11158
|
vm.fetchHistory = function () {
|
|
11182
|
function AssignReportCtrl($uibModalInstance, reportGroupPropertyResource, report) {
|
|
11159
|
reportGroupPropertyResource.query({
|
|
11183
|
var vm = this;
|
|
11160
|
groupId: vm.report.group_id,
|
|
11184
|
vm.loading = true;
|
|
11161
|
key: 'history'
|
|
11185
|
vm.assignedUsers = [];
|
|
11162
|
}, function (data) {
|
|
11186
|
vm.unAssignedUsers = [];
|
|
11163
|
vm.reportHistoryData = {
|
|
11187
|
vm.report = report;
|
|
11164
|
json: data,
|
|
11188
|
vm.fetchAssignments = function () {
|
|
11165
|
keys: {
|
|
11189
|
reportGroupPropertyResource.get({
|
|
11166
|
x: 'x',
|
|
11190
|
groupId: vm.report.group_id,
|
|
11167
|
value: ["reports"]
|
|
11191
|
key: 'assigned_users'
|
|
11168
|
},
|
|
11192
|
}, null,
|
|
11169
|
names: {
|
|
11193
|
function (data) {
|
|
11170
|
reports: 'Reports history'
|
|
11194
|
vm.assignedUsers = data.assigned;
|
|
11171
|
},
|
|
11195
|
vm.unAssignedUsers = data.unassigned;
|
|
11172
|
type: 'bar'
|
|
11196
|
vm.loading = false;
|
|
11173
|
};
|
|
11197
|
});
|
|
11174
|
vm.is_loading.history = false;
|
|
11198
|
}
|
|
11175
|
});
|
|
|
|
|
11176
|
};
|
|
|
|
|
11177
|
|
|
11199
|
|
|
11178
|
vm.nextDetail = function () {
|
|
11200
|
vm.reassignUser = function (user) {
|
|
11179
|
$state.go('report.view_detail', {
|
|
11201
|
var is_assigned = vm.assignedUsers.indexOf(user);
|
|
11180
|
groupId: vm.report.group_id,
|
|
11202
|
if (is_assigned != -1) {
|
|
11181
|
reportId: vm.report.group.next_report
|
|
11203
|
vm.assignedUsers.splice(is_assigned, 1);
|
|
|
|
|
11204
|
vm.unAssignedUsers.push(user);
|
|
|
|
|
11205
|
return
|
|
|
|
|
11206
|
}
|
|
|
|
|
11207
|
var is_unassigned = vm.unAssignedUsers.indexOf(user);
|
|
|
|
|
11208
|
if (is_unassigned != -1) {
|
|
|
|
|
11209
|
vm.unAssignedUsers.splice(is_unassigned, 1);
|
|
|
|
|
11210
|
vm.assignedUsers.push(user);
|
|
|
|
|
11211
|
return
|
|
|
|
|
11212
|
}
|
|
|
|
|
11213
|
}
|
|
|
|
|
11214
|
vm.updateAssignments = function () {
|
|
|
|
|
11215
|
var post = {'unassigned': [], 'assigned': []};
|
|
|
|
|
11216
|
_.each(vm.assignedUsers, function (u) {
|
|
|
|
|
11217
|
post['assigned'].push(u.user_name)
|
|
11182
|
});
|
|
11218
|
});
|
|
11183
|
};
|
|
11219
|
_.each(vm.unAssignedUsers, function (u) {
|
|
11184
|
vm.previousDetail = function () {
|
|
11220
|
post['unassigned'].push(u.user_name)
|
|
11185
|
$state.go('report.view_detail', {
|
|
|
|
|
11186
|
groupId: vm.report.group_id,
|
|
|
|
|
11187
|
reportId: vm.report.group.previous_report
|
|
|
|
|
11188
|
});
|
|
11221
|
});
|
|
|
|
|
11222
|
vm.loading = true;
|
|
|
|
|
11223
|
reportGroupPropertyResource.update({
|
|
|
|
|
11224
|
groupId: vm.report.group_id,
|
|
|
|
|
11225
|
key: 'assigned_users'
|
|
|
|
|
11226
|
}, post,
|
|
|
|
|
11227
|
function (data) {
|
|
|
|
|
11228
|
vm.loading = false;
|
|
|
|
|
11229
|
$uibModalInstance.close(vm.report);
|
|
|
|
|
11230
|
});
|
|
11189
|
};
|
|
11231
|
};
|
|
11190
|
|
|
11232
|
|
|
11191
|
vm.runIntegration = function (integration_name) {
|
|
|
|
|
11192
|
|
|
|
|
|
11193
|
if (integration_name == 'bitbucket') {
|
|
|
|
|
11194
|
var controller = 'BitbucketIntegrationCtrl as ctrl';
|
|
|
|
|
11195
|
var template_url = 'templates/integrations/bitbucket.html';
|
|
|
|
|
11196
|
}
|
|
|
|
|
11197
|
else if (integration_name == 'github') {
|
|
|
|
|
11198
|
var controller = 'GithubIntegrationCtrl as ctrl';
|
|
|
|
|
11199
|
var template_url = 'templates/integrations/github.html';
|
|
|
|
|
11200
|
}
|
|
|
|
|
11201
|
else if (integration_name == 'jira') {
|
|
|
|
|
11202
|
var controller = 'JiraIntegrationCtrl as ctrl';
|
|
|
|
|
11203
|
var template_url = 'templates/integrations/jira.html';
|
|
|
|
|
11204
|
}
|
|
|
|
|
11205
|
else {
|
|
|
|
|
11206
|
return false;
|
|
|
|
|
11207
|
}
|
|
|
|
|
11208
|
|
|
|
|
|
11209
|
vm.opts = {
|
|
|
|
|
11210
|
backdrop: 'static',
|
|
|
|
|
11211
|
templateUrl: template_url,
|
|
|
|
|
11212
|
controller: controller,
|
|
|
|
|
11213
|
resolve: {
|
|
|
|
|
11214
|
integrationName: function () {
|
|
|
|
|
11215
|
return integration_name
|
|
|
|
|
11216
|
},
|
|
|
|
|
11217
|
report: function () {
|
|
|
|
|
11218
|
return vm.report;
|
|
|
|
|
11219
|
}
|
|
|
|
|
11220
|
}
|
|
|
|
|
11221
|
};
|
|
|
|
|
11222
|
var modalInstance = $uibModal.open(vm.opts);
|
|
|
|
|
11223
|
modalInstance.result.then(function (report) {
|
|
|
|
|
11224
|
|
|
|
|
|
11225
|
}, function () {
|
|
|
|
|
11226
|
console.info('Modal dismissed at: ' + new Date());
|
|
|
|
|
11227
|
});
|
|
|
|
|
11228
|
|
|
11233
|
|
|
|
|
|
11234
|
vm.ok = function () {
|
|
|
|
|
11235
|
vm.updateAssignments();
|
|
11229
|
};
|
|
11236
|
};
|
|
11230
|
|
|
11237
|
|
|
11231
|
// load report
|
|
11238
|
vm.cancel = function () {
|
|
11232
|
vm.fetchReport();
|
|
11239
|
$uibModalInstance.dismiss('cancel');
|
|
|
|
|
11240
|
};
|
|
11233
|
|
|
11241
|
|
|
|
|
|
11242
|
vm.fetchAssignments();
|
|
11234
|
|
|
11243
|
|
|
11235
|
}
|
|
11244
|
}
|
|
11236
|
|
|
11245
|
|
|
@@
-12402,30
+12411,26
b" angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', fun"
|
|
12402
|
$stateProvider.state('report', {
|
|
12411
|
$stateProvider.state('report', {
|
|
12403
|
abstract: true,
|
|
12412
|
abstract: true,
|
|
12404
|
url: '/ui/report',
|
|
12413
|
url: '/ui/report',
|
|
12405
|
templateUrl: 'templates/reports/parent_view.html'
|
|
12414
|
template: '<ui-view></ui-view>'
|
|
12406
|
});
|
|
12415
|
});
|
|
12407
|
|
|
12416
|
|
|
12408
|
$stateProvider.state('report.list', {
|
|
12417
|
$stateProvider.state('report.list', {
|
|
12409
|
url: '?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
|
|
12418
|
url: '/list?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
|
|
12410
|
templateUrl: 'templates/reports/list.html',
|
|
12419
|
component: 'reportsBrowserView'
|
|
12411
|
controller: 'ReportsListController as reports_list'
|
|
|
|
|
12412
|
});
|
|
12420
|
});
|
|
12413
|
|
|
12421
|
|
|
12414
|
$stateProvider.state('report.list_slow', {
|
|
12422
|
$stateProvider.state('report.list_slow', {
|
|
12415
|
url: '/list_slow?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
|
|
12423
|
url: '/list_slow?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
|
|
12416
|
templateUrl: 'templates/reports/list_slow.html',
|
|
12424
|
component: 'reportsSlowBrowserView'
|
|
12417
|
controller: 'ReportsListSlowController as reports_list'
|
|
|
|
|
12418
|
});
|
|
12425
|
});
|
|
12419
|
|
|
12426
|
|
|
12420
|
$stateProvider.state('report.view_detail', {
|
|
12427
|
$stateProvider.state('report.view_detail', {
|
|
12421
|
url: '/:groupId/:reportId',
|
|
12428
|
url: '/:groupId/:reportId',
|
|
12422
|
templateUrl: 'templates/reports/view.html',
|
|
12429
|
component: 'reportView'
|
|
12423
|
controller: 'ReportsViewController as report'
|
|
|
|
|
12424
|
});
|
|
12430
|
});
|
|
12425
|
$stateProvider.state('report.view_group', {
|
|
12431
|
$stateProvider.state('report.view_group', {
|
|
12426
|
url: '/:groupId',
|
|
12432
|
url: '/:groupId',
|
|
12427
|
templateUrl: 'templates/reports/view.html',
|
|
12433
|
component: 'reportView'
|
|
12428
|
controller: 'ReportsViewController as report'
|
|
|
|
|
12429
|
});
|
|
12434
|
});
|
|
12430
|
$stateProvider.state('events', {
|
|
12435
|
$stateProvider.state('events', {
|
|
12431
|
url: '/ui/events',
|
|
12436
|
url: '/ui/events',
|