summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/monitoring/pages/panel_new_page.vue33
-rw-r--r--app/assets/javascripts/monitoring/router/constants.js9
-rw-r--r--app/assets/javascripts/monitoring/router/routes.js13
-rw-r--r--app/assets/javascripts/sidebar/components/lock/issuable_lock_form.vue (renamed from app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue)0
-rw-r--r--app/assets/javascripts/sidebar/mount_sidebar.js4
-rw-r--r--app/assets/javascripts/vue_shared/components/expand_button.vue20
-rw-r--r--app/controllers/projects/metrics_dashboard_controller.rb4
-rw-r--r--app/services/alert_management/process_prometheus_alert_service.rb22
-rw-r--r--app/workers/incident_management/process_alert_worker.rb6
9 files changed, 82 insertions, 29 deletions
diff --git a/app/assets/javascripts/monitoring/pages/panel_new_page.vue b/app/assets/javascripts/monitoring/pages/panel_new_page.vue
new file mode 100644
index 00000000000..d2ca0bf02d4
--- /dev/null
+++ b/app/assets/javascripts/monitoring/pages/panel_new_page.vue
@@ -0,0 +1,33 @@
+<script>
+import { GlButton, GlTooltipDirective } from '@gitlab/ui';
+import { s__ } from '~/locale';
+import routes from '../router/constants';
+
+export default {
+ components: {
+ GlButton,
+ },
+ directives: {
+ GlTooltip: GlTooltipDirective,
+ },
+ i18n: {
+ backToDashboard: s__('Metrics|Back to dashboard'),
+ },
+ routes,
+};
+</script>
+<template>
+ <div class="gl-display-flex gl-align-items-baseline">
+ <gl-button
+ v-gl-tooltip
+ icon="go-back"
+ :to="{ name: $options.routes.DASHBOARD_PAGE, params: { dashboard: $route.params.dashboard } }"
+ :aria-label="$options.i18n.backToDashboard"
+ :title="$options.i18n.backToDashboard"
+ class="gl-mr-5"
+ />
+ <h1 class="gl-mt-5 gl-font-size-h1">{{ s__('Metrics|Add panel') }}</h1>
+
+ <!-- TODO: Add components. See https://gitlab.com/groups/gitlab-org/-/epics/2882 -->
+ </div>
+</template>
diff --git a/app/assets/javascripts/monitoring/router/constants.js b/app/assets/javascripts/monitoring/router/constants.js
index fedfebe33e9..7834c14a65d 100644
--- a/app/assets/javascripts/monitoring/router/constants.js
+++ b/app/assets/javascripts/monitoring/router/constants.js
@@ -1,4 +1,7 @@
-export const BASE_DASHBOARD_PAGE = 'dashboard';
-export const CUSTOM_DASHBOARD_PAGE = 'custom_dashboard';
+export const DASHBOARD_PAGE = 'dashboard';
+export const PANEL_NEW_PAGE = 'panel_new';
-export default {};
+export default {
+ DASHBOARD_PAGE,
+ PANEL_NEW_PAGE,
+};
diff --git a/app/assets/javascripts/monitoring/router/routes.js b/app/assets/javascripts/monitoring/router/routes.js
index 4b82791178a..8092a5b7c0b 100644
--- a/app/assets/javascripts/monitoring/router/routes.js
+++ b/app/assets/javascripts/monitoring/router/routes.js
@@ -1,6 +1,7 @@
import DashboardPage from '../pages/dashboard_page.vue';
+import PanelNewPage from '../pages/panel_new_page.vue';
-import { BASE_DASHBOARD_PAGE, CUSTOM_DASHBOARD_PAGE } from './constants';
+import { DASHBOARD_PAGE, PANEL_NEW_PAGE } from './constants';
/**
* Because the cluster health page uses the dashboard
@@ -11,13 +12,13 @@ import { BASE_DASHBOARD_PAGE, CUSTOM_DASHBOARD_PAGE } from './constants';
*/
export default [
{
- name: BASE_DASHBOARD_PAGE,
- path: '/',
- component: DashboardPage,
+ name: PANEL_NEW_PAGE,
+ path: '/:dashboard(.*)?/panel/new',
+ component: PanelNewPage,
},
{
- name: CUSTOM_DASHBOARD_PAGE,
- path: '/:dashboard(.*)',
+ name: DASHBOARD_PAGE,
+ path: '/:dashboard(.*)?',
component: DashboardPage,
},
];
diff --git a/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue b/app/assets/javascripts/sidebar/components/lock/issuable_lock_form.vue
index 204725b29b0..204725b29b0 100644
--- a/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue
+++ b/app/assets/javascripts/sidebar/components/lock/issuable_lock_form.vue
diff --git a/app/assets/javascripts/sidebar/mount_sidebar.js b/app/assets/javascripts/sidebar/mount_sidebar.js
index c1a20bc4dcb..015219200db 100644
--- a/app/assets/javascripts/sidebar/mount_sidebar.js
+++ b/app/assets/javascripts/sidebar/mount_sidebar.js
@@ -5,7 +5,7 @@ import SidebarTimeTracking from './components/time_tracking/sidebar_time_trackin
import SidebarAssignees from './components/assignees/sidebar_assignees.vue';
import ConfidentialIssueSidebar from './components/confidential/confidential_issue_sidebar.vue';
import SidebarMoveIssue from './lib/sidebar_move_issue';
-import LockIssueSidebar from './components/lock/lock_issue_sidebar.vue';
+import IssuableLockForm from './components/lock/issuable_lock_form.vue';
import sidebarParticipants from './components/participants/sidebar_participants.vue';
import sidebarSubscriptions from './components/subscriptions/sidebar_subscriptions.vue';
import Translate from '../vue_shared/translate';
@@ -95,7 +95,7 @@ function mountLockComponent() {
fullPath,
},
render: createElement =>
- createElement(LockIssueSidebar, {
+ createElement(IssuableLockForm, {
props: {
isEditable: initialData.is_editable,
},
diff --git a/app/assets/javascripts/vue_shared/components/expand_button.vue b/app/assets/javascripts/vue_shared/components/expand_button.vue
index 1f904cd3c6c..546ee56355f 100644
--- a/app/assets/javascripts/vue_shared/components/expand_button.vue
+++ b/app/assets/javascripts/vue_shared/components/expand_button.vue
@@ -1,7 +1,6 @@
<script>
-import { GlDeprecatedButton } from '@gitlab/ui';
+import { GlButton } from '@gitlab/ui';
import { __ } from '~/locale';
-import Icon from '~/vue_shared/components/icon.vue';
/**
* Port of detail_behavior expand button.
@@ -16,8 +15,7 @@ import Icon from '~/vue_shared/components/icon.vue';
export default {
name: 'ExpandButton',
components: {
- GlDeprecatedButton,
- Icon,
+ GlButton,
},
data() {
return {
@@ -41,25 +39,23 @@ export default {
</script>
<template>
<span>
- <gl-deprecated-button
+ <gl-button
v-show="isCollapsed"
:aria-label="ariaLabel"
type="button"
class="js-text-expander-prepend text-expander btn-blank"
+ icon="ellipsis_h"
@click="onClick"
- >
- <icon :size="12" name="ellipsis_h" />
- </gl-deprecated-button>
+ />
<span v-if="isCollapsed"> <slot name="short"></slot> </span>
<span v-if="!isCollapsed"> <slot name="expanded"></slot> </span>
- <gl-deprecated-button
+ <gl-button
v-show="!isCollapsed"
:aria-label="ariaLabel"
type="button"
class="js-text-expander-append text-expander btn-blank"
+ icon="ellipsis_h"
@click="onClick"
- >
- <icon :size="12" name="ellipsis_h" />
- </gl-deprecated-button>
+ />
</span>
</template>
diff --git a/app/controllers/projects/metrics_dashboard_controller.rb b/app/controllers/projects/metrics_dashboard_controller.rb
index d13735f3e79..ff60d069061 100644
--- a/app/controllers/projects/metrics_dashboard_controller.rb
+++ b/app/controllers/projects/metrics_dashboard_controller.rb
@@ -14,6 +14,10 @@ module Projects
end
def show
+ if params[:page].present? && !Feature.enabled?(:metrics_dashboard_new_panel_page, project)
+ return render_404
+ end
+
if environment
render 'projects/environments/metrics'
else
diff --git a/app/services/alert_management/process_prometheus_alert_service.rb b/app/services/alert_management/process_prometheus_alert_service.rb
index 573d3914c05..c233ea4e2e5 100644
--- a/app/services/alert_management/process_prometheus_alert_service.rb
+++ b/app/services/alert_management/process_prometheus_alert_service.rb
@@ -34,6 +34,8 @@ module AlertManagement
else
create_alert_management_alert
end
+
+ process_incident_alert
end
def reset_alert_management_alert_status
@@ -47,16 +49,17 @@ module AlertManagement
end
def create_alert_management_alert
- am_alert = AlertManagement::Alert.new(am_alert_params.merge(ended_at: nil))
- if am_alert.save
- am_alert.execute_services
+ new_alert = AlertManagement::Alert.new(am_alert_params.merge(ended_at: nil))
+ if new_alert.save
+ new_alert.execute_services
+ @am_alert = new_alert
return
end
logger.warn(
message: 'Unable to create AlertManagement::Alert',
project_id: project.id,
- alert_errors: am_alert.errors.messages
+ alert_errors: new_alert.errors.messages
)
end
@@ -89,12 +92,21 @@ module AlertManagement
SystemNoteService.auto_resolve_prometheus_alert(issue, project, User.alert_bot) if issue.reset.closed?
end
+ def process_incident_alert
+ return unless am_alert
+ return if am_alert.issue
+
+ IncidentManagement::ProcessAlertWorker.perform_async(nil, nil, am_alert.id)
+ end
+
def logger
@logger ||= Gitlab::AppLogger
end
def am_alert
- @am_alert ||= AlertManagement::Alert.not_resolved.for_fingerprint(project, gitlab_fingerprint).first
+ strong_memoize(:am_alert) do
+ AlertManagement::Alert.not_resolved.for_fingerprint(project, gitlab_fingerprint).first
+ end
end
def bad_request
diff --git a/app/workers/incident_management/process_alert_worker.rb b/app/workers/incident_management/process_alert_worker.rb
index 9a8cc93c660..26c86a3aa2b 100644
--- a/app/workers/incident_management/process_alert_worker.rb
+++ b/app/workers/incident_management/process_alert_worker.rb
@@ -30,7 +30,11 @@ module IncidentManagement
end
def parsed_payload(alert)
- Gitlab::Alerting::NotificationPayloadParser.call(alert.payload.to_h, alert.project)
+ if alert.prometheus?
+ alert.payload
+ else
+ Gitlab::Alerting::NotificationPayloadParser.call(alert.payload.to_h, alert.project)
+ end
end
def create_issue_for(alert)