##// END OF EJS Templates
components: whole settings panel componentized
ergo -
Show More
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.bitbucketIntegrationConfigView', [])
2 .component('bitbucketIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.campfireIntegrationConfigView', [])
2 .component('campfireIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.flowdockIntegrationConfigView', [])
2 .component('flowdockIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.githubIntegrationConfigView', [])
2 .component('githubIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/github-integration-config-view/github-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.hipchatIntegrationConfigView', [])
2 .component('hipchatIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.jiraIntegrationConfigView', [])
2 .component('jiraIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.slackIntegrationConfigView', [])
2 .component('slackIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
@@ -0,0 +1,5 b''
1 angular.module('appenlight.components.webhooksIntegrationConfigView', [])
2 .component('webhooksIntegrationConfigView', {
3 templateUrl: 'components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
4 controller: ApplicationsIntegrationsEditViewController
5 });
This diff has been collapsed as it changes many lines, (7235 lines changed) Show them Hide them
@@ -2547,7 +2547,7 b' function decodeEncodedJSON (input){'
2547 delete doc;
2547 delete doc;
2548 return val;
2548 return val;
2549 }catch(exc){
2549 }catch(exc){
2550 console.error('decodeEncodedJSON:' + exc + ' input:' + input);
2550
2551 delete doc;
2551 delete doc;
2552 }
2552 }
2553 }
2553 }
@@ -2600,16 +2600,16 b' function timeSpanToStartDate(timeSpan){'
2600 /* Sets server validation messages on form using angular machinery +
2600 /* Sets server validation messages on form using angular machinery +
2601 * custom key holding actual error messages */
2601 * custom key holding actual error messages */
2602 function setServerValidation(form, errors){
2602 function setServerValidation(form, errors){
2603 console.log('form', form);
2603
2604 if (typeof form.ae_validation === 'undefined'){
2604 if (typeof form.ae_validation === 'undefined'){
2605 form.ae_validation = {};
2605 form.ae_validation = {};
2606 console.log('create ae_validation key');
2606
2607 }
2607 }
2608 for (var key in form.ae_validation){
2608 for (var key in form.ae_validation){
2609 form.ae_validation[key] = [];
2609 form.ae_validation[key] = [];
2610 console.log('clear key:', key);
2610
2611 }
2611 }
2612 console.log('errors:',errors);
2612
2613
2613
2614 for (var key in form){
2614 for (var key in form){
2615 if (key[0] !== '$' && key !== 'ae_validation'){
2615 if (key[0] !== '$' && key !== 'ae_validation'){
@@ -2688,6 +2688,18 b" angular.module('appenlight.components', ["
2688 'appenlight.components.userAuthTokensView',
2688 'appenlight.components.userAuthTokensView',
2689 'appenlight.components.userAlertChannelsListView',
2689 'appenlight.components.userAlertChannelsListView',
2690 'appenlight.components.userAlertChannelsEmailNewView',
2690 'appenlight.components.userAlertChannelsEmailNewView',
2691 'appenlight.components.applicationsListView',
2692 'appenlight.components.applicationsPurgeLogsView',
2693 'appenlight.components.applicationsUpdateView',
2694 'appenlight.components.integrationsListView',
2695 'appenlight.components.bitbucketIntegrationConfigView',
2696 'appenlight.components.campfireIntegrationConfigView',
2697 'appenlight.components.flowdockIntegrationConfigView',
2698 'appenlight.components.githubIntegrationConfigView',
2699 'appenlight.components.hipchatIntegrationConfigView',
2700 'appenlight.components.jiraIntegrationConfigView',
2701 'appenlight.components.slackIntegrationConfigView',
2702 'appenlight.components.webhooksIntegrationConfigView',
2691 'appenlight.components.settingsView'
2703 'appenlight.components.settingsView'
2692 ]);
2704 ]);
2693 angular.module('appenlight.directives', [
2705 angular.module('appenlight.directives', [
@@ -2720,7 +2732,7 b' var pluginsToLoad = _.map(decodeEncodedJSON(window.AE.plugins),'
2720 function(item){
2732 function(item){
2721 return item.config.angular_module
2733 return item.config.angular_module
2722 });
2734 });
2723 console.log(pluginsToLoad);
2735
2724 angular.module('appenlight.plugins', pluginsToLoad);
2736 angular.module('appenlight.plugins', pluginsToLoad);
2725
2737
2726 var app = angular.module('appenlight', [
2738 var app = angular.module('appenlight', [
@@ -2816,7 +2828,7 b' function kickstartAE(initialUserData) {'
2816 AeConfig.urls.otherRoutes.lostPassword,
2828 AeConfig.urls.otherRoutes.lostPassword,
2817 AeConfig.urls.otherRoutes.lostPasswordGenerate
2829 AeConfig.urls.otherRoutes.lostPasswordGenerate
2818 ];
2830 ];
2819 console.log('$transitions.onBefore', path, $transition$.to().name, $state);
2831
2820 _.each(openViews, function (url) {
2832 _.each(openViews, function (url) {
2821 var url = '/' + url.split('/').slice(3).join('/');
2833 var url = '/' + url.split('/').slice(3).join('/');
2822 if (url === path) {
2834 if (url === path) {
@@ -2825,7 +2837,7 b' function kickstartAE(initialUserData) {'
2825 });
2837 });
2826 if (stateHolder.AeUser.id === null && !isGuestState && !isOpenView) {
2838 if (stateHolder.AeUser.id === null && !isGuestState && !isOpenView) {
2827 if (window.location.toString().indexOf(AeConfig.urls.otherRoutes.register) === -1) {
2839 if (window.location.toString().indexOf(AeConfig.urls.otherRoutes.register) === -1) {
2828 console.log('redirect to register');
2840
2829 var newLocation = AeConfig.urls.otherRoutes.register + '?came_from=' + encodeURIComponent(window.location);
2841 var newLocation = AeConfig.urls.otherRoutes.register + '?came_from=' + encodeURIComponent(window.location);
2830 // fix infinite digest here
2842 // fix infinite digest here
2831 $rootScope.$on('$locationChangeStart',
2843 $rootScope.$on('$locationChangeStart',
@@ -2973,3206 +2985,3183 b' function kickstartAE(initialUserData) {'
2973 );
2985 );
2974
2986
2975
2987
2976 $templateCache.put('components/views/event-browser/event-browser.html',
2988 $templateCache.put('components/views/applications-integrations-view/applications-integrations-view.html',
2977 "<div class=\"panel panel-default\">\n" +
2989 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application && $state.is('applications.integrations')\"></ng-include>\n" +
2978 " <div class=\"panel-body\">\n" +
2979 "\n" +
2990 "\n" +
2980 " <h1>Event history</h1>\n" +
2991 "<ui-view>\n" +
2992 " <div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.application\">\n" +
2993 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
2994 " <div class=\"panel-body\">\n" +
2981 "\n" +
2995 "\n" +
2982 " <table class=\"table table-striped event-table\">\n" +
2996 " <a class=\"btn btn-default integration\"\n" +
2983 " <tr ng-repeat=\"event in $ctrl.events track by event.id\">\n" +
2997 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'bitbucket'})\">\n" +
2984 " <td class=\"text-center icons\">\n" +
2998 " <span class=\"fa fa-fw fa-bitbucket fa-3x pull-left\"></span>\n" +
2985 " <span ng-if=\"event.event_type === 1\" class=\"fa fa-exclamation-triangle fa-2x\" style=\"color:orangered\"></span>\n" +
2999 " <strong>Bitbucket</strong>\n" +
2986 " <span ng-if=\"event.event_type === 3\" class=\"fa fa-clock-o fa-2x\" style=\"color:darkorange\"></span>\n" +
2987 " <span ng-if=\"event.event_type === 7\" class=\"fa fa-question-circle fa-2x\" style=\"color:dimgrey\"></span>\n" +
2988 " <span ng-if=\"event.event_type === 9\" class=\"fa fa-line-chart fa-2x\" style=\"color:green\"></span>\n" +
2989 " </td>\n" +
2990 " <td>\n" +
2991 " <p>For <strong>{{ event.resource_name }}</strong></p>\n" +
2992 "\n" +
3000 "\n" +
2993 " <p>{{ event.text }}</p>\n" +
3001 " <p>Send issues and reports to Bitbucket</p>\n" +
2994 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\"> created:\n" +
3002 " </a>\n" +
2995 " <iso-to-relative-time time=\"{{event.start_date}}\"/>\n" +
2996 " </small>\n" +
2997 " <small class=\"date\" ng-show=\"event.end_date\" data-uib-tooltip=\"{{event.end_date}}\"> | closed:\n" +
2998 " <iso-to-relative-time time=\"{{event.end_date}}\"/>\n" +
2999 " </small>\n" +
3000 " </td>\n" +
3001 " <td class=\"options\">\n" +
3002 "\n" +
3003 "\n" +
3003 " <span class=\"dropdown pull-right\" ng-if=\"event.status === 1\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3004 " <a class=\"btn btn-default integration\"\n" +
3004 " <a class=\"dropdown-toggle btn btn-danger\" data-uib-dropdown-toggle>\n" +
3005 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'campfire'})\">\n" +
3005 " <span class=\"fa fa-exclamation-circle\"></span>\n" +
3006 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3006 " </a>\n" +
3007 " <strong>Campfire</strong>\n" +
3007 " <ul class=\"dropdown-menu\">\n" +
3008 " <li>\n" +
3009 " <a ng-click=\"$ctrl.closeEvent(event)\">Close event</a>\n" +
3010 " <a>Do nothing</a>\n" +
3011 " </li>\n" +
3012 " </ul>\n" +
3013 " </span>\n" +
3014 "\n" +
3008 "\n" +
3015 " </td>\n" +
3009 " <p>Receive reports and alerts in your Campfire rooms</p>\n" +
3016 " </tr>\n" +
3010 " </a>\n" +
3017 " </table>\n" +
3018 " </div>\n" +
3019 "</div>\n"
3020 );
3021
3022
3023 $templateCache.put('components/views/index-dashboard/index-dashboard.html',
3024 "<style type=\"text/css\">\n" +
3025 " #metrics_chart .c3-line {\n" +
3026 " stroke-width: 0px;\n" +
3027 " }\n" +
3028 "\n" +
3011 "\n" +
3029 " #metrics_chart .c3-area {\n" +
3012 " <a class=\"btn btn-default integration\"\n" +
3030 " stroke-width: 0;\n" +
3013 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'flowdock'})\">\n" +
3031 " opacity: 0.75;\n" +
3014 " <span class=\"fa fa-fw fa-envelope fa-3x pull-left\"></span>\n" +
3032 " }\n" +
3015 " <strong>Flowdock</strong>\n" +
3033 "</style>\n" +
3034 "\n" +
3016 "\n" +
3035 "<div class=\"row\">\n" +
3017 " <p>Receive reports and alerts on your Flowdock team\n" +
3036 " <div class=\"col-sm-12 dashboard\" id=\"content\">\n" +
3018 " inbox</p>\n" +
3037 " <div ng-if=\"!$ctrl.stateHolder.AeUser.applications.length\">\n" +
3019 " </a>\n" +
3038 "\n" +
3020 "\n" +
3039 " <div ng-include=\"'templates/quickstart.html'\"></div>\n" +
3021 " <a class=\"btn btn-default integration\"\n" +
3022 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'github'})\">\n" +
3023 " <span class=\"fa fa-fw fa-github fa-3x pull-left\"></span>\n" +
3024 " <strong>Github</strong>\n" +
3040 "\n" +
3025 "\n" +
3041 " </div>\n" +
3026 " <p>Send issues and reports to Github</p>\n" +
3027 " </a>\n" +
3042 "\n" +
3028 "\n" +
3043 " <div ng-if=\"$ctrl.stateHolder.AeUser.applications.length\">\n" +
3029 " <a class=\"btn btn-default integration\"\n" +
3030 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'hipchat'})\">\n" +
3031 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3032 " <strong>HipChat</strong>\n" +
3044 "\n" +
3033 "\n" +
3045 " <div class=\"row\">\n" +
3034 " <p>Receive reports and alerts in your Hipchat chanels</p>\n" +
3046 " <div class=\"col-sm-6\">\n" +
3035 " </a>\n" +
3047 " <div class=\"panel panel-default\">\n" +
3048 " <div class=\"panel-body\">\n" +
3049 " <form class=\"graph-type form-inline\">\n" +
3050 " <select ng-model=\"$ctrl.resource\" ng-options=\"r.resource_id as r.resource_name for r in $ctrl.stateHolder.AeUser.applications\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3051 " class=\"SelectField form-control input-sm slim-input\"></select>\n" +
3052 "\n" +
3036 "\n" +
3053 " <select class=\"SelectField form-control input-sm slim-input\" ng-model=\"$ctrl.timeSpan\"\n" +
3037 " <a class=\"btn btn-default integration\"\n" +
3054 " ng-options=\"i as i.label for i in $ctrl.timeOptions | objectToOrderedArray:'minutes'\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3038 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'jira'})\">\n" +
3055 " class=\"SelectField\"></select>\n" +
3039 " <span class=\"fa fa-fw fa-ticket fa-3x pull-left\"></span>\n" +
3040 " <strong>Jira</strong>\n" +
3056 "\n" +
3041 "\n" +
3042 " <p>Send issues and reports to Jira</p>\n" +
3043 " </a>\n" +
3057 "\n" +
3044 "\n" +
3058 " <div class=\"btn-group\">\n" +
3045 " <a class=\"btn btn-default integration\"\n" +
3059 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3046 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'slack'})\">\n" +
3060 " uib-btn-radio=\"'requests_graphs'\" data-uib-tooltip=\"Requests per second\">\n" +
3047 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3061 " <span class=\"fa fa-line-chart\"></span>\n" +
3048 " <strong>Slack</strong>\n" +
3062 " </button>\n" +
3063 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3064 " uib-btn-radio=\"'response_graphs'\" data-uib-tooltip=\"Average response time\">\n" +
3065 " <span class=\"fa fa-random\"></span>\n" +
3066 " </button>\n" +
3067 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3068 " uib-btn-radio=\"'metrics_graphs'\" data-uib-tooltip=\"Time spent per request\">\n" +
3069 " <span class=\"fa fa-bar-chart-o\"></span>\n" +
3070 " </button>\n" +
3071 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3072 " uib-btn-radio=\"'report_graphs'\" data-uib-tooltip=\"Errors\">\n" +
3073 " <span class=\"fa fa-exclamation-triangle\"></span>\n" +
3074 " </button>\n" +
3075 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3076 " uib-btn-radio=\"'slow_report_graphs'\" data-uib-tooltip=\"Slow reports\">\n" +
3077 " <span class=\"fa fa-clock-o\"></span>\n" +
3078 " </button>\n" +
3079 " </div>\n" +
3080 " </form>\n" +
3081 " <div class=\"clearfix\"></div>\n" +
3082 "\n" +
3049 "\n" +
3083 " <p ng-if=\"$ctrl.loading.series != false\" class=\"text-center\">\n" +
3050 " <p>Receive reports and alerts in your Slack chanels</p>\n" +
3084 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3051 " </a>\n" +
3085 " </p>\n" +
3086 "\n" +
3052 "\n" +
3087 " <div ng-if=\"$ctrl.loading.series == false\">\n" +
3053 " <a class=\"btn btn-default integration\"\n" +
3088 " <div ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\">\n" +
3054 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'webhooks'})\">\n" +
3089 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.requestsChartData\" data-config=\"$ctrl.requestsChartConfig\" update=\"true\">\n" +
3055 " <span class=\"fa fa-fw fa-cloud-upload fa-3x pull-left\"></span>\n" +
3090 " </c3chart>\n" +
3056 " <strong>Webhooks</strong>\n" +
3091 " </div>\n" +
3092 "\n" +
3057 "\n" +
3093 " <div ng-if=\"$ctrl.graphType.selected == 'response_graphs'\">\n" +
3058 " <p>Notify third party API's of your reports and alerts</p>\n" +
3094 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.responseChartData\" data-config=\"$ctrl.responseChartConfig\" update=\"true\">\n" +
3059 " </a>\n" +
3095 " </c3chart>\n" +
3060 " </div>\n" +
3096 " </div>\n" +
3061 " </div>\n" +
3062 "</ui-view>\n"
3063 );
3064
3065
3066 $templateCache.put('components/views/applications-list-view/applications-list-view.html',
3067 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3097 "\n" +
3068 "\n" +
3098 " <div ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\">\n" +
3069 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.applications\">\n" +
3099 " <c3chart data-domid=\"metrics_chart\" data-data=\"$ctrl.metricsChartData\" data-config=\"$ctrl.metricsChartConfig\" update=\"true\">\n" +
3070 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3100 " </c3chart>\n" +
3071 " <div class=\"panel-body\" ng-if=\"$ctrl.applications.length === 0 \">\n" +
3101 " </div>\n" +
3102 " <div ng-if=\"$ctrl.graphType.selected == 'report_graphs'\">\n" +
3103 " <c3chart data-domid=\"reports_chart\" data-data=\"$ctrl.reportChartData\" data-config=\"$ctrl.reportChartConfig\" update=\"true\">\n" +
3104 " </c3chart>\n" +
3105 " </div>\n" +
3106 "\n" +
3072 "\n" +
3107 " <div ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\">\n" +
3073 " <p>You have to create a new application first.</p>\n" +
3108 " <c3chart data-domid=\"slow_reports_chart\" data-data=\"$ctrl.reportSlowChartData\" data-config=\"$ctrl.reportSlowChartConfig\" update=\"true\">\n" +
3109 " </c3chart>\n" +
3110 " </div>\n" +
3111 "\n" +
3074 "\n" +
3112 " <p ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\" class=\"text-center\">\n" +
3075 " </div>\n" +
3113 " <small>Average requests per second from all servers</small>\n" +
3114 " </p>\n" +
3115 "\n" +
3076 "\n" +
3116 " <p ng-if=\"$ctrl.graphType.selected == 'response_graphs'\" class=\"text-center\">\n" +
3077 " <table class=\"table table-striped\" ng-if=\"$ctrl.applications.length > 0\">\n" +
3117 " <small>Average response time from all servers</small>\n" +
3078 " <thead>\n" +
3118 " </p>\n" +
3079 " <tr>\n" +
3080 " <th class=\"resource_name\">Resource Name</th>\n" +
3081 " <th class=\"domains\">Domains</th>\n" +
3082 " <th class=\"options\">Options</th>\n" +
3083 " </tr>\n" +
3084 " </thead>\n" +
3085 " <tbody>\n" +
3086 " <tr class=\"r{{$index+1}}\" ng-repeat=\"application in $ctrl.applications\">\n" +
3087 " <td>{{application.resource_name}}</td>\n" +
3088 " <td>{{application.domains}}</td>\n" +
3089 " <td class=\"options\">\n" +
3090 " <a class=\"btn btn-default\" data-ui-sref=\"applications.update({resourceId:application.resource_id})\" data-toggle=\"tooltip\" title=\"Update application\"><span class=\"fa fa-cog\"></span> Update</a>\n" +
3091 " <a class=\"btn btn-default\" data-ui-sref=\"applications.integrations({resourceId:application.resource_id})\" data-toggle=\"tooltip\" title=\"Manage Integrations\"><span class=\"fa fa-wrench\"></span> Integrations</a>\n" +
3092 " </td>\n" +
3093 " </tr>\n" +
3094 " </tbody>\n" +
3095 " </table>\n" +
3119 "\n" +
3096 "\n" +
3120 " <p ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\" class=\"text-center\">\n" +
3097 "</div>\n"
3121 " <small>Aggregated average time spent per request - broken to layers</small>\n" +
3098 );
3122 " </p>\n" +
3099
3100
3101 $templateCache.put('components/views/applications-purge-logs-view/applications-purge-logs-view.html',
3102 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3123 "\n" +
3103 "\n" +
3124 " <p ng-if=\"$ctrl.graphType.selected == 'report_graphs'\" class=\"text-center\">\n" +
3104 "<div ng-show=\"!$ctrl.loading.applications\">\n" +
3125 " <small>Aggregated reports sent by your application</small>\n" +
3105 " <div class=\"panel panel-default\">\n" +
3126 " </p>\n" +
3106 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3107 " <div class=\"panel-body\">\n" +
3127 "\n" +
3108 "\n" +
3128 " <p ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\" class=\"text-center\">\n" +
3109 " <form method=\"post\" class=\"form-horizontal\" name=\"$ctrl.form\" ng-submit=\"$ctrl.purgeLogs()\">\n" +
3129 " <small>Aggregated slow reports sent by your application</small>\n" +
3110 " <div class=\"form-group\">\n" +
3130 " </p>\n" +
3111 " <label class=\"control-label col-sm-3 col-lg-2\">Application:</label>\n" +
3131 " </div>\n" +
3112 "\n" +
3132 " </div>\n" +
3113 " <div class=\"col-sm-9 col-lg-10 form-inline\">\n" +
3114 " <select ng-model=\"$ctrl.selectedResource\" ng-change=\"$ctrl.getCommonKeys()\"\n" +
3115 " ng-options=\"r.resource_id as r.resource_name for r in $ctrl.applications\" class=\"form-control\"></select>\n" +
3133 " </div>\n" +
3116 " </div>\n" +
3134 " </div>\n" +
3117 " </div>\n" +
3135 "\n" +
3118 "\n" +
3119 " <div class=\"form-group\">\n" +
3120 " <label class=\"control-label col-sm-3 col-lg-2\">Namespace:</label>\n" +
3136 "\n" +
3121 "\n" +
3137 " <div class=\"col-sm-6\">\n" +
3122 " <div class=\"col-sm-9 col-lg-10\">\n" +
3123 " <input type=\"text\" name=\"namespace\" ng-model=\"$ctrl.namespace\"\n" +
3124 " placeholder=\"Namespace to filter on\" uib-typeahead=\"ns for ns in $ctrl.commonNamespaces\"\n" +
3125 " class=\"form-control\">\n" +
3126 " </div>\n" +
3127 " </div>\n" +
3138 "\n" +
3128 "\n" +
3139 " <div id=\"server-container\">\n" +
3129 " <div class=\"form-group\">\n" +
3130 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
3140 "\n" +
3131 "\n" +
3141 " <div ng-if=\"$ctrl.loading.apdex==false\" class=\"text-center m-b-1\">\n" +
3132 " <div class=\"col-sm-8 col-lg-9 \">\n" +
3133 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Purge logs meeting the criteria\">\n" +
3134 " </div>\n" +
3135 " </div>\n" +
3142 "\n" +
3136 "\n" +
3143 " <a data-ui-sref=\"report.list({resource:$ctrl.resource, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"error-rate\">\n" +
3137 " </form>\n" +
3144 " <small>Exceptions</small>\n" +
3138 " </div>\n" +
3145 " <br/>\n" +
3139 " </div>\n" +
3146 " <strong>{{ $ctrl.exceptions|numberToThousands}}</strong>\n" +
3140 "</div>\n"
3147 " <span class=\"fa fa-chevron-right\"></span>\n" +
3141 );
3148 " </a><!--\n" +
3142
3143
3144 $templateCache.put('components/views/applications-update-view/applications-update-view.html',
3145 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application\"></ng-include>\n" +
3149 "\n" +
3146 "\n" +
3150 " --><a data-ui-sref=\"report.list_slow({resource:$ctrl.resource, min_duration:4, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"frustrating-requests\" data-uib-tooltip=\"Requests over 4s\">\n" +
3147 "<div ng-show=\"!$ctrl.loading.application\">\n" +
3151 " <small>Frustrating req.</small>\n" +
3152 " <br/>\n" +
3153 " <strong>{{$ctrl.frustratingRequests|numberToThousands}}</strong>\n" +
3154 " <span class=\"fa fa-chevron-right\"></span>\n" +
3155 " </a><!--\n" +
3156 "\n" +
3148 "\n" +
3157 " --><a data-ui-sref=\"report.list_slow({resource:$ctrl.resource, min_duration:1, max_duration:4, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"tolerated-requests\"\n" +
3149 " <div class=\"panel panel-default\">\n" +
3158 " data-uib-tooltip=\"Requests under 4s\">\n" +
3150 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3159 " <small>Tolerated req.</small>\n" +
3151 " <div class=\"panel-body\">\n" +
3160 " <br/>\n" +
3161 " <strong>{{$ctrl.toleratedRequests|numberToThousands}}</strong>\n" +
3162 " <span class=\"fa fa-chevron-right\"></span>\n" +
3163 " </a><!--\n" +
3164 " \n" +
3165 " --><a class=\"combined-stat text-center\" id=\"satisfying-requests\" data-uib-tooltip=\"Requests under 1s\">\n" +
3166 " <small>Satisfying req.</small>\n" +
3167 " <br/>\n" +
3168 " <strong>{{$ctrl.satisfyingRequests|numberToThousands}}</strong>\n" +
3169 " </a><!--\n" +
3170 "\n" +
3152 "\n" +
3171 " --><a data-ui-sref=\"uptime({resource:$ctrl.resource})\" class=\"combined-stat text-center\" id=\"uptime-stats\" data-uib-tooltip=\"Uptime\">\n" +
3153 " <div class=\"row\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3172 " <small>Uptime</small>\n" +
3154 " <div class=\"col-sm-6\">\n" +
3173 " <br/>\n" +
3174 " <strong>{{$ctrl.uptimeStats}}%</strong>\n" +
3175 " <span class=\"fa fa-chevron-right\"></span>\n" +
3176 " </a>\n" +
3177 "\n" +
3155 "\n" +
3178 " <div class=\"clearfix\"></div>\n" +
3156 " <uib-tabset>\n" +
3179 " </div>\n" +
3157 " <uib-tab>\n" +
3158 " <uib-tab-heading>\n" +
3159 " API keys\n" +
3160 " </uib-tab-heading>\n" +
3180 "\n" +
3161 "\n" +
3181 " <div id=\"apdex-rate\" class=\"m-b-1 panel panel-default\">\n" +
3162 " <p><strong>PRIVATE API KEY:</strong></p>\n" +
3182 " <table class=\"servers table table-striped\">\n" +
3163 " <p>\n" +
3183 " <thead>\n" +
3164 " <div class=\"well well-sm\">{{ $ctrl.resource.api_key }}</div>\n" +
3184 " <tr>\n" +
3165 " </p>\n" +
3185 " <th></th>\n" +
3166 " <p><strong>PUBLIC API KEY</strong> (for javascript clients):</p>\n" +
3186 " <th>Server</th>\n" +
3167 " <p>\n" +
3187 " <th>Apdex\n" +
3168 " <div class=\"well well-sm\">{{ $ctrl.resource.public_key }}</div>\n" +
3188 " <span class=\"fa fa-question-circle\"\n" +
3169 " </p>\n" +
3189 " data-uib-tooltip=\"Application Performance Index - measures viewer satisfaction based on response times and error rates\"></span>\n" +
3170 " <p><small>Your key will be used to identify to which application your data\n" +
3190 " </th>\n" +
3171 " belongs to please keep them private at all times.</small></p>\n" +
3191 " <th>rpm</th>\n" +
3192 " <th>avg. response</th>\n" +
3193 " </tr>\n" +
3194 " </thead>\n" +
3195 " <tbody>\n" +
3196 " <tr ng-if=\"$ctrl.loading.apdex!=false\" class=\"text-center\">\n" +
3197 " <td colspan=\"5\"><span class=\"fa fa-cog fa-spin fa-5x loader\"></span></td>\n" +
3198 " </tr>\n" +
3199 " <tr ng-repeat=\"server in $ctrl.apdexStats\" class=\"{{ server | apdexValue }}\"\n" +
3200 " ng-if=\"$ctrl.loading.apdex==false\">\n" +
3201 " <td><span class=\"fa fa-hdd-o\"></span></td>\n" +
3202 " <td>\n" +
3203 " <small><strong>{{ server.name }}</strong></small>\n" +
3204 " </td>\n" +
3205 " <td class=\"apdex\">\n" +
3206 " <small><strong>{{ server.apdex }} %</strong></small>\n" +
3207 " </td>\n" +
3208 " <td>\n" +
3209 " <small><strong>{{ server.rpm }}rpm</strong></small>\n" +
3210 " </td>\n" +
3211 " <td>\n" +
3212 " <small><strong>{{ server.avg_response_time }}s</strong></small>\n" +
3213 " </td>\n" +
3214 " </tr>\n" +
3215 " </tbody>\n" +
3216 " </table>\n" +
3217 "\n" +
3172 "\n" +
3218 " </div>\n" +
3173 " </uib-tab>\n" +
3219 " </div>\n" +
3220 "\n" +
3174 "\n" +
3175 " <uib-tab>\n" +
3176 " <uib-tab-heading>\n" +
3177 " <span class=\"btn btn-danger btn-xs\"><span class=\"fa fa-exclamation-triangle\"></span></span> Regenerate API keys\n" +
3178 " </uib-tab-heading>\n" +
3179 " <p>Are you sure you want to regenerate API KEY for this application?</p>\n" +
3180 " <p>All client application keys will need to be updated.</p>\n" +
3181 " <form ng-submit=\"$ctrl.regenerateAPIKeys()\" name=\"$ctrl.regenerateAPIKeysForm\" class=\"form-inline\">\n" +
3182 " <data-form-errors errors=\"$ctrl.regenerateAPIKeysForm.ae_validation.password\"></data-form-errors>\n" +
3183 " <div class=\"form-group\">\n" +
3184 " <input type=\"password\" name=\"confirm\"\n" +
3185 " placeholder=\"Enter your password to proceed\" class=\"form-control\" ng-model=\"$ctrl.regenerateAPIKeysPassword\">\n" +
3186 " <input type=\"submit\" class=\"btn btn-danger\" value=\"Confirm\">\n" +
3187 " </div>\n" +
3188 " </form>\n" +
3189 " </uib-tab>\n" +
3190 " </uib-tabset>\n" +
3221 " </div>\n" +
3191 " </div>\n" +
3192 " <div class=\"col-sm-6 text-center\">\n" +
3193 " <h2 class=\"m-t-0\">How to connect your application?</h2>\n" +
3194 " <p>Visit our <a href=\"{{AeConfig.urls.docs}}\"><strong>developer documentation</strong></a> for step-by-step integration instructions.</p>\n" +
3195 " <div class=\"clearfix\"></div>\n" +
3196 " <p class=\"text-center\">\n" +
3197 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/django_small.png\" alt=\"Django Logo\">\n" +
3198 " <img src=\"/static/appenlight/images/logos/pyramid_small.png\" alt=\"Pyramid Logo\">\n" +
3199 " <img src=\"/static/appenlight/images/logos/flask_small.png\" alt=\"Flask Logo\"></a>\n" +
3222 "\n" +
3200 "\n" +
3201 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/js_small.png\" alt=\"Javascript Logo\">\n" +
3202 " <img src=\"/static/appenlight/images/logos/nodejs.png\" alt=\"Node.js\"></a>\n" +
3203 " <img src=\"/static/appenlight/images/logos/ruby_small.png\" alt=\"Ruby Logo\">\n" +
3204 " <img src=\"/static/appenlight/images/logos/php_small.png\" alt=\"PHP Logo\">\n" +
3205 " </a>\n" +
3223 "\n" +
3206 "\n" +
3207 " </p>\n" +
3208 " </div>\n" +
3224 " </div>\n" +
3209 " </div>\n" +
3225 "\n" +
3210 "\n" +
3226 " <div class=\"row\">\n" +
3211 " <hr ng-show=\"$ctrl.resource.resource_id\">\n" +
3227 " <div class=\"col-sm-6\">\n" +
3228 "\n" +
3229 " <div class=\"panel panel-default\">\n" +
3230 " <div class=\"panel-heading position-relative\">\n" +
3231 " <h3 class=\"panel-title\"><span class=\"fa fa-exclamation-triangle\"></span> Newest errors (real-time)\n" +
3232 " </h3>\n" +
3233 " <a tooltip-append-to-body=\"true\" data-uib-tooltip=\"Play/Pause stream\" class=\"btn btn-primary btn-sm pause_stream\" ng-model=\"$ctrl.stream.paused\" uib-btn-checkbox>\n" +
3234 " <span class=\"fa {{stream.paused ? 'fa-play' : 'fa-pause'}}\"></span>\n" +
3235 " </a>\n" +
3236 " <a tooltip-append-to-body=\"true\" data-uib-tooltip=\"Limit reports to current application\" class=\"btn btn-primary btn-sm limit_stream\" ng-model=\"$ctrl.stream.filtered\" uib-btn-checkbox>\n" +
3237 " <span class=\"fa fa-lock\"></span>\n" +
3238 " </a>\n" +
3239 "\n" +
3212 "\n" +
3213 " <form method=\"post\" class=\"form-horizontal\" name=\"$ctrl.BasicForm\" ng-submit=\"$ctrl.updateBasicForm()\" novalidate>\n" +
3214 " <div class=\"form-group\">\n" +
3215 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.resource_name\"></data-form-errors>\n" +
3216 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3217 " Application name\n" +
3218 " <span class=\"required\">*</span>\n" +
3219 " </label>\n" +
3240 "\n" +
3220 "\n" +
3221 " <div class=\" col-sm-8 col-lg-9 \">\n" +
3222 " <input class=\"form-control\" name=\"resource_name\" placeholder=\"Application Name\" type=\"text\" ng-model=\"$ctrl.resource.resource_name\">\n" +
3241 " </div>\n" +
3223 " </div>\n" +
3242 " <div class=\"panel-body\">\n" +
3243 "\n" +
3224 "\n" +
3244 " <p ng-if=\"$ctrl.stream.reports.length === 0\">No new reports</p>\n" +
3245 "\n" +
3225 "\n" +
3246 " <div small-report-list reports=\"$ctrl.stream.reports\" applications=\"$ctrl.applications\"></div>\n" +
3247 " </div>\n" +
3248 " </div>\n" +
3226 " </div>\n" +
3249 " </div>\n" +
3250 "\n" +
3251 " <div class=\"col-sm-6\">\n" +
3252 "\n" +
3227 "\n" +
3253 " <div class=\"panel panel-default\">\n" +
3228 " <div class=\"form-group\">\n" +
3254 " <div class=\"panel-heading\">\n" +
3229 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.domains\"></data-form-errors>\n" +
3255 " <h3 class=\"panel-title\"><span class=\"fa fa-sort-amount-desc\"></span> Request breakdown over {{ $ctrl.timeSpan.label }}</h3>\n" +
3230 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3231 " Domain names for CORS headers\n" +
3232 " </label>\n" +
3233 " <div class=\" col-sm-8 col-lg-9 \">\n" +
3234 " <textarea class=\"form-control\" name=\"domains\" ng-model=\"$ctrl.resource.domains\"></textarea>\n" +
3235 " <p class=\"description\">Required for Javascript error tracking (one line one domain, skip http:// part)</p>\n" +
3256 " </div>\n" +
3236 " </div>\n" +
3257 " <div class=\"panel-body\" id=\"view-breakdown-container\">\n" +
3258 " <p ng-if=\"$ctrl.loading.requestsBreakdown!=false\" class=\"text-center\">\n" +
3259 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3260 " </p>\n" +
3261 "\n" +
3262 " <div class=\"report-list\">\n" +
3263 " <div ng-if=\"$ctrl.loading.requestsBreakdown==false\" ng-repeat=\"view in $ctrl.requestsBreakdown\">\n" +
3264 " <div class=\"view-info\">\n" +
3265 " <div class=\"view-name\">\n" +
3266 " <div class=\"bar\" style=\"width: {{view.percentage}}%\">\n" +
3267 " </div>\n" +
3268 " </div>\n" +
3269 " <strong ng-if=\"view.latest_details.length\">\n" +
3270 " <a data-ui-sref=\"report.list_slow({view_name:view.view_name})\">{{view.view_name}}</a></strong>\n" +
3271 " <strong ng-if=\"!view.latest_details.length\">{{view.view_name}}</strong>\n" +
3272 "\n" +
3273 " <div class=\"stats\">\n" +
3274 " <small>\n" +
3275 " avg. response <strong>{{view.avg_response}}s</strong> in\n" +
3276 " <span class=\"requests\"\n" +
3277 " data-uib-tooltip=\"Requests\"><strong>{{view.requests|numberToThousands}}</strong> requests</span>\n" +
3278 "\n" +
3279 " <span ng-if=\"view.latest_details\">\n" +
3280 " &nbsp;&nbsp; Latest reports:\n" +
3281 " <a ng-repeat=\"d in view.latest_details\" target=\"_blank\" ui-sref=\"report.view_detail({groupId:d.group_id, reportId:d.report_id})\"> <strong>{{$index+1}}</strong></a>\n" +
3282 " </span>\n" +
3283 " </small>\n" +
3284 " </div>\n" +
3285 "\n" +
3286 " </div>\n" +
3287 "\n" +
3237 "\n" +
3288 " </div>\n" +
3289 " </div>\n" +
3290 "\n" +
3238 "\n" +
3239 " </div>\n" +
3240 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3241 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.default_grouping\"></data-form-errors>\n" +
3242 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3243 " Default grouping for errors\n" +
3244 " </label>\n" +
3245 " <div class=\" col-sm-8 col-lg-9 \">\n" +
3246 " <select class=\"form-control\" name=\"default_grouping\" ng-model=\"$ctrl.resource.default_grouping\" ng-options=\"i[0] as i[1] for i in $ctrl.groupingOptions\"></select>\n" +
3247 " </div>\n" +
3291 "\n" +
3248 "\n" +
3249 " </div>\n" +
3250 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3251 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.error_report_threshold\"></data-form-errors>\n" +
3252 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3253 " Alert on error reports\n" +
3254 " <span class=\"required\">*</span>\n" +
3255 " </label>\n" +
3256 " <div class=\" col-sm-8 col-lg-9 \">\n" +
3257 " <input class=\"form-control\" name=\"error_report_threshold\" type=\"text\" ng-model=\"$ctrl.resource.error_report_threshold\">\n" +
3258 " <p class=\"description\">Application requires to send at least this amount of error reports per minute to open alert</p>\n" +
3292 " </div>\n" +
3259 " </div>\n" +
3293 " </div>\n" +
3260 " </div>\n" +
3261 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3262 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.slow_report_threshold\"></data-form-errors>\n" +
3263 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3264 " Alert on slow reports\n" +
3265 " <span class=\"required\">*</span>\n" +
3266 " </label>\n" +
3294 "\n" +
3267 "\n" +
3295 " </div>\n" +
3268 " <div class=\" col-sm-8 col-lg-9 \">\n" +
3296 "\n" +
3269 " <input class=\"form-control\" name=\"slow_report_threshold\" type=\"text\" ng-model=\"$ctrl.resource.slow_report_threshold\">\n" +
3297 " </div>\n" +
3270 " <p class=\"description\">Application requires to send at least this amount of slow reports per minute to open alert</p>\n" +
3298 "\n" +
3299 " <div class=\"row\">\n" +
3300 " <div class=\"col-sm-6\">\n" +
3301 "\n" +
3302 " <div class=\"panel panel-default\">\n" +
3303 " <div class=\"panel-heading\">\n" +
3304 " <h3 class=\"panel-title\">\n" +
3305 " <span class=\"fa fa-exclamation-triangle\"></span> Report groups trending over {{ $ctrl.timeSpan.label }}\n" +
3306 " </h3>\n" +
3307 " </div>\n" +
3271 " </div>\n" +
3308 " <div class=\"panel-body\">\n" +
3272 " </div>\n" +
3309 " <p ng-if=\"$ctrl.loading.reports != false\" class=\"text-center\">\n" +
3273 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3310 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3274 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.allow_permanent_storage\"></data-form-errors>\n" +
3311 " </p>\n" +
3275 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3276 " Permanent logs\n" +
3277 " </label>\n" +
3278 " <div class=\" col-sm-8 col-lg-9\">\n" +
3279 " <input class=\"form-control\" name=\"allow_permanent_storage\" type=\"checkbox\" ng-model=\"$ctrl.resource.allow_permanent_storage\">\n" +
3280 " <p class=\"description\">Allow permanent storage of logs in separate DB partitions (only administrator can enable this feature)</p>\n" +
3281 " </div>\n" +
3282 " </div>\n" +
3283 " <div class=\"form-group\">\n" +
3284 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3312 "\n" +
3285 "\n" +
3313 " <p ng-if=\"$ctrl.trendingReports.length == 0 && $ctrl.loading.reports == false\">\n" +
3286 " </label>\n" +
3314 " No reports found\n" +
3315 " </p>\n" +
3316 "\n" +
3287 "\n" +
3317 " <div small-report-group-list groups=\"$ctrl.trendingReports\" applications=\"$ctrl.applications\" ng-if=\"$ctrl.loading.reports==false\"></div>\n" +
3288 " <div class=\" col-sm-8 col-lg-9 \">\n" +
3289 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.resource.resource_id? 'Update' : 'Create'}} Application\">\n" +
3318 " </div>\n" +
3290 " </div>\n" +
3319 " </div>\n" +
3291 " </div>\n" +
3292 " </form>\n" +
3293 " </div>\n" +
3294 " </div>\n" +
3320 "\n" +
3295 "\n" +
3321 " </div>\n" +
3296 " <div class=\"panel panel-default\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3322 "\n" +
3297 " <div class=\"panel-heading\">\n" +
3323 " <div class=\"col-sm-6\">\n" +
3298 " <h3 class=\"panel-title\">Plugins</h3>\n" +
3299 " </div>\n" +
3300 " <div class=\"panel-body\">\n" +
3324 "\n" +
3301 "\n" +
3302 " <plugin-config resource=\"$ctrl.resource\"\n" +
3303 " section=\"'application.update'\"\n" +
3304 " ng-if=\"$ctrl.resource.resource_id\">\n" +
3305 " </plugin-config>\n" +
3325 "\n" +
3306 "\n" +
3326 " <div class=\"panel panel-default\">\n" +
3307 " </div>\n" +
3327 " <div class=\"panel-heading\">\n" +
3308 " </div>\n" +
3328 " <h3 class=\"panel-title\">\n" +
3329 " Most common slow calls over {{ $ctrl.timeSpan.label }}\n" +
3330 " </h3>\n" +
3331 " </div>\n" +
3332 " <div class=\"panel-body\">\n" +
3333 "\n" +
3309 "\n" +
3334 " <div ng-if=\"$ctrl.loading.slowCalls!=false\" class=\"text-center\">\n" +
3310 " <div class=\"panel panel-default m-t-1\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3335 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3311 " <div class=\"panel-heading\">\n" +
3336 " </div>\n" +
3312 " <h3 class=\"panel-title\">API Testing</h3>\n" +
3313 " </div>\n" +
3314 " <div class=\"panel-body\">\n" +
3315 " <p>Please be sure to add at least one <a data-ui-sref=\"user.alert_channels.email\"><strong>email alert channel</strong></a> for your account.</p>\n" +
3316 " <p>This will enable AppEnlight to send you notification emails about errors inside your $ctrl.</p>\n" +
3317 " <p><strong>After this is done you can use this CURL commands to test APIs:</strong></p>\n" +
3318 " <p>(Please note that the data like execution times is semi randomly generated)</p>\n" +
3319 " <uib-tabset>\n" +
3320 " <uib-tab>\n" +
3321 " <uib-tab-heading>\n" +
3322 " Log API\n" +
3323 " </uib-tab-heading>\n" +
3337 "\n" +
3324 "\n" +
3338 " <table id=\"slow-statements\" ng-if=\"$ctrl.loading.slowCalls==false\">\n" +
3325 " <div class=\"codehilite\">\n" +
3339 " <tbody>\n" +
3326 " <pre class=\"m-a-0\">\n" +
3340 " <tr ng-repeat=\"call in $ctrl.slowCalls\">\n" +
3327 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/logs?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
3341 " <td class=\"occurences\">\n" +
3328 " [\n" +
3342 " <span class=\"occurences\" data-uib-tooltip=\"Occurences\">{{call.occurences|numberToThousands}}</span>\n" +
3329 " {\n" +
3343 " </td>\n" +
3330 " \"log_level\": \"WARNING\",\n" +
3344 " <td class=\"ellipsis\">\n" +
3331 " \"message\": \"OMG ValueError happened\",\n" +
3345 " <small title=\"{{call.statement}}\" class=\"statement\">{{call.statement}}</small>\n" +
3332 " \"namespace\": \"some.namespace.indicator\",\n" +
3346 " <br/>\n" +
3333 " \"request_id\": \"SOME_UUID\",\n" +
3347 " <span class=\"type\">{{call.statement_type}}</span>\n" +
3334 " \"permanent\": false,\n" +
3348 " <span class=\"subtype\">{{call.statement_subtype}}</span>\n" +
3335 " \"primary_key\": \"random_key\",\n" +
3349 " <span class=\"duration\" data-uib-tooltip=\"Average duration\">{{call.total_duration/call.occurences|round:2}}s</span>\n" +
3336 " \"server\": \"some.server.hostname\",\n" +
3350 " <span class=\"report-list\">\n" +
3337 " \"date\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
3351 " Latest reports:\n" +
3338 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]]\n" +
3352 " <a ng-repeat=\"d in call.latest_details\" target=\"_blank\" ui-sref=\"report.view_detail({groupId:d.group_id, reportId:d.report_id})\"> <strong>{{$index+1}}</strong> </a>\n" +
3339 " },\n" +
3353 " </span>\n" +
3340 " {\n" +
3354 " </td>\n" +
3341 " \"log_level\": \"ERROR\",\n" +
3355 " </tr>\n" +
3342 " \"message\": \"OMG ValueError happened2\",\n" +
3356 " </tbody>\n" +
3343 " \"namespace\": \"some.namespace.indicator\",\n" +
3357 " </table>\n" +
3344 " \"request_id\": \"SOME_UUID\",\n" +
3345 " \"permanent\": false,\n" +
3346 " \"server\": \"some.server.hostname\",\n" +
3347 " \"date\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\"\n" +
3348 " }\n" +
3349 " ]'\n" +
3350 " </pre>\n" +
3351 " </div>\n" +
3358 "\n" +
3352 "\n" +
3353 " </uib-tab>\n" +
3359 "\n" +
3354 "\n" +
3360 " </div>\n" +
3355 " <uib-tab>\n" +
3356 " <uib-tab-heading>\n" +
3357 " Report API\n" +
3358 " </uib-tab-heading>\n" +
3359 "\n" +
3360 " <div class=\"codehilite\">\n" +
3361 " <pre class=\"m-a-0\">\n" +
3362 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/reports?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
3363 " [{\n" +
3364 " \"client\": \"your-client-name-python\",\n" +
3365 " \"language\": \"python\",\n" +
3366 " \"view_name\": \"views/foo:bar\",\n" +
3367 " \"server\": \"SERVERNAME/INSTANCENAME\",\n" +
3368 " \"priority\": 5,\n" +
3369 " \"error\": \"OMG ValueError happened\",\n" +
3370 " \"occurences\":1,\n" +
3371 " \"http_status\": 500,\n" +
3372 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]],\n" +
3373 " \"username\": \"USER\",\n" +
3374 " \"url\": \"HTTP://SOMEURL\",\n" +
3375 " \"ip\": \"127.0.0.1\",\n" +
3376 " \"start_time\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
3377 " \"end_time\": \"{{$ctrl.momentJs.utc().milliseconds(0).add(2, 'seconds').toISOString()}}\",\n" +
3378 " \"user_agent\": \"BROWSER_AGENT\",\n" +
3379 " \"extra\": [[\"message\",\"CUSTOM MESSAGE\"], [\"custom_value\", \"some payload\"]],\n" +
3380 " \"request_id\": \"SOME_UUID\",\n" +
3381 " \"request\": {\"REQUEST_METHOD\": \"GET\",\n" +
3382 " \"PATH_INFO\": \"/FOO/BAR\",\n" +
3383 " \"POST\": {\"FOO\":\"BAZ\",\"XXX\":\"YYY\"}\n" +
3384 " },\n" +
3385 " \"slow_calls\":[{\n" +
3386 " \"start\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
3387 " \"end\": \"{{$ctrl.momentJs.utc().milliseconds(0).add(1, 'seconds').toISOString()}}\",\n" +
3388 " \"type\": \"sql\",\n" +
3389 " \"subtype\": \"postgresql\",\n" +
3390 " \"parameters\": [\"QPARAM1\",\"QPARAM2\",\"QPARAMX\"],\n" +
3391 " \"statement\": \"QUERY\"\n" +
3392 " }],\n" +
3393 " \"request_stats\": {\n" +
3394 " \"main\": 2.50779,\n" +
3395 " \"nosql\": 0.01008,\n" +
3396 " \"nosql_calls\": 17.0,\n" +
3397 " \"remote\": 0.0,\n" +
3398 " \"remote_calls\": 0.0,\n" +
3399 " \"sql\": 1,\n" +
3400 " \"sql_calls\": 1.0,\n" +
3401 " \"tmpl\": 0.0,\n" +
3402 " \"tmpl_calls\": 0.0,\n" +
3403 " \"custom\": 0.0,\n" +
3404 " \"custom_calls\": 0.0\n" +
3405 " },\n" +
3406 " \"traceback\": [\n" +
3407 " {\"cline\": \"return foo_bar_baz(1,2,3)\",\n" +
3408 " \"file\": \"somedir/somefile.py\",\n" +
3409 " \"fn\": \"somefunction\",\n" +
3410 " \"line\": 454,\n" +
3411 " \"vars\": [[\"a_list\",\n" +
3412 " [\"1\",2,\"4\",\"5\",6]],\n" +
3413 " [\"b\", {\"1\": \"2\", \"ccc\": \"ddd\", \"1\": \"a\"}],\n" +
3414 " [\"obj\", \"object object at 0x7f0030853dc0\"]]\n" +
3415 " },\n" +
3416 " {\"cline\": \"OMG ValueError happened\",\n" +
3417 " \"file\": \"\",\n" +
3418 " \"fn\": \"\",\n" +
3419 " \"line\": \"\",\n" +
3420 " \"vars\": []}\n" +
3421 " ]\n" +
3422 " }]'\n" +
3423 " </pre>\n" +
3361 " </div>\n" +
3424 " </div>\n" +
3362 "\n" +
3425 "\n" +
3426 " </uib-tab>\n" +
3363 "\n" +
3427 "\n" +
3364 " </div>\n" +
3428 " <uib-tab>\n" +
3365 "\n" +
3429 "\n" +
3366 " </div>\n" +
3430 " <uib-tab-heading>\n" +
3367 " </div>\n" +
3431 " Metrics API\n" +
3368 " </div>\n" +
3432 " </uib-tab-heading>\n" +
3369 "</div>\n"
3370 );
3371
3372
3373 $templateCache.put('components/views/logs-browser/logs-browser.html',
3374 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.isLoading.logs\"></ng-include>\n" +
3375 "\n" +
3433 "\n" +
3376 "<div ng-if=\"$ctrl.isLoading.logs === false\">\n" +
3434 " <div class=\"codehilite\">\n" +
3435 " <pre class=\"m-a-0\">\n" +
3436 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/general_metrics?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
3437 " [{\n" +
3438 " \"namespace\": \"some.monitor\",\n" +
3439 " \"timestamp\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
3440 " \"server_name\": \"server.name\",\n" +
3441 " \"tags\": [[\"value1\", 15.7], [\"value2\", 26]]}]'\n" +
3442 " </pre>\n" +
3443 " </div>\n" +
3377 "\n" +
3444 "\n" +
3378 " <p class=\"search-params\">\n" +
3445 " </uib-tab>\n" +
3379 " <strong>Search params:</strong>\n" +
3380 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
3381 " <strong>{{tag.type}}</strong>\n" +
3382 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
3383 "\n" +
3446 "\n" +
3384 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
3447 " <uib-tab>\n" +
3385 " </span>\n" +
3386 " </p>\n" +
3387 "\n" +
3448 "\n" +
3388 " <p>\n" +
3449 " <uib-tab-heading>\n" +
3450 " Request Stats API\n" +
3451 " </uib-tab-heading>\n" +
3389 "\n" +
3452 "\n" +
3390 " <script type=\"text/ng-template\" id=\"SearchTypeAheadUrl.html\">\n" +
3453 " <div class=\"codehilite\">\n" +
3454 " <pre class=\"m-a-0\">\n" +
3455 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/request_stats?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
3456 " [{\"server\": \"some.server.hostname\",\n" +
3457 " \"timestamp\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
3458 " \"metrics\": [[\"dir/module:func\",\n" +
3459 " {\"custom\": 0.0,\n" +
3460 " \"custom_calls\": 0,\n" +
3461 " \"main\": 0.01664,\n" +
3462 " \"nosql\": 0.00061,\n" +
3463 " \"nosql_calls\": 23,\n" +
3464 " \"remote\": 0.0,\n" +
3465 " \"remote_calls\": 0,\n" +
3466 " \"requests\": 1,\n" +
3467 " \"sql\": 0.00105,\n" +
3468 " \"sql_calls\": 2,\n" +
3469 " \"tmpl\": 0.0,\n" +
3470 " \"tmpl_calls\": 0}],\n" +
3471 " [\"SomeView.function\",\n" +
3472 " {\"custom\": 0.0,\n" +
3473 " \"custom_calls\": 0,\n" +
3474 " \"main\": 0.647261,\n" +
3475 " \"nosql\": 0.306554,\n" +
3476 " \"nosql_calls\": 140,\n" +
3477 " \"remote\": 0.0,\n" +
3478 " \"remote_calls\": 0,\n" +
3479 " \"requests\": 28,\n" +
3480 " \"sql\": 0.0,\n" +
3481 " \"sql_calls\": 0,\n" +
3482 " \"tmpl\": 0.0,\n" +
3483 " \"tmpl_calls\": 0}]]\n" +
3484 " }]'\n" +
3485 " </pre>\n" +
3486 " </div>\n" +
3391 "\n" +
3487 "\n" +
3392 " </script>\n" +
3488 " </uib-tab>\n" +
3393 "\n" +
3489 "\n" +
3394 " <form class=\"form\">\n" +
3490 " </uib-tabset>\n" +
3395 " <div class=\"typeahead-tags\">\n" +
3396 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter logs for events, filter by servers, namespaces, levels.\"\n" +
3397 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
3398 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:$ctrl.aheadFilter\"\n" +
3399 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
3400 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
3401 " </div>\n" +
3402 " </form>\n" +
3403 "\n" +
3491 "\n" +
3404 " <div class=\"well animate-show position-absolute increse-zindex\" ng-if=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\">\n" +
3492 " </div>\n" +
3405 " <uib-datepicker></uib-datepicker>\n" +
3406 " </div>\n" +
3493 " </div>\n" +
3407 "\n" +
3494 "\n" +
3408 " </p>\n" +
3495 " <permissions-form resource=\"$ctrl.resource\" current-permissions=\"$ctrl.resource.current_permissions\"\n" +
3409 "\n" +
3496 " possible-permissions=\"$ctrl.resource.possible_permissions\" ng-if=\"$ctrl.resource.resource_id\"></permissions-form>\n" +
3410 " <div class=\"panel\">\n" +
3411 "\n" +
3497 "\n" +
3498 " <div class=\"panel panel-info\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3499 " <div class=\"panel-heading\">\n" +
3500 " <h3 class=\"panel-title\">Postprocessing</h3>\n" +
3501 " </div>\n" +
3412 " <div class=\"panel-body\">\n" +
3502 " <div class=\"panel-body\">\n" +
3413 " <c3chart data-domid=\"log_events_chart\" data-data=\"$ctrl.logEventsChartData\" data-config=\"$ctrl.logEventsChartConfig\">\n" +
3503 " <p>This section allows you influence the rating of report groups - if rule is matched once its not executed anymore</p>\n" +
3414 " </c3chart>\n" +
3504 "\n" +
3505 " <p>\n" +
3506 " <a class=\"btn btn-info\" ng-click=\"$ctrl.addRule()\"><span class=\"fa fa-plus-circle\"></span> Add rule</a>\n" +
3507 " </p>\n" +
3508 "\n" +
3509 " <post-process-action action=\"action\" resource=\"$ctrl.resource\" ng-repeat=\"action in $ctrl.resource.postprocessing_rules\"></post-process-action>\n" +
3415 " </div>\n" +
3510 " </div>\n" +
3416 " </div>\n" +
3511 " </div>\n" +
3417 "\n" +
3512 "\n" +
3513 " <div class=\"panel panel-danger\" ng-show=\"$ctrl.resource.resource_id\">\n" +
3514 " <div class=\"panel-heading\">\n" +
3515 " <h3 class=\"panel-title\">Administration</h3>\n" +
3516 " </div>\n" +
3517 " <div class=\"panel-body\">\n" +
3518 " <h2>Transfer ownership</h2>\n" +
3519 " <p>Please note that by transfering ownership you WILL lose access to the application data and new owner needs to give you access permission</p>\n" +
3520 " <div class=\"confirmation_form\" ng-submit=\"$ctrl.transferApplication()\">\n" +
3521 " <form class=\"form-horizontal\" name=\"$ctrl.formTransfer\">\n" +
3522 " <div class=\"form-group\">\n" +
3523 " <data-form-errors errors=\"$ctrl.formTransfer.ae_validation.password\"></data-form-errors>\n" +
3524 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3525 " Password\n" +
3526 " </label>\n" +
3527 " <div class=\"col-sm-8 col-lg-9\">\n" +
3528 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"$ctrl.formTransferModel.password\">\n" +
3529 " </div>\n" +
3530 " </div>\n" +
3531 " <div class=\"form-group\">\n" +
3532 " <data-form-errors errors=\"$ctrl.formTransfer.ae_validation.user_name\"></data-form-errors>\n" +
3533 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3534 " New owners username\n" +
3535 " </label>\n" +
3536 " <div class=\"col-sm-8 col-lg-9\">\n" +
3537 " <input class=\"form-control\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.formTransferModel.user_name\">\n" +
3538 " </div>\n" +
3539 " </div>\n" +
3540 " <div class=\"form-group\">\n" +
3541 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3542 " </label>\n" +
3543 " <div class=\"col-sm-8 col-lg-9\">\n" +
3544 " <button class=\"btn btn-danger\">\n" +
3545 " <span class=\"fa fa-user-plus\"></span>\n" +
3546 " Transfer ownership of application\n" +
3547 " </button>\n" +
3548 " </div>\n" +
3549 " </div>\n" +
3550 " </form>\n" +
3551 " </div>\n" +
3418 "\n" +
3552 "\n" +
3419 " <div class=\"text-center\">\n" +
3553 " <hr/>\n" +
3420 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
3421 " ng-change=\"$ctrl.paginationChange()\"\n" +
3422 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
3423 " </div>\n" +
3424 "\n" +
3554 "\n" +
3425 " <div class=\"panel panel-default\">\n" +
3555 " <h2>Remove application</h2>\n" +
3556 " <p><strong>This operation will wipe out all data from database - there is no undo.</strong></p>\n" +
3426 "\n" +
3557 "\n" +
3427 " <table class=\"table table-striped log-list\">\n" +
3558 " <div class=\"confirmation_form\">\n" +
3428 " <caption>Logs</caption>\n" +
3559 " <form class=\"form-horizontal\" name=\"$ctrl.formDelete\" ng-submit=\"$ctrl.deleteApplication()\">\n" +
3429 " <thead>\n" +
3560 " <div class=\"form-group\">\n" +
3430 " <tr>\n" +
3561 " <data-form-errors errors=\"$ctrl.formDelete.ae_validation.password\"></data-form-errors>\n" +
3431 " <th class=\"c1 resource\">Application</th>\n" +
3562 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3432 " <th class=\"c2 message\">Message</th>\n" +
3563 " Password\n" +
3433 " <th class=\"c3 when\">When</th>\n" +
3564 " </label>\n" +
3434 " </tr>\n" +
3565 " <div class=\"col-sm-8 col-lg-9\">\n" +
3435 " </thead>\n" +
3566 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"$ctrl.formDeleteModel.password\">\n" +
3436 " <tbody>\n" +
3567 " </div>\n" +
3437 " <tr ng-repeat=\"log in $ctrl.logsPage track by log.log_id\" class=\"{{$odd ? 'odd' : 'even'}}\">\n" +
3568 " </div>\n" +
3438 " <td class=\"c1\">\n" +
3569 " <div class=\"form-group\">\n" +
3439 " <a class=\"tag application\" ng-click=\"$ctrl.addSearchTag({type:'resource', value:log.resource_id})\">\n" +
3570 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3440 " <span class=\"name\">{{log.resource_name}}</span></a>\n" +
3441 " </td>\n" +
3442 " <td class=\"c2\">\n" +
3443 " <a class=\"tag {{log.log_level|lowercase}}\" ng-click=\"$ctrl.addSearchTag({type:'level', value:log.log_level})\">\n" +
3444 " <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
3445 " <a class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:'namespace', value:log.namespace})\">\n" +
3446 " <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
3447 " <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:tag, value:value})\">\n" +
3448 " <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
3449 " <div class=\"log\">{{log.message}}</div>\n" +
3450 " </td>\n" +
3451 " <td class=\"c3 when\">\n" +
3452 " <a ng-click=\"$ctrl.filterId(log)\" data-uib-tooltip=\"{{log.timestamp}}\">\n" +
3453 " <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
3454 " </a>\n" +
3455 " </td>\n" +
3456 " </tr>\n" +
3457 "\n" +
3458 " </tbody>\n" +
3459 " </table>\n" +
3460 "\n" +
3461 " </div>\n" +
3462 "\n" +
3571 "\n" +
3463 " <div class=\"text-center\">\n" +
3572 " </label>\n" +
3464 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
3573 " <div class=\"col-sm-8 col-lg-9\">\n" +
3465 " ng-change=\"$ctrl.paginationChange()\"\n" +
3574 " <button class=\"btn btn-danger\">\n" +
3466 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
3575 " <span class=\"fa fa-trash-o\"></span>\n" +
3576 " Delete my application\n" +
3577 " </button>\n" +
3578 " </div>\n" +
3579 " </div>\n" +
3580 " </form>\n" +
3581 " </div>\n" +
3582 " </div>\n" +
3467 " </div>\n" +
3583 " </div>\n" +
3468 "\n" +
3469 "</div>\n"
3584 "</div>\n"
3470 );
3585 );
3471
3586
3472
3587
3473 $templateCache.put('components/views/settings-view/settings-view.html',
3588 $templateCache.put('components/views/event-browser/event-browser.html',
3474 "<div class=\"row\">\n" +
3589 "<div class=\"panel panel-default\">\n" +
3475 " <div class=\"col-sm-3\" id=\"menu\">\n" +
3590 " <div class=\"panel-body\">\n" +
3476 " <div class=\"panel panel-default\">\n" +
3477 " <div class=\"panel-heading\">Applications</div>\n" +
3478 " <ul class=\"list-group\">\n" +
3479 " <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" +
3480 " <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" +
3481 " <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" +
3482 " </ul>\n" +
3483 " </div>\n" +
3484 "\n" +
3485 "\n" +
3591 "\n" +
3486 " <div class=\"panel panel-default\">\n" +
3592 " <h1>Event history</h1>\n" +
3487 " <div class=\"panel-heading\">Settings</div>\n" +
3488 " <ul class=\"list-group\">\n" +
3489 " <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" +
3490 " <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" +
3491 " <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" +
3492 " <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" +
3493 " </ul>\n" +
3494 " </div>\n" +
3495 "\n" +
3593 "\n" +
3496 " <div class=\"panel panel-default\">\n" +
3594 " <table class=\"table table-striped event-table\">\n" +
3497 " <div class=\"panel-heading\">Notifications</div>\n" +
3595 " <tr ng-repeat=\"event in $ctrl.events track by event.id\">\n" +
3498 " <ul class=\"list-group\">\n" +
3596 " <td class=\"text-center icons\">\n" +
3499 " <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" +
3597 " <span ng-if=\"event.event_type === 1\" class=\"fa fa-exclamation-triangle fa-2x\" style=\"color:orangered\"></span>\n" +
3500 " <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" +
3598 " <span ng-if=\"event.event_type === 3\" class=\"fa fa-clock-o fa-2x\" style=\"color:darkorange\"></span>\n" +
3501 " </ul>\n" +
3599 " <span ng-if=\"event.event_type === 7\" class=\"fa fa-question-circle fa-2x\" style=\"color:dimgrey\"></span>\n" +
3502 " </div>\n" +
3600 " <span ng-if=\"event.event_type === 9\" class=\"fa fa-line-chart fa-2x\" style=\"color:green\"></span>\n" +
3503 " </div>\n" +
3601 " </td>\n" +
3602 " <td>\n" +
3603 " <p>For <strong>{{ event.resource_name }}</strong></p>\n" +
3504 "\n" +
3604 "\n" +
3505 " <div class=\"col-sm-9\" ui-view></div>\n" +
3605 " <p>{{ event.text }}</p>\n" +
3506 "</div>\n"
3606 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\"> created:\n" +
3507 );
3607 " <iso-to-relative-time time=\"{{event.start_date}}\"/>\n" +
3508
3608 " </small>\n" +
3509
3609 " <small class=\"date\" ng-show=\"event.end_date\" data-uib-tooltip=\"{{event.end_date}}\"> | closed:\n" +
3510 $templateCache.put('components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
3610 " <iso-to-relative-time time=\"{{event.end_date}}\"/>\n" +
3511 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.email\"></ng-include>\n" +
3611 " </small>\n" +
3612 " </td>\n" +
3613 " <td class=\"options\">\n" +
3512 "\n" +
3614 "\n" +
3513 "<div ng-show=\"!$ctrl.loading.email\">\n" +
3615 " <span class=\"dropdown pull-right\" ng-if=\"event.status === 1\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3616 " <a class=\"dropdown-toggle btn btn-danger\" data-uib-dropdown-toggle>\n" +
3617 " <span class=\"fa fa-exclamation-circle\"></span>\n" +
3618 " </a>\n" +
3619 " <ul class=\"dropdown-menu\">\n" +
3620 " <li>\n" +
3621 " <a ng-click=\"$ctrl.closeEvent(event)\">Close event</a>\n" +
3622 " <a>Do nothing</a>\n" +
3623 " </li>\n" +
3624 " </ul>\n" +
3625 " </span>\n" +
3514 "\n" +
3626 "\n" +
3515 " <div class=\"panel panel-default\">\n" +
3627 " </td>\n" +
3516 " <div class=\"panel-heading\" ng-include=\"'templates/user/breadcrumbs.html'\"></div>\n" +
3628 " </tr>\n" +
3517 " <div class=\"panel-body\">\n" +
3629 " </table>\n" +
3518 " <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>\n" +
3519 " <form class=\"form-horizontal\" name=\"$ctrl.channelForm\" ng-submit=\"$ctrl.createChannel()\">\n" +
3520 " <div class=\"form-group\" id=\"row-email\">\n" +
3521 " <data-form-errors errors=\"$ctrl.channelForm.ae_validation.email\"></data-form-errors>\n" +
3522 " <label id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3523 " Email Address\n" +
3524 " <span class=\"required\">*</span>\n" +
3525 " </label>\n" +
3526 " <div class=\"col-sm-8 col-lg-9\">\n" +
3527 " <input class=\"form-control\" type=\"text\" ng-model=\"$ctrl.form.email\">\n" +
3528 " </div>\n" +
3529 " </div>\n" +
3530 " <div class=\"form-group\">\n" +
3531 " <label for=\"submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3532 " </label>\n" +
3533 " <div class=\"col-sm-8 col-lg-9\">\n" +
3534 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Add email channel\">\n" +
3535 " </div>\n" +
3536 " </div>\n" +
3537 " </form>\n" +
3538 " </div>\n" +
3539 " </div>\n" +
3630 " </div>\n" +
3540 "</div>\n"
3631 "</div>\n"
3541 );
3632 );
3542
3633
3543
3634
3544 $templateCache.put('components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
3635 $templateCache.put('components/views/index-dashboard/index-dashboard.html',
3545 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.channels || $ctrl.loading.applications\"></ng-include>\n" +
3636 "<style type=\"text/css\">\n" +
3637 " #metrics_chart .c3-line {\n" +
3638 " stroke-width: 0px;\n" +
3639 " }\n" +
3546 "\n" +
3640 "\n" +
3547 "<div ng-if=\"!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions\">\n" +
3641 " #metrics_chart .c3-area {\n" +
3642 " stroke-width: 0;\n" +
3643 " opacity: 0.75;\n" +
3644 " }\n" +
3645 "</style>\n" +
3548 "\n" +
3646 "\n" +
3549 " <div class=\"panel panel-default\">\n" +
3647 "<div class=\"row\">\n" +
3550 " <div class=\"panel-heading\" ng-include=\"'templates/user/breadcrumbs.html'\"></div>\n" +
3648 " <div class=\"col-sm-12 dashboard\" id=\"content\">\n" +
3551 " <div class=\"panel-body\">\n" +
3649 " <div ng-if=\"!$ctrl.stateHolder.AeUser.applications.length\">\n" +
3552 " <h1>Report alert rules</h1>\n" +
3553 " <p>\n" +
3554 " <a class=\"btn btn-info\" ng-click=\"$ctrl.addAction()\"><span class=\"fa fa-plus-circle\"></span> Add top-level rule</a>\n" +
3555 " </p>\n" +
3556 "\n" +
3650 "\n" +
3557 " <report-alert-action action=\"action\" rule-definitions=\"$ctrl.ruleDefinitions\"\n" +
3651 " <div ng-include=\"'templates/quickstart.html'\"></div>\n" +
3558 " possible-channels=\"$ctrl.alertChannels\"\n" +
3559 " actions=\"$ctrl.alertActions\" applications=\"$ctrl.applications\"\n" +
3560 " ng-repeat=\"action in $ctrl.alertActions | filter: {type:'report'}\"></report-alert-action>\n" +
3561 "\n" +
3652 "\n" +
3562 " </div>\n" +
3653 " </div>\n" +
3563 " </div>\n" +
3564 "\n" +
3565 " <div class=\"panel panel-default\">\n" +
3566 " <div class=\"panel-body\">\n" +
3567 " <h1>Alert channels</h1>\n" +
3568 "\n" +
3654 "\n" +
3569 " <p>Here you can configure your <em>alert channels</em>.</p>\n" +
3655 " <div ng-if=\"$ctrl.stateHolder.AeUser.applications.length\">\n" +
3570 "\n" +
3656 "\n" +
3571 " <p>An alert channel serves as means of delivery of notifications about important events that happen in your applications.</p>\n" +
3657 " <div class=\"row\">\n" +
3658 " <div class=\"col-sm-6\">\n" +
3659 " <div class=\"panel panel-default\">\n" +
3660 " <div class=\"panel-body\">\n" +
3661 " <form class=\"graph-type form-inline\">\n" +
3662 " <select ng-model=\"$ctrl.resource\" ng-options=\"r.resource_id as r.resource_name for r in $ctrl.stateHolder.AeUser.applications\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3663 " class=\"SelectField form-control input-sm slim-input\"></select>\n" +
3572 "\n" +
3664 "\n" +
3573 " <div class=\"alert alert-success\">You can add more integrations that support different alert channels via application management panel.</div>\n" +
3665 " <select class=\"SelectField form-control input-sm slim-input\" ng-model=\"$ctrl.timeSpan\"\n" +
3666 " ng-options=\"i as i.label for i in $ctrl.timeOptions | objectToOrderedArray:'minutes'\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3667 " class=\"SelectField\"></select>\n" +
3574 "\n" +
3668 "\n" +
3575 " <table class=\"table table-striped\">\n" +
3576 " <tr ng-repeat=\"channel in $ctrl.alertChannels\" class=\"animate-repeat\">\n" +
3577 " <td><strong>{{ channel.channel_visible_value }}</strong></td>\n" +
3578 " <td class=\"text-right\">\n" +
3579 " <span class=\"btn btn-default\" data-uib-tooltip=\"Channel is {{ channel.channel_validated? '' :'NOT' }} validated\" tooltip-append-to-body=\"true\"\n" +
3580 " ng-class=\"{dim:!channel.channel_validated}\">\n" +
3581 " <span class=\"fa\" ng-class=\"{'fa-check-circle':channel.channel_validated, 'fa-times-circle':!channel.channel_validated}\"></span>\n" +
3582 " </span>\n" +
3583 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.send_alerts ? 'OFF' : 'ON' }} alerting on this chanel\"\n" +
3584 " ng-click=\"$ctrl.updateChannel(channel,'send_alerts')\" ng-class=\"{dim:!channel.send_alerts}\" tooltip-append-to-body=\"true\">\n" +
3585 " <span class=\"fa fa-rss\"></span> Alerts\n" +
3586 " </a>\n" +
3587 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.daily_digest ? 'OFF' : 'ON' }} daily digests on this channel\"\n" +
3588 " ng-click=\"$ctrl.updateChannel(channel,'daily_digest')\" ng-class=\"{dim:!channel.daily_digest}\" tooltip-append-to-body=\"true\">\n" +
3589 " <span class=\"fa fa-envelope\"></span> Daily digests\n" +
3590 " </a>\n" +
3591 "\n" +
3669 "\n" +
3592 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3670 " <div class=\"btn-group\">\n" +
3593 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove</a>\n" +
3671 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3594 " <ul class=\"dropdown-menu\">\n" +
3672 " uib-btn-radio=\"'requests_graphs'\" data-uib-tooltip=\"Requests per second\">\n" +
3595 " <li><a>No</a></li>\n" +
3673 " <span class=\"fa fa-line-chart\"></span>\n" +
3596 " <li><a ng-click=\"$ctrl.removeChannel(channel)\">Yes</a></li>\n" +
3674 " </button>\n" +
3597 " </ul>\n" +
3675 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3598 " </span>\n" +
3676 " uib-btn-radio=\"'response_graphs'\" data-uib-tooltip=\"Average response time\">\n" +
3677 " <span class=\"fa fa-random\"></span>\n" +
3678 " </button>\n" +
3679 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3680 " uib-btn-radio=\"'metrics_graphs'\" data-uib-tooltip=\"Time spent per request\">\n" +
3681 " <span class=\"fa fa-bar-chart-o\"></span>\n" +
3682 " </button>\n" +
3683 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3684 " uib-btn-radio=\"'report_graphs'\" data-uib-tooltip=\"Errors\">\n" +
3685 " <span class=\"fa fa-exclamation-triangle\"></span>\n" +
3686 " </button>\n" +
3687 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
3688 " uib-btn-radio=\"'slow_report_graphs'\" data-uib-tooltip=\"Slow reports\">\n" +
3689 " <span class=\"fa fa-clock-o\"></span>\n" +
3690 " </button>\n" +
3691 " </div>\n" +
3692 " </form>\n" +
3693 " <div class=\"clearfix\"></div>\n" +
3599 "\n" +
3694 "\n" +
3600 " </td>\n" +
3695 " <p ng-if=\"$ctrl.loading.series != false\" class=\"text-center\">\n" +
3601 " </tr>\n" +
3696 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3602 " </table>\n" +
3697 " </p>\n" +
3603 "\n" +
3698 "\n" +
3604 " </div>\n" +
3699 " <div ng-if=\"$ctrl.loading.series == false\">\n" +
3605 " </div>\n" +
3700 " <div ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\">\n" +
3701 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.requestsChartData\" data-config=\"$ctrl.requestsChartConfig\" update=\"true\">\n" +
3702 " </c3chart>\n" +
3703 " </div>\n" +
3606 "\n" +
3704 "\n" +
3607 "</div>\n"
3705 " <div ng-if=\"$ctrl.graphType.selected == 'response_graphs'\">\n" +
3608 );
3706 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.responseChartData\" data-config=\"$ctrl.responseChartConfig\" update=\"true\">\n" +
3609
3707 " </c3chart>\n" +
3610
3708 " </div>\n" +
3611 $templateCache.put('components/views/user-auth-tokens-view/user-auth-tokens-view.html',
3612 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.tokens\"></ng-include>\n" +
3613 "\n" +
3709 "\n" +
3614 "<div ng-show=\"!$ctrl.loading.tokens\">\n" +
3710 " <div ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\">\n" +
3711 " <c3chart data-domid=\"metrics_chart\" data-data=\"$ctrl.metricsChartData\" data-config=\"$ctrl.metricsChartConfig\" update=\"true\">\n" +
3712 " </c3chart>\n" +
3713 " </div>\n" +
3714 " <div ng-if=\"$ctrl.graphType.selected == 'report_graphs'\">\n" +
3715 " <c3chart data-domid=\"reports_chart\" data-data=\"$ctrl.reportChartData\" data-config=\"$ctrl.reportChartConfig\" update=\"true\">\n" +
3716 " </c3chart>\n" +
3717 " </div>\n" +
3615 "\n" +
3718 "\n" +
3616 " <div class=\"panel panel-default\">\n" +
3719 " <div ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\">\n" +
3617 " <div class=\"panel-heading\" ng-include=\"'templates/user/breadcrumbs.html'\"></div>\n" +
3720 " <c3chart data-domid=\"slow_reports_chart\" data-data=\"$ctrl.reportSlowChartData\" data-config=\"$ctrl.reportSlowChartConfig\" update=\"true\">\n" +
3721 " </c3chart>\n" +
3722 " </div>\n" +
3618 "\n" +
3723 "\n" +
3619 " <div class=\"panel-body\">\n" +
3724 " <p ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\" class=\"text-center\">\n" +
3725 " <small>Average requests per second from all servers</small>\n" +
3726 " </p>\n" +
3620 "\n" +
3727 "\n" +
3621 " <div class=\"alert alert-success\">You can use those tokens to authenticate yourself when performing various API calls</div>\n" +
3728 " <p ng-if=\"$ctrl.graphType.selected == 'response_graphs'\" class=\"text-center\">\n" +
3729 " <small>Average response time from all servers</small>\n" +
3730 " </p>\n" +
3622 "\n" +
3731 "\n" +
3623 " <hr/>\n" +
3732 " <p ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\" class=\"text-center\">\n" +
3733 " <small>Aggregated average time spent per request - broken to layers</small>\n" +
3734 " </p>\n" +
3624 "\n" +
3735 "\n" +
3625 " <form method=\"post\" class=\"form-inline\" name=\"$ctrl.TokenForm\" ng-submit=\"$ctrl.addToken()\" novalidate>\n" +
3736 " <p ng-if=\"$ctrl.graphType.selected == 'report_graphs'\" class=\"text-center\">\n" +
3626 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.description\"></data-form-errors>\n" +
3737 " <small>Aggregated reports sent by your application</small>\n" +
3627 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.expires\"></data-form-errors>\n" +
3738 " </p>\n" +
3628 " <div class=\"form-group\">\n" +
3739 "\n" +
3629 " <label>\n" +
3740 " <p ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\" class=\"text-center\">\n" +
3630 " Description\n" +
3741 " <small>Aggregated slow reports sent by your application</small>\n" +
3631 " </label>\n" +
3742 " </p>\n" +
3632 " <input class=\"form-control\" name=\"description\" placeholder=\"Token description\" type=\"text\" ng-model=\"$ctrl.form.description\">\n" +
3743 " </div>\n" +
3633 " </div>\n" +
3744 " </div>\n" +
3634 " <div class=\"form-group\">\n" +
3745 " </div>\n" +
3635 " <label>\n" +
3636 " Expires\n" +
3637 " </label>\n" +
3638 " <select class=\"form-control\" ng-model=\"$ctrl.form.expires\" ng-options=\"i.key as i.label for i in $ctrl.expireOptions | objectToOrderedArray:'minutes'\">\n" +
3639 " <option value=\"\">Never</option>\n" +
3640 " </select>\n" +
3641 " </div>\n" +
3642 " <div class=\"form-group\">\n" +
3643 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3644 " </label>\n" +
3645 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Create Token\">\n" +
3646 " </div>\n" +
3746 " </div>\n" +
3647 " </form>\n" +
3648 "\n" +
3747 "\n" +
3649 " </div>\n" +
3650 "\n" +
3748 "\n" +
3749 " <div class=\"col-sm-6\">\n" +
3651 "\n" +
3750 "\n" +
3652 " </div>\n" +
3751 " <div id=\"server-container\">\n" +
3653 "\n" +
3752 "\n" +
3654 " <div class=\"panel panel-default\">\n" +
3753 " <div ng-if=\"$ctrl.loading.apdex==false\" class=\"text-center m-b-1\">\n" +
3655 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.tokens\" class=\"table table-striped\">\n" +
3656 " <caption>Your current tokens</caption>\n" +
3657 " <thead>\n" +
3658 " <tr>\n" +
3659 " <th st-sort=\"description\"><a>Description</a></th>\n" +
3660 " <th class=\"created\"><a>Created</a></th>\n" +
3661 " <th class=\"expires\"><a>Expires</a></th>\n" +
3662 " <th class=\"options\"></th>\n" +
3663 " </tr>\n" +
3664 " <tr>\n" +
3665 " <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3666 " <th></th>\n" +
3667 " <th></th>\n" +
3668 " <th></th>\n" +
3669 " </tr>\n" +
3670 " </thead>\n" +
3671 " <tbody>\n" +
3672 "\n" +
3754 "\n" +
3673 " <tr ng-repeat=\"token in displayedCollection\">\n" +
3755 " <a data-ui-sref=\"report.list({resource:$ctrl.resource, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"error-rate\">\n" +
3674 " <td><p>{{token.description}}</p>\n" +
3756 " <small>Exceptions</small>\n" +
3675 " <pre ng-init=\"token.limit = 8\" ng-mouseover=\"token.limit = 99\" ng-mouseleave=\"token.limit = 8\">{{token.token| limitTo:token.limit}}...</pre>\n" +
3757 " <br/>\n" +
3676 " </td>\n" +
3758 " <strong>{{ $ctrl.exceptions|numberToThousands}}</strong>\n" +
3677 " <td><span data-uib-tooltip=\"{{token.creation_date}}\">{{token.creation_date | isoToRelativeTime}}</span></td>\n" +
3759 " <span class=\"fa fa-chevron-right\"></span>\n" +
3678 " <td><span ng-if=\"token.expires\" data-uib-tooltip=\"{{token.expires}}\">{{token.expires | isoToRelativeTime}}</span>\n" +
3760 " </a><!--\n" +
3679 " <span ng-if=\"!token.expires\">Never</span></td>\n" +
3680 " <td>\n" +
3681 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3682 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3683 " <ul class=\"dropdown-menu\">\n" +
3684 " <li><a>No</a></li>\n" +
3685 " <li><a ng-click=\"$ctrl.removeToken(token)\">Yes</a></li>\n" +
3686 " </ul>\n" +
3687 " </span>\n" +
3688 " </td>\n" +
3689 " </tr>\n" +
3690 " </tbody>\n" +
3691 " </table>\n" +
3692 " </div>\n" +
3693 "\n" +
3761 "\n" +
3694 "</div>\n"
3762 " --><a data-ui-sref=\"report.list_slow({resource:$ctrl.resource, min_duration:4, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"frustrating-requests\" data-uib-tooltip=\"Requests over 4s\">\n" +
3695 );
3763 " <small>Frustrating req.</small>\n" +
3696
3764 " <br/>\n" +
3697
3765 " <strong>{{$ctrl.frustratingRequests|numberToThousands}}</strong>\n" +
3698 $templateCache.put('components/views/user-identities-view/user-identities-view.html',
3766 " <span class=\"fa fa-chevron-right\"></span>\n" +
3699 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.identities\"></ng-include>\n" +
3767 " </a><!--\n" +
3700 "\n" +
3768 "\n" +
3701 "<div ng-show=\"!$ctrl.loading.identities\">\n" +
3769 " --><a data-ui-sref=\"report.list_slow({resource:$ctrl.resource, min_duration:1, max_duration:4, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"tolerated-requests\"\n" +
3770 " data-uib-tooltip=\"Requests under 4s\">\n" +
3771 " <small>Tolerated req.</small>\n" +
3772 " <br/>\n" +
3773 " <strong>{{$ctrl.toleratedRequests|numberToThousands}}</strong>\n" +
3774 " <span class=\"fa fa-chevron-right\"></span>\n" +
3775 " </a><!--\n" +
3776 " \n" +
3777 " --><a class=\"combined-stat text-center\" id=\"satisfying-requests\" data-uib-tooltip=\"Requests under 1s\">\n" +
3778 " <small>Satisfying req.</small>\n" +
3779 " <br/>\n" +
3780 " <strong>{{$ctrl.satisfyingRequests|numberToThousands}}</strong>\n" +
3781 " </a><!--\n" +
3702 "\n" +
3782 "\n" +
3703 " <div class=\"panel panel-default\">\n" +
3783 " --><a data-ui-sref=\"uptime({resource:$ctrl.resource})\" class=\"combined-stat text-center\" id=\"uptime-stats\" data-uib-tooltip=\"Uptime\">\n" +
3704 " <div class=\"panel-heading\" ng-include=\"'templates/user/breadcrumbs.html'\"></div>\n" +
3784 " <small>Uptime</small>\n" +
3705 " <div class=\"panel-body\">\n" +
3785 " <br/>\n" +
3786 " <strong>{{$ctrl.uptimeStats}}%</strong>\n" +
3787 " <span class=\"fa fa-chevron-right\"></span>\n" +
3788 " </a>\n" +
3706 "\n" +
3789 "\n" +
3707 " <div class=\"col-sm-6\">\n" +
3790 " <div class=\"clearfix\"></div>\n" +
3708 " <p ng-show=\"$ctrl.identities.length === 0\">No external providers linked yet</p>\n" +
3709 " <ul class=\"list-group\">\n" +
3710 " <li ng-repeat=\"provider in $ctrl.identities\" class=\"animate-repeat list-group-item\">\n" +
3711 " <div class=\"pull-right\">\n" +
3712 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3713 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3714 " <ul class=\"dropdown-menu\">\n" +
3715 " <li><a>No</a></li>\n" +
3716 " <li><a ng-click=\"$ctrl.removeProvider(provider)\">Yes</a></li>\n" +
3717 " </ul>\n" +
3718 " </span>\n" +
3719 " </div>\n" +
3791 " </div>\n" +
3720 " <em>@{{ provider.provider }}</em>: <strong>{{ provider.id }}</strong>\n" +
3721 " </li>\n" +
3722 " </ul>\n" +
3723 " </div>\n" +
3724 " <div class=\"col-sm-6\">\n" +
3725 " <ul class=\"list-group\">\n" +
3726 " <li class=\"list-group-item\">\n" +
3727 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.google}}\" target=\"_self\">\n" +
3728 " <span class=\"fa fa-google-plus-square fa-2x\"></span> Connect with Google</a>\n" +
3729 " </li>\n" +
3730 " <li class=\"list-group-item\">\n" +
3731 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.twitter}}\" target=\"_self\">\n" +
3732 " <span class=\"fa fa-twitter fa-2x\"></span> Connect with Twitter</a>\n" +
3733 " </li>\n" +
3734 " <li class=\"list-group-item\">\n" +
3735 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.bitbucket}}\" target=\"_self\">\n" +
3736 " <span class=\"fa fa-bitbucket fa-2x\"></span> Connect with Bitbucket</a>\n" +
3737 " </li>\n" +
3738 " <li class=\"list-group-item\">\n" +
3739 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.github}}\" target=\"_self\">\n" +
3740 " <span class=\"fa fa-github fa-2x\"></span> Connect with Github including private repo access</a>\n" +
3741 " </li>\n" +
3742 " </ul>\n" +
3743 " </div>\n" +
3744 " </div>\n" +
3745 " </div>\n" +
3746 "</div>\n"
3747 );
3748
3749
3750 $templateCache.put('components/views/user-password-view/user-password-view.html',
3751 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.password\"></ng-include>\n" +
3752 "\n" +
3753 "<div ng-show=\"!$ctrl.loading.password\">\n" +
3754 "\n" +
3792 "\n" +
3755 " <div class=\"panel panel-default\">\n" +
3793 " <div id=\"apdex-rate\" class=\"m-b-1 panel panel-default\">\n" +
3756 " <div class=\"panel-heading\" ng-include=\"'templates/user/breadcrumbs.html'\"></div>\n" +
3794 " <table class=\"servers table table-striped\">\n" +
3757 " <div class=\"panel-body\">\n" +
3795 " <thead>\n" +
3796 " <tr>\n" +
3797 " <th></th>\n" +
3798 " <th>Server</th>\n" +
3799 " <th>Apdex\n" +
3800 " <span class=\"fa fa-question-circle\"\n" +
3801 " data-uib-tooltip=\"Application Performance Index - measures viewer satisfaction based on response times and error rates\"></span>\n" +
3802 " </th>\n" +
3803 " <th>rpm</th>\n" +
3804 " <th>avg. response</th>\n" +
3805 " </tr>\n" +
3806 " </thead>\n" +
3807 " <tbody>\n" +
3808 " <tr ng-if=\"$ctrl.loading.apdex!=false\" class=\"text-center\">\n" +
3809 " <td colspan=\"5\"><span class=\"fa fa-cog fa-spin fa-5x loader\"></span></td>\n" +
3810 " </tr>\n" +
3811 " <tr ng-repeat=\"server in $ctrl.apdexStats\" class=\"{{ server | apdexValue }}\"\n" +
3812 " ng-if=\"$ctrl.loading.apdex==false\">\n" +
3813 " <td><span class=\"fa fa-hdd-o\"></span></td>\n" +
3814 " <td>\n" +
3815 " <small><strong>{{ server.name }}</strong></small>\n" +
3816 " </td>\n" +
3817 " <td class=\"apdex\">\n" +
3818 " <small><strong>{{ server.apdex }} %</strong></small>\n" +
3819 " </td>\n" +
3820 " <td>\n" +
3821 " <small><strong>{{ server.rpm }}rpm</strong></small>\n" +
3822 " </td>\n" +
3823 " <td>\n" +
3824 " <small><strong>{{ server.avg_response_time }}s</strong></small>\n" +
3825 " </td>\n" +
3826 " </tr>\n" +
3827 " </tbody>\n" +
3828 " </table>\n" +
3758 "\n" +
3829 "\n" +
3759 " <form class=\"form-horizontal\" name=\"$ctrl.passwordForm\" ng-submit=\"$ctrl.updatePassword()\">\n" +
3830 " </div>\n" +
3760 " <div class=\"form-group\" id=\"row-old_password\">\n" +
3761 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.old_password\"></data-form-errors>\n" +
3762 " <label for=\"old_password\" id=\"label-old_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3763 " Old Password\n" +
3764 " <span class=\"required\">*</span>\n" +
3765 " </label>\n" +
3766 " <div class=\"col-sm-8 col-lg-9\">\n" +
3767 " <input class=\"form-control\" id=\"old_password\" name=\"old_password\" type=\"password\" ng-model=\"$ctrl.form.old_password\">\n" +
3768 " </div>\n" +
3769 " </div>\n" +
3770 " <div class=\"form-group\" id=\"row-new_password\">\n" +
3771 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password\"></data-form-errors>\n" +
3772 " <label for=\"new_password\" id=\"label-new_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3773 " New Password\n" +
3774 " <span class=\"required\">*</span>\n" +
3775 " </label>\n" +
3776 " <div class=\"col-sm-8 col-lg-9\">\n" +
3777 " <input class=\"form-control\" id=\"new_password\" name=\"new_password\" type=\"password\" ng-model=\"$ctrl.form.new_password\">\n" +
3778 " </div>\n" +
3831 " </div>\n" +
3832 "\n" +
3779 " </div>\n" +
3833 " </div>\n" +
3780 " <div class=\"form-group\" id=\"row-new_password_confirm\">\n" +
3781 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password_confirm\"></data-form-errors>\n" +
3782 " <label for=\"new_password_confirm\" id=\"label-new_password_confirm\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3783 " Confirm Password\n" +
3784 " <span class=\"required\">*</span>\n" +
3785 " </label>\n" +
3786 " <div class=\"col-sm-8 col-lg-9\">\n" +
3787 " <input class=\"form-control\" id=\"new_password_confirm\" name=\"new_password_confirm\" type=\"password\" ng-model=\"$ctrl.form.new_password_confirm\">\n" +
3788 " </div>\n" +
3789 " </div>\n" +
3790 " <div class=\"form-group\" id=\"row-submit\">\n" +
3791 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\"></label>\n" +
3792 " <div class=\"col-sm-8 col-lg-9\">\n" +
3793 " <input class=\"form-control SubmitField btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Change Password\">\n" +
3794 " </div>\n" +
3795 " </div>\n" +
3796 " </form>\n" +
3797 "\n" +
3834 "\n" +
3798 " </div>\n" +
3799 " </div>\n" +
3800 "</div>\n"
3801 );
3802
3803
3804 $templateCache.put('components/views/user-profile-view/user-profile-view.html',
3805 "<ui-view></ui-view><ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.profile\"></ng-include>\n" +
3806 "\n" +
3835 "\n" +
3807 "<div ng-show=\"!$ctrl.loading.profile\">\n" +
3836 " </div>\n" +
3808 " <div class=\"panel panel-default\">\n" +
3809 " <div class=\"panel-heading\" ng-include=\"'templates/user/breadcrumbs.html'\"></div>\n" +
3810 " <div class=\"panel-body\">\n" +
3811 " <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.updateProfile()\">\n" +
3812 " <div class=\"form-group\" id=\"row-email\">\n" +
3813 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
3814 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3815 " Email Address\n" +
3816 " <span class=\"required\">*</span>\n" +
3817 " </label>\n" +
3818 " <div class=\"col-sm-8 col-lg-9\">\n" +
3819 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
3820 " </div>\n" +
3821 " </div>\n" +
3822 "\n" +
3837 "\n" +
3823 " <div class=\"form-group\" id=\"row-first_name\">\n" +
3838 " <div class=\"row\">\n" +
3824 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
3839 " <div class=\"col-sm-6\">\n" +
3825 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3840 "\n" +
3826 " First Name\n" +
3841 " <div class=\"panel panel-default\">\n" +
3827 " </label>\n" +
3842 " <div class=\"panel-heading position-relative\">\n" +
3828 " <div class=\"col-sm-8 col-lg-9\">\n" +
3843 " <h3 class=\"panel-title\"><span class=\"fa fa-exclamation-triangle\"></span> Newest errors (real-time)\n" +
3829 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
3844 " </h3>\n" +
3830 " </div>\n" +
3845 " <a tooltip-append-to-body=\"true\" data-uib-tooltip=\"Play/Pause stream\" class=\"btn btn-primary btn-sm pause_stream\" ng-model=\"$ctrl.stream.paused\" uib-btn-checkbox>\n" +
3831 " </div>\n" +
3846 " <span class=\"fa {{stream.paused ? 'fa-play' : 'fa-pause'}}\"></span>\n" +
3832 " <div class=\"form-group\" id=\"row-last_name\">\n" +
3847 " </a>\n" +
3833 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
3848 " <a tooltip-append-to-body=\"true\" data-uib-tooltip=\"Limit reports to current application\" class=\"btn btn-primary btn-sm limit_stream\" ng-model=\"$ctrl.stream.filtered\" uib-btn-checkbox>\n" +
3834 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3849 " <span class=\"fa fa-lock\"></span>\n" +
3835 " Last Name\n" +
3850 " </a>\n" +
3836 " </label>\n" +
3851 "\n" +
3837 " <div class=\"col-sm-8 col-lg-9\">\n" +
3852 "\n" +
3838 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
3853 " </div>\n" +
3839 " </div>\n" +
3854 " <div class=\"panel-body\">\n" +
3840 " </div>\n" +
3855 "\n" +
3841 " <div class=\"form-group\" id=\"row-company_name\">\n" +
3856 " <p ng-if=\"$ctrl.stream.reports.length === 0\">No new reports</p>\n" +
3842 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_name\"></data-form-errors>\n" +
3857 "\n" +
3843 " <label for=\"company_name\" id=\"label-company_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3858 " <div small-report-list reports=\"$ctrl.stream.reports\" applications=\"$ctrl.applications\"></div>\n" +
3844 " Company Name\n" +
3859 " </div>\n" +
3845 " </label>\n" +
3846 " <div class=\"col-sm-8 col-lg-9\">\n" +
3847 " <input class=\"form-control\" id=\"company_name\" name=\"company_name\" type=\"text\" ng-model=\"$ctrl.user.company_name\">\n" +
3848 " </div>\n" +
3849 " </div>\n" +
3850 " <div class=\"form-group\" id=\"row-company_address\">\n" +
3851 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_address\"></data-form-errors>\n" +
3852 " <label for=\"company_address\" id=\"label-company_address\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3853 " Company Address\n" +
3854 " </label>\n" +
3855 " <div class=\"col-sm-8 col-lg-9\">\n" +
3856 " <textarea class=\"form-control\" id=\"company_address\" name=\"company_address\" ng-model=\"$ctrl.user.company_address\"></textarea>\n" +
3857 " </div>\n" +
3858 " </div>\n" +
3859 " <div class=\"form-group\" id=\"row-zip_code\">\n" +
3860 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.zip_code\"></data-form-errors>\n" +
3861 " <label for=\"zip_code\" id=\"label-zip_code\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3862 " ZIP code\n" +
3863 " </label>\n" +
3864 " <div class=\"col-sm-8 col-lg-9\">\n" +
3865 " <input class=\"form-control\" id=\"zip_code\" name=\"zip_code\" type=\"text\" ng-model=\"$ctrl.user.zip_code\">\n" +
3866 " </div>\n" +
3860 " </div>\n" +
3867 " </div>\n" +
3861 " </div>\n" +
3868 " <div class=\"form-group\" id=\"row-city\">\n" +
3862 "\n" +
3869 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.city\"></data-form-errors>\n" +
3863 " <div class=\"col-sm-6\">\n" +
3870 " <label for=\"city\" id=\"label-city\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3864 "\n" +
3871 " City\n" +
3865 " <div class=\"panel panel-default\">\n" +
3872 " </label>\n" +
3866 " <div class=\"panel-heading\">\n" +
3873 " <div class=\"col-sm-8 col-lg-9\">\n" +
3867 " <h3 class=\"panel-title\"><span class=\"fa fa-sort-amount-desc\"></span> Request breakdown over {{ $ctrl.timeSpan.label }}</h3>\n" +
3874 " <input class=\"form-control\" id=\"city\" name=\"city\" type=\"text\" ng-model=\"$ctrl.user.city\">\n" +
3868 " </div>\n" +
3869 " <div class=\"panel-body\" id=\"view-breakdown-container\">\n" +
3870 " <p ng-if=\"$ctrl.loading.requestsBreakdown!=false\" class=\"text-center\">\n" +
3871 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3872 " </p>\n" +
3873 "\n" +
3874 " <div class=\"report-list\">\n" +
3875 " <div ng-if=\"$ctrl.loading.requestsBreakdown==false\" ng-repeat=\"view in $ctrl.requestsBreakdown\">\n" +
3876 " <div class=\"view-info\">\n" +
3877 " <div class=\"view-name\">\n" +
3878 " <div class=\"bar\" style=\"width: {{view.percentage}}%\">\n" +
3879 " </div>\n" +
3880 " </div>\n" +
3881 " <strong ng-if=\"view.latest_details.length\">\n" +
3882 " <a data-ui-sref=\"report.list_slow({view_name:view.view_name})\">{{view.view_name}}</a></strong>\n" +
3883 " <strong ng-if=\"!view.latest_details.length\">{{view.view_name}}</strong>\n" +
3884 "\n" +
3885 " <div class=\"stats\">\n" +
3886 " <small>\n" +
3887 " avg. response <strong>{{view.avg_response}}s</strong> in\n" +
3888 " <span class=\"requests\"\n" +
3889 " data-uib-tooltip=\"Requests\"><strong>{{view.requests|numberToThousands}}</strong> requests</span>\n" +
3890 "\n" +
3891 " <span ng-if=\"view.latest_details\">\n" +
3892 " &nbsp;&nbsp; Latest reports:\n" +
3893 " <a ng-repeat=\"d in view.latest_details\" target=\"_blank\" ui-sref=\"report.view_detail({groupId:d.group_id, reportId:d.report_id})\"> <strong>{{$index+1}}</strong></a>\n" +
3894 " </span>\n" +
3895 " </small>\n" +
3896 " </div>\n" +
3897 "\n" +
3898 " </div>\n" +
3899 "\n" +
3900 " </div>\n" +
3901 " </div>\n" +
3902 "\n" +
3903 "\n" +
3904 " </div>\n" +
3875 " </div>\n" +
3905 " </div>\n" +
3906 "\n" +
3876 " </div>\n" +
3907 " </div>\n" +
3877 " <div class=\"form-group\" id=\"row-notifications\">\n" +
3908 "\n" +
3878 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.notifications\"></data-form-errors>\n" +
3909 " </div>\n" +
3879 " <label for=\"notifications\" id=\"label-notifications\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3910 "\n" +
3880 " Account notifications\n" +
3911 " <div class=\"row\">\n" +
3881 " </label>\n" +
3912 " <div class=\"col-sm-6\">\n" +
3882 " <div class=\"col-sm-8 col-lg-9\">\n" +
3913 "\n" +
3883 " <input checked class=\"form-control\" id=\"notifications\" name=\"notifications\" type=\"checkbox\" ng-model=\"$ctrl.user.notifications\">\n" +
3914 " <div class=\"panel panel-default\">\n" +
3915 " <div class=\"panel-heading\">\n" +
3916 " <h3 class=\"panel-title\">\n" +
3917 " <span class=\"fa fa-exclamation-triangle\"></span> Report groups trending over {{ $ctrl.timeSpan.label }}\n" +
3918 " </h3>\n" +
3919 " </div>\n" +
3920 " <div class=\"panel-body\">\n" +
3921 " <p ng-if=\"$ctrl.loading.reports != false\" class=\"text-center\">\n" +
3922 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3923 " </p>\n" +
3924 "\n" +
3925 " <p ng-if=\"$ctrl.trendingReports.length == 0 && $ctrl.loading.reports == false\">\n" +
3926 " No reports found\n" +
3927 " </p>\n" +
3928 "\n" +
3929 " <div small-report-group-list groups=\"$ctrl.trendingReports\" applications=\"$ctrl.applications\" ng-if=\"$ctrl.loading.reports==false\"></div>\n" +
3930 " </div>\n" +
3884 " </div>\n" +
3931 " </div>\n" +
3932 "\n" +
3885 " </div>\n" +
3933 " </div>\n" +
3886 " <div class=\"form-group\" id=\"row-submit\">\n" +
3934 "\n" +
3887 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3935 " <div class=\"col-sm-6\">\n" +
3888 " </label>\n" +
3936 "\n" +
3889 " <div class=\"col-sm-8 col-lg-9\">\n" +
3937 "\n" +
3890 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Update Account\">\n" +
3938 " <div class=\"panel panel-default\">\n" +
3939 " <div class=\"panel-heading\">\n" +
3940 " <h3 class=\"panel-title\">\n" +
3941 " Most common slow calls over {{ $ctrl.timeSpan.label }}\n" +
3942 " </h3>\n" +
3943 " </div>\n" +
3944 " <div class=\"panel-body\">\n" +
3945 "\n" +
3946 " <div ng-if=\"$ctrl.loading.slowCalls!=false\" class=\"text-center\">\n" +
3947 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
3948 " </div>\n" +
3949 "\n" +
3950 " <table id=\"slow-statements\" ng-if=\"$ctrl.loading.slowCalls==false\">\n" +
3951 " <tbody>\n" +
3952 " <tr ng-repeat=\"call in $ctrl.slowCalls\">\n" +
3953 " <td class=\"occurences\">\n" +
3954 " <span class=\"occurences\" data-uib-tooltip=\"Occurences\">{{call.occurences|numberToThousands}}</span>\n" +
3955 " </td>\n" +
3956 " <td class=\"ellipsis\">\n" +
3957 " <small title=\"{{call.statement}}\" class=\"statement\">{{call.statement}}</small>\n" +
3958 " <br/>\n" +
3959 " <span class=\"type\">{{call.statement_type}}</span>\n" +
3960 " <span class=\"subtype\">{{call.statement_subtype}}</span>\n" +
3961 " <span class=\"duration\" data-uib-tooltip=\"Average duration\">{{call.total_duration/call.occurences|round:2}}s</span>\n" +
3962 " <span class=\"report-list\">\n" +
3963 " Latest reports:\n" +
3964 " <a ng-repeat=\"d in call.latest_details\" target=\"_blank\" ui-sref=\"report.view_detail({groupId:d.group_id, reportId:d.report_id})\"> <strong>{{$index+1}}</strong> </a>\n" +
3965 " </span>\n" +
3966 " </td>\n" +
3967 " </tr>\n" +
3968 " </tbody>\n" +
3969 " </table>\n" +
3970 "\n" +
3971 "\n" +
3972 " </div>\n" +
3891 " </div>\n" +
3973 " </div>\n" +
3974 "\n" +
3975 "\n" +
3892 " </div>\n" +
3976 " </div>\n" +
3893 " </form>\n" +
3977 "\n" +
3978 " </div>\n" +
3894 " </div>\n" +
3979 " </div>\n" +
3895 " </div>\n" +
3980 " </div>\n" +
3896 "</div>\n"
3981 "</div>\n"
3897 );
3982 );
3898
3983
3899
3984
3900 $templateCache.put('directives/permissions/permissions.html',
3985 $templateCache.put('components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
3901 "<div class=\"panel panel-default\">\n" +
3986 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
3902 " <div class=\"panel-heading\">\n" +
3987 "\n" +
3903 " <h3 class=\"panel-title\">Permissions</h3>\n" +
3988 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
3904 " </div>\n" +
3989 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3905 " <div class=\"panel-body\">\n" +
3990 " <div class=\"panel-body\">\n" +
3906 " <p>Here you can <strong>set permissions</strong> for others to access your app data.</p>\n" +
3907 "\n" +
3991 "\n" +
3908 " <p>For example you can let other staff member view or alter error reports.</p>\n" +
3992 " <h1>Bitbucket Integration</h1>\n" +
3909 "\n" +
3993 "\n" +
3910 " <div ng-if=\"permissions.possibleGroups.length > 0\">\n" +
3994 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
3911 " <h3>Group permissions</h3>\n" +
3995 " <div class=\"form-group\">\n" +
3912 "\n" +
3996 "\n" +
3913 " <ul class=\"list-group\">\n" +
3997 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
3914 " <li ng-repeat=\"perm in permissions.currentPermissions.group\" class=\"animate-repeat list-group-item\">\n" +
3998 "\n" +
3915 " <strong>{{ perm.self.group_name }}</strong>\n" +
3999 " <div class=\"col-sm-8 col-lg-9\">\n" +
3916 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
4000 "\n" +
3917 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
4001 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
3918 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
4002 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
3919 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
4003 "\n" +
3920 " <ul class=\"dropdown-menu\">\n" +
4004 " <div class=\"input-group\">\n" +
3921 " <li><a>No</a></li>\n" +
4005 " <div class=\"input-group-addon\">https://bitbucket.org/</div>\n" +
3922 " <li><a ng-click=\"permissions.removeGroupPermission(perm_name, perm)\">Yes</a></li>\n" +
4006 " <input class=\"form-control\" ng-model=\"$ctrl.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
3923 " </ul>\n" +
4007 " <div class=\"input-group-addon\">/</div>\n" +
3924 " </span>\n" +
4008 " <input class=\"form-control\" ng-model=\"$ctrl.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
3925 " </div>\n" +
4009 " </div>\n" +
3926 " </li>\n" +
3927 " </ul>\n" +
3928 "\n" +
4010 "\n" +
3929 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setGroupPermission()\">\n" +
3930 " <div class=\"form-group\">\n" +
3931 " <select class=\"form-control\" ng-model=\"permissions.form.selectedGroup\" ng-options=\"g.id as g.group_name for g in permissions.possibleGroups\"></select>\n" +
3932 " </div>\n" +
3933 " <div class=\"form-group\">\n" +
3934 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
3935 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedGroupPermissions[permission]\"> {{ permission }}\n" +
3936 " </span>\n" +
3937 " </div>\n" +
3938 " <div class=\"form-group\">\n" +
3939 " <button class=\"btn btn-info\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
3940 " </div>\n" +
4011 " </div>\n" +
3941 " </form>\n" +
4012 " </div>\n" +
4013 " <div class=\"form-group\">\n" +
3942 "\n" +
4014 "\n" +
3943 " </div>\n" +
4015 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
3944 "\n" +
4016 "\n" +
3945 " <h3>User permissions</h3>\n" +
4017 " <div class=\"col-sm-8 col-lg-9\">\n" +
3946 " <div>\n" +
4018 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
3947 " <ul class=\"list-group\">\n" +
4019 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3948 " <li ng-repeat=\"perm in permissions.currentPermissions.user\" class=\"animate-repeat list-group-item\">\n" +
4020 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
3949 " <strong>{{ perm.self.user_name }}</strong>\n" +
3950 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
3951 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
3952 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
3953 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
3954 " <ul class=\"dropdown-menu\">\n" +
4021 " <ul class=\"dropdown-menu\">\n" +
3955 " <li><a>No</a></li>\n" +
4022 " <li><a>No</a></li>\n" +
3956 " <li><a ng-click=\"permissions.removeUserPermission(perm_name,perm)\">Yes</a></li>\n" +
4023 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
3957 " </ul>\n" +
4024 " </ul>\n" +
3958 " </span>\n" +
4025 " </span>\n" +
3959 " </div>\n" +
3960 " </li>\n" +
3961 " </ul>\n" +
3962 " </div>\n" +
3963 " <div>\n" +
3964 " <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" +
3965 "\n" +
3966 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setUserPermission()\">\n" +
3967 " <div class=\"form-group\">\n" +
3968 " <input type=\"text\" class=\"autocomplete form-control\" placeholder=\"Search for user/email\" ng-model=\"permissions.form.autocompleteUser\"\n" +
3969 " uib-typeahead=\"u.user for u in permissions.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"permissions.searchingUsers\" typeahead-wait-ms=\"250\"\n" +
3970 " typeahead-template-url=\"templates/directives/user_search_type_ahead.html\"\n" +
3971 " />\n" +
3972 " </div>\n" +
3973 " <div class=\"form-group\">\n" +
3974 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
3975 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedUserPermissions[permission]\"> {{ permission }}\n" +
3976 " </span>\n" +
3977 " </div>\n" +
3978 " <div class=\"form-group\">\n" +
3979 " <button class=\"btn btn-info\" ng-disabled=\"!permissions.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
3980 " </div>\n" +
4026 " </div>\n" +
3981 " </form>\n" +
4027 " </div>\n" +
3982 " </div>\n" +
4028 " </form>\n" +
3983 " </div>\n" +
3984 "</div>\n"
3985 );
3986
3987
3988 $templateCache.put('directives/plugin_config/plugin_config.html',
3989 "<div ng-repeat=\"tmpl in plugin_ctrlr.inclusions track by $index\">\n" +
3990 " <div><strong>Plugin: {{tmpl.name}}</strong></div>\n" +
3991 " <ng-include src=\"tmpl.template\"></ng-include>\n" +
3992 " <hr/>\n" +
3993 "</div>\n"
3994 );
3995
3996
3997 $templateCache.put('directives/postprocess_action/postprocess_action.html',
3998 "<div class=\"panel panel-default action\">\n" +
3999 " <div class=\"panel-body form-inline\">\n" +
4000 " <div class=\"pull-right\">\n" +
4001 " <span class=\"dropdown\" data-uib-dropdown>\n" +
4002 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
4003 " <ul class=\"dropdown-menu\">\n" +
4004 " <li><a>No</a></li>\n" +
4005 " <li><a ng-click=\"ctrl.deleteAction(ctrl.action)\">Yes</a></li>\n" +
4006 " </ul>\n" +
4007 " </span>\n" +
4008 " </div>\n" +
4009 "\n" +
4010 " <div class=\"form-group\">\n" +
4011 " <label>Action</label>\n" +
4012 "\n" +
4029 "\n" +
4013 " <div class=\"form-group\">\n" +
4030 " <p class=\"m-t-1\">Remember you first need to\n" +
4014 " <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" +
4031 " <strong>\n" +
4015 " </div>\n" +
4032 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
4033 " with Bitbucket before we can send issues on your behalf.</p>\n" +
4016 "\n" +
4034 "\n" +
4017 " <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> &nbsp;Save changes</a>\n" +
4035 " <p>Every user will have to authorize AppEnlight to access Bitbucket to be able to post issues.</p>\n" +
4018 "\n" +
4036 "\n" +
4019 " </div>\n" +
4020 " <hr/>\n" +
4021 " <p>Meeting following criteria:</p>\n" +
4022 " <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
4023 " {{ctrl.rule}}\n" +
4024 " <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
4025 " </div>\n" +
4037 " </div>\n" +
4026 "</div>\n"
4038 "</div>\n"
4027 );
4039 );
4028
4040
4029
4041
4030 $templateCache.put('directives/report_alert_action/report_alert_action.html',
4042 $templateCache.put('components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
4031 "<div class=\"panel panel-default action\">\n" +
4043 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4032 " <div class=\"panel-body form-inline\">\n" +
4033 " <div class=\"pull-right\">\n" +
4034 " <span class=\"dropdown\" data-uib-dropdown>\n" +
4035 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
4036 " <ul class=\"dropdown-menu\">\n" +
4037 " <li><a>No</a></li>\n" +
4038 " <li><a ng-click=\"ctrl.deleteAction(ctrl.actions, ctrl.action)\">Yes</a></li>\n" +
4039 " </ul>\n" +
4040 " </span>\n" +
4041 " </div>\n" +
4042 "\n" +
4044 "\n" +
4043 " <div class=\"form-group\">\n" +
4045 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4044 " <label>Applies to</label>\n" +
4046 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4045 " <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" +
4047 " <div class=\"panel-body\">\n" +
4046 " <option value=\"\">All Resources</option>\n" +
4048 " <h1>Campfire Integration</h1>\n" +
4047 " </select>\n" +
4048 " </div>\n" +
4049 " <div class=\"form-group\">\n" +
4050 " <label>Notify</label>\n" +
4051 " <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" +
4052 "\n" +
4049 "\n" +
4053 " <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> &nbsp;Save changes</a>\n" +
4050 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4054 "\n" +
4051 "\n" +
4055 " </div>\n" +
4052 " <div class=\"form-group\">\n" +
4056 " <div>\n" +
4053 "\n" +
4057 " <p><strong>Channels:</strong></p>\n" +
4054 " <label class=\"control-label col-sm-3 col-lg-2\">Account name</label>\n" +
4058 " <ul class=\"list-group\">\n" +
4055 " <div class=\"col-sm-8 col-lg-9\">\n" +
4059 " <li class=\"list-group-item\" ng-repeat=\"channel in ctrl.action.channels\">\n" +
4056 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4060 " <strong>{{channel.channel_visible_value}}</strong>\n" +
4057 "\n" +
4061 " <div class=\"pull-right\">\n" +
4058 " <div class=\"input-group\">\n" +
4062 " <span class=\"dropdown\" data-uib-dropdown>\n" +
4059 " <div class=\"input-group-addon\">http://</div>\n" +
4063 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
4060 " <input class=\"form-control\" ng-model=\"$ctrl.config.account\" placeholder=\"account\">\n" +
4064 " <ul class=\"dropdown-menu\">\n" +
4061 " <div class=\"input-group-addon\">.campfirenow.com</div>\n" +
4065 " <li><a>No</a></li>\n" +
4066 " <li><a ng-click=\"ctrl.unBindChannel(channel)\">Yes</a></li>\n" +
4067 " </ul>\n" +
4068 " </span>\n" +
4069 " </div>\n" +
4062 " </div>\n" +
4070 " </li>\n" +
4063 " </div>\n" +
4071 " </ul>\n" +
4072 " <div class=\"form-group\" ng-if=\"ctrl.possibleChannels.length\">\n" +
4073 " <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" +
4074 " <a class=\"btn btn-info\" ng-click=\"ctrl.bindChannel(channel, ctrl.action)\"><span class=\"fa fa-plus-circle\"></span> Add Channel</a>\n" +
4075 " </div>\n" +
4076 " <div class=\"alert alert-danger\" ng-if=\"!ctrl.possibleChannels.length\">\n" +
4077 " <span class=\"fa fa-exclamation-triangle \"></span>You need to create an alert channel before you can assign it to your rule.\n" +
4078 " </div>\n" +
4064 " </div>\n" +
4079 "\n" +
4065 "\n" +
4080 " </div>\n" +
4066 " <div class=\"form-group\">\n" +
4081 " <hr/>\n" +
4067 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
4082 " <p>Meeting following criteria:</p>\n" +
4068 " <div class=\"col-sm-8 col-lg-9\">\n" +
4083 " <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
4069 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
4084 " <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
4070 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\">\n" +
4085 " </div>\n" +
4071 " </div>\n" +
4086 "</div>\n"
4072 " </div>\n" +
4087 );
4088
4089
4090 $templateCache.put('directives/rule_read_only/rule_read_only.html',
4091 "<div class=\"rule-read-only\">\n" +
4092 "\n" +
4093 " <span class=\"form-group\">\n" +
4094 " {{rule_ctrlr.readOnlyPossibleFields[rule_ctrlr.rule.field]}}\n" +
4095 " </span>\n" +
4096 "\n" +
4073 "\n" +
4097 " <span ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\">\n" +
4074 " <div class=\"form-group\">\n" +
4098 " is {{rule_ctrlr.ruleDefinitions.allOps[rule_ctrlr.rule.op]}} {{rule_ctrlr.rule.value}}\n" +
4075 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
4099 " </span>\n" +
4076 " <div class=\"col-sm-8 col-lg-9\">\n" +
4077 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
4078 " <input class=\"form-control\" ng-model=\"$ctrl.config.rooms\" placeholder=\"Room ID list\">\n" +
4079 " <p>\n" +
4080 " <small>Room ID list separated by comma</small>\n" +
4081 " </p>\n" +
4082 " </div>\n" +
4083 " </div>\n" +
4084 " <div class=\"form-group\">\n" +
4085 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Campfire\">\n" +
4100 "\n" +
4086 "\n" +
4101 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
4087 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4102 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
4088 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4103 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
4089 " <ul class=\"dropdown-menu\">\n" +
4090 " <li><a>No</a></li>\n" +
4091 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4092 " </ul>\n" +
4093 " </span>\n" +
4104 "\n" +
4094 "\n" +
4105 " <div class=\"panel panel-default\">\n" +
4095 " <div class=\"btn-group\" uib-dropdown>\n" +
4106 " <div class=\"panel-body form-inline\">\n" +
4096 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
4107 " <recursive>\n" +
4097 " Test integration <span class=\"caret\"></span>\n" +
4108 " <rule-read-only rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"rule_ctrlr.parentObj\"></rule-read-only>\n" +
4098 " </button>\n" +
4109 " </recursive>\n" +
4099 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
4100 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
4101 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
4102 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
4103 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
4104 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
4105 " </ul>\n" +
4110 " </div>\n" +
4106 " </div>\n" +
4107 "\n" +
4111 " </div>\n" +
4108 " </div>\n" +
4112 " </div>\n" +
4113 "\n" +
4109 "\n" +
4114 " </span>\n" +
4110 " </form>\n" +
4111 "\n" +
4112 " </div>\n" +
4115 "</div>\n"
4113 "</div>\n"
4116 );
4114 );
4117
4115
4118
4116
4119 $templateCache.put('directives/rule/rule.html',
4117 $templateCache.put('components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
4120 "<div class=\"rule form-inline\">\n" +
4118 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4121 "\n" +
4119 "\n" +
4122 " <div class=\"form-group\">\n" +
4120 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4123 " <select class=\"form-control\"\n" +
4121 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4124 " ng-model=\"rule_ctrlr.rule.field\"\n" +
4122 " <div class=\"panel-body\">\n" +
4125 " ng-change=\"rule_ctrlr.fieldChange()\"\n" +
4126 " ng-options=\"key as label for (key, label) in rule_ctrlr.ruleDefinitions.possibleFields\"></select>\n" +
4127 " </div>\n" +
4128 "\n" +
4123 "\n" +
4129 " <div ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\" class=\"form-group\">\n" +
4124 " <h1>Flowdock Integration</h1>\n" +
4130 "\n" +
4125 "\n" +
4131 " <select ng-model=\"rule_ctrlr.rule.op\" class=\"form-control\"\n" +
4126 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4132 " ng-change=\"rule_ctrlr.setDirty()\"\n" +
4133 " ng-options=\"op as rule_ctrlr.ruleDefinitions.allOps[op] for op in rule_ctrlr.ruleDefinitions.fieldOps[rule_ctrlr.rule.field]\">\n" +
4134 " </select>\n" +
4135 "\n" +
4127 "\n" +
4136 " <input type=\"text\" placeholder=\"Value\" ng-model=\"rule_ctrlr.rule.value\" ng-change=\"rule_ctrlr.setDirty()\" class=\"form-control\">\n" +
4128 " <div class=\"form-group\">\n" +
4137 "\n" +
4129 "\n" +
4138 " </div>\n" +
4130 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
4139 "\n" +
4131 "\n" +
4140 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
4132 " <div class=\"col-sm-8 col-lg-9\">\n" +
4141 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
4133 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
4142 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
4134 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
4143 " <div class=\"panel panel-default\">\n" +
4144 " <div class=\"panel-body form-inline\">\n" +
4145 " <recursive>\n" +
4146 " <rule rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"rule_ctrlr.rule\" parent-obj=\"rule_ctrlr.parentObj\"></rule>\n" +
4147 " </recursive>\n" +
4148 " </div>\n" +
4135 " </div>\n" +
4136 "\n" +
4137 "\n" +
4149 " </div>\n" +
4138 " </div>\n" +
4150 " </div>\n" +
4151 "\n" +
4139 "\n" +
4152 " <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" +
4140 " <div class=\"form-group\">\n" +
4141 "\n" +
4142 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4143 "\n" +
4144 " <div class=\"col-sm-8 col-lg-9\">\n" +
4145 "\n" +
4146 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Flowdock\">\n" +
4147 "\n" +
4148 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4149 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4150 " <ul class=\"dropdown-menu\">\n" +
4151 " <li><a>No</a></li>\n" +
4152 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4153 " </ul>\n" +
4154 " </span>\n" +
4155 " <div class=\"btn-group\" uib-dropdown>\n" +
4156 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
4157 " Test integration <span class=\"caret\"></span>\n" +
4158 " </button>\n" +
4159 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
4160 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
4161 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
4162 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
4163 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
4164 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
4165 " </ul>\n" +
4166 " </div>\n" +
4167 " </div>\n" +
4168 " </div>\n" +
4169 "\n" +
4170 "\n" +
4171 " </form>\n" +
4153 "\n" +
4172 "\n" +
4154 " </span>\n" +
4155 " <div class=\"pull-right\" ng-if=\"rule_ctrlr.parentRule\">\n" +
4156 " <span class=\"dropdown\" data-uib-dropdown>\n" +
4157 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
4158 " <ul class=\"dropdown-menu\">\n" +
4159 " <li><a>No</a></li>\n" +
4160 " <li><a ng-click=\"rule_ctrlr.deleteRule(rule_ctrlr.parentRule, rule_ctrlr.rule)\">Yes</a></li>\n" +
4161 " </ul>\n" +
4162 " </span>\n" +
4163 " </div>\n" +
4173 " </div>\n" +
4164 "</div>\n"
4174 "</div>\n"
4165 );
4175 );
4166
4176
4167
4177
4168 $templateCache.put('templates/admin/applications/applications_list.html',
4178 $templateCache.put('components/views/integrations/github-integration-config-view/github-integration-config-view.html',
4169 "<ng-include src=\"'templates/loader.html'\" ng-if=\"applications.loading.applications\"></ng-include>\n" +
4179 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4170 "\n" +
4180 "\n" +
4171 "<div class=\"panel panel-default\" ng-if=\"!applications.loading.applications\">\n" +
4181 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.application && !$ctrl.loading.integration\">\n" +
4172 " <div class=\"panel-heading\">\n" +
4182 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4183 " <div class=\"panel-body\">\n" +
4173 "\n" +
4184 "\n" +
4174 " Currently active applications: {{applications.applications.length}}\n" +
4185 " <h1>Github Integration</h1>\n" +
4175 "\n" +
4186 "\n" +
4176 " </div>\n" +
4187 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4177 "\n" +
4188 "\n" +
4178 " <table st-table=\"displayedCollection\" st-safe-src=\"applications.applications\" class=\"table table-striped\">\n" +
4179 " <thead>\n" +
4180 " <tr>\n" +
4181 " <th st-sort=\"resource_name\"><a>Application name</a></th>\n" +
4182 " <th st-sort=\"owner_user_name\"><a>Owner User</a></th>\n" +
4183 " <th st-sort=\"owner_group_name\"><a>Owner Group</a></th>\n" +
4184 " <th class=\"options\"></th>\n" +
4185 " </tr>\n" +
4186 " <tr>\n" +
4187 " <th><input st-search=\"resource_name\" placeholder=\"search for application\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4188 " <th><input st-search=\"owner_user_name\" placeholder=\"search for user\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4189 " <th><input st-search=\"owner_group_name\" placeholder=\"search for group\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4190 " <th></th>\n" +
4191 " </tr>\n" +
4192 " </thead>\n" +
4193 " <tbody>\n" +
4194 "\n" +
4189 "\n" +
4195 " <tr ng-repeat=\"resource in displayedCollection track by resource.resource_id\">\n" +
4190 " <div class=\"form-group\">\n" +
4196 " <td> {{resource.resource_name}}</td>\n" +
4191 "\n" +
4197 " <td>{{resource.owner_user_name}}</td>\n" +
4192 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
4198 " <td>{{resource.owner_group_name}}</td>\n" +
4193 "\n" +
4199 " <td>\n" +
4194 " <div class=\"col-sm-8 col-lg-9\">\n" +
4200 " <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" +
4195 "\n" +
4201 " </td>\n" +
4196 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4202 " </tr>\n" +
4197 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
4203 " <tfoot>\n" +
4198 "\n" +
4204 " <tr>\n" +
4199 " <div class=\"input-group\">\n" +
4205 " <td colspan=\"4\" class=\"text-center\">\n" +
4200 " <div class=\"input-group-addon\">https://api.github.com/</div>\n" +
4206 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
4201 " <input class=\"form-control\" ng-model=\"$ctrl.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
4207 " </td>\n" +
4202 " <div class=\"input-group-addon\">/</div>\n" +
4208 " </tr>\n" +
4203 " <input class=\"form-control\" ng-model=\"$ctrl.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
4209 " </tfoot>\n" +
4204 " </div>\n" +
4210 " </tbody>\n" +
4205 "\n" +
4211 " </table>\n" +
4206 " </div>\n" +
4207 " </div>\n" +
4208 "\n" +
4209 " <div class=\"form-group\">\n" +
4212 "\n" +
4210 "\n" +
4211 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4212 "\n" +
4213 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
4214 "\n" +
4215 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4216 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4217 " <ul class=\"dropdown-menu\">\n" +
4218 " <li><a>No</a></li>\n" +
4219 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4220 " </ul>\n" +
4221 " </span>\n" +
4222 "\n" +
4223 " </div>\n" +
4224 " </form>\n" +
4225 "\n" +
4226 " <p class=\"m-t-1\">Remember you first need to\n" +
4227 " <strong>\n" +
4228 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
4229 " with Github before we can send issues on your behalf.</p>\n" +
4230 "\n" +
4231 " <p>Every user will have to authorize AppEnlight to access Github to be able to post issues.</p>\n" +
4232 "\n" +
4233 " <div class=\"panel panel-warning\">\n" +
4234 " <div class=\"panel-heading\">Private repository access</div>\n" +
4235 " <div class=\"panel-body\">\n" +
4236 " <p>If you need access to private repositories <a data-ui-sref=\"user.profile.identities\">profile page</a> allows you to require token including private repository permissions.</p>\n" +
4237 "\n" +
4238 " <p>Registration page OAuth does NOT give you token with private repository access permissions.</p>\n" +
4239 " </div>\n" +
4240 " </div>\n" +
4241 "\n" +
4242 " </div>\n" +
4213 "</div>\n"
4243 "</div>\n"
4214 );
4244 );
4215
4245
4216
4246
4217 $templateCache.put('templates/admin/configs/edit.html',
4247 $templateCache.put('components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
4218 "<ng-include src=\"'templates/loader.html'\" ng-if=\"configs.loading.config\"></ng-include>\n" +
4248 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4219 "\n" +
4249 "\n" +
4220 "<div class=\"panel panel-default\" ng-show=\"!configs.loading.config\">\n" +
4250 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4221 " <div class=\"panel-heading\">\n" +
4251 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4222 " <h3 class=\"panel-title\">Basic Configuration</h3>\n" +
4223 " </div>\n" +
4224 " <div class=\"panel-body\">\n" +
4252 " <div class=\"panel-body\">\n" +
4225 " <h2>Visual</h2>\n" +
4253 "\n" +
4226 " <form class=\"form-horizontal\">\n" +
4254 " <h1>Hipchat Integration</h1>\n" +
4255 "\n" +
4256 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4257 "\n" +
4227 " <div class=\"form-group\">\n" +
4258 " <div class=\"form-group\">\n" +
4228 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4259 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
4229 " Footer HTML\n" +
4260 "\n" +
4230 " </label>\n" +
4231 " <div class=\"col-sm-8 col-lg-9\">\n" +
4261 " <div class=\"col-sm-8 col-lg-9\">\n" +
4232 " <textarea class=\"form-control\" type=\"text\" ng-model=\"configs.configs.global.template_footer_html.value\" style=\"min-height: 150px\"></textarea>\n" +
4262 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
4263 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
4233 " </div>\n" +
4264 " </div>\n" +
4234 " </div>\n" +
4265 " </div>\n" +
4235 " </form>\n" +
4236 "\n" +
4266 "\n" +
4237 " <h2>Functional</h2>\n" +
4267 " <div class=\"form-group\">\n" +
4268 "\n" +
4269 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
4270 "\n" +
4271 " <div class=\"col-sm-8 col-lg-9\">\n" +
4272 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
4273 " <input class=\"form-control\" ng-model=\"$ctrl.config.rooms\" placeholder=\"Room ID list\" type=\"text\">\n" +
4274 "\n" +
4275 " <p>\n" +
4276 " <small>Room ID list separated by comma</small>\n" +
4277 " </p>\n" +
4278 " </div>\n" +
4279 "\n" +
4280 " </div>\n" +
4238 "\n" +
4281 "\n" +
4239 " <form class=\"form-horizontal\">\n" +
4240 " <div class=\"form-group\">\n" +
4282 " <div class=\"form-group\">\n" +
4241 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4283 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4242 " Show user groups to non-admin users\n" +
4243 " </label>\n" +
4244 " <div class=\"col-sm-8 col-lg-9\">\n" +
4284 " <div class=\"col-sm-8 col-lg-9\">\n" +
4245 " <button type=\"button\" class=\"btn btn-default\" ng-model=\"configs.configs.global.list_groups_to_non_admins.value\" uib-btn-checkbox>\n" +
4285 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Hipchat\">\n" +
4246 " Enable\n" +
4286 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4247 " </button>\n" +
4287 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4288 " <ul class=\"dropdown-menu\">\n" +
4289 " <li><a>No</a></li>\n" +
4290 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4291 " </ul>\n" +
4292 " </span>\n" +
4293 "\n" +
4294 " <div class=\"btn-group\" uib-dropdown>\n" +
4295 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
4296 " Test integration <span class=\"caret\"></span>\n" +
4297 " </button>\n" +
4298 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
4299 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
4300 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
4301 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
4302 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
4303 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
4304 " </ul>\n" +
4305 " </div>\n" +
4306 "\n" +
4248 " </div>\n" +
4307 " </div>\n" +
4249 " </div>\n" +
4308 " </div>\n" +
4309 "\n" +
4250 " </form>\n" +
4310 " </form>\n" +
4251 "\n" +
4311 "\n" +
4252 " <h2>Global Rate Limiting</h2>\n" +
4312 " </div>\n" +
4313 "</div>\n"
4314 );
4315
4316
4317 $templateCache.put('components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
4318 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4253 "\n" +
4319 "\n" +
4254 " <form class=\"form-horizontal\">\n" +
4320 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4255 " <div class=\"form-group\">\n" +
4321 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4256 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4322 " <div class=\"panel-body\">\n" +
4257 " Ignore reports per minute/per application\n" +
4323 "\n" +
4324 " <h1>Jira Integration</h1>\n" +
4325 "\n" +
4326 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4327 "\n" +
4328 " <div class=\"form-group\" id=\"row-host_name\">\n" +
4329 "\n" +
4330 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4331 " Server URL <span class=\"required\">*</span>\n" +
4258 " </label>\n" +
4332 " </label>\n" +
4259 " <div class=\"col-sm-8 col-lg-9\">\n" +
4333 " <div class=\"col-sm-8 col-lg-9\">\n" +
4260 " <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_reports_rate_limit.value\" />\n" +
4334 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.host_name\"></data-form-errors>\n" +
4335 " <input class=\"form-control\" id=\"host_name\" name=\"host_name\" type=\"text\" ng-model=\"$ctrl.config.host_name\">\n" +
4336 "\n" +
4337 " <p>\n" +
4338 " <small>https://servername.atlassian.net</small>\n" +
4339 " </p>\n" +
4340 "\n" +
4261 " </div>\n" +
4341 " </div>\n" +
4262 " </div>\n" +
4342 " </div>\n" +
4343 " <div class=\"form-group\" id=\"row-user_name\">\n" +
4263 "\n" +
4344 "\n" +
4264 " <div class=\"form-group\">\n" +
4345 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4265 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4346 " Username <span class=\"required\">*</span>\n" +
4266 " Ignore logs per minute/per application\n" +
4267 " </label>\n" +
4347 " </label>\n" +
4268 " <div class=\"col-sm-8 col-lg-9\">\n" +
4348 " <div class=\"col-sm-8 col-lg-9\">\n" +
4269 " <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_logs_rate_limit.value\" />\n" +
4349 "\n" +
4350 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4351 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.config.user_name\">\n" +
4352 "\n" +
4353 " <p>\n" +
4354 " <small>user@email.com</small>\n" +
4355 " </p>\n" +
4356 "\n" +
4270 " </div>\n" +
4357 " </div>\n" +
4271 " </div>\n" +
4358 " </div>\n" +
4359 " <div class=\"form-group\" id=\"row-password\">\n" +
4272 "\n" +
4360 "\n" +
4273 " <div class=\"form-group\">\n" +
4361 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4274 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4362 " Password <span class=\"required\">*</span>\n" +
4275 " Ignore metrics per minute/per application\n" +
4276 " </label>\n" +
4363 " </label>\n" +
4277 " <div class=\"col-sm-8 col-lg-9\">\n" +
4364 " <div class=\"col-sm-8 col-lg-9\">\n" +
4278 " <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_metrics_rate_limit.value\" />\n" +
4365 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.password\"></data-form-errors>\n" +
4366 " <input class=\"form-control\" id=\"password\" name=\"password\" type=\"password\" ng-model=\"$ctrl.config.password\">\n" +
4367 " </div>\n" +
4368 " </div>\n" +
4369 " <div class=\"form-group\" id=\"row-project\">\n" +
4370 "\n" +
4371 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4372 " Project key <span class=\"required\">*</span>\n" +
4373 " </label>\n" +
4374 " <div class=\"col-sm-8 col-lg-9\">\n" +
4375 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.project\"></data-form-errors>\n" +
4376 " <input class=\"form-control\" id=\"project\" name=\"project\" type=\"text\" ng-model=\"$ctrl.config.project\">\n" +
4377 " </div>\n" +
4378 " </div>\n" +
4379 " <div class=\"form-group\" id=\"row-submit\">\n" +
4380 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4381 " <div class=\"col-sm-8 col-lg-9\">\n" +
4382 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup Jira\">\n" +
4383 "\n" +
4384 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4385 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4386 " <ul class=\"dropdown-menu\">\n" +
4387 " <li><a>No</a></li>\n" +
4388 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4389 " </ul>\n" +
4390 " </span>\n" +
4279 " </div>\n" +
4391 " </div>\n" +
4280 " </div>\n" +
4392 " </div>\n" +
4281 "\n" +
4393 "\n" +
4282 " </form>\n" +
4394 " </form>\n" +
4283 "\n" +
4395 "\n" +
4284 " <hr/>\n" +
4285 "\n" +
4396 "\n" +
4286 " <a class=\"btn btn-primary\" ng-click=\"configs.save()\">Save configuration</a>\n" +
4287 " </div>\n" +
4397 " </div>\n" +
4398 "</div>\n"
4399 );
4400
4401
4402 $templateCache.put('components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
4403 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4288 "\n" +
4404 "\n" +
4289 "</div>\n" +
4405 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4406 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4407 " <div class=\"panel-body\">\n" +
4290 "\n" +
4408 "\n" +
4409 " <h1>Slack Integration</h1>\n" +
4410 "\n" +
4411 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4412 "\n" +
4413 " <div class=\"form-group\">\n" +
4414 "\n" +
4415 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4416 " API Token <span class=\"required\">*</span>\n" +
4417 " </label>\n" +
4418 " <div class=\"col-sm-8 col-lg-9\">\n" +
4419 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.webhook_url\"></data-form-errors>\n" +
4420 " <input class=\"form-control\" ng-model=\"$ctrl.config.webhook_url\" placeholder=\"Webhook URL\" type=\"webhook_url\">\n" +
4421 " </div>\n" +
4422 " </div>\n" +
4423 "\n" +
4424 " <div class=\"form-group\">\n" +
4425 "\n" +
4426 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4427 " <div class=\"col-sm-8 col-lg-9\">\n" +
4428 " <input type=\"submit\" class=\"btn btn-primary\"\n" +
4429 " value=\"Connect to Slack\">\n" +
4430 "\n" +
4431 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4432 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4433 " <ul class=\"dropdown-menu\">\n" +
4434 " <li><a>No</a></li>\n" +
4435 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4436 " </ul>\n" +
4437 " </span>\n" +
4438 "\n" +
4439 " <div class=\"btn-group\" uib-dropdown>\n" +
4440 " <button type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
4441 " Test integration <span class=\"caret\"></span>\n" +
4442 " </button>\n" +
4443 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
4444 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
4445 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
4446 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
4447 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
4448 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
4449 " </ul>\n" +
4450 " </div>\n" +
4451 " </div>\n" +
4452 " </div>\n" +
4453 " </form>\n" +
4291 "\n" +
4454 "\n" +
4292 "<div class=\"panel panel-default\">\n" +
4293 " <div class=\"panel-heading\">\n" +
4294 " <h3 class=\"panel-title\">Plugin Configuration</h3>\n" +
4295 " </div>\n" +
4296 " <div class=\"panel-body\">\n" +
4297 " <plugin-config section=\"'admin.config'\">\n" +
4298 " </plugin-config>\n" +
4299 " </div>\n" +
4455 " </div>\n" +
4300 "</div>\n"
4456 "</div>\n"
4301 );
4457 );
4302
4458
4303
4459
4304 $templateCache.put('templates/admin/configs/parent_view.html',
4460 $templateCache.put('components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
4305 "<div ui-view></div>"
4461 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4306 );
4307
4308
4309 $templateCache.put('templates/admin/groups/groups_create.html',
4310 "<ng-include src=\"'templates/loader.html'\" ng-if=\"group.loading.group\"></ng-include>\n" +
4311 "\n" +
4462 "\n" +
4312 "<div ng-show=\"!group.loading.group\">\n" +
4463 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4464 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4465 " <div class=\"panel-body\">\n" +
4313 "\n" +
4466 "\n" +
4314 " <div class=\"panel panel-default\">\n" +
4467 " <h1>Webhooks Integration</h1>\n" +
4315 " <div class=\"panel-body\">\n" +
4468 "\n" +
4316 " <form name=\"group.groupForm\" class=\"form-horizontal\" ng-submit=\"group.createGroup()\">\n" +
4469 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4317 " <div class=\"form-group\" id=\"row-group_name\">\n" +
4470 " <div class=\"form-group\" id=\"row-reports_webhook\">\n" +
4318 " <data-form-errors errors=\"group.groupForm.ae_validation.group_name\"></data-form-errors>\n" +
4471 "\n" +
4319 " <label for=\"group_name\" id=\"label-group_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4472 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4320 " Group name\n" +
4473 " Reports webhook <span class=\"required\">*</span>\n" +
4321 " <span class=\"required\">*</span>\n" +
4474 " </label>\n" +
4322 " </label>\n" +
4475 " <div class=\"col-sm-8 col-lg-9\">\n" +
4323 " <div class=\"col-sm-8 col-lg-9\">\n" +
4476 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.reports_webhook\"></data-form-errors>\n" +
4324 " <input class=\"form-control\" id=\"group_name\" name=\"group_name\" type=\"text\" ng-model=\"group.group.group_name\">\n" +
4477 " <input class=\"form-control\" id=\"reports_webhook\" name=\"reports_webhook\" type=\"text\" ng-model=\"$ctrl.config.reports_webhook\">\n" +
4325 " </div>\n" +
4326 " </div>\n" +
4478 " </div>\n" +
4479 " </div>\n" +
4480 " <div class=\"form-group\" id=\"row-alerts_webhook\">\n" +
4327 "\n" +
4481 "\n" +
4328 " <div class=\"form-group\" id=\"row-description\">\n" +
4482 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
4329 " <data-form-errors errors=\"group.groupForm.ae_validation.description\"></data-form-errors>\n" +
4483 " Alerts webhook <span class=\"required\">*</span>\n" +
4330 " <label for=\"description\" id=\"label-description\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4484 " </label>\n" +
4331 " Description\n" +
4485 " <div class=\"col-sm-8 col-lg-9\">\n" +
4332 " <span class=\"required\">*</span>\n" +
4486 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.alerts_webhook\"></data-form-errors>\n" +
4333 " </label>\n" +
4487 " <input class=\"form-control StringField None\" id=\"alerts_webhook\" name=\"alerts_webhook\" type=\"text\" ng-model=\"$ctrl.config.alerts_webhook\">\n" +
4334 " <div class=\"col-sm-8 col-lg-9\">\n" +
4335 " <input class=\"form-control\" id=\"description\" name=\"description\" type=\"text\" ng-model=\"group.group.description\">\n" +
4336 " </div>\n" +
4337 " </div>\n" +
4488 " </div>\n" +
4338 "\n" +
4489 "\n" +
4339 "\n" +
4490 "\n" +
4340 " <div class=\"form-group\" id=\"row-submit\">\n" +
4491 " </div>\n" +
4341 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4492 " <div class=\"form-group\" id=\"row-submit\">\n" +
4342 " </label>\n" +
4493 "\n" +
4343 " <div class=\"col-sm-8 col-lg-9\">\n" +
4494 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4344 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.groupId ? 'Update' : 'Add'}} Group\">\n" +
4495 " <div class=\"col-sm-8 col-lg-9\">\n" +
4345 " </div>\n" +
4496 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup webhooks\">\n" +
4497 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4498 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4499 " <ul class=\"dropdown-menu\">\n" +
4500 " <li><a>No</a></li>\n" +
4501 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4502 " </ul>\n" +
4503 " </span>\n" +
4346 " </div>\n" +
4504 " </div>\n" +
4347 " </form>\n" +
4505 " </div>\n" +
4348 " </div>\n" +
4506 " </form>\n" +
4349 " </div>\n" +
4507 " </div>\n" +
4508 "</div>\n"
4509 );
4510
4511
4512 $templateCache.put('components/views/logs-browser/logs-browser.html',
4513 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.isLoading.logs\"></ng-include>\n" +
4350 "\n" +
4514 "\n" +
4515 "<div ng-if=\"$ctrl.isLoading.logs === false\">\n" +
4351 "\n" +
4516 "\n" +
4352 " <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
4517 " <p class=\"search-params\">\n" +
4353 " <div class=\"panel-heading\">\n" +
4518 " <strong>Search params:</strong>\n" +
4354 " <h3 class=\"panel-title\">Permissions summary</h3>\n" +
4519 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
4355 " </div>\n" +
4520 " <strong>{{tag.type}}</strong>\n" +
4356 " <div class=\"panel-body\">\n" +
4521 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
4357 " <h3>Direct application permissions</h3>\n" +
4358 "\n" +
4522 "\n" +
4359 " <ul class=\"list-group\">\n" +
4523 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
4360 " <li ng-repeat=\"perm in group.resourcePermissions.group.application\" class=\"animate-repeat list-group-item\">\n" +
4524 " </span>\n" +
4361 " <strong>{{ perm.self.resource_name }}</strong>\n" +
4525 " </p>\n" +
4362 "\n" +
4526 "\n" +
4363 " <div class=\"pull-right\">\n" +
4527 " <p>\n" +
4364 "\n" +
4528 "\n" +
4365 " <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" +
4529 " <script type=\"text/ng-template\" id=\"SearchTypeAheadUrl.html\">\n" +
4366 "\n" +
4530 "\n" +
4367 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
4531 " </script>\n" +
4368 " <span class=\"fa fa-cog\"></span>\n" +
4369 " </a>\n" +
4370 " </div>\n" +
4371 " </li>\n" +
4372 " </ul>\n" +
4373 "\n" +
4532 "\n" +
4374 " <h3>Direct dashboard permissions</h3>\n" +
4533 " <form class=\"form\">\n" +
4534 " <div class=\"typeahead-tags\">\n" +
4535 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter logs for events, filter by servers, namespaces, levels.\"\n" +
4536 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
4537 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:$ctrl.aheadFilter\"\n" +
4538 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
4539 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
4540 " </div>\n" +
4541 " </form>\n" +
4375 "\n" +
4542 "\n" +
4376 " <ul class=\"list-group\">\n" +
4543 " <div class=\"well animate-show position-absolute increse-zindex\" ng-if=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\">\n" +
4377 " <li ng-repeat=\"perm in group.resourcePermissions.group.dashboard\" class=\"animate-repeat list-group-item\">\n" +
4544 " <uib-datepicker></uib-datepicker>\n" +
4378 " <strong>{{ perm.self.resource_name }}</strong>\n" +
4545 " </div>\n" +
4379 "\n" +
4546 "\n" +
4380 " <div class=\"pull-right\">\n" +
4547 " </p>\n" +
4381 " <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" +
4382 "\n" +
4548 "\n" +
4383 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
4549 " <div class=\"panel\">\n" +
4384 " <span class=\"fa fa-cog\"></span>\n" +
4385 " </a>\n" +
4386 " </div>\n" +
4387 " </li>\n" +
4388 " </ul>\n" +
4389 "\n" +
4550 "\n" +
4551 " <div class=\"panel-body\">\n" +
4552 " <c3chart data-domid=\"log_events_chart\" data-data=\"$ctrl.logEventsChartData\" data-config=\"$ctrl.logEventsChartConfig\">\n" +
4553 " </c3chart>\n" +
4390 " </div>\n" +
4554 " </div>\n" +
4391 "\n" +
4392 " </div>\n" +
4555 " </div>\n" +
4393 "\n" +
4556 "\n" +
4394 "\n" +
4557 "\n" +
4395 " <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
4558 " <div class=\"text-center\">\n" +
4396 " <div class=\"panel-heading\">\n" +
4559 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
4397 " <h3 class=\"panel-title\">User list</h3>\n" +
4560 " ng-change=\"$ctrl.paginationChange()\"\n" +
4398 " </div>\n" +
4561 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
4399 " <div class=\"panel-body\">\n" +
4562 " </div>\n" +
4400 "\n" +
4401 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"group.addUser()\">\n" +
4402 " <div class=\"form-group\">\n" +
4403 " <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" +
4404 " </div>\n" +
4405 " <div class=\"form-group\">\n" +
4406 " <button class=\"btn btn-info\" ng-disabled=\"!group.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Add user</button>\n" +
4407 " </div>\n" +
4408 " </form>\n" +
4409 "\n" +
4563 "\n" +
4410 " </div>\n" +
4564 " <div class=\"panel panel-default\">\n" +
4411 "\n" +
4565 "\n" +
4412 " <table st-table=\"displayedCollection\" st-safe-src=\"group.users\" class=\"table table-striped\">\n" +
4566 " <table class=\"table table-striped log-list\">\n" +
4567 " <caption>Logs</caption>\n" +
4413 " <thead>\n" +
4568 " <thead>\n" +
4414 " <tr>\n" +
4569 " <tr>\n" +
4415 " <th st-sort=\"user_name\"><a>Username</a></th>\n" +
4570 " <th class=\"c1 resource\">Application</th>\n" +
4416 " <th st-sort=\"email\"><a>Email</a></th>\n" +
4571 " <th class=\"c2 message\">Message</th>\n" +
4417 " <th st-sort=\"status\"><a>Status</a></th>\n" +
4572 " <th class=\"c3 when\">When</th>\n" +
4418 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
4419 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
4420 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
4421 " <th class=\"options\" style=\"width: 130px\"></th>\n" +
4422 " </tr>\n" +
4423 " <tr>\n" +
4424 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4425 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4426 " <th></th>\n" +
4427 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4428 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4429 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4430 " <th></th>\n" +
4431 " </tr>\n" +
4573 " </tr>\n" +
4432 " </thead>\n" +
4574 " </thead>\n" +
4433 " <tbody>\n" +
4575 " <tbody>\n" +
4434 "\n" +
4576 " <tr ng-repeat=\"log in $ctrl.logsPage track by log.log_id\" class=\"{{$odd ? 'odd' : 'even'}}\">\n" +
4435 " <tr ng-repeat=\"user in displayedCollection\">\n" +
4577 " <td class=\"c1\">\n" +
4436 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
4578 " <a class=\"tag application\" ng-click=\"$ctrl.addSearchTag({type:'resource', value:log.resource_id})\">\n" +
4437 " <td>{{user.email}}</td>\n" +
4579 " <span class=\"name\">{{log.resource_name}}</span></a>\n" +
4438 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
4439 " <td>{{user.first_name}}</td>\n" +
4440 " <td>{{user.last_name}}</td>\n" +
4441 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
4442 " <td>\n" +
4443 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
4444 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4445 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
4446 " <ul class=\"dropdown-menu\">\n" +
4447 " <li><a>No</a></li>\n" +
4448 " <li><a ng-click=\"group.removeUser(user)\">Yes</a></li>\n" +
4449 " </ul>\n" +
4450 " </span>\n" +
4451 " </tr>\n" +
4452 " <tfoot>\n" +
4453 " <tr>\n" +
4454 " <td colspan=\"7\" class=\"text-center\">\n" +
4455 " <div st-pagination=\"\" st-items-by-page=\"50\" st-displayed-pages=\"7\"></div>\n" +
4456 " </td>\n" +
4580 " </td>\n" +
4457 " </tr>\n" +
4581 " <td class=\"c2\">\n" +
4458 " </tfoot>\n" +
4582 " <a class=\"tag {{log.log_level|lowercase}}\" ng-click=\"$ctrl.addSearchTag({type:'level', value:log.log_level})\">\n" +
4459 " </tbody>\n" +
4583 " <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
4460 " </table>\n" +
4584 " <a class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:'namespace', value:log.namespace})\">\n" +
4461 "\n" +
4585 " <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
4462 " </div>\n" +
4586 " <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:tag, value:value})\">\n" +
4463 "\n" +
4587 " <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
4464 "\n" +
4588 " <div class=\"log\">{{log.message}}</div>\n" +
4465 "</div>\n"
4589 " </td>\n" +
4466 );
4590 " <td class=\"c3 when\">\n" +
4467
4591 " <a ng-click=\"$ctrl.filterId(log)\" data-uib-tooltip=\"{{log.timestamp}}\">\n" +
4468
4592 " <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
4469 $templateCache.put('templates/admin/groups/groups_list.html',
4593 " </a>\n" +
4470 "<ng-include src=\"'templates/loader.html'\" ng-if=\"groups.loading.groups\"></ng-include>\n" +
4594 " </td>\n" +
4595 " </tr>\n" +
4471 "\n" +
4596 "\n" +
4472 "<div class=\"panel panel-default\" ng-show=\"!groups.loading.groups\">\n" +
4597 " </tbody>\n" +
4598 " </table>\n" +
4473 "\n" +
4599 "\n" +
4474 " <table st-table=\"displayedCollection\" st-safe-src=\"groups.groups\" class=\"table table-striped\">\n" +
4600 " </div>\n" +
4475 " <thead>\n" +
4476 " <tr>\n" +
4477 " <th st-sort=\"group_name\"><a>Group name</a></th>\n" +
4478 " <th st-sort=\"description\"><a>Description</a></th>\n" +
4479 " <th st-sort=\"members\"><a>Member count</a></th>\n" +
4480 " <th class=\"options\"></th>\n" +
4481 " </tr>\n" +
4482 " <tr>\n" +
4483 " <th><input st-search=\"group_name\" placeholder=\"search for group name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4484 " <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4485 " <th></th>\n" +
4486 " <th></th>\n" +
4487 " </tr>\n" +
4488 " </thead>\n" +
4489 " <tbody>\n" +
4490 "\n" +
4601 "\n" +
4491 " <tr ng-repeat=\"group in displayedCollection track by group.id\">\n" +
4602 " <div class=\"text-center\">\n" +
4492 " <td>{{group.group_name}}</td>\n" +
4603 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
4493 " <td>{{group.description}}</td>\n" +
4604 " ng-change=\"$ctrl.paginationChange()\"\n" +
4494 " <td>{{group.member_count}}</td>\n" +
4605 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
4495 " <td>\n" +
4606 " </div>\n" +
4496 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.group.update({groupId:group.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
4497 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4498 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
4499 " <ul class=\"dropdown-menu\">\n" +
4500 " <li><a>No</a></li>\n" +
4501 " <li><a ng-click=\"groups.removeGroup(group)\">Yes</a></li>\n" +
4502 " </ul>\n" +
4503 " </span>\n" +
4504 " </tr>\n" +
4505 " <tfoot>\n" +
4506 " <tr>\n" +
4507 " <td colspan=\"4\" class=\"text-center\">\n" +
4508 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
4509 " </td>\n" +
4510 " </tr>\n" +
4511 " </tfoot>\n" +
4512 " </tbody>\n" +
4513 " </table>\n" +
4514 "\n" +
4607 "\n" +
4515 "</div>\n" +
4608 "</div>\n"
4516 "\n"
4517 );
4609 );
4518
4610
4519
4611
4520 $templateCache.put('templates/admin/groups/parent_view.html',
4612 $templateCache.put('components/views/settings-view/settings-view.html',
4521 "<div ui-view></div>"
4613 "<div class=\"row\">\n" +
4614 " <div class=\"col-sm-3\" id=\"menu\">\n" +
4615 " <div class=\"panel panel-default\">\n" +
4616 " <div class=\"panel-heading\">Applications</div>\n" +
4617 " <ul class=\"list-group\">\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" +
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" +
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" +
4621 " </ul>\n" +
4622 " </div>\n" +
4623 "\n" +
4624 "\n" +
4625 " <div class=\"panel panel-default\">\n" +
4626 " <div class=\"panel-heading\">Settings</div>\n" +
4627 " <ul class=\"list-group\">\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" +
4635 " <div class=\"panel panel-default\">\n" +
4636 " <div class=\"panel-heading\">Notifications</div>\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" +
4642 " </div>\n" +
4643 "\n" +
4644 " <div class=\"col-sm-9\" ui-view></div>\n" +
4645 "</div>\n"
4522 );
4646 );
4523
4647
4524
4648
4525 $templateCache.put('templates/admin/parent_view.html',
4649 $templateCache.put('components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
4526 "<div class=\"col-sm-3\" id=\"menu\">\n" +
4650 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.email\"></ng-include>\n" +
4527 " <div class=\"panel panel-default\">\n" +
4651 "\n" +
4528 " <div class=\"panel-heading\">Users and groups</div>\n" +
4652 "<div ng-show=\"!$ctrl.loading.email\">\n" +
4529 " <ul class=\"list-group\">\n" +
4530 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.list\"> Users</a></li>\n" +
4531 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.create\"> Create user</a></li>\n" +
4532 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.list\"> Groups</a></li>\n" +
4533 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.create\"> Create group</a></li>\n" +
4534 " </ul>\n" +
4535 " </div>\n" +
4536 " <div class=\"panel panel-default\">\n" +
4537 " <div class=\"panel-heading\">Resources</div>\n" +
4538 " <ul class=\"list-group\">\n" +
4539 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.application.list\"> List applications</a></li>\n" +
4540 " </ul>\n" +
4541 " </div>\n" +
4542 "\n" +
4653 "\n" +
4543 " <div class=\"panel panel-default\">\n" +
4654 " <div class=\"panel panel-default\">\n" +
4544 " <div class=\"panel-heading\">System</div>\n" +
4655 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4545 " <ul class=\"list-group\">\n" +
4656 " <div class=\"panel-body\">\n" +
4546 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.configs.list\"> Config variables</a></li>\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" +
4547 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.system\"> System</a></li>\n" +
4658 " <form class=\"form-horizontal\" name=\"$ctrl.channelForm\" ng-submit=\"$ctrl.createChannel()\">\n" +
4548 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.partitions\"> Partition Management</a></li>\n" +
4659 " <div class=\"form-group\" id=\"row-email\">\n" +
4549 " </ul>\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" +
4550 " </div>\n" +
4678 " </div>\n" +
4551 "</div>\n" +
4679 "</div>\n"
4552 "\n" +
4553 "\n" +
4554 "<div class=\"col-sm-9\" ui-view></div>\n"
4555 );
4680 );
4556
4681
4557
4682
4558 $templateCache.put('templates/admin/partitions.html',
4683 $templateCache.put('components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
4559 "<ng-include src=\"'templates/loader.html'\" ng-if=\"partitions.loading.partitions\"></ng-include>\n" +
4684 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.channels || $ctrl.loading.applications\"></ng-include>\n" +
4560 "\n" +
4685 "\n" +
4561 "<div ng-show=\"!partitions.loading.partitions\">\n" +
4686 "<div ng-if=\"!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions\">\n" +
4562 "\n" +
4687 "\n" +
4563 " <div class=\"panel panel-default\">\n" +
4688 " <div class=\"panel panel-default\">\n" +
4564 " <div class=\"panel-heading\">\n" +
4689 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4565 " DELETE Daily Partitions\n" +
4690 " <div class=\"panel-body\">\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" +
4696 " <report-alert-action action=\"action\" rule-definitions=\"$ctrl.ruleDefinitions\"\n" +
4697 " possible-channels=\"$ctrl.alertChannels\"\n" +
4698 " actions=\"$ctrl.alertActions\" applications=\"$ctrl.applications\"\n" +
4699 " ng-repeat=\"action in $ctrl.alertActions | filter: {type:'report'}\"></report-alert-action>\n" +
4700 "\n" +
4566 " </div>\n" +
4701 " </div>\n" +
4702 " </div>\n" +
4567 "\n" +
4703 "\n" +
4568 " <form name=\"partitions.dailyPartitionsForm\"\n" +
4704 " <div class=\"panel panel-default\">\n" +
4569 " novalidate ng-submit=\"partitions.partitionsDelete('dailyPartitions')\"\n" +
4705 " <div class=\"panel-body\">\n" +
4570 " class=\"form-inline\"\n" +
4706 " <h1>Alert channels</h1>\n" +
4571 " ng-class=\"{'has-error':partitions.dailyPartitionsForm.$invalid}\">\n" +
4572 "\n" +
4707 "\n" +
4573 " <div class=\"panel-body\">\n" +
4708 " <p>Here you can configure your <em>alert channels</em>.</p>\n" +
4574 "\n" +
4709 "\n" +
4575 " <input type=\"text\" name=\"confirm\"\n" +
4710 " <p>An alert channel serves as means of delivery of notifications about important events that happen in your applications.</p>\n" +
4576 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control input-autosize\" confirm-validate required ng-model=\"partitions.dailyConfirm\">\n" +
4577 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.dailyPartitionsForm.$invalid\">\n" +
4578 " <input type=\"checkbox\" ng-model=\"partitions.dailyChecked\" ng-change=\"partitions.setCheckedList('dailyPartitions')\"> Check All\n" +
4579 "\n" +
4711 "\n" +
4580 " </div>\n" +
4712 " <div class=\"alert alert-success\">You can add more integrations that support different alert channels via application management panel.</div>\n" +
4581 "\n" +
4713 "\n" +
4582 " <table class=\"table table-striped\">\n" +
4714 " <table class=\"table table-striped\">\n" +
4583 " <tr>\n" +
4715 " <tr ng-repeat=\"channel in $ctrl.alertChannels\" class=\"animate-repeat\">\n" +
4584 " <th class=\"c1 date\">Date</th>\n" +
4716 " <td><strong>{{ channel.channel_visible_value }}</strong></td>\n" +
4585 " <th class=\"c2 indices\">Indices</th>\n" +
4717 " <td class=\"text-right\">\n" +
4586 " </tr>\n" +
4718 " <span class=\"btn btn-default\" data-uib-tooltip=\"Channel is {{ channel.channel_validated? '' :'NOT' }} validated\" tooltip-append-to-body=\"true\"\n" +
4587 " <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.dailyPartitions\">\n" +
4719 " ng-class=\"{dim:!channel.channel_validated}\">\n" +
4588 " <td class=\"c1\">{{row[0]}}</td>\n" +
4720 " <span class=\"fa\" ng-class=\"{'fa-check-circle':channel.channel_validated, 'fa-times-circle':!channel.channel_validated}\"></span>\n" +
4589 " <td class=\"c2\">\n" +
4721 " </span>\n" +
4590 " <ul class=\"list-group\">\n" +
4722 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.send_alerts ? 'OFF' : 'ON' }} alerting on this chanel\"\n" +
4591 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
4723 " ng-click=\"$ctrl.updateChannel(channel,'send_alerts')\" ng-class=\"{dim:!channel.send_alerts}\" tooltip-append-to-body=\"true\">\n" +
4592 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
4724 " <span class=\"fa fa-rss\"></span> Alerts\n" +
4593 " </li>\n" +
4725 " </a>\n" +
4594 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
4726 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.daily_digest ? 'OFF' : 'ON' }} daily digests on this channel\"\n" +
4595 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
4727 " ng-click=\"$ctrl.updateChannel(channel,'daily_digest')\" ng-class=\"{dim:!channel.daily_digest}\" tooltip-append-to-body=\"true\">\n" +
4596 " </li>\n" +
4728 " <span class=\"fa fa-envelope\"></span> Daily digests\n" +
4597 " </ul>\n" +
4729 " </a>\n" +
4730 "\n" +
4731 " <span class=\"dropdown\" 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" +
4733 " <ul class=\"dropdown-menu\">\n" +
4734 " <li><a>No</a></li>\n" +
4735 " <li><a ng-click=\"$ctrl.removeChannel(channel)\">Yes</a></li>\n" +
4736 " </ul>\n" +
4737 " </span>\n" +
4738 "\n" +
4598 " </td>\n" +
4739 " </td>\n" +
4599 " </tr>\n" +
4740 " </tr>\n" +
4600 " </table>\n" +
4741 " </table>\n" +
4601 " </form>\n" +
4602 "\n" +
4742 "\n" +
4743 " </div>\n" +
4603 " </div>\n" +
4744 " </div>\n" +
4604 "\n" +
4745 "\n" +
4746 "</div>\n"
4747 );
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" +
4753 "<div ng-show=\"!$ctrl.loading.tokens\">\n" +
4754 "\n" +
4605 " <div class=\"panel panel-default\">\n" +
4755 " <div class=\"panel panel-default\">\n" +
4606 " <div class=\"panel-heading\">\n" +
4756 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4607 " DELETE Permanent Partitions\n" +
4608 " </div>\n" +
4609 "\n" +
4757 "\n" +
4610 " <form name=\"partitions.permanentPartitionsForm\" novalidate\n" +
4758 " <div class=\"panel-body\">\n" +
4611 " ng-submit=\"partitions.partitionsDelete('permanentPartitions')\"\n" +
4612 " class=\"form-inline\"\n" +
4613 " ng-class=\"{'has-error':partitions.permanentPartitionsForm.$invalid}\">\n" +
4614 "\n" +
4759 "\n" +
4760 " <div class=\"alert alert-success\">You can use those tokens to authenticate yourself when performing various API calls</div>\n" +
4615 "\n" +
4761 "\n" +
4616 " <div class=\"panel-body\">\n" +
4762 " <hr/>\n" +
4617 "\n" +
4763 "\n" +
4764 " <form method=\"post\" class=\"form-inline\" name=\"$ctrl.TokenForm\" ng-submit=\"$ctrl.addToken()\" novalidate>\n" +
4765 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.description\"></data-form-errors>\n" +
4766 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.expires\"></data-form-errors>\n" +
4618 " <div class=\"form-group\">\n" +
4767 " <div class=\"form-group\">\n" +
4619 " <input type=\"text\" name=\"confirm\"\n" +
4768 " <label>\n" +
4620 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control\" confirm-validate required ng-model=\"partitions.permConfirm\">\n" +
4769 " Description\n" +
4621 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.permanentPartitionsForm.$invalid\">\n" +
4770 " </label>\n" +
4622 " <input type=\"checkbox\" ng-model=\"partitions.permChecked\" ng-change=\"partitions.setCheckedList('permanentPartitions')\"> Check All\n" +
4771 " <input class=\"form-control\" name=\"description\" placeholder=\"Token description\" type=\"text\" ng-model=\"$ctrl.form.description\">\n" +
4772 " </div>\n" +
4773 " <div class=\"form-group\">\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" +
4623 " </div>\n" +
4785 " </div>\n" +
4786 " </form>\n" +
4624 "\n" +
4787 "\n" +
4625 " </div>\n" +
4788 " </div>\n" +
4626 "\n" +
4789 "\n" +
4627 " <table class=\"table table-striped\">\n" +
4628 " <tr>\n" +
4629 " <th class=\"c1 date\">Date</th>\n" +
4630 " <th class=\"c2 indices\">Indices</th>\n" +
4631 " </tr>\n" +
4632 " <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.permanentPartitions\">\n" +
4633 " <td class=\"c1\">{{row[0]}}</td>\n" +
4634 " <td class=\"c2\">\n" +
4635 " <ul class=\"list-group\">\n" +
4636 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
4637 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
4638 " </li>\n" +
4639 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
4640 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
4641 " </li>\n" +
4642 " </ul>\n" +
4643 " </td>\n" +
4644 " </tr>\n" +
4645 " </table>\n" +
4646 " </form>\n" +
4647 "\n" +
4790 "\n" +
4648 " </div>\n" +
4791 " </div>\n" +
4649 "\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" +
4650 "</div>\n"
4833 "</div>\n"
4651 );
4834 );
4652
4835
4653
4836
4654 $templateCache.put('templates/admin/system.html',
4837 $templateCache.put('components/views/user-identities-view/user-identities-view.html',
4655 "<ng-include src=\"'templates/loader.html'\" ng-if=\"system.loading.system\"></ng-include>\n" +
4838 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.identities\"></ng-include>\n" +
4656 "\n" +
4657 "<div ng-if=\"system.loading.system == false\">\n" +
4658 " <div class=\"row\">\n" +
4659 " <div class=\"col-sm-12\">\n" +
4660 " <div class=\"panel panel-default\">\n" +
4661 " <div class=\"panel-heading\">\n" +
4662 " <h3 class=\"panel-title\">\n" +
4663 " System Info\n" +
4664 " </h3>\n" +
4665 " </div>\n" +
4666 " <div class=\"panel-body\">\n" +
4667 "\n" +
4668 " <p><strong>System Load:</strong>\n" +
4669 " 1min: {{system.systemLoad[0]}}, 5min: {{system.systemLoad[1]}}, 15min: {{system.systemLoad[2]}}\n" +
4670 " </p>\n" +
4671 " <p><strong>Awaiting tasks:</strong>\n" +
4672 " <ul>\n" +
4673 " <li>reports: {{system.queueStats.waiting_reports}}</li>\n" +
4674 " <li>logs: {{system.queueStats.waiting_logs}}</li>\n" +
4675 " <li>metrics: {{system.queueStats.waiting_metrics}}</li>\n" +
4676 " <li>other: {{system.queueStats.waiting_other}}</li>\n" +
4677 " </ul>\n" +
4678 " </p>\n" +
4679 " <p><strong>Queue stats from last minute:</strong>\n" +
4680 " <ul>\n" +
4681 " <li>Processed reports: {{system.queueStats.processed_reports}}</li>\n" +
4682 " <li>Processed logs: {{system.queueStats.processed_logs}}</li>\n" +
4683 " <li>Processed metrics: {{system.queueStats.processed_metrics}}</li>\n" +
4684 " </ul>\n" +
4685 " </p>\n" +
4686 "\n" +
4839 "\n" +
4687 " <p><strong>Disks:</strong>\n" +
4840 "<div ng-show=\"!$ctrl.loading.identities\">\n" +
4688 " <ul>\n" +
4689 " <li ng-repeat=\"disk in system.disks\">\n" +
4690 " <strong>{{disk.device}}</strong> {{disk.free}}/{{disk.total}}, {{disk.percentage}}% used\n" +
4691 " </li>\n" +
4692 " </ul>\n" +
4693 " </p>\n" +
4694 "\n" +
4841 "\n" +
4695 " <p><strong>Process stats:</strong>\n" +
4842 " <div class=\"panel panel-default\">\n" +
4696 " <ul>\n" +
4843 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4697 " <li>FD soft limits: {{system.selfInfo.fds.soft}}</li>\n" +
4844 " <div class=\"panel-body\">\n" +
4698 " <li>FD hard limits: {{system.selfInfo.fds.hard}}</li>\n" +
4699 " <li>Memlock soft limits: {{system.selfInfo.memlock.soft}}</li>\n" +
4700 " <li>Memlock hard limits: {{system.selfInfo.memlock.hard}}</li>\n" +
4701 " </ul>\n" +
4702 " </p>\n" +
4703 "\n" +
4845 "\n" +
4704 " </div>\n" +
4846 " <div class=\"col-sm-6\">\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" +
4705 " </div>\n" +
4882 " </div>\n" +
4706 " </div>\n" +
4883 " </div>\n" +
4707 " </div>\n" +
4884 " </div>\n" +
4708 " <div class=\"row\">\n" +
4885 "</div>\n"
4709 " <div class=\"col-sm-12\">\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" +
4710 "\n" +
4891 "\n" +
4711 " <div class=\"panel panel-default\">\n" +
4892 "<div ng-show=\"!$ctrl.loading.password\">\n" +
4712 " <div class=\"panel-body\">\n" +
4713 "\n" +
4893 "\n" +
4714 " <uib-tabset>\n" +
4894 " <div class=\"panel panel-default\">\n" +
4715 " <uib-tab>\n" +
4895 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4716 " <uib-tab-heading>\n" +
4896 " <div class=\"panel-body\">\n" +
4717 " Postgresql Tables\n" +
4718 " </uib-tab-heading>\n" +
4719 "\n" +
4897 "\n" +
4720 " <table class=\"table table-striped\">\n" +
4898 " <form class=\"form-horizontal\" name=\"$ctrl.passwordForm\" ng-submit=\"$ctrl.updatePassword()\">\n" +
4721 " <thead>\n" +
4899 " <div class=\"form-group\" id=\"row-old_password\">\n" +
4722 " <tr>\n" +
4900 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.old_password\"></data-form-errors>\n" +
4723 " <th class=\"c1 tablename\">Table name</th>\n" +
4901 " <label for=\"old_password\" id=\"label-old_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4724 " <th class=\"c2 size_human\">Size</th>\n" +
4902 " Old Password\n" +
4725 " </tr>\n" +
4903 " <span class=\"required\">*</span>\n" +
4726 " </thead>\n" +
4904 " </label>\n" +
4727 " <tbody>\n" +
4905 " <div class=\"col-sm-8 col-lg-9\">\n" +
4728 " <tr class=\"r{{$index}}\" ng-repeat=\"row in system.DBtables\">\n" +
4906 " <input class=\"form-control\" id=\"old_password\" name=\"old_password\" type=\"password\" ng-model=\"$ctrl.form.old_password\">\n" +
4729 " <td class=\"c1\">{{row.table_name}}</td>\n" +
4907 " </div>\n" +
4730 " <td class=\"c2\">{{row.size_human}}</td>\n" +
4908 " </div>\n" +
4731 " </tr>\n" +
4909 " <div class=\"form-group\" id=\"row-new_password\">\n" +
4732 " </tbody>\n" +
4910 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password\"></data-form-errors>\n" +
4733 " </table>\n" +
4911 " <label for=\"new_password\" id=\"label-new_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4912 " New Password\n" +
4913 " <span class=\"required\">*</span>\n" +
4914 " </label>\n" +
4915 " <div class=\"col-sm-8 col-lg-9\">\n" +
4916 " <input class=\"form-control\" id=\"new_password\" name=\"new_password\" type=\"password\" ng-model=\"$ctrl.form.new_password\">\n" +
4917 " </div>\n" +
4918 " </div>\n" +
4919 " <div class=\"form-group\" id=\"row-new_password_confirm\">\n" +
4920 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password_confirm\"></data-form-errors>\n" +
4921 " <label for=\"new_password_confirm\" id=\"label-new_password_confirm\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4922 " Confirm Password\n" +
4923 " <span class=\"required\">*</span>\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" +
4928 " </div>\n" +
4929 " <div class=\"form-group\" id=\"row-submit\">\n" +
4930 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\"></label>\n" +
4931 " <div class=\"col-sm-8 col-lg-9\">\n" +
4932 " <input class=\"form-control SubmitField btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Change Password\">\n" +
4933 " </div>\n" +
4934 " </div>\n" +
4935 " </form>\n" +
4734 "\n" +
4936 "\n" +
4735 " </uib-tab>\n" +
4937 " </div>\n" +
4736 "\n" +
4938 " </div>\n" +
4737 " <uib-tab>\n" +
4939 "</div>\n"
4738 " <uib-tab-heading>\n" +
4940 );
4739 " Elasticsearch Indices\n" +
4941
4740 " </uib-tab-heading>\n" +
4942
4741 "\n" +
4943 $templateCache.put('components/views/user-profile-view/user-profile-view.html',
4742 " <table class=\"table table-striped\">\n" +
4944 "<ui-view></ui-view><ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.profile\"></ng-include>\n" +
4743 " <thead>\n" +
4744 " <tr>\n" +
4745 " <th class=\"c1 tablename\">Index name</th>\n" +
4746 " <th class=\"c2 size_human\">Size</th>\n" +
4747 " </tr>\n" +
4748 " </thead>\n" +
4749 " <tbody>\n" +
4750 " <tr class=\"r{{$index}}\" ng-repeat=\"row in system.ESIndices\">\n" +
4751 " <td class=\"c1\">{{row.name}}</td>\n" +
4752 " <td class=\"c2\">{{row.size_human}}</td>\n" +
4753 " </tr>\n" +
4754 " </tbody>\n" +
4755 " </table>\n" +
4756 "\n" +
4757 " </uib-tab>\n" +
4758 "\n" +
4759 " <uib-tab>\n" +
4760 " <uib-tab-heading>\n" +
4761 " Processes\n" +
4762 " </uib-tab-heading>\n" +
4763 "\n" +
4764 " <table class=\"table table-striped\">\n" +
4765 " <thead>\n" +
4766 " <tr>\n" +
4767 " <th class=\"c1 tablename\">Owner</th>\n" +
4768 " <th class=\"c2 tablename\">PID</th>\n" +
4769 " <th class=\"c3 tablename\">CPU</th>\n" +
4770 " <th class=\"c4 tablename\">MEM</th>\n" +
4771 " <th class=\"c4 tablename\">Name</th>\n" +
4772 " </tr>\n" +
4773 " </thead>\n" +
4774 " <tbody>\n" +
4775 " <tr class=\"r{{$index}}\" ng-repeat-start=\"row in system.processInfo\">\n" +
4776 " <td class=\"c1\">{{row.owner}}</td>\n" +
4777 " <td class=\"c2\">{{row.pid}}</td>\n" +
4778 " <td class=\"c3\">{{row.cpu}}</td>\n" +
4779 " <td class=\"c4\">{{row.mem_usage}} ({{row.mem_percentage}}%)</td>\n" +
4780 " <td class=\"c5\"><strong>{{row.name}}</strong></td>\n" +
4781 " </tr>\n" +
4782 " <tr ng-repeat-end>\n" +
4783 " <td colspan=\"5\" class=\"word-wrap\">{{row.command}}</td>\n" +
4784 " </tr>\n" +
4785 " </tbody>\n" +
4786 " </table>\n" +
4787 "\n" +
4788 " </uib-tab>\n" +
4789 "\n" +
4790 " <uib-tab>\n" +
4791 " <uib-tab-heading>\n" +
4792 " Python packages\n" +
4793 " </uib-tab-heading>\n" +
4794 "\n" +
4795 " <table class=\"table\">\n" +
4796 " <tr ng-repeat=\"package in system.packages\">\n" +
4797 " <td>{{package.name}}</td>\n" +
4798 " <td>{{package.version}}</td>\n" +
4799 " </tr>\n" +
4800 " </table>\n" +
4801 " </p>\n" +
4802 "\n" +
4803 " </uib-tab>\n" +
4804 "\n" +
4805 " </uib-tabset>\n" +
4806 " </div>\n" +
4807 " </div>\n" +
4808 " </div>\n" +
4809 " </div>\n" +
4810 "</div>\n"
4811 );
4812
4813
4814 $templateCache.put('templates/admin/users/parent_view.html',
4815 "<div ui-view></div>"
4816 );
4817
4818
4819 $templateCache.put('templates/admin/users/users_create.html',
4820 "<ng-include src=\"'templates/loader.html'\" ng-if=\"user.loading.user\"></ng-include>\n" +
4821 "\n" +
4822 "<div ng-show=\"!user.loading.user\">\n" +
4823 "\n" +
4945 "\n" +
4946 "<div ng-show=\"!$ctrl.loading.profile\">\n" +
4824 " <div class=\"panel panel-default\">\n" +
4947 " <div class=\"panel panel-default\">\n" +
4948 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4825 " <div class=\"panel-body\">\n" +
4949 " <div class=\"panel-body\">\n" +
4826 "\n" +
4950 " <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.updateProfile()\">\n" +
4827 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"user.user.id\">\n" +
4828 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-user-secret\"></span> Re-login to user</a>\n" +
4829 " <ul class=\"dropdown-menu\">\n" +
4830 " <li><a>No</a></li>\n" +
4831 " <li><a ng-click=\"user.reloginUser(user)\">Yes</a></li>\n" +
4832 " </ul>\n" +
4833 " </span>\n" +
4834 "\n" +
4835 " <form name=\"user.profileForm\" class=\"form-horizontal\" ng-submit=\"user.createUser()\">\n" +
4836 " <div class=\"form-group\" id=\"row-user_name\">\n" +
4837 " <data-form-errors errors=\"user.profileForm.ae_validation.user_name\"></data-form-errors>\n" +
4838 " <label for=\"user_name\" id=\"label-user_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4839 " User name\n" +
4840 " <span class=\"required\">*</span>\n" +
4841 " </label>\n" +
4842 " <div class=\"col-sm-8 col-lg-9\">\n" +
4843 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"user.user.user_name\">\n" +
4844 " </div>\n" +
4845 " </div>\n" +
4846 "\n" +
4847 " <div class=\"form-group\" id=\"row-user_password\">\n" +
4848 " <data-form-errors errors=\"user.profileForm.ae_validation.user_password\"></data-form-errors>\n" +
4849 " <label for=\"user_password\" id=\"label-user_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4850 " Password\n" +
4851 " <span class=\"required\">*</span>\n" +
4852 " </label>\n" +
4853 " <div class=\"col-sm-8 col-lg-9\">\n" +
4854 " <input class=\"form-control\" id=\"user_password\" name=\"user_password\" type=\"password\" ng-model=\"user.user.user_password\">\n" +
4855 "\n" +
4856 " <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" +
4857 " <span ng-show=\"user.gen_pass.length > 0\">(generated password: {{user.gen_pass}})</span>\n" +
4858 " </p>\n" +
4859 "\n" +
4860 " </div>\n" +
4861 " </div>\n" +
4862 "\n" +
4863 "\n" +
4864 " <div class=\"form-group\" id=\"row-email\">\n" +
4951 " <div class=\"form-group\" id=\"row-email\">\n" +
4865 " <data-form-errors errors=\"user.profileForm.ae_validation.email\"></data-form-errors>\n" +
4952 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
4866 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4953 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4867 " Email Address\n" +
4954 " Email Address\n" +
4868 " <span class=\"required\">*</span>\n" +
4955 " <span class=\"required\">*</span>\n" +
4869 " </label>\n" +
4956 " </label>\n" +
4870 " <div class=\"col-sm-8 col-lg-9\">\n" +
4957 " <div class=\"col-sm-8 col-lg-9\">\n" +
4871 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"user.user.email\">\n" +
4958 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
4872 " </div>\n" +
4959 " </div>\n" +
4873 " </div>\n" +
4960 " </div>\n" +
4874 "\n" +
4961 "\n" +
4875 " <div class=\"form-group\" id=\"row-first_name\">\n" +
4962 " <div class=\"form-group\" id=\"row-first_name\">\n" +
4876 " <data-form-errors errors=\"user.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
4963 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
4877 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4964 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4878 " First Name\n" +
4965 " First Name\n" +
4879 " </label>\n" +
4966 " </label>\n" +
4880 " <div class=\"col-sm-8 col-lg-9\">\n" +
4967 " <div class=\"col-sm-8 col-lg-9\">\n" +
4881 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"user.user.first_name\">\n" +
4968 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
4882 " </div>\n" +
4969 " </div>\n" +
4883 " </div>\n" +
4970 " </div>\n" +
4884 " <div class=\"form-group\" id=\"row-last_name\">\n" +
4971 " <div class=\"form-group\" id=\"row-last_name\">\n" +
4885 " <data-form-errors errors=\"user.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
4972 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
4886 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4973 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4887 " Last Name\n" +
4974 " Last Name\n" +
4888 " </label>\n" +
4975 " </label>\n" +
4889 " <div class=\"col-sm-8 col-lg-9\">\n" +
4976 " <div class=\"col-sm-8 col-lg-9\">\n" +
4890 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"user.user.last_name\">\n" +
4977 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
4891 " </div>\n" +
4978 " </div>\n" +
4892 " </div>\n" +
4979 " </div>\n" +
4893 "\n" +
4980 " <div class=\"form-group\" id=\"row-company_name\">\n" +
4894 " <div class=\"form-group\" id=\"row-status\">\n" +
4981 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_name\"></data-form-errors>\n" +
4895 " <data-form-errors errors=\"user.profileForm.ae_validation.status\"></data-form-errors>\n" +
4982 " <label for=\"company_name\" id=\"label-company_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4896 " <label for=\"status\" id=\"label-status\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4983 " Company Name\n" +
4897 " Active\n" +
4898 " </label>\n" +
4984 " </label>\n" +
4899 " <div class=\"col-sm-8 col-lg-9\">\n" +
4985 " <div class=\"col-sm-8 col-lg-9\">\n" +
4900 " <input checked class=\"form-control\" id=\"status\" name=\"status\" type=\"checkbox\" ng-model=\"user.user.status\">\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" +
4901 " </div>\n" +
5023 " </div>\n" +
4902 " </div>\n" +
5024 " </div>\n" +
4903 "\n" +
4904 " <div class=\"form-group\" id=\"row-submit\">\n" +
5025 " <div class=\"form-group\" id=\"row-submit\">\n" +
4905 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
5026 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
4906 " </label>\n" +
5027 " </label>\n" +
4907 " <div class=\"col-sm-8 col-lg-9\">\n" +
5028 " <div class=\"col-sm-8 col-lg-9\">\n" +
4908 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.userId ? 'Update' : 'Add'}} User\">\n" +
5029 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Update Account\">\n" +
4909 " </div>\n" +
5030 " </div>\n" +
4910 " </div>\n" +
5031 " </div>\n" +
4911 " </form>\n" +
5032 " </form>\n" +
4912 " </div>\n" +
5033 " </div>\n" +
4913 " </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" +
4914 "\n" +
5046 "\n" +
5047 " <p>For example you can let other staff member view or alter error reports.</p>\n" +
4915 "\n" +
5048 "\n" +
4916 " <div class=\"panel panel-default\" ng-if=\"user.user.id\">\n" +
5049 " <div ng-if=\"permissions.possibleGroups.length > 0\">\n" +
4917 " <div class=\"panel-heading\">\n" +
5050 " <h3>Group permissions</h3>\n" +
4918 " <h3 class=\"panel-title\">Permission Summary</h3>\n" +
4919 " </div>\n" +
4920 " <div class=\"panel-body\">\n" +
4921 " <h3>Direct application permissions</h3>\n" +
4922 "\n" +
5051 "\n" +
4923 " <ul class=\"list-group\">\n" +
5052 " <ul class=\"list-group\">\n" +
4924 " <li ng-repeat=\"perm in user.resourcePermissions.user.application\" class=\"animate-repeat list-group-item\">\n" +
5053 " <li ng-repeat=\"perm in permissions.currentPermissions.group\" class=\"animate-repeat list-group-item\">\n" +
4925 " <strong>{{ perm.self.resource_name }}</strong>\n" +
5054 " <strong>{{ perm.self.group_name }}</strong>\n" +
4926 " <div class=\"pull-right\">\n" +
5055 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
4927 "\n" +
5056 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
4928 " <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" +
5057 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
4929 "\n" +
5058 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
4930 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
5059 " <ul class=\"dropdown-menu\">\n" +
4931 " <span class=\"fa fa-cog\"></span>\n" +
5060 " <li><a>No</a></li>\n" +
4932 " </a>\n" +
5061 " <li><a ng-click=\"permissions.removeGroupPermission(perm_name, perm)\">Yes</a></li>\n" +
5062 " </ul>\n" +
5063 " </span>\n" +
4933 " </div>\n" +
5064 " </div>\n" +
4934 " </li>\n" +
5065 " </li>\n" +
4935 " </ul>\n" +
5066 " </ul>\n" +
4936 "\n" +
5067 "\n" +
4937 " <h3>Direct dashboard permissions</h3>\n" +
5068 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setGroupPermission()\">\n" +
4938 "\n" +
5069 " <div class=\"form-group\">\n" +
4939 " <ul class=\"list-group\">\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" +
4940 " <li ng-repeat=\"perm in user.resourcePermissions.user.dashboard\" class=\"animate-repeat list-group-item\">\n" +
5071 " </div>\n" +
4941 " <strong>{{ perm.self.resource_name }}</strong>\n" +
5072 " <div class=\"form-group\">\n" +
4942 " <div class=\"pull-right\">\n" +
5073 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
4943 "\n" +
5074 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedGroupPermissions[permission]\"> {{ permission }}\n" +
4944 " <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" +
5075 " </span>\n" +
4945 "\n" +
5076 " </div>\n" +
4946 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
5077 " <div class=\"form-group\">\n" +
4947 " <span class=\"fa fa-cog\"></span>\n" +
5078 " <button class=\"btn btn-info\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
4948 " </a>\n" +
5079 " </div>\n" +
4949 " </div>\n" +
5080 " </form>\n" +
4950 " </li>\n" +
4951 " </ul>\n" +
4952 "\n" +
5081 "\n" +
4953 " </div>\n" +
5082 " </div>\n" +
4954 "\n" +
5083 "\n" +
4955 " </div>\n" +
5084 " <h3>User permissions</h3>\n" +
4956 "\n" +
5085 " <div>\n" +
4957 "\n" +
5086 " <ul class=\"list-group\">\n" +
4958 "</div>\n"
5087 " <li ng-repeat=\"perm in permissions.currentPermissions.user\" class=\"animate-repeat list-group-item\">\n" +
4959 );
5088 " <strong>{{ perm.self.user_name }}</strong>\n" +
4960
5089 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
4961
5090 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
4962 $templateCache.put('templates/admin/users/users_list.html',
5091 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
4963 "<ng-include src=\"'templates/loader.html'\" ng-if=\"users.loading.users\"></ng-include>\n" +
5092 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
4964 "\n" +
5093 " <ul class=\"dropdown-menu\">\n" +
4965 "<div ng-show=\"!users.loading.users\">\n" +
5094 " <li><a>No</a></li>\n" +
4966 "\n" +
5095 " <li><a ng-click=\"permissions.removeUserPermission(perm_name,perm)\">Yes</a></li>\n" +
4967 " <div class=\"panel panel-default\">\n" +
5096 " </ul>\n" +
4968 "\n" +
5097 " </span>\n" +
4969 " <div class=\"panel-heading\">\n" +
4970 " {{users.activeUsers}} active out of {{users.users.length}} users\n" +
4971 " </div>\n" +
4972 "\n" +
4973 "\n" +
4974 " <table st-table=\"displayedCollection\" st-safe-src=\"users.users\" class=\"table table-striped\">\n" +
4975 " <thead>\n" +
4976 " <tr>\n" +
4977 " <th class=\"user_name\" st-sort=\"user_name\"><a>Username</a></th>\n" +
4978 " <th class=\"email\" st-sort=\"email\"><a>Email</a></th>\n" +
4979 " <th class=\"status\" st-sort=\"status\"><a>Status</a></th>\n" +
4980 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
4981 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
4982 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
4983 " <th class=\"options\"></th>\n" +
4984 " </tr>\n" +
4985 " <tr>\n" +
4986 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4987 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4988 " <th></th>\n" +
4989 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4990 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4991 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
4992 " <th></th>\n" +
4993 " </tr>\n" +
4994 " </thead>\n" +
4995 " <tbody>\n" +
4996 "\n" +
4997 " <tr ng-repeat=\"user in displayedCollection track by user.id\">\n" +
4998 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
4999 " <td class=\"word-wrap small\">{{user.email}}</td>\n" +
5000 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
5001 " <td class=\"word-wrap small\">{{user.first_name}}</td>\n" +
5002 " <td class=\"word-wrap small\">{{user.last_name}}</td>\n" +
5003 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\" class=\"small\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
5004 " <td>\n" +
5005 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
5006 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5007 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
5008 " <ul class=\"dropdown-menu\">\n" +
5009 " <li><a>No</a></li>\n" +
5010 " <li><a ng-click=\"users.removeUser(user)\">Yes</a></li>\n" +
5011 " </ul>\n" +
5012 " </span>\n" +
5013 " </tr>\n" +
5014 " <tfoot>\n" +
5015 " <tr>\n" +
5016 " <td colspan=\"6\" class=\"text-center\">\n" +
5017 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
5018 " </td>\n" +
5019 " </tr>\n" +
5020 " </tfoot>\n" +
5021 " </tbody>\n" +
5022 " </table>\n" +
5023 "\n" +
5024 "\n" +
5025 " </div>\n" +
5026 "</div>\n"
5027 );
5028
5029
5030 $templateCache.put('templates/applications/applications_purge_logs.html',
5031 "<ng-include src=\"'templates/loader.html'\" ng-if=\"applications_purge.loading.applications\"></ng-include>\n" +
5032 "\n" +
5033 "<div ng-show=\"!applications_purge.loading.applications\">\n" +
5034 " <div class=\"panel panel-default\">\n" +
5035 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5036 " <div class=\"panel-body\">\n" +
5037 "\n" +
5038 " <form method=\"post\" class=\"form-horizontal\" name=\"applications_purge.form\" ng-submit=\"applications_purge.purgeLogs()\">\n" +
5039 " <div class=\"form-group\">\n" +
5040 " <label class=\"control-label col-sm-3 col-lg-2\">Application:</label>\n" +
5041 "\n" +
5042 " <div class=\"col-sm-9 col-lg-10 form-inline\">\n" +
5043 " <select ng-model=\"applications_purge.selectedResource\" ng-change=\"applications_purge.getCommonKeys()\"\n" +
5044 " ng-options=\"r.resource_id as r.resource_name for r in applications_purge.applications\" class=\"form-control\"></select>\n" +
5045 " </div>\n" +
5046 " </div>\n" +
5047 "\n" +
5048 " <div class=\"form-group\">\n" +
5049 " <label class=\"control-label col-sm-3 col-lg-2\">Namespace:</label>\n" +
5050 "\n" +
5051 " <div class=\"col-sm-9 col-lg-10\">\n" +
5052 " <input type=\"text\" name=\"namespace\" ng-model=\"applications_purge.namespace\"\n" +
5053 " placeholder=\"Namespace to filter on\" uib-typeahead=\"ns for ns in applications_purge.commonNamespaces\"\n" +
5054 " class=\"form-control\">\n" +
5055 " </div>\n" +
5056 " </div>\n" +
5057 "\n" +
5058 " <div class=\"form-group\">\n" +
5059 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5060 "\n" +
5061 " <div class=\"col-sm-8 col-lg-9 \">\n" +
5062 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Purge logs meeting the criteria\">\n" +
5063 " </div>\n" +
5064 " </div>\n" +
5065 "\n" +
5066 " </form>\n" +
5067 " </div>\n" +
5068 " </div>\n" +
5069 "</div>\n"
5070 );
5071
5072
5073 $templateCache.put('templates/applications/applications_update.html',
5074 "<ng-include src=\"'templates/loader.html'\" ng-if=\"application.loading.application\"></ng-include>\n" +
5075 "\n" +
5076 "<div ng-show=\"!application.loading.application\">\n" +
5077 "\n" +
5078 " <div class=\"panel panel-default\">\n" +
5079 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5080 " <div class=\"panel-body\">\n" +
5081 "\n" +
5082 " <div class=\"row\" ng-show=\"application.resource.resource_id\">\n" +
5083 " <div class=\"col-sm-6\">\n" +
5084 "\n" +
5085 " <uib-tabset>\n" +
5086 " <uib-tab>\n" +
5087 " <uib-tab-heading>\n" +
5088 " API keys\n" +
5089 " </uib-tab-heading>\n" +
5090 "\n" +
5091 " <p><strong>PRIVATE API KEY:</strong></p>\n" +
5092 " <p>\n" +
5093 " <div class=\"well well-sm\">{{ application.resource.api_key }}</div>\n" +
5094 " </p>\n" +
5095 " <p><strong>PUBLIC API KEY</strong> (for javascript clients):</p>\n" +
5096 " <p>\n" +
5097 " <div class=\"well well-sm\">{{ application.resource.public_key }}</div>\n" +
5098 " </p>\n" +
5099 " <p><small>Your key will be used to identify to which application your data\n" +
5100 " belongs to please keep them private at all times.</small></p>\n" +
5101 "\n" +
5102 " </uib-tab>\n" +
5103 "\n" +
5104 " <uib-tab>\n" +
5105 " <uib-tab-heading>\n" +
5106 " <span class=\"btn btn-danger btn-xs\"><span class=\"fa fa-exclamation-triangle\"></span></span> Regenerate API keys\n" +
5107 " </uib-tab-heading>\n" +
5108 " <p>Are you sure you want to regenerate API KEY for this application?</p>\n" +
5109 " <p>All client application keys will need to be updated.</p>\n" +
5110 " <form ng-submit=\"application.regenerateAPIKeys()\" name=\"application.regenerateAPIKeysForm\" class=\"form-inline\">\n" +
5111 " <data-form-errors errors=\"application.regenerateAPIKeysForm.ae_validation.password\"></data-form-errors>\n" +
5112 " <div class=\"form-group\">\n" +
5113 " <input type=\"password\" name=\"confirm\"\n" +
5114 " placeholder=\"Enter your password to proceed\" class=\"form-control\" ng-model=\"application.regenerateAPIKeysPassword\">\n" +
5115 " <input type=\"submit\" class=\"btn btn-danger\" value=\"Confirm\">\n" +
5116 " </div>\n" +
5117 " </form>\n" +
5118 " </uib-tab>\n" +
5119 " </uib-tabset>\n" +
5120 " </div>\n" +
5121 " <div class=\"col-sm-6 text-center\">\n" +
5122 " <h2 class=\"m-t-0\">How to connect your application?</h2>\n" +
5123 " <p>Visit our <a href=\"{{AeConfig.urls.docs}}\"><strong>developer documentation</strong></a> for step-by-step integration instructions.</p>\n" +
5124 " <div class=\"clearfix\"></div>\n" +
5125 " <p class=\"text-center\">\n" +
5126 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/django_small.png\" alt=\"Django Logo\">\n" +
5127 " <img src=\"/static/appenlight/images/logos/pyramid_small.png\" alt=\"Pyramid Logo\">\n" +
5128 " <img src=\"/static/appenlight/images/logos/flask_small.png\" alt=\"Flask Logo\"></a>\n" +
5129 "\n" +
5130 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/js_small.png\" alt=\"Javascript Logo\">\n" +
5131 " <img src=\"/static/appenlight/images/logos/nodejs.png\" alt=\"Node.js\"></a>\n" +
5132 " <img src=\"/static/appenlight/images/logos/ruby_small.png\" alt=\"Ruby Logo\">\n" +
5133 " <img src=\"/static/appenlight/images/logos/php_small.png\" alt=\"PHP Logo\">\n" +
5134 " </a>\n" +
5135 "\n" +
5136 " </p>\n" +
5137 " </div>\n" +
5138 " </div>\n" +
5139 "\n" +
5140 " <hr ng-show=\"application.resource.resource_id\">\n" +
5141 "\n" +
5142 " <form method=\"post\" class=\"form-horizontal\" name=\"application.BasicForm\" ng-submit=\"application.updateBasicForm()\" novalidate>\n" +
5143 " <div class=\"form-group\">\n" +
5144 " <data-form-errors errors=\"application.BasicForm.ae_validation.resource_name\"></data-form-errors>\n" +
5145 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5146 " Application name\n" +
5147 " <span class=\"required\">*</span>\n" +
5148 " </label>\n" +
5149 "\n" +
5150 " <div class=\" col-sm-8 col-lg-9 \">\n" +
5151 " <input class=\"form-control\" name=\"resource_name\" placeholder=\"Application Name\" type=\"text\" ng-model=\"application.resource.resource_name\">\n" +
5152 " </div>\n" +
5153 "\n" +
5154 "\n" +
5155 " </div>\n" +
5156 "\n" +
5157 " <div class=\"form-group\">\n" +
5158 " <data-form-errors errors=\"application.BasicForm.ae_validation.domains\"></data-form-errors>\n" +
5159 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5160 " Domain names for CORS headers\n" +
5161 " </label>\n" +
5162 " <div class=\" col-sm-8 col-lg-9 \">\n" +
5163 " <textarea class=\"form-control\" name=\"domains\" ng-model=\"application.resource.domains\"></textarea>\n" +
5164 " <p class=\"description\">Required for Javascript error tracking (one line one domain, skip http:// part)</p>\n" +
5165 " </div>\n" +
5166 "\n" +
5167 "\n" +
5168 " </div>\n" +
5169 " <div class=\"form-group\" ng-show=\"application.resource.resource_id\">\n" +
5170 " <data-form-errors errors=\"application.BasicForm.ae_validation.default_grouping\"></data-form-errors>\n" +
5171 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5172 " Default grouping for errors\n" +
5173 " </label>\n" +
5174 " <div class=\" col-sm-8 col-lg-9 \">\n" +
5175 " <select class=\"form-control\" name=\"default_grouping\" ng-model=\"application.resource.default_grouping\" ng-options=\"i[0] as i[1] for i in application.groupingOptions\"></select>\n" +
5176 " </div>\n" +
5177 "\n" +
5178 " </div>\n" +
5179 " <div class=\"form-group\" ng-show=\"application.resource.resource_id\">\n" +
5180 " <data-form-errors errors=\"application.BasicForm.ae_validation.error_report_threshold\"></data-form-errors>\n" +
5181 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5182 " Alert on error reports\n" +
5183 " <span class=\"required\">*</span>\n" +
5184 " </label>\n" +
5185 " <div class=\" col-sm-8 col-lg-9 \">\n" +
5186 " <input class=\"form-control\" name=\"error_report_threshold\" type=\"text\" ng-model=\"application.resource.error_report_threshold\">\n" +
5187 " <p class=\"description\">Application requires to send at least this amount of error reports per minute to open alert</p>\n" +
5188 " </div>\n" +
5189 " </div>\n" +
5190 " <div class=\"form-group\" ng-show=\"application.resource.resource_id\">\n" +
5191 " <data-form-errors errors=\"application.BasicForm.ae_validation.slow_report_threshold\"></data-form-errors>\n" +
5192 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5193 " Alert on slow reports\n" +
5194 " <span class=\"required\">*</span>\n" +
5195 " </label>\n" +
5196 "\n" +
5197 " <div class=\" col-sm-8 col-lg-9 \">\n" +
5198 " <input class=\"form-control\" name=\"slow_report_threshold\" type=\"text\" ng-model=\"application.resource.slow_report_threshold\">\n" +
5199 " <p class=\"description\">Application requires to send at least this amount of slow reports per minute to open alert</p>\n" +
5200 " </div>\n" +
5201 " </div>\n" +
5202 " <div class=\"form-group\" ng-show=\"application.resource.resource_id\">\n" +
5203 " <data-form-errors errors=\"application.BasicForm.ae_validation.allow_permanent_storage\"></data-form-errors>\n" +
5204 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5205 " Permanent logs\n" +
5206 " </label>\n" +
5207 " <div class=\" col-sm-8 col-lg-9\">\n" +
5208 " <input class=\"form-control\" name=\"allow_permanent_storage\" type=\"checkbox\" ng-model=\"application.resource.allow_permanent_storage\">\n" +
5209 " <p class=\"description\">Allow permanent storage of logs in separate DB partitions (only administrator can enable this feature)</p>\n" +
5210 " </div>\n" +
5211 " </div>\n" +
5212 " <div class=\"form-group\">\n" +
5213 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5214 "\n" +
5215 " </label>\n" +
5216 "\n" +
5217 " <div class=\" col-sm-8 col-lg-9 \">\n" +
5218 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"{{application.resource.resource_id? 'Update' : 'Create'}} Application\">\n" +
5219 " </div>\n" +
5220 " </div>\n" +
5098 " </div>\n" +
5221 " </form>\n" +
5099 " </li>\n" +
5222 " </div>\n" +
5100 " </ul>\n" +
5223 " </div>\n" +
5224 "\n" +
5225 " <div class=\"panel panel-default\" ng-show=\"application.resource.resource_id\">\n" +
5226 " <div class=\"panel-heading\">\n" +
5227 " <h3 class=\"panel-title\">Plugins</h3>\n" +
5228 " </div>\n" +
5229 " <div class=\"panel-body\">\n" +
5230 "\n" +
5231 " <plugin-config resource=\"application.resource\"\n" +
5232 " section=\"'application.update'\"\n" +
5233 " ng-if=\"application.resource.resource_id\">\n" +
5234 " </plugin-config>\n" +
5235 "\n" +
5236 " </div>\n" +
5237 " </div>\n" +
5238 "\n" +
5239 " <div class=\"panel panel-default m-t-1\" ng-show=\"application.resource.resource_id\">\n" +
5240 " <div class=\"panel-heading\">\n" +
5241 " <h3 class=\"panel-title\">API Testing</h3>\n" +
5242 " </div>\n" +
5101 " </div>\n" +
5243 " <div class=\"panel-body\">\n" +
5102 " <div>\n" +
5244 " <p>Please be sure to add at least one <a data-ui-sref=\"user.alert_channels.email\"><strong>email alert channel</strong></a> for your account.</p>\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" +
5245 " <p>This will enable AppEnlight to send you notification emails about errors inside your application.</p>\n" +
5246 " <p><strong>After this is done you can use this CURL commands to test APIs:</strong></p>\n" +
5247 " <p>(Please note that the data like execution times is semi randomly generated)</p>\n" +
5248 " <uib-tabset>\n" +
5249 " <uib-tab>\n" +
5250 " <uib-tab-heading>\n" +
5251 " Log API\n" +
5252 " </uib-tab-heading>\n" +
5253 "\n" +
5254 " <div class=\"codehilite\">\n" +
5255 " <pre class=\"m-a-0\">\n" +
5256 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/logs?protocol_version=0.5\\&ampapi_key={{application.resource.api_key}} -d '\n" +
5257 " [\n" +
5258 " {\n" +
5259 " \"log_level\": \"WARNING\",\n" +
5260 " \"message\": \"OMG ValueError happened\",\n" +
5261 " \"namespace\": \"some.namespace.indicator\",\n" +
5262 " \"request_id\": \"SOME_UUID\",\n" +
5263 " \"permanent\": false,\n" +
5264 " \"primary_key\": \"random_key\",\n" +
5265 " \"server\": \"some.server.hostname\",\n" +
5266 " \"date\": \"{{application.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
5267 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]]\n" +
5268 " },\n" +
5269 " {\n" +
5270 " \"log_level\": \"ERROR\",\n" +
5271 " \"message\": \"OMG ValueError happened2\",\n" +
5272 " \"namespace\": \"some.namespace.indicator\",\n" +
5273 " \"request_id\": \"SOME_UUID\",\n" +
5274 " \"permanent\": false,\n" +
5275 " \"server\": \"some.server.hostname\",\n" +
5276 " \"date\": \"{{application.momentJs.utc().milliseconds(0).toISOString()}}\"\n" +
5277 " }\n" +
5278 " ]'\n" +
5279 " </pre>\n" +
5280 " </div>\n" +
5281 "\n" +
5282 " </uib-tab>\n" +
5283 "\n" +
5284 " <uib-tab>\n" +
5285 " <uib-tab-heading>\n" +
5286 " Report API\n" +
5287 " </uib-tab-heading>\n" +
5288 "\n" +
5289 " <div class=\"codehilite\">\n" +
5290 " <pre class=\"m-a-0\">\n" +
5291 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/reports?protocol_version=0.5\\&ampapi_key={{application.resource.api_key}} -d '\n" +
5292 " [{\n" +
5293 " \"client\": \"your-client-name-python\",\n" +
5294 " \"language\": \"python\",\n" +
5295 " \"view_name\": \"views/foo:bar\",\n" +
5296 " \"server\": \"SERVERNAME/INSTANCENAME\",\n" +
5297 " \"priority\": 5,\n" +
5298 " \"error\": \"OMG ValueError happened\",\n" +
5299 " \"occurences\":1,\n" +
5300 " \"http_status\": 500,\n" +
5301 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]],\n" +
5302 " \"username\": \"USER\",\n" +
5303 " \"url\": \"HTTP://SOMEURL\",\n" +
5304 " \"ip\": \"127.0.0.1\",\n" +
5305 " \"start_time\": \"{{application.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
5306 " \"end_time\": \"{{application.momentJs.utc().milliseconds(0).add(2, 'seconds').toISOString()}}\",\n" +
5307 " \"user_agent\": \"BROWSER_AGENT\",\n" +
5308 " \"extra\": [[\"message\",\"CUSTOM MESSAGE\"], [\"custom_value\", \"some payload\"]],\n" +
5309 " \"request_id\": \"SOME_UUID\",\n" +
5310 " \"request\": {\"REQUEST_METHOD\": \"GET\",\n" +
5311 " \"PATH_INFO\": \"/FOO/BAR\",\n" +
5312 " \"POST\": {\"FOO\":\"BAZ\",\"XXX\":\"YYY\"}\n" +
5313 " },\n" +
5314 " \"slow_calls\":[{\n" +
5315 " \"start\": \"{{application.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
5316 " \"end\": \"{{application.momentJs.utc().milliseconds(0).add(1, 'seconds').toISOString()}}\",\n" +
5317 " \"type\": \"sql\",\n" +
5318 " \"subtype\": \"postgresql\",\n" +
5319 " \"parameters\": [\"QPARAM1\",\"QPARAM2\",\"QPARAMX\"],\n" +
5320 " \"statement\": \"QUERY\"\n" +
5321 " }],\n" +
5322 " \"request_stats\": {\n" +
5323 " \"main\": 2.50779,\n" +
5324 " \"nosql\": 0.01008,\n" +
5325 " \"nosql_calls\": 17.0,\n" +
5326 " \"remote\": 0.0,\n" +
5327 " \"remote_calls\": 0.0,\n" +
5328 " \"sql\": 1,\n" +
5329 " \"sql_calls\": 1.0,\n" +
5330 " \"tmpl\": 0.0,\n" +
5331 " \"tmpl_calls\": 0.0,\n" +
5332 " \"custom\": 0.0,\n" +
5333 " \"custom_calls\": 0.0\n" +
5334 " },\n" +
5335 " \"traceback\": [\n" +
5336 " {\"cline\": \"return foo_bar_baz(1,2,3)\",\n" +
5337 " \"file\": \"somedir/somefile.py\",\n" +
5338 " \"fn\": \"somefunction\",\n" +
5339 " \"line\": 454,\n" +
5340 " \"vars\": [[\"a_list\",\n" +
5341 " [\"1\",2,\"4\",\"5\",6]],\n" +
5342 " [\"b\", {\"1\": \"2\", \"ccc\": \"ddd\", \"1\": \"a\"}],\n" +
5343 " [\"obj\", \"object object at 0x7f0030853dc0\"]]\n" +
5344 " },\n" +
5345 " {\"cline\": \"OMG ValueError happened\",\n" +
5346 " \"file\": \"\",\n" +
5347 " \"fn\": \"\",\n" +
5348 " \"line\": \"\",\n" +
5349 " \"vars\": []}\n" +
5350 " ]\n" +
5351 " }]'\n" +
5352 " </pre>\n" +
5353 " </div>\n" +
5354 "\n" +
5355 " </uib-tab>\n" +
5356 "\n" +
5357 " <uib-tab>\n" +
5358 "\n" +
5359 " <uib-tab-heading>\n" +
5360 " Metrics API\n" +
5361 " </uib-tab-heading>\n" +
5362 "\n" +
5363 " <div class=\"codehilite\">\n" +
5364 " <pre class=\"m-a-0\">\n" +
5365 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/general_metrics?protocol_version=0.5\\&ampapi_key={{application.resource.api_key}} -d '\n" +
5366 " [{\n" +
5367 " \"namespace\": \"some.monitor\",\n" +
5368 " \"timestamp\": \"{{application.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
5369 " \"server_name\": \"server.name\",\n" +
5370 " \"tags\": [[\"value1\", 15.7], [\"value2\", 26]]}]'\n" +
5371 " </pre>\n" +
5372 " </div>\n" +
5373 "\n" +
5374 " </uib-tab>\n" +
5375 "\n" +
5376 " <uib-tab>\n" +
5377 "\n" +
5378 " <uib-tab-heading>\n" +
5379 " Request Stats API\n" +
5380 " </uib-tab-heading>\n" +
5381 "\n" +
5382 " <div class=\"codehilite\">\n" +
5383 " <pre class=\"m-a-0\">\n" +
5384 "curl -H \"Content-Type: application/json\" -k {{AeConfig.urls.baseUrl}}api/request_stats?protocol_version=0.5\\&ampapi_key={{application.resource.api_key}} -d '\n" +
5385 " [{\"server\": \"some.server.hostname\",\n" +
5386 " \"timestamp\": \"{{application.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
5387 " \"metrics\": [[\"dir/module:func\",\n" +
5388 " {\"custom\": 0.0,\n" +
5389 " \"custom_calls\": 0,\n" +
5390 " \"main\": 0.01664,\n" +
5391 " \"nosql\": 0.00061,\n" +
5392 " \"nosql_calls\": 23,\n" +
5393 " \"remote\": 0.0,\n" +
5394 " \"remote_calls\": 0,\n" +
5395 " \"requests\": 1,\n" +
5396 " \"sql\": 0.00105,\n" +
5397 " \"sql_calls\": 2,\n" +
5398 " \"tmpl\": 0.0,\n" +
5399 " \"tmpl_calls\": 0}],\n" +
5400 " [\"SomeView.function\",\n" +
5401 " {\"custom\": 0.0,\n" +
5402 " \"custom_calls\": 0,\n" +
5403 " \"main\": 0.647261,\n" +
5404 " \"nosql\": 0.306554,\n" +
5405 " \"nosql_calls\": 140,\n" +
5406 " \"remote\": 0.0,\n" +
5407 " \"remote_calls\": 0,\n" +
5408 " \"requests\": 28,\n" +
5409 " \"sql\": 0.0,\n" +
5410 " \"sql_calls\": 0,\n" +
5411 " \"tmpl\": 0.0,\n" +
5412 " \"tmpl_calls\": 0}]]\n" +
5413 " }]'\n" +
5414 " </pre>\n" +
5415 " </div>\n" +
5416 "\n" +
5417 " </uib-tab>\n" +
5418 "\n" +
5419 " </uib-tabset>\n" +
5420 "\n" +
5104 "\n" +
5105 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setUserPermission()\">\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" +
5120 " </form>\n" +
5421 " </div>\n" +
5121 " </div>\n" +
5422 " </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" +
5423 "\n" +
5148 "\n" +
5424 " <permissions-form resource=\"application.resource\" current-permissions=\"application.resource.current_permissions\"\n" +
5149 " <div class=\"form-group\">\n" +
5425 " possible-permissions=\"application.resource.possible_permissions\" ng-if=\"application.resource.resource_id\"></permissions-form>\n" +
5150 " <label>Action</label>\n" +
5426 "\n" +
5151 "\n" +
5427 " <div class=\"panel panel-info\" ng-show=\"application.resource.resource_id\">\n" +
5152 " <div class=\"form-group\">\n" +
5428 " <div class=\"panel-heading\">\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" +
5429 " <h3 class=\"panel-title\">Postprocessing</h3>\n" +
5430 " </div>\n" +
5154 " </div>\n" +
5431 " <div class=\"panel-body\">\n" +
5432 " <p>This section allows you influence the rating of report groups - if rule is matched once its not executed anymore</p>\n" +
5433 "\n" +
5155 "\n" +
5434 " <p>\n" +
5156 " <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> &nbsp;Save changes</a>\n" +
5435 " <a class=\"btn btn-info\" ng-click=\"application.addRule()\"><span class=\"fa fa-plus-circle\"></span> Add rule</a>\n" +
5436 " </p>\n" +
5437 "\n" +
5157 "\n" +
5438 " <post-process-action action=\"action\" resource=\"application.resource\" ng-repeat=\"action in application.resource.postprocessing_rules\"></post-process-action>\n" +
5439 " </div>\n" +
5158 " </div>\n" +
5159 " <hr/>\n" +
5160 " <p>Meeting following criteria:</p>\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" +
5440 " </div>\n" +
5164 " </div>\n" +
5441 "\n" +
5165 "</div>\n"
5442 " <div class=\"panel panel-danger\" ng-show=\"application.resource.resource_id\">\n" +
5166 );
5443 " <div class=\"panel-heading\">\n" +
5167
5444 " <h3 class=\"panel-title\">Administration</h3>\n" +
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" +
5445 " </div>\n" +
5180 " </div>\n" +
5446 " <div class=\"panel-body\">\n" +
5447 " <h2>Transfer ownership</h2>\n" +
5448 " <p>Please note that by transfering ownership you WILL lose access to the application data and new owner needs to give you access permission</p>\n" +
5449 " <div class=\"confirmation_form\" ng-submit=\"application.transferApplication()\">\n" +
5450 " <form class=\"form-horizontal\" name=\"application.formTransfer\">\n" +
5451 " <div class=\"form-group\">\n" +
5452 " <data-form-errors errors=\"application.formTransfer.ae_validation.password\"></data-form-errors>\n" +
5453 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5454 " Password\n" +
5455 " </label>\n" +
5456 " <div class=\"col-sm-8 col-lg-9\">\n" +
5457 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"application.formTransferModel.password\">\n" +
5458 " </div>\n" +
5459 " </div>\n" +
5460 " <div class=\"form-group\">\n" +
5461 " <data-form-errors errors=\"application.formTransfer.ae_validation.user_name\"></data-form-errors>\n" +
5462 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5463 " New owners username\n" +
5464 " </label>\n" +
5465 " <div class=\"col-sm-8 col-lg-9\">\n" +
5466 " <input class=\"form-control\" name=\"user_name\" type=\"text\" ng-model=\"application.formTransferModel.user_name\">\n" +
5467 " </div>\n" +
5468 " </div>\n" +
5469 " <div class=\"form-group\">\n" +
5470 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5471 " </label>\n" +
5472 " <div class=\"col-sm-8 col-lg-9\">\n" +
5473 " <button class=\"btn btn-danger\">\n" +
5474 " <span class=\"fa fa-user-plus\"></span>\n" +
5475 " Transfer ownership of application\n" +
5476 " </button>\n" +
5477 " </div>\n" +
5478 " </div>\n" +
5479 " </form>\n" +
5480 " </div>\n" +
5481 "\n" +
5482 " <hr/>\n" +
5483 "\n" +
5181 "\n" +
5484 " <h2>Remove application</h2>\n" +
5182 " <div class=\"form-group\">\n" +
5485 " <p><strong>This operation will wipe out all data from database - there is no undo.</strong></p>\n" +
5183 " <label>Applies to</label>\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" +
5185 " <option value=\"\">All Resources</option>\n" +
5186 " </select>\n" +
5187 " </div>\n" +
5188 " <div class=\"form-group\">\n" +
5189 " <label>Notify</label>\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" +
5486 "\n" +
5191 "\n" +
5487 " <div class=\"confirmation_form\">\n" +
5192 " <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> &nbsp;Save changes</a>\n" +
5488 " <form class=\"form-horizontal\" name=\"application.formDelete\" ng-submit=\"application.deleteApplication()\">\n" +
5489 " <div class=\"form-group\">\n" +
5490 " <data-form-errors errors=\"application.formDelete.ae_validation.password\"></data-form-errors>\n" +
5491 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5492 " Password\n" +
5493 " </label>\n" +
5494 " <div class=\"col-sm-8 col-lg-9\">\n" +
5495 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"application.formDeleteModel.password\">\n" +
5496 " </div>\n" +
5497 " </div>\n" +
5498 " <div class=\"form-group\">\n" +
5499 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5500 "\n" +
5193 "\n" +
5501 " </label>\n" +
5194 " </div>\n" +
5502 " <div class=\"col-sm-8 col-lg-9\">\n" +
5195 " <div>\n" +
5503 " <button class=\"btn btn-danger\">\n" +
5196 " <p><strong>Channels:</strong></p>\n" +
5504 " <span class=\"fa fa-trash-o\"></span>\n" +
5197 " <ul class=\"list-group\">\n" +
5505 " Delete my application\n" +
5198 " <li class=\"list-group-item\" ng-repeat=\"channel in ctrl.action.channels\">\n" +
5506 " </button>\n" +
5199 " <strong>{{channel.channel_visible_value}}</strong>\n" +
5507 " </div>\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" +
5508 " </div>\n" +
5208 " </div>\n" +
5509 " </form>\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" +
5510 " </div>\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" +
5218 "\n" +
5511 " </div>\n" +
5219 " </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" +
5512 " </div>\n" +
5224 " </div>\n" +
5513 "</div>\n"
5225 "</div>\n"
5514 );
5226 );
5515
5227
5516
5228
5517 $templateCache.put('templates/applications/breadcrumbs.html',
5229 $templateCache.put('directives/rule_read_only/rule_read_only.html',
5518 "<ol class=\"breadcrumb\" ng-show=\"$state.includes('applications')\">\n" +
5230 "<div class=\"rule-read-only\">\n" +
5519 " <li>Applications</li>\n" +
5520 " <li ng-show=\"$state.includes('applications.list')\" ng-class=\"{bold:$state.is('applications.list')}\">Owned applications</li>\n" +
5521 " <li ng-show=\"$state.includes('applications.update')\" ng-class=\"{bold:$state.is('applications.update')}\">Modify application</li>\n" +
5522 " <li ng-show=\"$state.includes('applications.integrations')\" ng-class=\"{bold:$state.includes('applications.integrations')}\">Integrations</li>\n" +
5523 " <li ng-show=\"$state.includes('applications.purge_logs')\" ng-class=\"{bold:$state.includes('applications.purge_logs')}\">Log Purging</li>\n" +
5524 "</ol>\n"
5525 );
5526
5527
5528 $templateCache.put('templates/applications/integrations.html',
5529 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application && $state.is('applications.integrations')\"></ng-include>\n" +
5530 "\n" +
5531 "<ui-view>\n" +
5532 " <div class=\"panel panel-default\" ng-show=\"!integrations.loading.application\">\n" +
5533 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5534 " <div class=\"panel-body\">\n" +
5535 "\n" +
5536 " <a class=\"btn btn-default integration\"\n" +
5537 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'bitbucket'})\">\n" +
5538 " <span class=\"fa fa-fw fa-bitbucket fa-3x pull-left\"></span>\n" +
5539 " <strong>Bitbucket</strong>\n" +
5540 "\n" +
5541 " <p>Send issues and reports to Bitbucket</p>\n" +
5542 " </a>\n" +
5543 "\n" +
5544 " <a class=\"btn btn-default integration\"\n" +
5545 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'campfire'})\">\n" +
5546 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
5547 " <strong>Campfire</strong>\n" +
5548 "\n" +
5231 "\n" +
5549 " <p>Receive reports and alerts in your Campfire rooms</p>\n" +
5232 " <span class=\"form-group\">\n" +
5550 " </a>\n" +
5233 " {{rule_ctrlr.readOnlyPossibleFields[rule_ctrlr.rule.field]}}\n" +
5234 " </span>\n" +
5551 "\n" +
5235 "\n" +
5552 " <a class=\"btn btn-default integration\"\n" +
5236 " <span ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\">\n" +
5553 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'flowdock'})\">\n" +
5237 " is {{rule_ctrlr.ruleDefinitions.allOps[rule_ctrlr.rule.op]}} {{rule_ctrlr.rule.value}}\n" +
5554 " <span class=\"fa fa-fw fa-envelope fa-3x pull-left\"></span>\n" +
5238 " </span>\n" +
5555 " <strong>Flowdock</strong>\n" +
5556 "\n" +
5239 "\n" +
5557 " <p>Receive reports and alerts on your Flowdock team\n" +
5240 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
5558 " inbox</p>\n" +
5241 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
5559 " </a>\n" +
5242 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
5560 "\n" +
5243 "\n" +
5561 " <a class=\"btn btn-default integration\"\n" +
5244 " <div class=\"panel panel-default\">\n" +
5562 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'github'})\">\n" +
5245 " <div class=\"panel-body form-inline\">\n" +
5563 " <span class=\"fa fa-fw fa-github fa-3x pull-left\"></span>\n" +
5246 " <recursive>\n" +
5564 " <strong>Github</strong>\n" +
5247 " <rule-read-only rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"rule_ctrlr.parentObj\"></rule-read-only>\n" +
5248 " </recursive>\n" +
5249 " </div>\n" +
5250 " </div>\n" +
5251 " </div>\n" +
5565 "\n" +
5252 "\n" +
5566 " <p>Send issues and reports to Github</p>\n" +
5253 " </span>\n" +
5567 " </a>\n" +
5254 "</div>\n"
5255 );
5256
5257
5258 $templateCache.put('directives/rule/rule.html',
5259 "<div class=\"rule form-inline\">\n" +
5568 "\n" +
5260 "\n" +
5569 " <a class=\"btn btn-default integration\"\n" +
5261 " <div class=\"form-group\">\n" +
5570 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'hipchat'})\">\n" +
5262 " <select class=\"form-control\"\n" +
5571 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
5263 " ng-model=\"rule_ctrlr.rule.field\"\n" +
5572 " <strong>HipChat</strong>\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" +
5573 "\n" +
5267 "\n" +
5574 " <p>Receive reports and alerts in your Hipchat chanels</p>\n" +
5268 " <div ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\" class=\"form-group\">\n" +
5575 " </a>\n" +
5576 "\n" +
5269 "\n" +
5577 " <a class=\"btn btn-default integration\"\n" +
5270 " <select ng-model=\"rule_ctrlr.rule.op\" class=\"form-control\"\n" +
5578 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'jira'})\">\n" +
5271 " ng-change=\"rule_ctrlr.setDirty()\"\n" +
5579 " <span class=\"fa fa-fw fa-ticket fa-3x pull-left\"></span>\n" +
5272 " ng-options=\"op as rule_ctrlr.ruleDefinitions.allOps[op] for op in rule_ctrlr.ruleDefinitions.fieldOps[rule_ctrlr.rule.field]\">\n" +
5580 " <strong>Jira</strong>\n" +
5273 " </select>\n" +
5581 "\n" +
5274 "\n" +
5582 " <p>Send issues and reports to Jira</p>\n" +
5275 " <input type=\"text\" placeholder=\"Value\" ng-model=\"rule_ctrlr.rule.value\" ng-change=\"rule_ctrlr.setDirty()\" class=\"form-control\">\n" +
5583 " </a>\n" +
5584 "\n" +
5276 "\n" +
5585 " <a class=\"btn btn-default integration\"\n" +
5277 " </div>\n" +
5586 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'slack'})\">\n" +
5587 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
5588 " <strong>Slack</strong>\n" +
5589 "\n" +
5278 "\n" +
5590 " <p>Receive reports and alerts in your Slack chanels</p>\n" +
5279 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
5591 " </a>\n" +
5280 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\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" +
5592 "\n" +
5290 "\n" +
5593 " <a class=\"btn btn-default integration\"\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" +
5594 " data-ui-sref=\"applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'webhooks'})\">\n" +
5595 " <span class=\"fa fa-fw fa-cloud-upload fa-3x pull-left\"></span>\n" +
5596 " <strong>Webhooks</strong>\n" +
5597 "\n" +
5292 "\n" +
5598 " <p>Notify third party API's of your reports and alerts</p>\n" +
5293 " </span>\n" +
5599 " </a>\n" +
5294 " <div class=\"pull-right\" ng-if=\"rule_ctrlr.parentRule\">\n" +
5600 " </div>\n" +
5295 " <span class=\"dropdown\" data-uib-dropdown>\n" +
5296 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
5297 " <ul class=\"dropdown-menu\">\n" +
5298 " <li><a>No</a></li>\n" +
5299 " <li><a ng-click=\"rule_ctrlr.deleteRule(rule_ctrlr.parentRule, rule_ctrlr.rule)\">Yes</a></li>\n" +
5300 " </ul>\n" +
5301 " </span>\n" +
5601 " </div>\n" +
5302 " </div>\n" +
5602 "</ui-view>\n"
5303 "</div>\n"
5603 );
5304 );
5604
5305
5605
5306
5606 $templateCache.put('templates/applications/integrations/bitbucket.html',
5307 $templateCache.put('templates/admin/applications/applications_list.html',
5607 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5308 "<ng-include src=\"'templates/loader.html'\" ng-if=\"applications.loading.applications\"></ng-include>\n" +
5608 "\n" +
5609 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
5610 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5611 " <div class=\"panel-body\">\n" +
5612 "\n" +
5309 "\n" +
5613 " <h1>Bitbucket Integration</h1>\n" +
5310 "<div class=\"panel panel-default\" ng-if=\"!applications.loading.applications\">\n" +
5311 " <div class=\"panel-heading\">\n" +
5614 "\n" +
5312 "\n" +
5615 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5313 " Currently active applications: {{applications.applications.length}}\n" +
5616 " <div class=\"form-group\">\n" +
5617 "\n" +
5314 "\n" +
5618 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
5315 " </div>\n" +
5619 "\n" +
5316 "\n" +
5620 " <div class=\"col-sm-8 col-lg-9\">\n" +
5317 " <table st-table=\"displayedCollection\" st-safe-src=\"applications.applications\" class=\"table table-striped\">\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" +
5621 "\n" +
5333 "\n" +
5622 " <data-form-errors errors=\"integration.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5334 " <tr ng-repeat=\"resource in displayedCollection track by resource.resource_id\">\n" +
5623 " <data-form-errors errors=\"integration.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
5335 " <td> {{resource.resource_name}}</td>\n" +
5336 " <td>{{resource.owner_user_name}}</td>\n" +
5337 " <td>{{resource.owner_group_name}}</td>\n" +
5338 " <td>\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" +
5340 " </td>\n" +
5341 " </tr>\n" +
5342 " <tfoot>\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" +
5624 "\n" +
5351 "\n" +
5625 " <div class=\"input-group\">\n" +
5352 "</div>\n"
5626 " <div class=\"input-group-addon\">https://bitbucket.org/</div>\n" +
5353 );
5627 " <input class=\"form-control\" ng-model=\"integration.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
5354
5628 " <div class=\"input-group-addon\">/</div>\n" +
5355
5629 " <input class=\"form-control\" ng-model=\"integration.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
5356 $templateCache.put('templates/admin/configs/edit.html',
5630 " </div>\n" +
5357 "<ng-include src=\"'templates/loader.html'\" ng-if=\"configs.loading.config\"></ng-include>\n" +
5631 "\n" +
5358 "\n" +
5359 "<div class=\"panel panel-default\" ng-show=\"!configs.loading.config\">\n" +
5360 " <div class=\"panel-heading\">\n" +
5361 " <h3 class=\"panel-title\">Basic Configuration</h3>\n" +
5362 " </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" +
5632 " </div>\n" +
5372 " </div>\n" +
5633 " </div>\n" +
5373 " </div>\n" +
5634 " <div class=\"form-group\">\n" +
5374 " </form>\n" +
5635 "\n" +
5375 "\n" +
5636 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5376 " <h2>Functional</h2>\n" +
5637 "\n" +
5377 "\n" +
5378 " <form class=\"form-horizontal\">\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" +
5638 " <div class=\"col-sm-8 col-lg-9\">\n" +
5383 " <div class=\"col-sm-8 col-lg-9\">\n" +
5639 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
5384 " <button type=\"button\" class=\"btn btn-default\" ng-model=\"configs.configs.global.list_groups_to_non_admins.value\" uib-btn-checkbox>\n" +
5640 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5385 " Enable\n" +
5641 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5386 " </button>\n" +
5642 " <ul class=\"dropdown-menu\">\n" +
5643 " <li><a>No</a></li>\n" +
5644 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
5645 " </ul>\n" +
5646 " </span>\n" +
5647 " </div>\n" +
5387 " </div>\n" +
5648 " </div>\n" +
5388 " </div>\n" +
5649 " </form>\n" +
5389 " </form>\n" +
5650 "\n" +
5390 "\n" +
5651 " <p class=\"m-t-1\">Remember you first need to\n" +
5391 " <h2>Global Rate Limiting</h2>\n" +
5652 " <strong>\n" +
5653 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
5654 " with Bitbucket before we can send issues on your behalf.</p>\n" +
5655 "\n" +
5656 " <p>Every user will have to authorize AppEnlight to access Bitbucket to be able to post issues.</p>\n" +
5657 "\n" +
5658 " </div>\n" +
5659 "</div>\n"
5660 );
5661
5662
5663 $templateCache.put('templates/applications/integrations/campfire.html',
5664 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5665 "\n" +
5666 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
5667 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5668 " <div class=\"panel-body\">\n" +
5669 " <h1>Campfire Integration</h1>\n" +
5670 "\n" +
5671 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5672 "\n" +
5392 "\n" +
5393 " <form class=\"form-horizontal\">\n" +
5673 " <div class=\"form-group\">\n" +
5394 " <div class=\"form-group\">\n" +
5674 "\n" +
5395 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5675 " <label class=\"control-label col-sm-3 col-lg-2\">Account name</label>\n" +
5396 " Ignore reports per minute/per application\n" +
5397 " </label>\n" +
5676 " <div class=\"col-sm-8 col-lg-9\">\n" +
5398 " <div class=\"col-sm-8 col-lg-9\">\n" +
5677 " <data-form-errors errors=\"integration.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5399 " <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_reports_rate_limit.value\" />\n" +
5678 "\n" +
5679 " <div class=\"input-group\">\n" +
5680 " <div class=\"input-group-addon\">http://</div>\n" +
5681 " <input class=\"form-control\" ng-model=\"integration.config.account\" placeholder=\"account\">\n" +
5682 " <div class=\"input-group-addon\">.campfirenow.com</div>\n" +
5683 " </div>\n" +
5684 " </div>\n" +
5400 " </div>\n" +
5685 " </div>\n" +
5401 " </div>\n" +
5686 "\n" +
5402 "\n" +
5687 " <div class=\"form-group\">\n" +
5403 " <div class=\"form-group\">\n" +
5688 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
5404 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5405 " Ignore logs per minute/per application\n" +
5406 " </label>\n" +
5689 " <div class=\"col-sm-8 col-lg-9\">\n" +
5407 " <div class=\"col-sm-8 col-lg-9\">\n" +
5690 " <data-form-errors errors=\"integration.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
5408 " <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_logs_rate_limit.value\" />\n" +
5691 " <input class=\"form-control\" ng-model=\"integration.config.api_token\" placeholder=\"Your API token\">\n" +
5692 " </div>\n" +
5409 " </div>\n" +
5693 " </div>\n" +
5410 " </div>\n" +
5694 "\n" +
5411 "\n" +
5695 " <div class=\"form-group\">\n" +
5412 " <div class=\"form-group\">\n" +
5696 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
5413 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
5414 " Ignore metrics per minute/per application\n" +
5415 " </label>\n" +
5697 " <div class=\"col-sm-8 col-lg-9\">\n" +
5416 " <div class=\"col-sm-8 col-lg-9\">\n" +
5698 " <data-form-errors errors=\"integration.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
5417 " <input class=\"form-control\" type=\"number\" ng-model=\"configs.configs.global.per_application_metrics_rate_limit.value\" />\n" +
5699 " <input class=\"form-control\" ng-model=\"integration.config.rooms\" placeholder=\"Room ID list\">\n" +
5700 " <p>\n" +
5701 " <small>Room ID list separated by comma</small>\n" +
5702 " </p>\n" +
5703 " </div>\n" +
5418 " </div>\n" +
5704 " </div>\n" +
5419 " </div>\n" +
5705 " <div class=\"form-group\">\n" +
5706 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Campfire\">\n" +
5707 "\n" +
5420 "\n" +
5708 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5421 " </form>\n" +
5709 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5710 " <ul class=\"dropdown-menu\">\n" +
5711 " <li><a>No</a></li>\n" +
5712 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
5713 " </ul>\n" +
5714 " </span>\n" +
5715 "\n" +
5422 "\n" +
5716 " <div class=\"btn-group\" uib-dropdown>\n" +
5423 " <hr/>\n" +
5717 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5718 " Test integration <span class=\"caret\"></span>\n" +
5719 " </button>\n" +
5720 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5721 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5722 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5723 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5724 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5725 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5726 " </ul>\n" +
5727 " </div>\n" +
5728 "\n" +
5424 "\n" +
5729 " </div>\n" +
5425 " <a class=\"btn btn-primary\" ng-click=\"configs.save()\">Save configuration</a>\n" +
5426 " </div>\n" +
5730 "\n" +
5427 "\n" +
5731 " </form>\n" +
5428 "</div>\n" +
5732 "\n" +
5429 "\n" +
5430 "\n" +
5431 "<div class=\"panel panel-default\">\n" +
5432 " <div class=\"panel-heading\">\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" +
5733 " </div>\n" +
5438 " </div>\n" +
5734 "</div>\n"
5439 "</div>\n"
5735 );
5440 );
5736
5441
5737
5442
5738 $templateCache.put('templates/applications/integrations/flowdock.html',
5443 $templateCache.put('templates/admin/configs/parent_view.html',
5739 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5444 "<div ui-view></div>"
5740 "\n" +
5445 );
5741 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
5446
5742 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5447
5743 " <div class=\"panel-body\">\n" +
5448 $templateCache.put('templates/admin/groups/groups_create.html',
5744 "\n" +
5449 "<ng-include src=\"'templates/loader.html'\" ng-if=\"group.loading.group\"></ng-include>\n" +
5745 " <h1>Flowdock Integration</h1>\n" +
5746 "\n" +
5747 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5748 "\n" +
5749 " <div class=\"form-group\">\n" +
5750 "\n" +
5450 "\n" +
5751 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
5451 "<div ng-show=\"!group.loading.group\">\n" +
5752 "\n" +
5452 "\n" +
5753 " <div class=\"col-sm-8 col-lg-9\">\n" +
5453 " <div class=\"panel panel-default\">\n" +
5754 " <data-form-errors errors=\"integration.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
5454 " <div class=\"panel-body\">\n" +
5755 " <input class=\"form-control\" ng-model=\"integration.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
5455 " <form name=\"group.groupForm\" class=\"form-horizontal\" ng-submit=\"group.createGroup()\">\n" +
5456 " <div class=\"form-group\" id=\"row-group_name\">\n" +
5457 " <data-form-errors errors=\"group.groupForm.ae_validation.group_name\"></data-form-errors>\n" +
5458 " <label for=\"group_name\" id=\"label-group_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
5459 " Group name\n" +
5460 " <span class=\"required\">*</span>\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" +
5756 " </div>\n" +
5465 " </div>\n" +
5757 "\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" +
5472 " </label>\n" +
5473 " <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" +
5475 " </div>\n" +
5476 " </div>\n" +
5758 "\n" +
5477 "\n" +
5759 " </div>\n" +
5760 "\n" +
5761 " <div class=\"form-group\">\n" +
5762 "\n" +
5763 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5764 "\n" +
5765 " <div class=\"col-sm-8 col-lg-9\">\n" +
5766 "\n" +
5767 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Flowdock\">\n" +
5768 "\n" +
5478 "\n" +
5769 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5479 " <div class=\"form-group\" id=\"row-submit\">\n" +
5770 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5480 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
5771 " <ul class=\"dropdown-menu\">\n" +
5481 " </label>\n" +
5772 " <li><a>No</a></li>\n" +
5482 " <div class=\"col-sm-8 col-lg-9\">\n" +
5773 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
5483 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$state.params.groupId ? 'Update' : 'Add'}} Group\">\n" +
5774 " </ul>\n" +
5775 " </span>\n" +
5776 " <div class=\"btn-group\" uib-dropdown>\n" +
5777 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5778 " Test integration <span class=\"caret\"></span>\n" +
5779 " </button>\n" +
5780 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5781 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5782 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5783 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5784 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5785 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5786 " </ul>\n" +
5787 " </div>\n" +
5484 " </div>\n" +
5788 " </div>\n" +
5485 " </div>\n" +
5789 " </div>\n" +
5486 " </form>\n" +
5487 " </div>\n" +
5488 " </div>\n" +
5489 "\n" +
5790 "\n" +
5490 "\n" +
5491 " <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
5492 " <div class=\"panel-heading\">\n" +
5493 " <h3 class=\"panel-title\">Permissions summary</h3>\n" +
5494 " </div>\n" +
5495 " <div class=\"panel-body\">\n" +
5496 " <h3>Direct application permissions</h3>\n" +
5497 "\n" +
5498 " <ul class=\"list-group\">\n" +
5499 " <li ng-repeat=\"perm in group.resourcePermissions.group.application\" class=\"animate-repeat list-group-item\">\n" +
5500 " <strong>{{ perm.self.resource_name }}</strong>\n" +
5791 "\n" +
5501 "\n" +
5792 " </form>\n" +
5502 " <div class=\"pull-right\">\n" +
5793 "\n" +
5503 "\n" +
5794 " </div>\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" +
5795 "</div>\n"
5796 );
5797
5798
5799 $templateCache.put('templates/applications/integrations/github.html',
5800 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5801 "\n" +
5505 "\n" +
5802 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\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" +
5803 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5507 " <span class=\"fa fa-cog\"></span>\n" +
5804 " <div class=\"panel-body\">\n" +
5508 " </a>\n" +
5509 " </div>\n" +
5510 " </li>\n" +
5511 " </ul>\n" +
5805 "\n" +
5512 "\n" +
5806 " <h1>Github Integration</h1>\n" +
5513 " <h3>Direct dashboard permissions</h3>\n" +
5807 "\n" +
5514 "\n" +
5808 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5515 " <ul class=\"list-group\">\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" +
5809 "\n" +
5518 "\n" +
5519 " <div class=\"pull-right\">\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" +
5810 "\n" +
5521 "\n" +
5811 " <div class=\"form-group\">\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" +
5523 " <span class=\"fa fa-cog\"></span>\n" +
5524 " </a>\n" +
5525 " </div>\n" +
5526 " </li>\n" +
5527 " </ul>\n" +
5812 "\n" +
5528 "\n" +
5813 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
5529 " </div>\n" +
5814 "\n" +
5530 "\n" +
5815 " <div class=\"col-sm-8 col-lg-9\">\n" +
5531 " </div>\n" +
5816 "\n" +
5532 "\n" +
5817 " <data-form-errors errors=\"integration.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5818 " <data-form-errors errors=\"integration.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
5819 "\n" +
5533 "\n" +
5820 " <div class=\"input-group\">\n" +
5534 " <div class=\"panel panel-default\" ng-if=\"group.group.id\">\n" +
5821 " <div class=\"input-group-addon\">https://api.github.com/</div>\n" +
5535 " <div class=\"panel-heading\">\n" +
5822 " <input class=\"form-control\" ng-model=\"integration.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
5536 " <h3 class=\"panel-title\">User list</h3>\n" +
5823 " <div class=\"input-group-addon\">/</div>\n" +
5537 " </div>\n" +
5824 " <input class=\"form-control\" ng-model=\"integration.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
5538 " <div class=\"panel-body\">\n" +
5825 " </div>\n" +
5826 "\n" +
5539 "\n" +
5540 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"group.addUser()\">\n" +
5541 " <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" +
5827 " </div>\n" +
5543 " </div>\n" +
5828 " </div>\n" +
5544 " <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" +
5546 " </div>\n" +
5547 " </form>\n" +
5829 "\n" +
5548 "\n" +
5830 " <div class=\"form-group\">\n" +
5549 " </div>\n" +
5831 "\n" +
5550 "\n" +
5832 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5551 " <table st-table=\"displayedCollection\" st-safe-src=\"group.users\" class=\"table table-striped\">\n" +
5552 " <thead>\n" +
5553 " <tr>\n" +
5554 " <th st-sort=\"user_name\"><a>Username</a></th>\n" +
5555 " <th st-sort=\"email\"><a>Email</a></th>\n" +
5556 " <th st-sort=\"status\"><a>Status</a></th>\n" +
5557 " <th st-sort=\"first_name\"><a>First Name</a></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" +
5562 " <tr>\n" +
5563 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" 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" +
5565 " <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" +
5570 " </tr>\n" +
5571 " </thead>\n" +
5572 " <tbody>\n" +
5833 "\n" +
5573 "\n" +
5834 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
5574 " <tr ng-repeat=\"user in displayedCollection\">\n" +
5575 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
5576 " <td>{{user.email}}</td>\n" +
5577 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
5578 " <td>{{user.first_name}}</td>\n" +
5579 " <td>{{user.last_name}}</td>\n" +
5580 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
5581 " <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" +
5584 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
5585 " <ul class=\"dropdown-menu\">\n" +
5586 " <li><a>No</a></li>\n" +
5587 " <li><a ng-click=\"group.removeUser(user)\">Yes</a></li>\n" +
5588 " </ul>\n" +
5589 " </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" +
5596 " </tr>\n" +
5597 " </tfoot>\n" +
5598 " </tbody>\n" +
5599 " </table>\n" +
5835 "\n" +
5600 "\n" +
5836 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5601 " </div>\n" +
5837 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5838 " <ul class=\"dropdown-menu\">\n" +
5839 " <li><a>No</a></li>\n" +
5840 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
5841 " </ul>\n" +
5842 " </span>\n" +
5843 "\n" +
5602 "\n" +
5844 " </div>\n" +
5845 " </form>\n" +
5846 "\n" +
5603 "\n" +
5847 " <p class=\"m-t-1\">Remember you first need to\n" +
5604 "</div>\n"
5848 " <strong>\n" +
5605 );
5849 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
5606
5850 " with Github before we can send issues on your behalf.</p>\n" +
5607
5608 $templateCache.put('templates/admin/groups/groups_list.html',
5609 "<ng-include src=\"'templates/loader.html'\" ng-if=\"groups.loading.groups\"></ng-include>\n" +
5851 "\n" +
5610 "\n" +
5852 " <p>Every user will have to authorize AppEnlight to access Github to be able to post issues.</p>\n" +
5611 "<div class=\"panel panel-default\" ng-show=\"!groups.loading.groups\">\n" +
5853 "\n" +
5612 "\n" +
5854 " <div class=\"panel panel-warning\">\n" +
5613 " <table st-table=\"displayedCollection\" st-safe-src=\"groups.groups\" class=\"table table-striped\">\n" +
5855 " <div class=\"panel-heading\">Private repository access</div>\n" +
5614 " <thead>\n" +
5856 " <div class=\"panel-body\">\n" +
5615 " <tr>\n" +
5857 " <p>If you need access to private repositories <a data-ui-sref=\"user.profile.identities\">profile page</a> allows you to require token including private repository permissions.</p>\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" +
5858 "\n" +
5629 "\n" +
5859 " <p>Registration page OAuth does NOT give you token with private repository access permissions.</p>\n" +
5630 " <tr ng-repeat=\"group in displayedCollection track by group.id\">\n" +
5860 " </div>\n" +
5631 " <td>{{group.group_name}}</td>\n" +
5861 " </div>\n" +
5632 " <td>{{group.description}}</td>\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" +
5862 "\n" +
5653 "\n" +
5654 "</div>\n" +
5655 "\n"
5656 );
5657
5658
5659 $templateCache.put('templates/admin/groups/parent_view.html',
5660 "<div ui-view></div>"
5661 );
5662
5663
5664 $templateCache.put('templates/admin/parent_view.html',
5665 "<div class=\"col-sm-3\" id=\"menu\">\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" +
5863 " </div>\n" +
5674 " </div>\n" +
5864 "</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" +
5682 " <div class=\"panel panel-default\">\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" +
5692 "\n" +
5693 "<div class=\"col-sm-9\" ui-view></div>\n"
5865 );
5694 );
5866
5695
5867
5696
5868 $templateCache.put('templates/applications/integrations/hipchat.html',
5697 $templateCache.put('templates/admin/partitions.html',
5869 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5698 "<ng-include src=\"'templates/loader.html'\" ng-if=\"partitions.loading.partitions\"></ng-include>\n" +
5870 "\n" +
5699 "\n" +
5871 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
5700 "<div ng-show=\"!partitions.loading.partitions\">\n" +
5872 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5873 " <div class=\"panel-body\">\n" +
5874 "\n" +
5701 "\n" +
5875 " <h1>Hipchat Integration</h1>\n" +
5702 " <div class=\"panel panel-default\">\n" +
5703 " <div class=\"panel-heading\">\n" +
5704 " DELETE Daily Partitions\n" +
5705 " </div>\n" +
5706 "\n" +
5707 " <form name=\"partitions.dailyPartitionsForm\"\n" +
5708 " novalidate ng-submit=\"partitions.partitionsDelete('dailyPartitions')\"\n" +
5709 " class=\"form-inline\"\n" +
5710 " ng-class=\"{'has-error':partitions.dailyPartitionsForm.$invalid}\">\n" +
5876 "\n" +
5711 "\n" +
5877 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5712 " <div class=\"panel-body\">\n" +
5878 "\n" +
5713 "\n" +
5879 " <div class=\"form-group\">\n" +
5714 " <input type=\"text\" name=\"confirm\"\n" +
5880 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\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" +
5881 "\n" +
5718 "\n" +
5882 " <div class=\"col-sm-8 col-lg-9\">\n" +
5883 " <data-form-errors errors=\"integration.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
5884 " <input class=\"form-control\" ng-model=\"integration.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
5885 " </div>\n" +
5886 " </div>\n" +
5719 " </div>\n" +
5887 "\n" +
5720 "\n" +
5888 " <div class=\"form-group\">\n" +
5721 " <table class=\"table table-striped\">\n" +
5889 "\n" +
5722 " <tr>\n" +
5890 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
5723 " <th class=\"c1 date\">Date</th>\n" +
5724 " <th class=\"c2 indices\">Indices</th>\n" +
5725 " </tr>\n" +
5726 " <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.dailyPartitions\">\n" +
5727 " <td class=\"c1\">{{row[0]}}</td>\n" +
5728 " <td class=\"c2\">\n" +
5729 " <ul class=\"list-group\">\n" +
5730 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
5731 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
5732 " </li>\n" +
5733 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
5734 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
5735 " </li>\n" +
5736 " </ul>\n" +
5737 " </td>\n" +
5738 " </tr>\n" +
5739 " </table>\n" +
5740 " </form>\n" +
5891 "\n" +
5741 "\n" +
5892 " <div class=\"col-sm-8 col-lg-9\">\n" +
5742 " </div>\n" +
5893 " <data-form-errors errors=\"integration.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
5894 " <input class=\"form-control\" ng-model=\"integration.config.rooms\" placeholder=\"Room ID list\" type=\"text\">\n" +
5895 "\n" +
5743 "\n" +
5896 " <p>\n" +
5744 " <div class=\"panel panel-default\">\n" +
5897 " <small>Room ID list separated by comma</small>\n" +
5745 " <div class=\"panel-heading\">\n" +
5898 " </p>\n" +
5746 " DELETE Permanent Partitions\n" +
5899 " </div>\n" +
5747 " </div>\n" +
5900 "\n" +
5748 "\n" +
5901 " </div>\n" +
5749 " <form name=\"partitions.permanentPartitionsForm\" novalidate\n" +
5750 " ng-submit=\"partitions.partitionsDelete('permanentPartitions')\"\n" +
5751 " class=\"form-inline\"\n" +
5752 " ng-class=\"{'has-error':partitions.permanentPartitionsForm.$invalid}\">\n" +
5902 "\n" +
5753 "\n" +
5903 " <div class=\"form-group\">\n" +
5904 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5905 " <div class=\"col-sm-8 col-lg-9\">\n" +
5906 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Hipchat\">\n" +
5907 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5908 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5909 " <ul class=\"dropdown-menu\">\n" +
5910 " <li><a>No</a></li>\n" +
5911 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
5912 " </ul>\n" +
5913 " </span>\n" +
5914 "\n" +
5754 "\n" +
5915 " <div class=\"btn-group\" uib-dropdown>\n" +
5755 " <div class=\"panel-body\">\n" +
5916 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5917 " Test integration <span class=\"caret\"></span>\n" +
5918 " </button>\n" +
5919 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5920 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5921 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5922 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5923 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5924 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5925 " </ul>\n" +
5926 " </div>\n" +
5927 "\n" +
5756 "\n" +
5757 " <div class=\"form-group\">\n" +
5758 " <input type=\"text\" name=\"confirm\"\n" +
5759 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control\" confirm-validate required ng-model=\"partitions.permConfirm\">\n" +
5760 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"partitions.permanentPartitionsForm.$invalid\">\n" +
5761 " <input type=\"checkbox\" ng-model=\"partitions.permChecked\" ng-change=\"partitions.setCheckedList('permanentPartitions')\"> Check All\n" +
5928 " </div>\n" +
5762 " </div>\n" +
5763 "\n" +
5929 " </div>\n" +
5764 " </div>\n" +
5930 "\n" +
5765 "\n" +
5766 " <table class=\"table table-striped\">\n" +
5767 " <tr>\n" +
5768 " <th class=\"c1 date\">Date</th>\n" +
5769 " <th class=\"c2 indices\">Indices</th>\n" +
5770 " </tr>\n" +
5771 " <tr class=\"r{{$index}}\" ng-repeat=\"row in partitions.permanentPartitions\">\n" +
5772 " <td class=\"c1\">{{row[0]}}</td>\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" +
5931 " </form>\n" +
5785 " </form>\n" +
5932 "\n" +
5786 "\n" +
5933 " </div>\n" +
5787 " </div>\n" +
5788 "\n" +
5934 "</div>\n"
5789 "</div>\n"
5935 );
5790 );
5936
5791
5937
5792
5938 $templateCache.put('templates/applications/integrations/jira.html',
5793 $templateCache.put('templates/admin/system.html',
5939 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5794 "<ng-include src=\"'templates/loader.html'\" ng-if=\"system.loading.system\"></ng-include>\n" +
5940 "\n" +
5941 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
5942 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5943 " <div class=\"panel-body\">\n" +
5944 "\n" +
5945 " <h1>Jira Integration</h1>\n" +
5946 "\n" +
5795 "\n" +
5947 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5796 "<div ng-if=\"system.loading.system == false\">\n" +
5797 " <div class=\"row\">\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" +
5948 "\n" +
5806 "\n" +
5949 " <div class=\"form-group\" id=\"row-host_name\">\n" +
5807 " <p><strong>System Load:</strong>\n" +
5808 " 1min: {{system.systemLoad[0]}}, 5min: {{system.systemLoad[1]}}, 15min: {{system.systemLoad[2]}}\n" +
5809 " </p>\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" +
5950 "\n" +
5825 "\n" +
5951 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5826 " <p><strong>Disks:</strong>\n" +
5952 " Server URL <span class=\"required\">*</span>\n" +
5827 " <ul>\n" +
5953 " </label>\n" +
5828 " <li ng-repeat=\"disk in system.disks\">\n" +
5954 " <div class=\"col-sm-8 col-lg-9\">\n" +
5829 " <strong>{{disk.device}}</strong> {{disk.free}}/{{disk.total}}, {{disk.percentage}}% used\n" +
5955 " <data-form-errors errors=\"integration.integrationForm.ae_validation.host_name\"></data-form-errors>\n" +
5830 " </li>\n" +
5956 " <input class=\"form-control\" id=\"host_name\" name=\"host_name\" type=\"text\" ng-model=\"integration.config.host_name\">\n" +
5831 " </ul>\n" +
5832 " </p>\n" +
5957 "\n" +
5833 "\n" +
5958 " <p>\n" +
5834 " <p><strong>Process stats:</strong>\n" +
5959 " <small>https://servername.atlassian.net</small>\n" +
5835 " <ul>\n" +
5836 " <li>FD soft limits: {{system.selfInfo.fds.soft}}</li>\n" +
5837 " <li>FD hard limits: {{system.selfInfo.fds.hard}}</li>\n" +
5838 " <li>Memlock soft limits: {{system.selfInfo.memlock.soft}}</li>\n" +
5839 " <li>Memlock hard limits: {{system.selfInfo.memlock.hard}}</li>\n" +
5840 " </ul>\n" +
5960 " </p>\n" +
5841 " </p>\n" +
5961 "\n" +
5842 "\n" +
5962 " </div>\n" +
5843 " </div>\n" +
5963 " </div>\n" +
5844 " </div>\n" +
5964 " <div class=\"form-group\" id=\"row-user_name\">\n" +
5845 " </div>\n" +
5846 " </div>\n" +
5847 " <div class=\"row\">\n" +
5848 " <div class=\"col-sm-12\">\n" +
5965 "\n" +
5849 "\n" +
5966 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5850 " <div class=\"panel panel-default\">\n" +
5967 " Username <span class=\"required\">*</span>\n" +
5851 " <div class=\"panel-body\">\n" +
5968 " </label>\n" +
5852 "\n" +
5969 " <div class=\"col-sm-8 col-lg-9\">\n" +
5853 " <uib-tabset>\n" +
5854 " <uib-tab>\n" +
5855 " <uib-tab-heading>\n" +
5856 " Postgresql Tables\n" +
5857 " </uib-tab-heading>\n" +
5970 "\n" +
5858 "\n" +
5971 " <data-form-errors errors=\"integration.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5859 " <table class=\"table table-striped\">\n" +
5972 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"integration.config.user_name\">\n" +
5860 " <thead>\n" +
5861 " <tr>\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" +
5973 "\n" +
5873 "\n" +
5974 " <p>\n" +
5874 " </uib-tab>\n" +
5975 " <small>user@email.com</small>\n" +
5976 " </p>\n" +
5977 "\n" +
5875 "\n" +
5978 " </div>\n" +
5876 " <uib-tab>\n" +
5979 " </div>\n" +
5877 " <uib-tab-heading>\n" +
5980 " <div class=\"form-group\" id=\"row-password\">\n" +
5878 " Elasticsearch Indices\n" +
5879 " </uib-tab-heading>\n" +
5981 "\n" +
5880 "\n" +
5982 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5881 " <table class=\"table table-striped\">\n" +
5983 " Password <span class=\"required\">*</span>\n" +
5882 " <thead>\n" +
5984 " </label>\n" +
5883 " <tr>\n" +
5985 " <div class=\"col-sm-8 col-lg-9\">\n" +
5884 " <th class=\"c1 tablename\">Index name</th>\n" +
5986 " <data-form-errors errors=\"integration.integrationForm.ae_validation.password\"></data-form-errors>\n" +
5885 " <th class=\"c2 size_human\">Size</th>\n" +
5987 " <input class=\"form-control\" id=\"password\" name=\"password\" type=\"password\" ng-model=\"integration.config.password\">\n" +
5886 " </tr>\n" +
5988 " </div>\n" +
5887 " </thead>\n" +
5989 " </div>\n" +
5888 " <tbody>\n" +
5990 " <div class=\"form-group\" id=\"row-project\">\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" +
5991 "\n" +
5895 "\n" +
5992 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5896 " </uib-tab>\n" +
5993 " Project key <span class=\"required\">*</span>\n" +
5994 " </label>\n" +
5995 " <div class=\"col-sm-8 col-lg-9\">\n" +
5996 " <data-form-errors errors=\"integration.integrationForm.ae_validation.project\"></data-form-errors>\n" +
5997 " <input class=\"form-control\" id=\"project\" name=\"project\" type=\"text\" ng-model=\"integration.config.project\">\n" +
5998 " </div>\n" +
5999 " </div>\n" +
6000 " <div class=\"form-group\" id=\"row-submit\">\n" +
6001 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
6002 " <div class=\"col-sm-8 col-lg-9\">\n" +
6003 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup Jira\">\n" +
6004 "\n" +
5897 "\n" +
6005 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5898 " <uib-tab>\n" +
6006 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5899 " <uib-tab-heading>\n" +
6007 " <ul class=\"dropdown-menu\">\n" +
5900 " Processes\n" +
6008 " <li><a>No</a></li>\n" +
5901 " </uib-tab-heading>\n" +
6009 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
6010 " </ul>\n" +
6011 " </span>\n" +
6012 " </div>\n" +
6013 " </div>\n" +
6014 "\n" +
5902 "\n" +
6015 " </form>\n" +
5903 " <table class=\"table table-striped\">\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" +
5927 " </uib-tab>\n" +
5928 "\n" +
5929 " <uib-tab>\n" +
5930 " <uib-tab-heading>\n" +
5931 " Python packages\n" +
5932 " </uib-tab-heading>\n" +
5933 "\n" +
5934 " <table class=\"table\">\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" +
6016 "\n" +
5941 "\n" +
5942 " </uib-tab>\n" +
6017 "\n" +
5943 "\n" +
5944 " </uib-tabset>\n" +
5945 " </div>\n" +
5946 " </div>\n" +
5947 " </div>\n" +
6018 " </div>\n" +
5948 " </div>\n" +
6019 "</div>\n"
5949 "</div>\n"
6020 );
5950 );
6021
5951
6022
5952
6023 $templateCache.put('templates/applications/integrations/slack.html',
5953 $templateCache.put('templates/admin/users/parent_view.html',
6024 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
5954 "<div ui-view></div>"
5955 );
5956
5957
5958 $templateCache.put('templates/admin/users/users_create.html',
5959 "<ng-include src=\"'templates/loader.html'\" ng-if=\"user.loading.user\"></ng-include>\n" +
5960 "\n" +
5961 "<div ng-show=\"!user.loading.user\">\n" +
5962 "\n" +
5963 " <div class=\"panel panel-default\">\n" +
5964 " <div class=\"panel-body\">\n" +
6025 "\n" +
5965 "\n" +
6026 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
5966 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"user.user.id\">\n" +
6027 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
5967 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-user-secret\"></span> Re-login to user</a>\n" +
6028 " <div class=\"panel-body\">\n" +
5968 " <ul class=\"dropdown-menu\">\n" +
5969 " <li><a>No</a></li>\n" +
5970 " <li><a ng-click=\"user.reloginUser(user)\">Yes</a></li>\n" +
5971 " </ul>\n" +
5972 " </span>\n" +
6029 "\n" +
5973 "\n" +
6030 " <h1>Slack Integration</h1>\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" +
5980 " </label>\n" +
5981 " <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" +
5983 " </div>\n" +
5984 " </div>\n" +
6031 "\n" +
5985 "\n" +
6032 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
5986 " <div class=\"form-group\" id=\"row-user_password\">\n" +
5987 " <data-form-errors errors=\"user.profileForm.ae_validation.user_password\"></data-form-errors>\n" +
5988 " <label for=\"user_password\" id=\"label-user_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
5989 " Password\n" +
5990 " <span class=\"required\">*</span>\n" +
5991 " </label>\n" +
5992 " <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" +
6033 "\n" +
5994 "\n" +
6034 " <div class=\"form-group\">\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" +
6035 "\n" +
5998 "\n" +
6036 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5999 " </div>\n" +
6037 " API Token <span class=\"required\">*</span>\n" +
6038 " </label>\n" +
6039 " <div class=\"col-sm-8 col-lg-9\">\n" +
6040 " <data-form-errors errors=\"integration.integrationForm.ae_validation.webhook_url\"></data-form-errors>\n" +
6041 " <input class=\"form-control\" ng-model=\"integration.config.webhook_url\" placeholder=\"Webhook URL\" type=\"webhook_url\">\n" +
6042 " </div>\n" +
6000 " </div>\n" +
6043 " </div>\n" +
6044 "\n" +
6001 "\n" +
6045 " <div class=\"form-group\">\n" +
6046 "\n" +
6002 "\n" +
6047 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
6003 " <div class=\"form-group\" id=\"row-email\">\n" +
6048 " <div class=\"col-sm-8 col-lg-9\">\n" +
6004 " <data-form-errors errors=\"user.profileForm.ae_validation.email\"></data-form-errors>\n" +
6049 " <input type=\"submit\" class=\"btn btn-primary\"\n" +
6005 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6050 " value=\"Connect to Slack\">\n" +
6006 " Email Address\n" +
6007 " <span class=\"required\">*</span>\n" +
6008 " </label>\n" +
6009 " <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" +
6011 " </div>\n" +
6012 " </div>\n" +
6051 "\n" +
6013 "\n" +
6052 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6014 " <div class=\"form-group\" id=\"row-first_name\">\n" +
6053 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
6015 " <data-form-errors errors=\"user.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
6054 " <ul class=\"dropdown-menu\">\n" +
6016 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6055 " <li><a>No</a></li>\n" +
6017 " First Name\n" +
6056 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
6018 " </label>\n" +
6057 " </ul>\n" +
6019 " <div class=\"col-sm-8 col-lg-9\">\n" +
6058 " </span>\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" +
6059 "\n" +
6032 "\n" +
6060 " <div class=\"btn-group\" uib-dropdown>\n" +
6033 " <div class=\"form-group\" id=\"row-status\">\n" +
6061 " <button type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
6034 " <data-form-errors errors=\"user.profileForm.ae_validation.status\"></data-form-errors>\n" +
6062 " Test integration <span class=\"caret\"></span>\n" +
6035 " <label for=\"status\" id=\"label-status\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6063 " </button>\n" +
6036 " Active\n" +
6064 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
6037 " </label>\n" +
6065 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('report_notification')\">Test report notification</a></li>\n" +
6038 " <div class=\"col-sm-8 col-lg-9\">\n" +
6066 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('error_alert')\">Test error alert</a></li>\n" +
6039 " <input checked class=\"form-control\" id=\"status\" name=\"status\" type=\"checkbox\" ng-model=\"user.user.status\">\n" +
6067 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
6068 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
6069 " <li role=\"menuitem\"><a ng-click=\"integration.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
6070 " </ul>\n" +
6071 " </div>\n" +
6040 " </div>\n" +
6072 " </div>\n" +
6041 " </div>\n" +
6073 " </div>\n" +
6074 " </form>\n" +
6075 "\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" +
6076 " </div>\n" +
6052 " </div>\n" +
6077 "</div>\n"
6078 );
6079
6080
6081 $templateCache.put('templates/applications/integrations/webhooks.html',
6082 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || integration.loading.integration\"></ng-include>\n" +
6083 "\n" +
6053 "\n" +
6084 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !integration.loading.integration\">\n" +
6085 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
6086 " <div class=\"panel-body\">\n" +
6087 "\n" +
6054 "\n" +
6088 " <h1>Webhooks Integration</h1>\n" +
6055 " <div class=\"panel panel-default\" ng-if=\"user.user.id\">\n" +
6056 " <div class=\"panel-heading\">\n" +
6057 " <h3 class=\"panel-title\">Permission Summary</h3>\n" +
6058 " </div>\n" +
6059 " <div class=\"panel-body\">\n" +
6060 " <h3>Direct application permissions</h3>\n" +
6089 "\n" +
6061 "\n" +
6090 " <form name=\"integration.integrationForm\" ng-submit=\"integration.configureIntegration()\" class=\"form-horizontal\">\n" +
6062 " <ul class=\"list-group\">\n" +
6091 " <div class=\"form-group\" id=\"row-reports_webhook\">\n" +
6063 " <li ng-repeat=\"perm in user.resourcePermissions.user.application\" class=\"animate-repeat list-group-item\">\n" +
6064 " <strong>{{ perm.self.resource_name }}</strong>\n" +
6065 " <div class=\"pull-right\">\n" +
6092 "\n" +
6066 "\n" +
6093 " <label class=\"control-label col-sm-3 col-lg-2\">\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" +
6094 " Reports webhook <span class=\"required\">*</span>\n" +
6095 " </label>\n" +
6096 " <div class=\"col-sm-8 col-lg-9\">\n" +
6097 " <data-form-errors errors=\"integration.integrationForm.ae_validation.reports_webhook\"></data-form-errors>\n" +
6098 " <input class=\"form-control\" id=\"reports_webhook\" name=\"reports_webhook\" type=\"text\" ng-model=\"integration.config.reports_webhook\">\n" +
6099 " </div>\n" +
6100 " </div>\n" +
6101 " <div class=\"form-group\" id=\"row-alerts_webhook\">\n" +
6102 "\n" +
6068 "\n" +
6103 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
6069 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
6104 " Alerts webhook <span class=\"required\">*</span>\n" +
6070 " <span class=\"fa fa-cog\"></span>\n" +
6105 " </label>\n" +
6071 " </a>\n" +
6106 " <div class=\"col-sm-8 col-lg-9\">\n" +
6072 " </div>\n" +
6107 " <data-form-errors errors=\"integration.integrationForm.ae_validation.alerts_webhook\"></data-form-errors>\n" +
6073 " </li>\n" +
6108 " <input class=\"form-control StringField None\" id=\"alerts_webhook\" name=\"alerts_webhook\" type=\"text\" ng-model=\"integration.config.alerts_webhook\">\n" +
6074 " </ul>\n" +
6109 " </div>\n" +
6110 "\n" +
6075 "\n" +
6076 " <h3>Direct dashboard permissions</h3>\n" +
6111 "\n" +
6077 "\n" +
6112 " </div>\n" +
6078 " <ul class=\"list-group\">\n" +
6113 " <div class=\"form-group\" id=\"row-submit\">\n" +
6079 " <li ng-repeat=\"perm in user.resourcePermissions.user.dashboard\" class=\"animate-repeat list-group-item\">\n" +
6080 " <strong>{{ perm.self.resource_name }}</strong>\n" +
6081 " <div class=\"pull-right\">\n" +
6114 "\n" +
6082 "\n" +
6115 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\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" +
6116 " <div class=\"col-sm-8 col-lg-9\">\n" +
6117 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup webhooks\">\n" +
6118 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6119 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
6120 " <ul class=\"dropdown-menu\">\n" +
6121 " <li><a>No</a></li>\n" +
6122 " <li><a ng-click=\"integration.removeIntegration()\">Yes</a></li>\n" +
6123 " </ul>\n" +
6124 " </span>\n" +
6125 " </div>\n" +
6126 " </div>\n" +
6127 " </form>\n" +
6128 " </div>\n" +
6129 "</div>\n"
6130 );
6131
6132
6133 $templateCache.put('templates/applications/list.html',
6134 "<ng-include src=\"'templates/loader.html'\" ng-if=\"applications.loading.applications\"></ng-include>\n" +
6135 "\n" +
6084 "\n" +
6136 "<div class=\"panel panel-default\" ng-show=\"!applications.loading.applications\">\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" +
6137 " <div class=\"panel-heading\" ng-include=\"'templates/applications/breadcrumbs.html'\"></div>\n" +
6086 " <span class=\"fa fa-cog\"></span>\n" +
6138 " <div class=\"panel-body\" ng-if=\"applications.applications.length === 0 \">\n" +
6087 " </a>\n" +
6088 " </div>\n" +
6089 " </li>\n" +
6090 " </ul>\n" +
6139 "\n" +
6091 "\n" +
6140 " <p>You have to create a new application first.</p>\n" +
6092 " </div>\n" +
6141 "\n" +
6093 "\n" +
6142 " </div>\n" +
6094 " </div>\n" +
6143 "\n" +
6095 "\n" +
6144 " <table class=\"table table-striped\" ng-if=\"applications.applications.length > 0\">\n" +
6145 " <thead>\n" +
6146 " <tr>\n" +
6147 " <th class=\"resource_name\">Resource Name</th>\n" +
6148 " <th class=\"domains\">Domains</th>\n" +
6149 " <th class=\"options\">Options</th>\n" +
6150 " </tr>\n" +
6151 " </thead>\n" +
6152 " <tbody>\n" +
6153 " <tr class=\"r{{$index+1}}\" ng-repeat=\"application in applications.applications\">\n" +
6154 " <td>{{application.resource_name}}</td>\n" +
6155 " <td>{{application.domains}}</td>\n" +
6156 " <td class=\"options\">\n" +
6157 " <a class=\"btn btn-default\" data-ui-sref=\"applications.update({resourceId:application.resource_id})\" data-toggle=\"tooltip\" title=\"Update application\"><span class=\"fa fa-cog\"></span> Update</a>\n" +
6158 " <a class=\"btn btn-default\" data-ui-sref=\"applications.integrations({resourceId:application.resource_id})\" data-toggle=\"tooltip\" title=\"Manage Integrations\"><span class=\"fa fa-wrench\"></span> Integrations</a>\n" +
6159 " </td>\n" +
6160 " </tr>\n" +
6161 " </tbody>\n" +
6162 " </table>\n" +
6163 "\n" +
6096 "\n" +
6164 "</div>\n"
6097 "</div>\n"
6165 );
6098 );
6166
6099
6167
6100
6168 $templateCache.put('templates/applications/parent_view.html',
6101 $templateCache.put('templates/admin/users/users_list.html',
6169 "<div class=\"row application-management\">\n" +
6102 "<ng-include src=\"'templates/loader.html'\" ng-if=\"users.loading.users\"></ng-include>\n" +
6170 " <div class=\"col-sm-3\" id=\"menu\">\n" +
6171 " <div ng-include=\"'templates/user/menu.html'\"></div>\n" +
6172 " </div>\n" +
6173 "\n" +
6103 "\n" +
6174 " <div class=\"col-sm-9\" ui-view></div>\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" +
6109 " {{users.activeUsers}} active out of {{users.users.length}} users\n" +
6110 " </div>\n" +
6111 "\n" +
6112 "\n" +
6113 " <table st-table=\"displayedCollection\" st-safe-src=\"users.users\" class=\"table table-striped\">\n" +
6114 " <thead>\n" +
6115 " <tr>\n" +
6116 " <th class=\"user_name\" st-sort=\"user_name\"><a>Username</a></th>\n" +
6117 " <th class=\"email\" st-sort=\"email\"><a>Email</a></th>\n" +
6118 " <th class=\"status\" st-sort=\"status\"><a>Status</a></th>\n" +
6119 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
6120 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
6121 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
6122 " <th class=\"options\"></th>\n" +
6123 " </tr>\n" +
6124 " <tr>\n" +
6125 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6126 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6127 " <th></th>\n" +
6128 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6129 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6130 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6131 " <th></th>\n" +
6132 " </tr>\n" +
6133 " </thead>\n" +
6134 " <tbody>\n" +
6135 "\n" +
6136 " <tr ng-repeat=\"user in displayedCollection track by user.id\">\n" +
6137 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
6138 " <td class=\"word-wrap small\">{{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" +
6140 " <td class=\"word-wrap small\">{{user.first_name}}</td>\n" +
6141 " <td class=\"word-wrap small\">{{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" +
6143 " <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" +
6145 " <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" +
6147 " <ul class=\"dropdown-menu\">\n" +
6148 " <li><a>No</a></li>\n" +
6149 " <li><a ng-click=\"users.removeUser(user)\">Yes</a></li>\n" +
6150 " </ul>\n" +
6151 " </span>\n" +
6152 " </tr>\n" +
6153 " <tfoot>\n" +
6154 " <tr>\n" +
6155 " <td colspan=\"6\" class=\"text-center\">\n" +
6156 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
6157 " </td>\n" +
6158 " </tr>\n" +
6159 " </tfoot>\n" +
6160 " </tbody>\n" +
6161 " </table>\n" +
6175 "\n" +
6162 "\n" +
6163 "\n" +
6164 " </div>\n" +
6176 "</div>\n"
6165 "</div>\n"
6177 );
6166 );
6178
6167
@@ -7100,7 +7089,15 b' function kickstartAE(initialUserData) {'
7100 );
7089 );
7101
7090
7102
7091
7103 $templateCache.put('templates/user/breadcrumbs.html',
7092 $templateCache.put('templates/settings_breadcrumbs.html',
7093 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('applications')\">\n" +
7094 " <li>Applications</li>\n" +
7095 " <li ng-show=\"$ctrl.$state.includes('applications.list')\" ng-class=\"{bold:$ctrl.$state.is('applications.list')}\">Owned applications</li>\n" +
7096 " <li ng-show=\"$ctrl.$state.includes('applications.update')\" ng-class=\"{bold:$ctrl.$state.is('applications.update')}\">Modify application</li>\n" +
7097 " <li ng-show=\"$ctrl.$state.includes('applications.integrations')\" ng-class=\"{bold:$ctrl.$state.includes('applications.integrations')}\">Integrations</li>\n" +
7098 " <li ng-show=\"$ctrl.$state.includes('applications.purge_logs')\" ng-class=\"{bold:$ctrl.$state.includes('applications.purge_logs')}\">Log Purging</li>\n" +
7099 "</ol>\n" +
7100 "\n" +
7104 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('user.profile')\">\n" +
7101 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('user.profile')\">\n" +
7105 " <li>Settings</li>\n" +
7102 " <li>Settings</li>\n" +
7106 " <li ng-show=\"$ctrl.$state.includes('user.profile.edit')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.edit')}\">User Profile</li>\n" +
7103 " <li ng-show=\"$ctrl.$state.includes('user.profile.edit')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.edit')}\">User Profile</li>\n" +
@@ -7145,7 +7142,7 b" angular.module('appenlight.components.appenlightApp', [])"
7145 AppEnlightAppController.$inject = ['$scope','$state', 'stateHolder', 'AeConfig'];
7142 AppEnlightAppController.$inject = ['$scope','$state', 'stateHolder', 'AeConfig'];
7146
7143
7147 function AppEnlightAppController($scope, $state, stateHolder, AeConfig){
7144 function AppEnlightAppController($scope, $state, stateHolder, AeConfig){
7148 console.log('app start');
7145
7149 // to keep bw compatibility
7146 // to keep bw compatibility
7150 $scope.$state = $state;
7147 $scope.$state = $state;
7151 $scope.stateHolder = stateHolder;
7148 $scope.stateHolder = stateHolder;
@@ -7227,86 +7224,395 b' function AppEnlightHeaderController($state, stateHolder, AeConfig){'
7227 }
7224 }
7228 });
7225 });
7229
7226
7230 vm.clickedEvent = function(event){
7227 vm.clickedEvent = function(event){
7231 // exception reports
7228 // exception reports
7232 if (_.contains([1,2], event.event_type)){
7229 if (_.contains([1,2], event.event_type)){
7233 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
7230 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
7234 }
7231 }
7235 // slowness reports
7232 // slowness reports
7236 else if (_.contains([3,4], event.event_type)){
7233 else if (_.contains([3,4], event.event_type)){
7237 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
7234 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
7238 }
7235 }
7239 // uptime reports
7236 // uptime reports
7240 else if (_.contains([7,8], event.event_type)){
7237 else if (_.contains([7,8], event.event_type)){
7241 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
7238 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
7239 }
7240 else{
7241
7242 }
7243 }
7244 }
7245
7246 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7247 // #
7248 // # This program is free software: you can redistribute it and/or modify
7249 // # it under the terms of the GNU Affero General Public License, version 3
7250 // # (only), as published by the Free Software Foundation.
7251 // #
7252 // # This program is distributed in the hope that it will be useful,
7253 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7254 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7255 // # GNU General Public License for more details.
7256 // #
7257 // # You should have received a copy of the GNU Affero General Public License
7258 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7259 // #
7260 // # This program is dual-licensed. If you wish to learn more about the
7261 // # AppEnlight Enterprise Edition, including its added features, Support
7262 // # services, and proprietary license terms, please see
7263 // # https://rhodecode.com/licenses/
7264
7265 angular.module('appenlight.components.channelstream', [])
7266 .component('channelstream', {
7267 controller: ChannelstreamController,
7268 bindings: {
7269 config: '='
7270 }
7271 });
7272
7273 ChannelstreamController.$inject = ['$rootScope', 'stateHolder', 'userSelfPropertyResource'];
7274
7275 function ChannelstreamController($rootScope, stateHolder, userSelfPropertyResource){
7276 if (stateHolder.AeUser.id === null){
7277 return
7278 }
7279 userSelfPropertyResource.get({key: 'websocket'}, function (data) {
7280 stateHolder.websocket = new ReconnectingWebSocket(this.config.ws_url + '/ws?conn_id=' + data.conn_id);
7281 stateHolder.websocket.onopen = function (event) {
7282
7283 };
7284 stateHolder.websocket.onmessage = function (event) {
7285 var data = JSON.parse(event.data);
7286 $rootScope.$apply(function (scope) {
7287 _.each(data, function (message) {
7288
7289 if(typeof message.message.topic !== 'undefined'){
7290 $rootScope.$emit(
7291 'channelstream-message.'+message.message.topic, message);
7292 }
7293 else{
7294 $rootScope.$emit('channelstream-message', message);
7295 }
7296 });
7297 });
7298 };
7299 stateHolder.websocket.onclose = function (event) {
7300
7301 };
7302
7303 stateHolder.websocket.onerror = function (event) {
7304
7305 };
7306 }.bind(this));
7307 }
7308
7309 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7310 // #
7311 // # This program is free software: you can redistribute it and/or modify
7312 // # it under the terms of the GNU Affero General Public License, version 3
7313 // # (only), as published by the Free Software Foundation.
7314 // #
7315 // # This program is distributed in the hope that it will be useful,
7316 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7317 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7318 // # GNU General Public License for more details.
7319 // #
7320 // # You should have received a copy of the GNU Affero General Public License
7321 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7322 // #
7323 // # This program is dual-licensed. If you wish to learn more about the
7324 // # AppEnlight Enterprise Edition, including its added features, Support
7325 // # services, and proprietary license terms, please see
7326 // # https://rhodecode.com/licenses/
7327
7328 angular.module('appenlight.components.integrationsListView', [])
7329 .component('integrationsListView', {
7330 templateUrl: 'components/views/applications-integrations-view/applications-integrations-view.html',
7331 controller: IntegrationsListViewController
7332 });
7333
7334 IntegrationsListViewController.$inject = ['$state', 'applicationsResource'];
7335
7336 function IntegrationsListViewController($state, applicationsResource) {
7337
7338 var vm = this;
7339 vm.loading = {application: true};
7340 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
7341 vm.loading.application = false;
7342 $state.current.data.resource = vm.resource;
7343 });
7344 }
7345
7346 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7347 // #
7348 // # This program is free software: you can redistribute it and/or modify
7349 // # it under the terms of the GNU Affero General Public License, version 3
7350 // # (only), as published by the Free Software Foundation.
7351 // #
7352 // # This program is distributed in the hope that it will be useful,
7353 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7354 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7355 // # GNU General Public License for more details.
7356 // #
7357 // # You should have received a copy of the GNU Affero General Public License
7358 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7359 // #
7360 // # This program is dual-licensed. If you wish to learn more about the
7361 // # AppEnlight Enterprise Edition, including its added features, Support
7362 // # services, and proprietary license terms, please see
7363 // # https://rhodecode.com/licenses/
7364
7365 angular.module('appenlight.components.applicationsListView', [])
7366 .component('applicationsListView', {
7367 templateUrl: 'components/views/applications-list-view/applications-list-view.html',
7368 controller: ApplicationsListViewController
7369 });
7370
7371 ApplicationsListViewController.$inject = ['$state', 'applicationsResource'];
7372
7373 function ApplicationsListViewController($state, applicationsResource) {
7374
7375 var vm = this;
7376 vm.$state = $state;
7377 vm.loading = {applications: true};
7378 vm.applications = applicationsResource.query(null, function(){
7379 vm.loading.applications = false;
7380 });
7381 }
7382
7383 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7384 // #
7385 // # This program is free software: you can redistribute it and/or modify
7386 // # it under the terms of the GNU Affero General Public License, version 3
7387 // # (only), as published by the Free Software Foundation.
7388 // #
7389 // # This program is distributed in the hope that it will be useful,
7390 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7391 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7392 // # GNU General Public License for more details.
7393 // #
7394 // # You should have received a copy of the GNU Affero General Public License
7395 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7396 // #
7397 // # This program is dual-licensed. If you wish to learn more about the
7398 // # AppEnlight Enterprise Edition, including its added features, Support
7399 // # services, and proprietary license terms, please see
7400 // # https://rhodecode.com/licenses/
7401
7402 angular.module('appenlight.components.applicationsPurgeLogsView', [])
7403 .component('applicationsPurgeLogsView', {
7404 templateUrl: 'components/views/applications-purge-logs-view/applications-purge-logs-view.html',
7405 controller: applicationsPurgeLogsViewController
7406 });
7407
7408 applicationsPurgeLogsViewController.$inject = ['$state' ,'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
7409
7410 function applicationsPurgeLogsViewController($state, applicationsResource, sectionViewResource, logsNoIdResource) {
7411
7412 var vm = this;
7413 vm.$state = $state;
7414 vm.loading = {applications: true};
7415
7416 vm.namespace = null;
7417 vm.selectedResource = null;
7418 vm.commonNamespaces = [];
7419
7420 vm.applications = applicationsResource.query({'type':'update_reports'}, function () {
7421 vm.loading.applications = false;
7422 vm.selectedResource = vm.applications[0].resource_id;
7423 vm.getCommonKeys();
7424 });
7425
7426 /**
7427 * Fetches most commonly used tags in logs
7428 */
7429 vm.getCommonKeys = function () {
7430 sectionViewResource.get({
7431 section: 'logs_section',
7432 view: 'common_tags',
7433 resource: vm.selectedResource
7434 }, function (data) {
7435 vm.commonNamespaces = data['namespaces']
7436 });
7437 };
7438
7439 vm.purgeLogs = function () {
7440 vm.loading.applications = true;
7441 logsNoIdResource.delete({resource:vm.selectedResource,
7442 namespace: vm.namespace}, function(){
7443 vm.loading.applications = false;
7444 });
7445 }
7446 }
7447
7448 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7449 // #
7450 // # This program is free software: you can redistribute it and/or modify
7451 // # it under the terms of the GNU Affero General Public License, version 3
7452 // # (only), as published by the Free Software Foundation.
7453 // #
7454 // # This program is distributed in the hope that it will be useful,
7455 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7456 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7457 // # GNU General Public License for more details.
7458 // #
7459 // # You should have received a copy of the GNU Affero General Public License
7460 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7461 // #
7462 // # This program is dual-licensed. If you wish to learn more about the
7463 // # AppEnlight Enterprise Edition, including its added features, Support
7464 // # services, and proprietary license terms, please see
7465 // # https://rhodecode.com/licenses/
7466
7467 angular.module('appenlight.components.applicationsUpdateView', [])
7468 .component('applicationsUpdateView', {
7469 templateUrl: 'components/views/applications-update-view/applications-update-view.html',
7470 controller: applicationsUpdateViewController
7471 });
7472
7473 applicationsUpdateViewController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder'];
7474
7475 function applicationsUpdateViewController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder) {
7476 'use strict';
7477
7478 var vm = this;
7479 vm.$state = $state;
7480 vm.loading = {application: false};
7481
7482 vm.groupingOptions = [
7483 ['url_type', 'Error Type + location'],
7484 ['url_traceback', 'Traceback + location'],
7485 ['traceback_server', 'Traceback + Server'],
7486 ];
7487 var resourceId = $state.params.resourceId;
7488 var options = {};
7489 vm.momentJs = moment;
7490 vm.formTransferModel = {password:''};
7491
7492 // set initial data
7493
7494 if (resourceId === 'new') {
7495 vm.resource = {
7496 resource_id: null,
7497 slow_report_threshold: 10,
7498 error_report_threshold: 10,
7499 allow_permanent_storage: true,
7500 default_grouping: vm.groupingOptions[1][0]
7501 };
7502 }
7503 else {
7504 vm.loading.application = true;
7505 vm.resource = applicationsResource.get({
7506 'resourceId': resourceId
7507 }, function (data) {
7508 vm.loading.application = false;
7509 });
7510 }
7511
7512
7513 vm.updateBasicForm = function () {
7514 vm.loading.application = true;
7515 if (vm.resource.resource_id === null) {
7516 applicationsNoIdResource.save(null, vm.resource, function (data) {
7517 stateHolder.AeUser.addApplication(data);
7518 $state.go('applications.update', {resourceId: data.resource_id});
7519 setServerValidation(vm.BasicForm);
7520 }, function (response) {
7521 if (response.status == 422) {
7522 setServerValidation(vm.BasicForm, response.data);
7523 }
7524 vm.loading.application = false;
7525
7526 });
7242 }
7527 }
7243 else{
7528 else {
7244 console.log('other');
7529 applicationsResource.update({resourceId: vm.resource.resource_id},
7530 vm.resource, function (data) {
7531 vm.resource = data;
7532 vm.loading.application = false;
7533 setServerValidation(vm.BasicForm);
7534 }, function (response) {
7535 if (response.status == 422) {
7536 setServerValidation(vm.BasicForm, response.data);
7537 }
7538 vm.loading.application = false;
7539 });
7245 }
7540 }
7246 }
7541 };
7247 }
7248
7542
7249 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7543 vm.addRule = function () {
7250 // #
7544
7251 // # This program is free software: you can redistribute it and/or modify
7545 applicationsPropertyResource.save({
7252 // # it under the terms of the GNU Affero General Public License, version 3
7546 resourceId: vm.resource.resource_id,
7253 // # (only), as published by the Free Software Foundation.
7547 key: 'postprocessing_rules'
7254 // #
7548 }, null,
7255 // # This program is distributed in the hope that it will be useful,
7549 function (data) {
7256 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7550 vm.resource.postprocessing_rules.push(data);
7257 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7551 }
7258 // # GNU General Public License for more details.
7552 );
7259 // #
7553 };
7260 // # You should have received a copy of the GNU Affero General Public License
7261 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7262 // #
7263 // # This program is dual-licensed. If you wish to learn more about the
7264 // # AppEnlight Enterprise Edition, including its added features, Support
7265 // # services, and proprietary license terms, please see
7266 // # https://rhodecode.com/licenses/
7267
7554
7268 angular.module('appenlight.components.channelstream', [])
7555 vm.regenerateAPIKeys = function(){
7269 .component('channelstream', {
7556 vm.loading.application = true;
7270 controller: ChannelstreamController,
7557 applicationsPropertyResource.save({
7271 bindings: {
7558 resourceId: vm.resource.resource_id,
7272 config: '='
7559 key: 'api_key'
7273 }
7560 }, {password: vm.regenerateAPIKeysPassword},
7274 });
7561 function (data) {
7562 vm.resource = data;
7563 vm.loading.application = false;
7564 vm.regenerateAPIKeysPassword = '';
7565 setServerValidation(vm.regenerateAPIKeysForm);
7566 },
7567 function (response) {
7568 if (response.status == 422) {
7569 setServerValidation(vm.regenerateAPIKeysForm, response.data);
7570
7571 }
7572 vm.loading.application = false;
7573 }
7574 )
7575 };
7275
7576
7276 ChannelstreamController.$inject = ['$rootScope', 'stateHolder', 'userSelfPropertyResource'];
7577 vm.deleteApplication = function(){
7578 vm.loading.application = true;
7579 applicationsPropertyResource.update({
7580 resourceId: vm.resource.resource_id,
7581 key: 'delete_resource'
7582 }, vm.formDeleteModel,
7583 function (data) {
7584 stateHolder.AeUser.removeApplicationById(vm.resource.resource_id);
7585 $state.go('applications.list');
7586 },
7587 function (response) {
7588 if (response.status == 422) {
7589 setServerValidation(vm.formDelete, response.data);
7590
7591 }
7592 vm.loading.application = false;
7593 }
7594 );
7595 };
7277
7596
7278 function ChannelstreamController($rootScope, stateHolder, userSelfPropertyResource){
7597 vm.transferApplication = function(){
7279 if (stateHolder.AeUser.id === null){
7598 vm.loading.application = true;
7280 return
7599 applicationsPropertyResource.update({
7600 resourceId: vm.resource.resource_id,
7601 key: 'owner'
7602 }, vm.formTransferModel,
7603 function (data) {
7604 $state.go('applications.list');
7605 },
7606 function (response) {
7607 if (response.status == 422) {
7608 setServerValidation(vm.formTransfer, response.data);
7609
7610 }
7611 vm.loading.application = false;
7612 }
7613 )
7281 }
7614 }
7282 userSelfPropertyResource.get({key: 'websocket'}, function (data) {
7283 stateHolder.websocket = new ReconnectingWebSocket(this.config.ws_url + '/ws?conn_id=' + data.conn_id);
7284 stateHolder.websocket.onopen = function (event) {
7285 console.log('open');
7286 };
7287 stateHolder.websocket.onmessage = function (event) {
7288 var data = JSON.parse(event.data);
7289 $rootScope.$apply(function (scope) {
7290 _.each(data, function (message) {
7291 console.log('channelstream-message', message);
7292 if(typeof message.message.topic !== 'undefined'){
7293 $rootScope.$emit(
7294 'channelstream-message.'+message.message.topic, message);
7295 }
7296 else{
7297 $rootScope.$emit('channelstream-message', message);
7298 }
7299 });
7300 });
7301 };
7302 stateHolder.websocket.onclose = function (event) {
7303 console.log('closed');
7304 };
7305
7615
7306 stateHolder.websocket.onerror = function (event) {
7307 console.log('error');
7308 };
7309 }.bind(this));
7310 }
7616 }
7311
7617
7312 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7618 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
@@ -7350,7 +7656,7 b' function EventBrowserController(eventsNoIdResource, eventsResource) {'
7350
7656
7351
7657
7352 vm.closeEvent = function (event) {
7658 vm.closeEvent = function (event) {
7353 console.log('closeEvent');
7659
7354 eventsResource.update({eventId: event.id}, {status: 0}, function (data) {
7660 eventsResource.update({eventId: event.id}, {status: 0}, function (data) {
7355 event.status = 0;
7661 event.status = 0;
7356 });
7662 });
@@ -7772,7 +8078,7 b' function IndexDashboardController($rootScope, $scope, $location, $cookies, $inte'
7772
8078
7773 if (!vm.resource){
8079 if (!vm.resource){
7774 var cookieResource = $cookies.getObject('resource');
8080 var cookieResource = $cookies.getObject('resource');
7775 console.log('cookieResource', cookieResource);
8081
7776
8082
7777 if (cookieResource) {
8083 if (cookieResource) {
7778 vm.resource = cookieResource;
8084 vm.resource = cookieResource;
@@ -8015,15 +8321,150 b' function IndexDashboardController($rootScope, $scope, $location, $cookies, $inte'
8015 );
8321 );
8016 };
8322 };
8017
8323
8018 $scope.$on('$destroy',function(){
8324 $scope.$on('$destroy',function(){
8019 $interval.cancel(vm.intervalId);
8325 $interval.cancel(vm.intervalId);
8326 });
8327
8328 if (stateHolder.AeUser.applications.length){
8329 vm.show_dashboard = true;
8330 vm.determineStartState();
8331 }
8332 }
8333
8334 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8335 // #
8336 // # This program is free software: you can redistribute it and/or modify
8337 // # it under the terms of the GNU Affero General Public License, version 3
8338 // # (only), as published by the Free Software Foundation.
8339 // #
8340 // # This program is distributed in the hope that it will be useful,
8341 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8342 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8343 // # GNU General Public License for more details.
8344 // #
8345 // # You should have received a copy of the GNU Affero General Public License
8346 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8347 // #
8348 // # This program is dual-licensed. If you wish to learn more about the
8349 // # AppEnlight Enterprise Edition, including its added features, Support
8350 // # services, and proprietary license terms, please see
8351 // # https://rhodecode.com/licenses/
8352
8353
8354 ApplicationsIntegrationsEditViewController.$inject = ['$state', 'integrationResource'];
8355
8356 function ApplicationsIntegrationsEditViewController($state, integrationResource) {
8357
8358 var vm = this;
8359 vm.$state = $state;
8360 vm.loading = {integration: true};
8361 vm.config = integrationResource.get(
8362 {
8363 integration: $state.params.integration,
8364 action: 'setup',
8365 resourceId: $state.params.resourceId
8366 }, function (data) {
8367 vm.loading.integration = false;
8368 });
8369
8370 vm.configureIntegration = function () {
8371 console.info('configureIntegration');
8372 vm.loading.integration = true;
8373 integrationResource.save(
8374 {
8375 integration: $state.params.integration,
8376 action: 'setup',
8377 resourceId: $state.params.resourceId
8378 }, vm.config, function (data) {
8379 vm.loading.integration = false;
8380 setServerValidation(vm.integrationForm);
8381 }, function (response) {
8382 if (response.status == 422) {
8383 setServerValidation(vm.integrationForm, response.data);
8384 }
8385 vm.loading.integration = false;
8386 });
8387 };
8388
8389 vm.removeIntegration = function () {
8390 console.info('removeIntegration');
8391 integrationResource.remove({
8392 integration: $state.params.integration,
8393 resourceId: $state.params.resourceId,
8394 action: 'delete'
8395 },
8396 function () {
8397 $state.go('applications.integrations',
8398 {resourceId: $state.params.resourceId});
8399 }
8400 );
8401 }
8402
8403 vm.testIntegration = function (to_test) {
8404 console.info('testIntegration', to_test);
8405 vm.loading.integration = true;
8406 integrationResource.save(
8407 {
8408 integration: $state.params.integration,
8409 action: 'test_' + to_test,
8410 resourceId: $state.params.resourceId
8411 }, vm.config, function (data) {
8412 vm.loading.integration = false;
8413 }, function (response) {
8414 vm.loading.integration = false;
8415 });
8416 }
8417
8418
8419 }
8420
8421 ;angular.module('appenlight.components.bitbucketIntegrationConfigView', [])
8422 .component('bitbucketIntegrationConfigView', {
8423 templateUrl: 'components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
8424 controller: ApplicationsIntegrationsEditViewController
8425 });
8426
8427 ;angular.module('appenlight.components.campfireIntegrationConfigView', [])
8428 .component('campfireIntegrationConfigView', {
8429 templateUrl: 'components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
8430 controller: ApplicationsIntegrationsEditViewController
8020 });
8431 });
8021
8432
8022 if (stateHolder.AeUser.applications.length){
8433 ;angular.module('appenlight.components.flowdockIntegrationConfigView', [])
8023 vm.show_dashboard = true;
8434 .component('flowdockIntegrationConfigView', {
8024 vm.determineStartState();
8435 templateUrl: 'components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
8025 }
8436 controller: ApplicationsIntegrationsEditViewController
8026 }
8437 });
8438
8439 ;angular.module('appenlight.components.githubIntegrationConfigView', [])
8440 .component('githubIntegrationConfigView', {
8441 templateUrl: 'components/views/integrations/github-integration-config-view/github-integration-config-view.html',
8442 controller: ApplicationsIntegrationsEditViewController
8443 });
8444
8445 ;angular.module('appenlight.components.hipchatIntegrationConfigView', [])
8446 .component('hipchatIntegrationConfigView', {
8447 templateUrl: 'components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
8448 controller: ApplicationsIntegrationsEditViewController
8449 });
8450
8451 ;angular.module('appenlight.components.jiraIntegrationConfigView', [])
8452 .component('jiraIntegrationConfigView', {
8453 templateUrl: 'components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
8454 controller: ApplicationsIntegrationsEditViewController
8455 });
8456
8457 ;angular.module('appenlight.components.slackIntegrationConfigView', [])
8458 .component('slackIntegrationConfigView', {
8459 templateUrl: 'components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
8460 controller: ApplicationsIntegrationsEditViewController
8461 });
8462
8463 ;angular.module('appenlight.components.webhooksIntegrationConfigView', [])
8464 .component('webhooksIntegrationConfigView', {
8465 templateUrl: 'components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
8466 controller: ApplicationsIntegrationsEditViewController
8467 });
8027
8468
8028 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8469 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8029 // #
8470 // #
@@ -8289,7 +8730,7 b' function LogsBrowserController($location, stateHolder, typeAheadTagHelper, logsN'
8289 searchParams['view'] = 'fetch_series';
8730 searchParams['view'] = 'fetch_series';
8290 vm.isLoading.series = true;
8731 vm.isLoading.series = true;
8291 sectionViewResource.query(searchParams, function (data) {
8732 sectionViewResource.query(searchParams, function (data) {
8292 console.log('show node here');
8733
8293 vm.logEventsChartData = {
8734 vm.logEventsChartData = {
8294 json: data,
8735 json: data,
8295 xFormat: '%Y-%m-%dT%H:%M:%S',
8736 xFormat: '%Y-%m-%dT%H:%M:%S',
@@ -8384,7 +8825,7 b" angular.module('appenlight.components.userAlertChannelsEmailNewView', [])"
8384 AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
8825 AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
8385
8826
8386 function AlertChannelsEmailController($state, userSelfPropertyResource) {
8827 function AlertChannelsEmailController($state, userSelfPropertyResource) {
8387 console.debug('AlertChannelsEmailController');
8828
8388 var vm = this;
8829 var vm = this;
8389 vm.$state = $state;
8830 vm.$state = $state;
8390 vm.loading = {email: false};
8831 vm.loading = {email: false};
@@ -8392,7 +8833,7 b' function AlertChannelsEmailController($state, userSelfPropertyResource) {'
8392
8833
8393 vm.createChannel = function () {
8834 vm.createChannel = function () {
8394 vm.loading.email = true;
8835 vm.loading.email = true;
8395 console.log('createChannel');
8836
8396 userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
8837 userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
8397 //vm.loading.email = false;
8838 //vm.loading.email = false;
8398 //setServerValidation(vm.channelForm);
8839 //setServerValidation(vm.channelForm);
@@ -8435,7 +8876,7 b" angular.module('appenlight.components.userAlertChannelsListView', [])"
8435 userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
8876 userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
8436
8877
8437 function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
8878 function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
8438 console.debug('AlertChannelsController');
8879
8439 var vm = this;
8880 var vm = this;
8440 vm.$state = $state;
8881 vm.$state = $state;
8441 vm.loading = {channels: true, applications: true, actions:true};
8882 vm.loading = {channels: true, applications: true, actions:true};
@@ -8502,12 +8943,12 b' function userAlertChannelsListViewController($state, userSelfPropertyResource, a'
8502 };
8943 };
8503
8944
8504 vm.addAction = function (channel) {
8945 vm.addAction = function (channel) {
8505 console.log('test');
8946
8506 userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
8947 userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
8507 vm.alertActions.push(data);
8948 vm.alertActions.push(data);
8508 }, function (response) {
8949 }, function (response) {
8509 if (response.status == 422) {
8950 if (response.status == 422) {
8510 console.log('scope', response);
8951
8511 }
8952 }
8512 });
8953 });
8513 };
8954 };
@@ -8528,7 +8969,7 b' function userAlertChannelsListViewController($state, userSelfPropertyResource, a'
8528 };
8969 };
8529
8970
8530 vm.removeChannel = function (channel) {
8971 vm.removeChannel = function (channel) {
8531 console.log(channel);
8972
8532 userSelfPropertyResource.delete({
8973 userSelfPropertyResource.delete({
8533 key: 'alert_channels',
8974 key: 'alert_channels',
8534 channel_name: channel.channel_name,
8975 channel_name: channel.channel_name,
@@ -8571,7 +9012,7 b" angular.module('appenlight.components.userAuthTokensView', [])"
8571 userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
9012 userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
8572
9013
8573 function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
9014 function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
8574 console.debug('userAuthTokensViewController');
9015
8575 var vm = this;
9016 var vm = this;
8576 vm.$state = $state;
9017 vm.$state = $state;
8577 vm.loading = {tokens: true};
9018 vm.loading = {tokens: true};
@@ -8642,7 +9083,7 b" angular.module('appenlight.components.userIdentitiesView', [])"
8642 UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
9083 UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
8643
9084
8644 function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
9085 function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
8645 console.debug('UserIdentitiesController');
9086
8646 var vm = this;
9087 var vm = this;
8647 vm.$state = $state;
9088 vm.$state = $state;
8648 vm.AeConfig = AeConfig;
9089 vm.AeConfig = AeConfig;
@@ -8652,11 +9093,11 b' function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {'
8652 {key: 'external_identities'},
9093 {key: 'external_identities'},
8653 function (data) {
9094 function (data) {
8654 vm.loading.identities = false;
9095 vm.loading.identities = false;
8655 console.log(vm.identities);
9096
8656 });
9097 });
8657
9098
8658 vm.removeProvider = function (provider) {
9099 vm.removeProvider = function (provider) {
8659 console.log('provider', provider);
9100
8660 userSelfPropertyResource.delete(
9101 userSelfPropertyResource.delete(
8661 {
9102 {
8662 key: 'external_identities',
9103 key: 'external_identities',
@@ -8672,243 +9113,7 b' function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {'
8672
9113
8673 });
9114 });
8674 }
9115 }
8675 }
9116 }
8676
8677 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8678 // #
8679 // # This program is free software: you can redistribute it and/or modify
8680 // # it under the terms of the GNU Affero General Public License, version 3
8681 // # (only), as published by the Free Software Foundation.
8682 // #
8683 // # This program is distributed in the hope that it will be useful,
8684 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8685 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8686 // # GNU General Public License for more details.
8687 // #
8688 // # You should have received a copy of the GNU Affero General Public License
8689 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8690 // #
8691 // # This program is dual-licensed. If you wish to learn more about the
8692 // # AppEnlight Enterprise Edition, including its added features, Support
8693 // # services, and proprietary license terms, please see
8694 // # https://rhodecode.com/licenses/
8695
8696 angular.module('appenlight.components.userPasswordView', [])
8697 .component('userPasswordView', {
8698 templateUrl: 'components/views/user-password-view/user-password-view.html',
8699 controller: UserPasswordViewController
8700 });
8701
8702 UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
8703
8704 function UserPasswordViewController($state, userSelfPropertyResource) {
8705 console.debug('UserPasswordViewController');
8706 var vm = this;
8707 vm.$state = $state;
8708 vm.loading = {password: false};
8709 vm.form = {};
8710
8711 vm.updatePassword = function () {
8712 vm.loading.password = true;
8713 console.log('updatePassword');
8714 userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
8715 vm.loading.password = false;
8716 vm.form = {};
8717 setServerValidation(vm.passwordForm);
8718 }, function (response) {
8719 if (response.status == 422) {
8720 console.log('vm', vm);
8721 setServerValidation(vm.passwordForm, response.data);
8722 console.log(response.data);
8723 }
8724 vm.loading.password = false;
8725 });
8726 }
8727 }
8728
8729 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8730 // #
8731 // # This program is free software: you can redistribute it and/or modify
8732 // # it under the terms of the GNU Affero General Public License, version 3
8733 // # (only), as published by the Free Software Foundation.
8734 // #
8735 // # This program is distributed in the hope that it will be useful,
8736 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8737 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8738 // # GNU General Public License for more details.
8739 // #
8740 // # You should have received a copy of the GNU Affero General Public License
8741 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8742 // #
8743 // # This program is dual-licensed. If you wish to learn more about the
8744 // # AppEnlight Enterprise Edition, including its added features, Support
8745 // # services, and proprietary license terms, please see
8746 // # https://rhodecode.com/licenses/
8747
8748 angular.module('appenlight.components.userProfileView', [])
8749 .component('userProfileView', {
8750 templateUrl: 'components/views/user-profile-view/user-profile-view.html',
8751 controller: UserProfileViewController
8752 });
8753
8754 UserProfileViewController.$inject = ['$state', 'userSelfResource'];
8755
8756 function UserProfileViewController($state, userSelfResource) {
8757 console.debug('UserProfileViewController');
8758 var vm = this;
8759 vm.$state = $state;
8760 vm.loading = {profile: true};
8761
8762 vm.user = userSelfResource.get(null, function (data) {
8763 vm.loading.profile = false;
8764 console.log('loaded profile');
8765 });
8766
8767 vm.updateProfile = function () {
8768 vm.loading.profile = true;
8769
8770 console.log('updateProfile');
8771 vm.user.$update(null, function () {
8772 vm.loading.profile = false;
8773 setServerValidation(vm.profileForm);
8774 }, function (response) {
8775 if (response.status == 422) {
8776 setServerValidation(vm.profileForm, response.data);
8777 }
8778 vm.loading.profile = false;
8779 });
8780 }
8781 }
8782
8783 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8784 // #
8785 // # This program is free software: you can redistribute it and/or modify
8786 // # it under the terms of the GNU Affero General Public License, version 3
8787 // # (only), as published by the Free Software Foundation.
8788 // #
8789 // # This program is distributed in the hope that it will be useful,
8790 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8791 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8792 // # GNU General Public License for more details.
8793 // #
8794 // # You should have received a copy of the GNU Affero General Public License
8795 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8796 // #
8797 // # This program is dual-licensed. If you wish to learn more about the
8798 // # AppEnlight Enterprise Edition, including its added features, Support
8799 // # services, and proprietary license terms, please see
8800 // # https://rhodecode.com/licenses/
8801
8802 var aeconfig = angular.module('appenlight.config', []);
8803 aeconfig.factory('AeConfig', function () {
8804 var obj = {};
8805 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
8806 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
8807 obj.plugins = decodeEncodedJSON(window.AE.plugins);
8808 obj.topNav = decodeEncodedJSON(window.AE.topNav);
8809 obj.ws_url = window.AE.ws_url;
8810 obj.urls = window.AE.urls;
8811 // set keys on values because we wont be able to retrieve them everywhere
8812 for (var key in obj.timeOptions) {
8813 obj.timeOptions[key]['key'] = key;
8814 }
8815 console.info('config', obj);
8816 return obj;
8817 });
8818
8819 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8820 // #
8821 // # This program is free software: you can redistribute it and/or modify
8822 // # it under the terms of the GNU Affero General Public License, version 3
8823 // # (only), as published by the Free Software Foundation.
8824 // #
8825 // # This program is distributed in the hope that it will be useful,
8826 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8827 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8828 // # GNU General Public License for more details.
8829 // #
8830 // # You should have received a copy of the GNU Affero General Public License
8831 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8832 // #
8833 // # This program is dual-licensed. If you wish to learn more about the
8834 // # AppEnlight Enterprise Edition, including its added features, Support
8835 // # services, and proprietary license terms, please see
8836 // # https://rhodecode.com/licenses/
8837
8838 angular.module('appenlight.controllers').controller('AdminApplicationsListController', AdminApplicationsListController);
8839
8840 AdminApplicationsListController.$inject = ['applicationsResource'];
8841
8842 function AdminApplicationsListController(applicationsResource) {
8843 console.debug('AdminApplicationsListController');
8844 var vm = this;
8845 vm.loading = {applications: true};
8846
8847 vm.applications = applicationsResource.query({
8848 root_list: true,
8849 resource_type: 'application'
8850 }, function (data) {
8851 vm.loading = {applications: false};
8852 });
8853 };
8854
8855 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8856 // #
8857 // # This program is free software: you can redistribute it and/or modify
8858 // # it under the terms of the GNU Affero General Public License, version 3
8859 // # (only), as published by the Free Software Foundation.
8860 // #
8861 // # This program is distributed in the hope that it will be useful,
8862 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8863 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8864 // # GNU General Public License for more details.
8865 // #
8866 // # You should have received a copy of the GNU Affero General Public License
8867 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8868 // #
8869 // # This program is dual-licensed. If you wish to learn more about the
8870 // # AppEnlight Enterprise Edition, including its added features, Support
8871 // # services, and proprietary license terms, please see
8872 // # https://rhodecode.com/licenses/
8873
8874 angular.module('appenlight.controllers').controller('ConfigsListController', ConfigsListController);
8875
8876 ConfigsListController.$inject = ['configsResource', 'configsNoIdResource'];
8877
8878 function ConfigsListController(configsResource, configsNoIdResource) {
8879 var vm = this;
8880 vm.loading = {config: true};
8881
8882 var filters = [
8883 'template_footer_html:global',
8884 'list_groups_to_non_admins:global',
8885 'per_application_reports_rate_limit:global',
8886 'per_application_logs_rate_limit:global',
8887 'per_application_metrics_rate_limit:global',
8888 ];
8889
8890 vm.configs = {};
8891
8892 vm.configList = configsResource.query({filter: filters},
8893 function (data) {
8894 vm.loading = {config: false};
8895 _.each(data, function (item) {
8896 if (vm.configs[item.section] === undefined) {
8897 vm.configs[item.section] = {};
8898 }
8899 vm.configs[item.section][item.key] = item;
8900 });
8901 });
8902
8903 vm.save = function () {
8904 vm.loading.config = true;
8905 _.each(vm.configList, function (item) {
8906 item.$save();
8907 });
8908 vm.loading.config = false;
8909 };
8910
8911 };
8912
9117
8913 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9118 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8914 // #
9119 // #
@@ -8929,129 +9134,38 b' function ConfigsListController(configsResource, configsNoIdResource) {'
8929 // # services, and proprietary license terms, please see
9134 // # services, and proprietary license terms, please see
8930 // # https://rhodecode.com/licenses/
9135 // # https://rhodecode.com/licenses/
8931
9136
8932 angular.module('appenlight.controllers').controller('AdminGroupsCreateController', AdminGroupsCreateController);
9137 angular.module('appenlight.components.userPasswordView', [])
9138 .component('userPasswordView', {
9139 templateUrl: 'components/views/user-password-view/user-password-view.html',
9140 controller: UserPasswordViewController
9141 });
8933
9142
8934 AdminGroupsCreateController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource', 'AeConfig'];
9143 UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
8935
9144
8936 function AdminGroupsCreateController($state, groupsResource, groupsPropertyResource, sectionViewResource, AeConfig) {
9145 function UserPasswordViewController($state, userSelfPropertyResource) {
8937 console.debug('AdminGroupsCreateController');
9146
8938 var vm = this;
9147 var vm = this;
8939 vm.loading = {
9148 vm.$state = $state;
8940 group: false,
9149 vm.loading = {password: false};
8941 resource_permissions: false,
9150 vm.form = {};
8942 users: false
8943 };
8944
8945 vm.form = {
8946 autocompleteUser: '',
8947 }
8948
8949
9151
8950 if (typeof $state.params.groupId !== 'undefined') {
9152 vm.updatePassword = function () {
8951 vm.loading.group = true;
9153 vm.loading.password = true;
8952 var groupId = $state.params.groupId;
9154
8953 vm.group = groupsResource.get({groupId: groupId}, function (data) {
9155 userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
8954 vm.loading.group = false;
9156 vm.loading.password = false;
9157 vm.form = {};
9158 setServerValidation(vm.passwordForm);
9159 }, function (response) {
9160 if (response.status == 422) {
9161
9162 setServerValidation(vm.passwordForm, response.data);
9163
9164 }
9165 vm.loading.password = false;
8955 });
9166 });
8956
8957 vm.resource_permissions = groupsPropertyResource.query(
8958 {groupId: groupId, key: 'resource_permissions'}, function (data) {
8959 vm.loading.resource_permissions = false;
8960 var tmpObj = {
8961 'group': {
8962 'application': {},
8963 'dashboard': {}
8964 }
8965 };
8966 _.each(data, function (item) {
8967 console.log(item);
8968 var section = tmpObj[item.type][item.resource_type];
8969 if (typeof section[item.resource_id] == 'undefined') {
8970 section[item.resource_id] = {
8971 self: item,
8972 permissions: []
8973 }
8974 }
8975 section[item.resource_id].permissions.push(item.perm_name);
8976
8977 });
8978 console.log(tmpObj)
8979 vm.resourcePermissions = tmpObj;
8980 });
8981
8982 vm.users = groupsPropertyResource.query(
8983 {groupId: groupId, key: 'users'}, function (data) {
8984 vm.loading.users = false;
8985 }, function () {
8986 vm.loading.users = false;
8987 });
8988
8989 }
8990 else {
8991 var groupId = null;
8992 }
8993
8994 var formResponse = function (response) {
8995 if (response.status === 422) {
8996 setServerValidation(vm.groupForm, response.data);
8997 }
8998 vm.loading.group = false;
8999 };
9000
9001 vm.createGroup = function () {
9002 vm.loading.group = true;
9003 if (groupId) {
9004 groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
9005 setServerValidation(vm.groupForm);
9006 vm.loading.group = false;
9007 }, formResponse);
9008 }
9009 else {
9010 groupsResource.save(vm.group, function (data) {
9011 $state.go('admin.group.update', {groupId: data.id});
9012 }, formResponse);
9013 }
9014 };
9015
9016 vm.removeUser = function (user) {
9017 groupsPropertyResource.delete(
9018 {groupId: groupId, key: 'users', user_name: user.user_name},
9019 function (data) {
9020 vm.loading.users = false;
9021 vm.users = _.filter(vm.users, function (item) {
9022 return item != user;
9023 });
9024 }, function () {
9025 vm.loading.users = false;
9026 });
9027 };
9028
9029 vm.addUser = function () {
9030 groupsPropertyResource.save(
9031 {groupId: groupId, key: 'users'},
9032 {user_name: vm.form.autocompleteUser},
9033 function (data) {
9034 vm.loading.users = false;
9035 vm.users.push(data);
9036 vm.form.autocompleteUser = '';
9037 }, function () {
9038 vm.loading.users = false;
9039 });
9040 }
9041
9042 vm.searchUsers = function (searchPhrase) {
9043 console.log(searchPhrase);
9044 return sectionViewResource.query({
9045 section: 'users_section',
9046 view: 'search_users',
9047 'user_name': searchPhrase
9048 }).$promise.then(function (data) {
9049 return _.map(data, function (item) {
9050 return item.user;
9051 });
9052 });
9053 }
9167 }
9054 };
9168 }
9055
9169
9056 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9170 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9057 // #
9171 // #
@@ -9072,40 +9186,40 b' function AdminGroupsCreateController($state, groupsResource, groupsPropertyResou'
9072 // # services, and proprietary license terms, please see
9186 // # services, and proprietary license terms, please see
9073 // # https://rhodecode.com/licenses/
9187 // # https://rhodecode.com/licenses/
9074
9188
9075 angular.module('appenlight.controllers').controller('AdminGroupsController', AdminGroupsController);
9189 angular.module('appenlight.components.userProfileView', [])
9190 .component('userProfileView', {
9191 templateUrl: 'components/views/user-profile-view/user-profile-view.html',
9192 controller: UserProfileViewController
9193 });
9076
9194
9077 AdminGroupsController.$inject = ['groupsResource'];
9195 UserProfileViewController.$inject = ['$state', 'userSelfResource'];
9078
9196
9079 function AdminGroupsController(groupsResource) {
9197 function UserProfileViewController($state, userSelfResource) {
9080 console.debug('AdminGroupsController');
9198
9081 var vm = this;
9199 var vm = this;
9082 vm.loading = {groups: true};
9200 vm.$state = $state;
9201 vm.loading = {profile: true};
9083
9202
9084 vm.groups = groupsResource.query({}, function (data) {
9203 vm.user = userSelfResource.get(null, function (data) {
9085 vm.loading = {groups: false};
9204 vm.loading.profile = false;
9086 vm.activeUsers = _.reduce(vm.groups, function(memo, val){
9205
9087 if (val.status == 1){
9088 return memo + 1;
9089 }
9090 return memo;
9091 }, 0);
9092 console.log(vm.groups);
9093 });
9206 });
9094
9207
9208 vm.updateProfile = function () {
9209 vm.loading.profile = true;
9095
9210
9096 vm.removeGroup = function (group) {
9211
9097 groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
9212 vm.user.$update(null, function () {
9098 console.log('x',data, responseHeaders());
9213 vm.loading.profile = false;
9099 if (data) {
9214 setServerValidation(vm.profileForm);
9100 var index = vm.groups.indexOf(group);
9215 }, function (response) {
9101 if (index !== -1) {
9216 if (response.status == 422) {
9102 vm.groups.splice(index, 1);
9217 setServerValidation(vm.profileForm, response.data);
9103 vm.activeGroups -= 1;
9104 }
9105 }
9218 }
9219 vm.loading.profile = false;
9106 });
9220 });
9107 }
9221 }
9108 };
9222 }
9109
9223
9110 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9224 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9111 // #
9225 // #
@@ -9126,111 +9240,58 b' function AdminGroupsController(groupsResource) {'
9126 // # services, and proprietary license terms, please see
9240 // # services, and proprietary license terms, please see
9127 // # https://rhodecode.com/licenses/
9241 // # https://rhodecode.com/licenses/
9128
9242
9129 angular.module('appenlight.controllers').controller('AdminPartitionsController', AdminPartitionsController);
9243 var aeconfig = angular.module('appenlight.config', []);
9130
9244 aeconfig.factory('AeConfig', function () {
9131 AdminPartitionsController.$inject = ['sectionViewResource'];
9245 var obj = {};
9132
9246 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
9133 function AdminPartitionsController(sectionViewResource) {
9247 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
9134 var vm = this;
9248 obj.plugins = decodeEncodedJSON(window.AE.plugins);
9135 vm.permanentPartitions = [];
9249 obj.topNav = decodeEncodedJSON(window.AE.topNav);
9136 vm.dailyPartitions = [];
9250 obj.ws_url = window.AE.ws_url;
9137 vm.loading = {partitions: true};
9251 obj.urls = window.AE.urls;
9138 vm.dailyChecked = false;
9252 // set keys on values because we wont be able to retrieve them everywhere
9139 vm.permChecked = false;
9253 for (var key in obj.timeOptions) {
9140 vm.dailyConfirm = '';
9254 obj.timeOptions[key]['key'] = key;
9141 vm.permConfirm = '';
9255 }
9142
9256 console.info('config', obj);
9143
9257 return obj;
9144 vm.loadPartitions = function (data) {
9258 });
9145 var permanentPartitions = vm.transformPartitionList(
9146 data.permanent_partitions);
9147 var dailyPartitions = vm.transformPartitionList(
9148 data.daily_partitions);
9149 vm.permanentPartitions = permanentPartitions;
9150 vm.dailyPartitions = dailyPartitions;
9151 vm.loading = {partitions: false};
9152 };
9153
9154 vm.setCheckedList = function (scope) {
9155 var toTest = null;
9156 if (scope === 'dailyPartitions'){
9157 toTest = 'dailyChecked';
9158 }
9159 else{
9160 toTest = 'permChecked';
9161 }
9162
9163 if (vm[toTest]) {
9164 var val = true;
9165 }
9166 else {
9167 var val = false;
9168 }
9169 console.log('scope', scope);
9170 _.each(vm[scope], function (item) {
9171 _.each(item[1].pg, function (index) {
9172 index.checked = val;
9173 });
9174 _.each(item[1].elasticsearch, function (index) {
9175 index.checked = val;
9176 });
9177 });
9178 }
9179
9180
9181 vm.transformPartitionList = function (inputList) {
9182 var outputList = [];
9183
9184 _.each(inputList, function (item) {
9185 var time = [item[0], {
9186 elasticsearch: [],
9187 pg: []
9188 }]
9189 _.each(item[1].pg, function (index) {
9190 time[1].pg.push({name: index, checked: false})
9191 });
9192 _.each(item[1].elasticsearch, function (index) {
9193 time[1].elasticsearch.push({
9194 name: index,
9195 checked: false
9196 })
9197 });
9198 outputList.push(time);
9199 });
9200 return outputList;
9201 };
9202
9203 sectionViewResource.get({section:'admin_section', view: 'partitions'},
9204 vm.loadPartitions);
9205
9259
9206 vm.partitionsDelete = function (partitionType) {
9260 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9207 var es_indices = [];
9261 // #
9208 var pg_indices = [];
9262 // # This program is free software: you can redistribute it and/or modify
9209 _.each(vm[partitionType], function (item) {
9263 // # it under the terms of the GNU Affero General Public License, version 3
9210 _.each(item[1].pg, function (index) {
9264 // # (only), as published by the Free Software Foundation.
9211 if (index.checked) {
9265 // #
9212 pg_indices.push(index.name)
9266 // # This program is distributed in the hope that it will be useful,
9213 }
9267 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9214 });
9268 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9215 _.each(item[1].elasticsearch, function (index) {
9269 // # GNU General Public License for more details.
9216 if (index.checked) {
9270 // #
9217 es_indices.push(index.name)
9271 // # You should have received a copy of the GNU Affero General Public License
9218 }
9272 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
9219 });
9273 // #
9220 });
9274 // # This program is dual-licensed. If you wish to learn more about the
9221 console.log(es_indices, pg_indices);
9275 // # AppEnlight Enterprise Edition, including its added features, Support
9276 // # services, and proprietary license terms, please see
9277 // # https://rhodecode.com/licenses/
9222
9278
9223 vm.loading = {partitions: true};
9279 angular.module('appenlight.controllers').controller('AdminApplicationsListController', AdminApplicationsListController);
9224 sectionViewResource.save({section:'admin_section',
9225 view: 'partitions_remove'}, {
9226 es_indices: es_indices,
9227 pg_indices: pg_indices,
9228 confirm: 'CONFIRM'
9229 }, vm.loadPartitions);
9230
9280
9231 }
9281 AdminApplicationsListController.$inject = ['applicationsResource'];
9232
9282
9233 }
9283 function AdminApplicationsListController(applicationsResource) {
9284
9285 var vm = this;
9286 vm.loading = {applications: true};
9287
9288 vm.applications = applicationsResource.query({
9289 root_list: true,
9290 resource_type: 'application'
9291 }, function (data) {
9292 vm.loading = {applications: false};
9293 });
9294 };
9234
9295
9235 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9296 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9236 // #
9297 // #
@@ -9251,30 +9312,43 b' function AdminPartitionsController(sectionViewResource) {'
9251 // # services, and proprietary license terms, please see
9312 // # services, and proprietary license terms, please see
9252 // # https://rhodecode.com/licenses/
9313 // # https://rhodecode.com/licenses/
9253
9314
9254 angular.module('appenlight.controllers').controller('AdminSystemController', AdminSystemController);
9315 angular.module('appenlight.controllers').controller('ConfigsListController', ConfigsListController);
9255
9316
9256 AdminSystemController.$inject = ['sectionViewResource'];
9317 ConfigsListController.$inject = ['configsResource', 'configsNoIdResource'];
9257
9318
9258 function AdminSystemController(sectionViewResource) {
9319 function ConfigsListController(configsResource, configsNoIdResource) {
9259 var vm = this;
9320 var vm = this;
9260 vm.tables = [];
9321 vm.loading = {config: true};
9261 vm.loading = {system: true};
9322
9262 sectionViewResource.get({
9323 var filters = [
9263 section: 'admin_section',
9324 'template_footer_html:global',
9264 view: 'system'
9325 'list_groups_to_non_admins:global',
9265 }, null, function (data) {
9326 'per_application_reports_rate_limit:global',
9266 vm.DBtables = data.db_tables;
9327 'per_application_logs_rate_limit:global',
9267 vm.ESIndices = data.es_indices;
9328 'per_application_metrics_rate_limit:global',
9268 vm.queueStats = data.queue_stats;
9329 ];
9269 vm.systemLoad = data.system_load;
9330
9270 vm.packages = data.packages;
9331 vm.configs = {};
9271 vm.processInfo = data.process_info;
9332
9272 vm.disks = data.disks;
9333 vm.configList = configsResource.query({filter: filters},
9273 vm.memory = data.memory;
9334 function (data) {
9274 vm.selfInfo = data.self_info;
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
9344 vm.save = function () {
9345 vm.loading.config = true;
9346 _.each(vm.configList, function (item) {
9347 item.$save();
9348 });
9349 vm.loading.config = false;
9350 };
9275
9351
9276 vm.loading.system = false;
9277 });
9278 };
9352 };
9279
9353
9280 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9354 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
@@ -9296,106 +9370,126 b' function AdminSystemController(sectionViewResource) {'
9296 // # services, and proprietary license terms, please see
9370 // # services, and proprietary license terms, please see
9297 // # https://rhodecode.com/licenses/
9371 // # https://rhodecode.com/licenses/
9298
9372
9299 angular.module('appenlight.controllers').controller('AdminUsersCreateController', AdminUsersCreateController);
9373 angular.module('appenlight.controllers').controller('AdminGroupsCreateController', AdminGroupsCreateController);
9300
9374
9301 AdminUsersCreateController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
9375 AdminGroupsCreateController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource', 'AeConfig'];
9302
9376
9303 function AdminUsersCreateController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
9377 function AdminGroupsCreateController($state, groupsResource, groupsPropertyResource, sectionViewResource, AeConfig) {
9304 console.debug('AdminUsersCreateController');
9378
9305 var vm = this;
9379 var vm = this;
9306 vm.loading = {user: false};
9380 vm.loading = {
9381 group: false,
9382 resource_permissions: false,
9383 users: false
9384 };
9307
9385
9386 vm.form = {
9387 autocompleteUser: '',
9388 }
9308
9389
9309 if (typeof $state.params.userId !== 'undefined') {
9390
9310 vm.loading.user = true;
9391 if (typeof $state.params.groupId !== 'undefined') {
9311 var userId = $state.params.userId;
9392 vm.loading.group = true;
9312 vm.user = usersResource.get({userId: userId}, function (data) {
9393 var groupId = $state.params.groupId;
9313 vm.loading.user = false;
9394 vm.group = groupsResource.get({groupId: groupId}, function (data) {
9314 // cast to true for angular checkbox
9395 vm.loading.group = false;
9315 if (vm.user.status === 1) {
9316 vm.user.status = true;
9317 }
9318 });
9396 });
9319
9397
9320 vm.resource_permissions = usersPropertyResource.query(
9398 vm.resource_permissions = groupsPropertyResource.query(
9321 {userId: userId, key: 'resource_permissions'}, function (data) {
9399 {groupId: groupId, key: 'resource_permissions'}, function (data) {
9322 vm.loading.resource_permissions = false;
9400 vm.loading.resource_permissions = false;
9323 var tmpObj = {
9401 var tmpObj = {
9324 'user': {
9325 'application': {},
9326 'dashboard': {}
9327 },
9328 'group': {
9402 'group': {
9329 'application': {},
9403 'application': {},
9330 'dashboard': {}
9404 'dashboard': {}
9331 }
9405 }
9332 };
9406 };
9333 _.each(data, function (item) {
9407 _.each(data, function (item) {
9334 console.log(item);
9408
9335 var section = tmpObj[item.type][item.resource_type];
9409 var section = tmpObj[item.type][item.resource_type];
9336 if (typeof section[item.resource_id] == 'undefined'){
9410 if (typeof section[item.resource_id] == 'undefined') {
9337 section[item.resource_id] = {
9411 section[item.resource_id] = {
9338 self:item,
9412 self: item,
9339 permissions: []
9413 permissions: []
9340 }
9414 }
9341 }
9415 }
9342 section[item.resource_id].permissions.push(item.perm_name);
9416 section[item.resource_id].permissions.push(item.perm_name);
9343
9417
9344 });
9418 });
9345 console.log(tmpObj)
9346 vm.resourcePermissions = tmpObj;
9419 vm.resourcePermissions = tmpObj;
9347 });
9420 });
9348
9421
9422 vm.users = groupsPropertyResource.query(
9423 {groupId: groupId, key: 'users'}, function (data) {
9424 vm.loading.users = false;
9425 }, function () {
9426 vm.loading.users = false;
9427 });
9428
9349 }
9429 }
9350 else {
9430 else {
9351 var userId = null;
9431 var groupId = null;
9352 vm.user = {
9353 status: true
9354 }
9355 }
9432 }
9356
9433
9357 var formResponse = function (response) {
9434 var formResponse = function (response) {
9358 if (response.status == 422) {
9435 if (response.status === 422) {
9359 setServerValidation(vm.profileForm, response.data);
9436 setServerValidation(vm.groupForm, response.data);
9360 }
9437 }
9361 vm.loading.user = false;
9438 vm.loading.group = false;
9362 }
9439 };
9363
9440
9364 vm.createUser = function () {
9441 vm.createGroup = function () {
9365 vm.loading.user = true;
9442 vm.loading.group = true;
9366 console.log('updateProfile');
9443 if (groupId) {
9367 if (userId) {
9444 groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
9368 usersResource.update({userId: vm.user.id}, vm.user, function (data) {
9445 setServerValidation(vm.groupForm);
9369 setServerValidation(vm.profileForm);
9446 vm.loading.group = false;
9370 vm.loading.user = false;
9371 }, formResponse);
9447 }, formResponse);
9372 }
9448 }
9373 else {
9449 else {
9374 usersResource.save(vm.user, function (data) {
9450 groupsResource.save(vm.group, function (data) {
9375 $state.go('admin.user.update', {userId: data.id});
9451 $state.go('admin.group.update', {groupId: data.id});
9376 }, formResponse);
9452 }, formResponse);
9377 }
9453 }
9378 }
9454 };
9379
9455
9380 vm.generatePassword = function () {
9456 vm.removeUser = function (user) {
9381 var length = 8;
9457 groupsPropertyResource.delete(
9382 var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
9458 {groupId: groupId, key: 'users', user_name: user.user_name},
9383 vm.gen_pass = "";
9459 function (data) {
9384 for (var i = 0, n = charset.length; i < length; ++i) {
9460 vm.loading.users = false;
9385 vm.gen_pass += charset.charAt(Math.floor(Math.random() * n));
9461 vm.users = _.filter(vm.users, function (item) {
9386 }
9462 return item != user;
9387 vm.user.user_password = '' + vm.gen_pass;
9463 });
9388 console.log('x', vm.gen_pass);
9464 }, function () {
9389 }
9465 vm.loading.users = false;
9466 });
9467 };
9390
9468
9391 vm.reloginUser = function () {
9469 vm.addUser = function () {
9392 sectionViewResource.get({
9470 groupsPropertyResource.save(
9393 section: 'admin_section', view: 'relogin_user',
9471 {groupId: groupId, key: 'users'},
9394 user_id: vm.user.id
9472 {user_name: vm.form.autocompleteUser},
9395 }, function () {
9473 function (data) {
9396 window.location = AeConfig.urls.baseUrl;
9474 vm.loading.users = false;
9397 });
9475 vm.users.push(data);
9476 vm.form.autocompleteUser = '';
9477 }, function () {
9478 vm.loading.users = false;
9479 });
9480 }
9398
9481
9482 vm.searchUsers = function (searchPhrase) {
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 });
9399 }
9493 }
9400 };
9494 };
9401
9495
@@ -9418,35 +9512,35 b' function AdminUsersCreateController($state, usersResource, usersPropertyResource'
9418 // # services, and proprietary license terms, please see
9512 // # services, and proprietary license terms, please see
9419 // # https://rhodecode.com/licenses/
9513 // # https://rhodecode.com/licenses/
9420
9514
9421 angular.module('appenlight.controllers').controller('AdminUsersController', AdminUsersController);
9515 angular.module('appenlight.controllers').controller('AdminGroupsController', AdminGroupsController);
9422
9516
9423 AdminUsersController.$inject = ['usersResource'];
9517 AdminGroupsController.$inject = ['groupsResource'];
9424
9518
9425 function AdminUsersController(usersResource) {
9519 function AdminGroupsController(groupsResource) {
9426 console.debug('AdminUsersController');
9520
9427 var vm = this;
9521 var vm = this;
9428 vm.loading = {users: true};
9522 vm.loading = {groups: true};
9429
9523
9430 vm.users = usersResource.query({}, function (data) {
9524 vm.groups = groupsResource.query({}, function (data) {
9431 vm.loading = {users: false};
9525 vm.loading = {groups: false};
9432 vm.activeUsers = _.reduce(vm.users, function(memo, val){
9526 vm.activeUsers = _.reduce(vm.groups, function(memo, val){
9433 if (val.status == 1){
9527 if (val.status == 1){
9434 return memo + 1;
9528 return memo + 1;
9435 }
9529 }
9436 return memo;
9530 return memo;
9437 }, 0);
9531 }, 0);
9438 console.log(vm.users);
9532
9439 });
9533 });
9440
9534
9441
9535
9442 vm.removeUser = function (user) {
9536 vm.removeGroup = function (group) {
9443 usersResource.remove({userId: user.id}, function (data, responseHeaders) {
9537 groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
9444 console.log('x',data, responseHeaders());
9538
9445 if (data) {
9539 if (data) {
9446 var index = vm.users.indexOf(user);
9540 var index = vm.groups.indexOf(group);
9447 if (index !== -1) {
9541 if (index !== -1) {
9448 vm.users.splice(index, 1);
9542 vm.groups.splice(index, 1);
9449 vm.activeUsers -= 1;
9543 vm.activeGroups -= 1;
9450 }
9544 }
9451 }
9545 }
9452 });
9546 });
@@ -9472,244 +9566,110 b' function AdminUsersController(usersResource) {'
9472 // # services, and proprietary license terms, please see
9566 // # services, and proprietary license terms, please see
9473 // # https://rhodecode.com/licenses/
9567 // # https://rhodecode.com/licenses/
9474
9568
9475 angular.module('appenlight.controllers')
9569 angular.module('appenlight.controllers').controller('AdminPartitionsController', AdminPartitionsController);
9476 .controller('ApplicationsUpdateController', ApplicationsUpdateController)
9477
9570
9478 ApplicationsUpdateController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder'];
9571 AdminPartitionsController.$inject = ['sectionViewResource'];
9479
9572
9480 function ApplicationsUpdateController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder) {
9573 function AdminPartitionsController(sectionViewResource) {
9481 'use strict';
9482 console.debug('ApplicationsUpdateController');
9483 var vm = this;
9574 var vm = this;
9484 vm.loading = {application: false};
9575 vm.permanentPartitions = [];
9485
9576 vm.dailyPartitions = [];
9486 vm.groupingOptions = [
9577 vm.loading = {partitions: true};
9487 ['url_type', 'Error Type + location'],
9578 vm.dailyChecked = false;
9488 ['url_traceback', 'Traceback + location'],
9579 vm.permChecked = false;
9489 ['traceback_server', 'Traceback + Server'],
9580 vm.dailyConfirm = '';
9490 ];
9581 vm.permConfirm = '';
9491
9492 var resourceId = $state.params.resourceId;
9493
9494
9495 var options = {};
9496
9497 vm.momentJs = moment;
9498
9499 vm.formTransferModel = {password:''};
9500
9582
9501 // set initial data
9502
9583
9503 if (resourceId === 'new') {
9584 vm.loadPartitions = function (data) {
9504 vm.resource = {
9585 var permanentPartitions = vm.transformPartitionList(
9505 resource_id: null,
9586 data.permanent_partitions);
9506 slow_report_threshold: 10,
9587 var dailyPartitions = vm.transformPartitionList(
9507 error_report_threshold: 10,
9588 data.daily_partitions);
9508 allow_permanent_storage: true,
9589 vm.permanentPartitions = permanentPartitions;
9509 default_grouping: vm.groupingOptions[1][0]
9590 vm.dailyPartitions = dailyPartitions;
9510 };
9591 vm.loading = {partitions: false};
9511 }
9592 };
9512 else {
9513 vm.loading.application = true;
9514 vm.resource = applicationsResource.get({
9515 'resourceId': resourceId
9516 }, function (data) {
9517 vm.loading.application = false;
9518 });
9519 }
9520
9593
9594 vm.setCheckedList = function (scope) {
9595 var toTest = null;
9596 if (scope === 'dailyPartitions'){
9597 toTest = 'dailyChecked';
9598 }
9599 else{
9600 toTest = 'permChecked';
9601 }
9521
9602
9522 vm.updateBasicForm = function () {
9603 if (vm[toTest]) {
9523 vm.loading.application = true;
9604 var val = true;
9524 if (vm.resource.resource_id === null) {
9525 applicationsNoIdResource.save(null, vm.resource, function (data) {
9526 stateHolder.AeUser.addApplication(data);
9527 $state.go('applications.update', {resourceId: data.resource_id});
9528 setServerValidation(vm.BasicForm);
9529 }, function (response) {
9530 if (response.status == 422) {
9531 setServerValidation(vm.BasicForm, response.data);
9532 }
9533 vm.loading.application = false;
9534 console.log(vm.BasicForm);
9535 });
9536 }
9605 }
9537 else {
9606 else {
9538 applicationsResource.update({resourceId: vm.resource.resource_id},
9607 var val = false;
9539 vm.resource, function (data) {
9540 vm.resource = data;
9541 vm.loading.application = false;
9542 setServerValidation(vm.BasicForm);
9543 }, function (response) {
9544 if (response.status == 422) {
9545 setServerValidation(vm.BasicForm, response.data);
9546 }
9547 vm.loading.application = false;
9548 });
9549 }
9608 }
9550 };
9609
9551
9610 _.each(vm[scope], function (item) {
9552 vm.addRule = function () {
9611 _.each(item[1].pg, function (index) {
9553 console.log('addrule');
9612 index.checked = val;
9554 applicationsPropertyResource.save({
9613 });
9555 resourceId: vm.resource.resource_id,
9614 _.each(item[1].elasticsearch, function (index) {
9556 key: 'postprocessing_rules'
9615 index.checked = val;
9557 }, null,
9616 });
9558 function (data) {
9617 });
9559 vm.resource.postprocessing_rules.push(data);
9560 }
9561 );
9562 };
9563
9564 vm.regenerateAPIKeys = function(){
9565 vm.loading.application = true;
9566 applicationsPropertyResource.save({
9567 resourceId: vm.resource.resource_id,
9568 key: 'api_key'
9569 }, {password: vm.regenerateAPIKeysPassword},
9570 function (data) {
9571 vm.resource = data;
9572 vm.loading.application = false;
9573 vm.regenerateAPIKeysPassword = '';
9574 setServerValidation(vm.regenerateAPIKeysForm);
9575 },
9576 function (response) {
9577 if (response.status == 422) {
9578 setServerValidation(vm.regenerateAPIKeysForm, response.data);
9579 console.log(response.data);
9580 }
9581 vm.loading.application = false;
9582 }
9583 )
9584 };
9585
9586 vm.deleteApplication = function(){
9587 vm.loading.application = true;
9588 applicationsPropertyResource.update({
9589 resourceId: vm.resource.resource_id,
9590 key: 'delete_resource'
9591 }, vm.formDeleteModel,
9592 function (data) {
9593 stateHolder.AeUser.removeApplicationById(vm.resource.resource_id);
9594 $state.go('applications.list');
9595 },
9596 function (response) {
9597 if (response.status == 422) {
9598 setServerValidation(vm.formDelete, response.data);
9599 console.log(response.data);
9600 }
9601 vm.loading.application = false;
9602 }
9603 );
9604 };
9605
9606 vm.transferApplication = function(){
9607 vm.loading.application = true;
9608 applicationsPropertyResource.update({
9609 resourceId: vm.resource.resource_id,
9610 key: 'owner'
9611 }, vm.formTransferModel,
9612 function (data) {
9613 $state.go('applications.list');
9614 },
9615 function (response) {
9616 if (response.status == 422) {
9617 setServerValidation(vm.formTransfer, response.data);
9618 console.log(response.data);
9619 }
9620 vm.loading.application = false;
9621 }
9622 )
9623 }
9618 }
9624
9619
9625 }
9626
9627 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9628 // #
9629 // # This program is free software: you can redistribute it and/or modify
9630 // # it under the terms of the GNU Affero General Public License, version 3
9631 // # (only), as published by the Free Software Foundation.
9632 // #
9633 // # This program is distributed in the hope that it will be useful,
9634 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9635 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9636 // # GNU General Public License for more details.
9637 // #
9638 // # You should have received a copy of the GNU Affero General Public License
9639 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
9640 // #
9641 // # This program is dual-licensed. If you wish to learn more about the
9642 // # AppEnlight Enterprise Edition, including its added features, Support
9643 // # services, and proprietary license terms, please see
9644 // # https://rhodecode.com/licenses/
9645
9646 angular.module('appenlight.controllers')
9647 .controller('IntegrationController', IntegrationController)
9648
9649 IntegrationController.$inject = ['$state', 'integrationResource'];
9650
9620
9651 function IntegrationController($state, integrationResource) {
9621 vm.transformPartitionList = function (inputList) {
9652 console.debug('IntegrationController');
9622 var outputList = [];
9653 var vm = this;
9654 vm.loading = {integration: true};
9655 vm.config = integrationResource.get(
9656 {
9657 integration: $state.params.integration,
9658 action: 'setup',
9659 resourceId: $state.params.resourceId
9660 }, function (data) {
9661 vm.loading.integration = false;
9662 });
9663
9623
9664 vm.configureIntegration = function () {
9624 _.each(inputList, function (item) {
9665 console.info('configureIntegration');
9625 var time = [item[0], {
9666 vm.loading.integration = true;
9626 elasticsearch: [],
9667 integrationResource.save(
9627 pg: []
9668 {
9628 }]
9669 integration: $state.params.integration,
9629 _.each(item[1].pg, function (index) {
9670 action: 'setup',
9630 time[1].pg.push({name: index, checked: false})
9671 resourceId: $state.params.resourceId
9631 });
9672 }, vm.config, function (data) {
9632 _.each(item[1].elasticsearch, function (index) {
9673 vm.loading.integration = false;
9633 time[1].elasticsearch.push({
9674 setServerValidation(vm.integrationForm);
9634 name: index,
9675 }, function (response) {
9635 checked: false
9676 if (response.status == 422) {
9636 })
9677 setServerValidation(vm.integrationForm, response.data);
9678 }
9679 vm.loading.integration = false;
9680 });
9637 });
9638 outputList.push(time);
9639 });
9640 return outputList;
9681 };
9641 };
9682
9642
9683 vm.removeIntegration = function () {
9643 sectionViewResource.get({section:'admin_section', view: 'partitions'},
9684 console.info('removeIntegration');
9644 vm.loadPartitions);
9685 integrationResource.remove({
9686 integration: $state.params.integration,
9687 resourceId: $state.params.resourceId,
9688 action: 'delete'
9689 },
9690 function () {
9691 $state.go('applications.integrations',
9692 {resourceId: $state.params.resourceId});
9693 }
9694 );
9695 }
9696
9645
9697 vm.testIntegration = function(to_test){
9646 vm.partitionsDelete = function (partitionType) {
9698 console.info('testIntegration', to_test);
9647 var es_indices = [];
9699 vm.loading.integration = true;
9648 var pg_indices = [];
9700 integrationResource.save(
9649 _.each(vm[partitionType], function (item) {
9701 {
9650 _.each(item[1].pg, function (index) {
9702 integration: $state.params.integration,
9651 if (index.checked) {
9703 action: 'test_'+ to_test,
9652 pg_indices.push(index.name)
9704 resourceId: $state.params.resourceId
9653 }
9705 }, vm.config, function (data) {
9654 });
9706 vm.loading.integration = false;
9655 _.each(item[1].elasticsearch, function (index) {
9707 }, function (response) {
9656 if (index.checked) {
9708 vm.loading.integration = false;
9657 es_indices.push(index.name)
9658 }
9709 });
9659 });
9660 });
9661
9662
9663 vm.loading = {partitions: true};
9664 sectionViewResource.save({section:'admin_section',
9665 view: 'partitions_remove'}, {
9666 es_indices: es_indices,
9667 pg_indices: pg_indices,
9668 confirm: 'CONFIRM'
9669 }, vm.loadPartitions);
9670
9710 }
9671 }
9711
9672
9712 console.log(vm);
9713 }
9673 }
9714
9674
9715 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9675 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
@@ -9731,20 +9691,31 b' function IntegrationController($state, integrationResource) {'
9731 // # services, and proprietary license terms, please see
9691 // # services, and proprietary license terms, please see
9732 // # https://rhodecode.com/licenses/
9692 // # https://rhodecode.com/licenses/
9733
9693
9734 angular.module('appenlight.controllers')
9694 angular.module('appenlight.controllers').controller('AdminSystemController', AdminSystemController);
9735 .controller('IntegrationsListController', IntegrationsListController)
9736
9695
9737 IntegrationsListController.$inject = ['$state', 'applicationsResource'];
9696 AdminSystemController.$inject = ['sectionViewResource'];
9738
9697
9739 function IntegrationsListController($state, applicationsResource) {
9698 function AdminSystemController(sectionViewResource) {
9740 console.debug('IntegrationsListController');
9741 var vm = this;
9699 var vm = this;
9742 vm.loading = {application: true};
9700 vm.tables = [];
9743 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
9701 vm.loading = {system: true};
9744 vm.loading.application = false;
9702 sectionViewResource.get({
9745 $state.current.data.resource = vm.resource;
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
9716 vm.loading.system = false;
9746 });
9717 });
9747 }
9718 };
9748
9719
9749 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9720 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9750 // #
9721 // #
@@ -9765,19 +9736,107 b' function IntegrationsListController($state, applicationsResource) {'
9765 // # services, and proprietary license terms, please see
9736 // # services, and proprietary license terms, please see
9766 // # https://rhodecode.com/licenses/
9737 // # https://rhodecode.com/licenses/
9767
9738
9768 angular.module('appenlight.controllers')
9739 angular.module('appenlight.controllers').controller('AdminUsersCreateController', AdminUsersCreateController);
9769 .controller('ApplicationsListController', ApplicationsListController)
9770
9740
9771 ApplicationsListController.$inject = ['applicationsResource'];
9741 AdminUsersCreateController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
9772
9742
9773 function ApplicationsListController(applicationsResource) {
9743 function AdminUsersCreateController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
9774 console.debug('ApplicationsListController');
9744
9775 var vm = this;
9745 var vm = this;
9776 vm.loading = {applications: true};
9746 vm.loading = {user: false};
9777 vm.applications = applicationsResource.query(null, function(){
9747
9778 vm.loading.applications = false;
9748
9779 });
9749 if (typeof $state.params.userId !== 'undefined') {
9780 }
9750 vm.loading.user = true;
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 }
9795
9796 var formResponse = function (response) {
9797 if (response.status == 422) {
9798 setServerValidation(vm.profileForm, response.data);
9799 }
9800 vm.loading.user = false;
9801 }
9802
9803 vm.createUser = function () {
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
9819 vm.generatePassword = function () {
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
9830 vm.reloginUser = function () {
9831 sectionViewResource.get({
9832 section: 'admin_section', view: 'relogin_user',
9833 user_id: vm.user.id
9834 }, function () {
9835 window.location = AeConfig.urls.baseUrl;
9836 });
9837
9838 }
9839 };
9781
9840
9782 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9841 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9783 // #
9842 // #
@@ -9798,47 +9857,40 b' function ApplicationsListController(applicationsResource) {'
9798 // # services, and proprietary license terms, please see
9857 // # services, and proprietary license terms, please see
9799 // # https://rhodecode.com/licenses/
9858 // # https://rhodecode.com/licenses/
9800
9859
9801 angular.module('appenlight.controllers')
9860 angular.module('appenlight.controllers').controller('AdminUsersController', AdminUsersController);
9802 .controller('ApplicationsPurgeLogsController', ApplicationsPurgeLogsController)
9803
9861
9804 ApplicationsPurgeLogsController.$inject = ['applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
9862 AdminUsersController.$inject = ['usersResource'];
9805
9863
9806 function ApplicationsPurgeLogsController(applicationsResource, sectionViewResource, logsNoIdResource) {
9864 function AdminUsersController(usersResource) {
9807 console.debug('ApplicationsPurgeLogsController');
9865
9808 var vm = this;
9866 var vm = this;
9809 vm.loading = {applications: true};
9867 vm.loading = {users: true};
9810
9811 vm.namespace = null;
9812 vm.selectedResource = null;
9813 vm.commonNamespaces = [];
9814
9868
9815 vm.applications = applicationsResource.query({'type':'update_reports'}, function () {
9869 vm.users = usersResource.query({}, function (data) {
9816 vm.loading.applications = false;
9870 vm.loading = {users: false};
9817 vm.selectedResource = vm.applications[0].resource_id;
9871 vm.activeUsers = _.reduce(vm.users, function(memo, val){
9818 vm.getCommonKeys();
9872 if (val.status == 1){
9873 return memo + 1;
9874 }
9875 return memo;
9876 }, 0);
9877
9819 });
9878 });
9820
9879
9821 /**
9822 * Fetches most commonly used tags in logs
9823 */
9824 vm.getCommonKeys = function () {
9825 sectionViewResource.get({
9826 section: 'logs_section',
9827 view: 'common_tags',
9828 resource: vm.selectedResource
9829 }, function (data) {
9830 vm.commonNamespaces = data['namespaces']
9831 });
9832 };
9833
9880
9834 vm.purgeLogs = function () {
9881 vm.removeUser = function (user) {
9835 vm.loading.applications = true;
9882 usersResource.remove({userId: user.id}, function (data, responseHeaders) {
9836 logsNoIdResource.delete({resource:vm.selectedResource,
9883
9837 namespace: vm.namespace}, function(){
9884 if (data) {
9838 vm.loading.applications = false;
9885 var index = vm.users.indexOf(user);
9886 if (index !== -1) {
9887 vm.users.splice(index, 1);
9888 vm.activeUsers -= 1;
9889 }
9890 }
9839 });
9891 });
9840 }
9892 }
9841 }
9893 };
9842
9894
9843 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9895 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9844 // #
9896 // #
@@ -10088,7 +10140,7 b' function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName,'
10088 vm.form.responsible = vm.assignees[0];
10140 vm.form.responsible = vm.assignees[0];
10089 vm.form.priority = vm.priorities[0];
10141 vm.form.priority = vm.priorities[0];
10090 }, function (error_data) {
10142 }, function (error_data) {
10091 console.log('ERROR');
10143
10092 if (error_data.data.error_messages) {
10144 if (error_data.data.error_messages) {
10093 vm.error_messages = error_data.data.error_messages;
10145 vm.error_messages = error_data.data.error_messages;
10094 }
10146 }
@@ -10479,7 +10531,7 b' function ReportsListSlowController($location, $cookies, stateHolder, typeAheadTa'
10479 vm.is_loading = true;
10531 vm.is_loading = true;
10480 slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
10532 slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
10481 var headers = getResponseHeaders();
10533 var headers = getResponseHeaders();
10482 console.log(headers);
10534
10483 vm.is_loading = false;
10535 vm.is_loading = false;
10484 vm.reportsPage = _.map(data, function (item) {
10536 vm.reportsPage = _.map(data, function (item) {
10485 return reportPresentation(item);
10537 return reportPresentation(item);
@@ -10796,7 +10848,7 b' function ReportsListController($location, $cookies, stateHolder,'
10796 vm.is_loading = true;
10848 vm.is_loading = true;
10797 reportsResource.query(searchParams, function (data, getResponseHeaders) {
10849 reportsResource.query(searchParams, function (data, getResponseHeaders) {
10798 var headers = getResponseHeaders();
10850 var headers = getResponseHeaders();
10799 console.log(headers);
10851
10800 vm.is_loading = false;
10852 vm.is_loading = false;
10801 vm.reportsPage = _.map(data, function (item) {
10853 vm.reportsPage = _.map(data, function (item) {
10802 return reportPresentation(item);
10854 return reportPresentation(item);
@@ -10820,7 +10872,7 b' function ReportsListController($location, $cookies, stateHolder,'
10820 vm.searchParams = parseSearchToTags($location.search());
10872 vm.searchParams = parseSearchToTags($location.search());
10821 vm.page = Number(vm.searchParams.page) || 1;
10873 vm.page = Number(vm.searchParams.page) || 1;
10822 var params = parseTagsToSearch(vm.searchParams);
10874 var params = parseTagsToSearch(vm.searchParams);
10823 console.log(params);
10875
10824 vm.fetchReports(params);
10876 vm.fetchReports(params);
10825 };
10877 };
10826 // initial load
10878 // initial load
@@ -10950,7 +11002,7 b' function ReportsViewController($window, $location, $state, $uibModal, $cookies, '
10950 };
11002 };
10951
11003
10952 vm.searchTag = function (tag, value) {
11004 vm.searchTag = function (tag, value) {
10953 console.log(tag, value);
11005
10954 if (vm.report.report_type === 3) {
11006 if (vm.report.report_type === 3) {
10955 $location.url($state.href('report.list_slow'));
11007 $location.url($state.href('report.list_slow'));
10956 }
11008 }
@@ -11040,7 +11092,7 b' function ReportsViewController($window, $location, $state, $uibModal, $cookies, '
11040 vm.selectedTab($cookies.selectedReportTab);
11092 vm.selectedTab($cookies.selectedReportTab);
11041
11093
11042 }, function (response) {
11094 }, function (response) {
11043 console.log(response);
11095
11044 if (response.status == 403) {
11096 if (response.status == 403) {
11045 var uid = response.headers('x-appenlight-uid');
11097 var uid = response.headers('x-appenlight-uid');
11046 if (!uid) {
11098 if (!uid) {
@@ -11137,7 +11189,7 b' function ReportsViewController($window, $location, $state, $uibModal, $cookies, '
11137 };
11189 };
11138
11190
11139 vm.runIntegration = function (integration_name) {
11191 vm.runIntegration = function (integration_name) {
11140 console.log(integration_name);
11192
11141 if (integration_name == 'bitbucket') {
11193 if (integration_name == 'bitbucket') {
11142 var controller = 'BitbucketIntegrationCtrl as ctrl';
11194 var controller = 'BitbucketIntegrationCtrl as ctrl';
11143 var template_url = 'templates/integrations/bitbucket.html';
11195 var template_url = 'templates/integrations/bitbucket.html';
@@ -11217,7 +11269,7 b" angular.module('appenlight.directives.c3chart', [])"
11217 if (!_.isEmpty($scope.data)) {
11269 if (!_.isEmpty($scope.data)) {
11218 _.extend(config.data, angular.copy($scope.data));
11270 _.extend(config.data, angular.copy($scope.data));
11219 }
11271 }
11220 console.log('ChartCtrl.showGraph', config);
11272
11221 config.onresized = function () {
11273 config.onresized = function () {
11222 if (this.currentWidth < 400){
11274 if (this.currentWidth < 400){
11223 $scope.chart.internal.config.axis_x_tick_culling_max = 3;
11275 $scope.chart.internal.config.axis_x_tick_culling_max = 3;
@@ -11236,19 +11288,19 b" angular.module('appenlight.directives.c3chart', [])"
11236 originalXTickCount = $scope.chart.internal.config.axis_x_tick_culling_max;
11288 originalXTickCount = $scope.chart.internal.config.axis_x_tick_culling_max;
11237 $scope.chart.internal.config.onresized.call($scope.chart.internal);
11289 $scope.chart.internal.config.onresized.call($scope.chart.internal);
11238 }
11290 }
11239 console.log('should update', $scope.update);
11291
11240 if ($scope.update) {
11292 if ($scope.update) {
11241 console.log('reload driven');
11293
11242 $scope.$watch('data', function () {
11294 $scope.$watch('data', function () {
11243 if (!firstLoad) {
11295 if (!firstLoad) {
11244 console.log('data updated', $scope.data);
11296
11245 $scope.chart.load(angular.copy($scope.data), {unload: true});
11297 $scope.chart.load(angular.copy($scope.data), {unload: true});
11246 if (typeof $scope.data.groups != 'undefined') {
11298 if (typeof $scope.data.groups != 'undefined') {
11247 console.log('add groups');
11299
11248 $scope.chart.groups($scope.data.groups);
11300 $scope.chart.groups($scope.data.groups);
11249 }
11301 }
11250 if (typeof $scope.data.names != 'undefined') {
11302 if (typeof $scope.data.names != 'undefined') {
11251 console.log('add names');
11303
11252 $scope.chart.data.names($scope.data.names);
11304 $scope.chart.data.names($scope.data.names);
11253 }
11305 }
11254 $scope.chart.flush();
11306 $scope.chart.flush();
@@ -11260,7 +11312,7 b" angular.module('appenlight.directives.c3chart', [])"
11260 return
11312 return
11261 }
11313 }
11262 if (typeof $scope.config.regions != 'undefined') {
11314 if (typeof $scope.config.regions != 'undefined') {
11263 console.log('update regions', $scope.config.regions);
11315
11264 $scope.chart.regions($scope.config.regions);
11316 $scope.chart.regions($scope.config.regions);
11265 }
11317 }
11266 });
11318 });
@@ -11336,7 +11388,7 b" directive('confirmValidate', [function () {"
11336 link: function ($scope, elem, attrs, ngModel) {
11388 link: function ($scope, elem, attrs, ngModel) {
11337 ngModel.$validators.confirm = function (modelValue, viewValue) {
11389 ngModel.$validators.confirm = function (modelValue, viewValue) {
11338 var value = modelValue || viewValue;
11390 var value = modelValue || viewValue;
11339 console.log('validate', value.toLowerCase() == 'confirm');
11391
11340 if (value.toLowerCase() == 'confirm') {
11392 if (value.toLowerCase() == 'confirm') {
11341 return true;
11393 return true;
11342 }
11394 }
@@ -11513,7 +11565,7 b' function ApplicationPermissionsController(sectionViewResource, applicationsPrope'
11513 vm.form.selectedGroup = vm.possibleGroups[0].id;
11565 vm.form.selectedGroup = vm.possibleGroups[0].id;
11514 }
11566 }
11515 });
11567 });
11516 console.log('g', vm.possibleGroups);
11568
11517 vm.possibleUsers = [];
11569 vm.possibleUsers = [];
11518 _.each(vm.resource.possible_permissions, function (perm) {
11570 _.each(vm.resource.possible_permissions, function (perm) {
11519 vm.form.selectedUserPermissions[perm] = false;
11571 vm.form.selectedUserPermissions[perm] = false;
@@ -11529,7 +11581,7 b' function ApplicationPermissionsController(sectionViewResource, applicationsPrope'
11529 group: {}
11581 group: {}
11530 };
11582 };
11531 _.each(vm.currentPermissions, function (perm) {
11583 _.each(vm.currentPermissions, function (perm) {
11532 console.log(perm);
11584
11533 if (perm.type == 'user') {
11585 if (perm.type == 'user') {
11534 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
11586 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
11535 tmpObj[perm.type][perm.user_name] = {
11587 tmpObj[perm.type][perm.user_name] = {
@@ -11559,10 +11611,10 b' function ApplicationPermissionsController(sectionViewResource, applicationsPrope'
11559 group: _.values(tmpObj.group),
11611 group: _.values(tmpObj.group),
11560 };
11612 };
11561
11613
11562 console.log('test', tmpObj, vm.currentPermissions);
11614
11563
11615
11564 vm.searchUsers = function (searchPhrase) {
11616 vm.searchUsers = function (searchPhrase) {
11565 console.log('SEARCHING');
11617
11566 vm.searchingUsers = true;
11618 vm.searchingUsers = true;
11567 return sectionViewResource.query({
11619 return sectionViewResource.query({
11568 section: 'users_section',
11620 section: 'users_section',
@@ -11611,7 +11663,7 b' function ApplicationPermissionsController(sectionViewResource, applicationsPrope'
11611
11663
11612
11664
11613 vm.setUserPermission = function () {
11665 vm.setUserPermission = function () {
11614 console.log('set permissions');
11666
11615 var POSTObj = {
11667 var POSTObj = {
11616 'user_name': vm.form.autocompleteUser,
11668 'user_name': vm.form.autocompleteUser,
11617 'permissions': []
11669 'permissions': []
@@ -11641,8 +11693,8 b' function ApplicationPermissionsController(sectionViewResource, applicationsPrope'
11641 }
11693 }
11642
11694
11643 vm.removeUserPermission = function (perm_name, curr_perm) {
11695 vm.removeUserPermission = function (perm_name, curr_perm) {
11644 console.log(perm_name);
11696
11645 console.log(curr_perm);
11697
11646 var POSTObj = {
11698 var POSTObj = {
11647 key: 'user_permissions',
11699 key: 'user_permissions',
11648 user_name: curr_perm.self.user_name,
11700 user_name: curr_perm.self.user_name,
@@ -11659,7 +11711,7 b' function ApplicationPermissionsController(sectionViewResource, applicationsPrope'
11659 }
11711 }
11660
11712
11661 vm.removeGroupPermission = function (perm_name, curr_perm) {
11713 vm.removeGroupPermission = function (perm_name, curr_perm) {
11662 console.log('g', curr_perm);
11714
11663 var POSTObj = {
11715 var POSTObj = {
11664 key: 'group_permissions',
11716 key: 'group_permissions',
11665 group_id: curr_perm.self.group_id,
11717 group_id: curr_perm.self.group_id,
@@ -11766,7 +11818,7 b" angular.module('appenlight.directives.postProcessAction', []).directive('postPro"
11766 };
11818 };
11767 function postProcessActionController(){
11819 function postProcessActionController(){
11768 var vm = this;
11820 var vm = this;
11769 console.log(vm);
11821
11770 var allOps = {
11822 var allOps = {
11771 'eq': 'Equal',
11823 'eq': 'Equal',
11772 'ne': 'Not equal',
11824 'ne': 'Not equal',
@@ -11850,7 +11902,7 b" angular.module('appenlight.directives.postProcessAction', []).directive('postPro"
11850
11902
11851 vm.setDirty = function() {
11903 vm.setDirty = function() {
11852 vm.action.dirty = true;
11904 vm.action.dirty = true;
11853 console.log('set dirty');
11905
11854 };
11906 };
11855 }
11907 }
11856
11908
@@ -11946,14 +11998,14 b" angular.module('appenlight.directives.reportAlertAction', []).directive('reportA"
11946 channel_pkey: vm.channelToBind.pkey,
11998 channel_pkey: vm.channelToBind.pkey,
11947 action_pkey: vm.action.pkey
11999 action_pkey: vm.action.pkey
11948 };
12000 };
11949 console.log(post);
12001
11950 userSelfPropertyResource.save({key: 'alert_channels_actions_binds'}, post,
12002 userSelfPropertyResource.save({key: 'alert_channels_actions_binds'}, post,
11951 function (data) {
12003 function (data) {
11952 vm.action.channels = [];
12004 vm.action.channels = [];
11953 vm.action.channels = data.channels;
12005 vm.action.channels = data.channels;
11954 }, function (response) {
12006 }, function (response) {
11955 if (response.status == 422) {
12007 if (response.status == 422) {
11956 console.log('scope', response);
12008
11957 }
12009 }
11958 });
12010 });
11959 };
12011 };
@@ -11969,7 +12021,7 b" angular.module('appenlight.directives.reportAlertAction', []).directive('reportA"
11969 vm.action.channels = data.channels;
12021 vm.action.channels = data.channels;
11970 }, function (response) {
12022 }, function (response) {
11971 if (response.status == 422) {
12023 if (response.status == 422) {
11972 console.log('scope', response);
12024
11973 }
12025 }
11974 });
12026 });
11975 };
12027 };
@@ -12006,7 +12058,7 b" angular.module('appenlight.directives.reportAlertAction', []).directive('reportA"
12006
12058
12007 vm.setDirty = function() {
12059 vm.setDirty = function() {
12008 vm.action.dirty = true;
12060 vm.action.dirty = true;
12009 console.log('set dirty');
12061
12010 };
12062 };
12011 }
12063 }
12012
12064
@@ -12105,10 +12157,10 b" angular.module('appenlight.directives.rule', []).directive('rule', function () {"
12105
12157
12106 vm.setDirty = function() {
12158 vm.setDirty = function() {
12107 vm.rule.dirty = true;
12159 vm.rule.dirty = true;
12108 console.log('set dirty');
12160
12109 if (vm.parentObj){
12161 if (vm.parentObj){
12110 console.log('p', vm.parentObj);
12162
12111 console.log('set parent dirty');
12163
12112 vm.parentObj.dirty = true;
12164 vm.parentObj.dirty = true;
12113 }
12165 }
12114 };
12166 };
@@ -12122,13 +12174,13 b" angular.module('appenlight.directives.rule', []).directive('rule', function () {"
12122 vm.rule.op = vm.ruleDefinitions.fieldOps[vm.rule.field][0];
12174 vm.rule.op = vm.ruleDefinitions.fieldOps[vm.rule.field][0];
12123 }
12175 }
12124 if ((new_is_compound && !old_was_compound)) {
12176 if ((new_is_compound && !old_was_compound)) {
12125 console.log('resetting config');
12177
12126 delete vm.rule.value;
12178 delete vm.rule.value;
12127 vm.rule.rules = [];
12179 vm.rule.rules = [];
12128 vm.add();
12180 vm.add();
12129 }
12181 }
12130 else if (!new_is_compound && old_was_compound) {
12182 else if (!new_is_compound && old_was_compound) {
12131 console.log('resetting config');
12183
12132 delete vm.rule.rules;
12184 delete vm.rule.rules;
12133 vm.rule.value = '';
12185 vm.rule.value = '';
12134 }
12186 }
@@ -12510,24 +12562,21 b" angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', fun"
12510 $stateProvider.state('applications', {
12562 $stateProvider.state('applications', {
12511 abstract: true,
12563 abstract: true,
12512 url: '/ui/applications',
12564 url: '/ui/applications',
12513 templateUrl: 'templates/applications/parent_view.html'
12565 component: 'settingsView'
12514 });
12566 });
12515
12567
12516 $stateProvider.state('applications.list', {
12568 $stateProvider.state('applications.list', {
12517 url: '/list',
12569 url: '/list',
12518 templateUrl: 'templates/applications/list.html',
12570 component: 'applicationsListView'
12519 controller: 'ApplicationsListController as applications'
12520 });
12571 });
12521 $stateProvider.state('applications.update', {
12572 $stateProvider.state('applications.update', {
12522 url: '/{resourceId}/update',
12573 url: '/{resourceId}/update',
12523 templateUrl: 'templates/applications/applications_update.html',
12574 component: 'applicationsUpdateView'
12524 controller: 'ApplicationsUpdateController as application'
12525 });
12575 });
12526
12576
12527 $stateProvider.state('applications.integrations', {
12577 $stateProvider.state('applications.integrations', {
12528 url: '/{resourceId}/integrations',
12578 url: '/{resourceId}/integrations',
12529 templateUrl: 'templates/applications/integrations.html',
12579 component: 'integrationsListView',
12530 controller: 'IntegrationsListController as integrations',
12531 data: {
12580 data: {
12532 resource: null
12581 resource: null
12533 }
12582 }
@@ -12535,16 +12584,14 b" angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', fun"
12535
12584
12536 $stateProvider.state('applications.purge_logs', {
12585 $stateProvider.state('applications.purge_logs', {
12537 url: '/purge_logs',
12586 url: '/purge_logs',
12538 templateUrl: 'templates/applications/applications_purge_logs.html',
12587 component: 'applicationsPurgeLogsView'
12539 controller: 'ApplicationsPurgeLogsController as applications_purge'
12540 });
12588 });
12541
12589
12542 $stateProvider.state('applications.integrations.edit', {
12590 $stateProvider.state('applications.integrations.edit', {
12543 url: '/{integration}',
12591 url: '/{integration}',
12544 templateUrl: function ($stateParams) {
12592 template: function ($stateParams) {
12545 return 'templates/applications/integrations/' + $stateParams.integration + '.html'
12593 return '<'+ $stateParams.integration + '-integration-config-view>'
12546 },
12594 }
12547 controller: 'IntegrationController as integration'
12548 });
12595 });
12549
12596
12550 $stateProvider.state('tests', {
12597 $stateProvider.state('tests', {
@@ -12927,7 +12974,7 b" angular.module('appenlight.services.stateHolder', []).factory('stateHolder',"
12927 }
12974 }
12928 }
12975 }
12929 }.bind(this));
12976 }.bind(this));
12930 console.log('AeUser.hasContextPermission', permName, hasPerm);
12977
12931 return hasPerm;
12978 return hasPerm;
12932 };
12979 };
12933
12980
@@ -12941,7 +12988,7 b" angular.module('appenlight.services.stateHolder', []).factory('stateHolder',"
12941 list: [],
12988 list: [],
12942 timeout: null,
12989 timeout: null,
12943 extend: function (values) {
12990 extend: function (values) {
12944 console.log('pushing flash', this);
12991
12945 if (this.list.length > 2) {
12992 if (this.list.length > 2) {
12946 this.list.splice(0, this.list.length - 2);
12993 this.list.splice(0, this.list.length - 2);
12947 }
12994 }
@@ -12950,7 +12997,7 b" angular.module('appenlight.services.stateHolder', []).factory('stateHolder',"
12950 this.removeMessages();
12997 this.removeMessages();
12951 },
12998 },
12952 pop: function () {
12999 pop: function () {
12953 console.log('popping flash');
13000
12954 this.list.pop();
13001 this.list.pop();
12955 },
13002 },
12956 cancelTimeout: function () {
13003 cancelTimeout: function () {
@@ -13045,7 +13092,7 b" angular.module('appenlight.services.typeAheadTagHelper', []).factory('typeAheadT"
13045 return true;
13092 return true;
13046 };
13093 };
13047 typeAheadTagHelper.removeSearchTag = function (tag) {
13094 typeAheadTagHelper.removeSearchTag = function (tag) {
13048 console.log(typeAheadTagHelper.tags);
13095
13049 var indexValue = _.indexOf(typeAheadTagHelper.tags, tag);
13096 var indexValue = _.indexOf(typeAheadTagHelper.tags, tag);
13050 typeAheadTagHelper.tags.splice(indexValue, 1);
13097 typeAheadTagHelper.tags.splice(indexValue, 1);
13051
13098
@@ -52,6 +52,18 b" angular.module('appenlight.components', ["
52 'appenlight.components.userAuthTokensView',
52 'appenlight.components.userAuthTokensView',
53 'appenlight.components.userAlertChannelsListView',
53 'appenlight.components.userAlertChannelsListView',
54 'appenlight.components.userAlertChannelsEmailNewView',
54 'appenlight.components.userAlertChannelsEmailNewView',
55 'appenlight.components.applicationsListView',
56 'appenlight.components.applicationsPurgeLogsView',
57 'appenlight.components.applicationsUpdateView',
58 'appenlight.components.integrationsListView',
59 'appenlight.components.bitbucketIntegrationConfigView',
60 'appenlight.components.campfireIntegrationConfigView',
61 'appenlight.components.flowdockIntegrationConfigView',
62 'appenlight.components.githubIntegrationConfigView',
63 'appenlight.components.hipchatIntegrationConfigView',
64 'appenlight.components.jiraIntegrationConfigView',
65 'appenlight.components.slackIntegrationConfigView',
66 'appenlight.components.webhooksIntegrationConfigView',
55 'appenlight.components.settingsView'
67 'appenlight.components.settingsView'
56 ]);
68 ]);
57 angular.module('appenlight.directives', [
69 angular.module('appenlight.directives', [
@@ -1,12 +1,12 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application && $state.is('applications.integrations')"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="$ctrl.loading.application && $state.is('applications.integrations')"></ng-include>
2
2
3 <ui-view>
3 <ui-view>
4 <div class="panel panel-default" ng-show="!integrations.loading.application">
4 <div class="panel panel-default" ng-show="!$ctrl.loading.application">
5 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
5 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
6 <div class="panel-body">
6 <div class="panel-body">
7
7
8 <a class="btn btn-default integration"
8 <a class="btn btn-default integration"
9 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'bitbucket'})">
9 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'bitbucket'})">
10 <span class="fa fa-fw fa-bitbucket fa-3x pull-left"></span>
10 <span class="fa fa-fw fa-bitbucket fa-3x pull-left"></span>
11 <strong>Bitbucket</strong>
11 <strong>Bitbucket</strong>
12
12
@@ -14,7 +14,7 b''
14 </a>
14 </a>
15
15
16 <a class="btn btn-default integration"
16 <a class="btn btn-default integration"
17 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'campfire'})">
17 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'campfire'})">
18 <span class="fa fa-fw fa-comment fa-3x pull-left"></span>
18 <span class="fa fa-fw fa-comment fa-3x pull-left"></span>
19 <strong>Campfire</strong>
19 <strong>Campfire</strong>
20
20
@@ -22,7 +22,7 b''
22 </a>
22 </a>
23
23
24 <a class="btn btn-default integration"
24 <a class="btn btn-default integration"
25 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'flowdock'})">
25 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'flowdock'})">
26 <span class="fa fa-fw fa-envelope fa-3x pull-left"></span>
26 <span class="fa fa-fw fa-envelope fa-3x pull-left"></span>
27 <strong>Flowdock</strong>
27 <strong>Flowdock</strong>
28
28
@@ -31,7 +31,7 b''
31 </a>
31 </a>
32
32
33 <a class="btn btn-default integration"
33 <a class="btn btn-default integration"
34 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'github'})">
34 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'github'})">
35 <span class="fa fa-fw fa-github fa-3x pull-left"></span>
35 <span class="fa fa-fw fa-github fa-3x pull-left"></span>
36 <strong>Github</strong>
36 <strong>Github</strong>
37
37
@@ -39,7 +39,7 b''
39 </a>
39 </a>
40
40
41 <a class="btn btn-default integration"
41 <a class="btn btn-default integration"
42 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'hipchat'})">
42 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'hipchat'})">
43 <span class="fa fa-fw fa-comment fa-3x pull-left"></span>
43 <span class="fa fa-fw fa-comment fa-3x pull-left"></span>
44 <strong>HipChat</strong>
44 <strong>HipChat</strong>
45
45
@@ -47,7 +47,7 b''
47 </a>
47 </a>
48
48
49 <a class="btn btn-default integration"
49 <a class="btn btn-default integration"
50 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'jira'})">
50 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'jira'})">
51 <span class="fa fa-fw fa-ticket fa-3x pull-left"></span>
51 <span class="fa fa-fw fa-ticket fa-3x pull-left"></span>
52 <strong>Jira</strong>
52 <strong>Jira</strong>
53
53
@@ -55,7 +55,7 b''
55 </a>
55 </a>
56
56
57 <a class="btn btn-default integration"
57 <a class="btn btn-default integration"
58 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'slack'})">
58 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'slack'})">
59 <span class="fa fa-fw fa-comment fa-3x pull-left"></span>
59 <span class="fa fa-fw fa-comment fa-3x pull-left"></span>
60 <strong>Slack</strong>
60 <strong>Slack</strong>
61
61
@@ -63,7 +63,7 b''
63 </a>
63 </a>
64
64
65 <a class="btn btn-default integration"
65 <a class="btn btn-default integration"
66 data-ui-sref="applications.integrations.edit({resourceId:integrations.resource.resource_id, integration:'webhooks'})">
66 data-ui-sref="applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'webhooks'})">
67 <span class="fa fa-fw fa-cloud-upload fa-3x pull-left"></span>
67 <span class="fa fa-fw fa-cloud-upload fa-3x pull-left"></span>
68 <strong>Webhooks</strong>
68 <strong>Webhooks</strong>
69
69
@@ -17,12 +17,15 b''
17 // # services, and proprietary license terms, please see
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
18 // # https://rhodecode.com/licenses/
19
19
20 angular.module('appenlight.controllers')
20 angular.module('appenlight.components.integrationsListView', [])
21 .controller('IntegrationsListController', IntegrationsListController)
21 .component('integrationsListView', {
22 templateUrl: 'components/views/applications-integrations-view/applications-integrations-view.html',
23 controller: IntegrationsListViewController
24 });
22
25
23 IntegrationsListController.$inject = ['$state', 'applicationsResource'];
26 IntegrationsListViewController.$inject = ['$state', 'applicationsResource'];
24
27
25 function IntegrationsListController($state, applicationsResource) {
28 function IntegrationsListViewController($state, applicationsResource) {
26 console.debug('IntegrationsListController');
29 console.debug('IntegrationsListController');
27 var vm = this;
30 var vm = this;
28 vm.loading = {application: true};
31 vm.loading = {application: true};
@@ -1,14 +1,14 b''
1 <ng-include src="'templates/loader.html'" ng-if="applications.loading.applications"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="$ctrl.loading.applications"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!applications.loading.applications">
3 <div class="panel panel-default" ng-show="!$ctrl.loading.applications">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body" ng-if="applications.applications.length === 0 ">
5 <div class="panel-body" ng-if="$ctrl.applications.length === 0 ">
6
6
7 <p>You have to create a new application first.</p>
7 <p>You have to create a new application first.</p>
8
8
9 </div>
9 </div>
10
10
11 <table class="table table-striped" ng-if="applications.applications.length > 0">
11 <table class="table table-striped" ng-if="$ctrl.applications.length > 0">
12 <thead>
12 <thead>
13 <tr>
13 <tr>
14 <th class="resource_name">Resource Name</th>
14 <th class="resource_name">Resource Name</th>
@@ -17,7 +17,7 b''
17 </tr>
17 </tr>
18 </thead>
18 </thead>
19 <tbody>
19 <tbody>
20 <tr class="r{{$index+1}}" ng-repeat="application in applications.applications">
20 <tr class="r{{$index+1}}" ng-repeat="application in $ctrl.applications">
21 <td>{{application.resource_name}}</td>
21 <td>{{application.resource_name}}</td>
22 <td>{{application.domains}}</td>
22 <td>{{application.domains}}</td>
23 <td class="options">
23 <td class="options">
@@ -17,14 +17,18 b''
17 // # services, and proprietary license terms, please see
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
18 // # https://rhodecode.com/licenses/
19
19
20 angular.module('appenlight.controllers')
20 angular.module('appenlight.components.applicationsListView', [])
21 .controller('ApplicationsListController', ApplicationsListController)
21 .component('applicationsListView', {
22 templateUrl: 'components/views/applications-list-view/applications-list-view.html',
23 controller: ApplicationsListViewController
24 });
22
25
23 ApplicationsListController.$inject = ['applicationsResource'];
26 ApplicationsListViewController.$inject = ['$state', 'applicationsResource'];
24
27
25 function ApplicationsListController(applicationsResource) {
28 function ApplicationsListViewController($state, applicationsResource) {
26 console.debug('ApplicationsListController');
29 console.debug('ApplicationsListController');
27 var vm = this;
30 var vm = this;
31 vm.$state = $state;
28 vm.loading = {applications: true};
32 vm.loading = {applications: true};
29 vm.applications = applicationsResource.query(null, function(){
33 vm.applications = applicationsResource.query(null, function(){
30 vm.loading.applications = false;
34 vm.loading.applications = false;
@@ -1,17 +1,17 b''
1 <ng-include src="'templates/loader.html'" ng-if="applications_purge.loading.applications"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="$ctrl.loading.applications"></ng-include>
2
2
3 <div ng-show="!applications_purge.loading.applications">
3 <div ng-show="!$ctrl.loading.applications">
4 <div class="panel panel-default">
4 <div class="panel panel-default">
5 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
5 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
6 <div class="panel-body">
6 <div class="panel-body">
7
7
8 <form method="post" class="form-horizontal" name="applications_purge.form" ng-submit="applications_purge.purgeLogs()">
8 <form method="post" class="form-horizontal" name="$ctrl.form" ng-submit="$ctrl.purgeLogs()">
9 <div class="form-group">
9 <div class="form-group">
10 <label class="control-label col-sm-3 col-lg-2">Application:</label>
10 <label class="control-label col-sm-3 col-lg-2">Application:</label>
11
11
12 <div class="col-sm-9 col-lg-10 form-inline">
12 <div class="col-sm-9 col-lg-10 form-inline">
13 <select ng-model="applications_purge.selectedResource" ng-change="applications_purge.getCommonKeys()"
13 <select ng-model="$ctrl.selectedResource" ng-change="$ctrl.getCommonKeys()"
14 ng-options="r.resource_id as r.resource_name for r in applications_purge.applications" class="form-control"></select>
14 ng-options="r.resource_id as r.resource_name for r in $ctrl.applications" class="form-control"></select>
15 </div>
15 </div>
16 </div>
16 </div>
17
17
@@ -19,8 +19,8 b''
19 <label class="control-label col-sm-3 col-lg-2">Namespace:</label>
19 <label class="control-label col-sm-3 col-lg-2">Namespace:</label>
20
20
21 <div class="col-sm-9 col-lg-10">
21 <div class="col-sm-9 col-lg-10">
22 <input type="text" name="namespace" ng-model="applications_purge.namespace"
22 <input type="text" name="namespace" ng-model="$ctrl.namespace"
23 placeholder="Namespace to filter on" uib-typeahead="ns for ns in applications_purge.commonNamespaces"
23 placeholder="Namespace to filter on" uib-typeahead="ns for ns in $ctrl.commonNamespaces"
24 class="form-control">
24 class="form-control">
25 </div>
25 </div>
26 </div>
26 </div>
@@ -17,14 +17,18 b''
17 // # services, and proprietary license terms, please see
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
18 // # https://rhodecode.com/licenses/
19
19
20 angular.module('appenlight.controllers')
20 angular.module('appenlight.components.applicationsPurgeLogsView', [])
21 .controller('ApplicationsPurgeLogsController', ApplicationsPurgeLogsController)
21 .component('applicationsPurgeLogsView', {
22 templateUrl: 'components/views/applications-purge-logs-view/applications-purge-logs-view.html',
23 controller: applicationsPurgeLogsViewController
24 });
22
25
23 ApplicationsPurgeLogsController.$inject = ['applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
26 applicationsPurgeLogsViewController.$inject = ['$state' ,'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
24
27
25 function ApplicationsPurgeLogsController(applicationsResource, sectionViewResource, logsNoIdResource) {
28 function applicationsPurgeLogsViewController($state, applicationsResource, sectionViewResource, logsNoIdResource) {
26 console.debug('ApplicationsPurgeLogsController');
29 console.debug('applicationsPurgeLogsViewController');
27 var vm = this;
30 var vm = this;
31 vm.$state = $state;
28 vm.loading = {applications: true};
32 vm.loading = {applications: true};
29
33
30 vm.namespace = null;
34 vm.namespace = null;
@@ -1,12 +1,12 b''
1 <ng-include src="'templates/loader.html'" ng-if="application.loading.application"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="$ctrl.loading.application"></ng-include>
2
2
3 <div ng-show="!application.loading.application">
3 <div ng-show="!$ctrl.loading.application">
4
4
5 <div class="panel panel-default">
5 <div class="panel panel-default">
6 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
6 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
7 <div class="panel-body">
7 <div class="panel-body">
8
8
9 <div class="row" ng-show="application.resource.resource_id">
9 <div class="row" ng-show="$ctrl.resource.resource_id">
10 <div class="col-sm-6">
10 <div class="col-sm-6">
11
11
12 <uib-tabset>
12 <uib-tabset>
@@ -17,11 +17,11 b''
17
17
18 <p><strong>PRIVATE API KEY:</strong></p>
18 <p><strong>PRIVATE API KEY:</strong></p>
19 <p>
19 <p>
20 <div class="well well-sm">{{ application.resource.api_key }}</div>
20 <div class="well well-sm">{{ $ctrl.resource.api_key }}</div>
21 </p>
21 </p>
22 <p><strong>PUBLIC API KEY</strong> (for javascript clients):</p>
22 <p><strong>PUBLIC API KEY</strong> (for javascript clients):</p>
23 <p>
23 <p>
24 <div class="well well-sm">{{ application.resource.public_key }}</div>
24 <div class="well well-sm">{{ $ctrl.resource.public_key }}</div>
25 </p>
25 </p>
26 <p><small>Your key will be used to identify to which application your data
26 <p><small>Your key will be used to identify to which application your data
27 belongs to please keep them private at all times.</small></p>
27 belongs to please keep them private at all times.</small></p>
@@ -34,11 +34,11 b''
34 </uib-tab-heading>
34 </uib-tab-heading>
35 <p>Are you sure you want to regenerate API KEY for this application?</p>
35 <p>Are you sure you want to regenerate API KEY for this application?</p>
36 <p>All client application keys will need to be updated.</p>
36 <p>All client application keys will need to be updated.</p>
37 <form ng-submit="application.regenerateAPIKeys()" name="application.regenerateAPIKeysForm" class="form-inline">
37 <form ng-submit="$ctrl.regenerateAPIKeys()" name="$ctrl.regenerateAPIKeysForm" class="form-inline">
38 <data-form-errors errors="application.regenerateAPIKeysForm.ae_validation.password"></data-form-errors>
38 <data-form-errors errors="$ctrl.regenerateAPIKeysForm.ae_validation.password"></data-form-errors>
39 <div class="form-group">
39 <div class="form-group">
40 <input type="password" name="confirm"
40 <input type="password" name="confirm"
41 placeholder="Enter your password to proceed" class="form-control" ng-model="application.regenerateAPIKeysPassword">
41 placeholder="Enter your password to proceed" class="form-control" ng-model="$ctrl.regenerateAPIKeysPassword">
42 <input type="submit" class="btn btn-danger" value="Confirm">
42 <input type="submit" class="btn btn-danger" value="Confirm">
43 </div>
43 </div>
44 </form>
44 </form>
@@ -64,75 +64,75 b''
64 </div>
64 </div>
65 </div>
65 </div>
66
66
67 <hr ng-show="application.resource.resource_id">
67 <hr ng-show="$ctrl.resource.resource_id">
68
68
69 <form method="post" class="form-horizontal" name="application.BasicForm" ng-submit="application.updateBasicForm()" novalidate>
69 <form method="post" class="form-horizontal" name="$ctrl.BasicForm" ng-submit="$ctrl.updateBasicForm()" novalidate>
70 <div class="form-group">
70 <div class="form-group">
71 <data-form-errors errors="application.BasicForm.ae_validation.resource_name"></data-form-errors>
71 <data-form-errors errors="$ctrl.BasicForm.ae_validation.resource_name"></data-form-errors>
72 <label class="control-label col-sm-4 col-lg-3">
72 <label class="control-label col-sm-4 col-lg-3">
73 Application name
73 Application name
74 <span class="required">*</span>
74 <span class="required">*</span>
75 </label>
75 </label>
76
76
77 <div class=" col-sm-8 col-lg-9 ">
77 <div class=" col-sm-8 col-lg-9 ">
78 <input class="form-control" name="resource_name" placeholder="Application Name" type="text" ng-model="application.resource.resource_name">
78 <input class="form-control" name="resource_name" placeholder="Application Name" type="text" ng-model="$ctrl.resource.resource_name">
79 </div>
79 </div>
80
80
81
81
82 </div>
82 </div>
83
83
84 <div class="form-group">
84 <div class="form-group">
85 <data-form-errors errors="application.BasicForm.ae_validation.domains"></data-form-errors>
85 <data-form-errors errors="$ctrl.BasicForm.ae_validation.domains"></data-form-errors>
86 <label class="control-label col-sm-4 col-lg-3">
86 <label class="control-label col-sm-4 col-lg-3">
87 Domain names for CORS headers
87 Domain names for CORS headers
88 </label>
88 </label>
89 <div class=" col-sm-8 col-lg-9 ">
89 <div class=" col-sm-8 col-lg-9 ">
90 <textarea class="form-control" name="domains" ng-model="application.resource.domains"></textarea>
90 <textarea class="form-control" name="domains" ng-model="$ctrl.resource.domains"></textarea>
91 <p class="description">Required for Javascript error tracking (one line one domain, skip http:// part)</p>
91 <p class="description">Required for Javascript error tracking (one line one domain, skip http:// part)</p>
92 </div>
92 </div>
93
93
94
94
95 </div>
95 </div>
96 <div class="form-group" ng-show="application.resource.resource_id">
96 <div class="form-group" ng-show="$ctrl.resource.resource_id">
97 <data-form-errors errors="application.BasicForm.ae_validation.default_grouping"></data-form-errors>
97 <data-form-errors errors="$ctrl.BasicForm.ae_validation.default_grouping"></data-form-errors>
98 <label class="control-label col-sm-4 col-lg-3">
98 <label class="control-label col-sm-4 col-lg-3">
99 Default grouping for errors
99 Default grouping for errors
100 </label>
100 </label>
101 <div class=" col-sm-8 col-lg-9 ">
101 <div class=" col-sm-8 col-lg-9 ">
102 <select class="form-control" name="default_grouping" ng-model="application.resource.default_grouping" ng-options="i[0] as i[1] for i in application.groupingOptions"></select>
102 <select class="form-control" name="default_grouping" ng-model="$ctrl.resource.default_grouping" ng-options="i[0] as i[1] for i in $ctrl.groupingOptions"></select>
103 </div>
103 </div>
104
104
105 </div>
105 </div>
106 <div class="form-group" ng-show="application.resource.resource_id">
106 <div class="form-group" ng-show="$ctrl.resource.resource_id">
107 <data-form-errors errors="application.BasicForm.ae_validation.error_report_threshold"></data-form-errors>
107 <data-form-errors errors="$ctrl.BasicForm.ae_validation.error_report_threshold"></data-form-errors>
108 <label class="control-label col-sm-4 col-lg-3">
108 <label class="control-label col-sm-4 col-lg-3">
109 Alert on error reports
109 Alert on error reports
110 <span class="required">*</span>
110 <span class="required">*</span>
111 </label>
111 </label>
112 <div class=" col-sm-8 col-lg-9 ">
112 <div class=" col-sm-8 col-lg-9 ">
113 <input class="form-control" name="error_report_threshold" type="text" ng-model="application.resource.error_report_threshold">
113 <input class="form-control" name="error_report_threshold" type="text" ng-model="$ctrl.resource.error_report_threshold">
114 <p class="description">Application requires to send at least this amount of error reports per minute to open alert</p>
114 <p class="description">Application requires to send at least this amount of error reports per minute to open alert</p>
115 </div>
115 </div>
116 </div>
116 </div>
117 <div class="form-group" ng-show="application.resource.resource_id">
117 <div class="form-group" ng-show="$ctrl.resource.resource_id">
118 <data-form-errors errors="application.BasicForm.ae_validation.slow_report_threshold"></data-form-errors>
118 <data-form-errors errors="$ctrl.BasicForm.ae_validation.slow_report_threshold"></data-form-errors>
119 <label class="control-label col-sm-4 col-lg-3">
119 <label class="control-label col-sm-4 col-lg-3">
120 Alert on slow reports
120 Alert on slow reports
121 <span class="required">*</span>
121 <span class="required">*</span>
122 </label>
122 </label>
123
123
124 <div class=" col-sm-8 col-lg-9 ">
124 <div class=" col-sm-8 col-lg-9 ">
125 <input class="form-control" name="slow_report_threshold" type="text" ng-model="application.resource.slow_report_threshold">
125 <input class="form-control" name="slow_report_threshold" type="text" ng-model="$ctrl.resource.slow_report_threshold">
126 <p class="description">Application requires to send at least this amount of slow reports per minute to open alert</p>
126 <p class="description">Application requires to send at least this amount of slow reports per minute to open alert</p>
127 </div>
127 </div>
128 </div>
128 </div>
129 <div class="form-group" ng-show="application.resource.resource_id">
129 <div class="form-group" ng-show="$ctrl.resource.resource_id">
130 <data-form-errors errors="application.BasicForm.ae_validation.allow_permanent_storage"></data-form-errors>
130 <data-form-errors errors="$ctrl.BasicForm.ae_validation.allow_permanent_storage"></data-form-errors>
131 <label class="control-label col-sm-4 col-lg-3">
131 <label class="control-label col-sm-4 col-lg-3">
132 Permanent logs
132 Permanent logs
133 </label>
133 </label>
134 <div class=" col-sm-8 col-lg-9">
134 <div class=" col-sm-8 col-lg-9">
135 <input class="form-control" name="allow_permanent_storage" type="checkbox" ng-model="application.resource.allow_permanent_storage">
135 <input class="form-control" name="allow_permanent_storage" type="checkbox" ng-model="$ctrl.resource.allow_permanent_storage">
136 <p class="description">Allow permanent storage of logs in separate DB partitions (only administrator can enable this feature)</p>
136 <p class="description">Allow permanent storage of logs in separate DB partitions (only administrator can enable this feature)</p>
137 </div>
137 </div>
138 </div>
138 </div>
@@ -142,34 +142,34 b''
142 </label>
142 </label>
143
143
144 <div class=" col-sm-8 col-lg-9 ">
144 <div class=" col-sm-8 col-lg-9 ">
145 <input class="form-control btn btn-primary" name="submit" type="submit" value="{{application.resource.resource_id? 'Update' : 'Create'}} Application">
145 <input class="form-control btn btn-primary" name="submit" type="submit" value="{{$ctrl.resource.resource_id? 'Update' : 'Create'}} Application">
146 </div>
146 </div>
147 </div>
147 </div>
148 </form>
148 </form>
149 </div>
149 </div>
150 </div>
150 </div>
151
151
152 <div class="panel panel-default" ng-show="application.resource.resource_id">
152 <div class="panel panel-default" ng-show="$ctrl.resource.resource_id">
153 <div class="panel-heading">
153 <div class="panel-heading">
154 <h3 class="panel-title">Plugins</h3>
154 <h3 class="panel-title">Plugins</h3>
155 </div>
155 </div>
156 <div class="panel-body">
156 <div class="panel-body">
157
157
158 <plugin-config resource="application.resource"
158 <plugin-config resource="$ctrl.resource"
159 section="'application.update'"
159 section="'application.update'"
160 ng-if="application.resource.resource_id">
160 ng-if="$ctrl.resource.resource_id">
161 </plugin-config>
161 </plugin-config>
162
162
163 </div>
163 </div>
164 </div>
164 </div>
165
165
166 <div class="panel panel-default m-t-1" ng-show="application.resource.resource_id">
166 <div class="panel panel-default m-t-1" ng-show="$ctrl.resource.resource_id">
167 <div class="panel-heading">
167 <div class="panel-heading">
168 <h3 class="panel-title">API Testing</h3>
168 <h3 class="panel-title">API Testing</h3>
169 </div>
169 </div>
170 <div class="panel-body">
170 <div class="panel-body">
171 <p>Please be sure to add at least one <a data-ui-sref="user.alert_channels.email"><strong>email alert channel</strong></a> for your account.</p>
171 <p>Please be sure to add at least one <a data-ui-sref="user.alert_channels.email"><strong>email alert channel</strong></a> for your account.</p>
172 <p>This will enable AppEnlight to send you notification emails about errors inside your application.</p>
172 <p>This will enable AppEnlight to send you notification emails about errors inside your $ctrl.</p>
173 <p><strong>After this is done you can use this CURL commands to test APIs:</strong></p>
173 <p><strong>After this is done you can use this CURL commands to test APIs:</strong></p>
174 <p>(Please note that the data like execution times is semi randomly generated)</p>
174 <p>(Please note that the data like execution times is semi randomly generated)</p>
175 <uib-tabset>
175 <uib-tabset>
@@ -180,7 +180,7 b''
180
180
181 <div class="codehilite">
181 <div class="codehilite">
182 <pre class="m-a-0">
182 <pre class="m-a-0">
183 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/logs?protocol_version=0.5\&ampapi_key={{application.resource.api_key}} -d '
183 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/logs?protocol_version=0.5\&ampapi_key={{$ctrl.resource.api_key}} -d '
184 [
184 [
185 {
185 {
186 "log_level": "WARNING",
186 "log_level": "WARNING",
@@ -190,7 +190,7 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/logs?pr'
190 "permanent": false,
190 "permanent": false,
191 "primary_key": "random_key",
191 "primary_key": "random_key",
192 "server": "some.server.hostname",
192 "server": "some.server.hostname",
193 "date": "{{application.momentJs.utc().milliseconds(0).toISOString()}}",
193 "date": "{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}",
194 "tags": [["tag1","value"], ["tag2", 5]]
194 "tags": [["tag1","value"], ["tag2", 5]]
195 },
195 },
196 {
196 {
@@ -200,7 +200,7 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/logs?pr'
200 "request_id": "SOME_UUID",
200 "request_id": "SOME_UUID",
201 "permanent": false,
201 "permanent": false,
202 "server": "some.server.hostname",
202 "server": "some.server.hostname",
203 "date": "{{application.momentJs.utc().milliseconds(0).toISOString()}}"
203 "date": "{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}"
204 }
204 }
205 ]'
205 ]'
206 </pre>
206 </pre>
@@ -215,7 +215,7 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/logs?pr'
215
215
216 <div class="codehilite">
216 <div class="codehilite">
217 <pre class="m-a-0">
217 <pre class="m-a-0">
218 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/reports?protocol_version=0.5\&ampapi_key={{application.resource.api_key}} -d '
218 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/reports?protocol_version=0.5\&ampapi_key={{$ctrl.resource.api_key}} -d '
219 [{
219 [{
220 "client": "your-client-name-python",
220 "client": "your-client-name-python",
221 "language": "python",
221 "language": "python",
@@ -229,8 +229,8 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/reports'
229 "username": "USER",
229 "username": "USER",
230 "url": "HTTP://SOMEURL",
230 "url": "HTTP://SOMEURL",
231 "ip": "127.0.0.1",
231 "ip": "127.0.0.1",
232 "start_time": "{{application.momentJs.utc().milliseconds(0).toISOString()}}",
232 "start_time": "{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}",
233 "end_time": "{{application.momentJs.utc().milliseconds(0).add(2, 'seconds').toISOString()}}",
233 "end_time": "{{$ctrl.momentJs.utc().milliseconds(0).add(2, 'seconds').toISOString()}}",
234 "user_agent": "BROWSER_AGENT",
234 "user_agent": "BROWSER_AGENT",
235 "extra": [["message","CUSTOM MESSAGE"], ["custom_value", "some payload"]],
235 "extra": [["message","CUSTOM MESSAGE"], ["custom_value", "some payload"]],
236 "request_id": "SOME_UUID",
236 "request_id": "SOME_UUID",
@@ -239,8 +239,8 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/reports'
239 "POST": {"FOO":"BAZ","XXX":"YYY"}
239 "POST": {"FOO":"BAZ","XXX":"YYY"}
240 },
240 },
241 "slow_calls":[{
241 "slow_calls":[{
242 "start": "{{application.momentJs.utc().milliseconds(0).toISOString()}}",
242 "start": "{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}",
243 "end": "{{application.momentJs.utc().milliseconds(0).add(1, 'seconds').toISOString()}}",
243 "end": "{{$ctrl.momentJs.utc().milliseconds(0).add(1, 'seconds').toISOString()}}",
244 "type": "sql",
244 "type": "sql",
245 "subtype": "postgresql",
245 "subtype": "postgresql",
246 "parameters": ["QPARAM1","QPARAM2","QPARAMX"],
246 "parameters": ["QPARAM1","QPARAM2","QPARAMX"],
@@ -289,10 +289,10 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/reports'
289
289
290 <div class="codehilite">
290 <div class="codehilite">
291 <pre class="m-a-0">
291 <pre class="m-a-0">
292 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/general_metrics?protocol_version=0.5\&ampapi_key={{application.resource.api_key}} -d '
292 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/general_metrics?protocol_version=0.5\&ampapi_key={{$ctrl.resource.api_key}} -d '
293 [{
293 [{
294 "namespace": "some.monitor",
294 "namespace": "some.monitor",
295 "timestamp": "{{application.momentJs.utc().milliseconds(0).toISOString()}}",
295 "timestamp": "{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}",
296 "server_name": "server.name",
296 "server_name": "server.name",
297 "tags": [["value1", 15.7], ["value2", 26]]}]'
297 "tags": [["value1", 15.7], ["value2", 26]]}]'
298 </pre>
298 </pre>
@@ -308,9 +308,9 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/general'
308
308
309 <div class="codehilite">
309 <div class="codehilite">
310 <pre class="m-a-0">
310 <pre class="m-a-0">
311 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/request_stats?protocol_version=0.5\&ampapi_key={{application.resource.api_key}} -d '
311 curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/request_stats?protocol_version=0.5\&ampapi_key={{$ctrl.resource.api_key}} -d '
312 [{"server": "some.server.hostname",
312 [{"server": "some.server.hostname",
313 "timestamp": "{{application.momentJs.utc().milliseconds(0).toISOString()}}",
313 "timestamp": "{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}",
314 "metrics": [["dir/module:func",
314 "metrics": [["dir/module:func",
315 {"custom": 0.0,
315 {"custom": 0.0,
316 "custom_calls": 0,
316 "custom_calls": 0,
@@ -348,10 +348,10 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/request'
348 </div>
348 </div>
349 </div>
349 </div>
350
350
351 <permissions-form resource="application.resource" current-permissions="application.resource.current_permissions"
351 <permissions-form resource="$ctrl.resource" current-permissions="$ctrl.resource.current_permissions"
352 possible-permissions="application.resource.possible_permissions" ng-if="application.resource.resource_id"></permissions-form>
352 possible-permissions="$ctrl.resource.possible_permissions" ng-if="$ctrl.resource.resource_id"></permissions-form>
353
353
354 <div class="panel panel-info" ng-show="application.resource.resource_id">
354 <div class="panel panel-info" ng-show="$ctrl.resource.resource_id">
355 <div class="panel-heading">
355 <div class="panel-heading">
356 <h3 class="panel-title">Postprocessing</h3>
356 <h3 class="panel-title">Postprocessing</h3>
357 </div>
357 </div>
@@ -359,38 +359,38 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/request'
359 <p>This section allows you influence the rating of report groups - if rule is matched once its not executed anymore</p>
359 <p>This section allows you influence the rating of report groups - if rule is matched once its not executed anymore</p>
360
360
361 <p>
361 <p>
362 <a class="btn btn-info" ng-click="application.addRule()"><span class="fa fa-plus-circle"></span> Add rule</a>
362 <a class="btn btn-info" ng-click="$ctrl.addRule()"><span class="fa fa-plus-circle"></span> Add rule</a>
363 </p>
363 </p>
364
364
365 <post-process-action action="action" resource="application.resource" ng-repeat="action in application.resource.postprocessing_rules"></post-process-action>
365 <post-process-action action="action" resource="$ctrl.resource" ng-repeat="action in $ctrl.resource.postprocessing_rules"></post-process-action>
366 </div>
366 </div>
367 </div>
367 </div>
368
368
369 <div class="panel panel-danger" ng-show="application.resource.resource_id">
369 <div class="panel panel-danger" ng-show="$ctrl.resource.resource_id">
370 <div class="panel-heading">
370 <div class="panel-heading">
371 <h3 class="panel-title">Administration</h3>
371 <h3 class="panel-title">Administration</h3>
372 </div>
372 </div>
373 <div class="panel-body">
373 <div class="panel-body">
374 <h2>Transfer ownership</h2>
374 <h2>Transfer ownership</h2>
375 <p>Please note that by transfering ownership you WILL lose access to the application data and new owner needs to give you access permission</p>
375 <p>Please note that by transfering ownership you WILL lose access to the application data and new owner needs to give you access permission</p>
376 <div class="confirmation_form" ng-submit="application.transferApplication()">
376 <div class="confirmation_form" ng-submit="$ctrl.transferApplication()">
377 <form class="form-horizontal" name="application.formTransfer">
377 <form class="form-horizontal" name="$ctrl.formTransfer">
378 <div class="form-group">
378 <div class="form-group">
379 <data-form-errors errors="application.formTransfer.ae_validation.password"></data-form-errors>
379 <data-form-errors errors="$ctrl.formTransfer.ae_validation.password"></data-form-errors>
380 <label class="control-label col-sm-4 col-lg-3">
380 <label class="control-label col-sm-4 col-lg-3">
381 Password
381 Password
382 </label>
382 </label>
383 <div class="col-sm-8 col-lg-9">
383 <div class="col-sm-8 col-lg-9">
384 <input class="form-control" name="password" type="password" ng-model="application.formTransferModel.password">
384 <input class="form-control" name="password" type="password" ng-model="$ctrl.formTransferModel.password">
385 </div>
385 </div>
386 </div>
386 </div>
387 <div class="form-group">
387 <div class="form-group">
388 <data-form-errors errors="application.formTransfer.ae_validation.user_name"></data-form-errors>
388 <data-form-errors errors="$ctrl.formTransfer.ae_validation.user_name"></data-form-errors>
389 <label class="control-label col-sm-4 col-lg-3">
389 <label class="control-label col-sm-4 col-lg-3">
390 New owners username
390 New owners username
391 </label>
391 </label>
392 <div class="col-sm-8 col-lg-9">
392 <div class="col-sm-8 col-lg-9">
393 <input class="form-control" name="user_name" type="text" ng-model="application.formTransferModel.user_name">
393 <input class="form-control" name="user_name" type="text" ng-model="$ctrl.formTransferModel.user_name">
394 </div>
394 </div>
395 </div>
395 </div>
396 <div class="form-group">
396 <div class="form-group">
@@ -412,14 +412,14 b' curl -H "Content-Type: application/json" -k {{AeConfig.urls.baseUrl}}api/request'
412 <p><strong>This operation will wipe out all data from database - there is no undo.</strong></p>
412 <p><strong>This operation will wipe out all data from database - there is no undo.</strong></p>
413
413
414 <div class="confirmation_form">
414 <div class="confirmation_form">
415 <form class="form-horizontal" name="application.formDelete" ng-submit="application.deleteApplication()">
415 <form class="form-horizontal" name="$ctrl.formDelete" ng-submit="$ctrl.deleteApplication()">
416 <div class="form-group">
416 <div class="form-group">
417 <data-form-errors errors="application.formDelete.ae_validation.password"></data-form-errors>
417 <data-form-errors errors="$ctrl.formDelete.ae_validation.password"></data-form-errors>
418 <label class="control-label col-sm-4 col-lg-3">
418 <label class="control-label col-sm-4 col-lg-3">
419 Password
419 Password
420 </label>
420 </label>
421 <div class="col-sm-8 col-lg-9">
421 <div class="col-sm-8 col-lg-9">
422 <input class="form-control" name="password" type="password" ng-model="application.formDeleteModel.password">
422 <input class="form-control" name="password" type="password" ng-model="$ctrl.formDeleteModel.password">
423 </div>
423 </div>
424 </div>
424 </div>
425 <div class="form-group">
425 <div class="form-group">
@@ -17,15 +17,19 b''
17 // # services, and proprietary license terms, please see
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
18 // # https://rhodecode.com/licenses/
19
19
20 angular.module('appenlight.controllers')
20 angular.module('appenlight.components.applicationsUpdateView', [])
21 .controller('ApplicationsUpdateController', ApplicationsUpdateController)
21 .component('applicationsUpdateView', {
22 templateUrl: 'components/views/applications-update-view/applications-update-view.html',
23 controller: applicationsUpdateViewController
24 });
22
25
23 ApplicationsUpdateController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder'];
26 applicationsUpdateViewController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder'];
24
27
25 function ApplicationsUpdateController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder) {
28 function applicationsUpdateViewController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder) {
26 'use strict';
29 'use strict';
27 console.debug('ApplicationsUpdateController');
30 console.debug('applicationsUpdateView');
28 var vm = this;
31 var vm = this;
32 vm.$state = $state;
29 vm.loading = {application: false};
33 vm.loading = {application: false};
30
34
31 vm.groupingOptions = [
35 vm.groupingOptions = [
@@ -33,14 +37,9 b' function ApplicationsUpdateController($state, applicationsNoIdResource, applicat'
33 ['url_traceback', 'Traceback + location'],
37 ['url_traceback', 'Traceback + location'],
34 ['traceback_server', 'Traceback + Server'],
38 ['traceback_server', 'Traceback + Server'],
35 ];
39 ];
36
37 var resourceId = $state.params.resourceId;
40 var resourceId = $state.params.resourceId;
38
39
40 var options = {};
41 var options = {};
41
42 vm.momentJs = moment;
42 vm.momentJs = moment;
43
44 vm.formTransferModel = {password:''};
43 vm.formTransferModel = {password:''};
45
44
46 // set initial data
45 // set initial data
@@ -17,14 +17,13 b''
17 // # services, and proprietary license terms, please see
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
18 // # https://rhodecode.com/licenses/
19
19
20 angular.module('appenlight.controllers')
21 .controller('IntegrationController', IntegrationController)
22
20
23 IntegrationController.$inject = ['$state', 'integrationResource'];
21 ApplicationsIntegrationsEditViewController.$inject = ['$state', 'integrationResource'];
24
22
25 function IntegrationController($state, integrationResource) {
23 function ApplicationsIntegrationsEditViewController($state, integrationResource) {
26 console.debug('IntegrationController');
24 console.debug('IntegrationController');
27 var vm = this;
25 var vm = this;
26 vm.$state = $state;
28 vm.loading = {integration: true};
27 vm.loading = {integration: true};
29 vm.config = integrationResource.get(
28 vm.config = integrationResource.get(
30 {
29 {
@@ -68,13 +67,13 b' function IntegrationController($state, integrationResource) {'
68 );
67 );
69 }
68 }
70
69
71 vm.testIntegration = function(to_test){
70 vm.testIntegration = function (to_test) {
72 console.info('testIntegration', to_test);
71 console.info('testIntegration', to_test);
73 vm.loading.integration = true;
72 vm.loading.integration = true;
74 integrationResource.save(
73 integrationResource.save(
75 {
74 {
76 integration: $state.params.integration,
75 integration: $state.params.integration,
77 action: 'test_'+ to_test,
76 action: 'test_' + to_test,
78 resourceId: $state.params.resourceId
77 resourceId: $state.params.resourceId
79 }, vm.config, function (data) {
78 }, vm.config, function (data) {
80 vm.loading.integration = false;
79 vm.loading.integration = false;
@@ -1,26 +1,26 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Bitbucket Integration</h1>
7 <h1>Bitbucket Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10 <div class="form-group">
10 <div class="form-group">
11
11
12 <label class="control-label col-sm-3 col-lg-2">Repository</label>
12 <label class="control-label col-sm-3 col-lg-2">Repository</label>
13
13
14 <div class="col-sm-8 col-lg-9">
14 <div class="col-sm-8 col-lg-9">
15
15
16 <data-form-errors errors="integration.integrationForm.ae_validation.user_name"></data-form-errors>
16 <data-form-errors errors="$ctrl.integrationForm.ae_validation.user_name"></data-form-errors>
17 <data-form-errors errors="integration.integrationForm.ae_validation.repo_name"></data-form-errors>
17 <data-form-errors errors="$ctrl.integrationForm.ae_validation.repo_name"></data-form-errors>
18
18
19 <div class="input-group">
19 <div class="input-group">
20 <div class="input-group-addon">https://bitbucket.org/</div>
20 <div class="input-group-addon">https://bitbucket.org/</div>
21 <input class="form-control" ng-model="integration.config.user_name" placeholder="user" type="text">
21 <input class="form-control" ng-model="$ctrl.config.user_name" placeholder="user" type="text">
22 <div class="input-group-addon">/</div>
22 <div class="input-group-addon">/</div>
23 <input class="form-control" ng-model="integration.config.repo_name" placeholder="repo_name" type="text">
23 <input class="form-control" ng-model="$ctrl.config.repo_name" placeholder="repo_name" type="text">
24 </div>
24 </div>
25
25
26 </div>
26 </div>
@@ -35,7 +35,7 b''
35 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
35 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
36 <ul class="dropdown-menu">
36 <ul class="dropdown-menu">
37 <li><a>No</a></li>
37 <li><a>No</a></li>
38 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
38 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
39 </ul>
39 </ul>
40 </span>
40 </span>
41 </div>
41 </div>
@@ -1,21 +1,21 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6 <h1>Campfire Integration</h1>
6 <h1>Campfire Integration</h1>
7
7
8 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
8 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
9
9
10 <div class="form-group">
10 <div class="form-group">
11
11
12 <label class="control-label col-sm-3 col-lg-2">Account name</label>
12 <label class="control-label col-sm-3 col-lg-2">Account name</label>
13 <div class="col-sm-8 col-lg-9">
13 <div class="col-sm-8 col-lg-9">
14 <data-form-errors errors="integration.integrationForm.ae_validation.user_name"></data-form-errors>
14 <data-form-errors errors="$ctrl.integrationForm.ae_validation.user_name"></data-form-errors>
15
15
16 <div class="input-group">
16 <div class="input-group">
17 <div class="input-group-addon">http://</div>
17 <div class="input-group-addon">http://</div>
18 <input class="form-control" ng-model="integration.config.account" placeholder="account">
18 <input class="form-control" ng-model="$ctrl.config.account" placeholder="account">
19 <div class="input-group-addon">.campfirenow.com</div>
19 <div class="input-group-addon">.campfirenow.com</div>
20 </div>
20 </div>
21 </div>
21 </div>
@@ -24,16 +24,16 b''
24 <div class="form-group">
24 <div class="form-group">
25 <label class="control-label col-sm-3 col-lg-2">API Token</label>
25 <label class="control-label col-sm-3 col-lg-2">API Token</label>
26 <div class="col-sm-8 col-lg-9">
26 <div class="col-sm-8 col-lg-9">
27 <data-form-errors errors="integration.integrationForm.ae_validation.api_token"></data-form-errors>
27 <data-form-errors errors="$ctrl.integrationForm.ae_validation.api_token"></data-form-errors>
28 <input class="form-control" ng-model="integration.config.api_token" placeholder="Your API token">
28 <input class="form-control" ng-model="$ctrl.config.api_token" placeholder="Your API token">
29 </div>
29 </div>
30 </div>
30 </div>
31
31
32 <div class="form-group">
32 <div class="form-group">
33 <label class="control-label col-sm-3 col-lg-2">Room ID list</label>
33 <label class="control-label col-sm-3 col-lg-2">Room ID list</label>
34 <div class="col-sm-8 col-lg-9">
34 <div class="col-sm-8 col-lg-9">
35 <data-form-errors errors="integration.integrationForm.ae_validation.rooms"></data-form-errors>
35 <data-form-errors errors="$ctrl.integrationForm.ae_validation.rooms"></data-form-errors>
36 <input class="form-control" ng-model="integration.config.rooms" placeholder="Room ID list">
36 <input class="form-control" ng-model="$ctrl.config.rooms" placeholder="Room ID list">
37 <p>
37 <p>
38 <small>Room ID list separated by comma</small>
38 <small>Room ID list separated by comma</small>
39 </p>
39 </p>
@@ -46,7 +46,7 b''
46 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
46 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
47 <ul class="dropdown-menu">
47 <ul class="dropdown-menu">
48 <li><a>No</a></li>
48 <li><a>No</a></li>
49 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
49 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
50 </ul>
50 </ul>
51 </span>
51 </span>
52
52
@@ -55,11 +55,11 b''
55 Test integration <span class="caret"></span>
55 Test integration <span class="caret"></span>
56 </button>
56 </button>
57 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
57 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
58 <li role="menuitem"><a ng-click="integration.testIntegration('report_notification')">Test report notification</a></li>
58 <li role="menuitem"><a ng-click="$ctrl.testIntegration('report_notification')">Test report notification</a></li>
59 <li role="menuitem"><a ng-click="integration.testIntegration('error_alert')">Test error alert</a></li>
59 <li role="menuitem"><a ng-click="$ctrl.testIntegration('error_alert')">Test error alert</a></li>
60 <li role="menuitem"><a ng-click="integration.testIntegration('uptime_alert')">Test uptime alert</a></li>
60 <li role="menuitem"><a ng-click="$ctrl.testIntegration('uptime_alert')">Test uptime alert</a></li>
61 <li role="menuitem"><a ng-click="integration.testIntegration('chart_alert')">Test chart alert</a></li>
61 <li role="menuitem"><a ng-click="$ctrl.testIntegration('chart_alert')">Test chart alert</a></li>
62 <li role="menuitem"><a ng-click="integration.testIntegration('daily_digest')">Test daily digest</a></li>
62 <li role="menuitem"><a ng-click="$ctrl.testIntegration('daily_digest')">Test daily digest</a></li>
63 </ul>
63 </ul>
64 </div>
64 </div>
65
65
@@ -1,20 +1,20 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Flowdock Integration</h1>
7 <h1>Flowdock Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10
10
11 <div class="form-group">
11 <div class="form-group">
12
12
13 <label class="control-label col-sm-3 col-lg-2">API Token</label>
13 <label class="control-label col-sm-3 col-lg-2">API Token</label>
14
14
15 <div class="col-sm-8 col-lg-9">
15 <div class="col-sm-8 col-lg-9">
16 <data-form-errors errors="integration.integrationForm.ae_validation.api_token"></data-form-errors>
16 <data-form-errors errors="$ctrl.integrationForm.ae_validation.api_token"></data-form-errors>
17 <input class="form-control" ng-model="integration.config.api_token" placeholder="Your API token" type="text">
17 <input class="form-control" ng-model="$ctrl.config.api_token" placeholder="Your API token" type="text">
18 </div>
18 </div>
19
19
20
20
@@ -32,7 +32,7 b''
32 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
32 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
33 <ul class="dropdown-menu">
33 <ul class="dropdown-menu">
34 <li><a>No</a></li>
34 <li><a>No</a></li>
35 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
35 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
36 </ul>
36 </ul>
37 </span>
37 </span>
38 <div class="btn-group" uib-dropdown>
38 <div class="btn-group" uib-dropdown>
@@ -40,11 +40,11 b''
40 Test integration <span class="caret"></span>
40 Test integration <span class="caret"></span>
41 </button>
41 </button>
42 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
42 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
43 <li role="menuitem"><a ng-click="integration.testIntegration('report_notification')">Test report notification</a></li>
43 <li role="menuitem"><a ng-click="$ctrl.testIntegration('report_notification')">Test report notification</a></li>
44 <li role="menuitem"><a ng-click="integration.testIntegration('error_alert')">Test error alert</a></li>
44 <li role="menuitem"><a ng-click="$ctrl.testIntegration('error_alert')">Test error alert</a></li>
45 <li role="menuitem"><a ng-click="integration.testIntegration('uptime_alert')">Test uptime alert</a></li>
45 <li role="menuitem"><a ng-click="$ctrl.testIntegration('uptime_alert')">Test uptime alert</a></li>
46 <li role="menuitem"><a ng-click="integration.testIntegration('chart_alert')">Test chart alert</a></li>
46 <li role="menuitem"><a ng-click="$ctrl.testIntegration('chart_alert')">Test chart alert</a></li>
47 <li role="menuitem"><a ng-click="integration.testIntegration('daily_digest')">Test daily digest</a></li>
47 <li role="menuitem"><a ng-click="$ctrl.testIntegration('daily_digest')">Test daily digest</a></li>
48 </ul>
48 </ul>
49 </div>
49 </div>
50 </div>
50 </div>
@@ -1,12 +1,12 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="$ctrl.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!$ctrl.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Github Integration</h1>
7 <h1>Github Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10
10
11
11
12 <div class="form-group">
12 <div class="form-group">
@@ -15,14 +15,14 b''
15
15
16 <div class="col-sm-8 col-lg-9">
16 <div class="col-sm-8 col-lg-9">
17
17
18 <data-form-errors errors="integration.integrationForm.ae_validation.user_name"></data-form-errors>
18 <data-form-errors errors="$ctrl.integrationForm.ae_validation.user_name"></data-form-errors>
19 <data-form-errors errors="integration.integrationForm.ae_validation.repo_name"></data-form-errors>
19 <data-form-errors errors="$ctrl.integrationForm.ae_validation.repo_name"></data-form-errors>
20
20
21 <div class="input-group">
21 <div class="input-group">
22 <div class="input-group-addon">https://api.github.com/</div>
22 <div class="input-group-addon">https://api.github.com/</div>
23 <input class="form-control" ng-model="integration.config.user_name" placeholder="user" type="text">
23 <input class="form-control" ng-model="$ctrl.config.user_name" placeholder="user" type="text">
24 <div class="input-group-addon">/</div>
24 <div class="input-group-addon">/</div>
25 <input class="form-control" ng-model="integration.config.repo_name" placeholder="repo_name" type="text">
25 <input class="form-control" ng-model="$ctrl.config.repo_name" placeholder="repo_name" type="text">
26 </div>
26 </div>
27
27
28 </div>
28 </div>
@@ -38,7 +38,7 b''
38 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
38 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
39 <ul class="dropdown-menu">
39 <ul class="dropdown-menu">
40 <li><a>No</a></li>
40 <li><a>No</a></li>
41 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
41 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
42 </ul>
42 </ul>
43 </span>
43 </span>
44
44
@@ -1,19 +1,19 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Hipchat Integration</h1>
7 <h1>Hipchat Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10
10
11 <div class="form-group">
11 <div class="form-group">
12 <label class="control-label col-sm-3 col-lg-2">API Token</label>
12 <label class="control-label col-sm-3 col-lg-2">API Token</label>
13
13
14 <div class="col-sm-8 col-lg-9">
14 <div class="col-sm-8 col-lg-9">
15 <data-form-errors errors="integration.integrationForm.ae_validation.api_token"></data-form-errors>
15 <data-form-errors errors="$ctrl.integrationForm.ae_validation.api_token"></data-form-errors>
16 <input class="form-control" ng-model="integration.config.api_token" placeholder="Your API token" type="text">
16 <input class="form-control" ng-model="$ctrl.config.api_token" placeholder="Your API token" type="text">
17 </div>
17 </div>
18 </div>
18 </div>
19
19
@@ -22,8 +22,8 b''
22 <label class="control-label col-sm-3 col-lg-2">Room ID list</label>
22 <label class="control-label col-sm-3 col-lg-2">Room ID list</label>
23
23
24 <div class="col-sm-8 col-lg-9">
24 <div class="col-sm-8 col-lg-9">
25 <data-form-errors errors="integration.integrationForm.ae_validation.rooms"></data-form-errors>
25 <data-form-errors errors="$ctrl.integrationForm.ae_validation.rooms"></data-form-errors>
26 <input class="form-control" ng-model="integration.config.rooms" placeholder="Room ID list" type="text">
26 <input class="form-control" ng-model="$ctrl.config.rooms" placeholder="Room ID list" type="text">
27
27
28 <p>
28 <p>
29 <small>Room ID list separated by comma</small>
29 <small>Room ID list separated by comma</small>
@@ -40,7 +40,7 b''
40 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
40 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
41 <ul class="dropdown-menu">
41 <ul class="dropdown-menu">
42 <li><a>No</a></li>
42 <li><a>No</a></li>
43 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
43 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
44 </ul>
44 </ul>
45 </span>
45 </span>
46
46
@@ -49,11 +49,11 b''
49 Test integration <span class="caret"></span>
49 Test integration <span class="caret"></span>
50 </button>
50 </button>
51 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
51 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
52 <li role="menuitem"><a ng-click="integration.testIntegration('report_notification')">Test report notification</a></li>
52 <li role="menuitem"><a ng-click="$ctrl.testIntegration('report_notification')">Test report notification</a></li>
53 <li role="menuitem"><a ng-click="integration.testIntegration('error_alert')">Test error alert</a></li>
53 <li role="menuitem"><a ng-click="$ctrl.testIntegration('error_alert')">Test error alert</a></li>
54 <li role="menuitem"><a ng-click="integration.testIntegration('uptime_alert')">Test uptime alert</a></li>
54 <li role="menuitem"><a ng-click="$ctrl.testIntegration('uptime_alert')">Test uptime alert</a></li>
55 <li role="menuitem"><a ng-click="integration.testIntegration('chart_alert')">Test chart alert</a></li>
55 <li role="menuitem"><a ng-click="$ctrl.testIntegration('chart_alert')">Test chart alert</a></li>
56 <li role="menuitem"><a ng-click="integration.testIntegration('daily_digest')">Test daily digest</a></li>
56 <li role="menuitem"><a ng-click="$ctrl.testIntegration('daily_digest')">Test daily digest</a></li>
57 </ul>
57 </ul>
58 </div>
58 </div>
59
59
@@ -1,12 +1,12 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Jira Integration</h1>
7 <h1>Jira Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10
10
11 <div class="form-group" id="row-host_name">
11 <div class="form-group" id="row-host_name">
12
12
@@ -14,8 +14,8 b''
14 Server URL <span class="required">*</span>
14 Server URL <span class="required">*</span>
15 </label>
15 </label>
16 <div class="col-sm-8 col-lg-9">
16 <div class="col-sm-8 col-lg-9">
17 <data-form-errors errors="integration.integrationForm.ae_validation.host_name"></data-form-errors>
17 <data-form-errors errors="$ctrl.integrationForm.ae_validation.host_name"></data-form-errors>
18 <input class="form-control" id="host_name" name="host_name" type="text" ng-model="integration.config.host_name">
18 <input class="form-control" id="host_name" name="host_name" type="text" ng-model="$ctrl.config.host_name">
19
19
20 <p>
20 <p>
21 <small>https://servername.atlassian.net</small>
21 <small>https://servername.atlassian.net</small>
@@ -30,8 +30,8 b''
30 </label>
30 </label>
31 <div class="col-sm-8 col-lg-9">
31 <div class="col-sm-8 col-lg-9">
32
32
33 <data-form-errors errors="integration.integrationForm.ae_validation.user_name"></data-form-errors>
33 <data-form-errors errors="$ctrl.integrationForm.ae_validation.user_name"></data-form-errors>
34 <input class="form-control" id="user_name" name="user_name" type="text" ng-model="integration.config.user_name">
34 <input class="form-control" id="user_name" name="user_name" type="text" ng-model="$ctrl.config.user_name">
35
35
36 <p>
36 <p>
37 <small>user@email.com</small>
37 <small>user@email.com</small>
@@ -45,8 +45,8 b''
45 Password <span class="required">*</span>
45 Password <span class="required">*</span>
46 </label>
46 </label>
47 <div class="col-sm-8 col-lg-9">
47 <div class="col-sm-8 col-lg-9">
48 <data-form-errors errors="integration.integrationForm.ae_validation.password"></data-form-errors>
48 <data-form-errors errors="$ctrl.integrationForm.ae_validation.password"></data-form-errors>
49 <input class="form-control" id="password" name="password" type="password" ng-model="integration.config.password">
49 <input class="form-control" id="password" name="password" type="password" ng-model="$ctrl.config.password">
50 </div>
50 </div>
51 </div>
51 </div>
52 <div class="form-group" id="row-project">
52 <div class="form-group" id="row-project">
@@ -55,8 +55,8 b''
55 Project key <span class="required">*</span>
55 Project key <span class="required">*</span>
56 </label>
56 </label>
57 <div class="col-sm-8 col-lg-9">
57 <div class="col-sm-8 col-lg-9">
58 <data-form-errors errors="integration.integrationForm.ae_validation.project"></data-form-errors>
58 <data-form-errors errors="$ctrl.integrationForm.ae_validation.project"></data-form-errors>
59 <input class="form-control" id="project" name="project" type="text" ng-model="integration.config.project">
59 <input class="form-control" id="project" name="project" type="text" ng-model="$ctrl.config.project">
60 </div>
60 </div>
61 </div>
61 </div>
62 <div class="form-group" id="row-submit">
62 <div class="form-group" id="row-submit">
@@ -68,7 +68,7 b''
68 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
68 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
69 <ul class="dropdown-menu">
69 <ul class="dropdown-menu">
70 <li><a>No</a></li>
70 <li><a>No</a></li>
71 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
71 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
72 </ul>
72 </ul>
73 </span>
73 </span>
74 </div>
74 </div>
@@ -1,12 +1,12 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Slack Integration</h1>
7 <h1>Slack Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10
10
11 <div class="form-group">
11 <div class="form-group">
12
12
@@ -14,8 +14,8 b''
14 API Token <span class="required">*</span>
14 API Token <span class="required">*</span>
15 </label>
15 </label>
16 <div class="col-sm-8 col-lg-9">
16 <div class="col-sm-8 col-lg-9">
17 <data-form-errors errors="integration.integrationForm.ae_validation.webhook_url"></data-form-errors>
17 <data-form-errors errors="$ctrl.integrationForm.ae_validation.webhook_url"></data-form-errors>
18 <input class="form-control" ng-model="integration.config.webhook_url" placeholder="Webhook URL" type="webhook_url">
18 <input class="form-control" ng-model="$ctrl.config.webhook_url" placeholder="Webhook URL" type="webhook_url">
19 </div>
19 </div>
20 </div>
20 </div>
21
21
@@ -30,7 +30,7 b''
30 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
30 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
31 <ul class="dropdown-menu">
31 <ul class="dropdown-menu">
32 <li><a>No</a></li>
32 <li><a>No</a></li>
33 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
33 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
34 </ul>
34 </ul>
35 </span>
35 </span>
36
36
@@ -39,11 +39,11 b''
39 Test integration <span class="caret"></span>
39 Test integration <span class="caret"></span>
40 </button>
40 </button>
41 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
41 <ul class="dropdown-menu" role="menu" aria-labelledby="single-button">
42 <li role="menuitem"><a ng-click="integration.testIntegration('report_notification')">Test report notification</a></li>
42 <li role="menuitem"><a ng-click="$ctrl.testIntegration('report_notification')">Test report notification</a></li>
43 <li role="menuitem"><a ng-click="integration.testIntegration('error_alert')">Test error alert</a></li>
43 <li role="menuitem"><a ng-click="$ctrl.testIntegration('error_alert')">Test error alert</a></li>
44 <li role="menuitem"><a ng-click="integration.testIntegration('uptime_alert')">Test uptime alert</a></li>
44 <li role="menuitem"><a ng-click="$ctrl.testIntegration('uptime_alert')">Test uptime alert</a></li>
45 <li role="menuitem"><a ng-click="integration.testIntegration('chart_alert')">Test chart alert</a></li>
45 <li role="menuitem"><a ng-click="$ctrl.testIntegration('chart_alert')">Test chart alert</a></li>
46 <li role="menuitem"><a ng-click="integration.testIntegration('daily_digest')">Test daily digest</a></li>
46 <li role="menuitem"><a ng-click="$ctrl.testIntegration('daily_digest')">Test daily digest</a></li>
47 </ul>
47 </ul>
48 </div>
48 </div>
49 </div>
49 </div>
@@ -1,20 +1,20 b''
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || integration.loading.integration"></ng-include>
1 <ng-include src="'templates/loader.html'" ng-if="integrations.loading.application || $ctrl.loading.integration"></ng-include>
2
2
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !integration.loading.integration">
3 <div class="panel panel-default" ng-show="!integrations.loading.application && !$ctrl.loading.integration">
4 <div class="panel-heading" ng-include="'templates/applications/breadcrumbs.html'"></div>
4 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
5 <div class="panel-body">
5 <div class="panel-body">
6
6
7 <h1>Webhooks Integration</h1>
7 <h1>Webhooks Integration</h1>
8
8
9 <form name="integration.integrationForm" ng-submit="integration.configureIntegration()" class="form-horizontal">
9 <form name="$ctrl.integrationForm" ng-submit="$ctrl.configureIntegration()" class="form-horizontal">
10 <div class="form-group" id="row-reports_webhook">
10 <div class="form-group" id="row-reports_webhook">
11
11
12 <label class="control-label col-sm-3 col-lg-2">
12 <label class="control-label col-sm-3 col-lg-2">
13 Reports webhook <span class="required">*</span>
13 Reports webhook <span class="required">*</span>
14 </label>
14 </label>
15 <div class="col-sm-8 col-lg-9">
15 <div class="col-sm-8 col-lg-9">
16 <data-form-errors errors="integration.integrationForm.ae_validation.reports_webhook"></data-form-errors>
16 <data-form-errors errors="$ctrl.integrationForm.ae_validation.reports_webhook"></data-form-errors>
17 <input class="form-control" id="reports_webhook" name="reports_webhook" type="text" ng-model="integration.config.reports_webhook">
17 <input class="form-control" id="reports_webhook" name="reports_webhook" type="text" ng-model="$ctrl.config.reports_webhook">
18 </div>
18 </div>
19 </div>
19 </div>
20 <div class="form-group" id="row-alerts_webhook">
20 <div class="form-group" id="row-alerts_webhook">
@@ -23,8 +23,8 b''
23 Alerts webhook <span class="required">*</span>
23 Alerts webhook <span class="required">*</span>
24 </label>
24 </label>
25 <div class="col-sm-8 col-lg-9">
25 <div class="col-sm-8 col-lg-9">
26 <data-form-errors errors="integration.integrationForm.ae_validation.alerts_webhook"></data-form-errors>
26 <data-form-errors errors="$ctrl.integrationForm.ae_validation.alerts_webhook"></data-form-errors>
27 <input class="form-control StringField None" id="alerts_webhook" name="alerts_webhook" type="text" ng-model="integration.config.alerts_webhook">
27 <input class="form-control StringField None" id="alerts_webhook" name="alerts_webhook" type="text" ng-model="$ctrl.config.alerts_webhook">
28 </div>
28 </div>
29
29
30
30
@@ -38,7 +38,7 b''
38 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
38 <a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Remove Integration</a>
39 <ul class="dropdown-menu">
39 <ul class="dropdown-menu">
40 <li><a>No</a></li>
40 <li><a>No</a></li>
41 <li><a ng-click="integration.removeIntegration()">Yes</a></li>
41 <li><a ng-click="$ctrl.removeIntegration()">Yes</a></li>
42 </ul>
42 </ul>
43 </span>
43 </span>
44 </div>
44 </div>
@@ -3,7 +3,7 b''
3 <div ng-show="!$ctrl.loading.email">
3 <div ng-show="!$ctrl.loading.email">
4
4
5 <div class="panel panel-default">
5 <div class="panel panel-default">
6 <div class="panel-heading" ng-include="'templates/user/breadcrumbs.html'"></div>
6 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
7 <div class="panel-body">
7 <div class="panel-body">
8 <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>
8 <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>
9 <form class="form-horizontal" name="$ctrl.channelForm" ng-submit="$ctrl.createChannel()">
9 <form class="form-horizontal" name="$ctrl.channelForm" ng-submit="$ctrl.createChannel()">
@@ -3,7 +3,7 b''
3 <div ng-if="!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions">
3 <div ng-if="!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions">
4
4
5 <div class="panel panel-default">
5 <div class="panel panel-default">
6 <div class="panel-heading" ng-include="'templates/user/breadcrumbs.html'"></div>
6 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
7 <div class="panel-body">
7 <div class="panel-body">
8 <h1>Report alert rules</h1>
8 <h1>Report alert rules</h1>
9 <p>
9 <p>
@@ -3,7 +3,7 b''
3 <div ng-show="!$ctrl.loading.tokens">
3 <div ng-show="!$ctrl.loading.tokens">
4
4
5 <div class="panel panel-default">
5 <div class="panel panel-default">
6 <div class="panel-heading" ng-include="'templates/user/breadcrumbs.html'"></div>
6 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
7
7
8 <div class="panel-body">
8 <div class="panel-body">
9
9
@@ -3,7 +3,7 b''
3 <div ng-show="!$ctrl.loading.identities">
3 <div ng-show="!$ctrl.loading.identities">
4
4
5 <div class="panel panel-default">
5 <div class="panel panel-default">
6 <div class="panel-heading" ng-include="'templates/user/breadcrumbs.html'"></div>
6 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
7 <div class="panel-body">
7 <div class="panel-body">
8
8
9 <div class="col-sm-6">
9 <div class="col-sm-6">
@@ -3,7 +3,7 b''
3 <div ng-show="!$ctrl.loading.password">
3 <div ng-show="!$ctrl.loading.password">
4
4
5 <div class="panel panel-default">
5 <div class="panel panel-default">
6 <div class="panel-heading" ng-include="'templates/user/breadcrumbs.html'"></div>
6 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
7 <div class="panel-body">
7 <div class="panel-body">
8
8
9 <form class="form-horizontal" name="$ctrl.passwordForm" ng-submit="$ctrl.updatePassword()">
9 <form class="form-horizontal" name="$ctrl.passwordForm" ng-submit="$ctrl.updatePassword()">
@@ -2,7 +2,7 b''
2
2
3 <div ng-show="!$ctrl.loading.profile">
3 <div ng-show="!$ctrl.loading.profile">
4 <div class="panel panel-default">
4 <div class="panel panel-default">
5 <div class="panel-heading" ng-include="'templates/user/breadcrumbs.html'"></div>
5 <div class="panel-heading" ng-include="'templates/settings_breadcrumbs.html'"></div>
6 <div class="panel-body">
6 <div class="panel-body">
7 <form name="$ctrl.profileForm" class="form-horizontal" ng-submit="$ctrl.updateProfile()">
7 <form name="$ctrl.profileForm" class="form-horizontal" ng-submit="$ctrl.updateProfile()">
8 <div class="form-group" id="row-email">
8 <div class="form-group" id="row-email">
@@ -194,24 +194,21 b" angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', fun"
194 $stateProvider.state('applications', {
194 $stateProvider.state('applications', {
195 abstract: true,
195 abstract: true,
196 url: '/ui/applications',
196 url: '/ui/applications',
197 templateUrl: 'templates/applications/parent_view.html'
197 component: 'settingsView'
198 });
198 });
199
199
200 $stateProvider.state('applications.list', {
200 $stateProvider.state('applications.list', {
201 url: '/list',
201 url: '/list',
202 templateUrl: 'templates/applications/list.html',
202 component: 'applicationsListView'
203 controller: 'ApplicationsListController as applications'
204 });
203 });
205 $stateProvider.state('applications.update', {
204 $stateProvider.state('applications.update', {
206 url: '/{resourceId}/update',
205 url: '/{resourceId}/update',
207 templateUrl: 'templates/applications/applications_update.html',
206 component: 'applicationsUpdateView'
208 controller: 'ApplicationsUpdateController as application'
209 });
207 });
210
208
211 $stateProvider.state('applications.integrations', {
209 $stateProvider.state('applications.integrations', {
212 url: '/{resourceId}/integrations',
210 url: '/{resourceId}/integrations',
213 templateUrl: 'templates/applications/integrations.html',
211 component: 'integrationsListView',
214 controller: 'IntegrationsListController as integrations',
215 data: {
212 data: {
216 resource: null
213 resource: null
217 }
214 }
@@ -219,16 +216,14 b" angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', fun"
219
216
220 $stateProvider.state('applications.purge_logs', {
217 $stateProvider.state('applications.purge_logs', {
221 url: '/purge_logs',
218 url: '/purge_logs',
222 templateUrl: 'templates/applications/applications_purge_logs.html',
219 component: 'applicationsPurgeLogsView'
223 controller: 'ApplicationsPurgeLogsController as applications_purge'
224 });
220 });
225
221
226 $stateProvider.state('applications.integrations.edit', {
222 $stateProvider.state('applications.integrations.edit', {
227 url: '/{integration}',
223 url: '/{integration}',
228 templateUrl: function ($stateParams) {
224 template: function ($stateParams) {
229 return 'templates/applications/integrations/' + $stateParams.integration + '.html'
225 return '<'+ $stateParams.integration + '-integration-config-view>'
230 },
226 }
231 controller: 'IntegrationController as integration'
232 });
227 });
233
228
234 $stateProvider.state('tests', {
229 $stateProvider.state('tests', {
@@ -1,3 +1,11 b''
1 <ol class="breadcrumb" ng-show="$ctrl.$state.includes('applications')">
2 <li>Applications</li>
3 <li ng-show="$ctrl.$state.includes('applications.list')" ng-class="{bold:$ctrl.$state.is('applications.list')}">Owned applications</li>
4 <li ng-show="$ctrl.$state.includes('applications.update')" ng-class="{bold:$ctrl.$state.is('applications.update')}">Modify application</li>
5 <li ng-show="$ctrl.$state.includes('applications.integrations')" ng-class="{bold:$ctrl.$state.includes('applications.integrations')}">Integrations</li>
6 <li ng-show="$ctrl.$state.includes('applications.purge_logs')" ng-class="{bold:$ctrl.$state.includes('applications.purge_logs')}">Log Purging</li>
7 </ol>
8
1 <ol class="breadcrumb" ng-show="$ctrl.$state.includes('user.profile')">
9 <ol class="breadcrumb" ng-show="$ctrl.$state.includes('user.profile')">
2 <li>Settings</li>
10 <li>Settings</li>
3 <li ng-show="$ctrl.$state.includes('user.profile.edit')" ng-class="{bold:$ctrl.$state.is('user.profile.edit')}">User Profile</li>
11 <li ng-show="$ctrl.$state.includes('user.profile.edit')" ng-class="{bold:$ctrl.$state.is('user.profile.edit')}">User Profile</li>
@@ -1,7 +0,0 b''
1 <ol class="breadcrumb" ng-show="$state.includes('applications')">
2 <li>Applications</li>
3 <li ng-show="$state.includes('applications.list')" ng-class="{bold:$state.is('applications.list')}">Owned applications</li>
4 <li ng-show="$state.includes('applications.update')" ng-class="{bold:$state.is('applications.update')}">Modify application</li>
5 <li ng-show="$state.includes('applications.integrations')" ng-class="{bold:$state.includes('applications.integrations')}">Integrations</li>
6 <li ng-show="$state.includes('applications.purge_logs')" ng-class="{bold:$state.includes('applications.purge_logs')}">Log Purging</li>
7 </ol>
@@ -1,8 +0,0 b''
1 <div class="row application-management">
2 <div class="col-sm-3" id="menu">
3 <div ng-include="'templates/user/menu.html'"></div>
4 </div>
5
6 <div class="col-sm-9" ui-view></div>
7
8 </div>
General Comments 0
You need to be logged in to leave comments. Login now