# Generated with protoc-gen-openapi # https://github.com/google/gnostic/tree/master/cmd/protoc-gen-openapi openapi: 3.0.3 info: title: "" version: 0.0.1 paths: /v1/alert/alert-pages: get: tags: - Alert operationId: Alert_ListAlertPage parameters: - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: keyword in: query schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListAlertPageReply' post: tags: - Alert operationId: Alert_CreateAlertPage requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateAlertPageRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateAlertPageReply' /v1/alert/alert-pages/{alertPageUid}/realtime-alerts: get: tags: - Alert operationId: Alert_ListRealtimeAlert parameters: - name: alertPageUid in: path required: true schema: type: string - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: startAtUnix in: query description: Time range for fired_at (Unix seconds). If both 0, backend defaults to last 14 days. schema: type: string - name: endAtUnix in: query schema: type: string - name: keyword in: query schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListRealtimeAlertReply' /v1/alert/alert-pages/{uid}: get: tags: - Alert operationId: Alert_GetAlertPage parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.AlertPageItem' put: tags: - Alert operationId: Alert_UpdateAlertPage parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateAlertPageRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateAlertPageReply' delete: tags: - Alert operationId: Alert_DeleteAlertPage parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteAlertPageReply' /v1/alert/history-alerts: get: tags: - Alert operationId: Alert_ListHistoryAlert parameters: - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: startAtUnix in: query description: Time range for fired_at (Unix seconds). If both 0, backend defaults to last 14 days. schema: type: string - name: endAtUnix in: query schema: type: string - name: status in: query schema: type: integer format: enum - name: strategyGroupUids in: query schema: type: array items: type: string - name: levelUids in: query schema: type: array items: type: string - name: strategyUids in: query schema: type: array items: type: string - name: datasourceUids in: query schema: type: array items: type: string - name: keyword in: query schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListHistoryAlertReply' /v1/alert/history-alerts/export-tasks: get: tags: - Alert operationId: Alert_ListHistoryAlertExportTask parameters: - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: status in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListHistoryAlertExportTaskReply' post: tags: - Alert operationId: Alert_CreateHistoryAlertExportTask requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateHistoryAlertExportTaskRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateHistoryAlertExportTaskReply' /v1/alert/history-alerts/export-tasks/{uid}/cancel: post: tags: - Alert operationId: Alert_CancelHistoryAlertExportTask parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CancelHistoryAlertExportTaskRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CancelHistoryAlertExportTaskReply' /v1/alert/realtime-alerts/batch-intervene: post: tags: - Alert operationId: Alert_BatchInterveneAlert requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.BatchInterveneAlertRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.BatchInterveneAlertReply' /v1/alert/realtime-alerts/batch-recover: post: tags: - Alert operationId: Alert_BatchRecoverAlert requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.BatchRecoverAlertRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.BatchRecoverAlertReply' /v1/alert/realtime-alerts/{uid}: get: tags: - Alert operationId: Alert_GetAlertEvent parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.AlertEventItem' /v1/alert/realtime-alerts/{uid}/intervene: post: tags: - Alert operationId: Alert_InterveneAlert parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.InterveneAlertRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.InterveneAlertReply' /v1/alert/realtime-alerts/{uid}/recover: post: tags: - Alert operationId: Alert_RecoverAlert parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.RecoverAlertRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.RecoverAlertReply' /v1/alert/realtime-alerts/{uid}/suppress: post: tags: - Alert operationId: Alert_SuppressAlert parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SuppressAlertRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SuppressAlertReply' /v1/alert/statistics: get: tags: - Alert description: 'GetAlertStatistics returns alert counts for the dashboard: total active, by level, today recovered, by alert page.' operationId: Alert_GetAlertStatistics responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.GetAlertStatisticsReply' /v1/alert/user/alert-pages: get: tags: - Alert description: ListUserAlertPages returns the current user's followed alert pages (personal config). operationId: Alert_ListUserAlertPages responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListUserAlertPagesReply' put: tags: - Alert description: SaveUserAlertPages saves the current user's followed alert pages (replaces existing list). operationId: Alert_SaveUserAlertPages requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveUserAlertPagesRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveUserAlertPagesReply' /v1/datasource: post: tags: - Datasource operationId: Datasource_CreateDatasource requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateDatasourceRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateDatasourceReply' /v1/datasource/{uid}: get: tags: - Datasource operationId: Datasource_GetDatasource parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DatasourceItem' put: tags: - Datasource operationId: Datasource_UpdateDatasource parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateDatasourceRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateDatasourceReply' delete: tags: - Datasource operationId: Datasource_DeleteDatasource parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteDatasourceReply' /v1/datasource/{uid}/metric/{metric}: get: tags: - Datasource description: GetMetricLabelDetail returns one metric's labels and each label's values (detail view for a single metric). operationId: Datasource_GetMetricDetail parameters: - name: uid in: path required: true schema: type: string - name: metric in: path description: Metric name to query label detail for (e.g. "http_requests_total", "up"). required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricDetailItem' /v1/datasource/{uid}/metrics: get: tags: - Datasource description: ListMetrics returns the list of metric names with basic metadata (name, help, unit, type) for a metrics datasource. operationId: Datasource_ListMetrics parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListMetricsReply' /v1/datasource/{uid}/status: get: tags: - Datasource description: GetDatasourceStatus returns recent status series (last 1h by default) from main time-series DB (Prometheus/VM). operationId: Datasource_GetDatasourceStatus parameters: - name: uid in: path required: true schema: type: string - name: startTime in: query description: 'Unix timestamp (seconds). Default: now - 1h.' schema: type: string - name: endTime in: query description: 'Unix timestamp (seconds). Default: now.' schema: type: string - name: stepSeconds in: query description: |- Step in seconds for downsampling. Default: 60. Step in seconds (15–3600). Default 60 if not set. schema: type: integer format: int32 responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.GetDatasourceStatusReply' put: tags: - Datasource operationId: Datasource_UpdateDatasourceStatus parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateDatasourceStatusRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateDatasourceStatusReply' /v1/datasources: get: tags: - Datasource operationId: Datasource_ListDatasource parameters: - name: keyword in: query schema: type: string - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: type in: query schema: type: integer format: enum - name: driver in: query schema: type: integer format: enum - name: status in: query schema: type: integer format: enum - name: levelUids in: query schema: type: array items: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListDatasourceReply' /v1/datasources/select: get: tags: - Datasource operationId: Datasource_SelectDatasource parameters: - name: keyword in: query schema: type: string - name: limit in: query schema: type: integer format: int32 - name: lastUID in: query schema: type: string - name: type in: query schema: type: integer format: enum - name: driver in: query schema: type: integer format: enum - name: status in: query schema: type: integer format: enum - name: uids in: query schema: type: array items: type: string - name: levelUids in: query schema: type: array items: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SelectDatasourceReply' /v1/level: post: tags: - Level operationId: Level_CreateLevel requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateLevelRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateLevelReply' /v1/level/{uid}: get: tags: - Level operationId: Level_GetLevel parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.LevelItem' put: tags: - Level operationId: Level_UpdateLevel parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateLevelRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateLevelReply' delete: tags: - Level operationId: Level_DeleteLevel parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteLevelReply' /v1/level/{uid}/status: put: tags: - Level operationId: Level_UpdateLevelStatus parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateLevelStatusRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateLevelStatusReply' /v1/levels: get: tags: - Level operationId: Level_ListLevel parameters: - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: keyword in: query schema: type: string - name: status in: query schema: type: integer format: enum - name: type in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListLevelReply' /v1/levels/select: get: tags: - Level operationId: Level_SelectLevel parameters: - name: keyword in: query schema: type: string - name: limit in: query schema: type: integer format: int32 - name: lastUID in: query schema: type: string - name: status in: query schema: type: integer format: enum - name: type in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SelectLevelReply' /v1/metric-query/proxy: post: tags: - MetricQuery description: Proxy forwards an HTTP request to the datasource and returns the response (direct proxy). operationId: MetricQuery_Proxy requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricQueryProxyRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricQueryProxyReply' /v1/metric-query/query: post: tags: - MetricQuery description: Query runs an instant query at a single evaluation time (Prometheus /api/v1/query). operationId: MetricQuery_Query requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricQueryRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricQueryReply' /v1/metric-query/query-range: post: tags: - MetricQuery description: QueryRange runs a range query over a time range (Prometheus /api/v1/query_range). operationId: MetricQuery_QueryRange requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricQueryRangeRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.MetricQueryRangeReply' /v1/metric/strategy/{strategyUID}: get: tags: - StrategyMetric operationId: StrategyMetric_GetStrategyMetric parameters: - name: strategyUID in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.StrategyMetricItem' post: tags: - StrategyMetric operationId: StrategyMetric_SaveStrategyMetric parameters: - name: strategyUID in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveStrategyMetricRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveStrategyMetricReply' /v1/metric/strategy/{strategyUID}/level: post: tags: - StrategyMetric operationId: StrategyMetric_SaveStrategyMetricLevel parameters: - name: strategyUID in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveStrategyMetricLevelRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveStrategyMetricLevelReply' /v1/metric/strategy/{strategyUID}/level/{levelUID}: get: tags: - StrategyMetric operationId: StrategyMetric_GetStrategyMetricLevel parameters: - name: strategyUID in: path required: true schema: type: string - name: levelUID in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.StrategyMetricLevelItem' delete: tags: - StrategyMetric operationId: StrategyMetric_DeleteStrategyMetricLevel parameters: - name: strategyUID in: path required: true schema: type: string - name: levelUID in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteStrategyMetricLevelReply' /v1/metric/strategy/{strategyUID}/level/{levelUID}/status: put: tags: - StrategyMetric operationId: StrategyMetric_UpdateStrategyMetricLevelStatus parameters: - name: strategyUID in: path required: true schema: type: string - name: levelUID in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyMetricLevelStatusRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyMetricLevelStatusReply' /v1/notification-groups: get: tags: - NotificationGroup operationId: NotificationGroup_ListNotificationGroup parameters: - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: keyword in: query schema: type: string - name: status in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListNotificationGroupReply' post: tags: - NotificationGroup operationId: NotificationGroup_CreateNotificationGroup requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateNotificationGroupRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateNotificationGroupReply' /v1/notification-groups/{notificationGroupUid}/subscription: get: tags: - NotificationGroupSubscription operationId: NotificationGroupSubscription_GetNotificationGroupSubscription parameters: - name: notificationGroupUid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.GetNotificationGroupSubscriptionReply' put: tags: - NotificationGroupSubscription operationId: NotificationGroupSubscription_SaveNotificationGroupSubscription parameters: - name: notificationGroupUid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveNotificationGroupSubscriptionRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SaveNotificationGroupSubscriptionReply' /v1/notification-groups/{uid}: get: tags: - NotificationGroup operationId: NotificationGroup_GetNotificationGroup parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.NotificationGroupItem' put: tags: - NotificationGroup operationId: NotificationGroup_UpdateNotificationGroup parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateNotificationGroupRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateNotificationGroupReply' delete: tags: - NotificationGroup operationId: NotificationGroup_DeleteNotificationGroup parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteNotificationGroupReply' /v1/notification-groups/{uid}/status: put: tags: - NotificationGroup operationId: NotificationGroup_UpdateNotificationGroupStatus parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateNotificationGroupStatusRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateNotificationGroupStatusReply' /v1/strategies: get: tags: - Strategy operationId: Strategy_ListStrategy parameters: - name: keyword in: query schema: type: string - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: status in: query schema: type: integer format: enum - name: strategyGroupUID in: query schema: type: string - name: type in: query schema: type: integer format: enum - name: driver in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListStrategyReply' /v1/strategies/select: get: tags: - Strategy operationId: Strategy_SelectStrategy parameters: - name: keyword in: query schema: type: string - name: limit in: query schema: type: integer format: int32 - name: lastUid in: query schema: type: string - name: status in: query schema: type: integer format: enum - name: strategyGroupUids in: query description: When set, only strategies belonging to these strategy groups are returned (for alert page filter). schema: type: array items: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SelectStrategyReply' /v1/strategy: post: tags: - Strategy operationId: Strategy_CreateStrategy requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateStrategyRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateStrategyReply' /v1/strategy-group: post: tags: - Strategy operationId: Strategy_CreateStrategyGroup requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateStrategyGroupRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.CreateStrategyGroupReply' /v1/strategy-group/{uid}: get: tags: - Strategy operationId: Strategy_GetStrategyGroup parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.StrategyGroupItem' put: tags: - Strategy operationId: Strategy_UpdateStrategyGroup parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyGroupRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyGroupReply' delete: tags: - Strategy operationId: Strategy_DeleteStrategyGroup parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteStrategyGroupReply' /v1/strategy-group/{uid}/status: put: tags: - Strategy operationId: Strategy_UpdateStrategyGroupStatus parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyGroupStatusRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyGroupStatusReply' /v1/strategy-groups: get: tags: - Strategy operationId: Strategy_ListStrategyGroup parameters: - name: keyword in: query schema: type: string - name: page in: query schema: type: integer format: int32 - name: pageSize in: query schema: type: integer format: int32 - name: status in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.ListStrategyGroupReply' /v1/strategy-groups/select: get: tags: - Strategy operationId: Strategy_SelectStrategyGroup parameters: - name: keyword in: query schema: type: string - name: limit in: query schema: type: integer format: int32 - name: lastUID in: query schema: type: string - name: status in: query schema: type: integer format: enum responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.SelectStrategyGroupReply' /v1/strategy/{uid}: get: tags: - Strategy operationId: Strategy_GetStrategy parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.StrategyItem' put: tags: - Strategy operationId: Strategy_UpdateStrategy parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyReply' delete: tags: - Strategy operationId: Strategy_DeleteStrategy parameters: - name: uid in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.DeleteStrategyReply' /v1/strategy/{uid}/status: put: tags: - Strategy operationId: Strategy_UpdateStrategyStatus parameters: - name: uid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyStatusRequest' required: true responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/marksman.api.v1.UpdateStrategyStatusReply' components: schemas: marksman.api.v1.AlertEventItem: type: object properties: uid: type: string strategyGroupUid: type: string strategyGroupName: type: string strategyUid: type: string strategyName: type: string levelUid: type: string levelName: type: string datasourceUid: type: string datasourceName: type: string summary: type: string description: type: string expr: type: string firedAt: type: string value: type: number format: double labels: type: object additionalProperties: type: string status: type: integer format: enum intervenedAt: type: string intervenedBy: type: string intervenedByName: type: string suppressUntilAt: type: string suppressedBy: type: string suppressedByName: type: string suppressedReason: type: string recoveredAt: type: string recoveredBy: type: string recoveredByName: type: string recoveredReason: type: string bgColor: type: string duration: type: string datasourceLevelName: type: string description: AlertEventItem is a single real-time alert event. marksman.api.v1.AlertPageCount: type: object properties: alertPageUid: type: string alertPageName: type: string count: type: string description: AlertPageCount is count of active alerts for one alert page. marksman.api.v1.AlertPageFilter: type: object properties: strategyGroupUids: type: array items: type: string levelUids: type: array items: type: string strategyUids: type: array items: type: string datasourceUids: type: array items: type: string datasourceLevelUids: type: array items: type: string description: AlertPageFilter defines which alerts belong to a page (any match). marksman.api.v1.AlertPageItem: type: object properties: uid: type: string name: type: string color: type: string sortOrder: type: integer format: int32 filter: $ref: '#/components/schemas/marksman.api.v1.AlertPageFilter' createdAt: type: string updatedAt: type: string description: AlertPageItem is a single alert page (view/category) for grouping real-time alerts. marksman.api.v1.BatchInterveneAlertReply: type: object properties: {} marksman.api.v1.BatchInterveneAlertRequest: type: object properties: uids: type: array items: type: string intervenedMemberUid: type: string description: BatchInterveneAlertRequest marks events as intervened (on-call has taken over). marksman.api.v1.BatchRecoverAlertReply: type: object properties: {} marksman.api.v1.BatchRecoverAlertRequest: type: object properties: uids: type: array items: type: string recoveredReason: type: string marksman.api.v1.CancelHistoryAlertExportTaskReply: type: object properties: {} marksman.api.v1.CancelHistoryAlertExportTaskRequest: type: object properties: uid: type: string marksman.api.v1.CreateAlertPageReply: type: object properties: uid: type: string marksman.api.v1.CreateAlertPageRequest: type: object properties: name: type: string color: type: string sortOrder: type: integer format: int32 filter: $ref: '#/components/schemas/marksman.api.v1.AlertPageFilter' description: CreateAlertPageRequest creates a new alert page. marksman.api.v1.CreateDatasourceReply: type: object properties: uid: type: string marksman.api.v1.CreateDatasourceRequest: type: object properties: name: type: string type: type: integer format: enum driver: type: integer format: enum metadata: type: object additionalProperties: type: string url: type: string remark: type: string levelUid: type: string marksman.api.v1.CreateHistoryAlertExportTaskReply: type: object properties: uid: type: string marksman.api.v1.CreateHistoryAlertExportTaskRequest: type: object properties: filter: $ref: '#/components/schemas/marksman.api.v1.HistoryAlertExportFilter' marksman.api.v1.CreateLevelReply: type: object properties: uid: type: string marksman.api.v1.CreateLevelRequest: type: object properties: name: type: string remark: type: string metadata: type: object additionalProperties: type: string bgColor: type: string type: type: integer format: enum marksman.api.v1.CreateNotificationGroupReply: type: object properties: uid: type: string marksman.api.v1.CreateNotificationGroupRequest: type: object properties: name: type: string remark: type: string metadata: type: object additionalProperties: type: string members: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationMemberRequest' webhooks: type: array items: type: string templates: type: array items: type: string emailConfigs: type: array items: type: string marksman.api.v1.CreateStrategyGroupReply: type: object properties: uid: type: string marksman.api.v1.CreateStrategyGroupRequest: type: object properties: name: type: string remark: type: string metadata: type: object additionalProperties: type: string marksman.api.v1.CreateStrategyReply: type: object properties: uid: type: string marksman.api.v1.CreateStrategyRequest: type: object properties: name: type: string remark: type: string type: type: integer format: enum driver: type: integer format: enum metadata: type: object additionalProperties: type: string strategyGroupUID: type: string status: type: integer format: enum marksman.api.v1.DatasourceFilter: type: object properties: datasourceUids: type: array items: type: string excludeDatasourceUids: type: array items: type: string datasourceLabels: type: object additionalProperties: type: string excludeDatasourceLabels: type: object additionalProperties: type: string description: |- DatasourceFilter scopes which datasources a strategy metric evaluates. Exclude rules apply first; include rules restrict the remaining set (OR between include dimensions). marksman.api.v1.DatasourceItem: type: object properties: uid: type: string name: type: string type: type: integer format: enum driver: type: integer format: enum metadata: type: object additionalProperties: type: string status: type: integer format: enum createdAt: type: string updatedAt: type: string url: type: string remark: type: string levelUid: type: string level: $ref: '#/components/schemas/marksman.api.v1.LevelItem' marksman.api.v1.DatasourceStatusPoint: type: object properties: timestamp: type: string value: type: number format: double marksman.api.v1.DatasourceStatusSeries: type: object properties: uid: type: string name: type: string points: type: array items: $ref: '#/components/schemas/marksman.api.v1.DatasourceStatusPoint' marksman.api.v1.DeleteAlertPageReply: type: object properties: {} marksman.api.v1.DeleteDatasourceReply: type: object properties: {} marksman.api.v1.DeleteLevelReply: type: object properties: {} marksman.api.v1.DeleteNotificationGroupReply: type: object properties: {} marksman.api.v1.DeleteStrategyGroupReply: type: object properties: {} marksman.api.v1.DeleteStrategyMetricLevelReply: type: object properties: {} marksman.api.v1.DeleteStrategyReply: type: object properties: {} marksman.api.v1.GetAlertStatisticsReply: type: object properties: totalActiveCount: type: string countByLevel: type: array items: $ref: '#/components/schemas/marksman.api.v1.LevelCount' todayRecoveredCount: type: string countByAlertPage: type: array items: $ref: '#/components/schemas/marksman.api.v1.AlertPageCount' description: 'GetAlertStatisticsReply returns dashboard counts: total active, by level, today recovered, by alert page.' marksman.api.v1.GetDatasourceStatusReply: type: object properties: series: type: array items: $ref: '#/components/schemas/marksman.api.v1.DatasourceStatusSeries' marksman.api.v1.GetNotificationGroupSubscriptionReply: type: object properties: filter: $ref: '#/components/schemas/marksman.api.v1.SubscriptionFilter' marksman.api.v1.HistoryAlertExportFilter: type: object properties: startAtUnix: type: string endAtUnix: type: string status: type: integer format: enum strategyGroupUids: type: array items: type: string levelUids: type: array items: type: string strategyUids: type: array items: type: string datasourceUids: type: array items: type: string keyword: type: string description: HistoryAlertExportFilter mirrors ListHistoryAlertRequest filters without pagination. marksman.api.v1.HistoryAlertExportTaskItem: type: object properties: uid: type: string status: type: integer format: enum totalRows: type: string processedRows: type: string fileName: type: string errorMessage: type: string createdAt: type: string updatedAt: type: string completedAt: type: string marksman.api.v1.InterveneAlertReply: type: object properties: {} marksman.api.v1.InterveneAlertRequest: type: object properties: uid: type: string description: InterveneAlertRequest marks an event as intervened (on-call has taken over). marksman.api.v1.LevelCount: type: object properties: levelUid: type: string levelName: type: string count: type: string description: LevelCount is count of active alerts for one level. marksman.api.v1.LevelItem: type: object properties: uid: type: string name: type: string remark: type: string status: type: integer format: enum metadata: type: object additionalProperties: type: string createdAt: type: string updatedAt: type: string bgColor: type: string type: type: integer format: enum marksman.api.v1.LevelItemSelect: type: object properties: value: type: string label: type: string disabled: type: boolean tooltip: type: string marksman.api.v1.ListAlertPageReply: type: object properties: total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 items: type: array items: $ref: '#/components/schemas/marksman.api.v1.AlertPageItem' marksman.api.v1.ListDatasourceReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.DatasourceItem' total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 marksman.api.v1.ListHistoryAlertExportTaskReply: type: object properties: total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 items: type: array items: $ref: '#/components/schemas/marksman.api.v1.HistoryAlertExportTaskItem' marksman.api.v1.ListHistoryAlertReply: type: object properties: total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 items: type: array items: $ref: '#/components/schemas/marksman.api.v1.AlertEventItem' marksman.api.v1.ListLevelReply: type: object properties: total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 items: type: array items: $ref: '#/components/schemas/marksman.api.v1.LevelItem' marksman.api.v1.ListMetricsReply: type: object properties: metrics: type: array items: $ref: '#/components/schemas/marksman.api.v1.MetricSummaryItem' marksman.api.v1.ListNotificationGroupReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationGroupItem' total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 marksman.api.v1.ListRealtimeAlertReply: type: object properties: total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 items: type: array items: $ref: '#/components/schemas/marksman.api.v1.AlertEventItem' marksman.api.v1.ListStrategyGroupReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.StrategyGroupItem' total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 marksman.api.v1.ListStrategyReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.StrategyItem' total: type: string page: type: integer format: int32 pageSize: type: integer format: int32 marksman.api.v1.ListUserAlertPagesReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.AlertPageItem' description: ListUserAlertPagesReply returns the user's followed alert pages in order. marksman.api.v1.MetricDetailItem: type: object properties: name: type: string help: type: string unit: type: string type: type: string labels: type: array items: $ref: '#/components/schemas/marksman.api.v1.MetricLabelItem' marksman.api.v1.MetricLabelItem: type: object properties: name: type: string values: type: array items: type: string marksman.api.v1.MetricQueryProxyReply: type: object properties: statusCode: type: integer format: int32 response: type: object description: MetricQueryProxyReply is the response from proxy (status code and body). marksman.api.v1.MetricQueryProxyRequest: type: object properties: uid: type: string path: type: string description: Path suffix without leading slash (e.g. "api/v1/query", "api/v1/query_range"). Appended to datasource URL. method: type: string description: HTTP method (GET, POST, etc.). body: type: string description: Optional body for POST/PUT/PATCH. Ignored for GET/DELETE. format: bytes description: MetricQueryProxyRequest is the request for direct proxy to datasource. marksman.api.v1.MetricQueryRangeReply: type: object properties: response: type: object description: MetricQueryRangeReply returns the response from Prometheus /api/v1/query_range as a structured any type. marksman.api.v1.MetricQueryRangeRequest: type: object properties: uid: type: string query: type: string start: type: string description: Start time (Unix seconds). If not set or zero, defaults to (end - 1h) or (now - 1h). end: type: string description: End time (Unix seconds). If not set or zero, defaults to now. step: type: string description: Step in seconds (e.g. 15, 60). If not set or zero, defaults to 60. When set, must be in (0, 86400]. description: MetricQueryRangeRequest is the request for range query. marksman.api.v1.MetricQueryReply: type: object properties: response: type: object description: MetricQueryReply returns the response from Prometheus /api/v1/query as a structured any type (status, data.resultType, data.result). marksman.api.v1.MetricQueryRequest: type: object properties: uid: type: string query: type: string description: Prometheus PromQL expression. time: type: string description: Evaluation timestamp (Unix seconds). If not set or zero, use current time. description: MetricQueryRequest is the request for instant query. marksman.api.v1.MetricSummaryItem: type: object properties: name: type: string help: type: string unit: type: string type: type: string description: 'MetricSummaryItem: metric list item (no label detail). Uses help to align with Prometheus metadata.' marksman.api.v1.NotificationGroupItem: type: object properties: uid: type: string name: type: string remark: type: string metadata: type: object additionalProperties: type: string status: type: integer format: enum createdAt: type: string updatedAt: type: string webhooks: type: array items: type: string templates: type: array items: type: string emailConfigs: type: array items: type: string members: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationMemberItem' webhookItems: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationResourceItem' templateItems: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationResourceItem' emailConfigItems: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationResourceItem' marksman.api.v1.NotificationMemberItem: type: object properties: memberUid: type: string isEmail: type: boolean isPhone: type: boolean memberName: type: string memberAvatar: type: string marksman.api.v1.NotificationMemberRequest: type: object properties: memberUid: type: string isEmail: type: boolean isPhone: type: boolean marksman.api.v1.NotificationResourceItem: type: object properties: uid: type: string name: type: string marksman.api.v1.RecoverAlertReply: type: object properties: {} marksman.api.v1.RecoverAlertRequest: type: object properties: uid: type: string recoveredReason: type: string description: RecoverAlertRequest marks an event as manually recovered. marksman.api.v1.SaveNotificationGroupSubscriptionReply: type: object properties: {} marksman.api.v1.SaveNotificationGroupSubscriptionRequest: type: object properties: notificationGroupUid: type: string filter: $ref: '#/components/schemas/marksman.api.v1.SubscriptionFilter' marksman.api.v1.SaveStrategyMetricLevelReply: type: object properties: {} marksman.api.v1.SaveStrategyMetricLevelRequest: type: object properties: strategyUID: type: string levelUID: type: string mode: type: integer format: enum condition: type: integer format: enum values: type: array items: type: number format: double duration: pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$ type: string status: type: integer format: enum marksman.api.v1.SaveStrategyMetricReply: type: object properties: {} marksman.api.v1.SaveStrategyMetricRequest: type: object properties: strategyUID: type: string expr: type: string labels: type: object additionalProperties: type: string datasourceFilter: $ref: '#/components/schemas/marksman.api.v1.DatasourceFilter' summary: type: string description: type: string marksman.api.v1.SaveUserAlertPagesReply: type: object properties: {} description: SaveUserAlertPagesReply is empty on success. marksman.api.v1.SaveUserAlertPagesRequest: type: object properties: alertPageUids: type: array items: type: string description: SaveUserAlertPagesRequest saves the user's followed alert pages (order by array index). marksman.api.v1.SelectDatasourceItem: type: object properties: value: type: string label: type: string disabled: type: boolean tooltip: type: string type: type: integer format: enum driver: type: integer format: enum url: type: string levelUid: type: string levelName: type: string marksman.api.v1.SelectDatasourceReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.SelectDatasourceItem' total: type: string lastUID: type: string hasMore: type: boolean marksman.api.v1.SelectLevelReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.LevelItemSelect' total: type: string lastUID: type: string hasMore: type: boolean marksman.api.v1.SelectStrategyGroupReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.StrategyGroupItemSelect' total: type: string hasMore: type: boolean nextUID: type: integer format: uint32 marksman.api.v1.SelectStrategyReply: type: object properties: items: type: array items: $ref: '#/components/schemas/marksman.api.v1.StrategyItemSelect' total: type: string lastUid: type: string hasMore: type: boolean marksman.api.v1.StrategyGroupItem: type: object properties: uid: type: string name: type: string remark: type: string status: type: integer format: enum metadata: type: object additionalProperties: type: string createdAt: type: string updatedAt: type: string marksman.api.v1.StrategyGroupItemSelect: type: object properties: value: type: string label: type: string disabled: type: boolean tooltip: type: string marksman.api.v1.StrategyItem: type: object properties: uid: type: string name: type: string remark: type: string type: type: integer format: enum driver: type: integer format: enum status: type: integer format: enum metadata: type: object additionalProperties: type: string createdAt: type: string updatedAt: type: string strategyGroup: $ref: '#/components/schemas/marksman.api.v1.StrategyGroupItem' marksman.api.v1.StrategyItemSelect: type: object properties: value: type: string label: type: string disabled: type: boolean tooltip: type: string marksman.api.v1.StrategyLevelPair: type: object properties: strategyUid: type: string levelUid: type: string marksman.api.v1.StrategyMetricItem: type: object properties: strategyUID: type: string expr: type: string labels: type: object additionalProperties: type: string summary: type: string description: type: string datasourceFilter: $ref: '#/components/schemas/marksman.api.v1.DatasourceFilter' levels: type: array items: $ref: '#/components/schemas/marksman.api.v1.StrategyMetricLevelItem' createdAt: type: string updatedAt: type: string strategy: $ref: '#/components/schemas/marksman.api.v1.StrategyItem' includeDatasources: type: array items: $ref: '#/components/schemas/marksman.api.v1.DatasourceItem' excludeDatasources: type: array items: $ref: '#/components/schemas/marksman.api.v1.DatasourceItem' marksman.api.v1.StrategyMetricLevelItem: type: object properties: levelUID: type: string strategyUID: type: string level: $ref: '#/components/schemas/marksman.api.v1.LevelItem' mode: type: integer format: enum condition: type: integer format: enum values: type: array items: type: number format: double duration: pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$ type: string status: type: integer format: enum marksman.api.v1.SubscriptionFilter: type: object properties: strategyGroupUids: type: array items: type: string strategyUids: type: array items: type: string strategyLevels: type: array items: $ref: '#/components/schemas/marksman.api.v1.StrategyLevelPair' datasourceUids: type: array items: type: string labels: type: object additionalProperties: type: string excludeLabels: type: object additionalProperties: type: string datasourceLevelUids: type: array items: type: string description: |- Subscription filter: when multiple dimensions are set, an alert matches if it satisfies at least one (OR). - strategyGroupUids: alert's strategy must belong to one of these groups. - strategyUids: alert's strategy_uid must be in this list. - strategyLevels: alert's (strategy_uid, level_uid) must be in this list. - labels: alert must contain all these key-value pairs with the same values. - excludeLabels: alert must not contain any of these key-value pairs (subset match). - datasourceUids: alert's datasource must be in this list. - datasourceLevelUids: alert datasource's level_uid must be in this list. marksman.api.v1.SuppressAlertReply: type: object properties: {} marksman.api.v1.SuppressAlertRequest: type: object properties: uid: type: string suppressUntilUnix: type: string description: Suppress until this time (Unix seconds); required. suppressedReason: type: string description: SuppressAlertRequest suppresses an event until a given time (known issue). marksman.api.v1.UpdateAlertPageReply: type: object properties: {} marksman.api.v1.UpdateAlertPageRequest: type: object properties: uid: type: string name: type: string color: type: string sortOrder: type: integer format: int32 filter: $ref: '#/components/schemas/marksman.api.v1.AlertPageFilter' description: UpdateAlertPageRequest updates an alert page. marksman.api.v1.UpdateDatasourceReply: type: object properties: {} marksman.api.v1.UpdateDatasourceRequest: type: object properties: uid: type: string name: type: string type: type: integer format: enum driver: type: integer format: enum metadata: type: object additionalProperties: type: string url: type: string remark: type: string levelUid: type: string marksman.api.v1.UpdateDatasourceStatusReply: type: object properties: {} marksman.api.v1.UpdateDatasourceStatusRequest: type: object properties: uid: type: string status: type: integer format: enum marksman.api.v1.UpdateLevelReply: type: object properties: {} marksman.api.v1.UpdateLevelRequest: type: object properties: uid: type: string name: type: string remark: type: string metadata: type: object additionalProperties: type: string bgColor: type: string type: type: integer format: enum marksman.api.v1.UpdateLevelStatusReply: type: object properties: {} marksman.api.v1.UpdateLevelStatusRequest: type: object properties: uid: type: string status: type: integer format: enum marksman.api.v1.UpdateNotificationGroupReply: type: object properties: {} marksman.api.v1.UpdateNotificationGroupRequest: type: object properties: uid: type: string name: type: string remark: type: string metadata: type: object additionalProperties: type: string members: type: array items: $ref: '#/components/schemas/marksman.api.v1.NotificationMemberRequest' webhooks: type: array items: type: string templates: type: array items: type: string emailConfigs: type: array items: type: string marksman.api.v1.UpdateNotificationGroupStatusReply: type: object properties: {} marksman.api.v1.UpdateNotificationGroupStatusRequest: type: object properties: uid: type: string status: type: integer format: enum marksman.api.v1.UpdateStrategyGroupReply: type: object properties: {} marksman.api.v1.UpdateStrategyGroupRequest: type: object properties: uid: type: string name: type: string remark: type: string metadata: type: object additionalProperties: type: string marksman.api.v1.UpdateStrategyGroupStatusReply: type: object properties: {} marksman.api.v1.UpdateStrategyGroupStatusRequest: type: object properties: uid: type: string status: type: integer format: enum marksman.api.v1.UpdateStrategyMetricLevelStatusReply: type: object properties: {} marksman.api.v1.UpdateStrategyMetricLevelStatusRequest: type: object properties: strategyUID: type: string levelUID: type: string status: type: integer format: enum marksman.api.v1.UpdateStrategyReply: type: object properties: {} marksman.api.v1.UpdateStrategyRequest: type: object properties: uid: type: string name: type: string remark: type: string metadata: type: object additionalProperties: type: string strategyGroupUID: type: string type: type: integer format: enum driver: type: integer format: enum marksman.api.v1.UpdateStrategyStatusReply: type: object properties: {} marksman.api.v1.UpdateStrategyStatusRequest: type: object properties: uid: type: string status: type: integer format: enum tags: - name: Alert description: 'Alert service: alert page CRUD and real-time alert list/operations.' - name: Datasource - name: Level - name: MetricQuery description: MetricQuery provides query, query_range and proxy for metric-type datasources (Prometheus / VictoriaMetrics). - name: NotificationGroup description: 'NotificationGroup service: CRUD for notification groups (members, webhooks, templates updated via Update).' - name: NotificationGroupSubscription description: 'NotificationGroupSubscription: get/save subscription filter for a notification group (save creates or overwrites).' - name: Strategy - name: StrategyMetric