Compare commits

..

3 Commits

Author SHA1 Message Date
Gaurav Tewari
3c5bd81421 chore: add ripple effect 2026-05-23 22:15:00 +05:30
swapnil-signoz
832930239e refactor: cloud integration dashboards migration to DB (#11382)
Some checks are pending
build-staging / prepare (push) Waiting to run
build-staging / js-build (push) Blocked by required conditions
build-staging / go-build (push) Blocked by required conditions
build-staging / staging (push) Blocked by required conditions
Release Drafter / update_release_draft (push) Waiting to run
* chore: added migration setup

* feat(sqlmigration): add integration_dashboards table (migration 079)

Adds the `integration_dashboards` relations table that stores the
integration-specific identity for dashboards provisioned from cloud
or builtin integrations. Columns: id, org_id, dashboard_id, provider,
slug, created_at, updated_at. Includes a unique index on dashboard_id.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(sqlmigration): backfill cloud integration dashboards to DB (migration 080)

One-time idempotent migration that provisions dashboard rows for all
orgs with existing cloud integration services where metrics are enabled.
Each dashboard is inserted into the `dashboard` table with
source="integration" and locked=true, and a companion row is added to
`integration_dashboards` with provider="cloud_integrations" and
slug="{provider}-{service}-{dashboard}" (e.g. aws-alb-overview).
Idempotency is enforced by checking (org_id, provider, slug) on
integration_dashboards before each insert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(sqlmigration): clean up stale 079 artifacts, add 079 schema migration

Remove the pre-rename 079_migrate_cloud_integration_dashboards.go and
079_cloud_integration_dashboards/ directory that were left behind when
the backfill migration was renumbered to 080. Add the missing
079_add_integration_dashboards.go (schema-only migration creating the
integration_dashboards table) which provider.go already references.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: adding comment for fk

* refactor: renaming table name

* refactor: rename and restructure cloud integration dashboard migration types

* chore: file rename

* refactor: dashboard creation and listing flow change

* refactor: removing loose strings

* refactor: adding DeleteBySource on dashboard module

* refactor: review changes and update service flow change

* refactor: simplify comments

* ci: lint staticcheck fix

* refactor: renaming migration and adding integration tests

* ci: py fmt lint fixes

* feat: adding ListSharedServices store method

* ci: golangci-lint fix

* refactor: code cleanup

* chore: revert changed due to js lint

* refactor: test assertion changes

* refactor: using bindparam for sql generation

* chore: migrate integration dashboards json to v5 (#11419)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
2026-05-23 03:05:06 +00:00
Gaurav Tewari
f2a18e8b6c fix(trace-details): make back button reliably return to previous in-app page (#11414)
Some checks failed
build-staging / prepare (push) Has been cancelled
build-staging / js-build (push) Has been cancelled
build-staging / go-build (push) Has been cancelled
build-staging / staging (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
* fix: back button issue

* chore: add unit test

* fix : test cases

---------

Co-authored-by: Gaurav Tewari <tewarig@users.noreply.github.com>
2026-05-22 16:13:26 +00:00
118 changed files with 26104 additions and 9365 deletions

View File

@@ -115,7 +115,7 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
func(ps factory.ProviderSettings, q querier.Querier, a analytics.Analytics) querier.Handler {
return querier.NewHandler(ps, q, a)
},
func(_ sqlstore.SQLStore, _ global.Global, _ zeus.Zeus, _ gateway.Gateway, _ licensing.Licensing, _ serviceaccount.Module, _ cloudintegration.Config) (cloudintegration.Module, error) {
func(_ sqlstore.SQLStore, _ dashboard.Module, _ global.Global, _ zeus.Zeus, _ gateway.Gateway, _ licensing.Licensing, _ serviceaccount.Module, _ cloudintegration.Config) (cloudintegration.Module, error) {
return implcloudintegration.NewModule(), nil
},
func(c cache.Cache, am alertmanager.Alertmanager, ss sqlstore.SQLStore, ts telemetrystore.TelemetryStore, ms telemetrytypes.MetadataStore, p prometheus.Prometheus, og organization.Getter, rsh rulestatehistory.Module, q querier.Querier, qp queryparser.QueryParser) factory.NamedMap[factory.ProviderFactory[ruler.Ruler, ruler.Config]] {

View File

@@ -167,7 +167,7 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
communityHandler := querier.NewHandler(ps, q, a)
return eequerier.NewHandler(ps, q, communityHandler)
},
func(sqlStore sqlstore.SQLStore, global global.Global, zeus zeus.Zeus, gateway gateway.Gateway, licensing licensing.Licensing, serviceAccount serviceaccount.Module, config cloudintegration.Config) (cloudintegration.Module, error) {
func(sqlStore sqlstore.SQLStore, dashboardModule dashboard.Module, global global.Global, zeus zeus.Zeus, gateway gateway.Gateway, licensing licensing.Licensing, serviceAccount serviceaccount.Module, config cloudintegration.Config) (cloudintegration.Module, error) {
defStore := pkgcloudintegration.NewServiceDefinitionStore()
awsCloudProviderModule, err := implcloudprovider.NewAWSCloudProvider(defStore)
if err != nil {
@@ -179,7 +179,7 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
cloudintegrationtypes.CloudProviderTypeAzure: azureCloudProviderModule,
}
return implcloudintegration.NewModule(pkgcloudintegration.NewStore(sqlStore), global, zeus, gateway, licensing, serviceAccount, cloudProvidersMap, config)
return implcloudintegration.NewModule(pkgcloudintegration.NewStore(sqlStore), dashboardModule, global, zeus, gateway, licensing, serviceAccount, cloudProvidersMap, config)
},
func(c cache.Cache, am alertmanager.Alertmanager, ss sqlstore.SQLStore, ts telemetrystore.TelemetryStore, ms telemetrytypes.MetadataStore, p prometheus.Prometheus, og organization.Getter, rsh rulestatehistory.Module, q querier.Querier, qp queryparser.QueryParser) factory.NamedMap[factory.ProviderFactory[ruler.Ruler, ruler.Config]] {
return factory.MustNewNamedMap(signozruler.NewFactory(c, am, ss, ts, ms, p, og, rsh, q, qp, eerules.PrepareTaskFunc, eerules.TestNotification))

View File

@@ -54,11 +54,6 @@ func (provider *awscloudprovider) GetServiceDefinition(ctx context.Context, serv
return nil, err
}
// override cloud integration dashboard id
for index, dashboard := range serviceDef.Assets.Dashboards {
serviceDef.Assets.Dashboards[index].ID = cloudintegrationtypes.GetCloudIntegrationDashboardID(cloudintegrationtypes.CloudProviderTypeAWS, serviceID.StringValue(), dashboard.ID)
}
return serviceDef, nil
}

View File

@@ -38,11 +38,6 @@ func (provider *azurecloudprovider) GetServiceDefinition(ctx context.Context, se
return nil, err
}
// override cloud integration dashboard id.
for index, dashboard := range serviceDef.Assets.Dashboards {
serviceDef.Assets.Dashboards[index].ID = cloudintegrationtypes.GetCloudIntegrationDashboardID(cloudintegrationtypes.CloudProviderTypeAzure, serviceID.StringValue(), dashboard.ID)
}
return serviceDef, nil
}

View File

@@ -3,7 +3,6 @@ package implcloudintegration
import (
"context"
"fmt"
"sort"
"time"
"github.com/SigNoz/signoz/pkg/errors"
@@ -11,6 +10,7 @@ import (
"github.com/SigNoz/signoz/pkg/global"
"github.com/SigNoz/signoz/pkg/licensing"
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
"github.com/SigNoz/signoz/pkg/modules/dashboard"
"github.com/SigNoz/signoz/pkg/modules/serviceaccount"
"github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
@@ -23,6 +23,7 @@ import (
type module struct {
store cloudintegrationtypes.Store
dashboardModule dashboard.Module
gateway gateway.Gateway
zeus zeus.Zeus
licensing licensing.Licensing
@@ -34,6 +35,7 @@ type module struct {
func NewModule(
store cloudintegrationtypes.Store,
dashboardModule dashboard.Module,
global global.Global,
zeus zeus.Zeus,
gateway gateway.Gateway,
@@ -44,6 +46,7 @@ func NewModule(
) (cloudintegration.Module, error) {
return &module{
store: store,
dashboardModule: dashboardModule,
global: global,
zeus: zeus,
gateway: gateway,
@@ -254,7 +257,41 @@ func (module *module) DisconnectAccount(ctx context.Context, orgID valuer.UUID,
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
return module.store.RemoveAccount(ctx, orgID, accountID, provider)
return module.store.RunInTx(ctx, func(ctx context.Context) error {
services, err := module.store.ListServices(ctx, accountID)
if err != nil {
return err
}
sharedServices, err := module.store.ListSharedServices(ctx, orgID, provider, accountID)
if err != nil {
return err
}
for _, svc := range services {
svcCfg, err := cloudintegrationtypes.NewServiceConfigFromJSON(provider, svc.Config)
if err != nil {
return err
}
if !svcCfg.IsMetricsEnabled(provider) {
continue
}
if cloudintegrationtypes.IsServiceSharedWithMetricsEnabled(provider, sharedServices[svc.Type]) {
continue
}
if err := module.deprovisionDashboards(ctx, orgID, provider, svc.Type); err != nil {
return err
}
}
if err := module.store.DeleteServicesByCloudIntegrationID(ctx, orgID, accountID); err != nil {
return err
}
return module.store.RemoveAccount(ctx, orgID, accountID, provider)
})
}
func (module *module) ListServicesMetadata(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, integrationID valuer.UUID) ([]*cloudintegrationtypes.ServiceMetadata, error) {
@@ -331,12 +368,16 @@ func (module *module) GetService(ctx context.Context, orgID valuer.UUID, service
integrationService = cloudintegrationtypes.NewCloudIntegrationServiceFromStorable(storedService, serviceConfig)
}
if err := module.enrichDashboardIDs(ctx, orgID, provider, serviceID, serviceDefinition); err != nil {
return nil, err
}
}
return cloudintegrationtypes.NewService(*serviceDefinition, integrationService), nil
}
func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
_, err := module.licensing.GetActive(ctx, orgID)
if err != nil {
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
@@ -357,10 +398,21 @@ func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, serv
return err
}
return module.store.CreateService(ctx, cloudintegrationtypes.NewStorableCloudIntegrationService(service, string(configJSON)))
metricsEnabled := service.Config.IsMetricsEnabled(provider)
storableService := cloudintegrationtypes.NewStorableCloudIntegrationService(service, string(configJSON))
return module.store.RunInTx(ctx, func(ctx context.Context) error {
if err := module.store.CreateService(ctx, storableService); err != nil {
return err
}
if metricsEnabled {
return module.provisionDashboards(ctx, orgID, createdBy, creator, provider, service, serviceDefinition)
}
return nil
})
}
func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, integrationService *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, integrationService *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
_, err := module.licensing.GetActive(ctx, orgID)
if err != nil {
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
@@ -381,43 +433,28 @@ func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, inte
return err
}
metricsEnabled := integrationService.Config.IsMetricsEnabled(provider)
storableService := cloudintegrationtypes.NewStorableCloudIntegrationService(integrationService, string(configJSON))
return module.store.UpdateService(ctx, storableService)
}
func (module *module) GetDashboardByID(ctx context.Context, orgID valuer.UUID, id string) (*dashboardtypes.Dashboard, error) {
_, err := module.licensing.GetActive(ctx, orgID)
if err != nil {
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
_, _, _, err = cloudintegrationtypes.ParseCloudIntegrationDashboardID(id)
if err != nil {
return nil, err
}
allDashboards, err := module.listDashboards(ctx, orgID)
if err != nil {
return nil, err
}
for _, d := range allDashboards {
if d.ID == id {
return d, nil
return module.store.RunInTx(ctx, func(ctx context.Context) error {
if err := module.store.UpdateService(ctx, storableService); err != nil {
return err
}
}
return nil, errors.New(errors.TypeNotFound, cloudintegrationtypes.ErrCodeCloudIntegrationNotFound, "cloud integration dashboard not found")
}
if metricsEnabled {
return module.provisionDashboards(ctx, orgID, createdBy, creator, provider, integrationService, serviceDefinition)
}
func (module *module) ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
_, err := module.licensing.GetActive(ctx, orgID)
if err != nil {
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
sharedServices, err := module.store.ListSharedServices(ctx, orgID, provider, integrationService.CloudIntegrationID)
if err != nil {
return err
}
if cloudintegrationtypes.IsServiceSharedWithMetricsEnabled(provider, sharedServices[integrationService.Type]) {
return nil
}
return module.listDashboards(ctx, orgID)
return module.deprovisionDashboards(ctx, orgID, provider, integrationService.Type)
})
}
func (module *module) Collect(ctx context.Context, orgID valuer.UUID) (map[string]any, error) {
@@ -493,52 +530,73 @@ func (module *module) getOrCreateAPIKey(ctx context.Context, orgID valuer.UUID,
return factorAPIKey.Key, nil
}
func (module *module) listDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
var allDashboards []*dashboardtypes.Dashboard
// provisionDashboards creates dashboard and integration_dashboard rows for each dashboard in the service definition.
// Must be called within a transaction (ctx carries the tx).
func (module *module) provisionDashboards(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, provider cloudintegrationtypes.CloudProviderType, service *cloudintegrationtypes.CloudIntegrationService, serviceDefinition *cloudintegrationtypes.ServiceDefinition) error {
// TODO: DB calls are in for loop, can be optimized later.
for _, dashboard := range serviceDefinition.Assets.Dashboards {
slug := cloudintegrationtypes.IntegrationDashboardSlug(provider, service.Type, dashboard.ID)
for provider := range module.cloudProvidersMap {
cloudProvider, err := module.getCloudProvider(provider)
if err != nil {
return nil, err
existing, err := module.store.GetIntegrationDashboardBySlug(ctx, orgID, cloudintegrationtypes.IntegrationDashboardProviderCloudIntegration, slug)
if err != nil && !errors.Ast(err, errors.TypeNotFound) {
return err
}
if existing != nil {
continue
}
connectedAccounts, err := module.store.ListConnectedAccounts(ctx, orgID, provider)
createdDashboard, err := module.dashboardModule.Create(ctx, orgID, createdBy, creator, dashboardtypes.SourceIntegration, dashboardtypes.PostableDashboard(dashboard.Definition))
if err != nil {
return nil, err
return err
}
for _, storableAccount := range connectedAccounts {
storedServices, err := module.store.ListServices(ctx, storableAccount.ID)
if err != nil {
return nil, err
}
for _, storedSvc := range storedServices {
serviceConfig, err := cloudintegrationtypes.NewServiceConfigFromJSON(provider, storedSvc.Config)
if err != nil || !serviceConfig.IsMetricsEnabled(provider) {
continue
}
svcDef, err := cloudProvider.GetServiceDefinition(ctx, storedSvc.Type)
if err != nil || svcDef == nil {
continue
}
dashboards := cloudintegrationtypes.GetDashboardsFromAssets(
storedSvc.Type.StringValue(),
orgID,
provider,
storableAccount.CreatedAt,
svcDef.Assets,
)
allDashboards = append(allDashboards, dashboards...)
}
integrationDashboard := cloudintegrationtypes.NewStorableIntegrationDashboard(createdDashboard.ID, cloudintegrationtypes.IntegrationDashboardProviderCloudIntegration, slug)
if err := module.store.CreateIntegrationDashboard(ctx, integrationDashboard); err != nil {
return err
}
}
sort.Slice(allDashboards, func(i, j int) bool {
return allDashboards[i].ID < allDashboards[j].ID
})
return allDashboards, nil
return nil
}
// deprovisionDashboards deletes all dashboard and integration_dashboard rows for the given service.
// make sure to call this within a transaction.
func (module *module) deprovisionDashboards(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, serviceID cloudintegrationtypes.ServiceID) error {
slugPrefix := cloudintegrationtypes.IntegrationDashboardSlugPrefix(provider, serviceID)
rows, err := module.store.ListIntegrationDashboardsBySlugPrefix(ctx, orgID, cloudintegrationtypes.IntegrationDashboardProviderCloudIntegration, slugPrefix)
if err != nil {
return err
}
for _, row := range rows {
dashID, err := valuer.NewUUID(row.DashboardID)
if err != nil {
return err
}
if err := module.store.DeleteIntegrationDashboardBySlug(ctx, orgID, cloudintegrationtypes.IntegrationDashboardProviderCloudIntegration, row.Slug); err != nil {
return err
}
if err := module.dashboardModule.DeleteUnsafe(ctx, orgID, dashID); err != nil {
return err
}
}
return nil
}
// enrichDashboardIDs replaces the raw dashboard name in each Dashboard.ID with the provisioned UUID.
// TODO: remove this hack and send idiomatic response to client.
func (module *module) enrichDashboardIDs(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, serviceID cloudintegrationtypes.ServiceID, serviceDefinition *cloudintegrationtypes.ServiceDefinition) error {
for i, d := range serviceDefinition.Assets.Dashboards {
slug := cloudintegrationtypes.IntegrationDashboardSlug(provider, serviceID, d.ID)
row, err := module.store.GetIntegrationDashboardBySlug(ctx, orgID, cloudintegrationtypes.IntegrationDashboardProviderCloudIntegration, slug)
if err != nil {
if errors.Ast(err, errors.TypeNotFound) {
continue
}
return err
}
serviceDefinition.Assets.Dashboards[i].ID = row.DashboardID
}
return nil
}

View File

@@ -162,24 +162,11 @@ func (module *module) Delete(ctx context.Context, orgID valuer.UUID, id valuer.U
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "dashboard is locked, please unlock the dashboard to be delete it")
}
err = module.store.RunInTx(ctx, func(ctx context.Context) error {
err := module.store.DeletePublic(ctx, id.String())
if err != nil && !errors.Ast(err, errors.TypeNotFound) {
return err
}
return module.delete(ctx, orgID, id)
}
err = module.store.Delete(ctx, orgID, id)
if err != nil {
return err
}
return nil
})
if err != nil {
return err
}
return nil
func (module *module) DeleteUnsafe(ctx context.Context, orgID, id valuer.UUID) error {
return module.delete(ctx, orgID, id)
}
func (module *module) DeletePublic(ctx context.Context, orgID valuer.UUID, dashboardID valuer.UUID) error {
@@ -221,8 +208,8 @@ func (module *module) Collect(ctx context.Context, orgID valuer.UUID) (map[strin
return stats, nil
}
func (module *module) Create(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, data dashboardtypes.PostableDashboard) (*dashboardtypes.Dashboard, error) {
return module.pkgDashboardModule.Create(ctx, orgID, createdBy, creator, data)
func (module *module) Create(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, source dashboardtypes.Source, data dashboardtypes.PostableDashboard) (*dashboardtypes.Dashboard, error) {
return module.pkgDashboardModule.Create(ctx, orgID, createdBy, creator, source, data)
}
func (module *module) Get(ctx context.Context, orgID valuer.UUID, id valuer.UUID) (*dashboardtypes.Dashboard, error) {
@@ -244,3 +231,12 @@ func (module *module) Update(ctx context.Context, orgID valuer.UUID, id valuer.U
func (module *module) LockUnlock(ctx context.Context, orgID valuer.UUID, id valuer.UUID, updatedBy string, isAdmin bool, lock bool) error {
return module.pkgDashboardModule.LockUnlock(ctx, orgID, id, updatedBy, isAdmin, lock)
}
func (module *module) delete(ctx context.Context, orgID, id valuer.UUID) error {
return module.store.RunInTx(ctx, func(ctx context.Context) error {
if err := module.store.DeletePublic(ctx, id.String()); err != nil && !errors.Ast(err, errors.TypeNotFound) {
return err
}
return module.store.Delete(ctx, orgID, id)
})
}

View File

@@ -6,7 +6,7 @@ import {
useState,
} from 'react';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import { Input } from 'antd';
import logEvent from 'api/common/logEvent';
import cx from 'classnames';
import { TimezonePickerShortcuts } from 'constants/shortcuts/TimezonePickerShortcuts';

View File

@@ -1,6 +1,5 @@
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Card, Form } from 'antd';
import { Card, Form, Input } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { PANEL_TYPES } from 'constants/queryBuilder';
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';

View File

@@ -1,6 +1,5 @@
import { useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button } from 'antd';
import { Button, Input } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import cx from 'classnames';
import { X } from '@signozhq/icons';

View File

@@ -1,6 +1,5 @@
import { useCallback, useEffect, useRef, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button, InputNumber, Popover, Tooltip } from 'antd';
import { Button, Input, InputNumber, Popover, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import type { DefaultOptionType } from 'antd/es/select';
import cx from 'classnames';

View File

@@ -1,7 +1,6 @@
/* eslint-disable sonarjs/no-identical-functions */
import { Fragment, useMemo, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button, Checkbox, Skeleton } from 'antd';
import { Button, Checkbox, Input, Skeleton } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import cx from 'classnames';
import { removeKeysFromExpression } from 'components/QueryBuilderV2/utils';

View File

@@ -1,6 +1,5 @@
import { useMemo } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button } from 'antd';
import { Button, Input } from 'antd';
import { Check, TableColumnsSplit, X } from '@signozhq/icons';
import { Filter as FilterType } from 'types/api/quickFilters/getCustomFilters';

View File

@@ -1,6 +1,5 @@
import { useMemo, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button, Select, Tooltip } from 'antd';
import { Button, Input, Select, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { CircleX, Trash } from '@signozhq/icons';
import { useAppContext } from 'providers/App/App';

View File

@@ -1,5 +1,4 @@
import { Input } from '@signozhq/ui/input';
import { Collapse } from 'antd';
import { Collapse, Input } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { useCreateAlertState } from '../context';

View File

@@ -1,6 +1,5 @@
import { useMemo } from 'react';
import { Input } from '@signozhq/ui/input';
import { Select } from 'antd';
import { Input, Select } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { ADVANCED_OPTIONS_TIME_UNIT_OPTIONS } from '../../context/constants';

View File

@@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Input } from 'antd';
import './TimeInput.scss';
export interface TimeInputProps {

View File

@@ -1,5 +1,4 @@
import { Input } from '@signozhq/ui/input';
import { Select } from 'antd';
import { Input, Select } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { useCreateAlertState } from '../context';

View File

@@ -16,8 +16,7 @@ import {
Plus,
X,
} from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Card, Modal, Popover, Tag, Tooltip } from 'antd';
import { Button, Card, Input, Modal, Popover, Tag, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import ConfigureIcon from 'assets/Integrations/ConfigureIcon';

View File

@@ -1,6 +1,5 @@
import { useCallback, useEffect, useMemo, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button } from 'antd';
import { Button, Input } from 'antd';
import { PrecisionOption, PrecisionOptionsEnum } from 'components/Graph/types';
import { ResizeTable } from 'components/ResizeTable';
import { useNotifications } from 'hooks/useNotifications';

View File

@@ -19,11 +19,11 @@ import {
Info,
} from '@signozhq/icons';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import {
Button,
ColorPicker,
Divider,
Input,
Modal,
RefSelectProps,
Select,

View File

@@ -1,7 +1,7 @@
import { Dispatch, SetStateAction } from 'react';
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Form } from 'antd';
import { Form, Input } from 'antd';
import { EmailChannel } from '../../CreateAlertChannels/config';
function EmailForm({ setSelectedConfig }: EmailFormProps): JSX.Element {

View File

@@ -1,7 +1,6 @@
import { Dispatch, SetStateAction } from 'react';
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Form } from 'antd';
import { Form, Input } from 'antd';
import { MarkdownRenderer } from 'components/MarkdownRenderer/MarkdownRenderer';
import { WebhookChannel } from '../../CreateAlertChannels/config';

View File

@@ -1,8 +1,7 @@
import { Dispatch, ReactElement, SetStateAction } from 'react';
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Form, FormInstance, Input, Select } from 'antd';
import { Switch } from '@signozhq/ui/switch';
import { Form, FormInstance, Select } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import type { Store } from 'antd/lib/form/interface';
import ROUTES from 'constants/routes';

View File

@@ -6,8 +6,7 @@ import { useIsFetching } from 'react-query';
import { useDispatch } from 'react-redux';
import { useLocation } from 'react-router-dom';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import { Button, Form, Modal } from 'antd';
import { Button, Form, Input, Modal } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import cx from 'classnames';

View File

@@ -5,12 +5,12 @@ import { useCopyToClipboard } from 'react-use';
import { Color } from '@signozhq/design-tokens';
import { Badge } from '@signozhq/ui/badge';
import { Button } from '@signozhq/ui/button';
import { Input } from '@signozhq/ui/input';
import {
Col,
Collapse,
DatePicker,
Form,
Input,
InputNumber,
Modal,
Row,

View File

@@ -1,5 +1,4 @@
import { Input } from '@signozhq/ui/input';
import { Form } from 'antd';
import { Form, Input } from 'antd';
import { CloudintegrationtypesCredentialsDTO } from 'api/generated/services/sigNoz.schemas';
function RenderConnectionFields({

View File

@@ -1,7 +1,6 @@
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Button, Form } from 'antd';
import { Button, Form, Input } from 'antd';
import apply from 'api/v3/licenses/post';
import { useNotifications } from 'hooks/useNotifications';
import APIError from 'types/api/error';

View File

@@ -1,7 +1,6 @@
/* eslint-disable @typescript-eslint/explicit-function-return-type */
import { ChangeEvent, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Button, Modal } from 'antd';
import { Button, Input, Modal } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import ApacheIcon from 'assets/CustomIcons/ApacheIcon';
import DockerIcon from 'assets/CustomIcons/DockerIcon';

View File

@@ -12,11 +12,11 @@ import { useTranslation } from 'react-i18next';
import { generatePath } from 'react-router-dom';
import { useCopyToClipboard } from 'react-use';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import {
Button,
Dropdown,
Flex,
Input,
MenuProps,
Modal,
Popover,

View File

@@ -1,8 +1,7 @@
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { LoaderCircle, Check } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Space } from 'antd';
import { Button, Input, Space } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import { useNotifications } from 'hooks/useNotifications';

View File

@@ -2,9 +2,8 @@ import { ReactNode, useState } from 'react';
import MEditor, { EditorProps, Monaco } from '@monaco-editor/react';
import { Color } from '@signozhq/design-tokens';
import { Button } from '@signozhq/ui/button';
import { Input } from '@signozhq/ui/input';
import { Switch } from '@signozhq/ui/switch';
import { Collapse, Divider, Tag } from 'antd';
import { Collapse, Divider, Input, Tag } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { AddToQueryHOCProps } from 'components/Logs/AddToQueryHOC';
import { ChangeViewFunctionType } from 'container/ExplorerOptions/types';

View File

@@ -2,8 +2,7 @@ import { ChangeEvent, useCallback, useState } from 'react';
// eslint-disable-next-line no-restricted-imports
import { useSelector } from 'react-redux';
import { CirclePlus, X } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Col } from 'antd';
import { Col, Input } from 'antd';
import CategoryHeading from 'components/Logs/CategoryHeading';
import { fieldSearchFilter } from 'lib/logs/fieldSearch';
import { AppState } from 'store/reducers';

View File

@@ -2,8 +2,7 @@ import { useCallback, useMemo, useState } from 'react';
// eslint-disable-next-line no-restricted-imports
import { useSelector } from 'react-redux';
import { SquareX, X } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Select } from 'antd';
import { Button, Input, Select } from 'antd';
import CategoryHeading from 'components/Logs/CategoryHeading';
import {
ConditionalOperators,

View File

@@ -1,7 +1,6 @@
import { Input } from 'antd';
import { Typography } from '@signozhq/ui/typography';
// TODO(@signozhq/ui-input): migrate this <Input> once @signozhq/ui Input
// supports the `onWheel` handler (used to blur on scroll for number inputs).
import { Input, Select } from 'antd';
import { Select } from 'antd';
import classNames from 'classnames';
import { TIME_AGGREGATION_OPTIONS } from './constants';

View File

@@ -1,8 +1,7 @@
import { useCallback, useEffect, useMemo, useState } from 'react';
import { useQueryClient } from 'react-query';
import type { TableColumnsType as ColumnsType } from 'antd';
import { Input } from '@signozhq/ui/input';
import { Button, Collapse, Select, Spin } from 'antd';
import { Button, Collapse, Input, Select, Spin } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import {

View File

@@ -153,3 +153,18 @@
border-radius: 3px;
}
// Disable default fade so the JS-driven clip-path ripple isn't crossfaded.
::view-transition-old(root),
::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
}
::view-transition-old(root) {
z-index: 1;
}
::view-transition-new(root) {
z-index: 2;
}

View File

@@ -15,6 +15,11 @@ import { UserPreference } from 'types/api/preferences/preference';
import { showErrorNotification } from 'utils/error';
import LicenseSection from './LicenseSection';
import {
canAnimateThemeRipple,
getRippleOrigin,
runThemeRipple,
} from './themeRipple';
import TimezoneAdaptation from './TimezoneAdaptation/TimezoneAdaptation';
import UserInfo from './UserInfo';
@@ -88,22 +93,35 @@ function MySettings(): JSX.Element {
return isDarkMode ? 'dark' : 'light';
});
const handleThemeChange = ({ target: { value } }: RadioChangeEvent): void => {
logEvent('Account Settings: Theme Changed', {
theme: value,
});
setTheme(value);
const handleThemeChange = (event: RadioChangeEvent): void => {
const { value } = event.target;
logEvent('Account Settings: Theme Changed', { theme: value });
if (value === 'auto') {
setAutoSwitch(true);
} else {
const willFlipDarkMode =
value !== 'auto' && (value === 'dark') !== isDarkMode;
const applyChange = (): void => {
setTheme(value);
if (value === 'auto') {
setAutoSwitch(true);
return;
}
setAutoSwitch(false);
// Only toggle if the current theme is different from the target
const targetIsDark = value === 'dark';
if (targetIsDark !== isDarkMode) {
if (willFlipDarkMode) {
toggleTheme();
}
};
// Only ripple on a real dark↔light flip, and only when the browser
// supports View Transitions and the user hasn't opted out of motion.
if (!willFlipDarkMode || !canAnimateThemeRipple()) {
applyChange();
return;
}
const clickedTarget = event.nativeEvent?.target as HTMLElement | null;
const clickedButton = clickedTarget?.closest('.ant-radio-button-wrapper');
runThemeRipple(getRippleOrigin(clickedButton), applyChange);
};
useEffect(() => {
@@ -143,7 +161,7 @@ function MySettings(): JSX.Element {
value: checked,
},
{
onError: (error) => {
onError: (error: unknown) => {
// Revert the state if the API call fails
setSideNavPinned(!checked);
updateUserPreferenceInContext({

View File

@@ -0,0 +1,76 @@
import { flushSync } from 'react-dom';
const RIPPLE_DURATION_MS = 500;
const RIPPLE_EASING = 'ease-in-out';
type ViewTransition = { ready: Promise<void> };
type DocumentWithVT = Document & {
startViewTransition?: (callback: () => void) => ViewTransition;
};
export type RippleOrigin = { x: number; y: number };
export function getRippleOrigin(
element: Element | null | undefined,
): RippleOrigin {
const rect = element?.getBoundingClientRect();
if (!rect) {
return { x: window.innerWidth / 2, y: window.innerHeight / 2 };
}
return {
x: rect.left + rect.width / 2,
y: rect.top + rect.height / 2,
};
}
export function canAnimateThemeRipple(): boolean {
const doc = document as DocumentWithVT;
if (typeof doc.startViewTransition !== 'function') {
return false;
}
return !window.matchMedia('(prefers-reduced-motion: reduce)').matches;
}
// Runs `applyChange` inside a View Transition and grows a circular clip-path
// from `origin` until it covers the viewport. Callers should gate on
// canAnimateThemeRipple() first; this is a safe no-animation fallback otherwise.
export function runThemeRipple(
origin: RippleOrigin,
applyChange: () => void,
): void {
const doc = document as DocumentWithVT;
if (!doc.startViewTransition) {
applyChange();
return;
}
const transition = doc.startViewTransition(() => {
flushSync(applyChange);
});
const endRadius = distanceToFurthestCorner(origin);
const fromCircle = `circle(0px at ${origin.x}px ${origin.y}px)`;
const toCircle = `circle(${endRadius}px at ${origin.x}px ${origin.y}px)`;
transition.ready
.then(() => {
document.documentElement.animate(
{ clipPath: [fromCircle, toCircle] },
{
duration: RIPPLE_DURATION_MS,
easing: RIPPLE_EASING,
pseudoElement: '::view-transition-new(root)',
},
);
})
.catch(() => {
// Transition cancelled — applyChange has already run, so nothing to do.
});
}
function distanceToFurthestCorner({ x, y }: RippleOrigin): number {
return Math.hypot(
Math.max(x, window.innerWidth - x),
Math.max(y, window.innerHeight - y),
);
}

View File

@@ -7,8 +7,7 @@ import {
DropResult,
} from 'react-beautiful-dnd';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import { Button, Divider, Dropdown, MenuProps, Tooltip } from 'antd';
import { Button, Divider, Dropdown, Input, MenuProps, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { FieldDataType } from 'api/v5/v5';
import { SOMETHING_WENT_WRONG } from 'constants/api';

View File

@@ -1,7 +1,5 @@
import { useEffect, useMemo, useState } from 'react';
// TODO(@signozhq/ui-input): migrate <Input> once @signozhq/ui Input
// supports the `spellCheck` prop on the URL input below.
import { Button, Col, Form, Input, Input as AntInput, Row } from 'antd';
import { Button, Col, Form, Input as AntInput, Input, Row } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { CONTEXT_LINK_FIELDS } from 'container/NewWidget/RightContainer/ContextLinks/constants';
import {

View File

@@ -1,8 +1,7 @@
import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Blocks, Check, LoaderCircle } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Card, Form, Select, Space } from 'antd';
import { Button, Card, Form, Input, Select, Space } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import cx from 'classnames';

View File

@@ -1,8 +1,7 @@
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Check, Server, LoaderCircle } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Card, Form, Space } from 'antd';
import { Button, Card, Form, Input, Space } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import cx from 'classnames';

View File

@@ -1,7 +1,6 @@
import { useTranslation } from 'react-i18next';
import { Plus, Trash2 } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Form, FormInstance, Select, Space } from 'antd';
import { Button, Form, FormInstance, Input, Select, Space } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { requireErrorMessage } from 'utils/form/requireErrorMessage';

View File

@@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Form } from 'antd';
import { Form, Input } from 'antd';
import { ProcessorFormField } from '../../AddNewProcessor/config';
import { formValidationRules } from '../../config';

View File

@@ -1,6 +1,4 @@
import { ChangeEventHandler, useState } from 'react';
// TODO(@signozhq/ui-input): migrate to @signozhq/ui Input once the antd
// `InputProps` spread (`size`, etc.) is no longer needed on this wrapper.
import { Input, InputProps } from 'antd';
function CSVInput({ value, onChange, ...otherProps }: InputProps): JSX.Element {

View File

@@ -1,8 +1,7 @@
import { useEffect, useState } from 'react';
import { Info } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Switch } from '@signozhq/ui/switch';
import { Flex, Form, Space, Tooltip } from 'antd';
import { Flex, Form, Input, Space, Tooltip } from 'antd';
import { ProcessorData } from 'types/api/pipeline/def';
import { PREDEFINED_MAPPING } from '../config';

View File

@@ -1,7 +1,6 @@
import { useTranslation } from 'react-i18next';
import { Input } from '@signozhq/ui/input';
import { Form, Input, Select, Space } from 'antd';
import { Switch } from '@signozhq/ui/switch';
import { Form, Select, Space } from 'antd';
import { ModalFooterTitle } from 'container/PipelinePage/styles';
import { ProcessorData } from 'types/api/pipeline/def';

View File

@@ -2,8 +2,7 @@ import React, { ChangeEvent, useEffect, useState } from 'react';
import { useHistory } from 'react-router-dom';
import { Plus, Search } from '@signozhq/icons';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import { Button, Flex, Form, Tooltip } from 'antd';
import { Button, Flex, Form, Input, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import {
useDeleteDowntimeScheduleByID,

View File

@@ -1,7 +1,6 @@
import { useCallback, useMemo, useState } from 'react';
import { useQuery } from 'react-query';
import { Input } from '@signozhq/ui/input';
import { Skeleton } from 'antd';
import { Input, Skeleton } from 'antd';
import { getKeySuggestions } from 'api/querySuggestions/getKeySuggestions';
import OverlayScrollbar from 'components/OverlayScrollbar/OverlayScrollbar';
import { QUERY_BUILDER_KEY_TYPES } from 'constants/antlrQueryConstants';

View File

@@ -1,8 +1,7 @@
import { ChangeEvent, useMemo } from 'react';
import { Plus, Search } from '@signozhq/icons';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import { Button, Flex, Tooltip } from 'antd';
import { Button, Flex, Input, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { useAppContext } from 'providers/App/App';
import { USER_ROLES } from 'types/roles';

View File

@@ -1,5 +1,5 @@
import { useCallback, useMemo, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Input } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import cx from 'classnames';
import CopyClipboardHOC from 'components/Logs/CopyClipboardHOC';

View File

@@ -1,6 +1,5 @@
import { useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Collapse, Modal } from 'antd';
import { Collapse, Input, Modal } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { getYAxisFormattedValue } from 'components/Graph/yAxisConfig';
import { Diamond } from '@signozhq/icons';

View File

@@ -9,10 +9,10 @@ import {
useState,
} from 'react';
import { useMutation, useQuery } from 'react-query';
import { Input } from '@signozhq/ui/input';
import {
Button,
Checkbox,
Input,
Modal,
Select,
Skeleton,

View File

@@ -1,7 +1,5 @@
// TODO(@signozhq/ui-input): migrate this styled(Input) once @signozhq/ui
// Input supports `addonAfter` (the consumer renders `<InputComponent addonAfter="ms">`).
import { Typography } from '@signozhq/ui/typography';
import { Input } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import styled from 'styled-components';
export const DurationText = styled.div`

View File

@@ -8,8 +8,7 @@ import {
import { useQuery } from 'react-query';
// eslint-disable-next-line no-restricted-imports
import { useSelector } from 'react-redux';
import { Input } from '@signozhq/ui/input';
import { AutoComplete } from 'antd';
import { AutoComplete, Input } from 'antd';
import getTagFilters from 'api/trace/getTagFilter';
import { AppState } from 'store/reducers';
import { GlobalReducer } from 'types/reducer/globalTime';

View File

@@ -2,8 +2,7 @@ import { useMemo, useState } from 'react';
import { useQuery } from 'react-query';
// eslint-disable-next-line no-restricted-imports
import { useSelector } from 'react-redux';
import { Input } from '@signozhq/ui/input';
import { AutoComplete, Space } from 'antd';
import { AutoComplete, Input, Space } from 'antd';
import getTagFilters from 'api/trace/getTagFilter';
import { AppState } from 'store/reducers';
import { GlobalReducer } from 'types/reducer/globalTime';

View File

@@ -1,7 +1,6 @@
import { ChangeEvent, useEffect, useMemo, useState } from 'react';
import { ArrowLeft, Check, Loader, Plus, Search } from '@signozhq/icons';
import { Input } from '@signozhq/ui/input';
import { Button, Spin } from 'antd';
import { Button, Input, Spin } from 'antd';
import cx from 'classnames';
import OverlayScrollbar from 'components/OverlayScrollbar/OverlayScrollbar';
import SignozModal from 'components/SignozModal/SignozModal';

View File

@@ -1,4 +1,4 @@
import { Input } from '@signozhq/ui/input';
import { Input } from 'antd';
import styled from 'styled-components';
export const InputComponent = styled(Input)`

View File

@@ -1,4 +1,15 @@
import { createBrowserHistory } from 'history';
import { getBasePath } from 'utils/basePath';
export default createBrowserHistory({ basename: getBasePath() });
const history = createBrowserHistory({ basename: getBasePath() });
let inAppPushCount = 0;
history.listen((_, action) => {
if (action === 'PUSH') {
inAppPushCount += 1;
}
});
export const hasInAppHistory = (): boolean => inAppPushCount > 0;
export default history;

View File

@@ -1,6 +1,5 @@
import { Dispatch, SetStateAction, useEffect, useState } from 'react';
import { Input } from '@signozhq/ui/input';
import { Select } from 'antd';
import { Input, Select } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import './DropRateView.styles.scss';

View File

@@ -3,8 +3,7 @@ import { useTranslation } from 'react-i18next';
import { useLocation } from 'react-router-dom';
import { Color } from '@signozhq/design-tokens';
import { Button } from '@signozhq/ui/button';
import { Input } from '@signozhq/ui/input';
import { ColorPicker, Modal, Table, TableProps } from 'antd';
import { ColorPicker, Input, Modal, Table, TableProps } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import logEvent from 'api/common/logEvent';
import {

View File

@@ -1,5 +1,4 @@
import { Input } from '@signozhq/ui/input';
import { Checkbox, Select, Skeleton } from 'antd';
import { Checkbox, Input, Select, Skeleton } from 'antd';
import { Button } from '@signozhq/ui/button';
import { Typography } from '@signozhq/ui/typography';
import cx from 'classnames';

View File

@@ -16,7 +16,7 @@ import { LOCALSTORAGE } from 'constants/localStorage';
import ROUTES from 'constants/routes';
import { convertTimeToRelevantUnit } from 'container/TraceDetail/utils';
import dayjs from 'dayjs';
import history from 'lib/history';
import history, { hasInAppHistory } from 'lib/history';
import {
ArrowLeft,
CalendarClock,
@@ -96,13 +96,7 @@ function TraceDetailsHeader({
}, [traceID]);
const handlePreviousBtnClick = useCallback((): void => {
const isSpaNavigate =
document.referrer &&
// oxlint-disable-next-line signoz/no-raw-absolute-path
new URL(document.referrer).origin === window.location.origin;
const hasBackHistory = window.history.length > 1;
if (isSpaNavigate && hasBackHistory) {
if (hasInAppHistory()) {
history.goBack();
} else {
history.push(ROUTES.TRACES_EXPLORER);
@@ -130,6 +124,7 @@ function TraceDetailsHeader({
size="md"
className={styles.backBtn}
onClick={handlePreviousBtnClick}
aria-label="Back"
>
<ArrowLeft size={14} />
</Button>

View File

@@ -0,0 +1,60 @@
import { fireEvent, screen } from '@testing-library/react';
import ROUTES from 'constants/routes';
import { render } from 'tests/test-utils';
import TraceDetailsHeader from '../TraceDetailsHeader';
const mockGoBack = jest.fn();
const mockPush = jest.fn();
const mockHasInAppHistory = jest.fn();
jest.mock('lib/history', () => ({
__esModule: true,
default: {
goBack: (): void => mockGoBack(),
push: (path: string): void => mockPush(path),
replace: jest.fn(),
location: { pathname: '/', search: '' },
listen: (): (() => void) => (): void => undefined,
},
hasInAppHistory: (): boolean => mockHasInAppHistory(),
}));
const baseProps = {
filterMetadata: {
startTime: 0,
endTime: 1,
traceId: 'trace-123',
},
onFilteredSpansChange: jest.fn(),
isDataLoaded: false,
};
describe('TraceDetailsHeader back button', () => {
beforeEach(() => {
mockGoBack.mockClear();
mockPush.mockClear();
mockHasInAppHistory.mockReset();
});
it('calls history.goBack() when there is in-app SPA history', () => {
mockHasInAppHistory.mockReturnValue(true);
render(<TraceDetailsHeader {...baseProps} />);
fireEvent.click(screen.getByRole('button', { name: /back/i }));
expect(mockGoBack).toHaveBeenCalledTimes(1);
expect(mockPush).not.toHaveBeenCalled();
});
it('pushes to the traces explorer route when there is no in-app SPA history', () => {
mockHasInAppHistory.mockReturnValue(false);
render(<TraceDetailsHeader {...baseProps} />);
fireEvent.click(screen.getByRole('button', { name: /back/i }));
expect(mockPush).toHaveBeenCalledTimes(1);
expect(mockPush).toHaveBeenCalledWith(ROUTES.TRACES_EXPLORER);
expect(mockGoBack).not.toHaveBeenCalled();
});
});

View File

@@ -1,7 +1,6 @@
import { ChangeEvent, useEffect, useMemo, useState } from 'react';
import { Button } from '@signozhq/ui/button';
import { Input } from '@signozhq/ui/input';
import { Spin } from 'antd';
import { Input, Spin } from 'antd';
import cx from 'classnames';
import OverlayScrollbar from 'components/OverlayScrollbar/OverlayScrollbar';
import SignozModal from 'components/SignozModal/SignozModal';

View File

@@ -1,6 +1,6 @@
import { useState } from 'react';
import { useQueryClient } from 'react-query';
import { Input } from '@signozhq/ui/input';
import { Input } from 'antd';
import SignozModal from 'components/SignozModal/SignozModal';
import { REACT_QUERY_KEY } from 'constants/reactQueryKeys';
import { useRenameFunnel } from 'hooks/TracesFunnels/useFunnels';

View File

@@ -1,7 +1,6 @@
import { ChangeEvent } from 'react';
import { Color } from '@signozhq/design-tokens';
import { Input } from '@signozhq/ui/input';
import { Button, Popover, Tooltip } from 'antd';
import { Button, Input, Popover, Tooltip } from 'antd';
import { Typography } from '@signozhq/ui/typography';
import { ArrowDownWideNarrow, Check, Plus, Search } from '@signozhq/icons';
import { useAppContext } from 'providers/App/App';

View File

@@ -6,7 +6,6 @@ import (
"github.com/SigNoz/signoz/pkg/statsreporter"
citypes "github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
"github.com/SigNoz/signoz/pkg/types/dashboardtypes"
"github.com/SigNoz/signoz/pkg/valuer"
)
@@ -43,23 +42,14 @@ type Module interface {
GetService(ctx context.Context, orgID valuer.UUID, serviceID citypes.ServiceID, provider citypes.CloudProviderType, integrationID valuer.UUID) (*citypes.Service, error)
// CreateService creates a new service for a cloud integration account.
CreateService(ctx context.Context, orgID valuer.UUID, service *citypes.CloudIntegrationService, provider citypes.CloudProviderType) error
CreateService(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, service *citypes.CloudIntegrationService, provider citypes.CloudProviderType) error
// UpdateService updates cloud integration service
UpdateService(ctx context.Context, orgID valuer.UUID, service *citypes.CloudIntegrationService, provider citypes.CloudProviderType) error
UpdateService(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, service *citypes.CloudIntegrationService, provider citypes.CloudProviderType) error
// AgentCheckIn is called by agent to send heartbeat and get latest config in response.
AgentCheckIn(ctx context.Context, orgID valuer.UUID, provider citypes.CloudProviderType, req *citypes.AgentCheckInRequest) (*citypes.AgentCheckInResponse, error)
// GetDashboardByID returns dashboard JSON for a given dashboard id.
// this only returns the dashboard when the service (embedded in dashboard id) is enabled
// in the org for any cloud integration account
GetDashboardByID(ctx context.Context, orgID valuer.UUID, id string) (*dashboardtypes.Dashboard, error)
// ListDashboards returns list of dashboards across all connected cloud integration accounts
// for enabled services in the org. This list gets added to dashboard list page
ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error)
statsreporter.StatsCollector
}

View File

@@ -122,7 +122,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -140,74 +140,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_TargetResponseTime_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_TargetResponseTime_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ApplicationELB_TargetResponseTime_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "b282d9f1",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "71837c70",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "5bfcc581",
"key": {
"dataType": "string",
"id": "TargetGroup--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TargetGroup",
"type": "tag"
},
"op": "nexists",
"value": ""
},
{
"id": "a9e33e08",
"key": {
"dataType": "string",
"id": "AvailabilityZone--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "AvailabilityZone",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND TargetGroup NOT EXISTS AND AvailabilityZone NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -236,15 +181,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -346,74 +290,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_RequestCount_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_RequestCount_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_RequestCount_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "448b551a",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "a8821216",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "f5a62c5a",
"key": {
"dataType": "string",
"id": "AvailabilityZone--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "AvailabilityZone",
"type": "tag"
},
"op": "nexists",
"value": ""
},
{
"id": "25e8abc8",
"key": {
"dataType": "string",
"id": "TargetGroup--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TargetGroup",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND AvailabilityZone NOT EXISTS AND TargetGroup NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -442,15 +331,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -552,74 +440,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_HTTPCode_Target_5XX_Count_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_HTTPCode_Target_5XX_Count_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_HTTPCode_Target_5XX_Count_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "702a8765",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "32985f2d",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "e4cf3d8b",
"key": {
"dataType": "string",
"id": "TargetGroup--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TargetGroup",
"type": "tag"
},
"op": "nexists",
"value": ""
},
{
"id": "234c77fd",
"key": {
"dataType": "string",
"id": "AvailabilityZone--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "AvailabilityZone",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND TargetGroup NOT EXISTS AND AvailabilityZone NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -648,15 +481,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -758,61 +590,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_HTTPCode_ELB_5XX_Count_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_HTTPCode_ELB_5XX_Count_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_HTTPCode_ELB_5XX_Count_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "5807a1e3",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "0dd63d0c",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "31ccfbae",
"key": {
"dataType": "string",
"id": "AvailabilityZone--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "AvailabilityZone",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND AvailabilityZone NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -841,15 +631,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -951,61 +740,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_ActiveConnectionCount_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_ActiveConnectionCount_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_ActiveConnectionCount_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "72c256c0",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "b433c2a1",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "8f5e7de0",
"key": {
"dataType": "string",
"id": "AvailabilityZone--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "AvailabilityZone",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND AvailabilityZone NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1034,15 +781,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1144,70 +890,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_TargetConnectionErrorCount_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_TargetConnectionErrorCount_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_TargetConnectionErrorCount_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "9226a37c",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "c3ff0c8f",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "e3317bc2",
"key": {
"dataType": "",
"isColumn": false,
"key": "TargetGroup",
"type": ""
},
"op": "nexists",
"value": ""
},
{
"id": "4e5c2324",
"key": {
"dataType": "",
"isColumn": false,
"key": "AvailabilityZone",
"type": ""
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND TargetGroup NOT EXISTS AND AvailabilityZone NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1236,15 +931,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1346,48 +1040,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_ConsumedLCUs_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_ConsumedLCUs_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_ConsumedLCUs_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "20627274",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "cd861e27",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -1416,15 +1081,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1526,61 +1190,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_ProcessedBytes_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_ProcessedBytes_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_ApplicationELB_ProcessedBytes_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "7d4a3494",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "3c307858",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "fbca8724",
"key": {
"dataType": "string",
"id": "AvailabilityZone--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "AvailabilityZone",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND AvailabilityZone NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1609,15 +1231,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1719,48 +1340,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ApplicationELB_PeakLCUs_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ApplicationELB_PeakLCUs_sum",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ApplicationELB_PeakLCUs_sum",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "a416e862",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "ed7d0a39",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -1789,15 +1381,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{LoadBalancer}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -94,7 +94,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -112,61 +112,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_CPUUtilization_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_CPUUtilization_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_CPUUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "d302d50d",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "e6c54e87",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "7907211a",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -195,15 +153,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -305,61 +262,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_CPUCreditUsage_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_CPUCreditUsage_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_CPUCreditUsage_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "30ded0dc",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "c935f6ec",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "d092fef8",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -388,15 +303,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -498,61 +412,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_EBSReadBytes_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_EBSReadBytes_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_EBSReadBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "a5fbfa4a",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "87071f13",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "c84a88c4",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -581,72 +453,29 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}} - Reads",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
},
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_EBSWriteBytes_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_EBSWriteBytes_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_EBSWriteBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "B",
"filters": {
"items": [
{
"id": "4d10ca4b",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "fc2db932",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "a3fd74c0",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -675,15 +504,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}} - Writes",
"limit": null,
"orderBy": [],
"queryName": "B",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -785,61 +613,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_EBSReadOps_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_EBSReadOps_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_EBSReadOps_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "85d84806",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "f2074606",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "134c7ca9",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -868,72 +654,29 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}} - Reads",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
},
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_EBSWriteOps_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_EBSWriteOps_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_EBSWriteOps_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "B",
"filters": {
"items": [
{
"id": "47e0c00f",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "0a157dfe",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "a7d1e8df",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -962,15 +705,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}} - Writes",
"limit": null,
"orderBy": [],
"queryName": "B",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1072,61 +814,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_NetworkIn_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_NetworkIn_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_NetworkIn_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "12d6748d",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "df3a8da1",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "81ec53f4",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -1155,15 +855,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1265,61 +964,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_EC2_NetworkOut_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_EC2_NetworkOut_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_EC2_NetworkOut_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "d301aaa7",
"key": {
"dataType": "string",
"id": "service.instance.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "service.instance.id",
"type": "tag"
},
"op": "!=",
"value": ""
},
{
"id": "e8afaa3b",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "d67487ab",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(service.instance.id != '' AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -1348,15 +1005,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{service.instance.id}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -1,6 +1,6 @@
{
"description": "View key ECS ContainerInsights metrics with an out of the box dashboard.",
"image":"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%2280px%22%20height%3D%2280px%22%20viewBox%3D%220%200%2080%2080%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3C!--%20Generator%3A%20Sketch%2064%20(93537)%20-%20https%3A%2F%2Fsketch.com%20--%3E%3Ctitle%3EIcon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20x1%3D%220%25%22%20y1%3D%22100%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%20id%3D%22linearGradient-1%22%3E%3Cstop%20stop-color%3D%22%23C8511B%22%20offset%3D%220%25%22%3E%3C%2Fstop%3E%3Cstop%20stop-color%3D%22%23FF9900%22%20offset%3D%22100%25%22%3E%3C%2Fstop%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22Icon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Cg%20id%3D%22Icon-Architecture-BG%2F64%2FContainers%22%20fill%3D%22url(%23linearGradient-1)%22%3E%3Crect%20id%3D%22Rectangle%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2280%22%20height%3D%2280%22%3E%3C%2Frect%3E%3C%2Fg%3E%3Cpath%20d%3D%22M64%2C48.2340095%20L56%2C43.4330117%20L56%2C32.0000169%20C56%2C31.6440171%2055.812%2C31.3150172%2055.504%2C31.1360173%20L44%2C24.4260204%20L44%2C14.7520248%20L64%2C26.5710194%20L64%2C48.2340095%20Z%20M65.509%2C25.13902%20L43.509%2C12.139026%20C43.199%2C11.9560261%2042.818%2C11.9540261%2042.504%2C12.131026%20C42.193%2C12.3090259%2042%2C12.6410257%2042%2C13.0000256%20L42%2C25.0000201%20C42%2C25.3550199%2042.189%2C25.6840198%2042.496%2C25.8640197%20L54%2C32.5740166%20L54%2C44.0000114%20C54%2C44.3510113%2054.185%2C44.6770111%2054.486%2C44.857011%20L64.486%2C50.8570083%20C64.644%2C50.9520082%2064.822%2C51%2065%2C51%20C65.17%2C51%2065.34%2C50.9570082%2065.493%2C50.8700083%20C65.807%2C50.6930084%2066%2C50.3600085%2066%2C50%20L66%2C26.0000196%20C66%2C25.6460198%2065.814%2C25.31902%2065.509%2C25.13902%20L65.509%2C25.13902%20Z%20M40.445%2C66.863001%20L17%2C54.3990067%20L17%2C26.5710194%20L37%2C14.7520248%20L37%2C24.4510204%20L26.463%2C31.1560173%20C26.175%2C31.3400172%2026%2C31.6580171%2026%2C32.0000169%20L26%2C49.0000091%20C26%2C49.373009%2026.208%2C49.7150088%2026.538%2C49.8870087%20L39.991%2C56.8870055%20C40.28%2C57.0370055%2040.624%2C57.0380055%2040.912%2C56.8880055%20L53.964%2C50.1440086%20L61.996%2C54.9640064%20L40.445%2C66.863001%20Z%20M64.515%2C54.1420068%20L54.515%2C48.1420095%20C54.217%2C47.9640096%2053.849%2C47.9520096%2053.541%2C48.1120095%20L40.455%2C54.8730065%20L28%2C48.3930094%20L28%2C32.5490167%20L38.537%2C25.8440197%20C38.825%2C25.6600198%2039%2C25.3420199%2039%2C25.0000201%20L39%2C13.0000256%20C39%2C12.6410257%2038.808%2C12.3090259%2038.496%2C12.131026%20C38.184%2C11.9540261%2037.802%2C11.9560261%2037.491%2C12.139026%20L15.491%2C25.13902%20C15.187%2C25.31902%2015%2C25.6460198%2015%2C26.0000196%20L15%2C55%20C15%2C55.3690062%2015.204%2C55.7090061%2015.53%2C55.883006%20L39.984%2C68.8830001%20C40.131%2C68.961%2040.292%2C69%2040.453%2C69%20C40.62%2C69%2040.786%2C68.958%2040.937%2C68.8750001%20L64.484%2C55.875006%20C64.797%2C55.7020061%2064.993%2C55.3750062%2065.0001416%2C55.0180064%20C65.006%2C54.6600066%2064.821%2C54.3260067%2064.515%2C54.1420068%20L64.515%2C54.1420068%20Z%22%20id%3D%22Amazon-Elastic-Container-Service_Icon_64_Squid%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E",
"image": "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%2280px%22%20height%3D%2280px%22%20viewBox%3D%220%200%2080%2080%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3C!--%20Generator%3A%20Sketch%2064%20(93537)%20-%20https%3A%2F%2Fsketch.com%20--%3E%3Ctitle%3EIcon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20x1%3D%220%25%22%20y1%3D%22100%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%20id%3D%22linearGradient-1%22%3E%3Cstop%20stop-color%3D%22%23C8511B%22%20offset%3D%220%25%22%3E%3C%2Fstop%3E%3Cstop%20stop-color%3D%22%23FF9900%22%20offset%3D%22100%25%22%3E%3C%2Fstop%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22Icon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Cg%20id%3D%22Icon-Architecture-BG%2F64%2FContainers%22%20fill%3D%22url(%23linearGradient-1)%22%3E%3Crect%20id%3D%22Rectangle%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2280%22%20height%3D%2280%22%3E%3C%2Frect%3E%3C%2Fg%3E%3Cpath%20d%3D%22M64%2C48.2340095%20L56%2C43.4330117%20L56%2C32.0000169%20C56%2C31.6440171%2055.812%2C31.3150172%2055.504%2C31.1360173%20L44%2C24.4260204%20L44%2C14.7520248%20L64%2C26.5710194%20L64%2C48.2340095%20Z%20M65.509%2C25.13902%20L43.509%2C12.139026%20C43.199%2C11.9560261%2042.818%2C11.9540261%2042.504%2C12.131026%20C42.193%2C12.3090259%2042%2C12.6410257%2042%2C13.0000256%20L42%2C25.0000201%20C42%2C25.3550199%2042.189%2C25.6840198%2042.496%2C25.8640197%20L54%2C32.5740166%20L54%2C44.0000114%20C54%2C44.3510113%2054.185%2C44.6770111%2054.486%2C44.857011%20L64.486%2C50.8570083%20C64.644%2C50.9520082%2064.822%2C51%2065%2C51%20C65.17%2C51%2065.34%2C50.9570082%2065.493%2C50.8700083%20C65.807%2C50.6930084%2066%2C50.3600085%2066%2C50%20L66%2C26.0000196%20C66%2C25.6460198%2065.814%2C25.31902%2065.509%2C25.13902%20L65.509%2C25.13902%20Z%20M40.445%2C66.863001%20L17%2C54.3990067%20L17%2C26.5710194%20L37%2C14.7520248%20L37%2C24.4510204%20L26.463%2C31.1560173%20C26.175%2C31.3400172%2026%2C31.6580171%2026%2C32.0000169%20L26%2C49.0000091%20C26%2C49.373009%2026.208%2C49.7150088%2026.538%2C49.8870087%20L39.991%2C56.8870055%20C40.28%2C57.0370055%2040.624%2C57.0380055%2040.912%2C56.8880055%20L53.964%2C50.1440086%20L61.996%2C54.9640064%20L40.445%2C66.863001%20Z%20M64.515%2C54.1420068%20L54.515%2C48.1420095%20C54.217%2C47.9640096%2053.849%2C47.9520096%2053.541%2C48.1120095%20L40.455%2C54.8730065%20L28%2C48.3930094%20L28%2C32.5490167%20L38.537%2C25.8440197%20C38.825%2C25.6600198%2039%2C25.3420199%2039%2C25.0000201%20L39%2C13.0000256%20C39%2C12.6410257%2038.808%2C12.3090259%2038.496%2C12.131026%20C38.184%2C11.9540261%2037.802%2C11.9560261%2037.491%2C12.139026%20L15.491%2C25.13902%20C15.187%2C25.31902%2015%2C25.6460198%2015%2C26.0000196%20L15%2C55%20C15%2C55.3690062%2015.204%2C55.7090061%2015.53%2C55.883006%20L39.984%2C68.8830001%20C40.131%2C68.961%2040.292%2C69%2040.453%2C69%20C40.62%2C69%2040.786%2C68.958%2040.937%2C68.8750001%20L64.484%2C55.875006%20C64.797%2C55.7020061%2064.993%2C55.3750062%2065.0001416%2C55.0180064%20C65.006%2C54.6600066%2064.821%2C54.3260067%2064.515%2C54.1420068%20L64.515%2C54.1420068%20Z%22%20id%3D%22Amazon-Elastic-Container-Service_Icon_64_Squid%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E",
"layout": [
{
"h": 3,
@@ -139,7 +139,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -160,61 +160,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_MemoryUtilization_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_MemoryUtilization_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_MemoryUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "c002d3ea",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "d95dc93f",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "7eb7332c",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "=",
"value": "$Cluster"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster)"
},
"functions": [],
"groupBy": [
@@ -227,15 +185,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}} ",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -340,61 +297,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_CPUUtilization_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_CPUUtilization_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_CPUUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "8ae50256",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "dada2be4",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "adaf587a",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "=",
"value": "$Cluster"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster)"
},
"functions": [],
"groupBy": [
@@ -407,15 +322,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}} ",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -520,75 +434,30 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_CpuUtilized_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_CpuUtilized_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_CpuUtilized_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "840f6a82",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "e494eace",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "d615bfdb",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "in",
"value": [
"$Cluster"
]
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName IN $Cluster)"
},
"functions": [],
"groupBy": [],
"having": [],
"having": {
"expression": ""
},
"legend": "",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -693,71 +562,30 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_CpuReserved_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_CpuReserved_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_CpuReserved_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "98cf55a2",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "dc2591e8",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "5fe36864",
"key": {
"dataType": "",
"isColumn": false,
"key": "ClusterName",
"type": ""
},
"op": "=",
"value": "$Cluster"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster)"
},
"functions": [],
"groupBy": [],
"having": [],
"having": {
"expression": ""
},
"legend": "",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -862,71 +690,30 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_MemoryUtilized_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_MemoryUtilized_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_MemoryUtilized_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "6d3fb70d",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "763ec68f",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "69a793fb",
"key": {
"dataType": "",
"isColumn": false,
"key": "ClusterName",
"type": ""
},
"op": "=",
"value": "$Cluster"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster)"
},
"functions": [],
"groupBy": [],
"having": [],
"having": {
"expression": ""
},
"legend": "",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1031,71 +818,30 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_MemoryReserved_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_MemoryReserved_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_MemoryReserved_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "4cabe614",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "077e09db",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "71f30fef",
"key": {
"dataType": "",
"isColumn": false,
"key": "ClusterName",
"type": ""
},
"op": "=",
"value": "$Cluster"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster)"
},
"functions": [],
"groupBy": [],
"having": [],
"having": {
"expression": ""
},
"legend": "",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1200,74 +946,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_NetworkRxBytes_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_NetworkRxBytes_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_NetworkRxBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "8e15b10c",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "92d56544",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "7c5e0300",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "=",
"value": "$Cluster"
},
{
"id": "f41089a9",
"key": {
"dataType": "string",
"id": "ServiceName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ServiceName",
"type": "tag"
},
"op": "exists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster AND ServiceName EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1280,15 +971,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1393,74 +1083,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_NetworkTxBytes_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_NetworkTxBytes_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_NetworkTxBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "6a1059e5",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "fe0d40de",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "b6047f19",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "=",
"value": "$Cluster"
},
{
"id": "8e76d8f1",
"key": {
"dataType": "string",
"id": "ServiceName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ServiceName",
"type": "tag"
},
"op": "exists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster AND ServiceName EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1473,15 +1108,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1586,74 +1220,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_StorageReadBytes_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_StorageReadBytes_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_StorageReadBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "89f0e499",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "91ce3091",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "50782f6c",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "=",
"value": "$Cluster"
},
{
"id": "6eeed520",
"key": {
"dataType": "string",
"id": "ServiceName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ServiceName",
"type": "tag"
},
"op": "exists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster AND ServiceName EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1674,15 +1253,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1787,74 +1365,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_ContainerInsights_StorageWriteBytes_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_ContainerInsights_StorageWriteBytes_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_ContainerInsights_StorageWriteBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "edef4331",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "d6081c36",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "7ae5a9e4",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "=",
"value": "$Cluster"
},
{
"id": "5f7feeb2",
"key": {
"dataType": "string",
"id": "ServiceName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ServiceName",
"type": "tag"
},
"op": "exists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName = $Cluster AND ServiceName EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1867,15 +1390,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -224,7 +224,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerCpuUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -356,7 +355,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerCpuReserved_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -488,7 +486,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerMemoryUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -620,7 +617,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerMemoryReserved_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -752,7 +748,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerCpuUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -893,7 +888,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerMemoryUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -1034,7 +1028,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerNetworkRxBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -1175,7 +1168,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerNetworkTxBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -1316,7 +1308,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerStorageReadBytes_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "max"
}
],
@@ -1457,7 +1448,6 @@
"metricName": "aws_ECS_ContainerInsights_ContainerStorageWriteBytes_max",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],

View File

@@ -1,6 +1,6 @@
{
"description": "View key AWS ECS metrics with an out of the box dashboard.\n",
"image":"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%2280px%22%20height%3D%2280px%22%20viewBox%3D%220%200%2080%2080%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3C!--%20Generator%3A%20Sketch%2064%20(93537)%20-%20https%3A%2F%2Fsketch.com%20--%3E%3Ctitle%3EIcon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20x1%3D%220%25%22%20y1%3D%22100%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%20id%3D%22linearGradient-1%22%3E%3Cstop%20stop-color%3D%22%23C8511B%22%20offset%3D%220%25%22%3E%3C%2Fstop%3E%3Cstop%20stop-color%3D%22%23FF9900%22%20offset%3D%22100%25%22%3E%3C%2Fstop%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22Icon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Cg%20id%3D%22Icon-Architecture-BG%2F64%2FContainers%22%20fill%3D%22url(%23linearGradient-1)%22%3E%3Crect%20id%3D%22Rectangle%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2280%22%20height%3D%2280%22%3E%3C%2Frect%3E%3C%2Fg%3E%3Cpath%20d%3D%22M64%2C48.2340095%20L56%2C43.4330117%20L56%2C32.0000169%20C56%2C31.6440171%2055.812%2C31.3150172%2055.504%2C31.1360173%20L44%2C24.4260204%20L44%2C14.7520248%20L64%2C26.5710194%20L64%2C48.2340095%20Z%20M65.509%2C25.13902%20L43.509%2C12.139026%20C43.199%2C11.9560261%2042.818%2C11.9540261%2042.504%2C12.131026%20C42.193%2C12.3090259%2042%2C12.6410257%2042%2C13.0000256%20L42%2C25.0000201%20C42%2C25.3550199%2042.189%2C25.6840198%2042.496%2C25.8640197%20L54%2C32.5740166%20L54%2C44.0000114%20C54%2C44.3510113%2054.185%2C44.6770111%2054.486%2C44.857011%20L64.486%2C50.8570083%20C64.644%2C50.9520082%2064.822%2C51%2065%2C51%20C65.17%2C51%2065.34%2C50.9570082%2065.493%2C50.8700083%20C65.807%2C50.6930084%2066%2C50.3600085%2066%2C50%20L66%2C26.0000196%20C66%2C25.6460198%2065.814%2C25.31902%2065.509%2C25.13902%20L65.509%2C25.13902%20Z%20M40.445%2C66.863001%20L17%2C54.3990067%20L17%2C26.5710194%20L37%2C14.7520248%20L37%2C24.4510204%20L26.463%2C31.1560173%20C26.175%2C31.3400172%2026%2C31.6580171%2026%2C32.0000169%20L26%2C49.0000091%20C26%2C49.373009%2026.208%2C49.7150088%2026.538%2C49.8870087%20L39.991%2C56.8870055%20C40.28%2C57.0370055%2040.624%2C57.0380055%2040.912%2C56.8880055%20L53.964%2C50.1440086%20L61.996%2C54.9640064%20L40.445%2C66.863001%20Z%20M64.515%2C54.1420068%20L54.515%2C48.1420095%20C54.217%2C47.9640096%2053.849%2C47.9520096%2053.541%2C48.1120095%20L40.455%2C54.8730065%20L28%2C48.3930094%20L28%2C32.5490167%20L38.537%2C25.8440197%20C38.825%2C25.6600198%2039%2C25.3420199%2039%2C25.0000201%20L39%2C13.0000256%20C39%2C12.6410257%2038.808%2C12.3090259%2038.496%2C12.131026%20C38.184%2C11.9540261%2037.802%2C11.9560261%2037.491%2C12.139026%20L15.491%2C25.13902%20C15.187%2C25.31902%2015%2C25.6460198%2015%2C26.0000196%20L15%2C55%20C15%2C55.3690062%2015.204%2C55.7090061%2015.53%2C55.883006%20L39.984%2C68.8830001%20C40.131%2C68.961%2040.292%2C69%2040.453%2C69%20C40.62%2C69%2040.786%2C68.958%2040.937%2C68.8750001%20L64.484%2C55.875006%20C64.797%2C55.7020061%2064.993%2C55.3750062%2065.0001416%2C55.0180064%20C65.006%2C54.6600066%2064.821%2C54.3260067%2064.515%2C54.1420068%20L64.515%2C54.1420068%20Z%22%20id%3D%22Amazon-Elastic-Container-Service_Icon_64_Squid%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E",
"image": "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%2280px%22%20height%3D%2280px%22%20viewBox%3D%220%200%2080%2080%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3C!--%20Generator%3A%20Sketch%2064%20(93537)%20-%20https%3A%2F%2Fsketch.com%20--%3E%3Ctitle%3EIcon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20x1%3D%220%25%22%20y1%3D%22100%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%20id%3D%22linearGradient-1%22%3E%3Cstop%20stop-color%3D%22%23C8511B%22%20offset%3D%220%25%22%3E%3C%2Fstop%3E%3Cstop%20stop-color%3D%22%23FF9900%22%20offset%3D%22100%25%22%3E%3C%2Fstop%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22Icon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Cg%20id%3D%22Icon-Architecture-BG%2F64%2FContainers%22%20fill%3D%22url(%23linearGradient-1)%22%3E%3Crect%20id%3D%22Rectangle%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2280%22%20height%3D%2280%22%3E%3C%2Frect%3E%3C%2Fg%3E%3Cpath%20d%3D%22M64%2C48.2340095%20L56%2C43.4330117%20L56%2C32.0000169%20C56%2C31.6440171%2055.812%2C31.3150172%2055.504%2C31.1360173%20L44%2C24.4260204%20L44%2C14.7520248%20L64%2C26.5710194%20L64%2C48.2340095%20Z%20M65.509%2C25.13902%20L43.509%2C12.139026%20C43.199%2C11.9560261%2042.818%2C11.9540261%2042.504%2C12.131026%20C42.193%2C12.3090259%2042%2C12.6410257%2042%2C13.0000256%20L42%2C25.0000201%20C42%2C25.3550199%2042.189%2C25.6840198%2042.496%2C25.8640197%20L54%2C32.5740166%20L54%2C44.0000114%20C54%2C44.3510113%2054.185%2C44.6770111%2054.486%2C44.857011%20L64.486%2C50.8570083%20C64.644%2C50.9520082%2064.822%2C51%2065%2C51%20C65.17%2C51%2065.34%2C50.9570082%2065.493%2C50.8700083%20C65.807%2C50.6930084%2066%2C50.3600085%2066%2C50%20L66%2C26.0000196%20C66%2C25.6460198%2065.814%2C25.31902%2065.509%2C25.13902%20L65.509%2C25.13902%20Z%20M40.445%2C66.863001%20L17%2C54.3990067%20L17%2C26.5710194%20L37%2C14.7520248%20L37%2C24.4510204%20L26.463%2C31.1560173%20C26.175%2C31.3400172%2026%2C31.6580171%2026%2C32.0000169%20L26%2C49.0000091%20C26%2C49.373009%2026.208%2C49.7150088%2026.538%2C49.8870087%20L39.991%2C56.8870055%20C40.28%2C57.0370055%2040.624%2C57.0380055%2040.912%2C56.8880055%20L53.964%2C50.1440086%20L61.996%2C54.9640064%20L40.445%2C66.863001%20Z%20M64.515%2C54.1420068%20L54.515%2C48.1420095%20C54.217%2C47.9640096%2053.849%2C47.9520096%2053.541%2C48.1120095%20L40.455%2C54.8730065%20L28%2C48.3930094%20L28%2C32.5490167%20L38.537%2C25.8440197%20C38.825%2C25.6600198%2039%2C25.3420199%2039%2C25.0000201%20L39%2C13.0000256%20C39%2C12.6410257%2038.808%2C12.3090259%2038.496%2C12.131026%20C38.184%2C11.9540261%2037.802%2C11.9560261%2037.491%2C12.139026%20L15.491%2C25.13902%20C15.187%2C25.31902%2015%2C25.6460198%2015%2C26.0000196%20L15%2C55%20C15%2C55.3690062%2015.204%2C55.7090061%2015.53%2C55.883006%20L39.984%2C68.8830001%20C40.131%2C68.961%2040.292%2C69%2040.453%2C69%20C40.62%2C69%2040.786%2C68.958%2040.937%2C68.8750001%20L64.484%2C55.875006%20C64.797%2C55.7020061%2064.993%2C55.3750062%2065.0001416%2C55.0180064%20C65.006%2C54.6600066%2064.821%2C54.3260067%2064.515%2C54.1420068%20L64.515%2C54.1420068%20Z%22%20id%3D%22Amazon-Elastic-Container-Service_Icon_64_Squid%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E",
"layout": [
{
"h": 6,
@@ -93,7 +93,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -112,63 +112,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_MemoryUtilization_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_MemoryUtilization_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_MemoryUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "26ac617d",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "57172ed9",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "49b9f85e",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "in",
"value": [
"$Cluster"
]
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName IN $Cluster)"
},
"functions": [],
"groupBy": [
@@ -189,15 +145,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}} ({{ClusterName}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -300,63 +255,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_MemoryUtilization_min--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_MemoryUtilization_min",
"type": "Gauge"
},
"aggregateOperator": "min",
"aggregations": [
{
"metricName": "aws_ECS_MemoryUtilization_min",
"reduceTo": "avg",
"spaceAggregation": "min",
"timeAggregation": "min"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "cd4b8848",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "aa5115c6",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "f60677b6",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "in",
"value": [
"$Cluster"
]
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName IN $Cluster)"
},
"functions": [],
"groupBy": [
@@ -377,15 +288,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}} ({{ClusterName}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "min",
"stepInterval": 60,
"timeAggregation": "min"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -488,63 +398,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_CPUUtilization_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_CPUUtilization_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_ECS_CPUUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "2c13c8ee",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "f489f6a8",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "94012320",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "in",
"value": [
"$Cluster"
]
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName IN $Cluster)"
},
"functions": [],
"groupBy": [
@@ -565,15 +431,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}} ({{ClusterName}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -676,63 +541,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_ECS_CPUUtilization_min--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_ECS_CPUUtilization_min",
"type": "Gauge"
},
"aggregateOperator": "min",
"aggregations": [
{
"metricName": "aws_ECS_CPUUtilization_min",
"reduceTo": "avg",
"spaceAggregation": "min",
"timeAggregation": "min"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "758ba906",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "4ffe6bf7",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "53d98059",
"key": {
"dataType": "string",
"id": "ClusterName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "ClusterName",
"type": "tag"
},
"op": "in",
"value": [
"$Cluster"
]
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND cloud.account.id = $Account AND ClusterName IN $Cluster)"
},
"functions": [],
"groupBy": [
@@ -753,15 +574,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{ServiceName}} ({{ClusterName}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "min",
"stepInterval": 60,
"timeAggregation": "min"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -103,7 +103,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -121,70 +121,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_Invocations_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_Invocations_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Lambda_Invocations_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "49d33567",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "b9dfa1c9",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "86defeb5",
"key": {
"dataType": "",
"isColumn": false,
"key": "FunctionName",
"type": ""
},
"op": "exists",
"value": ""
},
{
"id": "f89a10c4",
"key": {
"dataType": "",
"isColumn": false,
"key": "Resource",
"type": ""
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -213,15 +162,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -323,74 +271,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_Duration_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_Duration_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_Lambda_Duration_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "af05252d",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "983efea5",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "88eb3092",
"key": {
"dataType": "string",
"id": "FunctionName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "FunctionName",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "a35c6406",
"key": {
"dataType": "string",
"id": "Resource--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Resource",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -419,15 +312,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -529,74 +421,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_Errors_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_Errors_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Lambda_Errors_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "c67262c9",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "c5ccbbf4",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "c1b278d1",
"key": {
"dataType": "string",
"id": "FunctionName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "FunctionName",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "a45d80e1",
"key": {
"dataType": "string",
"id": "Resource--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Resource",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -625,15 +462,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -735,74 +571,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_Throttles_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_Throttles_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Lambda_Throttles_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "6c956b7d",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "5fef840b",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "6f892a9a",
"key": {
"dataType": "string",
"id": "FunctionName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "FunctionName",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "ce91320c",
"key": {
"dataType": "string",
"id": "Resource--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Resource",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -831,15 +612,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -941,74 +721,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_AsyncEventsReceived_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_AsyncEventsReceived_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Lambda_AsyncEventsReceived_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "f4c6246b",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "5b7a75a1",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "4e1ba051",
"key": {
"dataType": "string",
"id": "FunctionName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "FunctionName",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "5848f496",
"key": {
"dataType": "string",
"id": "Resource--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Resource",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1037,15 +762,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1147,74 +871,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_AsyncEventAge_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_AsyncEventAge_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_Lambda_AsyncEventAge_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "1aee3626",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "11631fda",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "c5ea0a17",
"key": {
"dataType": "string",
"id": "FunctionName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "FunctionName",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "1952b27e",
"key": {
"dataType": "string",
"id": "Resource--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Resource",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1243,15 +912,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1353,74 +1021,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Lambda_AsyncEventsDropped_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Lambda_AsyncEventsDropped_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Lambda_AsyncEventsDropped_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "a8c65389",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "2ab205c8",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "22d3c9b6",
"key": {
"dataType": "string",
"id": "FunctionName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "FunctionName",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "1e7060a6",
"key": {
"dataType": "string",
"id": "Resource--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Resource",
"type": "tag"
},
"op": "nexists",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND FunctionName EXISTS AND Resource NOT EXISTS)"
},
"functions": [],
"groupBy": [
@@ -1449,15 +1062,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{FunctionName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -94,7 +94,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -112,61 +112,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Kafka_KafkaDataLogsDiskUsed_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Kafka_KafkaDataLogsDiskUsed_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_Kafka_KafkaDataLogsDiskUsed_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "be8452fb",
"key": {
"dataType": "string",
"id": "Broker_ID--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Broker_ID",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "8b658843",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "9cbc21ee",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(Broker_ID EXISTS AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -187,15 +145,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "Broker {{Broker_ID}} ({{Cluster_Name}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -297,61 +254,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Kafka_CpuUser_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Kafka_CpuUser_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_Kafka_CpuUser_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "03054a63",
"key": {
"dataType": "string",
"id": "Broker_ID--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Broker_ID",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "754c3c99",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "09ad3a79",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(Broker_ID EXISTS AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -372,15 +287,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "Broker {{Broker_ID}} ({{Cluster_Name}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -482,61 +396,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Kafka_CpuSystem_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Kafka_CpuSystem_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_Kafka_CpuSystem_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "1c4feb03",
"key": {
"dataType": "string",
"id": "Broker_ID--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Broker_ID",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "3e5db1d7",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "9e9bf94c",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(Broker_ID EXISTS AND cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -557,15 +429,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "Broker {{Broker_ID}} ({{Cluster_Name}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -667,61 +538,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Kafka_NetworkTxPackets_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Kafka_NetworkTxPackets_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Kafka_NetworkTxPackets_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "df3f9941",
"key": {
"dataType": "string",
"id": "Broker_ID--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Broker_ID",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "2233f9a5",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "52bd69d4",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
}
],
"op": "AND"
"filter": {
"expression": "(Broker_ID EXISTS AND cloud.region = $Region AND cloud.account.id = $Account)"
},
"functions": [],
"groupBy": [
@@ -742,15 +571,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "Broker {{Broker_ID}} ({{Cluster_Name}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -852,61 +680,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Kafka_NetworkRxPackets_sum--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Kafka_NetworkRxPackets_sum",
"type": "Gauge"
},
"aggregateOperator": "sum",
"aggregations": [
{
"metricName": "aws_Kafka_NetworkRxPackets_sum",
"reduceTo": "avg",
"spaceAggregation": "sum",
"timeAggregation": "sum"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "a00425be",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "726d60d7",
"key": {
"dataType": "string",
"id": "Broker_ID--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "Broker_ID",
"type": "tag"
},
"op": "exists",
"value": ""
},
{
"id": "02adea69",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.region = $Region AND Broker_ID EXISTS AND cloud.account.id = $Account)"
},
"functions": [],
"groupBy": [
@@ -927,15 +713,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "Broker {{Broker_ID}} ({{Cluster_Name}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "sum",
"stepInterval": 60,
"timeAggregation": "sum"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1037,48 +822,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_Kafka_SumOffsetLag_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_Kafka_SumOffsetLag_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_Kafka_SumOffsetLag_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "0626eebd",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "b633d867",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region)"
},
"functions": [],
"groupBy": [
@@ -1091,15 +847,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "({{Cluster_Name}})",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -113,7 +113,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -131,61 +131,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_CPUUtilization_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_CPUUtilization_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_CPUUtilization_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "f8e72efc",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "4e68256a",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "a5082e1b",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -214,15 +172,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -324,61 +281,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_FreeableMemory_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_FreeableMemory_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_FreeableMemory_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "723ba84a",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "f8227b55",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "3951e8ed",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -407,15 +322,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -517,61 +431,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_DatabaseConnections_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_DatabaseConnections_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_DatabaseConnections_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "31191f74",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "aa644bbf",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "e5b31a18",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -600,15 +472,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -710,61 +581,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_ReadLatency_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_ReadLatency_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_ReadLatency_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "83f232af",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "2677873f",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "78eddd81",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -793,72 +622,29 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}} - Reads",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
},
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_WriteLatency_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_WriteLatency_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_WriteLatency_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "B",
"filters": {
"items": [
{
"id": "e2df7981",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "6daad748",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "28057159",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -887,15 +673,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}} - Writes",
"limit": null,
"orderBy": [],
"queryName": "B",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -997,61 +782,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_ReadIOPS_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_ReadIOPS_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_ReadIOPS_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "17142c3d",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "27fcc87d",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "5510ad1d",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -1080,72 +823,29 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}} - Reads",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
},
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_WriteIOPS_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_WriteIOPS_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_WriteIOPS_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "B",
"filters": {
"items": [
{
"id": "a050e23a",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "6df80990",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "72bc50d0",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -1174,15 +874,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}} - Writes",
"limit": null,
"orderBy": [],
"queryName": "B",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1284,61 +983,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_ReadThroughput_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_ReadThroughput_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_ReadThroughput_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "a298d4bd",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "810c0586",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "fa40ae81",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -1367,72 +1024,29 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}} - Reads",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
},
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_WriteThroughput_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_WriteThroughput_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_WriteThroughput_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "B",
"filters": {
"items": [
{
"id": "d46f3f53",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "4ec47a19",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "a0e648d6",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -1461,15 +1075,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}} - Writes",
"limit": null,
"orderBy": [],
"queryName": "B",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1571,61 +1184,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_DiskQueueDepth_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_DiskQueueDepth_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_DiskQueueDepth_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "f64f0096",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "18ad7c1e",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "5d3f4963",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -1654,15 +1225,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -1764,61 +1334,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_RDS_FreeStorageSpace_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_RDS_FreeStorageSpace_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_RDS_FreeStorageSpace_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "7786e529",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
},
{
"id": "f27b4616",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "51ca6d55",
"key": {
"dataType": "string",
"id": "DBInstanceIdentifier--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "DBInstanceIdentifier",
"type": "tag"
},
"op": "!=",
"value": ""
}
],
"op": "AND"
"filter": {
"expression": "(cloud.account.id = $Account AND cloud.region = $Region AND DBInstanceIdentifier != '')"
},
"functions": [],
"groupBy": [
@@ -1847,15 +1375,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{DBInstanceIdentifier}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -92,7 +92,7 @@
"type": "QUERY"
}
},
"version": "v4",
"version": "v5",
"widgets": [
{
"bucketCount": 30,
@@ -111,63 +111,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_SNS_NumberOfMessagesPublished_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_SNS_NumberOfMessagesPublished_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_SNS_NumberOfMessagesPublished_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "8fd51b53",
"key": {
"dataType": "string",
"id": "TopicName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TopicName",
"type": "tag"
},
"op": "in",
"value": [
"$Topic"
]
},
{
"id": "b18187c3",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "eebe4578",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
}
],
"op": "AND"
"filter": {
"expression": "(TopicName IN $Topic AND cloud.region = $Region AND cloud.account.id = $Account)"
},
"functions": [],
"groupBy": [
@@ -180,15 +136,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{TopicName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -291,63 +246,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_SNS_PublishSize_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_SNS_PublishSize_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_SNS_PublishSize_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "1aa0d1a9",
"key": {
"dataType": "string",
"id": "TopicName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TopicName",
"type": "tag"
},
"op": "in",
"value": [
"$Topic"
]
},
{
"id": "62255cff",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "17c7153e",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
}
],
"op": "AND"
"filter": {
"expression": "(TopicName IN $Topic AND cloud.region = $Region AND cloud.account.id = $Account)"
},
"functions": [],
"groupBy": [
@@ -360,15 +271,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{TopicName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -471,63 +381,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_SNS_NumberOfNotificationsDelivered_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_SNS_NumberOfNotificationsDelivered_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_SNS_NumberOfNotificationsDelivered_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "c96a4ac0",
"key": {
"dataType": "string",
"id": "TopicName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TopicName",
"type": "tag"
},
"op": "in",
"value": [
"$Topic"
]
},
{
"id": "8ca86829",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "8a444f66",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
}
],
"op": "AND"
"filter": {
"expression": "(TopicName IN $Topic AND cloud.region = $Region AND cloud.account.id = $Account)"
},
"functions": [],
"groupBy": [
@@ -540,15 +406,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{TopicName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []
@@ -651,63 +516,19 @@
"builder": {
"queryData": [
{
"aggregateAttribute": {
"dataType": "float64",
"id": "aws_SNS_NumberOfNotificationsFailed_max--float64--Gauge--true",
"isColumn": true,
"isJSON": false,
"key": "aws_SNS_NumberOfNotificationsFailed_max",
"type": "Gauge"
},
"aggregateOperator": "max",
"aggregations": [
{
"metricName": "aws_SNS_NumberOfNotificationsFailed_max",
"reduceTo": "avg",
"spaceAggregation": "max",
"timeAggregation": "max"
}
],
"dataSource": "metrics",
"disabled": false,
"expression": "A",
"filters": {
"items": [
{
"id": "6175f3d5",
"key": {
"dataType": "string",
"id": "TopicName--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "TopicName",
"type": "tag"
},
"op": "in",
"value": [
"$Topic"
]
},
{
"id": "e2084931",
"key": {
"dataType": "string",
"id": "cloud.region--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.region",
"type": "tag"
},
"op": "=",
"value": "$Region"
},
{
"id": "0b05209a",
"key": {
"dataType": "string",
"id": "cloud.account.id--string--tag--false",
"isColumn": false,
"isJSON": false,
"key": "cloud.account.id",
"type": "tag"
},
"op": "=",
"value": "$Account"
}
],
"op": "AND"
"filter": {
"expression": "(TopicName IN $Topic AND cloud.region = $Region AND cloud.account.id = $Account)"
},
"functions": [],
"groupBy": [
@@ -720,15 +541,14 @@
"type": "tag"
}
],
"having": [],
"having": {
"expression": ""
},
"legend": "{{TopicName}}",
"limit": null,
"orderBy": [],
"queryName": "A",
"reduceTo": "avg",
"spaceAggregation": "max",
"stepInterval": 60,
"timeAggregation": "max"
"stepInterval": 60
}
],
"queryFormulas": []

View File

@@ -313,7 +313,6 @@
"metricName": "azure_totallatency_average",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -323,35 +322,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f001-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f001-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f001-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f001-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -430,7 +400,6 @@
"metricName": "azure_originlatency_average",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -440,35 +409,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f002-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f002-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f002-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f002-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -547,7 +487,6 @@
"metricName": "azure_averagewebsocketconnectionduration_average",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -557,35 +496,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f003-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f003-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f003-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f003-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -669,7 +579,6 @@
"metricName": "azure_originhealthpercentage_average",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -679,35 +588,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f004-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f004-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f004-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f004-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -791,7 +671,6 @@
"metricName": "azure_bytehitratio_average",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -801,35 +680,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f005-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f005-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f005-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f005-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -908,7 +758,6 @@
"metricName": "azure_percentage4xx_average",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -918,35 +767,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f006-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f006-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f006-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f006-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1025,7 +845,6 @@
"metricName": "azure_percentage5xx_average",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -1035,35 +854,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'"
},
"filters": {
"items": [
{
"id": "f007-name",
"key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" },
"op": "IN",
"value": "$cdnprofile"
},
{
"id": "f007-sub",
"key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" },
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "f007-rg",
"key": { "id": "resource_group", "key": "resource_group", "type": "" },
"op": "=",
"value": "$resource_group"
},
{
"id": "f007-type",
"key": { "id": "type", "key": "type", "type": "" },
"op": "=",
"value": "Microsoft.Cdn/profiles"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1127,15 +917,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_requestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_requestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f008-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f008-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f008-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f008-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1168,15 +952,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_originrequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_originrequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f009-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f009-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f009-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f009-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1209,15 +987,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_requestsize_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_requestsize_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f010-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f010-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f010-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f010-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1250,15 +1022,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_responsesize_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_responsesize_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f011-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f011-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f011-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f011-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1291,15 +1057,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_activewebsocketconnections_total", "reduceTo": "max", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "max" }],
"aggregations": [{ "metricName": "azure_activewebsocketconnections_total", "reduceTo": "max", "spaceAggregation": "sum", "timeAggregation": "max" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f012-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f012-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f012-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f012-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1332,15 +1092,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_websocketconnections_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_websocketconnections_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f013-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f013-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f013-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f013-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1373,15 +1127,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_webapplicationfirewallrequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_webapplicationfirewallrequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f014-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f014-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f014-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f014-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1414,15 +1162,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_webapplicationfirewallcaptcharequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_webapplicationfirewallcaptcharequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f015-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f015-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f015-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f015-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],
@@ -1455,15 +1197,9 @@
"query": {
"builder": {
"queryData": [{
"aggregations": [{ "metricName": "azure_webapplicationfirewalljsrequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "temporality": "", "timeAggregation": "sum" }],
"aggregations": [{ "metricName": "azure_webapplicationfirewalljsrequestcount_total", "reduceTo": "sum", "spaceAggregation": "sum", "timeAggregation": "sum" }],
"dataSource": "metrics", "disabled": false, "expression": "A",
"filter": { "expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $cdnprofile AND type = 'Microsoft.Cdn/profiles'" },
"filters": { "items": [
{ "id": "f016-name", "key": { "dataType": "string", "id": "name--string--", "key": "name", "type": "" }, "op": "IN", "value": "$cdnprofile" },
{ "id": "f016-sub", "key": { "id": "azuremonitor.subscription_id", "key": "azuremonitor.subscription_id", "type": "" }, "op": "=", "value": "$azuremonitor.subscription_id" },
{ "id": "f016-rg", "key": { "id": "resource_group", "key": "resource_group", "type": "" }, "op": "=", "value": "$resource_group" },
{ "id": "f016-type", "key": { "id": "type", "key": "type", "type": "" }, "op": "=", "value": "Microsoft.Cdn/profiles" }
], "op": "AND" },
"functions": [], "groupBy": [{ "dataType": "string", "id": "name--string--tag", "isColumn": false, "isJSON": false, "key": "name", "type": "tag" }],
"having": { "expression": "" }, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": null
}],

View File

@@ -272,7 +272,6 @@
"metricName": "azure_blobcapacity_average",
"reduceTo": "avg",
"spaceAggregation": "sum",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -282,52 +281,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "e4fcdf44-7f3a-498a-a940-7e51c0ee0207",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "35a98ed2-e48d-4eb5-80e2-53452199c5a9",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "8c85d60a-985b-474d-b92a-0303fa02ba7d",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -465,7 +418,6 @@
"metricName": "azure_blobcount_average",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -475,52 +427,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "d14f31c6-ad28-43cc-91a3-f7c18231c7e6",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "246f20e4-558c-4a69-9488-6fc3b0824264",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "a2a4fa45-7b95-4bd8-8737-1109215c489d",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -658,7 +564,6 @@
"metricName": "azure_containercount_average",
"reduceTo": "avg",
"spaceAggregation": "avg",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -668,52 +573,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "08a10d11-770a-4518-9eed-1cede51180cc",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "7a1fe360-f53f-486a-9581-8f975aa9dfd8",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "3864e736-3761-4b6b-8715-5dba6f9eae53",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -863,7 +722,6 @@
"metricName": "azure_availability_average",
"reduceTo": "avg",
"spaceAggregation": "min",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -873,52 +731,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "2e256002-761e-46da-ab9a-8dc0f33ac187",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "cb12f76b-e16e-4d92-aa88-d1bccf1fe9c0",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "fb865049-0636-4851-9da5-3c61ddff26a2",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1056,7 +868,6 @@
"metricName": "azure_egress_average",
"reduceTo": "sum",
"spaceAggregation": "sum",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -1066,52 +877,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "9716a7c9-ed42-4921-bad8-c5fb6b68fef2",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "2a7a68bf-9033-4494-b5c7-e82af92423e2",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "c9ea764d-b6af-4e93-b097-093ff562cc8e",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1247,7 +1012,6 @@
"metricName": "azure_ingress_average",
"reduceTo": "sum",
"spaceAggregation": "sum",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -1257,52 +1021,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "c5bb4e0b-f88a-4041-85f7-cbc07b5073bc",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "2b3de77d-2fde-465d-ba7e-9d7be8b6853a",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "adf659d5-6609-4720-98d0-4129321b63f7",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1438,7 +1156,6 @@
"metricName": "azure_successe2elatency_average",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -1448,52 +1165,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "725192d6-cdfa-466f-87b3-960980c26bc4",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "301cb143-a872-4b17-b335-cb638d8d7022",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "22b7d4ca-56b5-4bfc-b123-0f4988a961d0",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1629,7 +1300,6 @@
"metricName": "azure_successserverlatency_average",
"reduceTo": "avg",
"spaceAggregation": "max",
"temporality": "",
"timeAggregation": "avg"
}
],
@@ -1639,52 +1309,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "cccb9c11-9e54-40e3-9b75-21a753f0651a",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "32b7a033-1da0-43da-83cf-0beb7fb6eb5d",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "77d3f853-9720-46a6-ac71-405ccd2d16e1",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{
@@ -1820,7 +1444,6 @@
"metricName": "azure_transactions_total",
"reduceTo": "sum",
"spaceAggregation": "sum",
"temporality": "",
"timeAggregation": "sum"
}
],
@@ -1830,52 +1453,6 @@
"filter": {
"expression": "azuremonitor.subscription_id = $azuremonitor.subscription_id AND resource_group = $resource_group AND name IN $storageaccount AND type = 'Microsoft.Storage/storageAccounts/blobServices'"
},
"filters": {
"items": [
{
"id": "8ad4d515-5e1e-440c-870b-05315f919297",
"key": {
"dataType": "string",
"id": "name--string--",
"key": "name",
"type": ""
},
"op": "IN",
"value": "$storageaccount"
},
{
"id": "bbef20d9-4b62-49a2-b522-079f814406ca",
"key": {
"id": "azuremonitor.subscription_id",
"key": "azuremonitor.subscription_id",
"type": ""
},
"op": "=",
"value": "$azuremonitor.subscription_id"
},
{
"id": "ffbdf757-11b8-45d1-8190-50b4ec067839",
"key": {
"id": "resource_group",
"key": "resource_group",
"type": ""
},
"op": "=",
"value": "$resource_group"
},
{
"id": "65021cbd-add8-44c3-b5a3-16e1c582ccbb",
"key": {
"id": "type",
"key": "type",
"type": ""
},
"op": "=",
"value": "Microsoft.Storage/storageAccounts/blobServices"
}
],
"op": "AND"
},
"functions": [],
"groupBy": [
{

View File

@@ -380,7 +380,7 @@ func (handler *handler) UpdateService(rw http.ResponseWriter, r *http.Request) {
return
}
err = handler.module.CreateService(ctx, orgID, cloudIntegrationService, provider)
err = handler.module.CreateService(ctx, orgID, claims.Email, valuer.MustNewUUID(claims.IdentityID()), cloudIntegrationService, provider)
} else {
err = svc.CloudIntegrationService.Update(provider, serviceID, req.Config)
if err != nil {
@@ -388,7 +388,7 @@ func (handler *handler) UpdateService(rw http.ResponseWriter, r *http.Request) {
return
}
err = handler.module.UpdateService(ctx, orgID, svc.CloudIntegrationService, provider)
err = handler.module.UpdateService(ctx, orgID, claims.Email, valuer.MustNewUUID(claims.IdentityID()), svc.CloudIntegrationService, provider)
}
if err != nil {
render.Error(rw, err)

View File

@@ -6,7 +6,6 @@ import (
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
"github.com/SigNoz/signoz/pkg/types/dashboardtypes"
"github.com/SigNoz/signoz/pkg/valuer"
)
@@ -45,7 +44,7 @@ func (module *module) DisconnectAccount(ctx context.Context, orgID valuer.UUID,
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "disconnect account is not supported")
}
func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "create service is not supported")
}
@@ -57,7 +56,7 @@ func (module *module) ListServicesMetadata(ctx context.Context, orgID valuer.UUI
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "list services metadata is not supported")
}
func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "update service is not supported")
}
@@ -69,14 +68,6 @@ func (module *module) AgentCheckIn(ctx context.Context, orgID valuer.UUID, provi
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "agent check-in is not supported")
}
func (module *module) GetDashboardByID(ctx context.Context, orgID valuer.UUID, id string) (*dashboardtypes.Dashboard, error) {
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "get dashboard by ID is not supported")
}
func (module *module) ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "list dashboards is not supported")
}
func (module *module) Collect(context.Context, valuer.UUID) (map[string]any, error) {
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "stats collection is not supported")
}

View File

@@ -4,6 +4,7 @@ import (
"context"
"time"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/sqlstore"
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
"github.com/SigNoz/signoz/pkg/valuer"
@@ -186,6 +187,41 @@ func (store *store) ListServices(ctx context.Context, cloudIntegrationID valuer.
return services, nil
}
func (store *store) ListSharedServices(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, cloudIntegrationID valuer.UUID) (map[cloudintegrationtypes.ServiceID][]*cloudintegrationtypes.StorableCloudIntegrationService, error) {
// Subquery: service types that belong to the given account
ownTypes := store.store.BunDBCtx(ctx).
NewSelect().
TableExpr("cloud_integration_service").
ColumnExpr("type").
Where("cloud_integration_id = ?", cloudIntegrationID)
var services []*cloudintegrationtypes.StorableCloudIntegrationService
err := store.
store.
BunDBCtx(ctx).
NewSelect().
TableExpr("cloud_integration_service AS cis").
ColumnExpr("cis.*").
Join("JOIN cloud_integration AS ci ON ci.id = cis.cloud_integration_id").
Where("ci.org_id = ?", orgID).
Where("ci.provider = ?", provider).
Where("ci.removed_at IS NULL").
Where("ci.account_id IS NOT NULL").
Where("ci.last_agent_report IS NOT NULL").
Where("cis.cloud_integration_id != ?", cloudIntegrationID).
Where("cis.type IN (?)", ownTypes).
Scan(ctx, &services)
if err != nil {
return nil, err
}
result := make(map[cloudintegrationtypes.ServiceID][]*cloudintegrationtypes.StorableCloudIntegrationService)
for _, svc := range services {
result[svc.Type] = append(result[svc.Type], svc)
}
return result, nil
}
func (store *store) CreateService(ctx context.Context, service *cloudintegrationtypes.StorableCloudIntegrationService) error {
_, err := store.
store.
@@ -200,6 +236,24 @@ func (store *store) CreateService(ctx context.Context, service *cloudintegration
return nil
}
func (store *store) DeleteServicesByCloudIntegrationID(ctx context.Context, orgID, cloudIntegrationID valuer.UUID) error {
cte := store.store.BunDBCtx(ctx).
NewSelect().
TableExpr("cloud_integration_service AS cis_inner").
ColumnExpr("cis_inner.id").
Join("JOIN cloud_integration AS ci ON cis_inner.cloud_integration_id = ci.id").
Where("ci.org_id = ?", orgID).
Where("cis_inner.cloud_integration_id = ?", cloudIntegrationID)
_, err := store.store.BunDBCtx(ctx).
NewDelete().
Model(new(cloudintegrationtypes.StorableCloudIntegrationService)).
With("target", cte).
Where("id IN (SELECT id FROM target)").
Exec(ctx)
return err
}
func (store *store) UpdateService(ctx context.Context, service *cloudintegrationtypes.StorableCloudIntegrationService) error {
_, err := store.
store.
@@ -213,6 +267,62 @@ func (store *store) UpdateService(ctx context.Context, service *cloudintegration
return err
}
func (store *store) CreateIntegrationDashboard(ctx context.Context, integrationDashboard *cloudintegrationtypes.StorableIntegrationDashboard) error {
_, err := store.store.BunDBCtx(ctx).NewInsert().Model(integrationDashboard).Exec(ctx)
return err
}
func (store *store) GetIntegrationDashboardBySlug(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.IntegrationDashboardProviderType, slug string) (*cloudintegrationtypes.StorableIntegrationDashboard, error) {
integrationDashboard := new(cloudintegrationtypes.StorableIntegrationDashboard)
err := store.store.BunDBCtx(ctx).
NewSelect().
Model(integrationDashboard).
Join("JOIN dashboard AS d ON storable_integration_dashboard.dashboard_id = d.id").
Where("d.org_id = ?", orgID).
Where("storable_integration_dashboard.provider = ?", provider).
Where("storable_integration_dashboard.slug = ?", slug).
Scan(ctx)
if err != nil {
return nil, store.store.WrapNotFoundErrf(err, errors.CodeNotFound, "integration dashboard with slug %s not found", slug)
}
return integrationDashboard, nil
}
func (store *store) ListIntegrationDashboardsBySlugPrefix(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.IntegrationDashboardProviderType, slugPrefix string) ([]*cloudintegrationtypes.StorableIntegrationDashboard, error) {
var integrationDashboards []*cloudintegrationtypes.StorableIntegrationDashboard
err := store.store.BunDBCtx(ctx).
NewSelect().
Model(&integrationDashboards).
Join("JOIN dashboard AS d ON storable_integration_dashboard.dashboard_id = d.id").
Where("d.org_id = ?", orgID).
Where("storable_integration_dashboard.provider = ?", provider).
Where("storable_integration_dashboard.slug LIKE ?", slugPrefix+"%").
Scan(ctx)
if err != nil {
return nil, err
}
return integrationDashboards, nil
}
func (store *store) DeleteIntegrationDashboardBySlug(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.IntegrationDashboardProviderType, slug string) error {
cte := store.store.BunDBCtx(ctx).
NewSelect().
TableExpr("integration_dashboard AS id_inner").
ColumnExpr("id_inner.id").
Join("JOIN dashboard AS d ON id_inner.dashboard_id = d.id").
Where("d.org_id = ?", orgID).
Where("id_inner.provider = ?", provider).
Where("id_inner.slug = ?", slug)
_, err := store.store.BunDBCtx(ctx).
NewDelete().
Model(new(cloudintegrationtypes.StorableIntegrationDashboard)).
With("target", cte).
Where("id IN (SELECT id FROM target)").
Exec(ctx)
return err
}
func (store *store) RunInTx(ctx context.Context, cb func(ctx context.Context) error) error {
return store.store.RunInTxCtx(ctx, nil, func(ctx context.Context) error {
return cb(ctx)

View File

@@ -34,7 +34,7 @@ type Module interface {
// deletes the public sharing config and disables public sharing for the dashboard
DeletePublic(context.Context, valuer.UUID, valuer.UUID) error
Create(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, data dashboardtypes.PostableDashboard) (*dashboardtypes.Dashboard, error)
Create(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, source dashboardtypes.Source, data dashboardtypes.PostableDashboard) (*dashboardtypes.Dashboard, error)
Get(ctx context.Context, orgID valuer.UUID, id valuer.UUID) (*dashboardtypes.Dashboard, error)
@@ -46,6 +46,9 @@ type Module interface {
Delete(ctx context.Context, orgID valuer.UUID, id valuer.UUID) error
// DeleteUnsafe deletes a dashboard bypassing the guards. Intended for internal system callers.
DeleteUnsafe(ctx context.Context, orgID valuer.UUID, id valuer.UUID) error
GetByMetricNames(ctx context.Context, orgID valuer.UUID, metricNames []string) (map[string][]map[string]string, error)
statsreporter.StatsCollector

View File

@@ -60,7 +60,7 @@ func (handler *handler) Create(rw http.ResponseWriter, r *http.Request) {
dashboardMigrator.Migrate(ctx, req)
}
dashboard, err := handler.module.Create(ctx, orgID, claims.Email, valuer.MustNewUUID(claims.IdentityID()), req)
dashboard, err := handler.module.Create(ctx, orgID, claims.Email, valuer.MustNewUUID(claims.IdentityID()), dashboardtypes.SourceUser, req)
if err != nil {
render.Error(rw, err)
return

View File

@@ -37,8 +37,8 @@ func NewModule(store dashboardtypes.Store, settings factory.ProviderSettings, an
}
}
func (module *module) Create(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, postableDashboard dashboardtypes.PostableDashboard) (*dashboardtypes.Dashboard, error) {
dashboard, err := dashboardtypes.NewDashboard(orgID, createdBy, dashboardtypes.SourceUser, postableDashboard)
func (module *module) Create(ctx context.Context, orgID valuer.UUID, createdBy string, creator valuer.UUID, source dashboardtypes.Source, postableDashboard dashboardtypes.PostableDashboard) (*dashboardtypes.Dashboard, error) {
dashboard, err := dashboardtypes.NewDashboard(orgID, createdBy, source, postableDashboard)
if err != nil {
return nil, err
}
@@ -161,6 +161,10 @@ func (module *module) Delete(ctx context.Context, orgID valuer.UUID, id valuer.U
return nil
}
func (module *module) DeleteUnsafe(ctx context.Context, orgID valuer.UUID, id valuer.UUID) error {
return module.store.Delete(ctx, orgID, id)
}
func (module *module) GetByMetricNames(ctx context.Context, orgID valuer.UUID, metricNames []string) (map[string][]map[string]string, error) {
dashboards, err := module.List(ctx, orgID)
if err != nil {

View File

@@ -21,7 +21,7 @@ func NewStore(sqlstore sqlstore.SQLStore) dashboardtypes.Store {
func (store *store) Create(ctx context.Context, storabledashboard *dashboardtypes.StorableDashboard) error {
_, err := store.
sqlstore.
BunDB().
BunDBCtx(ctx).
NewInsert().
Model(storabledashboard).
Exec(ctx)

View File

@@ -63,7 +63,6 @@ import (
"github.com/SigNoz/signoz/pkg/query-service/postprocess"
"github.com/SigNoz/signoz/pkg/types"
"github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
"github.com/SigNoz/signoz/pkg/types/ctxtypes"
"github.com/SigNoz/signoz/pkg/types/dashboardtypes"
"github.com/SigNoz/signoz/pkg/types/featuretypes"
@@ -1113,20 +1112,7 @@ func (aH *APIHandler) Get(rw http.ResponseWriter, r *http.Request) {
dashboard := new(dashboardtypes.Dashboard)
if _, _, _, err := cloudintegrationtypes.ParseCloudIntegrationDashboardID(id); err == nil {
cloudIntegrationDashboard, err := aH.Signoz.Modules.CloudIntegration.GetDashboardByID(ctx, orgID, id)
if err != nil && !errorsV2.Ast(err, errorsV2.TypeLicenseUnavailable) {
render.Error(rw, errorsV2.Wrapf(err, errorsV2.TypeInternal, errorsV2.CodeInternal, "failed to get dashboard"))
return
}
if cloudIntegrationDashboard == nil {
render.Error(rw, errorsV2.Newf(errorsV2.TypeNotFound, errorsV2.CodeNotFound, "dashboard not found"))
return
}
dashboard = cloudIntegrationDashboard
} else if aH.IntegrationsController.IsInstalledIntegrationDashboardID(id) {
if aH.IntegrationsController.IsInstalledIntegrationDashboardID(id) {
integrationDashboard, apiErr := aH.IntegrationsController.GetInstalledIntegrationDashboardById(ctx, orgID, id)
if apiErr != nil {
render.Error(rw, errorsV2.Wrapf(apiErr, errorsV2.TypeInternal, errorsV2.CodeInternal, "failed to get dashboard"))
@@ -1189,15 +1175,6 @@ func (aH *APIHandler) List(rw http.ResponseWriter, r *http.Request) {
dashboards = append(dashboards, installedIntegrationDashboards...)
}
cloudIntegrationDashboards, err := aH.Signoz.Modules.CloudIntegration.ListDashboards(ctx, orgID)
if err != nil {
if !errors.Ast(err, errorsV2.TypeLicenseUnavailable) {
aH.logger.ErrorContext(ctx, "failed to get dashboards for cloud integrations", errors.Attr(err))
}
} else {
dashboards = append(dashboards, cloudIntegrationDashboards...)
}
gettableDashboards, err := dashboardtypes.NewGettableDashboardsFromDashboards(dashboards)
if err != nil {
render.Error(rw, err)

View File

@@ -205,6 +205,7 @@ func NewSQLMigrationProviderFactories(
sqlmigration.NewAddRoleCRUDTuplesFactory(sqlstore),
sqlmigration.NewAddIntegrationDashboardFactory(sqlstore, sqlschema),
sqlmigration.NewAddSourceToDashboardFactory(sqlstore, sqlschema),
sqlmigration.NewMigrateCloudIntegrationDashboardsFactory(sqlstore),
)
}

View File

@@ -112,7 +112,7 @@ func New(
auditorProviderFactories func(licensing.Licensing) factory.NamedMap[factory.ProviderFactory[auditor.Auditor, auditor.Config]],
meterReporterProviderFactories func(context.Context, factory.ProviderSettings, flagger.Flagger, licensing.Licensing, telemetrystore.TelemetryStore, retention.Getter, organization.Getter, zeus.Zeus) (factory.NamedMap[factory.ProviderFactory[meterreporter.Reporter, meterreporter.Config]], string),
querierHandlerCallback func(factory.ProviderSettings, querier.Querier, analytics.Analytics) querier.Handler,
cloudIntegrationCallback func(sqlstore.SQLStore, global.Global, zeus.Zeus, gateway.Gateway, licensing.Licensing, serviceaccount.Module, cloudintegration.Config) (cloudintegration.Module, error),
cloudIntegrationCallback func(sqlstore.SQLStore, dashboard.Module, global.Global, zeus.Zeus, gateway.Gateway, licensing.Licensing, serviceaccount.Module, cloudintegration.Config) (cloudintegration.Module, error),
rulerProviderFactories func(cache.Cache, alertmanager.Alertmanager, sqlstore.SQLStore, telemetrystore.TelemetryStore, telemetrytypes.MetadataStore, prometheus.Prometheus, organization.Getter, rulestatehistory.Module, querier.Querier, queryparser.QueryParser) factory.NamedMap[factory.ProviderFactory[ruler.Ruler, ruler.Config]],
) (*SigNoz, error) {
// Initialize instrumentation
@@ -458,7 +458,7 @@ func New(
serviceAccount := implserviceaccount.NewModule(implserviceaccount.NewStore(sqlstore), authz, cache, analytics, providerSettings, config.ServiceAccount)
cloudIntegrationModule, err := cloudIntegrationCallback(sqlstore, global, zeus, gateway, licensing, serviceAccount, config.CloudIntegration)
cloudIntegrationModule, err := cloudIntegrationCallback(sqlstore, dashboard, global, zeus, gateway, licensing, serviceAccount, config.CloudIntegration)
if err != nil {
return nil, err
}

View File

@@ -0,0 +1,284 @@
package sqlmigration
import (
"context"
"embed"
"encoding/json"
"fmt"
"io/fs"
"path/filepath"
"strings"
"time"
"github.com/SigNoz/signoz/pkg/factory"
"github.com/SigNoz/signoz/pkg/sqlstore"
"github.com/SigNoz/signoz/pkg/valuer"
"github.com/uptrace/bun"
"github.com/uptrace/bun/migrate"
)
//go:embed 086_migrate_ci_dashboards
var cloudIntegrationDashboardFiles embed.FS
var (
cloudProviderAWS = valuer.NewString("aws")
cloudProviderAzure = valuer.NewString("azure")
integrationSource = valuer.NewString("integration")
cloudIntegrationProvider = valuer.NewString("cloud_integration")
)
type migrateCloudIntegrationDashboards struct {
sqlstore sqlstore.SQLStore
}
type cloudIntegrationAccountRow struct {
bun.BaseModel `bun:"table:cloud_integration"`
ID string `bun:"id"`
OrgID string `bun:"org_id"`
Provider string `bun:"provider"`
}
type cloudIntegrationServiceRow struct {
bun.BaseModel `bun:"table:cloud_integration_service"`
Type string `bun:"type"`
Config string `bun:"config"`
CloudIntegrationID string `bun:"cloud_integration_id"`
}
type cloudIntegrationAWSServiceConfig struct {
Metrics *cloudIntegrationMetricsConfig `json:"metrics"`
}
type cloudIntegrationAzureServiceConfig struct {
Metrics *cloudIntegrationMetricsConfig `json:"metrics"`
}
type cloudIntegrationMetricsConfig struct {
Enabled bool `json:"enabled"`
}
type cloudIntegrationDashboardRow struct {
bun.BaseModel `bun:"table:dashboard"`
ID string `bun:"id,pk,type:text"`
CreatedAt time.Time `bun:"created_at"`
UpdatedAt time.Time `bun:"updated_at"`
CreatedBy *string `bun:"created_by,type:text"`
UpdatedBy *string `bun:"updated_by,type:text"`
Data string `bun:"data,type:text"`
Locked bool `bun:"locked"`
OrgID string `bun:"org_id,type:text"`
Source string `bun:"source,type:text"`
}
type cloudIntegrationAccountMeta struct {
orgID string
provider string
}
type cloudIntegrationOrgService struct {
orgID string
provider string
serviceID string
}
type integrationDashboardRow struct {
bun.BaseModel `bun:"table:integration_dashboard"`
ID string `bun:"id,pk,type:text"`
DashboardID string `bun:"dashboard_id,type:text"`
Provider string `bun:"provider,type:text"`
Slug string `bun:"slug,type:text"`
CreatedAt time.Time `bun:"created_at"`
UpdatedAt time.Time `bun:"updated_at"`
}
func NewMigrateCloudIntegrationDashboardsFactory(sqlstore sqlstore.SQLStore) factory.ProviderFactory[SQLMigration, Config] {
return factory.NewProviderFactory(
// migrate_cloud_integration_dashboards name is intentionally kept short to avoid hitting identifier length limits
factory.MustNewName("migrate_ci_dashboards"),
func(ctx context.Context, ps factory.ProviderSettings, c Config) (SQLMigration, error) {
return &migrateCloudIntegrationDashboards{sqlstore: sqlstore}, nil
},
)
}
func (m *migrateCloudIntegrationDashboards) Register(migrations *migrate.Migrations) error {
return migrations.Register(m.Up, m.Down)
}
func (m *migrateCloudIntegrationDashboards) Up(ctx context.Context, db *bun.DB) error {
dashboardDefs, err := m.loadDashboardDefs()
if err != nil {
return err
}
tx, err := db.BeginTx(ctx, nil)
if err != nil {
return err
}
defer func() { _ = tx.Rollback() }()
var accounts []*cloudIntegrationAccountRow
if err := tx.NewSelect().
Model(&accounts).
Where("removed_at IS NULL").
Where("account_id IS NOT NULL").
Scan(ctx); err != nil {
return err
}
accountsMap := make(map[string]cloudIntegrationAccountMeta, len(accounts))
for _, a := range accounts {
accountsMap[a.ID] = cloudIntegrationAccountMeta{orgID: a.OrgID, provider: a.Provider}
}
var services []*cloudIntegrationServiceRow
if err := tx.NewSelect().Model(&services).Scan(ctx); err != nil {
return err
}
seen := make(map[string]struct{})
var toProvision []cloudIntegrationOrgService
for _, svc := range services {
meta, ok := accountsMap[svc.CloudIntegrationID]
if !ok {
continue
}
if !m.isMetricsEnabled(svc.Config, meta.provider) {
continue
}
key := fmt.Sprintf("%s|%s|%s", meta.orgID, meta.provider, svc.Type)
if _, dup := seen[key]; dup {
continue
}
seen[key] = struct{}{}
toProvision = append(toProvision, cloudIntegrationOrgService{
orgID: meta.orgID,
provider: meta.provider,
serviceID: svc.Type,
})
}
now := time.Now()
for _, service := range toProvision {
serviceDashboards, ok := dashboardDefs[service.provider][service.serviceID]
if !ok {
continue
}
for dashName, dashboardJSON := range serviceDashboards {
slug := fmt.Sprintf("%s-%s-%s", service.provider, service.serviceID, dashName)
count, err := tx.NewSelect().
TableExpr("integration_dashboard AS id").
Join("JOIN dashboard AS d ON id.dashboard_id = d.id").
Where("d.org_id = ?", service.orgID).
Where("id.provider = ?", "cloud_integration").
Where("id.slug = ?", slug).
Count(ctx)
if err != nil {
return err
}
if count > 0 {
continue
}
dashID := valuer.GenerateUUID().StringValue()
dashRow := &cloudIntegrationDashboardRow{
ID: dashID,
CreatedAt: now,
UpdatedAt: now,
Data: string(dashboardJSON),
Locked: true,
OrgID: service.orgID,
Source: integrationSource.StringValue(),
}
if _, err := tx.NewInsert().Model(dashRow).Exec(ctx); err != nil {
return err
}
intRow := &integrationDashboardRow{
ID: valuer.GenerateUUID().StringValue(),
DashboardID: dashID,
Provider: cloudIntegrationProvider.StringValue(),
Slug: slug,
CreatedAt: now,
UpdatedAt: now,
}
if _, err := tx.NewInsert().Model(intRow).Exec(ctx); err != nil {
return err
}
}
}
return tx.Commit()
}
func (m *migrateCloudIntegrationDashboards) Down(context.Context, *bun.DB) error {
return nil
}
func (m *migrateCloudIntegrationDashboards) loadDashboardDefs() (map[string]map[string]map[string]json.RawMessage, error) {
result := make(map[string]map[string]map[string]json.RawMessage)
err := fs.WalkDir(cloudIntegrationDashboardFiles, "086_migrate_ci_dashboards", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() || filepath.Ext(path) != ".json" {
return nil
}
// path: 086_cloud_integration_dashboards/{provider}/{service}/{file}.json
rel := strings.TrimPrefix(path, "086_migrate_ci_dashboards/")
parts := strings.SplitN(rel, "/", 3)
if len(parts) != 3 {
return nil
}
provider := parts[0]
serviceID := parts[1]
dashName := strings.TrimSuffix(parts[2], ".json")
data, err := cloudIntegrationDashboardFiles.ReadFile(path)
if err != nil {
return err
}
if result[provider] == nil {
result[provider] = make(map[string]map[string]json.RawMessage)
}
if result[provider][serviceID] == nil {
result[provider][serviceID] = make(map[string]json.RawMessage)
}
result[provider][serviceID][dashName] = json.RawMessage(data)
return nil
})
return result, err
}
func (m *migrateCloudIntegrationDashboards) isMetricsEnabled(configJSON string, provider string) bool {
switch provider {
case cloudProviderAWS.String():
cfg := new(cloudIntegrationAWSServiceConfig)
if err := json.Unmarshal([]byte(configJSON), cfg); err != nil {
return false
}
return cfg.Metrics != nil && cfg.Metrics.Enabled
case cloudProviderAzure.String():
cfg := new(cloudIntegrationAzureServiceConfig)
if err := json.Unmarshal([]byte(configJSON), cfg); err != nil {
return false
}
return cfg.Metrics != nil && cfg.Metrics.Enabled
}
return false
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More